Index: android_webview/native/cookie_manager.cc |
diff --git a/android_webview/native/cookie_manager.cc b/android_webview/native/cookie_manager.cc |
deleted file mode 100644 |
index 33c24db65f945453c355c109dd80ee2a80e3704a..0000000000000000000000000000000000000000 |
--- a/android_webview/native/cookie_manager.cc |
+++ /dev/null |
@@ -1,647 +0,0 @@ |
-// Copyright (c) 2011 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. |
- |
-#include "android_webview/native/cookie_manager.h" |
- |
-#include <memory> |
-#include <utility> |
-#include <vector> |
- |
-#include "android_webview/browser/aw_browser_context.h" |
-#include "android_webview/browser/aw_cookie_access_policy.h" |
-#include "android_webview/browser/net/init_native_callback.h" |
-#include "base/android/jni_string.h" |
-#include "base/android/path_utils.h" |
-#include "base/bind.h" |
-#include "base/bind_helpers.h" |
-#include "base/files/file_path.h" |
-#include "base/files/file_util.h" |
-#include "base/lazy_instance.h" |
-#include "base/location.h" |
-#include "base/logging.h" |
-#include "base/memory/ref_counted.h" |
-#include "base/path_service.h" |
-#include "base/single_thread_task_runner.h" |
-#include "base/synchronization/lock.h" |
-#include "base/synchronization/waitable_event.h" |
-#include "base/threading/sequenced_worker_pool.h" |
-#include "base/threading/thread.h" |
-#include "base/threading/thread_restrictions.h" |
-#include "content/public/browser/browser_context.h" |
-#include "content/public/browser/browser_thread.h" |
-#include "content/public/browser/cookie_store_factory.h" |
-#include "jni/AwCookieManager_jni.h" |
-#include "net/cookies/cookie_monster.h" |
-#include "net/cookies/cookie_options.h" |
-#include "net/cookies/cookie_store.h" |
-#include "net/cookies/parsed_cookie.h" |
-#include "net/extras/sqlite/cookie_crypto_delegate.h" |
-#include "net/url_request/url_request_context.h" |
-#include "url/url_constants.h" |
- |
-using base::FilePath; |
-using base::WaitableEvent; |
-using base::android::ConvertJavaStringToUTF8; |
-using base::android::ConvertJavaStringToUTF16; |
-using base::android::JavaParamRef; |
-using base::android::ScopedJavaGlobalRef; |
-using base::android::ScopedJavaLocalRef; |
-using content::BrowserThread; |
-using net::CookieList; |
- |
-// In the future, we may instead want to inject an explicit CookieStore |
-// dependency into this object during process initialization to avoid |
-// depending on the URLRequestContext. |
-// See issue http://crbug.com/157683 |
- |
-// On the CookieManager methods without a callback and methods with a callback |
-// when that callback is null can be called from any thread, including threads |
-// without a message loop. Methods with a non-null callback must be called on |
-// a thread with a running message loop. |
- |
-namespace android_webview { |
- |
-namespace { |
- |
-typedef base::Callback<void(bool)> BoolCallback; |
-typedef base::Callback<void(int)> IntCallback; |
- |
-// Holds a Java BooleanCookieCallback, knows how to invoke it and turn it |
-// into a base callback. |
-class BoolCookieCallbackHolder { |
- public: |
- BoolCookieCallbackHolder(JNIEnv* env, jobject callback) { |
- callback_.Reset(env, callback); |
- } |
- |
- void Invoke(bool result) { |
- if (!callback_.is_null()) { |
- JNIEnv* env = base::android::AttachCurrentThread(); |
- Java_AwCookieManager_invokeBooleanCookieCallback(env, callback_, result); |
- } |
- } |
- |
- static BoolCallback ConvertToCallback( |
- std::unique_ptr<BoolCookieCallbackHolder> me) { |
- return base::Bind(&BoolCookieCallbackHolder::Invoke, |
- base::Owned(me.release())); |
- } |
- |
- private: |
- ScopedJavaGlobalRef<jobject> callback_; |
- DISALLOW_COPY_AND_ASSIGN(BoolCookieCallbackHolder); |
-}; |
- |
-// Construct a closure which signals a waitable event if and when the closure |
-// is called the waitable event must still exist. |
-static base::Closure SignalEventClosure(WaitableEvent* completion) { |
- return base::Bind(&WaitableEvent::Signal, base::Unretained(completion)); |
-} |
- |
-static void DiscardBool(const base::Closure& f, bool b) { |
- f.Run(); |
-} |
- |
-static BoolCallback BoolCallbackAdapter(const base::Closure& f) { |
- return base::Bind(&DiscardBool, f); |
-} |
- |
-static void DiscardInt(const base::Closure& f, int i) { |
- f.Run(); |
-} |
- |
-static IntCallback IntCallbackAdapter(const base::Closure& f) { |
- return base::Bind(&DiscardInt, f); |
-} |
- |
-// Are cookies allowed for file:// URLs by default? |
-const bool kDefaultFileSchemeAllowed = false; |
- |
-void ImportLegacyCookieStore(const FilePath& cookie_store_path) { |
- // We use the old cookie store to create the new cookie store only if the |
- // new cookie store does not exist. |
- if (base::PathExists(cookie_store_path)) |
- return; |
- |
- // WebViewClassic gets the database path from Context and appends a |
- // hardcoded name. See: |
- // https://android.googlesource.com/platform/frameworks/base/+/bf6f6f9d/core/java/android/webkit/JniUtil.java |
- // https://android.googlesource.com/platform/external/webkit/+/7151e/ |
- // Source/WebKit/android/WebCoreSupport/WebCookieJar.cpp |
- FilePath old_cookie_store_path; |
- base::android::GetDatabaseDirectory(&old_cookie_store_path); |
- old_cookie_store_path = old_cookie_store_path.Append( |
- FILE_PATH_LITERAL("webviewCookiesChromium.db")); |
- if (base::PathExists(old_cookie_store_path) && |
- !base::Move(old_cookie_store_path, cookie_store_path)) { |
- LOG(WARNING) << "Failed to move old cookie store path from " |
- << old_cookie_store_path.AsUTF8Unsafe() << " to " |
- << cookie_store_path.AsUTF8Unsafe(); |
- } |
-} |
- |
-void GetUserDataDir(FilePath* user_data_dir) { |
- if (!PathService::Get(base::DIR_ANDROID_APP_DATA, user_data_dir)) { |
- NOTREACHED() << "Failed to get app data directory for Android WebView"; |
- } |
-} |
- |
-} // namespace |
- |
-// CookieManager creates and owns Webview's CookieStore, in addition to handling |
-// calls into the CookieStore from Java. |
-// |
-// Since Java calls can be made on the IO Thread, and must synchronously return |
-// a result, and the CookieStore API allows it to asynchronously return results, |
-// the CookieStore must be run on its own thread, to prevent deadlock. |
-class CookieManager { |
- public: |
- static CookieManager* GetInstance(); |
- |
- // Returns the TaskRunner on which the CookieStore lives. |
- base::SingleThreadTaskRunner* GetCookieStoreTaskRunner(); |
- // Returns the CookieStore, creating it if necessary. This must only be called |
- // on the CookieStore TaskRunner. |
- net::CookieStore* GetCookieStore(); |
- |
- void SetShouldAcceptCookies(bool accept); |
- bool GetShouldAcceptCookies(); |
- void SetCookie(const GURL& host, |
- const std::string& cookie_value, |
- std::unique_ptr<BoolCookieCallbackHolder> callback); |
- void SetCookieSync(const GURL& host, const std::string& cookie_value); |
- std::string GetCookie(const GURL& host); |
- void RemoveSessionCookies(std::unique_ptr<BoolCookieCallbackHolder> callback); |
- void RemoveAllCookies(std::unique_ptr<BoolCookieCallbackHolder> callback); |
- void RemoveAllCookiesSync(); |
- void RemoveSessionCookiesSync(); |
- void RemoveExpiredCookies(); |
- void FlushCookieStore(); |
- bool HasCookies(); |
- bool AllowFileSchemeCookies(); |
- void SetAcceptFileSchemeCookies(bool accept); |
- |
- private: |
- friend struct base::LazyInstanceTraitsBase<CookieManager>; |
- |
- CookieManager(); |
- ~CookieManager(); |
- |
- void ExecCookieTaskSync(const base::Callback<void(BoolCallback)>& task); |
- void ExecCookieTaskSync(const base::Callback<void(IntCallback)>& task); |
- void ExecCookieTaskSync(const base::Callback<void(base::Closure)>& task); |
- void ExecCookieTask(const base::Closure& task); |
- |
- void SetCookieHelper(const GURL& host, |
- const std::string& value, |
- BoolCallback callback); |
- |
- void GetCookieValueAsyncHelper(const GURL& host, |
- std::string* result, |
- base::Closure complete); |
- void GetCookieValueCompleted(base::Closure complete, |
- std::string* result, |
- const std::string& value); |
- |
- void RemoveSessionCookiesHelper(BoolCallback callback); |
- void RemoveAllCookiesHelper(BoolCallback callback); |
- void RemoveCookiesCompleted(BoolCallback callback, int num_deleted); |
- |
- void FlushCookieStoreAsyncHelper(base::Closure complete); |
- |
- void HasCookiesAsyncHelper(bool* result, base::Closure complete); |
- void HasCookiesCompleted(base::Closure complete, |
- bool* result, |
- const net::CookieList& cookies); |
- |
- // This protects the following two bools, as they're used on multiple threads. |
- base::Lock accept_file_scheme_cookies_lock_; |
- // True if cookies should be allowed for file URLs. Can only be changed prior |
- // to creating the CookieStore. |
- bool accept_file_scheme_cookies_; |
- // True once the cookie store has been created. Just used to track when |
- // |accept_file_scheme_cookies_| can no longer be modified. |
- bool cookie_store_created_; |
- |
- base::Thread cookie_store_client_thread_; |
- base::Thread cookie_store_backend_thread_; |
- |
- scoped_refptr<base::SingleThreadTaskRunner> cookie_store_task_runner_; |
- std::unique_ptr<net::CookieStore> cookie_store_; |
- |
- DISALLOW_COPY_AND_ASSIGN(CookieManager); |
-}; |
- |
-namespace { |
-base::LazyInstance<CookieManager>::Leaky g_lazy_instance; |
-} |
- |
-// static |
-CookieManager* CookieManager::GetInstance() { |
- return g_lazy_instance.Pointer(); |
-} |
- |
-CookieManager::CookieManager() |
- : accept_file_scheme_cookies_(kDefaultFileSchemeAllowed), |
- cookie_store_created_(false), |
- cookie_store_client_thread_("CookieMonsterClient"), |
- cookie_store_backend_thread_("CookieMonsterBackend") { |
- cookie_store_client_thread_.Start(); |
- cookie_store_backend_thread_.Start(); |
- cookie_store_task_runner_ = cookie_store_client_thread_.task_runner(); |
-} |
- |
-CookieManager::~CookieManager() { |
-} |
- |
-// Executes the |task| on |cookie_store_task_runner_| and waits for it to |
-// complete before returning. |
-// |
-// To execute a CookieTask synchronously you must arrange for Signal to be |
-// called on the waitable event at some point. You can call the bool or int |
-// versions of ExecCookieTaskSync, these will supply the caller with a dummy |
-// callback which takes an int/bool, throws it away and calls Signal. |
-// Alternatively you can call the version which supplies a Closure in which |
-// case you must call Run on it when you want the unblock the calling code. |
-// |
-// Ignore a bool callback. |
-void CookieManager::ExecCookieTaskSync( |
- const base::Callback<void(BoolCallback)>& task) { |
- WaitableEvent completion(base::WaitableEvent::ResetPolicy::AUTOMATIC, |
- base::WaitableEvent::InitialState::NOT_SIGNALED); |
- ExecCookieTask( |
- base::Bind(task, BoolCallbackAdapter(SignalEventClosure(&completion)))); |
- base::ThreadRestrictions::ScopedAllowWait wait; |
- completion.Wait(); |
-} |
- |
-// Ignore an int callback. |
-void CookieManager::ExecCookieTaskSync( |
- const base::Callback<void(IntCallback)>& task) { |
- WaitableEvent completion(base::WaitableEvent::ResetPolicy::AUTOMATIC, |
- base::WaitableEvent::InitialState::NOT_SIGNALED); |
- ExecCookieTask( |
- base::Bind(task, IntCallbackAdapter(SignalEventClosure(&completion)))); |
- base::ThreadRestrictions::ScopedAllowWait wait; |
- completion.Wait(); |
-} |
- |
-// Call the supplied closure when you want to signal that the blocked code can |
-// continue. |
-void CookieManager::ExecCookieTaskSync( |
- const base::Callback<void(base::Closure)>& task) { |
- WaitableEvent completion(base::WaitableEvent::ResetPolicy::AUTOMATIC, |
- base::WaitableEvent::InitialState::NOT_SIGNALED); |
- ExecCookieTask(base::Bind(task, SignalEventClosure(&completion))); |
- base::ThreadRestrictions::ScopedAllowWait wait; |
- completion.Wait(); |
-} |
- |
-// Executes the |task| using |cookie_store_task_runner_|. |
-void CookieManager::ExecCookieTask(const base::Closure& task) { |
- cookie_store_task_runner_->PostTask(FROM_HERE, task); |
-} |
- |
-base::SingleThreadTaskRunner* CookieManager::GetCookieStoreTaskRunner() { |
- return cookie_store_task_runner_.get(); |
-} |
- |
-net::CookieStore* CookieManager::GetCookieStore() { |
- DCHECK(cookie_store_task_runner_->RunsTasksOnCurrentThread()); |
- |
- if (!cookie_store_) { |
- FilePath user_data_dir; |
- GetUserDataDir(&user_data_dir); |
- FilePath cookie_store_path = |
- user_data_dir.Append(FILE_PATH_LITERAL("Cookies")); |
- |
- cookie_store_backend_thread_.task_runner()->PostTask( |
- FROM_HERE, base::Bind(ImportLegacyCookieStore, cookie_store_path)); |
- |
- content::CookieStoreConfig cookie_config( |
- cookie_store_path, content::CookieStoreConfig::RESTORED_SESSION_COOKIES, |
- nullptr, nullptr); |
- cookie_config.client_task_runner = cookie_store_task_runner_; |
- cookie_config.background_task_runner = |
- cookie_store_backend_thread_.task_runner(); |
- |
- { |
- base::AutoLock lock(accept_file_scheme_cookies_lock_); |
- |
- // There are some unknowns about how to correctly handle file:// cookies, |
- // and our implementation for this is not robust. http://crbug.com/582985 |
- // |
- // TODO(mmenke): This call should be removed once we can deprecate and |
- // remove the Android WebView 'CookieManager::setAcceptFileSchemeCookies' |
- // method. Until then, note that this is just not a great idea. |
- cookie_config.cookieable_schemes.insert( |
- cookie_config.cookieable_schemes.begin(), |
- net::CookieMonster::kDefaultCookieableSchemes, |
- net::CookieMonster::kDefaultCookieableSchemes + |
- net::CookieMonster::kDefaultCookieableSchemesCount); |
- if (accept_file_scheme_cookies_) |
- cookie_config.cookieable_schemes.push_back(url::kFileScheme); |
- cookie_store_created_ = true; |
- } |
- |
- cookie_store_ = content::CreateCookieStore(cookie_config); |
- } |
- |
- return cookie_store_.get(); |
-} |
- |
-void CookieManager::SetShouldAcceptCookies(bool accept) { |
- AwCookieAccessPolicy::GetInstance()->SetShouldAcceptCookies(accept); |
-} |
- |
-bool CookieManager::GetShouldAcceptCookies() { |
- return AwCookieAccessPolicy::GetInstance()->GetShouldAcceptCookies(); |
-} |
- |
-void CookieManager::SetCookie( |
- const GURL& host, |
- const std::string& cookie_value, |
- std::unique_ptr<BoolCookieCallbackHolder> callback_holder) { |
- BoolCallback callback = |
- BoolCookieCallbackHolder::ConvertToCallback(std::move(callback_holder)); |
- ExecCookieTask(base::Bind(&CookieManager::SetCookieHelper, |
- base::Unretained(this), |
- host, |
- cookie_value, |
- callback)); |
-} |
- |
-void CookieManager::SetCookieSync(const GURL& host, |
- const std::string& cookie_value) { |
- ExecCookieTaskSync(base::Bind(&CookieManager::SetCookieHelper, |
- base::Unretained(this), |
- host, |
- cookie_value)); |
-} |
- |
-void CookieManager::SetCookieHelper( |
- const GURL& host, |
- const std::string& value, |
- const BoolCallback callback) { |
- net::CookieOptions options; |
- options.set_include_httponly(); |
- |
- // Log message for catching strict secure cookies related bugs. |
- // TODO(sgurun) temporary. Add UMA stats to monitor, and remove afterwards. |
- if (host.is_valid() && |
- (!host.has_scheme() || host.SchemeIs(url::kHttpScheme))) { |
- net::ParsedCookie parsed_cookie(value); |
- if (parsed_cookie.IsValid() && parsed_cookie.IsSecure()) { |
- LOG(WARNING) << "Strict Secure Cookie policy does not allow setting a " |
- "secure cookie for " |
- << host.spec(); |
- GURL::Replacements replace_host; |
- replace_host.SetSchemeStr("https"); |
- GURL new_host = host.ReplaceComponents(replace_host); |
- GetCookieStore()->SetCookieWithOptionsAsync(new_host, value, options, |
- callback); |
- return; |
- } |
- } |
- |
- GetCookieStore()->SetCookieWithOptionsAsync(host, value, options, callback); |
-} |
- |
-std::string CookieManager::GetCookie(const GURL& host) { |
- std::string cookie_value; |
- ExecCookieTaskSync(base::Bind(&CookieManager::GetCookieValueAsyncHelper, |
- base::Unretained(this), |
- host, |
- &cookie_value)); |
- return cookie_value; |
-} |
- |
-void CookieManager::GetCookieValueAsyncHelper( |
- const GURL& host, |
- std::string* result, |
- base::Closure complete) { |
- net::CookieOptions options; |
- options.set_include_httponly(); |
- |
- GetCookieStore()->GetCookiesWithOptionsAsync( |
- host, options, base::Bind(&CookieManager::GetCookieValueCompleted, |
- base::Unretained(this), complete, result)); |
-} |
- |
-void CookieManager::GetCookieValueCompleted(base::Closure complete, |
- std::string* result, |
- const std::string& value) { |
- *result = value; |
- complete.Run(); |
-} |
- |
-void CookieManager::RemoveSessionCookies( |
- std::unique_ptr<BoolCookieCallbackHolder> callback_holder) { |
- BoolCallback callback = |
- BoolCookieCallbackHolder::ConvertToCallback(std::move(callback_holder)); |
- ExecCookieTask(base::Bind(&CookieManager::RemoveSessionCookiesHelper, |
- base::Unretained(this), |
- callback)); |
-} |
- |
-void CookieManager::RemoveSessionCookiesSync() { |
- ExecCookieTaskSync(base::Bind(&CookieManager::RemoveSessionCookiesHelper, |
- base::Unretained(this))); |
-} |
- |
-void CookieManager::RemoveSessionCookiesHelper( |
- BoolCallback callback) { |
- GetCookieStore()->DeleteSessionCookiesAsync( |
- base::Bind(&CookieManager::RemoveCookiesCompleted, base::Unretained(this), |
- callback)); |
-} |
- |
-void CookieManager::RemoveCookiesCompleted( |
- BoolCallback callback, |
- int num_deleted) { |
- callback.Run(num_deleted > 0); |
-} |
- |
-void CookieManager::RemoveAllCookies( |
- std::unique_ptr<BoolCookieCallbackHolder> callback_holder) { |
- BoolCallback callback = |
- BoolCookieCallbackHolder::ConvertToCallback(std::move(callback_holder)); |
- ExecCookieTask(base::Bind(&CookieManager::RemoveAllCookiesHelper, |
- base::Unretained(this), |
- callback)); |
-} |
- |
-void CookieManager::RemoveAllCookiesSync() { |
- ExecCookieTaskSync(base::Bind(&CookieManager::RemoveAllCookiesHelper, |
- base::Unretained(this))); |
-} |
- |
-void CookieManager::RemoveAllCookiesHelper( |
- const BoolCallback callback) { |
- GetCookieStore()->DeleteAllAsync( |
- base::Bind(&CookieManager::RemoveCookiesCompleted, base::Unretained(this), |
- callback)); |
-} |
- |
-void CookieManager::RemoveExpiredCookies() { |
- // HasCookies will call GetAllCookiesAsync, which in turn will force a GC. |
- HasCookies(); |
-} |
- |
-void CookieManager::FlushCookieStore() { |
- ExecCookieTaskSync(base::Bind(&CookieManager::FlushCookieStoreAsyncHelper, |
- base::Unretained(this))); |
-} |
- |
-void CookieManager::FlushCookieStoreAsyncHelper( |
- base::Closure complete) { |
- GetCookieStore()->FlushStore(complete); |
-} |
- |
-bool CookieManager::HasCookies() { |
- bool has_cookies; |
- ExecCookieTaskSync(base::Bind(&CookieManager::HasCookiesAsyncHelper, |
- base::Unretained(this), |
- &has_cookies)); |
- return has_cookies; |
-} |
- |
-// TODO(kristianm): Simplify this, copying the entire list around |
-// should not be needed. |
-void CookieManager::HasCookiesAsyncHelper(bool* result, |
- base::Closure complete) { |
- GetCookieStore()->GetAllCookiesAsync( |
- base::Bind(&CookieManager::HasCookiesCompleted, base::Unretained(this), |
- complete, result)); |
-} |
- |
-void CookieManager::HasCookiesCompleted(base::Closure complete, |
- bool* result, |
- const CookieList& cookies) { |
- *result = cookies.size() != 0; |
- complete.Run(); |
-} |
- |
-bool CookieManager::AllowFileSchemeCookies() { |
- base::AutoLock lock(accept_file_scheme_cookies_lock_); |
- return accept_file_scheme_cookies_; |
-} |
- |
-void CookieManager::SetAcceptFileSchemeCookies(bool accept) { |
- base::AutoLock lock(accept_file_scheme_cookies_lock_); |
- // Can only modify this before the cookie store is created. |
- if (!cookie_store_created_) |
- accept_file_scheme_cookies_ = accept; |
-} |
- |
-static void SetShouldAcceptCookies(JNIEnv* env, |
- const JavaParamRef<jobject>& obj, |
- jboolean accept) { |
- CookieManager::GetInstance()->SetShouldAcceptCookies(accept); |
-} |
- |
-static jboolean GetShouldAcceptCookies(JNIEnv* env, |
- const JavaParamRef<jobject>& obj) { |
- return CookieManager::GetInstance()->GetShouldAcceptCookies(); |
-} |
- |
-static void SetCookie(JNIEnv* env, |
- const JavaParamRef<jobject>& obj, |
- const JavaParamRef<jstring>& url, |
- const JavaParamRef<jstring>& value, |
- const JavaParamRef<jobject>& java_callback) { |
- GURL host(ConvertJavaStringToUTF16(env, url)); |
- std::string cookie_value(ConvertJavaStringToUTF8(env, value)); |
- std::unique_ptr<BoolCookieCallbackHolder> callback( |
- new BoolCookieCallbackHolder(env, java_callback)); |
- CookieManager::GetInstance()->SetCookie(host, cookie_value, |
- std::move(callback)); |
-} |
- |
-static void SetCookieSync(JNIEnv* env, |
- const JavaParamRef<jobject>& obj, |
- const JavaParamRef<jstring>& url, |
- const JavaParamRef<jstring>& value) { |
- GURL host(ConvertJavaStringToUTF16(env, url)); |
- std::string cookie_value(ConvertJavaStringToUTF8(env, value)); |
- |
- CookieManager::GetInstance()->SetCookieSync(host, cookie_value); |
-} |
- |
-static ScopedJavaLocalRef<jstring> GetCookie(JNIEnv* env, |
- const JavaParamRef<jobject>& obj, |
- const JavaParamRef<jstring>& url) { |
- GURL host(ConvertJavaStringToUTF16(env, url)); |
- |
- return base::android::ConvertUTF8ToJavaString( |
- env, CookieManager::GetInstance()->GetCookie(host)); |
-} |
- |
-static void RemoveSessionCookies(JNIEnv* env, |
- const JavaParamRef<jobject>& obj, |
- const JavaParamRef<jobject>& java_callback) { |
- std::unique_ptr<BoolCookieCallbackHolder> callback( |
- new BoolCookieCallbackHolder(env, java_callback)); |
- CookieManager::GetInstance()->RemoveSessionCookies(std::move(callback)); |
-} |
- |
-static void RemoveSessionCookiesSync(JNIEnv* env, |
- const JavaParamRef<jobject>& obj) { |
- CookieManager::GetInstance()->RemoveSessionCookiesSync(); |
-} |
- |
-static void RemoveAllCookies(JNIEnv* env, |
- const JavaParamRef<jobject>& obj, |
- const JavaParamRef<jobject>& java_callback) { |
- std::unique_ptr<BoolCookieCallbackHolder> callback( |
- new BoolCookieCallbackHolder(env, java_callback)); |
- CookieManager::GetInstance()->RemoveAllCookies(std::move(callback)); |
-} |
- |
-static void RemoveAllCookiesSync(JNIEnv* env, |
- const JavaParamRef<jobject>& obj) { |
- CookieManager::GetInstance()->RemoveAllCookiesSync(); |
-} |
- |
-static void RemoveExpiredCookies(JNIEnv* env, |
- const JavaParamRef<jobject>& obj) { |
- CookieManager::GetInstance()->RemoveExpiredCookies(); |
-} |
- |
-static void FlushCookieStore(JNIEnv* env, const JavaParamRef<jobject>& obj) { |
- CookieManager::GetInstance()->FlushCookieStore(); |
-} |
- |
-static jboolean HasCookies(JNIEnv* env, const JavaParamRef<jobject>& obj) { |
- return CookieManager::GetInstance()->HasCookies(); |
-} |
- |
-static jboolean AllowFileSchemeCookies(JNIEnv* env, |
- const JavaParamRef<jobject>& obj) { |
- return CookieManager::GetInstance()->AllowFileSchemeCookies(); |
-} |
- |
-static void SetAcceptFileSchemeCookies(JNIEnv* env, |
- const JavaParamRef<jobject>& obj, |
- jboolean accept) { |
- return CookieManager::GetInstance()->SetAcceptFileSchemeCookies(accept); |
-} |
- |
-// The following two methods are used to avoid a circular project dependency. |
-// TODO(mmenke): This is weird. Maybe there should be a leaky Singleton in |
-// browser/net that creates and owns there? |
- |
-scoped_refptr<base::SingleThreadTaskRunner> GetCookieStoreTaskRunner() { |
- return CookieManager::GetInstance()->GetCookieStoreTaskRunner(); |
-} |
- |
-net::CookieStore* GetCookieStore() { |
- return CookieManager::GetInstance()->GetCookieStore(); |
-} |
- |
-bool RegisterCookieManager(JNIEnv* env) { |
- return RegisterNativesImpl(env); |
-} |
- |
-} // android_webview namespace |