Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "android_webview/native/cookie_manager.h" | 5 #include "android_webview/native/cookie_manager.h" |
| 6 | 6 |
| 7 #include "android_webview/browser/aw_browser_context.h" | 7 #include "android_webview/browser/aw_browser_context.h" |
| 8 #include "android_webview/browser/aw_cookie_access_policy.h" | 8 #include "android_webview/browser/aw_cookie_access_policy.h" |
| 9 #include "android_webview/browser/net/init_native_callback.h" | 9 #include "android_webview/browser/net/init_native_callback.h" |
| 10 #include "android_webview/browser/scoped_allow_wait_for_legacy_web_view_api.h" | 10 #include "android_webview/browser/scoped_allow_wait_for_legacy_web_view_api.h" |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 28 #include "content/public/browser/browser_thread.h" | 28 #include "content/public/browser/browser_thread.h" |
| 29 #include "content/public/browser/cookie_crypto_delegate.h" | 29 #include "content/public/browser/cookie_crypto_delegate.h" |
| 30 #include "content/public/browser/cookie_store_factory.h" | 30 #include "content/public/browser/cookie_store_factory.h" |
| 31 #include "content/public/common/url_constants.h" | 31 #include "content/public/common/url_constants.h" |
| 32 #include "jni/AwCookieManager_jni.h" | 32 #include "jni/AwCookieManager_jni.h" |
| 33 #include "net/cookies/cookie_monster.h" | 33 #include "net/cookies/cookie_monster.h" |
| 34 #include "net/cookies/cookie_options.h" | 34 #include "net/cookies/cookie_options.h" |
| 35 #include "net/url_request/url_request_context.h" | 35 #include "net/url_request/url_request_context.h" |
| 36 | 36 |
| 37 using base::FilePath; | 37 using base::FilePath; |
| 38 using base::WaitableEvent; | |
| 38 using base::android::ConvertJavaStringToUTF8; | 39 using base::android::ConvertJavaStringToUTF8; |
| 39 using base::android::ConvertJavaStringToUTF16; | 40 using base::android::ConvertJavaStringToUTF16; |
| 41 using base::android::ScopedJavaGlobalRef; | |
| 40 using content::BrowserThread; | 42 using content::BrowserThread; |
| 41 using net::CookieList; | 43 using net::CookieList; |
| 42 using net::CookieMonster; | 44 using net::CookieMonster; |
| 43 | 45 |
| 44 // In the future, we may instead want to inject an explicit CookieStore | 46 // In the future, we may instead want to inject an explicit CookieStore |
| 45 // dependency into this object during process initialization to avoid | 47 // dependency into this object during process initialization to avoid |
| 46 // depending on the URLRequestContext. | 48 // depending on the URLRequestContext. |
| 47 // See issue http://crbug.com/157683 | 49 // See issue http://crbug.com/157683 |
| 48 | 50 |
| 49 // All functions on the CookieManager can be called from any thread, including | 51 // All functions on the CookieManager can be called from any thread, including |
| 50 // threads without a message loop. BrowserThread::IO is used to call methods | 52 // threads without a message loop. BrowserThread::IO is used to call methods |
| 51 // on CookieMonster that needs to be called, and called back, on a chrome | 53 // on CookieMonster that needs to be called, and called back, on a chrome |
| 52 // thread. | 54 // thread. |
| 53 | 55 |
| 54 namespace android_webview { | 56 namespace android_webview { |
| 55 | 57 |
| 58 class RemoveCookiesCallback { | |
|
mkosiba (inactive)
2014/05/13 09:37:17
same here. CookieCallbackInteger, CookieCallbackBo
hjd_google
2014/05/15 10:52:07
Done.
| |
| 59 public: | |
| 60 RemoveCookiesCallback(JNIEnv* env, jobject callback) { | |
| 61 callback_.Reset(env, callback); | |
| 62 } | |
| 63 | |
| 64 void Invoke(int num_deleted) { | |
| 65 if (!callback_.is_null()) { | |
| 66 JNIEnv* env = base::android::AttachCurrentThread(); | |
| 67 Java_AwCookieManager_invokeRemoveCookieCallback( | |
| 68 env, callback_.obj(), num_deleted); | |
| 69 } | |
| 70 } | |
| 71 | |
| 72 private: | |
| 73 ScopedJavaGlobalRef<jobject> callback_; | |
| 74 DISALLOW_COPY_AND_ASSIGN(RemoveCookiesCallback); | |
| 75 }; | |
| 76 | |
| 77 class SetCookieCallback { | |
| 78 public: | |
| 79 SetCookieCallback(JNIEnv* env, jobject callback) { | |
| 80 callback_.Reset(env, callback); | |
| 81 } | |
| 82 | |
| 83 void Invoke(bool success) { | |
| 84 if (!callback_.is_null()) { | |
| 85 JNIEnv* env = base::android::AttachCurrentThread(); | |
| 86 Java_AwCookieManager_invokeSetCookieCallback( | |
| 87 env, callback_.obj(), success); | |
| 88 } | |
| 89 } | |
| 90 | |
| 91 private: | |
| 92 ScopedJavaGlobalRef<jobject> callback_; | |
| 93 DISALLOW_COPY_AND_ASSIGN(SetCookieCallback); | |
| 94 }; | |
| 95 | |
| 56 namespace { | 96 namespace { |
| 57 | 97 |
| 58 // Are cookies allowed for file:// URLs by default? | 98 // Are cookies allowed for file:// URLs by default? |
| 59 const bool kDefaultFileSchemeAllowed = false; | 99 const bool kDefaultFileSchemeAllowed = false; |
| 60 | 100 |
| 61 void ImportLegacyCookieStore(const FilePath& cookie_store_path) { | 101 void ImportLegacyCookieStore(const FilePath& cookie_store_path) { |
| 62 // We use the old cookie store to create the new cookie store only if the | 102 // We use the old cookie store to create the new cookie store only if the |
| 63 // new cookie store does not exist. | 103 // new cookie store does not exist. |
| 64 if (base::PathExists(cookie_store_path)) | 104 if (base::PathExists(cookie_store_path)) |
| 65 return; | 105 return; |
| (...skipping 25 matching lines...) Expand all Loading... | |
| 91 public: | 131 public: |
| 92 static CookieManager* GetInstance(); | 132 static CookieManager* GetInstance(); |
| 93 | 133 |
| 94 scoped_refptr<net::CookieStore> CreateBrowserThreadCookieStore( | 134 scoped_refptr<net::CookieStore> CreateBrowserThreadCookieStore( |
| 95 AwBrowserContext* browser_context); | 135 AwBrowserContext* browser_context); |
| 96 | 136 |
| 97 void SetAcceptCookie(bool accept); | 137 void SetAcceptCookie(bool accept); |
| 98 bool AcceptCookie(); | 138 bool AcceptCookie(); |
| 99 void SetAcceptThirdPartyCookie(bool accept); | 139 void SetAcceptThirdPartyCookie(bool accept); |
| 100 bool AcceptThirdPartyCookie(); | 140 bool AcceptThirdPartyCookie(); |
| 101 void SetCookie(const GURL& host, const std::string& cookie_value); | 141 void SetCookie(const GURL& host, |
| 142 const std::string& cookie_value, | |
| 143 scoped_ptr<SetCookieCallback> callback); | |
| 144 void SetCookieSync(const GURL& host, | |
| 145 const std::string& cookie_value); | |
| 102 std::string GetCookie(const GURL& host); | 146 std::string GetCookie(const GURL& host); |
| 103 void RemoveSessionCookie(); | 147 void RemoveSessionCookie(scoped_ptr<RemoveCookiesCallback> callback); |
| 104 void RemoveAllCookie(); | 148 void RemoveAllCookie(scoped_ptr<RemoveCookiesCallback> callback); |
| 149 void RemoveAllCookieSync(); | |
| 150 void RemoveSessionCookieSync(); | |
| 105 void RemoveExpiredCookie(); | 151 void RemoveExpiredCookie(); |
| 106 void FlushCookieStore(); | 152 void FlushCookieStore(); |
| 107 bool HasCookies(); | 153 bool HasCookies(); |
| 108 bool AllowFileSchemeCookies(); | 154 bool AllowFileSchemeCookies(); |
| 109 void SetAcceptFileSchemeCookies(bool accept); | 155 void SetAcceptFileSchemeCookies(bool accept); |
| 110 | 156 |
| 111 private: | 157 private: |
| 112 friend struct base::DefaultLazyInstanceTraits<CookieManager>; | 158 friend struct base::DefaultLazyInstanceTraits<CookieManager>; |
| 113 | 159 |
| 114 CookieManager(); | 160 CookieManager(); |
| 115 ~CookieManager(); | 161 ~CookieManager(); |
| 116 | 162 |
| 117 typedef base::Callback<void(base::WaitableEvent*)> CookieTask; | 163 typedef base::Callback<void(WaitableEvent*)> CookieSyncTask; |
| 164 typedef base::Callback<void()> CookieTask; | |
|
mkosiba (inactive)
2014/05/13 09:37:17
FYI: you're redefining base::Closure
| |
| 165 void ExecCookieTaskSync(const CookieSyncTask& task); | |
| 118 void ExecCookieTask(const CookieTask& task); | 166 void ExecCookieTask(const CookieTask& task); |
| 119 | 167 |
| 120 void SetCookieAsyncHelper( | 168 void SetCookieHelper( |
| 121 const GURL& host, | 169 const GURL& host, |
| 122 const std::string& value, | 170 const std::string& value, |
| 123 base::WaitableEvent* completion); | 171 scoped_ptr<SetCookieCallback> callback); |
| 124 void SetCookieCompleted(base::WaitableEvent* completion, bool success); | 172 void SetCookieSyncHelper( |
| 173 const GURL& host, | |
| 174 const std::string& value, | |
| 175 WaitableEvent* completion); | |
| 176 void SetCookieCompleted(scoped_ptr<SetCookieCallback> callback, bool success); | |
| 177 void SetCookieSyncCompleted(WaitableEvent* completion, bool success); | |
| 125 | 178 |
| 126 void GetCookieValueAsyncHelper( | 179 void GetCookieValueAsyncHelper( |
| 127 const GURL& host, | 180 const GURL& host, |
| 128 std::string* result, | 181 std::string* result, |
| 129 base::WaitableEvent* completion); | 182 WaitableEvent* completion); |
| 130 void GetCookieValueCompleted(base::WaitableEvent* completion, | 183 void GetCookieValueCompleted(WaitableEvent* completion, |
| 131 std::string* result, | 184 std::string* result, |
| 132 const std::string& value); | 185 const std::string& value); |
| 133 | 186 |
| 134 void RemoveSessionCookieAsyncHelper(base::WaitableEvent* completion); | 187 void RemoveSessionCookieHelper(scoped_ptr<RemoveCookiesCallback> callback); |
| 135 void RemoveAllCookieAsyncHelper(base::WaitableEvent* completion); | 188 void RemoveAllCookieHelper(scoped_ptr<RemoveCookiesCallback> callback); |
| 136 void RemoveCookiesCompleted(base::WaitableEvent* completion, int num_deleted); | 189 void RemoveCookiesCompleted(scoped_ptr<RemoveCookiesCallback> callback, |
| 190 int num_deleted); | |
| 137 | 191 |
| 138 void FlushCookieStoreAsyncHelper(base::WaitableEvent* completion); | 192 void RemoveSessionCookieSyncHelper(WaitableEvent* completion); |
| 193 void RemoveAllCookieSyncHelper(WaitableEvent* completion); | |
| 194 void RemoveCookiesSyncCompleted(WaitableEvent* completion, int num_deleted); | |
| 195 | |
| 196 void FlushCookieStoreAsyncHelper(WaitableEvent* completion); | |
| 139 | 197 |
| 140 void HasCookiesAsyncHelper(bool* result, | 198 void HasCookiesAsyncHelper(bool* result, |
| 141 base::WaitableEvent* completion); | 199 WaitableEvent* completion); |
| 142 void HasCookiesCompleted(base::WaitableEvent* completion, | 200 void HasCookiesCompleted(WaitableEvent* completion, |
| 143 bool* result, | 201 bool* result, |
| 144 const CookieList& cookies); | 202 const CookieList& cookies); |
| 145 | 203 |
| 146 void CreateCookieMonster( | 204 void CreateCookieMonster( |
| 147 const FilePath& user_data_dir, | 205 const FilePath& user_data_dir, |
| 148 const scoped_refptr<base::SequencedTaskRunner>& client_task_runner, | 206 const scoped_refptr<base::SequencedTaskRunner>& client_task_runner, |
| 149 const scoped_refptr<base::SequencedTaskRunner>& background_task_runner); | 207 const scoped_refptr<base::SequencedTaskRunner>& background_task_runner); |
| 150 void EnsureCookieMonsterExistsLocked(); | 208 void EnsureCookieMonsterExistsLocked(); |
| 151 bool AllowFileSchemeCookiesLocked(); | 209 bool AllowFileSchemeCookiesLocked(); |
| 152 void SetAcceptFileSchemeCookiesLocked(bool accept); | 210 void SetAcceptFileSchemeCookiesLocked(bool accept); |
| 153 | 211 |
| 154 scoped_refptr<net::CookieMonster> cookie_monster_; | 212 scoped_refptr<net::CookieMonster> cookie_monster_; |
| 155 scoped_refptr<base::MessageLoopProxy> cookie_monster_proxy_; | 213 scoped_refptr<base::MessageLoopProxy> cookie_monster_proxy_; |
| 156 base::Lock cookie_monster_lock_; | 214 base::Lock cookie_monster_lock_; |
| 157 | 215 |
| 158 // Both these threads are normally NULL. They only exist if CookieManager was | 216 // Both these threads are normally NULL. They only exist if CookieManager was |
| 159 // accessed before Chromium was started. | 217 // accessed before Chromium was started. |
| 160 scoped_ptr<base::Thread> cookie_monster_client_thread_; | 218 scoped_ptr<base::Thread> cookie_monster_client_thread_; |
| 161 scoped_ptr<base::Thread> cookie_monster_backend_thread_; | 219 scoped_ptr<base::Thread> cookie_monster_backend_thread_; |
| 162 | 220 |
| 163 DISALLOW_COPY_AND_ASSIGN(CookieManager); | 221 DISALLOW_COPY_AND_ASSIGN(CookieManager); |
| 164 }; | 222 }; |
| 165 | 223 |
| 224 | |
| 166 base::LazyInstance<CookieManager>::Leaky g_lazy_instance; | 225 base::LazyInstance<CookieManager>::Leaky g_lazy_instance; |
| 167 | 226 |
| 168 // static | 227 // static |
| 169 CookieManager* CookieManager::GetInstance() { | 228 CookieManager* CookieManager::GetInstance() { |
| 170 return g_lazy_instance.Pointer(); | 229 return g_lazy_instance.Pointer(); |
| 171 } | 230 } |
| 172 | 231 |
| 173 CookieManager::CookieManager() { | 232 CookieManager::CookieManager() { |
| 174 } | 233 } |
| 175 | 234 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 214 cookie_monster_proxy_ = cookie_monster_client_thread_->message_loop_proxy(); | 273 cookie_monster_proxy_ = cookie_monster_client_thread_->message_loop_proxy(); |
| 215 cookie_monster_backend_thread_.reset( | 274 cookie_monster_backend_thread_.reset( |
| 216 new base::Thread("CookieMonsterBackend")); | 275 new base::Thread("CookieMonsterBackend")); |
| 217 cookie_monster_backend_thread_->Start(); | 276 cookie_monster_backend_thread_->Start(); |
| 218 | 277 |
| 219 CreateCookieMonster(user_data_dir, | 278 CreateCookieMonster(user_data_dir, |
| 220 cookie_monster_proxy_, | 279 cookie_monster_proxy_, |
| 221 cookie_monster_backend_thread_->message_loop_proxy()); | 280 cookie_monster_backend_thread_->message_loop_proxy()); |
| 222 } | 281 } |
| 223 | 282 |
| 224 // Executes the |task| on the |cookie_monster_proxy_| message loop. | 283 // Executes the |task| on the |cookie_monster_proxy_| message loop and |
| 225 void CookieManager::ExecCookieTask(const CookieTask& task) { | 284 // waits for it to complete before returning. |
| 226 base::WaitableEvent completion(false, false); | 285 void CookieManager::ExecCookieTaskSync(const CookieSyncTask& task) { |
| 286 WaitableEvent completion(false, false); | |
| 227 base::AutoLock lock(cookie_monster_lock_); | 287 base::AutoLock lock(cookie_monster_lock_); |
| 228 | 288 |
| 229 EnsureCookieMonsterExistsLocked(); | 289 EnsureCookieMonsterExistsLocked(); |
| 230 | 290 |
| 231 cookie_monster_proxy_->PostTask(FROM_HERE, base::Bind(task, &completion)); | 291 cookie_monster_proxy_->PostTask(FROM_HERE, base::Bind(task, &completion)); |
| 232 | 292 |
| 233 // We always wait for the posted task to complete, even when it doesn't return | |
| 234 // a value, because previous versions of the CookieManager API were | |
| 235 // synchronous in most/all cases and the caller may be relying on this. | |
| 236 ScopedAllowWaitForLegacyWebViewApi wait; | 293 ScopedAllowWaitForLegacyWebViewApi wait; |
| 237 completion.Wait(); | 294 completion.Wait(); |
| 238 } | 295 } |
| 239 | 296 |
| 297 // Executes the |task| on the |cookie_monster_proxy_| message loop. | |
| 298 void CookieManager::ExecCookieTask(const CookieTask& task) { | |
| 299 base::AutoLock lock(cookie_monster_lock_); | |
| 300 EnsureCookieMonsterExistsLocked(); | |
| 301 cookie_monster_proxy_->PostTask(FROM_HERE, task); | |
| 302 } | |
| 303 | |
| 240 scoped_refptr<net::CookieStore> CookieManager::CreateBrowserThreadCookieStore( | 304 scoped_refptr<net::CookieStore> CookieManager::CreateBrowserThreadCookieStore( |
| 241 AwBrowserContext* browser_context) { | 305 AwBrowserContext* browser_context) { |
| 242 base::AutoLock lock(cookie_monster_lock_); | 306 base::AutoLock lock(cookie_monster_lock_); |
| 243 | 307 |
| 244 if (cookie_monster_client_thread_) { | 308 if (cookie_monster_client_thread_) { |
| 245 // We created a cookie monster already on its own threads; we'll just keep | 309 // We created a cookie monster already on its own threads; we'll just keep |
| 246 // using it rather than creating one on the normal Chromium threads. | 310 // using it rather than creating one on the normal Chromium threads. |
| 247 // CookieMonster is threadsafe, so this is fine. | 311 // CookieMonster is threadsafe, so this is fine. |
| 248 return cookie_monster_; | 312 return cookie_monster_; |
| 249 } | 313 } |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 277 | 341 |
| 278 void CookieManager::SetAcceptThirdPartyCookie(bool accept) { | 342 void CookieManager::SetAcceptThirdPartyCookie(bool accept) { |
| 279 AwCookieAccessPolicy::GetInstance()->SetThirdPartyAllowAccess(accept); | 343 AwCookieAccessPolicy::GetInstance()->SetThirdPartyAllowAccess(accept); |
| 280 } | 344 } |
| 281 | 345 |
| 282 bool CookieManager::AcceptThirdPartyCookie() { | 346 bool CookieManager::AcceptThirdPartyCookie() { |
| 283 return AwCookieAccessPolicy::GetInstance()->GetThirdPartyAllowAccess(); | 347 return AwCookieAccessPolicy::GetInstance()->GetThirdPartyAllowAccess(); |
| 284 } | 348 } |
| 285 | 349 |
| 286 void CookieManager::SetCookie(const GURL& host, | 350 void CookieManager::SetCookie(const GURL& host, |
| 351 const std::string& cookie_value, | |
| 352 scoped_ptr<SetCookieCallback> callback) { | |
| 353 ExecCookieTask(base::Bind(&CookieManager::SetCookieHelper, | |
| 354 base::Unretained(this), | |
| 355 host, | |
| 356 cookie_value, | |
| 357 Passed(&callback))); | |
| 358 } | |
| 359 | |
| 360 void CookieManager::SetCookieSync(const GURL& host, | |
| 287 const std::string& cookie_value) { | 361 const std::string& cookie_value) { |
| 288 ExecCookieTask(base::Bind(&CookieManager::SetCookieAsyncHelper, | 362 ExecCookieTaskSync(base::Bind(&CookieManager::SetCookieSyncHelper, |
| 289 base::Unretained(this), | 363 base::Unretained(this), |
| 290 host, | 364 host, |
| 291 cookie_value)); | 365 cookie_value)); |
| 292 } | 366 } |
| 293 | 367 |
| 294 void CookieManager::SetCookieAsyncHelper( | 368 void CookieManager::SetCookieHelper( |
| 295 const GURL& host, | 369 const GURL& host, |
| 296 const std::string& value, | 370 const std::string& value, |
| 297 base::WaitableEvent* completion) { | 371 scoped_ptr<SetCookieCallback> callback) { |
| 298 net::CookieOptions options; | 372 net::CookieOptions options; |
| 299 options.set_include_httponly(); | 373 options.set_include_httponly(); |
| 300 | 374 |
| 301 cookie_monster_->SetCookieWithOptionsAsync( | 375 cookie_monster_->SetCookieWithOptionsAsync( |
| 302 host, value, options, | 376 host, value, options, |
| 303 base::Bind(&CookieManager::SetCookieCompleted, | 377 base::Bind(&CookieManager::SetCookieCompleted, |
| 304 base::Unretained(this), | 378 base::Unretained(this), |
| 379 Passed(&callback))); | |
| 380 } | |
| 381 | |
| 382 void CookieManager::SetCookieSyncHelper( | |
| 383 const GURL& host, | |
| 384 const std::string& value, | |
| 385 WaitableEvent* completion) { | |
| 386 net::CookieOptions options; | |
| 387 options.set_include_httponly(); | |
| 388 | |
| 389 cookie_monster_->SetCookieWithOptionsAsync( | |
| 390 host, value, options, | |
| 391 base::Bind(&CookieManager::SetCookieSyncCompleted, | |
| 392 base::Unretained(this), | |
| 305 completion)); | 393 completion)); |
| 306 } | 394 } |
| 307 | 395 |
| 308 void CookieManager::SetCookieCompleted(base::WaitableEvent* completion, | 396 void CookieManager::SetCookieCompleted(scoped_ptr<SetCookieCallback> callback, |
| 309 bool success) { | 397 bool success) { |
| 310 // The CookieManager API does not return a value for SetCookie, | 398 callback->Invoke(success); |
| 311 // so we don't need to propagate the |success| value back to the caller. | 399 } |
| 400 | |
| 401 void CookieManager::SetCookieSyncCompleted(WaitableEvent* completion, | |
| 402 bool success) { | |
| 312 completion->Signal(); | 403 completion->Signal(); |
| 313 } | 404 } |
| 314 | 405 |
| 315 std::string CookieManager::GetCookie(const GURL& host) { | 406 std::string CookieManager::GetCookie(const GURL& host) { |
| 316 std::string cookie_value; | 407 std::string cookie_value; |
| 317 ExecCookieTask(base::Bind(&CookieManager::GetCookieValueAsyncHelper, | 408 ExecCookieTaskSync(base::Bind(&CookieManager::GetCookieValueAsyncHelper, |
| 318 base::Unretained(this), | 409 base::Unretained(this), |
| 319 host, | 410 host, |
| 320 &cookie_value)); | 411 &cookie_value)); |
| 321 | 412 |
| 322 return cookie_value; | 413 return cookie_value; |
| 323 } | 414 } |
| 324 | 415 |
| 325 void CookieManager::GetCookieValueAsyncHelper( | 416 void CookieManager::GetCookieValueAsyncHelper( |
| 326 const GURL& host, | 417 const GURL& host, |
| 327 std::string* result, | 418 std::string* result, |
| 328 base::WaitableEvent* completion) { | 419 WaitableEvent* completion) { |
| 329 net::CookieOptions options; | 420 net::CookieOptions options; |
| 330 options.set_include_httponly(); | 421 options.set_include_httponly(); |
| 331 | 422 |
| 332 cookie_monster_->GetCookiesWithOptionsAsync( | 423 cookie_monster_->GetCookiesWithOptionsAsync( |
| 333 host, | 424 host, |
| 334 options, | 425 options, |
| 335 base::Bind(&CookieManager::GetCookieValueCompleted, | 426 base::Bind(&CookieManager::GetCookieValueCompleted, |
| 336 base::Unretained(this), | 427 base::Unretained(this), |
| 337 completion, | 428 completion, |
| 338 result)); | 429 result)); |
| 339 } | 430 } |
| 340 | 431 |
| 341 void CookieManager::GetCookieValueCompleted(base::WaitableEvent* completion, | 432 void CookieManager::GetCookieValueCompleted(WaitableEvent* completion, |
| 342 std::string* result, | 433 std::string* result, |
| 343 const std::string& value) { | 434 const std::string& value) { |
| 344 *result = value; | 435 *result = value; |
| 345 completion->Signal(); | 436 completion->Signal(); |
| 346 } | 437 } |
| 347 | 438 |
| 348 void CookieManager::RemoveSessionCookie() { | 439 void CookieManager::RemoveSessionCookie( |
| 349 ExecCookieTask(base::Bind(&CookieManager::RemoveSessionCookieAsyncHelper, | 440 scoped_ptr<RemoveCookiesCallback> callback) { |
| 441 ExecCookieTask(base::Bind(&CookieManager::RemoveSessionCookieHelper, | |
| 442 base::Unretained(this), | |
| 443 Passed(&callback))); | |
| 444 } | |
| 445 | |
| 446 void CookieManager::RemoveSessionCookieSync() { | |
| 447 ExecCookieTaskSync(base::Bind(&CookieManager::RemoveSessionCookieSyncHelper, | |
| 350 base::Unretained(this))); | 448 base::Unretained(this))); |
| 351 } | 449 } |
| 352 | 450 |
| 353 void CookieManager::RemoveSessionCookieAsyncHelper( | 451 void CookieManager::RemoveSessionCookieHelper( |
| 354 base::WaitableEvent* completion) { | 452 scoped_ptr<RemoveCookiesCallback> callback) { |
| 355 cookie_monster_->DeleteSessionCookiesAsync( | 453 cookie_monster_->DeleteSessionCookiesAsync( |
| 356 base::Bind(&CookieManager::RemoveCookiesCompleted, | 454 base::Bind(&CookieManager::RemoveCookiesCompleted, |
| 357 base::Unretained(this), | 455 base::Unretained(this), |
| 456 Passed(&callback))); | |
| 457 } | |
| 458 | |
| 459 void CookieManager::RemoveSessionCookieSyncHelper(WaitableEvent* completion) { | |
| 460 cookie_monster_->DeleteSessionCookiesAsync( | |
| 461 base::Bind(&CookieManager::RemoveCookiesSyncCompleted, | |
| 462 base::Unretained(this), | |
| 358 completion)); | 463 completion)); |
| 359 } | 464 } |
| 360 | 465 |
| 361 void CookieManager::RemoveCookiesCompleted(base::WaitableEvent* completion, | 466 void CookieManager::RemoveCookiesCompleted( |
|
mkosiba (inactive)
2014/05/13 09:37:17
like we talked offline - let's try and collapse th
hjd_google
2014/05/15 10:52:07
Done!
| |
| 362 int num_deleted) { | 467 scoped_ptr<RemoveCookiesCallback> callback, |
| 363 // The CookieManager API does not return a value for removeSessionCookie or | 468 int num_deleted) { |
| 364 // removeAllCookie, so we don't need to propagate the |num_deleted| value back | 469 callback->Invoke(num_deleted); |
| 365 // to the caller. | 470 } |
| 471 | |
| 472 void CookieManager::RemoveCookiesSyncCompleted( | |
| 473 WaitableEvent* completion, | |
| 474 int num_deleted) { | |
| 366 completion->Signal(); | 475 completion->Signal(); |
| 367 } | 476 } |
| 368 | 477 |
| 369 void CookieManager::RemoveAllCookie() { | 478 void CookieManager::RemoveAllCookie( |
| 370 ExecCookieTask(base::Bind(&CookieManager::RemoveAllCookieAsyncHelper, | 479 scoped_ptr<RemoveCookiesCallback> callback) { |
| 480 ExecCookieTask(base::Bind(&CookieManager::RemoveAllCookieHelper, | |
| 481 base::Unretained(this), | |
| 482 Passed(&callback))); | |
| 483 } | |
| 484 | |
| 485 void CookieManager::RemoveAllCookieSync() { | |
| 486 ExecCookieTaskSync(base::Bind(&CookieManager::RemoveAllCookieSyncHelper, | |
| 371 base::Unretained(this))); | 487 base::Unretained(this))); |
| 372 } | 488 } |
| 373 | 489 |
| 374 void CookieManager::RemoveAllCookieAsyncHelper( | 490 void CookieManager::RemoveAllCookieHelper( |
| 375 base::WaitableEvent* completion) { | 491 scoped_ptr<RemoveCookiesCallback> callback) { |
| 376 cookie_monster_->DeleteAllAsync( | 492 cookie_monster_->DeleteAllAsync( |
| 377 base::Bind(&CookieManager::RemoveCookiesCompleted, | 493 base::Bind(&CookieManager::RemoveCookiesCompleted, |
| 378 base::Unretained(this), | 494 base::Unretained(this), |
| 495 Passed(&callback))); | |
| 496 } | |
| 497 | |
| 498 void CookieManager::RemoveAllCookieSyncHelper( | |
| 499 WaitableEvent* completion) { | |
| 500 cookie_monster_->DeleteAllAsync( | |
| 501 base::Bind(&CookieManager::RemoveCookiesSyncCompleted, | |
| 502 base::Unretained(this), | |
| 379 completion)); | 503 completion)); |
| 380 } | 504 } |
| 381 | 505 |
| 382 void CookieManager::RemoveExpiredCookie() { | 506 void CookieManager::RemoveExpiredCookie() { |
| 383 // HasCookies will call GetAllCookiesAsync, which in turn will force a GC. | 507 // HasCookies will call GetAllCookiesAsync, which in turn will force a GC. |
| 384 HasCookies(); | 508 HasCookies(); |
| 385 } | 509 } |
| 386 | 510 |
| 387 void CookieManager::FlushCookieStoreAsyncHelper( | 511 void CookieManager::FlushCookieStoreAsyncHelper( |
| 388 base::WaitableEvent* completion) { | 512 WaitableEvent* completion) { |
| 389 cookie_monster_->FlushStore(base::Bind(&base::WaitableEvent::Signal, | 513 cookie_monster_->FlushStore(base::Bind(&WaitableEvent::Signal, |
| 390 base::Unretained(completion))); | 514 base::Unretained(completion))); |
| 391 } | 515 } |
| 392 | 516 |
| 393 void CookieManager::FlushCookieStore() { | 517 void CookieManager::FlushCookieStore() { |
| 394 ExecCookieTask(base::Bind(&CookieManager::FlushCookieStoreAsyncHelper, | 518 ExecCookieTaskSync(base::Bind(&CookieManager::FlushCookieStoreAsyncHelper, |
| 395 base::Unretained(this))); | 519 base::Unretained(this))); |
| 396 } | 520 } |
| 397 | 521 |
| 398 bool CookieManager::HasCookies() { | 522 bool CookieManager::HasCookies() { |
| 399 bool has_cookies; | 523 bool has_cookies; |
| 400 ExecCookieTask(base::Bind(&CookieManager::HasCookiesAsyncHelper, | 524 ExecCookieTaskSync(base::Bind(&CookieManager::HasCookiesAsyncHelper, |
| 401 base::Unretained(this), | 525 base::Unretained(this), |
| 402 &has_cookies)); | 526 &has_cookies)); |
| 403 return has_cookies; | 527 return has_cookies; |
| 404 } | 528 } |
| 405 | 529 |
| 406 // TODO(kristianm): Simplify this, copying the entire list around | 530 // TODO(kristianm): Simplify this, copying the entire list around |
| 407 // should not be needed. | 531 // should not be needed. |
| 408 void CookieManager::HasCookiesAsyncHelper(bool* result, | 532 void CookieManager::HasCookiesAsyncHelper(bool* result, |
| 409 base::WaitableEvent* completion) { | 533 WaitableEvent* completion) { |
| 410 cookie_monster_->GetAllCookiesAsync( | 534 cookie_monster_->GetAllCookiesAsync( |
| 411 base::Bind(&CookieManager::HasCookiesCompleted, | 535 base::Bind(&CookieManager::HasCookiesCompleted, |
| 412 base::Unretained(this), | 536 base::Unretained(this), |
| 413 completion, | 537 completion, |
| 414 result)); | 538 result)); |
| 415 } | 539 } |
| 416 | 540 |
| 417 void CookieManager::HasCookiesCompleted(base::WaitableEvent* completion, | 541 void CookieManager::HasCookiesCompleted(WaitableEvent* completion, |
| 418 bool* result, | 542 bool* result, |
| 419 const CookieList& cookies) { | 543 const CookieList& cookies) { |
| 420 *result = cookies.size() != 0; | 544 *result = cookies.size() != 0; |
| 421 completion->Signal(); | 545 completion->Signal(); |
| 422 } | 546 } |
| 423 | 547 |
| 424 bool CookieManager::AllowFileSchemeCookies() { | 548 bool CookieManager::AllowFileSchemeCookies() { |
| 425 base::AutoLock lock(cookie_monster_lock_); | 549 base::AutoLock lock(cookie_monster_lock_); |
| 426 EnsureCookieMonsterExistsLocked(); | 550 EnsureCookieMonsterExistsLocked(); |
| 427 return AllowFileSchemeCookiesLocked(); | 551 return AllowFileSchemeCookiesLocked(); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 460 static void SetAcceptThirdPartyCookie(JNIEnv* env, | 584 static void SetAcceptThirdPartyCookie(JNIEnv* env, |
| 461 jobject obj, | 585 jobject obj, |
| 462 jboolean accept) { | 586 jboolean accept) { |
| 463 CookieManager::GetInstance()->SetAcceptThirdPartyCookie(accept); | 587 CookieManager::GetInstance()->SetAcceptThirdPartyCookie(accept); |
| 464 } | 588 } |
| 465 | 589 |
| 466 static jboolean AcceptThirdPartyCookie(JNIEnv* env, jobject obj) { | 590 static jboolean AcceptThirdPartyCookie(JNIEnv* env, jobject obj) { |
| 467 return CookieManager::GetInstance()->AcceptThirdPartyCookie(); | 591 return CookieManager::GetInstance()->AcceptThirdPartyCookie(); |
| 468 } | 592 } |
| 469 | 593 |
| 470 static void SetCookie(JNIEnv* env, jobject obj, jstring url, jstring value) { | 594 static void SetCookie(JNIEnv* env, |
| 595 jobject obj, | |
| 596 jstring url, | |
| 597 jstring value, | |
| 598 jobject java_callback) { | |
| 471 GURL host(ConvertJavaStringToUTF16(env, url)); | 599 GURL host(ConvertJavaStringToUTF16(env, url)); |
| 472 std::string cookie_value(ConvertJavaStringToUTF8(env, value)); | 600 std::string cookie_value(ConvertJavaStringToUTF8(env, value)); |
| 601 scoped_ptr<SetCookieCallback> callback( | |
| 602 new SetCookieCallback(env, java_callback)); | |
| 603 CookieManager::GetInstance()->SetCookie(host, cookie_value, callback.Pass()); | |
| 604 } | |
| 473 | 605 |
| 474 CookieManager::GetInstance()->SetCookie(host, cookie_value); | 606 static void SetCookieSync(JNIEnv* env, |
| 607 jobject obj, | |
| 608 jstring url, | |
| 609 jstring value) { | |
| 610 GURL host(ConvertJavaStringToUTF16(env, url)); | |
| 611 std::string cookie_value(ConvertJavaStringToUTF8(env, value)); | |
| 612 CookieManager::GetInstance()->SetCookieSync(host, cookie_value); | |
| 475 } | 613 } |
| 476 | 614 |
| 477 static jstring GetCookie(JNIEnv* env, jobject obj, jstring url) { | 615 static jstring GetCookie(JNIEnv* env, jobject obj, jstring url) { |
| 478 GURL host(ConvertJavaStringToUTF16(env, url)); | 616 GURL host(ConvertJavaStringToUTF16(env, url)); |
| 479 | 617 |
| 480 return base::android::ConvertUTF8ToJavaString( | 618 return base::android::ConvertUTF8ToJavaString( |
| 481 env, | 619 env, |
| 482 CookieManager::GetInstance()->GetCookie(host)).Release(); | 620 CookieManager::GetInstance()->GetCookie(host)).Release(); |
| 483 } | 621 } |
| 484 | 622 |
| 485 static void RemoveSessionCookie(JNIEnv* env, jobject obj) { | 623 static void RemoveSessionCookie(JNIEnv* env, |
| 486 CookieManager::GetInstance()->RemoveSessionCookie(); | 624 jobject obj, |
| 625 jobject java_callback) { | |
| 626 scoped_ptr<RemoveCookiesCallback> callback( | |
| 627 new RemoveCookiesCallback(env, java_callback)); | |
| 628 CookieManager::GetInstance()->RemoveSessionCookie(callback.Pass()); | |
| 487 } | 629 } |
| 488 | 630 |
| 489 static void RemoveAllCookie(JNIEnv* env, jobject obj) { | 631 static void RemoveSessionCookieSync(JNIEnv* env, jobject obj) { |
| 490 CookieManager::GetInstance()->RemoveAllCookie(); | 632 CookieManager::GetInstance()->RemoveSessionCookieSync(); |
| 633 } | |
| 634 | |
| 635 static void RemoveAllCookie(JNIEnv* env, jobject obj, jobject java_callback) { | |
| 636 scoped_ptr<RemoveCookiesCallback> callback( | |
| 637 new RemoveCookiesCallback(env, java_callback)); | |
| 638 CookieManager::GetInstance()->RemoveAllCookie(callback.Pass()); | |
| 639 } | |
| 640 | |
| 641 static void RemoveAllCookieSync(JNIEnv* env, jobject obj) { | |
| 642 CookieManager::GetInstance()->RemoveAllCookieSync(); | |
| 491 } | 643 } |
| 492 | 644 |
| 493 static void RemoveExpiredCookie(JNIEnv* env, jobject obj) { | 645 static void RemoveExpiredCookie(JNIEnv* env, jobject obj) { |
| 494 CookieManager::GetInstance()->RemoveExpiredCookie(); | 646 CookieManager::GetInstance()->RemoveExpiredCookie(); |
| 495 } | 647 } |
| 496 | 648 |
| 497 static void FlushCookieStore(JNIEnv* env, jobject obj) { | 649 static void FlushCookieStore(JNIEnv* env, jobject obj) { |
| 498 CookieManager::GetInstance()->FlushCookieStore(); | 650 CookieManager::GetInstance()->FlushCookieStore(); |
| 499 } | 651 } |
| 500 | 652 |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 515 AwBrowserContext* browser_context) { | 667 AwBrowserContext* browser_context) { |
| 516 return CookieManager::GetInstance()->CreateBrowserThreadCookieStore( | 668 return CookieManager::GetInstance()->CreateBrowserThreadCookieStore( |
| 517 browser_context); | 669 browser_context); |
| 518 } | 670 } |
| 519 | 671 |
| 520 bool RegisterCookieManager(JNIEnv* env) { | 672 bool RegisterCookieManager(JNIEnv* env) { |
| 521 return RegisterNativesImpl(env); | 673 return RegisterNativesImpl(env); |
| 522 } | 674 } |
| 523 | 675 |
| 524 } // android_webview namespace | 676 } // android_webview namespace |
| OLD | NEW |