Index: android_webview/java/src/org/chromium/android_webview/CookieManager.java |
diff --git a/android_webview/java/src/org/chromium/android_webview/CookieManager.java b/android_webview/java/src/org/chromium/android_webview/CookieManager.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..038baa31fc601e1ad77c4ebb997bcce4d232688e |
--- /dev/null |
+++ b/android_webview/java/src/org/chromium/android_webview/CookieManager.java |
@@ -0,0 +1,190 @@ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package org.chromium.android_webview; |
+ |
+import android.net.ParseException; |
+import android.util.Log; |
+ |
+import org.chromium.base.JNINamespace; |
+import org.chromium.base.ThreadUtils; |
+ |
+import java.util.concurrent.Callable; |
+ |
+/** |
+ * CookieManager manages cookies according to RFC2109 spec. |
+ * |
+ * Methods in this class are thread safe. |
+ */ |
+@JNINamespace("android_webview") |
+public final class CookieManager { |
+ private static final String LOGTAG = "CookieManager"; |
+ |
+ /** |
+ * Control whether cookie is enabled or disabled |
+ * @param accept TRUE if accept cookie |
+ */ |
+ public synchronized void setAcceptCookie(boolean accept) { |
+ final boolean finalAccept = accept; |
+ ThreadUtils.runOnUiThread(new Runnable() { |
+ @Override |
+ public void run() { |
+ nativeSetAcceptCookie(finalAccept); |
+ } |
+ }); |
+ } |
+ |
+ private final Callable<Boolean> acceptCookieCallable = new Callable<Boolean>() { |
+ @Override |
+ public Boolean call() throws Exception { |
+ return nativeAcceptCookie(); |
+ } |
+ }; |
+ |
+ /** |
+ * Return whether cookie is enabled |
+ * @return TRUE if accept cookie |
+ */ |
+ public synchronized boolean acceptCookie() { |
+ return ThreadUtils.runOnUiThreadBlockingNoException(acceptCookieCallable); |
+ } |
+ |
+ /** |
+ * 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 |
+ */ |
+ public void setCookie(final String url, final String value) { |
+ ThreadUtils.runOnUiThread(new Runnable() { |
+ @Override |
+ public void run() { |
+ nativeSetCookie(url, value); |
+ } |
+ }); |
+ } |
+ |
+ /** |
+ * Get cookie(s) for a given url so that it can be set to "cookie:" in http |
+ * request header. |
+ * @param url The url needs cookie |
+ * @return The cookies in the format of NAME=VALUE [; NAME=VALUE] |
+ */ |
+ public String getCookie(final String url) { |
+ String cookie = ThreadUtils.runOnUiThreadBlockingNoException(new Callable<String>() { |
+ @Override |
+ public String call() throws Exception { |
+ return nativeGetCookie(url.toString()); |
+ } |
+ }); |
+ // Return null if the string is empty to match legacy behavior |
+ return cookie == null || cookie.trim().isEmpty() ? null : cookie; |
+ } |
+ |
+ private final Runnable removeSessionCookieRunnable = new Runnable() { |
+ @Override |
+ public void run() { |
+ nativeRemoveSessionCookie(); |
+ } |
+ }; |
+ |
+ /** |
+ * Remove all session cookies, which are cookies without expiration date |
+ */ |
+ public void removeSessionCookie() { |
+ ThreadUtils.runOnUiThread(removeSessionCookieRunnable); |
+ } |
+ |
+ private final Runnable removeAllCookieRunnable = new Runnable() { |
+ @Override |
+ public void run() { |
+ nativeRemoveAllCookie(); |
+ } |
+ }; |
+ |
+ /** |
+ * Remove all cookies |
+ */ |
+ public void removeAllCookie() { |
+ ThreadUtils.runOnUiThread(removeAllCookieRunnable); |
+ } |
+ |
+ private final Callable<Boolean> hasCookiesCallable = new Callable<Boolean>() { |
+ @Override |
+ public Boolean call() throws Exception { |
+ return nativeHasCookies(); |
+ } |
+ }; |
+ |
+ /** |
+ * Return true if there are stored cookies. |
+ */ |
+ public synchronized boolean hasCookies() { |
+ return ThreadUtils.runOnUiThreadBlockingNoException(hasCookiesCallable); |
+ } |
+ |
+ private final Runnable removeExpiredCookieRunnable = new Runnable() { |
+ @Override |
+ public void run() { |
+ nativeRemoveExpiredCookie(); |
+ } |
+ }; |
+ |
+ /** |
+ * Remove all expired cookies |
+ */ |
+ public void removeExpiredCookie() { |
+ ThreadUtils.runOnUiThread(removeExpiredCookieRunnable); |
+ } |
+ |
+ private static final Callable<Boolean> allowFileSchemeCookiesCallable = |
+ new Callable<Boolean>() { |
+ @Override |
+ public Boolean call() throws Exception { |
+ return nativeAllowFileSchemeCookies(); |
+ } |
+ }; |
+ |
+ /** |
+ * Whether cookies are accepted for file scheme URLs. |
+ */ |
+ public static boolean allowFileSchemeCookies() { |
+ return ThreadUtils.runOnUiThreadBlockingNoException(allowFileSchemeCookiesCallable); |
+ } |
+ |
+ /** |
+ * Sets whether cookies are accepted for file scheme URLs. |
+ * |
+ * Use of cookies with file scheme URLs is potentially insecure. Do not use this feature unless |
+ * you can be sure that no unintentional sharing of cookie data can take place. |
+ * <p> |
+ * Note that calls to this method will have no effect if made after a WebView or CookieManager |
+ * instance has been created. |
+ */ |
+ public static void setAcceptFileSchemeCookies(boolean accept) { |
+ final boolean finalAccept = accept; |
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
+ @Override |
+ public void run() { |
+ nativeSetAcceptFileSchemeCookies(finalAccept); |
+ } |
+ }); |
+ } |
+ |
+ private native void nativeSetAcceptCookie(boolean accept); |
+ private native boolean nativeAcceptCookie(); |
+ |
+ private native void nativeSetCookie(String url, String value); |
+ private native String nativeGetCookie(String url); |
+ |
+ private native void nativeRemoveSessionCookie(); |
+ private native void nativeRemoveAllCookie(); |
+ private native void nativeRemoveExpiredCookie(); |
+ |
+ private native boolean nativeHasCookies(); |
+ |
+ static native boolean nativeAllowFileSchemeCookies(); |
+ static native void nativeSetAcceptFileSchemeCookies(boolean accept); |
+} |