• 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 #include "config.h"
27 #include "GeolocationManager.h"
28 
29 #include "GeolocationClientImpl.h"
30 #include "WebViewCore.h"
31 
32 #include <Frame.h>
33 #include <GeolocationError.h>
34 #include <GeolocationPosition.h>
35 #include <JNIHelp.h>
36 #include <Page.h>
37 
38 using WebCore::GeolocationClient;
39 using WebCore::GeolocationClientMock;
40 
41 namespace android {
42 
GeolocationManager(WebViewCore * webViewCore)43 GeolocationManager::GeolocationManager(WebViewCore* webViewCore)
44     : m_useMock(false)
45     , m_webViewCore(webViewCore)
46 {
47 }
48 
client() const49 GeolocationClient* GeolocationManager::client() const
50 {
51     if (m_useMock)
52         return mockClient();
53     return realClient();
54 }
55 
suspendRealClient()56 void GeolocationManager::suspendRealClient()
57 {
58     // Don't create the real client if it's not present.
59     if (m_realClient)
60         m_realClient->suspend();
61 }
62 
resumeRealClient()63 void GeolocationManager::resumeRealClient()
64 {
65     // Don't create the real client if it's not present.
66     if (m_realClient)
67         m_realClient->resume();
68 }
69 
resetRealClientTemporaryPermissionStates()70 void GeolocationManager::resetRealClientTemporaryPermissionStates()
71 {
72     // Don't create the real client if it's not present.
73     if (m_realClient)
74         m_realClient->resetTemporaryPermissionStates();
75 }
76 
provideRealClientPermissionState(WTF::String origin,bool allow,bool remember)77 void GeolocationManager::provideRealClientPermissionState(WTF::String origin, bool allow, bool remember)
78 {
79     // Don't create the real client if it's not present.
80     if (m_realClient)
81         m_realClient->providePermissionState(origin, allow, remember);
82 }
83 
setUseMock()84 void GeolocationManager::setUseMock()
85 {
86     m_useMock = true;
87     m_mockClient.clear();
88 }
89 
setMockPosition(PassRefPtr<WebCore::GeolocationPosition> position)90 void GeolocationManager::setMockPosition(PassRefPtr<WebCore::GeolocationPosition> position)
91 {
92     ASSERT(m_useMock);
93     mockClient()->setPosition(position);
94 }
95 
setMockError(PassRefPtr<WebCore::GeolocationError> error)96 void GeolocationManager::setMockError(PassRefPtr<WebCore::GeolocationError> error)
97 {
98     ASSERT(m_useMock);
99     mockClient()->setError(error);
100 }
101 
setMockPermission(bool allowed)102 void GeolocationManager::setMockPermission(bool allowed)
103 {
104     ASSERT(m_useMock);
105     mockClient()->setPermission(allowed);
106 }
107 
realClient() const108 GeolocationClientImpl* GeolocationManager::realClient() const
109 {
110     if (!m_realClient)
111         m_realClient.set(new GeolocationClientImpl(m_webViewCore));
112     return m_realClient.get();
113 }
114 
mockClient() const115 GeolocationClientMock* GeolocationManager::mockClient() const
116 {
117     ASSERT(m_useMock);
118     if (!m_mockClient) {
119         m_mockClient.set(new GeolocationClientMock);
120         m_mockClient->setController(m_webViewCore->mainFrame()->page()->geolocationController());
121     }
122     return m_mockClient.get();
123 }
124 
125 } // namespace android
126