Skip to content
Permalink
Browse files
Need to be able to configure Geolocation policy regarding user permis…
…sions

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:



Canonical link: https://commits.webkit.org/54580@main
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@63742 268f45cc-cd09-0410-ab3c-d52691b4dbfc
  • Loading branch information
Mahesh Kulkarni authored and bbandix committed Jul 20, 2010
1 parent 5872066 commit ed0b111fb5d5627af079bf6c61d96e71a8e54a5e
Showing with 55 additions and 7 deletions.
  1. +12 −0 JavaScriptCore/ChangeLog
  2. +7 −0 JavaScriptCore/wtf/Platform.h
  3. +20 −0 WebCore/ChangeLog
  4. +3 −0 WebCore/WebCore.pro
  5. +11 −6 WebCore/page/Geolocation.cpp
  6. +2 −1 WebCore/page/Geolocation.h
@@ -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.
@@ -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 */
@@ -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.
@@ -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 += \
@@ -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,22 +616,23 @@ 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;

Page* page = m_frame->page();
if (!page)
return false;

// FIXME: Pass options to client.
page->geolocationController()->addObserver(this);
return true;
#else
@@ -165,7 +165,8 @@ class Geolocation : public RefCounted<Geolocation>
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;

0 comments on commit ed0b111

Please sign in to comment.