diff options
-rwxr-xr-x | WebKit/android/WebCoreSupport/GeolocationPermissions.cpp | 21 | ||||
-rwxr-xr-x | WebKit/android/WebCoreSupport/GeolocationPermissions.h | 1 |
2 files changed, 15 insertions, 7 deletions
diff --git a/WebKit/android/WebCoreSupport/GeolocationPermissions.cpp b/WebKit/android/WebCoreSupport/GeolocationPermissions.cpp index 62df3c0..9f21715 100755 --- a/WebKit/android/WebCoreSupport/GeolocationPermissions.cpp +++ b/WebKit/android/WebCoreSupport/GeolocationPermissions.cpp @@ -42,8 +42,9 @@ namespace android { GeolocationPermissions::PermissionsMap GeolocationPermissions::s_permanentPermissions; GeolocationPermissions::GeolocationPermissionsVector GeolocationPermissions::s_instances; bool GeolocationPermissions::s_alwaysDeny = false; -String GeolocationPermissions::s_databasePath; bool GeolocationPermissions::s_permanentPermissionsLoaded = false; +bool GeolocationPermissions::s_permanentPermissionsModified = false; +String GeolocationPermissions::s_databasePath; static const char* databaseName = "/GeolocationPermissions.db"; @@ -158,6 +159,7 @@ void GeolocationPermissions::recordPermissionState(String origin, bool allow, bo { if (remember) { s_permanentPermissions.set(m_originInProgress, allow); + s_permanentPermissionsModified = true; } else { // It's possible that another tab recorded a permanent permission for // this origin while our request was in progress, but we record it @@ -253,8 +255,10 @@ void GeolocationPermissions::clear(String origin) { maybeLoadPermanentPermissions(); PermissionsMap::iterator iter = s_permanentPermissions.find(origin); - if (iter != s_permanentPermissions.end()) + if (iter != s_permanentPermissions.end()) { s_permanentPermissions.remove(iter); + s_permanentPermissionsModified = true; + } } void GeolocationPermissions::allow(String origin) @@ -262,12 +266,14 @@ void GeolocationPermissions::allow(String origin) maybeLoadPermanentPermissions(); // We replace any existing permanent permission. s_permanentPermissions.set(origin, true); + s_permanentPermissionsModified = true; } void GeolocationPermissions::clearAll() { maybeLoadPermanentPermissions(); s_permanentPermissions.clear(); + s_permanentPermissionsModified = true; } void GeolocationPermissions::maybeLoadPermanentPermissions() @@ -302,11 +308,10 @@ void GeolocationPermissions::maybeLoadPermanentPermissions() void GeolocationPermissions::maybeStorePermanentPermissions() { - // Protect against the case where we haven't yet loaded permissions, as - // saving in this case would overwrite the stored permissions with the empty - // set. This is safe as the permissions are always loaded before they are - // modified. - if (!s_permanentPermissionsLoaded) + // If the permanent permissions haven't been modified, there's no need to + // save them to the DB. (If we haven't even loaded them, writing them now + // would overwrite the stored permissions with the empty set.) + if (!s_permanentPermissionsModified) return; SQLiteDatabase database; @@ -334,6 +339,8 @@ void GeolocationPermissions::maybeStorePermanentPermissions() transaction.commit(); database.close(); + + s_permanentPermissionsModified = false; } void GeolocationPermissions::setDatabasePath(String path) diff --git a/WebKit/android/WebCoreSupport/GeolocationPermissions.h b/WebKit/android/WebCoreSupport/GeolocationPermissions.h index d6b8296..3ce20a2 100755 --- a/WebKit/android/WebCoreSupport/GeolocationPermissions.h +++ b/WebKit/android/WebCoreSupport/GeolocationPermissions.h @@ -141,6 +141,7 @@ namespace android { static bool s_alwaysDeny; static bool s_permanentPermissionsLoaded; + static bool s_permanentPermissionsModified; static WebCore::String s_databasePath; }; |