Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(162)

Side by Side Diff: chrome/browser/subresource_filter/chrome_subresource_filter_client.cc

Issue 2795053002: [subresource_filter] Implement the "Smart" UI on Android (Closed)
Patch Set: minor tweaks Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 #include <utility>
9 9
10 #include "base/memory/ptr_util.h" 10 #include "base/memory/ptr_util.h"
11 #include "base/metrics/histogram_macros.h" 11 #include "base/metrics/histogram_macros.h"
12 #include "chrome/browser/browser_process.h" 12 #include "chrome/browser/browser_process.h"
13 #include "chrome/browser/content_settings/host_content_settings_map_factory.h"
14 #include "chrome/browser/content_settings/tab_specific_content_settings.h" 13 #include "chrome/browser/content_settings/tab_specific_content_settings.h"
15 #include "chrome/browser/infobars/infobar_service.h" 14 #include "chrome/browser/infobars/infobar_service.h"
16 #include "chrome/browser/profiles/profile.h" 15 #include "chrome/browser/profiles/profile.h"
17 #include "chrome/browser/safe_browsing/safe_browsing_service.h" 16 #include "chrome/browser/safe_browsing/safe_browsing_service.h"
17 #include "chrome/browser/subresource_filter/subresource_filter_content_settings_ manager.h"
18 #include "chrome/browser/subresource_filter/subresource_filter_profile_context.h "
18 #include "chrome/browser/subresource_filter/subresource_filter_profile_context_f actory.h" 19 #include "chrome/browser/subresource_filter/subresource_filter_profile_context_f actory.h"
19 #include "chrome/browser/ui/android/content_settings/subresource_filter_infobar_ delegate.h" 20 #include "chrome/browser/ui/android/content_settings/subresource_filter_infobar_ delegate.h"
20 #include "components/content_settings/core/browser/host_content_settings_map.h" 21 #include "components/content_settings/core/browser/host_content_settings_map.h"
21 #include "components/content_settings/core/common/content_settings_types.h" 22 #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/database_manager.h"
23 #include "components/safe_browsing_db/v4_feature_list.h" 24 #include "components/safe_browsing_db/v4_feature_list.h"
24 #include "components/subresource_filter/content/browser/content_ruleset_service. h" 25 #include "components/subresource_filter/content/browser/content_ruleset_service. h"
25 #include "components/subresource_filter/content/browser/content_subresource_filt er_driver_factory.h" 26 #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/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/browser/subresource_filter_features .h"
29 #include "components/subresource_filter/core/common/activation_level.h"
28 #include "components/subresource_filter/core/common/activation_scope.h" 30 #include "components/subresource_filter/core/common/activation_scope.h"
31 #include "components/subresource_filter/core/common/activation_state.h"
29 #include "content/public/browser/browser_thread.h" 32 #include "content/public/browser/browser_thread.h"
30 #include "content/public/browser/navigation_handle.h" 33 #include "content/public/browser/navigation_handle.h"
31 34
32 DEFINE_WEB_CONTENTS_USER_DATA_KEY(ChromeSubresourceFilterClient); 35 DEFINE_WEB_CONTENTS_USER_DATA_KEY(ChromeSubresourceFilterClient);
33 36
34 ChromeSubresourceFilterClient::ChromeSubresourceFilterClient( 37 ChromeSubresourceFilterClient::ChromeSubresourceFilterClient(
35 content::WebContents* web_contents) 38 content::WebContents* web_contents)
36 : web_contents_(web_contents), did_show_ui_for_navigation_(false) { 39 : web_contents_(web_contents), did_show_ui_for_navigation_(false) {
37 DCHECK(web_contents); 40 DCHECK(web_contents);
38 SubresourceFilterProfileContextFactory::EnsureForProfile( 41 SubresourceFilterProfileContext* context =
39 Profile::FromBrowserContext(web_contents_->GetBrowserContext())); 42 SubresourceFilterProfileContextFactory::GetForProfile(
40 43 Profile::FromBrowserContext(web_contents_->GetBrowserContext()));
44 settings_manager_ = context->settings_manager();
41 subresource_filter::ContentSubresourceFilterDriverFactory:: 45 subresource_filter::ContentSubresourceFilterDriverFactory::
42 CreateForWebContents(web_contents, this); 46 CreateForWebContents(web_contents, this);
43 } 47 }
44 48
45 ChromeSubresourceFilterClient::~ChromeSubresourceFilterClient() {} 49 ChromeSubresourceFilterClient::~ChromeSubresourceFilterClient() {}
46 50
47 void ChromeSubresourceFilterClient::MaybeAppendNavigationThrottles( 51 void ChromeSubresourceFilterClient::MaybeAppendNavigationThrottles(
48 content::NavigationHandle* navigation_handle, 52 content::NavigationHandle* navigation_handle,
49 std::vector<std::unique_ptr<content::NavigationThrottle>>* throttles) { 53 std::vector<std::unique_ptr<content::NavigationThrottle>>* throttles) {
50 // Don't add any throttles if the feature isn't enabled at all. 54 // Don't add any throttles if the feature isn't enabled at all.
(...skipping 27 matching lines...) Expand all
78 subresource_filter::ContentSubresourceFilterDriverFactory:: 82 subresource_filter::ContentSubresourceFilterDriverFactory::
79 FromWebContents(navigation_handle->GetWebContents()); 83 FromWebContents(navigation_handle->GetWebContents());
80 driver_factory->throttle_manager()->MaybeAppendNavigationThrottles( 84 driver_factory->throttle_manager()->MaybeAppendNavigationThrottles(
81 navigation_handle, throttles); 85 navigation_handle, throttles);
82 } 86 }
83 87
84 void ChromeSubresourceFilterClient::ToggleNotificationVisibility( 88 void ChromeSubresourceFilterClient::ToggleNotificationVisibility(
85 bool visibility) { 89 bool visibility) {
86 if (did_show_ui_for_navigation_ && visibility) 90 if (did_show_ui_for_navigation_ && visibility)
87 return; 91 return;
88 92 did_show_ui_for_navigation_ = false;
89 did_show_ui_for_navigation_ = visibility;
90 TabSpecificContentSettings* content_settings =
91 TabSpecificContentSettings::FromWebContents(web_contents_);
92 93
93 // |visibility| is false when a new navigation starts. 94 // |visibility| is false when a new navigation starts.
94 if (visibility) { 95 if (visibility) {
95 content_settings->OnContentBlocked( 96 const GURL& top_level_url = web_contents_->GetLastCommittedURL();
96 CONTENT_SETTINGS_TYPE_SUBRESOURCE_FILTER); 97 if (!settings_manager_->ShouldShowUIForSite(top_level_url)) {
97 LogAction(kActionUIShown); 98 LogAction(kActionUISuppressed);
99 return;
100 }
98 #if defined(OS_ANDROID) 101 #if defined(OS_ANDROID)
99 InfoBarService* infobar_service = 102 InfoBarService* infobar_service =
100 InfoBarService::FromWebContents(web_contents_); 103 InfoBarService::FromWebContents(web_contents_);
101 SubresourceFilterInfobarDelegate::Create(infobar_service); 104 SubresourceFilterInfobarDelegate::Create(infobar_service);
102 #endif 105 #endif
106 TabSpecificContentSettings* content_settings =
107 TabSpecificContentSettings::FromWebContents(web_contents_);
108 content_settings->OnContentBlocked(
109 CONTENT_SETTINGS_TYPE_SUBRESOURCE_FILTER);
110
111 LogAction(kActionUIShown);
112 did_show_ui_for_navigation_ = true;
113 settings_manager_->OnDidShowUI(top_level_url);
103 } else { 114 } else {
104 LogAction(kActionNavigationStarted); 115 LogAction(kActionNavigationStarted);
105 } 116 }
106 } 117 }
107 118
108 bool ChromeSubresourceFilterClient::ShouldSuppressActivation( 119 bool ChromeSubresourceFilterClient::ShouldSuppressActivation(
109 content::NavigationHandle* navigation_handle) { 120 content::NavigationHandle* navigation_handle) {
110 const GURL& url(navigation_handle->GetURL()); 121 const GURL& url(navigation_handle->GetURL());
111 return navigation_handle->IsInMainFrame() && 122 return navigation_handle->IsInMainFrame() &&
112 (whitelisted_hosts_.find(url.host()) != whitelisted_hosts_.end() || 123 (whitelisted_hosts_.find(url.host()) != whitelisted_hosts_.end() ||
113 GetContentSettingForUrl(url) == CONTENT_SETTING_BLOCK); 124 settings_manager_->GetSitePermission(url) == CONTENT_SETTING_BLOCK);
114 } 125 }
115 126
116 void ChromeSubresourceFilterClient::WhitelistByContentSettings( 127 void ChromeSubresourceFilterClient::WhitelistByContentSettings(
117 const GURL& url) { 128 const GURL& top_level_url) {
118 // Whitelist via content settings. 129 settings_manager_->WhitelistSite(top_level_url);
119 Profile* profile =
120 Profile::FromBrowserContext(web_contents_->GetBrowserContext());
121 DCHECK(profile);
122 HostContentSettingsMap* settings_map =
123 HostContentSettingsMapFactory::GetForProfile(profile);
124 settings_map->SetContentSettingDefaultScope(
125 url, url, ContentSettingsType::CONTENT_SETTINGS_TYPE_SUBRESOURCE_FILTER,
126 std::string(), CONTENT_SETTING_BLOCK);
127
128 LogAction(kActionContentSettingsBlockedFromUI);
129 } 130 }
130 131
131 void ChromeSubresourceFilterClient::WhitelistInCurrentWebContents( 132 void ChromeSubresourceFilterClient::WhitelistInCurrentWebContents(
132 const GURL& url) { 133 const GURL& url) {
133 if (url.SchemeIsHTTPOrHTTPS()) 134 if (url.SchemeIsHTTPOrHTTPS())
134 whitelisted_hosts_.insert(url.host()); 135 whitelisted_hosts_.insert(url.host());
135 } 136 }
136 137
137 // static 138 // static
138 void ChromeSubresourceFilterClient::LogAction(SubresourceFilterAction action) { 139 void ChromeSubresourceFilterClient::LogAction(SubresourceFilterAction action) {
139 UMA_HISTOGRAM_ENUMERATION("SubresourceFilter.Actions", action, 140 UMA_HISTOGRAM_ENUMERATION("SubresourceFilter.Actions", action,
140 kActionLastEntry); 141 kActionLastEntry);
141 } 142 }
142 143
143 ContentSetting ChromeSubresourceFilterClient::GetContentSettingForUrl(
144 const GURL& url) {
145 Profile* profile =
146 Profile::FromBrowserContext(web_contents_->GetBrowserContext());
147 DCHECK(profile);
148 HostContentSettingsMap* settings_map =
149 HostContentSettingsMapFactory::GetForProfile(profile);
150 return settings_map->GetContentSetting(
151 url, url, ContentSettingsType::CONTENT_SETTINGS_TYPE_SUBRESOURCE_FILTER,
152 std::string());
153 }
154
155 subresource_filter::VerifiedRulesetDealer::Handle* 144 subresource_filter::VerifiedRulesetDealer::Handle*
156 ChromeSubresourceFilterClient::GetRulesetDealer() { 145 ChromeSubresourceFilterClient::GetRulesetDealer() {
157 subresource_filter::ContentRulesetService* ruleset_service = 146 subresource_filter::ContentRulesetService* ruleset_service =
158 g_browser_process->subresource_filter_ruleset_service(); 147 g_browser_process->subresource_filter_ruleset_service();
159 return ruleset_service ? ruleset_service->ruleset_dealer() : nullptr; 148 return ruleset_service ? ruleset_service->ruleset_dealer() : nullptr;
160 } 149 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698