cookie_manager_impl.h 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. // Copyright 2020 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #ifndef WEBLAYER_BROWSER_COOKIE_MANAGER_IMPL_H_
  5. #define WEBLAYER_BROWSER_COOKIE_MANAGER_IMPL_H_
  6. #include "base/memory/raw_ptr.h"
  7. #include "base/memory/weak_ptr.h"
  8. #include "base/run_loop.h"
  9. #include "build/build_config.h"
  10. #include "mojo/public/cpp/bindings/receiver_set.h"
  11. #include "services/network/public/mojom/cookie_manager.mojom.h"
  12. #include "weblayer/public/cookie_manager.h"
  13. #if BUILDFLAG(IS_ANDROID)
  14. #include <jni.h>
  15. #include "base/android/scoped_java_ref.h"
  16. #endif
  17. namespace content {
  18. class BrowserContext;
  19. }
  20. namespace weblayer {
  21. class CookieManagerImpl : public CookieManager {
  22. public:
  23. explicit CookieManagerImpl(content::BrowserContext* browser_context);
  24. ~CookieManagerImpl() override;
  25. CookieManagerImpl(const CookieManagerImpl&) = delete;
  26. CookieManagerImpl& operator=(const CookieManagerImpl&) = delete;
  27. // CookieManager implementation:
  28. void SetCookie(const GURL& url,
  29. const std::string& value,
  30. SetCookieCallback callback) override;
  31. void GetCookie(const GURL& url, GetCookieCallback callback) override;
  32. void GetResponseCookies(const GURL& url,
  33. GetResponseCookiesCallback callback) override;
  34. base::CallbackListSubscription AddCookieChangedCallback(
  35. const GURL& url,
  36. const std::string* name,
  37. CookieChangedCallback callback) override;
  38. #if BUILDFLAG(IS_ANDROID)
  39. bool SetCookie(JNIEnv* env,
  40. const base::android::JavaParamRef<jstring>& url,
  41. const base::android::JavaParamRef<jstring>& value,
  42. const base::android::JavaParamRef<jobject>& callback);
  43. void GetCookie(JNIEnv* env,
  44. const base::android::JavaParamRef<jstring>& url,
  45. const base::android::JavaParamRef<jobject>& callback);
  46. void GetResponseCookies(JNIEnv* env,
  47. const base::android::JavaParamRef<jstring>& url,
  48. const base::android::JavaParamRef<jobject>& callback);
  49. int AddCookieChangedCallback(
  50. JNIEnv* env,
  51. const base::android::JavaParamRef<jstring>& url,
  52. const base::android::JavaParamRef<jstring>& name,
  53. const base::android::JavaParamRef<jobject>& callback);
  54. void RemoveCookieChangedCallback(JNIEnv* env, int id);
  55. #endif
  56. // Fires the cookie flush timer immediately and waits for the flush to
  57. // complete. Returns true if the flush timer was running.
  58. bool FireFlushTimerForTesting();
  59. private:
  60. bool SetCookieInternal(const GURL& url,
  61. const std::string& value,
  62. SetCookieCallback callback);
  63. int AddCookieChangedCallbackInternal(const GURL& url,
  64. const std::string* name,
  65. CookieChangedCallback callback);
  66. void RemoveCookieChangedCallbackInternal(int id);
  67. void OnCookieSet(SetCookieCallback callback, bool success);
  68. void OnFlushTimerFired();
  69. raw_ptr<content::BrowserContext> browser_context_;
  70. mojo::ReceiverSet<network::mojom::CookieChangeListener,
  71. std::unique_ptr<network::mojom::CookieChangeListener>>
  72. cookie_change_receivers_;
  73. std::unique_ptr<base::OneShotTimer> flush_timer_;
  74. std::unique_ptr<base::RunLoop> flush_run_loop_for_testing_;
  75. base::WeakPtrFactory<CookieManagerImpl> weak_factory_{this};
  76. };
  77. } // namespace weblayer
  78. #endif // WEBLAYER_BROWSER_COOKIE_MANAGER_IMPL_H_