Adds WebKit-side of logic to make Geolocation obey Browser 'Enagle Location' setting.
This fixes bug http://b/issue?id=2067559.
diff --git a/WebKit/android/WebCoreSupport/GeolocationPermissions.cpp b/WebKit/android/WebCoreSupport/GeolocationPermissions.cpp
index ca84f17..1462ce2 100755
--- a/WebKit/android/WebCoreSupport/GeolocationPermissions.cpp
+++ b/WebKit/android/WebCoreSupport/GeolocationPermissions.cpp
@@ -43,6 +43,7 @@
// the browser closes and read them on startup.
GeolocationPermissions::PermissionsMap GeolocationPermissions::s_permanentPermissions;
GeolocationPermissions::GeolocationPermissionsVector GeolocationPermissions::s_instances;
+bool GeolocationPermissions::s_alwaysDeny = false;
GeolocationPermissions::GeolocationPermissions(WebViewCore* webViewCore, Frame* mainFrame)
: m_webViewCore(webViewCore)
@@ -66,6 +67,12 @@
// the SecurityOrigin pointer for equality is insufficient.
String originString = frame->document()->securityOrigin()->toString();
+ // If we've been told to always deny requests, do so.
+ if (s_alwaysDeny) {
+ makeAsynchronousCallbackToGeolocation(originString, false);
+ return;
+ }
+
// See if we have a record for this origin in the temporary permissions for
// this tab. These take precedence over permanent permissions.
PermissionsMap::const_iterator iter = m_temporaryPermissions.find(originString);
@@ -243,4 +250,9 @@
s_permanentPermissions.clear();
}
+void GeolocationPermissions::setAlwaysDeny(bool deny)
+{
+ s_alwaysDeny = deny;
+}
+
} // namespace android
diff --git a/WebKit/android/WebCoreSupport/GeolocationPermissions.h b/WebKit/android/WebCoreSupport/GeolocationPermissions.h
index 1dbc3da..9ae11af 100755
--- a/WebKit/android/WebCoreSupport/GeolocationPermissions.h
+++ b/WebKit/android/WebCoreSupport/GeolocationPermissions.h
@@ -86,6 +86,7 @@
static bool getAllowed(WebCore::String origin);
static void clear(WebCore::String origin);
static void clearAll();
+ static void setAlwaysDeny(bool deny);
private:
// Records the permission state for the specified origin.
@@ -128,6 +129,7 @@
};
CallbackData m_callbackData;
+ static bool s_alwaysDeny;
};
} // namespace android
diff --git a/WebKit/android/jni/WebSettings.cpp b/WebKit/android/jni/WebSettings.cpp
index eca03cc..dcc4ab6 100644
--- a/WebKit/android/jni/WebSettings.cpp
+++ b/WebKit/android/jni/WebSettings.cpp
@@ -100,6 +100,7 @@
#if ENABLE(WORKERS)
mWorkersEnabled = env->GetFieldID(clazz, "mWorkersEnabled", "Z");
#endif
+ mGeolocationEnabled = env->GetFieldID(clazz, "mGeolocationEnabled", "Z");
mJavaScriptCanOpenWindowsAutomatically = env->GetFieldID(clazz,
"mJavaScriptCanOpenWindowsAutomatically", "Z");
mUseWideViewport = env->GetFieldID(clazz, "mUseWideViewport", "Z");
@@ -195,6 +196,7 @@
#if ENABLE(DOM_STORAGE)
jfieldID mDomStorageEnabled;
#endif
+ jfieldID mGeolocationEnabled;
#if ENABLE(DATABASE) || ENABLE(DOM_STORAGE)
jfieldID mDatabasePath;
#endif
@@ -349,6 +351,9 @@
}
}
#endif
+
+ flag = env->GetBooleanField(obj, gFieldIds->mGeolocationEnabled);
+ GeolocationPermissions::setAlwaysDeny(!flag);
}
};