Index: android_webview/java/src/org/chromium/android_webview/AwCookieManager.java |
diff --git a/android_webview/java/src/org/chromium/android_webview/AwCookieManager.java b/android_webview/java/src/org/chromium/android_webview/AwCookieManager.java |
index ab91e5d48bf9f55844b2fa350e8cdcb9a719cc30..08a7a209da894d319ed2c385f994edb987265e66 100644 |
--- a/android_webview/java/src/org/chromium/android_webview/AwCookieManager.java |
+++ b/android_webview/java/src/org/chromium/android_webview/AwCookieManager.java |
@@ -4,6 +4,11 @@ |
package org.chromium.android_webview; |
+import android.os.Handler; |
+import android.os.Looper; |
+import android.webkit.ValueCallback; |
+ |
+import org.chromium.base.CalledByNative; |
import org.chromium.base.JNINamespace; |
/** |
@@ -46,14 +51,42 @@ public final class AwCookieManager { |
} |
/** |
+ * Synchronous version of setCookie. |
+ */ |
+ public void setCookie(String url, String value) { |
+ nativeSetCookieSync(url, value); |
+ } |
+ |
+ /** |
+ * Deprecated synchronous version of removeSessionCookies. |
+ */ |
+ public void removeSessionCookie() { |
+ nativeRemoveSessionCookieSync(); |
+ } |
+ |
+ /** |
+ * Deprecated synchronous version of removeAllCookies. |
+ */ |
+ public void removeAllCookie() { |
+ nativeRemoveAllCookieSync(); |
+ } |
+ |
+ /** |
* Set cookie for a given url. The old cookie with same host/path/name will |
* be removed. The new cookie will be added if it is not expired or it does |
* not have expiration which implies it is session cookie. |
- * @param url The url which cookie is set for |
- * @param value The value for set-cookie: in http response header |
+ * @param url The url which cookie is set for. |
+ * @param value The value for set-cookie: in http response header. |
+ * @param callback A callback called with the success status after the cookie is set. |
*/ |
- public void setCookie(final String url, final String value) { |
- nativeSetCookie(url, value); |
+ public void setCookie(final String url, final String value, |
+ final ValueCallback<Boolean> callback) { |
+ try { |
+ nativeSetCookie(url, value, CookieCallback.create(callback)); |
+ } catch (IllegalStateException e) { |
+ throw new IllegalStateException( |
+ "SetCookie must be called on a thread with a running Looper."); |
+ } |
} |
/** |
@@ -70,16 +103,28 @@ public final class AwCookieManager { |
/** |
* Remove all session cookies, which are cookies without expiration date |
+ * @param callback A callback called after the cookies are removed with the number removed. |
Torne
2014/05/12 14:27:35
Not sure the number removed is actually useful? Th
mkosiba (inactive)
2014/05/13 09:37:17
I guess you could check whether the value was 0. I
hjd_google
2014/05/15 10:52:07
This makes sense, I've moved the API to returning
|
*/ |
- public void removeSessionCookie() { |
- nativeRemoveSessionCookie(); |
+ public void removeSessionCookies(ValueCallback<Integer> callback) { |
+ try { |
+ nativeRemoveSessionCookie(CookieCallback.create(callback)); |
+ } catch (IllegalStateException e) { |
+ throw new IllegalStateException( |
+ "removeSessionCookies must be called on a thread with a running Looper."); |
+ } |
} |
/** |
* Remove all cookies |
+ * @param callback A callback called after the cookies are removed with the number removed. |
*/ |
- public void removeAllCookie() { |
- nativeRemoveAllCookie(); |
+ public void removeAllCookies(ValueCallback<Integer> callback) { |
+ try { |
+ nativeRemoveAllCookie(CookieCallback.create(callback)); |
+ } catch (IllegalStateException e) { |
+ throw new IllegalStateException( |
+ "removeAllCookies must be called on a thread with a running Looper."); |
+ } |
} |
/** |
@@ -120,17 +165,68 @@ public final class AwCookieManager { |
nativeSetAcceptFileSchemeCookies(accept); |
} |
+ @CalledByNative |
+ public static void invokeRemoveCookieCallback(CookieCallback<Integer> callback, |
mkosiba (inactive)
2014/05/13 09:37:17
I'd call these by type (invokeIntegerCookieCallbac
hjd_google
2014/05/15 10:52:07
Done.
|
+ int numDeleted) { |
+ callback.onReceiveValue(numDeleted); |
+ } |
+ |
+ @CalledByNative |
+ public static void invokeSetCookieCallback(CookieCallback<Boolean> callback, boolean success) { |
+ callback.onReceiveValue(success); |
+ } |
+ |
+ /** |
+ * CookieCallback is a version of ValueCallback that native can call. |
mkosiba (inactive)
2014/05/13 09:37:17
native can call ValueCallback too using the same m
hjd_google
2014/05/15 10:52:07
Done.
|
+ * We need to arrange for the users ValueCallback#onReceiveValue to be called on the |
+ * thread that that called our API after the work is done. XXX |
mkosiba (inactive)
2014/05/13 09:37:17
XXX?
hjd_google
2014/05/15 10:52:07
Done.
|
+ */ |
+ private static class CookieCallback<T> { |
+ ValueCallback<T> mCallback; |
+ Handler mHandler; |
+ |
+ public CookieCallback(ValueCallback<T> callback, Handler handler) { |
+ mCallback = callback; |
+ mHandler = handler; |
+ } |
+ |
+ public static<T> CookieCallback<T> create(ValueCallback<T> callback) throws |
mkosiba (inactive)
2014/05/13 09:37:17
hmmm.. maybe call this map or convert. I'd expect
hjd_google
2014/05/15 10:52:07
I went with convert.
|
+ IllegalStateException { |
+ if (callback == null) { |
+ return null; |
+ } |
+ if (Looper.myLooper() == null) { |
+ throw new IllegalStateException( |
+ "CookieCallback.create should be called on a thread with a running Looper."); |
+ } |
+ return new CookieCallback<T>(callback, new Handler()); |
+ } |
+ |
+ public void onReceiveValue(final T t) { |
+ mHandler.post(new Runnable() { |
+ @Override |
+ public void run() { |
+ mCallback.onReceiveValue(t); |
+ } |
+ }); |
+ } |
+ } |
+ |
private native void nativeSetAcceptCookie(boolean accept); |
private native boolean nativeAcceptCookie(); |
private native void nativeSetAcceptThirdPartyCookie(boolean accept); |
private native boolean nativeAcceptThirdPartyCookie(); |
- private native void nativeSetCookie(String url, String value); |
+ private native void nativeSetCookie(String url, String value, |
+ CookieCallback<Boolean> callback); |
+ private native void nativeSetCookieSync(String url, String value); |
private native String nativeGetCookie(String url); |
- private native void nativeRemoveSessionCookie(); |
- private native void nativeRemoveAllCookie(); |
+ private native void nativeRemoveSessionCookie(CookieCallback<Integer> callback); |
+ private native void nativeRemoveSessionCookieSync(); |
+ private native void nativeRemoveAllCookie(CookieCallback<Integer> callback); |
+ private native void nativeRemoveAllCookieSync(); |
private native void nativeRemoveExpiredCookie(); |
private native void nativeFlushCookieStore(); |