Commit f8f2850c authored by csharrison's avatar csharrison Committed by Commit bot

Make ChromeSubresourceFilterClient a WebContentsUserData

This also modifies the ownership of the subresource filter client, which now must
outlive the throttle manager / driver factory.

BUG=717590

Review-Url: https://codereview.chromium.org/2850373002
Cr-Commit-Position: refs/heads/master@{#469331}
parent d54208b0
...@@ -17,14 +17,20 @@ ...@@ -17,14 +17,20 @@
#include "components/content_settings/core/browser/host_content_settings_map.h" #include "components/content_settings/core/browser/host_content_settings_map.h"
#include "components/content_settings/core/common/content_settings_types.h" #include "components/content_settings/core/common/content_settings_types.h"
#include "components/subresource_filter/content/browser/content_ruleset_service.h" #include "components/subresource_filter/content/browser/content_ruleset_service.h"
#include "components/subresource_filter/content/browser/content_subresource_filter_driver_factory.h"
#include "content/public/browser/navigation_handle.h" #include "content/public/browser/navigation_handle.h"
DEFINE_WEB_CONTENTS_USER_DATA_KEY(ChromeSubresourceFilterClient);
ChromeSubresourceFilterClient::ChromeSubresourceFilterClient( ChromeSubresourceFilterClient::ChromeSubresourceFilterClient(
content::WebContents* web_contents) content::WebContents* web_contents)
: web_contents_(web_contents), did_show_ui_for_navigation_(false) { : web_contents_(web_contents), did_show_ui_for_navigation_(false) {
DCHECK(web_contents); DCHECK(web_contents);
SubresourceFilterProfileContextFactory::EnsureForProfile( SubresourceFilterProfileContextFactory::EnsureForProfile(
Profile::FromBrowserContext(web_contents_->GetBrowserContext())); Profile::FromBrowserContext(web_contents_->GetBrowserContext()));
subresource_filter::ContentSubresourceFilterDriverFactory::
CreateForWebContents(web_contents, this);
} }
ChromeSubresourceFilterClient::~ChromeSubresourceFilterClient() {} ChromeSubresourceFilterClient::~ChromeSubresourceFilterClient() {}
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include "base/macros.h" #include "base/macros.h"
#include "components/content_settings/core/common/content_settings.h" #include "components/content_settings/core/common/content_settings.h"
#include "components/subresource_filter/content/browser/subresource_filter_client.h" #include "components/subresource_filter/content/browser/subresource_filter_client.h"
#include "content/public/browser/web_contents_user_data.h"
class GURL; class GURL;
...@@ -61,8 +62,11 @@ enum SubresourceFilterAction { ...@@ -61,8 +62,11 @@ enum SubresourceFilterAction {
}; };
// Chrome implementation of SubresourceFilterClient. // Chrome implementation of SubresourceFilterClient.
// TODO(csharrison): Make this a WebContentsObserver and own the throttle
// manager directly.
class ChromeSubresourceFilterClient class ChromeSubresourceFilterClient
: public subresource_filter::SubresourceFilterClient { : public content::WebContentsUserData<ChromeSubresourceFilterClient>,
public subresource_filter::SubresourceFilterClient {
public: public:
explicit ChromeSubresourceFilterClient(content::WebContents* web_contents); explicit ChromeSubresourceFilterClient(content::WebContents* web_contents);
~ChromeSubresourceFilterClient() override; ~ChromeSubresourceFilterClient() override;
......
...@@ -23,7 +23,6 @@ ...@@ -23,7 +23,6 @@
#include "components/prefs/testing_pref_service.h" #include "components/prefs/testing_pref_service.h"
#include "components/safe_browsing_db/v4_protocol_manager_util.h" #include "components/safe_browsing_db/v4_protocol_manager_util.h"
#include "components/subresource_filter/content/browser/content_ruleset_service.h" #include "components/subresource_filter/content/browser/content_ruleset_service.h"
#include "components/subresource_filter/content/browser/content_subresource_filter_driver_factory.h"
#include "components/subresource_filter/content/browser/fake_safe_browsing_database_manager.h" #include "components/subresource_filter/content/browser/fake_safe_browsing_database_manager.h"
#include "components/subresource_filter/core/browser/ruleset_service.h" #include "components/subresource_filter/core/browser/ruleset_service.h"
#include "components/subresource_filter/core/browser/subresource_filter_features.h" #include "components/subresource_filter/core/browser/subresource_filter_features.h"
...@@ -102,13 +101,8 @@ class SubresourceFilterTest : public ChromeRenderViewHostTestHarness { ...@@ -102,13 +101,8 @@ class SubresourceFilterTest : public ChromeRenderViewHostTestHarness {
// Set up the tab helpers. // Set up the tab helpers.
InfoBarService::CreateForWebContents(web_contents()); InfoBarService::CreateForWebContents(web_contents());
TabSpecificContentSettings::CreateForWebContents(web_contents()); TabSpecificContentSettings::CreateForWebContents(web_contents());
ChromeSubresourceFilterClient::CreateForWebContents(web_contents());
std::unique_ptr<ChromeSubresourceFilterClient> subresource_filter_client(
new ChromeSubresourceFilterClient(web_contents()));
client_ = subresource_filter_client.get();
subresource_filter::ContentSubresourceFilterDriverFactory::
CreateForWebContents(web_contents(),
std::move(subresource_filter_client));
base::RunLoop().RunUntilIdle(); base::RunLoop().RunUntilIdle();
} }
...@@ -153,7 +147,9 @@ class SubresourceFilterTest : public ChromeRenderViewHostTestHarness { ...@@ -153,7 +147,9 @@ class SubresourceFilterTest : public ChromeRenderViewHostTestHarness {
url, safe_browsing::SB_THREAT_TYPE_SUBRESOURCE_FILTER); url, safe_browsing::SB_THREAT_TYPE_SUBRESOURCE_FILTER);
} }
ChromeSubresourceFilterClient* client() { return client_; } ChromeSubresourceFilterClient* client() {
return ChromeSubresourceFilterClient::FromWebContents(web_contents());
}
private: private:
base::ScopedTempDir ruleset_service_dir_; base::ScopedTempDir ruleset_service_dir_;
...@@ -163,8 +159,6 @@ class SubresourceFilterTest : public ChromeRenderViewHostTestHarness { ...@@ -163,8 +159,6 @@ class SubresourceFilterTest : public ChromeRenderViewHostTestHarness {
scoped_refptr<FakeSafeBrowsingDatabaseManager> fake_safe_browsing_database_; scoped_refptr<FakeSafeBrowsingDatabaseManager> fake_safe_browsing_database_;
ChromeSubresourceFilterClient* client_ = nullptr;
DISALLOW_COPY_AND_ASSIGN(SubresourceFilterTest); DISALLOW_COPY_AND_ASSIGN(SubresourceFilterTest);
}; };
......
...@@ -174,6 +174,7 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { ...@@ -174,6 +174,7 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) {
ChromePasswordManagerClient::CreateForWebContentsWithAutofillClient( ChromePasswordManagerClient::CreateForWebContentsWithAutofillClient(
web_contents, web_contents,
autofill::ChromeAutofillClient::FromWebContents(web_contents)); autofill::ChromeAutofillClient::FromWebContents(web_contents));
ChromeSubresourceFilterClient::CreateForWebContents(web_contents);
ChromeTranslateClient::CreateForWebContents(web_contents); ChromeTranslateClient::CreateForWebContents(web_contents);
CoreTabHelper::CreateForWebContents(web_contents); CoreTabHelper::CreateForWebContents(web_contents);
data_use_measurement::DataUseWebContentsObserver::CreateForWebContents( data_use_measurement::DataUseWebContentsObserver::CreateForWebContents(
...@@ -204,10 +205,6 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { ...@@ -204,10 +205,6 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) {
SecurityStateTabHelper::CreateForWebContents(web_contents); SecurityStateTabHelper::CreateForWebContents(web_contents);
if (SiteEngagementService::IsEnabled()) if (SiteEngagementService::IsEnabled())
SiteEngagementService::Helper::CreateForWebContents(web_contents); SiteEngagementService::Helper::CreateForWebContents(web_contents);
std::unique_ptr<ChromeSubresourceFilterClient> subresource_filter_client(
new ChromeSubresourceFilterClient(web_contents));
subresource_filter::ContentSubresourceFilterDriverFactory::
CreateForWebContents(web_contents, std::move(subresource_filter_client));
sync_sessions::SyncSessionsRouterTabHelper::CreateForWebContents( sync_sessions::SyncSessionsRouterTabHelper::CreateForWebContents(
web_contents, web_contents,
sync_sessions::SyncSessionsWebContentsRouterFactory::GetForProfile( sync_sessions::SyncSessionsWebContentsRouterFactory::GetForProfile(
......
...@@ -20,13 +20,13 @@ ...@@ -20,13 +20,13 @@
#include "net/base/net_errors.h" #include "net/base/net_errors.h"
#include "url/gurl.h" #include "url/gurl.h"
DEFINE_WEB_CONTENTS_USER_DATA_KEY(
subresource_filter::ContentSubresourceFilterDriverFactory);
namespace subresource_filter { namespace subresource_filter {
namespace { namespace {
const char kWebContentsUserDataKey[] =
"web_contents_subresource_filter_driver_factory";
std::string DistillURLToHostAndPath(const GURL& url) { std::string DistillURLToHostAndPath(const GURL& url) {
return url.host() + url.path(); return url.host() + url.path();
} }
...@@ -57,21 +57,12 @@ bool ShouldMeasurePerformanceForPageLoad(double performance_measurement_rate) { ...@@ -57,21 +57,12 @@ bool ShouldMeasurePerformanceForPageLoad(double performance_measurement_rate) {
// static // static
void ContentSubresourceFilterDriverFactory::CreateForWebContents( void ContentSubresourceFilterDriverFactory::CreateForWebContents(
content::WebContents* web_contents, content::WebContents* web_contents,
std::unique_ptr<SubresourceFilterClient> client) { SubresourceFilterClient* client) {
if (FromWebContents(web_contents)) if (FromWebContents(web_contents))
return; return;
web_contents->SetUserData( web_contents->SetUserData(
kWebContentsUserDataKey, UserDataKey(), base::MakeUnique<ContentSubresourceFilterDriverFactory>(
base::MakeUnique<ContentSubresourceFilterDriverFactory>( web_contents, client));
web_contents, std::move(client)));
}
// static
ContentSubresourceFilterDriverFactory*
ContentSubresourceFilterDriverFactory::FromWebContents(
content::WebContents* web_contents) {
return static_cast<ContentSubresourceFilterDriverFactory*>(
web_contents->GetUserData(kWebContentsUserDataKey));
} }
// static // static
...@@ -86,9 +77,9 @@ bool ContentSubresourceFilterDriverFactory::NavigationIsPageReload( ...@@ -86,9 +77,9 @@ bool ContentSubresourceFilterDriverFactory::NavigationIsPageReload(
ContentSubresourceFilterDriverFactory::ContentSubresourceFilterDriverFactory( ContentSubresourceFilterDriverFactory::ContentSubresourceFilterDriverFactory(
content::WebContents* web_contents, content::WebContents* web_contents,
std::unique_ptr<SubresourceFilterClient> client) SubresourceFilterClient* client)
: content::WebContentsObserver(web_contents), : content::WebContentsObserver(web_contents),
client_(std::move(client)), client_(client),
throttle_manager_( throttle_manager_(
base::MakeUnique<ContentSubresourceFilterThrottleManager>( base::MakeUnique<ContentSubresourceFilterThrottleManager>(
this, this,
......
...@@ -13,11 +13,11 @@ ...@@ -13,11 +13,11 @@
#include <vector> #include <vector>
#include "base/macros.h" #include "base/macros.h"
#include "base/supports_user_data.h"
#include "base/time/time.h" #include "base/time/time.h"
#include "components/safe_browsing_db/util.h" #include "components/safe_browsing_db/util.h"
#include "components/subresource_filter/content/browser/content_subresource_filter_throttle_manager.h" #include "components/subresource_filter/content/browser/content_subresource_filter_throttle_manager.h"
#include "content/public/browser/web_contents_observer.h" #include "content/public/browser/web_contents_observer.h"
#include "content/public/browser/web_contents_user_data.h"
#include "ui/base/page_transition_types.h" #include "ui/base/page_transition_types.h"
#include "url/gurl.h" #include "url/gurl.h"
...@@ -42,7 +42,8 @@ using URLToActivationListsMap = ...@@ -42,7 +42,8 @@ using URLToActivationListsMap =
// WebContents and is responsible for sending the activation signal to all the // WebContents and is responsible for sending the activation signal to all the
// per-frame SubresourceFilterAgents on the renderer side. // per-frame SubresourceFilterAgents on the renderer side.
class ContentSubresourceFilterDriverFactory class ContentSubresourceFilterDriverFactory
: public base::SupportsUserData::Data, : public content::WebContentsUserData<
ContentSubresourceFilterDriverFactory>,
public content::WebContentsObserver, public content::WebContentsObserver,
public ContentSubresourceFilterThrottleManager::Delegate { public ContentSubresourceFilterThrottleManager::Delegate {
public: public:
...@@ -72,11 +73,8 @@ class ContentSubresourceFilterDriverFactory ...@@ -72,11 +73,8 @@ class ContentSubresourceFilterDriverFactory
ACTIVATION_DECISION_MAX ACTIVATION_DECISION_MAX
}; };
static void CreateForWebContents( static void CreateForWebContents(content::WebContents* web_contents,
content::WebContents* web_contents, SubresourceFilterClient* client);
std::unique_ptr<SubresourceFilterClient> client);
static ContentSubresourceFilterDriverFactory* FromWebContents(
content::WebContents* web_contents);
// Whether the |url|, |referrer|, and |transition| are considered to be // Whether the |url|, |referrer|, and |transition| are considered to be
// associated with a page reload. // associated with a page reload.
...@@ -86,7 +84,7 @@ class ContentSubresourceFilterDriverFactory ...@@ -86,7 +84,7 @@ class ContentSubresourceFilterDriverFactory
explicit ContentSubresourceFilterDriverFactory( explicit ContentSubresourceFilterDriverFactory(
content::WebContents* web_contents, content::WebContents* web_contents,
std::unique_ptr<SubresourceFilterClient> client); SubresourceFilterClient* client);
~ContentSubresourceFilterDriverFactory() override; ~ContentSubresourceFilterDriverFactory() override;
// Called when Safe Browsing detects that the |url| corresponding to the load // Called when Safe Browsing detects that the |url| corresponding to the load
...@@ -119,7 +117,7 @@ class ContentSubresourceFilterDriverFactory ...@@ -119,7 +117,7 @@ class ContentSubresourceFilterDriverFactory
return throttle_manager_.get(); return throttle_manager_.get();
} }
SubresourceFilterClient* client() { return client_.get(); } SubresourceFilterClient* client() { return client_; }
private: private:
friend class ContentSubresourceFilterDriverFactoryTest; friend class ContentSubresourceFilterDriverFactoryTest;
...@@ -149,7 +147,8 @@ class ContentSubresourceFilterDriverFactory ...@@ -149,7 +147,8 @@ class ContentSubresourceFilterDriverFactory
void RecordRedirectChainMatchPatternForList( void RecordRedirectChainMatchPatternForList(
ActivationList activation_list) const; ActivationList activation_list) const;
std::unique_ptr<SubresourceFilterClient> client_; // Must outlive this class.
SubresourceFilterClient* client_;
std::unique_ptr<ContentSubresourceFilterThrottleManager> throttle_manager_; std::unique_ptr<ContentSubresourceFilterThrottleManager> throttle_manager_;
......
...@@ -236,9 +236,10 @@ class ContentSubresourceFilterDriverFactoryTest ...@@ -236,9 +236,10 @@ class ContentSubresourceFilterDriverFactoryTest
base::MessageLoop::current()->task_runner()); base::MessageLoop::current()->task_runner());
ruleset_dealer_->SetRulesetFile( ruleset_dealer_->SetRulesetFile(
testing::TestRuleset::Open(test_ruleset_pair_.indexed)); testing::TestRuleset::Open(test_ruleset_pair_.indexed));
client_ = new MockSubresourceFilterClient(ruleset_dealer_.get()); client_ =
base::MakeUnique<MockSubresourceFilterClient>(ruleset_dealer_.get());
ContentSubresourceFilterDriverFactory::CreateForWebContents( ContentSubresourceFilterDriverFactory::CreateForWebContents(
RenderViewHostTestHarness::web_contents(), base::WrapUnique(client())); RenderViewHostTestHarness::web_contents(), client());
ResetConfigurationToEnableFilteringOnSocialEngineeringSites(); ResetConfigurationToEnableFilteringOnSocialEngineeringSites();
// Add a subframe. // Add a subframe.
...@@ -276,7 +277,7 @@ class ContentSubresourceFilterDriverFactoryTest ...@@ -276,7 +277,7 @@ class ContentSubresourceFilterDriverFactoryTest
RenderViewHostTestHarness::web_contents()); RenderViewHostTestHarness::web_contents());
} }
MockSubresourceFilterClient* client() { return client_; } MockSubresourceFilterClient* client() { return client_.get(); }
content::RenderFrameHost* GetSubframeRFH() { content::RenderFrameHost* GetSubframeRFH() {
for (content::RenderFrameHost* rfh : for (content::RenderFrameHost* rfh :
...@@ -493,9 +494,7 @@ class ContentSubresourceFilterDriverFactoryTest ...@@ -493,9 +494,7 @@ class ContentSubresourceFilterDriverFactoryTest
testing::TestRulesetCreator test_ruleset_creator_; testing::TestRulesetCreator test_ruleset_creator_;
testing::TestRulesetPair test_ruleset_pair_; testing::TestRulesetPair test_ruleset_pair_;
// Owned by the factory. std::unique_ptr<MockSubresourceFilterClient> client_;
MockSubresourceFilterClient* client_;
std::unique_ptr<VerifiedRulesetDealer::Handle> ruleset_dealer_; std::unique_ptr<VerifiedRulesetDealer::Handle> ruleset_dealer_;
DISALLOW_COPY_AND_ASSIGN(ContentSubresourceFilterDriverFactoryTest); DISALLOW_COPY_AND_ASSIGN(ContentSubresourceFilterDriverFactoryTest);
......
...@@ -130,10 +130,10 @@ class SubresourceFilterSafeBrowsingActivationThrottleTest ...@@ -130,10 +130,10 @@ class SubresourceFilterSafeBrowsingActivationThrottleTest
ActivationList::SUBRESOURCE_FILTER)); ActivationList::SUBRESOURCE_FILTER));
test_io_task_runner_ = new base::TestMockTimeTaskRunner(); test_io_task_runner_ = new base::TestMockTimeTaskRunner();
// Note: Using NiceMock to allow uninteresting calls and suppress warnings. // Note: Using NiceMock to allow uninteresting calls and suppress warnings.
auto client = client_ =
base::MakeUnique<::testing::NiceMock<MockSubresourceFilterClient>>(); base::MakeUnique<::testing::NiceMock<MockSubresourceFilterClient>>();
ContentSubresourceFilterDriverFactory::CreateForWebContents( ContentSubresourceFilterDriverFactory::CreateForWebContents(
RenderViewHostTestHarness::web_contents(), std::move(client)); RenderViewHostTestHarness::web_contents(), client_.get());
fake_safe_browsing_database_ = new FakeSafeBrowsingDatabaseManager(); fake_safe_browsing_database_ = new FakeSafeBrowsingDatabaseManager();
NavigateAndCommit(GURL("https://test.com")); NavigateAndCommit(GURL("https://test.com"));
Observe(RenderViewHostTestHarness::web_contents()); Observe(RenderViewHostTestHarness::web_contents());
...@@ -235,6 +235,7 @@ class SubresourceFilterSafeBrowsingActivationThrottleTest ...@@ -235,6 +235,7 @@ class SubresourceFilterSafeBrowsingActivationThrottleTest
testing::ScopedSubresourceFilterConfigurator scoped_configuration_; testing::ScopedSubresourceFilterConfigurator scoped_configuration_;
scoped_refptr<base::TestMockTimeTaskRunner> test_io_task_runner_; scoped_refptr<base::TestMockTimeTaskRunner> test_io_task_runner_;
std::unique_ptr<content::NavigationSimulator> navigation_simulator_; std::unique_ptr<content::NavigationSimulator> navigation_simulator_;
std::unique_ptr<SubresourceFilterClient> client_;
scoped_refptr<FakeSafeBrowsingDatabaseManager> fake_safe_browsing_database_; scoped_refptr<FakeSafeBrowsingDatabaseManager> fake_safe_browsing_database_;
base::HistogramTester tester_; base::HistogramTester tester_;
......
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