Chromium Code Reviews| Index: android_webview/java/src/org/chromium/android_webview/AwGeolocationPermissions.java |
| diff --git a/android_webview/java/src/org/chromium/android_webview/AwGeolocationPermissions.java b/android_webview/java/src/org/chromium/android_webview/AwGeolocationPermissions.java |
| index 133f5970eb5a12a778701aba59b3f329e39941e0..f0afdca89d7c165d5e41375d47e815c8a4de873f 100644 |
| --- a/android_webview/java/src/org/chromium/android_webview/AwGeolocationPermissions.java |
| +++ b/android_webview/java/src/org/chromium/android_webview/AwGeolocationPermissions.java |
| @@ -24,10 +24,39 @@ public final class AwGeolocationPermissions { |
| AwGeolocationPermissions.class.getCanonicalName() + "%"; |
| private final SharedPreferences mSharedPreferences; |
| + private static AwGeolocationPermissions sInstance; |
|
joth
2013/02/06 22:09:51
crumbs more statics. I'll make a patch to avoid th
Kristian Monsen
2013/02/08 00:07:44
OK.
|
| + |
| + // TODO(kristianm): Make this private once framework is updated to use getInstance |
|
boliu
2013/02/06 20:29:54
Sorry I don't understand this comment. What framew
Kristian Monsen
2013/02/08 00:07:44
Android -> framework/webview. That is where this i
|
| public AwGeolocationPermissions(SharedPreferences sharedPreferences) { |
| mSharedPreferences = sharedPreferences; |
| + sInstance = this; |
| + } |
| + |
| + /** |
| + * Get the static instance after it has been created |
| + */ |
| + public static synchronized AwGeolocationPermissions getInstance() { |
|
boliu
2013/02/06 20:29:54
Can we use synchronized blocks instead of having t
Kristian Monsen
2013/02/08 00:07:44
Done.
|
| + if (sInstance == null) { |
| + throw new IllegalStateException("This should only be called after creteInstance."); |
| + } |
| + return sInstance; |
| + } |
| + |
| + /** |
| + * Create the static instance of this class |
| + */ |
| + public static synchronized AwGeolocationPermissions createInstance( |
|
boliu
2013/02/06 20:29:54
getInstance vs createInstance? I'm confused if thi
Kristian Monsen
2013/02/08 00:07:44
It needs a SharedPreference when creating the stat
|
| + SharedPreferences sharedPreferences) { |
| + if (sInstance != null) { |
| + throw new IllegalStateException("This should only be called once."); |
| + } |
| + sInstance = new AwGeolocationPermissions(sharedPreferences); |
|
boliu
2013/02/06 20:29:54
sInstance is set here and in the constructor, dupl
Kristian Monsen
2013/02/08 00:07:44
Yes, done.
I wanted it here, but had to be in the
|
| + return sInstance; |
| } |
| + /** |
| + * Set one origin to be allowed. |
| + */ |
| public void allow(String origin) { |
| String key = getOriginKey(origin); |
| if (key != null) { |
| @@ -35,6 +64,9 @@ public final class AwGeolocationPermissions { |
| } |
| } |
| + /** |
| + * Set one origin to be denied. |
| + */ |
| public void deny(String origin) { |
| String key = getOriginKey(origin); |
| if (key != null) { |
| @@ -42,6 +74,9 @@ public final class AwGeolocationPermissions { |
| } |
| } |
| + /** |
| + * Clear one origin from being allowed and denied. |
| + */ |
| public void clear(String origin) { |
| String key = getOriginKey(origin); |
| if (key != null) { |
| @@ -49,6 +84,9 @@ public final class AwGeolocationPermissions { |
| } |
| } |
| + /** |
| + * Clear all origins set to allowed or denied. |
| + */ |
| public void clearAll() { |
| SharedPreferences.Editor editor = null; |
| for (String name : mSharedPreferences.getAll().keySet()) { |
| @@ -64,7 +102,10 @@ public final class AwGeolocationPermissions { |
| } |
| } |
| - public void getAllowed(String origin, final ValueCallback<Boolean> callback) { |
| + /** |
| + * Sync method to get if an origin set to be allowed. |
| + */ |
| + public boolean getAllowed(String origin) { |
|
joth
2013/02/06 22:09:51
I think isOriginAllowed / isOriginDenied would be
Kristian Monsen
2013/02/08 00:07:44
Done.
|
| boolean allowed = false; |
| try { |
| String key = getOriginKey(origin); |
| @@ -74,7 +115,30 @@ public final class AwGeolocationPermissions { |
| } catch (ClassCastException e) { |
| // Want to return false in this case, do nothing here |
| } |
| - final boolean finalAllowed = allowed; |
| + return allowed; |
|
joth
2013/02/06 22:09:51
AIUI passing key == null to getFoo() is fine so yo
Kristian Monsen
2013/02/08 00:07:44
Done.
|
| + } |
| + |
| + /** |
| + * Sync method to get if an origin set to be denied. |
| + */ |
| + public boolean getDenied(String origin) { |
| + boolean allowed = true; |
| + try { |
| + String key = getOriginKey(origin); |
| + if (key != null) { |
| + allowed = mSharedPreferences.getBoolean(key, true); |
|
joth
2013/02/06 22:09:51
the 'true' here & above looks very odd.
This come
Kristian Monsen
2013/02/08 00:07:44
Updated as it makes the only callsite clearer, but
joth
2013/02/08 02:15:01
agreed. we might as well invent an enum (int const
|
| + } |
| + } catch (ClassCastException e) { |
| + // Want to return false in this case, do nothing here |
| + } |
| + return !allowed; |
| + } |
| + |
| + /** |
| + * ASync method to get if an origin set to be allowed. |
| + */ |
| + public void getAllowed(String origin, final ValueCallback<Boolean> callback) { |
| + final boolean finalAllowed = getAllowed(origin); |
|
boliu
2013/02/06 20:29:54
given this is async, should this be more async tha
Kristian Monsen
2013/02/08 00:07:44
I felt this was better as the result will reflect
joth
2013/02/08 02:15:01
Seems reasonable. Otherwise, calling this sequence
|
| ThreadUtils.postOnUiThread(new Runnable() { |
| @Override |
| public void run() { |
| @@ -83,6 +147,9 @@ public final class AwGeolocationPermissions { |
| }); |
| } |
| + /** |
| + * ASync method to get the domains currently allowed or denied. |
| + */ |
| public void getOrigins(final ValueCallback<Set<String>> callback) { |
| final Set<String> origins = new HashSet<String>(); |
| for (String name : mSharedPreferences.getAll().keySet()) { |
| @@ -98,6 +165,9 @@ public final class AwGeolocationPermissions { |
| }); |
| } |
| + /** |
| + * Get the domain of an URL using the GURL library. |
| + */ |
| private String getOriginKey(String url) { |
| String origin = GURLUtils.getOrigin(url); |
| if (origin.isEmpty()) { |