| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "chrome/browser/subresource_filter/chrome_subresource_filter_client.h" | 5 #include "chrome/browser/subresource_filter/chrome_subresource_filter_client.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <utility> |
| 8 | 9 |
| 10 #include "base/memory/ptr_util.h" |
| 9 #include "base/metrics/histogram_macros.h" | 11 #include "base/metrics/histogram_macros.h" |
| 10 #include "chrome/browser/browser_process.h" | 12 #include "chrome/browser/browser_process.h" |
| 11 #include "chrome/browser/content_settings/host_content_settings_map_factory.h" | 13 #include "chrome/browser/content_settings/host_content_settings_map_factory.h" |
| 12 #include "chrome/browser/content_settings/tab_specific_content_settings.h" | 14 #include "chrome/browser/content_settings/tab_specific_content_settings.h" |
| 13 #include "chrome/browser/infobars/infobar_service.h" | 15 #include "chrome/browser/infobars/infobar_service.h" |
| 14 #include "chrome/browser/profiles/profile.h" | 16 #include "chrome/browser/profiles/profile.h" |
| 17 #include "chrome/browser/safe_browsing/safe_browsing_service.h" |
| 15 #include "chrome/browser/subresource_filter/subresource_filter_profile_context_f
actory.h" | 18 #include "chrome/browser/subresource_filter/subresource_filter_profile_context_f
actory.h" |
| 16 #include "chrome/browser/ui/android/content_settings/subresource_filter_infobar_
delegate.h" | 19 #include "chrome/browser/ui/android/content_settings/subresource_filter_infobar_
delegate.h" |
| 17 #include "components/content_settings/core/browser/host_content_settings_map.h" | 20 #include "components/content_settings/core/browser/host_content_settings_map.h" |
| 18 #include "components/content_settings/core/common/content_settings_types.h" | 21 #include "components/content_settings/core/common/content_settings_types.h" |
| 22 #include "components/safe_browsing_db/database_manager.h" |
| 23 #include "components/safe_browsing_db/v4_feature_list.h" |
| 19 #include "components/subresource_filter/content/browser/content_ruleset_service.
h" | 24 #include "components/subresource_filter/content/browser/content_ruleset_service.
h" |
| 20 #include "components/subresource_filter/content/browser/content_subresource_filt
er_driver_factory.h" | 25 #include "components/subresource_filter/content/browser/content_subresource_filt
er_driver_factory.h" |
| 26 #include "components/subresource_filter/content/browser/subresource_filter_safe_
browsing_activation_throttle.h" |
| 27 #include "components/subresource_filter/core/browser/subresource_filter_features
.h" |
| 28 #include "components/subresource_filter/core/common/activation_scope.h" |
| 29 #include "content/public/browser/browser_thread.h" |
| 21 #include "content/public/browser/navigation_handle.h" | 30 #include "content/public/browser/navigation_handle.h" |
| 22 | 31 |
| 23 DEFINE_WEB_CONTENTS_USER_DATA_KEY(ChromeSubresourceFilterClient); | 32 DEFINE_WEB_CONTENTS_USER_DATA_KEY(ChromeSubresourceFilterClient); |
| 24 | 33 |
| 25 ChromeSubresourceFilterClient::ChromeSubresourceFilterClient( | 34 ChromeSubresourceFilterClient::ChromeSubresourceFilterClient( |
| 26 content::WebContents* web_contents) | 35 content::WebContents* web_contents) |
| 27 : web_contents_(web_contents), did_show_ui_for_navigation_(false) { | 36 : web_contents_(web_contents), did_show_ui_for_navigation_(false) { |
| 28 DCHECK(web_contents); | 37 DCHECK(web_contents); |
| 29 SubresourceFilterProfileContextFactory::EnsureForProfile( | 38 SubresourceFilterProfileContextFactory::EnsureForProfile( |
| 30 Profile::FromBrowserContext(web_contents_->GetBrowserContext())); | 39 Profile::FromBrowserContext(web_contents_->GetBrowserContext())); |
| 31 | 40 |
| 32 subresource_filter::ContentSubresourceFilterDriverFactory:: | 41 subresource_filter::ContentSubresourceFilterDriverFactory:: |
| 33 CreateForWebContents(web_contents, this); | 42 CreateForWebContents(web_contents, this); |
| 34 } | 43 } |
| 35 | 44 |
| 36 ChromeSubresourceFilterClient::~ChromeSubresourceFilterClient() {} | 45 ChromeSubresourceFilterClient::~ChromeSubresourceFilterClient() {} |
| 37 | 46 |
| 47 void ChromeSubresourceFilterClient::MaybeAppendNavigationThrottles( |
| 48 content::NavigationHandle* navigation_handle, |
| 49 std::vector<std::unique_ptr<content::NavigationThrottle>>* throttles) { |
| 50 // Don't add any throttles if the feature isn't enabled at all. |
| 51 if (subresource_filter::GetActiveConfigurations() |
| 52 ->the_one_and_only() |
| 53 .activation_scope == subresource_filter::ActivationScope::NO_SITES) { |
| 54 return; |
| 55 } |
| 56 |
| 57 if (navigation_handle->IsInMainFrame()) { |
| 58 safe_browsing::SafeBrowsingService* safe_browsing_service = |
| 59 g_browser_process->safe_browsing_service(); |
| 60 scoped_refptr<safe_browsing::SafeBrowsingDatabaseManager> database_manager; |
| 61 if (safe_browsing_service && |
| 62 safe_browsing_service->database_manager()->IsSupported() && |
| 63 safe_browsing::V4FeatureList::GetV4UsageStatus() == |
| 64 safe_browsing::V4FeatureList::V4UsageStatus::V4_ONLY) { |
| 65 database_manager = safe_browsing_service->database_manager(); |
| 66 } |
| 67 |
| 68 throttles->push_back( |
| 69 base::MakeUnique<subresource_filter:: |
| 70 SubresourceFilterSafeBrowsingActivationThrottle>( |
| 71 navigation_handle, |
| 72 content::BrowserThread::GetTaskRunnerForThread( |
| 73 content::BrowserThread::IO), |
| 74 std::move(database_manager))); |
| 75 } |
| 76 |
| 77 auto* driver_factory = |
| 78 subresource_filter::ContentSubresourceFilterDriverFactory:: |
| 79 FromWebContents(navigation_handle->GetWebContents()); |
| 80 driver_factory->throttle_manager()->MaybeAppendNavigationThrottles( |
| 81 navigation_handle, throttles); |
| 82 } |
| 83 |
| 38 void ChromeSubresourceFilterClient::ToggleNotificationVisibility( | 84 void ChromeSubresourceFilterClient::ToggleNotificationVisibility( |
| 39 bool visibility) { | 85 bool visibility) { |
| 40 if (did_show_ui_for_navigation_ && visibility) | 86 if (did_show_ui_for_navigation_ && visibility) |
| 41 return; | 87 return; |
| 42 | 88 |
| 43 did_show_ui_for_navigation_ = visibility; | 89 did_show_ui_for_navigation_ = visibility; |
| 44 TabSpecificContentSettings* content_settings = | 90 TabSpecificContentSettings* content_settings = |
| 45 TabSpecificContentSettings::FromWebContents(web_contents_); | 91 TabSpecificContentSettings::FromWebContents(web_contents_); |
| 46 | 92 |
| 47 // |visibility| is false when a new navigation starts. | 93 // |visibility| is false when a new navigation starts. |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 105 url, url, ContentSettingsType::CONTENT_SETTINGS_TYPE_SUBRESOURCE_FILTER, | 151 url, url, ContentSettingsType::CONTENT_SETTINGS_TYPE_SUBRESOURCE_FILTER, |
| 106 std::string()); | 152 std::string()); |
| 107 } | 153 } |
| 108 | 154 |
| 109 subresource_filter::VerifiedRulesetDealer::Handle* | 155 subresource_filter::VerifiedRulesetDealer::Handle* |
| 110 ChromeSubresourceFilterClient::GetRulesetDealer() { | 156 ChromeSubresourceFilterClient::GetRulesetDealer() { |
| 111 subresource_filter::ContentRulesetService* ruleset_service = | 157 subresource_filter::ContentRulesetService* ruleset_service = |
| 112 g_browser_process->subresource_filter_ruleset_service(); | 158 g_browser_process->subresource_filter_ruleset_service(); |
| 113 return ruleset_service ? ruleset_service->ruleset_dealer() : nullptr; | 159 return ruleset_service ? ruleset_service->ruleset_dealer() : nullptr; |
| 114 } | 160 } |
| OLD | NEW |