Need to be able to configure Geolocation policy regarding user permissions
authorabecsi@webkit.org <abecsi@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 20 Jul 2010 14:24:47 +0000 (14:24 +0000)
committerabecsi@webkit.org <abecsi@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 20 Jul 2010 14:24:47 +0000 (14:24 +0000)
https://bugs.webkit.org/show_bug.cgi?id=42068

Patch by Mahesh Kulkarni <mahesh.kulkarni@nokia.com> on 2010-07-20
Reviewed by Steve Block.

JavaScriptCore:

If CLIENT_BASED_GEOLOCATION is enabled, enable preemtive permission policy
by default

* wtf/Platform.h:

WebCore:

Introducing new USE() flag PREEMPT_GEOLOCATION_PREMISSION using which
acquires user permission first before starting location service

This change does not introduce any change in behavior for any platform. So there are no new tests
added.

* WebCore.pro:
* page/Geolocation.cpp:
(WebCore::Geolocation::startRequest):
(WebCore::Geolocation::setIsAllowed):
(WebCore::Geolocation::startUpdating):
* page/Geolocation.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@63742 268f45cc-cd09-0410-ab3c-d52691b4dbfc

JavaScriptCore/ChangeLog
JavaScriptCore/wtf/Platform.h
WebCore/ChangeLog
WebCore/WebCore.pro
WebCore/page/Geolocation.cpp
WebCore/page/Geolocation.h

index ba2ce52..19a10d6 100644 (file)
@@ -1,3 +1,15 @@
+2010-07-20  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>
+
+        Reviewed by Steve Block.
+
+        Need to be able to configure Geolocation policy regarding user permissions
+        https://bugs.webkit.org/show_bug.cgi?id=42068
+
+        If CLIENT_BASED_GEOLOCATION is enabled, enable preemtive permission policy
+        by default 
+
+        * wtf/Platform.h:
+        
 2010-07-19  Dirk Schulze  <krit@webkit.org>
 
         Reviewed by Nikolas Zimmermann.
index c62a274..0204dcb 100644 (file)
@@ -1116,4 +1116,11 @@ on MinGW. See https://bugs.webkit.org/show_bug.cgi?id=29268 */
 #define WTF_USE_PLATFORM_STRATEGIES 1
 #endif
 
+/* Geolocation request policy. pre-emptive policy is to acquire user permission before acquiring location.
+   Client based implementations will have option to choose between pre-emptive and nonpre-emptive permission policy.
+   pre-emptive permission policy is enabled by default for all client-based implementations. */
+#if ENABLE(CLIENT_BASED_GEOLOCATION)
+#define WTF_USE_PREEMPT_GEOLOCATION_PERMISSION
+#endif
+
 #endif /* WTF_Platform_h */
index 3a4b25d..19c18d7 100644 (file)
@@ -1,3 +1,23 @@
+2010-07-20  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>
+
+        Reviewed by Steve Block.
+
+        Need to be able to configure Geolocation policy regarding user permissions
+        https://bugs.webkit.org/show_bug.cgi?id=42068
+
+        Introducing new USE() flag PREEMPT_GEOLOCATION_PREMISSION using which
+        acquires user permission first before starting location service
+
+        This change does not introduce any change in behavior for any platform. So there are no new tests
+        added.
+
+        * WebCore.pro:
+        * page/Geolocation.cpp:
+        (WebCore::Geolocation::startRequest):
+        (WebCore::Geolocation::setIsAllowed):
+        (WebCore::Geolocation::startUpdating):
+        * page/Geolocation.h:
+
 2010-07-20  Alexander Pavlov  <apavlov@chromium.org>
 
         Reviewed by Pavel Feldman.
index f342dba..18042ea 100644 (file)
@@ -2707,6 +2707,9 @@ contains(DEFINES, ENABLE_QT_BEARER=1) {
 }
 
 contains(DEFINES, ENABLE_GEOLOCATION=1) {
+    # if geolocation is enabled, enable pre-request for permission policy
+    DEFINES += WTF_USE_PREEMPT_GEOLOCATION_PERMISSION
+
     HEADERS += \
         platform/qt/GeolocationServiceQt.h
     SOURCES += \
index 10e5d3b..8532901 100644 (file)
@@ -279,7 +279,7 @@ PassRefPtr<Geolocation::GeoNotifier> Geolocation::startRequest(PassRefPtr<Positi
     else if (haveSuitableCachedPosition(notifier->m_options.get()))
         notifier->setUseCachedPosition();
     else if (notifier->hasZeroTimeout() || startUpdating(notifier.get())) {
-#if ENABLE(CLIENT_BASED_GEOLOCATION)
+#if USE(PREEMPT_GEOLOCATION_PERMISSION)
         // Only start timer if we're not waiting for user permission.
         if (!m_startRequestPermissionNotifier)
 #endif            
@@ -400,18 +400,22 @@ void Geolocation::setIsAllowed(bool allowed)
     // position.
     m_allowGeolocation = allowed ? Yes : No;
     
-#if ENABLE(CLIENT_BASED_GEOLOCATION)
+#if USE(PREEMPT_GEOLOCATION_PERMISSION)
     if (m_startRequestPermissionNotifier) {
         if (isAllowed()) {
             // Permission request was made during the startUpdating process
             m_startRequestPermissionNotifier->startTimerIfNeeded();
             m_startRequestPermissionNotifier = 0;
+#if ENABLE(CLIENT_BASED_GEOLOCATION)
             if (!m_frame)
                 return;
             Page* page = m_frame->page();
             if (!page)
                 return;
             page->geolocationController()->addObserver(this);
+#else
+            // TODO: Handle startUpdate() for non-client based implementations using pre-emptive policy
+#endif
         } else {
             m_startRequestPermissionNotifier->setFatalError(PositionError::create(PositionError::PERMISSION_DENIED, permissionDeniedErrorMessage));
             m_oneShots.add(m_startRequestPermissionNotifier);
@@ -612,15 +616,15 @@ void Geolocation::geolocationServiceErrorOccurred(GeolocationService* service)
 
 bool Geolocation::startUpdating(GeoNotifier* notifier)
 {
-#if ENABLE(CLIENT_BASED_GEOLOCATION)
-    // FIXME: Pass options to client.
-
+#if USE(PREEMPT_GEOLOCATION_PERMISSION)
     if (!isAllowed()) {
         m_startRequestPermissionNotifier = notifier;
         requestPermission();
         return true;
     }
-    
+#endif
+
+#if ENABLE(CLIENT_BASED_GEOLOCATION)
     if (!m_frame)
         return false;
 
@@ -628,6 +632,7 @@ bool Geolocation::startUpdating(GeoNotifier* notifier)
     if (!page)
         return false;
 
+    // FIXME: Pass options to client.
     page->geolocationController()->addObserver(this);
     return true;
 #else
index 4132bfe..8c47d9c 100644 (file)
@@ -165,7 +165,8 @@ private:
     Frame* m_frame;
 #if !ENABLE(CLIENT_BASED_GEOLOCATION)
     OwnPtr<GeolocationService> m_service;
-#else
+#endif
+#if USE(PREEMPT_GEOLOCATION_PERMISSION)
     RefPtr<GeoNotifier> m_startRequestPermissionNotifier;
 #endif
     RefPtr<Geoposition> m_lastPosition;