[BlackBerry] GeolocationClientBB should show file system path in prompts when host...
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 7 Dec 2012 20:22:35 +0000 (20:22 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 7 Dec 2012 20:22:35 +0000 (20:22 +0000)
https://bugs.webkit.org/show_bug.cgi?id=103785

PR 247656

Patch by Otto Derek Cheung <otcheung@rim.com> on 2012-12-07
Reviewed by Rob Buis.

Adding a special case for origins with protocol "file". We will use the filepath as
an origin when asking for geolocation permission.

If the origin is unique (ie. from a sandboxed iframe), we will fail the location request
right away.

* WebCoreSupport/GeolocationClientBlackBerry.cpp:
(getOrigin):
(GeolocationClientBlackBerry::requestPermission):
(GeolocationClientBlackBerry::cancelPermissionRequest):

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

Source/WebKit/blackberry/ChangeLog
Source/WebKit/blackberry/WebCoreSupport/GeolocationClientBlackBerry.cpp

index e40b926..7b04773 100644 (file)
@@ -1,3 +1,23 @@
+2012-12-07  Otto Derek Cheung  <otcheung@rim.com>
+
+        [BlackBerry] GeolocationClientBB should show file system path in prompts when host is not avaliable
+        https://bugs.webkit.org/show_bug.cgi?id=103785
+
+        PR 247656
+
+        Reviewed by Rob Buis.
+
+        Adding a special case for origins with protocol "file". We will use the filepath as
+        an origin when asking for geolocation permission.
+
+        If the origin is unique (ie. from a sandboxed iframe), we will fail the location request
+        right away.
+
+        * WebCoreSupport/GeolocationClientBlackBerry.cpp:
+        (getOrigin):
+        (GeolocationClientBlackBerry::requestPermission):
+        (GeolocationClientBlackBerry::cancelPermissionRequest):
+
 2012-12-07  Mike Lattanzio  <mlattanzio@rim.com>
 
         [BlackBerry] Update BlackBerry Port to use new Graphics::createBuffer BufferType enum values.
 2012-12-07  Mike Lattanzio  <mlattanzio@rim.com>
 
         [BlackBerry] Update BlackBerry Port to use new Graphics::createBuffer BufferType enum values.
index 499ae4c..a927967 100644 (file)
 
 using namespace WebCore;
 
 
 using namespace WebCore;
 
+static String getOrigin(Frame* frame) 
+{
+    String origin; 
+    SecurityOrigin* securityOrigin = frame->document()->securityOrigin();
+
+    // Special case for file.
+    if (securityOrigin->protocol() == "file")
+        origin = securityOrigin->fileSystemPath();
+    else
+        origin = securityOrigin->toString();
+
+    return origin;
+}
+
 GeolocationClientBlackBerry::GeolocationClientBlackBerry(BlackBerry::WebKit::WebPagePrivate* webPagePrivate)
     : m_webPagePrivate(webPagePrivate)
     , m_accuracy(false)
 GeolocationClientBlackBerry::GeolocationClientBlackBerry(BlackBerry::WebKit::WebPagePrivate* webPagePrivate)
     : m_webPagePrivate(webPagePrivate)
     , m_accuracy(false)
@@ -69,13 +83,16 @@ void GeolocationClientBlackBerry::requestPermission(Geolocation* location)
     if (!frame)
         return;
 
     if (!frame)
         return;
 
-    // FIXME: The geolocation setting for WebSettings is always true. Nothing ever toggles that setting.
     if (!m_webPagePrivate->m_webSettings->isGeolocationEnabled()) {
         location->setIsAllowed(false);
         return;
     }
 
     if (!m_webPagePrivate->m_webSettings->isGeolocationEnabled()) {
         location->setIsAllowed(false);
         return;
     }
 
-    const String origin = frame->document()->securityOrigin()->toString();
+    const String origin = getOrigin(frame);
+
+    // Special case for documents with the isUnique flag on. (ie. sandboxed iframes)
+    if (origin == "null")
+        location->setIsAllowed(false);
 
     // Check global location setting, if it is off then we request an infobar that invokes a location settings card.
     // If it's on, then we request an infobar that allows the site to have permission to use geolocation.
 
     // Check global location setting, if it is off then we request an infobar that invokes a location settings card.
     // If it's on, then we request an infobar that allows the site to have permission to use geolocation.
@@ -109,7 +126,7 @@ void GeolocationClientBlackBerry::cancelPermissionRequest(Geolocation* location)
     if (!frame)
         return;
 
     if (!frame)
         return;
 
-    const String origin = frame->document()->securityOrigin()->toString();
+    const String origin = getOrigin(frame);
 
     // Remove the geolocation from the pending permission map.
     HashMap<String, Vector<RefPtr<Geolocation> > >::iterator it = m_geolocationRequestMap.find(origin);
 
     // Remove the geolocation from the pending permission map.
     HashMap<String, Vector<RefPtr<Geolocation> > >::iterator it = m_geolocationRequestMap.find(origin);