Commit 06dea026 authored by Clark DuVall's avatar Clark DuVall Committed by Commit Bot

Move ContentSettingsManagerImpl to //components/content_settings

Now that TabSpecificContentSettings is componentized, it makes sense to
share the logic in ContentSettingsManagerImpl.

Bug: 1070825
Change-Id: I76cd324119640fd374b1ad2b474a665aa7fade7b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2157650Reviewed-by: default avatarChristian Dullweber <dullweber@chromium.org>
Reviewed-by: default avatarRobert Sesek <rsesek@chromium.org>
Reviewed-by: default avatarJohn Abd-El-Malek <jam@chromium.org>
Commit-Queue: Clark DuVall <cduvall@chromium.org>
Cr-Commit-Position: refs/heads/master@{#761018}
parent 9e9a31d6
...@@ -339,8 +339,8 @@ jumbo_static_library("browser") { ...@@ -339,8 +339,8 @@ jumbo_static_library("browser") {
"content_index/content_index_provider_impl.h", "content_index/content_index_provider_impl.h",
"content_settings/chrome_content_settings_utils.cc", "content_settings/chrome_content_settings_utils.cc",
"content_settings/chrome_content_settings_utils.h", "content_settings/chrome_content_settings_utils.h",
"content_settings/content_settings_manager_impl.cc", "content_settings/content_settings_manager_delegate.cc",
"content_settings/content_settings_manager_impl.h", "content_settings/content_settings_manager_delegate.h",
"content_settings/cookie_settings_factory.cc", "content_settings/cookie_settings_factory.cc",
"content_settings/cookie_settings_factory.h", "content_settings/cookie_settings_factory.h",
"content_settings/host_content_settings_map_factory.cc", "content_settings/host_content_settings_map_factory.cc",
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
#include "chrome/browser/cache_stats_recorder.h" #include "chrome/browser/cache_stats_recorder.h"
#include "chrome/browser/chrome_browser_interface_binders.h" #include "chrome/browser/chrome_browser_interface_binders.h"
#include "chrome/browser/chrome_content_browser_client_parts.h" #include "chrome/browser/chrome_content_browser_client_parts.h"
#include "chrome/browser/content_settings/content_settings_manager_impl.h" #include "chrome/browser/content_settings/content_settings_manager_delegate.h"
#include "chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings.h" #include "chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings.h"
#include "chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings_factory.h" #include "chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings_factory.h"
#include "chrome/browser/metrics/chrome_metrics_service_accessor.h" #include "chrome/browser/metrics/chrome_metrics_service_accessor.h"
...@@ -284,8 +284,9 @@ void ChromeContentBrowserClient::BindHostReceiverForRenderer( ...@@ -284,8 +284,9 @@ void ChromeContentBrowserClient::BindHostReceiverForRenderer(
mojo::GenericPendingReceiver receiver) { mojo::GenericPendingReceiver receiver) {
if (auto host_receiver = if (auto host_receiver =
receiver.As<content_settings::mojom::ContentSettingsManager>()) { receiver.As<content_settings::mojom::ContentSettingsManager>()) {
chrome::ContentSettingsManagerImpl::Create(render_process_host, content_settings::ContentSettingsManagerImpl::Create(
std::move(host_receiver)); render_process_host, std::move(host_receiver),
std::make_unique<chrome::ContentSettingsManagerDelegate>());
return; return;
} }
......
// Copyright 2020 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 "chrome/browser/content_settings/content_settings_manager_delegate.h"
#include "chrome/browser/content_settings/cookie_settings_factory.h"
#include "chrome/browser/profiles/profile.h"
#include "components/content_settings/browser/tab_specific_content_settings.h"
#include "components/content_settings/core/browser/cookie_settings.h"
#include "extensions/buildflags/buildflags.h"
#if BUILDFLAG(ENABLE_EXTENSIONS)
#include "extensions/browser/guest_view/web_view/web_view_permission_helper.h"
#include "extensions/browser/guest_view/web_view/web_view_renderer_state.h"
#endif
namespace chrome {
namespace {
#if BUILDFLAG(ENABLE_EXTENSIONS)
void OnFileSystemAccessedInGuestViewContinuation(
int render_process_id,
int render_frame_id,
const GURL& url,
base::OnceCallback<void(bool)> callback,
bool allowed) {
content_settings::TabSpecificContentSettings::FileSystemAccessed(
render_process_id, render_frame_id, url, !allowed);
std::move(callback).Run(allowed);
}
void OnFileSystemAccessedInGuestView(int render_process_id,
int render_frame_id,
const GURL& url,
bool allowed,
base::OnceCallback<void(bool)> callback) {
extensions::WebViewPermissionHelper* web_view_permission_helper =
extensions::WebViewPermissionHelper::FromFrameID(render_process_id,
render_frame_id);
auto continuation = base::BindOnce(
&OnFileSystemAccessedInGuestViewContinuation, render_process_id,
render_frame_id, url, std::move(callback));
if (!web_view_permission_helper) {
std::move(continuation).Run(allowed);
return;
}
web_view_permission_helper->RequestFileSystemPermission(
url, allowed, std::move(continuation));
}
#endif
} // namespace
ContentSettingsManagerDelegate::ContentSettingsManagerDelegate() = default;
ContentSettingsManagerDelegate::~ContentSettingsManagerDelegate() = default;
scoped_refptr<content_settings::CookieSettings>
ContentSettingsManagerDelegate::GetCookieSettings(
content::BrowserContext* browser_context) {
return CookieSettingsFactory::GetForProfile(
Profile::FromBrowserContext(browser_context));
}
bool ContentSettingsManagerDelegate::AllowStorageAccess(
int render_process_id,
int render_frame_id,
content_settings::mojom::ContentSettingsManager::StorageType storage_type,
const GURL& url,
bool allowed,
base::OnceCallback<void(bool)>* callback) {
#if BUILDFLAG(ENABLE_EXTENSIONS)
if (storage_type == content_settings::mojom::ContentSettingsManager::
StorageType::FILE_SYSTEM &&
extensions::WebViewRendererState::GetInstance()->IsGuest(
render_process_id)) {
OnFileSystemAccessedInGuestView(render_process_id, render_frame_id, url,
allowed, std::move(*callback));
return true;
}
#endif
return false;
}
std::unique_ptr<content_settings::ContentSettingsManagerImpl::Delegate>
ContentSettingsManagerDelegate::Clone() {
return std::make_unique<ContentSettingsManagerDelegate>();
}
} // namespace chrome
// Copyright 2020 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.
#ifndef CHROME_BROWSER_CONTENT_SETTINGS_CONTENT_SETTINGS_MANAGER_DELEGATE_H_
#define CHROME_BROWSER_CONTENT_SETTINGS_CONTENT_SETTINGS_MANAGER_DELEGATE_H_
#include "components/content_settings/browser/content_settings_manager_impl.h"
namespace chrome {
class ContentSettingsManagerDelegate
: public content_settings::ContentSettingsManagerImpl::Delegate {
public:
ContentSettingsManagerDelegate();
~ContentSettingsManagerDelegate() override;
private:
// content_settings::ContentSettingsManagerImpl::Delegate:
scoped_refptr<content_settings::CookieSettings> GetCookieSettings(
content::BrowserContext* browser_context) override;
bool AllowStorageAccess(
int render_process_id,
int render_frame_id,
content_settings::mojom::ContentSettingsManager::StorageType storage_type,
const GURL& url,
bool allowed,
base::OnceCallback<void(bool)>* callback) override;
std::unique_ptr<Delegate> Clone() override;
};
} // namespace chrome
#endif // CHROME_BROWSER_CONTENT_SETTINGS_CONTENT_SETTINGS_MANAGER_DELEGATE_H_
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
source_set("browser") { source_set("browser") {
sources = [ sources = [
"content_settings_manager_impl.cc",
"content_settings_manager_impl.h",
"tab_specific_content_settings.cc", "tab_specific_content_settings.cc",
"tab_specific_content_settings.h", "tab_specific_content_settings.h",
] ]
...@@ -13,6 +15,7 @@ source_set("browser") { ...@@ -13,6 +15,7 @@ source_set("browser") {
"//components/content_settings/common:mojom", "//components/content_settings/common:mojom",
"//components/content_settings/core/browser", "//components/content_settings/core/browser",
"//components/content_settings/core/common", "//components/content_settings/core/common",
"//components/page_load_metrics/browser",
"//components/prefs", "//components/prefs",
"//components/security_state/core", "//components/security_state/core",
"//content/public/browser", "//content/public/browser",
......
include_rules = [ include_rules = [
"+components/browsing_data/content", "+components/browsing_data/content",
"+components/page_load_metrics/browser",
"+components/security_state/core", "+components/security_state/core",
"+components/sync_preferences", "+components/sync_preferences",
"+content/public/browser", "+content/public/browser",
"+content/public/common", "+content/public/common",
"+content/public/test", "+content/public/test",
"+mojo/public",
"+net/cookies", "+net/cookies",
"+third_party/blink/public", "+third_party/blink/public",
] ]
...@@ -2,28 +2,20 @@ ...@@ -2,28 +2,20 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "chrome/browser/content_settings/content_settings_manager_impl.h" #include "components/content_settings/browser/content_settings_manager_impl.h"
#include "base/memory/ptr_util.h" #include "base/memory/ptr_util.h"
#include "chrome/browser/content_settings/cookie_settings_factory.h"
#include "chrome/browser/profiles/profile.h"
#include "components/content_settings/browser/tab_specific_content_settings.h" #include "components/content_settings/browser/tab_specific_content_settings.h"
#include "components/content_settings/core/browser/cookie_settings.h" #include "components/content_settings/core/browser/cookie_settings.h"
#include "components/page_load_metrics/browser/metrics_web_contents_observer.h" #include "components/page_load_metrics/browser/metrics_web_contents_observer.h"
#include "components/page_load_metrics/browser/page_load_metrics_observer.h" #include "components/page_load_metrics/browser/page_load_metrics_observer.h"
#include "content/public/browser/render_frame_host.h" #include "content/public/browser/render_frame_host.h"
#include "content/public/browser/render_process_host.h" #include "content/public/browser/render_process_host.h"
#include "extensions/buildflags/buildflags.h"
#include "mojo/public/cpp/bindings/self_owned_receiver.h" #include "mojo/public/cpp/bindings/self_owned_receiver.h"
#if BUILDFLAG(ENABLE_EXTENSIONS)
#include "extensions/browser/guest_view/web_view/web_view_permission_helper.h"
#include "extensions/browser/guest_view/web_view/web_view_renderer_state.h"
#endif
using content_settings::TabSpecificContentSettings; using content_settings::TabSpecificContentSettings;
namespace chrome { namespace content_settings {
namespace { namespace {
void OnStorageAccessed(int process_id, void OnStorageAccessed(int process_id,
...@@ -67,38 +59,6 @@ void OnDomStorageAccessed(int process_id, ...@@ -67,38 +59,6 @@ void OnDomStorageAccessed(int process_id,
tab_settings->OnDomStorageAccessed(origin_url, local, blocked_by_policy); tab_settings->OnDomStorageAccessed(origin_url, local, blocked_by_policy);
} }
#if BUILDFLAG(ENABLE_EXTENSIONS)
void OnFileSystemAccessedInGuestViewContinuation(
int render_process_id,
int render_frame_id,
const GURL& url,
base::OnceCallback<void(bool)> callback,
bool allowed) {
TabSpecificContentSettings::FileSystemAccessed(
render_process_id, render_frame_id, url, !allowed);
std::move(callback).Run(allowed);
}
void OnFileSystemAccessedInGuestView(int render_process_id,
int render_frame_id,
const GURL& url,
bool allowed,
base::OnceCallback<void(bool)> callback) {
extensions::WebViewPermissionHelper* web_view_permission_helper =
extensions::WebViewPermissionHelper::FromFrameID(render_process_id,
render_frame_id);
auto continuation = base::BindOnce(
&OnFileSystemAccessedInGuestViewContinuation, render_process_id,
render_frame_id, url, std::move(callback));
if (!web_view_permission_helper) {
std::move(continuation).Run(allowed);
return;
}
web_view_permission_helper->RequestFileSystemPermission(
url, allowed, std::move(continuation));
}
#endif
} // namespace } // namespace
ContentSettingsManagerImpl::~ContentSettingsManagerImpl() = default; ContentSettingsManagerImpl::~ContentSettingsManagerImpl() = default;
...@@ -107,10 +67,11 @@ ContentSettingsManagerImpl::~ContentSettingsManagerImpl() = default; ...@@ -107,10 +67,11 @@ ContentSettingsManagerImpl::~ContentSettingsManagerImpl() = default;
void ContentSettingsManagerImpl::Create( void ContentSettingsManagerImpl::Create(
content::RenderProcessHost* render_process_host, content::RenderProcessHost* render_process_host,
mojo::PendingReceiver<content_settings::mojom::ContentSettingsManager> mojo::PendingReceiver<content_settings::mojom::ContentSettingsManager>
receiver) { receiver,
mojo::MakeSelfOwnedReceiver( std::unique_ptr<Delegate> delegate) {
base::WrapUnique(new ContentSettingsManagerImpl(render_process_host)), mojo::MakeSelfOwnedReceiver(base::WrapUnique(new ContentSettingsManagerImpl(
std::move(receiver)); render_process_host, std::move(delegate))),
std::move(receiver));
} }
void ContentSettingsManagerImpl::Clone( void ContentSettingsManagerImpl::Clone(
...@@ -132,6 +93,11 @@ void ContentSettingsManagerImpl::AllowStorageAccess( ...@@ -132,6 +93,11 @@ void ContentSettingsManagerImpl::AllowStorageAccess(
bool allowed = cookie_settings_->IsCookieAccessAllowed(url, site_for_cookies, bool allowed = cookie_settings_->IsCookieAccessAllowed(url, site_for_cookies,
top_frame_origin); top_frame_origin);
if (delegate_->AllowStorageAccess(render_process_id_, render_frame_id,
storage_type, url, allowed, &callback)) {
DCHECK(!callback);
return;
}
switch (storage_type) { switch (storage_type) {
case StorageType::DATABASE: case StorageType::DATABASE:
...@@ -154,14 +120,6 @@ void ContentSettingsManagerImpl::AllowStorageAccess( ...@@ -154,14 +120,6 @@ void ContentSettingsManagerImpl::AllowStorageAccess(
break; break;
case StorageType::FILE_SYSTEM: case StorageType::FILE_SYSTEM:
#if BUILDFLAG(ENABLE_EXTENSIONS)
if (extensions::WebViewRendererState::GetInstance()->IsGuest(
render_process_id_)) {
OnFileSystemAccessedInGuestView(render_process_id_, render_frame_id,
url, allowed, std::move(callback));
return;
}
#endif
TabSpecificContentSettings::FileSystemAccessed( TabSpecificContentSettings::FileSystemAccessed(
render_process_id_, render_frame_id, url, !allowed); render_process_id_, render_frame_id, url, !allowed);
OnStorageAccessed(render_process_id_, render_frame_id, url, OnStorageAccessed(render_process_id_, render_frame_id, url,
...@@ -206,15 +164,17 @@ void ContentSettingsManagerImpl::OnContentBlocked(int32_t render_frame_id, ...@@ -206,15 +164,17 @@ void ContentSettingsManagerImpl::OnContentBlocked(int32_t render_frame_id,
} }
ContentSettingsManagerImpl::ContentSettingsManagerImpl( ContentSettingsManagerImpl::ContentSettingsManagerImpl(
content::RenderProcessHost* render_process_host) content::RenderProcessHost* render_process_host,
: render_process_id_(render_process_host->GetID()), std::unique_ptr<Delegate> delegate)
cookie_settings_( : delegate_(std::move(delegate)),
CookieSettingsFactory::GetForProfile(Profile::FromBrowserContext( render_process_id_(render_process_host->GetID()),
render_process_host->GetBrowserContext()))) {} cookie_settings_(delegate_->GetCookieSettings(
render_process_host->GetBrowserContext())) {}
ContentSettingsManagerImpl::ContentSettingsManagerImpl( ContentSettingsManagerImpl::ContentSettingsManagerImpl(
const ContentSettingsManagerImpl& other) const ContentSettingsManagerImpl& other)
: render_process_id_(other.render_process_id_), : delegate_(other.delegate_->Clone()),
render_process_id_(other.render_process_id_),
cookie_settings_(other.cookie_settings_) {} cookie_settings_(other.cookie_settings_) {}
} // namespace chrome } // namespace content_settings
...@@ -2,13 +2,14 @@ ...@@ -2,13 +2,14 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#ifndef CHROME_BROWSER_CONTENT_SETTINGS_CONTENT_SETTINGS_MANAGER_IMPL_H_ #ifndef COMPONENTS_CONTENT_SETTINGS_BROWSER_CONTENT_SETTINGS_MANAGER_IMPL_H_
#define CHROME_BROWSER_CONTENT_SETTINGS_CONTENT_SETTINGS_MANAGER_IMPL_H_ #define COMPONENTS_CONTENT_SETTINGS_BROWSER_CONTENT_SETTINGS_MANAGER_IMPL_H_
#include "base/memory/ref_counted.h" #include "base/memory/ref_counted.h"
#include "components/content_settings/common/content_settings_manager.mojom.h" #include "components/content_settings/common/content_settings_manager.mojom.h"
namespace content { namespace content {
class BrowserContext;
class RenderProcessHost; class RenderProcessHost;
} // namespace content } // namespace content
...@@ -16,17 +17,40 @@ namespace content_settings { ...@@ -16,17 +17,40 @@ namespace content_settings {
class CookieSettings; class CookieSettings;
} // namespace content_settings } // namespace content_settings
namespace chrome { namespace content_settings {
class ContentSettingsManagerImpl class ContentSettingsManagerImpl
: public content_settings::mojom::ContentSettingsManager { : public content_settings::mojom::ContentSettingsManager {
public: public:
class Delegate {
public:
virtual ~Delegate() = default;
// Gets cookie settings for this browser context.
virtual scoped_refptr<CookieSettings> GetCookieSettings(
content::BrowserContext* browser_context) = 0;
// Allows delegate to override AllowStorageAccess(). If the delegate returns
// true here, the default logic will be bypassed.
virtual bool AllowStorageAccess(
int render_process_id,
int render_frame_id,
StorageType storage_type,
const GURL& url,
bool allowed,
base::OnceCallback<void(bool)>* callback) = 0;
// Returns a new instance of this delegate.
virtual std::unique_ptr<Delegate> Clone() = 0;
};
~ContentSettingsManagerImpl() override; ~ContentSettingsManagerImpl() override;
static void Create( static void Create(
content::RenderProcessHost* render_process_host, content::RenderProcessHost* render_process_host,
mojo::PendingReceiver<content_settings::mojom::ContentSettingsManager> mojo::PendingReceiver<content_settings::mojom::ContentSettingsManager>
receiver); receiver,
std::unique_ptr<Delegate> delegate);
// mojom::ContentSettingsManager methods: // mojom::ContentSettingsManager methods:
void Clone( void Clone(
...@@ -42,9 +66,11 @@ class ContentSettingsManagerImpl ...@@ -42,9 +66,11 @@ class ContentSettingsManagerImpl
ContentSettingsType type) override; ContentSettingsType type) override;
private: private:
explicit ContentSettingsManagerImpl( ContentSettingsManagerImpl(content::RenderProcessHost* render_process_host,
content::RenderProcessHost* render_process_host); std::unique_ptr<Delegate> delegate);
explicit ContentSettingsManagerImpl(const ContentSettingsManagerImpl& other); ContentSettingsManagerImpl(const ContentSettingsManagerImpl& other);
std::unique_ptr<Delegate> delegate_;
// Use these IDs to hold a weak reference back to the RenderFrameHost. // Use these IDs to hold a weak reference back to the RenderFrameHost.
const int render_process_id_; const int render_process_id_;
...@@ -53,6 +79,6 @@ class ContentSettingsManagerImpl ...@@ -53,6 +79,6 @@ class ContentSettingsManagerImpl
scoped_refptr<content_settings::CookieSettings> cookie_settings_; scoped_refptr<content_settings::CookieSettings> cookie_settings_;
}; };
} // namespace chrome } // namespace content_settings
#endif // CHROME_BROWSER_CONTENT_SETTINGS_CONTENT_SETTINGS_MANAGER_IMPL_H_ #endif // COMPONENTS_CONTENT_SETTINGS_BROWSER_CONTENT_SETTINGS_MANAGER_IMPL_H_
...@@ -128,8 +128,8 @@ source_set("weblayer_lib_base") { ...@@ -128,8 +128,8 @@ source_set("weblayer_lib_base") {
"browser/content_browser_client_impl.cc", "browser/content_browser_client_impl.cc",
"browser/content_browser_client_impl.h", "browser/content_browser_client_impl.h",
"browser/content_browser_client_impl_receiver_bindings.cc", "browser/content_browser_client_impl_receiver_bindings.cc",
"browser/content_settings_manager_impl.cc", "browser/content_settings_manager_delegate.cc",
"browser/content_settings_manager_impl.h", "browser/content_settings_manager_delegate.h",
"browser/controls_visibility_reason.h", "browser/controls_visibility_reason.h",
"browser/cookie_manager_impl.cc", "browser/cookie_manager_impl.cc",
"browser/cookie_manager_impl.h", "browser/cookie_manager_impl.h",
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
#include "weblayer/browser/content_browser_client_impl.h" #include "weblayer/browser/content_browser_client_impl.h"
#include "weblayer/browser/content_settings_manager_impl.h" #include "weblayer/browser/content_settings_manager_delegate.h"
namespace weblayer { namespace weblayer {
...@@ -15,8 +15,9 @@ void ContentBrowserClientImpl::BindHostReceiverForRenderer( ...@@ -15,8 +15,9 @@ void ContentBrowserClientImpl::BindHostReceiverForRenderer(
mojo::GenericPendingReceiver receiver) { mojo::GenericPendingReceiver receiver) {
if (auto host_receiver = if (auto host_receiver =
receiver.As<content_settings::mojom::ContentSettingsManager>()) { receiver.As<content_settings::mojom::ContentSettingsManager>()) {
ContentSettingsManagerImpl::Create(render_process_host, content_settings::ContentSettingsManagerImpl::Create(
std::move(host_receiver)); render_process_host, std::move(host_receiver),
std::make_unique<ContentSettingsManagerDelegate>());
return; return;
} }
} }
......
// Copyright 2020 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 "weblayer/browser/content_settings_manager_delegate.h"
#include "components/content_settings/core/browser/cookie_settings.h"
#include "weblayer/browser/cookie_settings_factory.h"
namespace weblayer {
ContentSettingsManagerDelegate::ContentSettingsManagerDelegate() = default;
ContentSettingsManagerDelegate::~ContentSettingsManagerDelegate() = default;
scoped_refptr<content_settings::CookieSettings>
ContentSettingsManagerDelegate::GetCookieSettings(
content::BrowserContext* browser_context) {
return CookieSettingsFactory::GetForBrowserContext(browser_context);
}
bool ContentSettingsManagerDelegate::AllowStorageAccess(
int render_process_id,
int render_frame_id,
content_settings::mojom::ContentSettingsManager::StorageType storage_type,
const GURL& url,
bool allowed,
base::OnceCallback<void(bool)>* callback) {
return false;
}
std::unique_ptr<content_settings::ContentSettingsManagerImpl::Delegate>
ContentSettingsManagerDelegate::Clone() {
return std::make_unique<ContentSettingsManagerDelegate>();
}
} // namespace weblayer
// Copyright 2020 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.
#ifndef WEBLAYER_BROWSER_CONTENT_SETTINGS_MANAGER_DELEGATE_H_
#define WEBLAYER_BROWSER_CONTENT_SETTINGS_MANAGER_DELEGATE_H_
#include "components/content_settings/browser/content_settings_manager_impl.h"
namespace weblayer {
class ContentSettingsManagerDelegate
: public content_settings::ContentSettingsManagerImpl::Delegate {
public:
ContentSettingsManagerDelegate();
~ContentSettingsManagerDelegate() override;
private:
// content_settings::ContentSettingsManagerImpl::Delegate:
scoped_refptr<content_settings::CookieSettings> GetCookieSettings(
content::BrowserContext* browser_context) override;
bool AllowStorageAccess(
int render_process_id,
int render_frame_id,
content_settings::mojom::ContentSettingsManager::StorageType storage_type,
const GURL& url,
bool allowed,
base::OnceCallback<void(bool)>* callback) override;
std::unique_ptr<Delegate> Clone() override;
};
} // namespace weblayer
#endif // WEBLAYER_BROWSER_CONTENT_SETTINGS_MANAGER_DELEGATE_H_
// Copyright 2020 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 "weblayer/browser/content_settings_manager_impl.h"
#include "components/content_settings/core/browser/cookie_settings.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/render_process_host.h"
#include "mojo/public/cpp/bindings/self_owned_receiver.h"
#include "weblayer/browser/cookie_settings_factory.h"
namespace weblayer {
ContentSettingsManagerImpl::~ContentSettingsManagerImpl() = default;
// static
void ContentSettingsManagerImpl::Create(
content::RenderProcessHost* render_process_host,
mojo::PendingReceiver<content_settings::mojom::ContentSettingsManager>
receiver) {
mojo::MakeSelfOwnedReceiver(
base::WrapUnique(new ContentSettingsManagerImpl(render_process_host)),
std::move(receiver));
}
void ContentSettingsManagerImpl::Clone(
mojo::PendingReceiver<content_settings::mojom::ContentSettingsManager>
receiver) {
mojo::MakeSelfOwnedReceiver(
base::WrapUnique(new ContentSettingsManagerImpl(*this)),
std::move(receiver));
}
void ContentSettingsManagerImpl::AllowStorageAccess(
int32_t render_frame_id,
StorageType storage_type,
const url::Origin& origin,
const GURL& site_for_cookies,
const url::Origin& top_frame_origin,
base::OnceCallback<void(bool)> callback) {
std::move(callback).Run(cookie_settings_->IsCookieAccessAllowed(
origin.GetURL(), site_for_cookies, top_frame_origin));
}
void ContentSettingsManagerImpl::OnContentBlocked(int32_t render_frame_id,
ContentSettingsType type) {}
ContentSettingsManagerImpl::ContentSettingsManagerImpl(
content::RenderProcessHost* render_process_host)
: render_process_id_(render_process_host->GetID()),
cookie_settings_(CookieSettingsFactory::GetForBrowserContext(
render_process_host->GetBrowserContext())) {}
ContentSettingsManagerImpl::ContentSettingsManagerImpl(
const ContentSettingsManagerImpl& other)
: render_process_id_(other.render_process_id_),
cookie_settings_(other.cookie_settings_) {}
} // namespace weblayer
// Copyright 2020 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.
#ifndef WEBLAYER_BROWSER_CONTENT_SETTINGS_MANAGER_IMPL_H_
#define WEBLAYER_BROWSER_CONTENT_SETTINGS_MANAGER_IMPL_H_
#include "base/memory/ref_counted.h"
#include "components/content_settings/common/content_settings_manager.mojom.h"
namespace content {
class RenderProcessHost;
}
namespace content_settings {
class CookieSettings;
}
namespace weblayer {
// Called by the renderer to query storage access and notify when content is
// blocked.
class ContentSettingsManagerImpl
: public content_settings::mojom::ContentSettingsManager {
public:
~ContentSettingsManagerImpl() override;
static void Create(
content::RenderProcessHost* render_process_host,
mojo::PendingReceiver<content_settings::mojom::ContentSettingsManager>
receiver);
// mojom::ContentSettingsManager methods:
void Clone(
mojo::PendingReceiver<content_settings::mojom::ContentSettingsManager>
receiver) override;
void AllowStorageAccess(int32_t render_frame_id,
StorageType storage_type,
const url::Origin& origin,
const GURL& site_for_cookies,
const url::Origin& top_frame_origin,
base::OnceCallback<void(bool)> callback) override;
void OnContentBlocked(int32_t render_frame_id,
ContentSettingsType type) override;
private:
explicit ContentSettingsManagerImpl(
content::RenderProcessHost* render_process_host);
ContentSettingsManagerImpl(const ContentSettingsManagerImpl& other);
const int render_process_id_;
scoped_refptr<content_settings::CookieSettings> cookie_settings_;
};
} // namespace weblayer
#endif // WEBLAYER_BROWSER_CONTENT_SETTINGS_MANAGER_IMPL_H_
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment