• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2012, The Android Open Source Project
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *  * Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  *  * Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25 
26 #ifndef GeolocationManager_h
27 #define GeolocationManager_h
28 
29 #include "GeolocationClientImpl.h"
30 
31 #include <GeolocationClientMock.h>
32 #include <OwnPtr.h>
33 #include <PassRefPtr.h>
34 
35 namespace WebCore {
36 class GeolocationError;
37 class GeolocationPosition;
38 }
39 
40 namespace android {
41 
42 class GeolocationClientImpl;
43 class WebViewCore;
44 
45 // This class takes care of the fact that the client used for Geolocation
46 // may be either the real implementation or a mock. It also handles setting the
47 // data on the mock client. This class is owned by WebViewCore and exists to
48 // keep cruft out of that class.
49 class GeolocationManager {
50 public:
51     GeolocationManager(WebViewCore*);
52 
53     // For use by GeolocationClientAndroid. Gets the current client, either the
54     // real or mock.
55     WebCore::GeolocationClient* client() const;
56 
57     void suspendRealClient();
58     void resumeRealClient();
59     void resetRealClientTemporaryPermissionStates();
60     void provideRealClientPermissionState(WTF::String origin, bool allow, bool remember);
61 
62     // Sets use of the Geolocation mock client. Also resets that client.
63     void setUseMock();
64     void setMockPosition(PassRefPtr<WebCore::GeolocationPosition>);
65     void setMockError(PassRefPtr<WebCore::GeolocationError>);
66     void setMockPermission(bool allowed);
67 
68 private:
69     GeolocationClientImpl* realClient() const;
70     WebCore::GeolocationClientMock* mockClient() const;
71 
72     bool m_useMock;
73     WebViewCore* m_webViewCore;
74     mutable OwnPtr<GeolocationClientImpl> m_realClient;
75     mutable OwnPtr<WebCore::GeolocationClientMock> m_mockClient;
76 };
77 
78 } // namespace android
79 
80 #endif // GeolocationManager_h
81