summaryrefslogtreecommitdiffstats
path: root/WebCore/platform/android
diff options
context:
space:
mode:
authorSteve Block <steveblock@google.com>2009-10-28 11:29:58 +0000
committerSteve Block <steveblock@google.com>2009-11-05 06:42:49 +0000
commitb999b2f567121b11fe014341931a72a5a7a6f4b4 (patch)
tree6d8ec5a53c72e138a3379ca2c3b1290c4e6e5be7 /WebCore/platform/android
parent2675a5cf2dfbe6a2b08e57bd2e7594c68e8025a2 (diff)
downloadexternal_webkit-b999b2f567121b11fe014341931a72a5a7a6f4b4.zip
external_webkit-b999b2f567121b11fe014341931a72a5a7a6f4b4.tar.gz
external_webkit-b999b2f567121b11fe014341931a72a5a7a6f4b4.tar.bz2
Stop Geolocation service when browser tab is in the background.
This is a fix for bug http://b/issue?id=2211437 Change-Id: Id44b5b5679a302ecb16d5f493ea900d252faf2dc
Diffstat (limited to 'WebCore/platform/android')
-rw-r--r--WebCore/platform/android/GeolocationServiceAndroid.cpp23
-rw-r--r--WebCore/platform/android/GeolocationServiceAndroid.h3
2 files changed, 24 insertions, 2 deletions
diff --git a/WebCore/platform/android/GeolocationServiceAndroid.cpp b/WebCore/platform/android/GeolocationServiceAndroid.cpp
index 024877e..20185ce 100644
--- a/WebCore/platform/android/GeolocationServiceAndroid.cpp
+++ b/WebCore/platform/android/GeolocationServiceAndroid.cpp
@@ -50,6 +50,7 @@ public:
~GeolocationServiceBridge();
void start();
+ void stop();
void setEnableGps(bool enable);
// Static wrapper functions to hide JNI nastiness.
@@ -109,6 +110,7 @@ GeolocationServiceBridge::GeolocationServiceBridge(ListenerInterface* listener)
GeolocationServiceBridge::~GeolocationServiceBridge()
{
+ stop();
stopJavaImplementation();
}
@@ -119,6 +121,13 @@ void GeolocationServiceBridge::start()
javaGeolocationServiceClassMethodIDs[GEOLOCATION_SERVICE_METHOD_START]);
}
+void GeolocationServiceBridge::stop()
+{
+ ASSERT(m_javaGeolocationServiceObject);
+ getJNIEnv()->CallVoidMethod(m_javaGeolocationServiceObject,
+ javaGeolocationServiceClassMethodIDs[GEOLOCATION_SERVICE_METHOD_STOP]);
+}
+
void GeolocationServiceBridge::setEnableGps(bool enable)
{
ASSERT(m_javaGeolocationServiceObject);
@@ -253,8 +262,6 @@ void GeolocationServiceBridge::stopJavaImplementation()
{
// Called by GeolocationServiceAndroid on WebKit thread.
ASSERT(m_javaGeolocationServiceObject);
- getJNIEnv()->CallVoidMethod(m_javaGeolocationServiceObject,
- javaGeolocationServiceClassMethodIDs[GEOLOCATION_SERVICE_METHOD_STOP]);
getJNIEnv()->DeleteGlobalRef(m_javaGeolocationServiceObject);
}
@@ -320,6 +327,18 @@ void GeolocationServiceAndroid::stopUpdating()
m_lastError = 0;
}
+void GeolocationServiceAndroid::suspend()
+{
+ ASSERT(m_javaBridge);
+ m_javaBridge->stop();
+}
+
+void GeolocationServiceAndroid::resume()
+{
+ ASSERT(m_javaBridge);
+ m_javaBridge->start();
+}
+
// Note that there is no guarantee that subsequent calls to this method offer a
// more accurate or updated position.
void GeolocationServiceAndroid::newPositionAvailable(PassRefPtr<Geoposition> position)
diff --git a/WebCore/platform/android/GeolocationServiceAndroid.h b/WebCore/platform/android/GeolocationServiceAndroid.h
index f233f9a..0eed8d7 100644
--- a/WebCore/platform/android/GeolocationServiceAndroid.h
+++ b/WebCore/platform/android/GeolocationServiceAndroid.h
@@ -51,6 +51,9 @@ namespace WebCore {
virtual Geoposition* lastPosition() const { return m_lastPosition.get(); }
virtual PositionError* lastError() const { return m_lastError.get(); }
+ virtual void suspend();
+ virtual void resume();
+
// Android-specific
void newPositionAvailable(PassRefPtr<Geoposition>);
void newErrorAvailable(PassRefPtr<PositionError>);