content_settings_manager_impl.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. // Copyright 2019 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 COMPONENTS_CONTENT_SETTINGS_BROWSER_CONTENT_SETTINGS_MANAGER_IMPL_H_
  5. #define COMPONENTS_CONTENT_SETTINGS_BROWSER_CONTENT_SETTINGS_MANAGER_IMPL_H_
  6. #include "base/memory/ref_counted.h"
  7. #include "components/content_settings/common/content_settings_manager.mojom.h"
  8. namespace content {
  9. class BrowserContext;
  10. class RenderProcessHost;
  11. } // namespace content
  12. namespace content_settings {
  13. class CookieSettings;
  14. } // namespace content_settings
  15. namespace net {
  16. class SiteForCookies;
  17. } // namespace net
  18. namespace content_settings {
  19. class ContentSettingsManagerImpl
  20. : public content_settings::mojom::ContentSettingsManager {
  21. public:
  22. class Delegate {
  23. public:
  24. virtual ~Delegate() = default;
  25. // Gets cookie settings for this browser context.
  26. virtual scoped_refptr<CookieSettings> GetCookieSettings(
  27. content::BrowserContext* browser_context) = 0;
  28. // Allows delegate to override AllowStorageAccess(). If the delegate returns
  29. // true here, the default logic will be bypassed. Can be called on any
  30. // thread.
  31. virtual bool AllowStorageAccess(
  32. int render_process_id,
  33. int render_frame_id,
  34. StorageType storage_type,
  35. const GURL& url,
  36. bool allowed,
  37. base::OnceCallback<void(bool)>* callback) = 0;
  38. // Returns a new instance of this delegate.
  39. virtual std::unique_ptr<Delegate> Clone() = 0;
  40. };
  41. ~ContentSettingsManagerImpl() override;
  42. static void Create(
  43. content::RenderProcessHost* render_process_host,
  44. mojo::PendingReceiver<content_settings::mojom::ContentSettingsManager>
  45. receiver,
  46. std::unique_ptr<Delegate> delegate);
  47. // mojom::ContentSettingsManager methods:
  48. void Clone(
  49. mojo::PendingReceiver<content_settings::mojom::ContentSettingsManager>
  50. receiver) override;
  51. void AllowStorageAccess(int32_t render_frame_id,
  52. StorageType storage_type,
  53. const url::Origin& origin,
  54. const net::SiteForCookies& site_for_cookies,
  55. const url::Origin& top_frame_origin,
  56. base::OnceCallback<void(bool)> callback) override;
  57. void OnContentBlocked(int32_t render_frame_id,
  58. ContentSettingsType type) override;
  59. private:
  60. ContentSettingsManagerImpl(int render_process_id,
  61. std::unique_ptr<Delegate> delegate,
  62. scoped_refptr<CookieSettings> cookie_settings);
  63. ContentSettingsManagerImpl(const ContentSettingsManagerImpl& other);
  64. static void CreateOnThread(
  65. int render_process_id,
  66. mojo::PendingReceiver<content_settings::mojom::ContentSettingsManager>
  67. receiver,
  68. scoped_refptr<CookieSettings> cookie_settings,
  69. std::unique_ptr<ContentSettingsManagerImpl::Delegate> delegate);
  70. std::unique_ptr<Delegate> delegate_;
  71. // Use these IDs to hold a weak reference back to the RenderFrameHost.
  72. const int render_process_id_;
  73. // Used to look up storage permissions.
  74. scoped_refptr<content_settings::CookieSettings> cookie_settings_;
  75. SEQUENCE_CHECKER(sequence_checker_);
  76. };
  77. } // namespace content_settings
  78. #endif // COMPONENTS_CONTENT_SETTINGS_BROWSER_CONTENT_SETTINGS_MANAGER_IMPL_H_