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

Side by Side Diff: components/subresource_filter/content/browser/content_subresource_filter_driver_factory.cc

Issue 2699443006: Deprecate ContentSubresourceFilterDriver. (Closed)
Patch Set: Rebase. Created 3 years, 10 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 "components/subresource_filter/content/browser/content_subresource_filt er_driver_factory.h" 5 #include "components/subresource_filter/content/browser/content_subresource_filt er_driver_factory.h"
6 6
7 #include "base/metrics/histogram_macros.h" 7 #include "base/metrics/histogram_macros.h"
8 #include "base/rand_util.h" 8 #include "base/rand_util.h"
9 #include "base/time/time.h" 9 #include "base/time/time.h"
10 #include "components/subresource_filter/content/browser/content_subresource_filt er_driver.h"
11 #include "components/subresource_filter/content/common/subresource_filter_messag es.h" 10 #include "components/subresource_filter/content/common/subresource_filter_messag es.h"
12 #include "components/subresource_filter/core/browser/subresource_filter_client.h " 11 #include "components/subresource_filter/core/browser/subresource_filter_client.h "
13 #include "components/subresource_filter/core/browser/subresource_filter_features .h" 12 #include "components/subresource_filter/core/browser/subresource_filter_features .h"
14 #include "components/subresource_filter/core/common/activation_list.h" 13 #include "components/subresource_filter/core/common/activation_list.h"
15 #include "components/subresource_filter/core/common/time_measurements.h" 14 #include "components/subresource_filter/core/common/time_measurements.h"
16 #include "content/public/browser/navigation_handle.h" 15 #include "content/public/browser/navigation_handle.h"
17 #include "content/public/browser/render_frame_host.h" 16 #include "content/public/browser/render_frame_host.h"
18 #include "content/public/browser/web_contents.h" 17 #include "content/public/browser/web_contents.h"
19 #include "ipc/ipc_message_macros.h" 18 #include "ipc/ipc_message_macros.h"
20 #include "net/base/net_errors.h" 19 #include "net/base/net_errors.h"
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 return static_cast<ContentSubresourceFilterDriverFactory*>( 69 return static_cast<ContentSubresourceFilterDriverFactory*>(
71 web_contents->GetUserData(kWebContentsUserDataKey)); 70 web_contents->GetUserData(kWebContentsUserDataKey));
72 } 71 }
73 72
74 ContentSubresourceFilterDriverFactory::ContentSubresourceFilterDriverFactory( 73 ContentSubresourceFilterDriverFactory::ContentSubresourceFilterDriverFactory(
75 content::WebContents* web_contents, 74 content::WebContents* web_contents,
76 std::unique_ptr<SubresourceFilterClient> client) 75 std::unique_ptr<SubresourceFilterClient> client)
77 : content::WebContentsObserver(web_contents), 76 : content::WebContentsObserver(web_contents),
78 client_(std::move(client)), 77 client_(std::move(client)),
79 activation_level_(ActivationLevel::DISABLED), 78 activation_level_(ActivationLevel::DISABLED),
80 measure_performance_(false) { 79 measure_performance_(false) {}
81 content::RenderFrameHost* main_frame_host = web_contents->GetMainFrame();
82 if (main_frame_host && main_frame_host->IsRenderFrameLive())
83 CreateDriverForFrameHostIfNeeded(main_frame_host);
84 }
85 80
86 ContentSubresourceFilterDriverFactory:: 81 ContentSubresourceFilterDriverFactory::
87 ~ContentSubresourceFilterDriverFactory() {} 82 ~ContentSubresourceFilterDriverFactory() {}
88 83
89 void ContentSubresourceFilterDriverFactory::CreateDriverForFrameHostIfNeeded(
90 content::RenderFrameHost* render_frame_host) {
91 auto iterator_and_inserted =
92 frame_drivers_.insert(std::make_pair(render_frame_host, nullptr));
93 if (iterator_and_inserted.second) {
94 iterator_and_inserted.first->second.reset(
95 new ContentSubresourceFilterDriver(render_frame_host));
96 }
97 }
98
99 void ContentSubresourceFilterDriverFactory::OnFirstSubresourceLoadDisallowed() { 84 void ContentSubresourceFilterDriverFactory::OnFirstSubresourceLoadDisallowed() {
100 if (ShouldSuppressNotifications()) 85 if (ShouldSuppressNotifications())
101 return; 86 return;
102 87
103 client_->ToggleNotificationVisibility(activation_level_ == 88 client_->ToggleNotificationVisibility(activation_level_ ==
104 ActivationLevel::ENABLED); 89 ActivationLevel::ENABLED);
105 } 90 }
106 91
107 void ContentSubresourceFilterDriverFactory::OnDocumentLoadStatistics( 92 void ContentSubresourceFilterDriverFactory::OnDocumentLoadStatistics(
108 const DocumentLoadStatistics& statistics) { 93 const DocumentLoadStatistics& statistics) {
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
172 void ContentSubresourceFilterDriverFactory::ActivateForFrameHostIfNeeded( 157 void ContentSubresourceFilterDriverFactory::ActivateForFrameHostIfNeeded(
173 content::RenderFrameHost* render_frame_host, 158 content::RenderFrameHost* render_frame_host,
174 const GURL& url, 159 const GURL& url,
175 bool failed_navigation) { 160 bool failed_navigation) {
176 // PlzNavigate: For failed navigations, ReadyToCommitNavigation is still 161 // PlzNavigate: For failed navigations, ReadyToCommitNavigation is still
177 // called, so we end up here; but there is no longer a failed provisional load 162 // called, so we end up here; but there is no longer a failed provisional load
178 // on the renderer side, so an activation message sent from here would turn on 163 // on the renderer side, so an activation message sent from here would turn on
179 // filtering for the subsequent error page load. This is probably harmless, 164 // filtering for the subsequent error page load. This is probably harmless,
180 // but not sending an activation message is even cleaner. 165 // but not sending an activation message is even cleaner.
181 if (activation_level_ != ActivationLevel::DISABLED && !failed_navigation) { 166 if (activation_level_ != ActivationLevel::DISABLED && !failed_navigation) {
182 auto* driver = DriverFromFrameHost(render_frame_host); 167 render_frame_host->Send(
183 DCHECK(driver); 168 new SubresourceFilterMsg_ActivateForNextCommittedLoad(
184 driver->ActivateForNextCommittedLoad(GetMaximumActivationLevel(), 169 render_frame_host->GetRoutingID(), activation_level_,
185 measure_performance_); 170 measure_performance_));
186 } 171 }
187 } 172 }
188 173
189 void ContentSubresourceFilterDriverFactory::OnReloadRequested() { 174 void ContentSubresourceFilterDriverFactory::OnReloadRequested() {
190 UMA_HISTOGRAM_BOOLEAN("SubresourceFilter.Prompt.NumReloads", true); 175 UMA_HISTOGRAM_BOOLEAN("SubresourceFilter.Prompt.NumReloads", true);
191 const GURL& whitelist_url = web_contents()->GetLastCommittedURL(); 176 const GURL& whitelist_url = web_contents()->GetLastCommittedURL();
192 AddHostOfURLToWhitelistSet(whitelist_url); 177 AddHostOfURLToWhitelistSet(whitelist_url);
193 web_contents()->GetController().Reload(content::ReloadType::NORMAL, true); 178 web_contents()->GetController().Reload(content::ReloadType::NORMAL, true);
194 } 179 }
195 180
196 void ContentSubresourceFilterDriverFactory::SetDriverForFrameHostForTesting(
197 content::RenderFrameHost* render_frame_host,
198 std::unique_ptr<ContentSubresourceFilterDriver> driver) {
199 auto iterator_and_inserted =
200 frame_drivers_.insert(std::make_pair(render_frame_host, nullptr));
201 iterator_and_inserted.first->second = std::move(driver);
202 }
203
204 ContentSubresourceFilterDriver*
205 ContentSubresourceFilterDriverFactory::DriverFromFrameHost(
206 content::RenderFrameHost* render_frame_host) {
207 auto iterator = frame_drivers_.find(render_frame_host);
208 return iterator == frame_drivers_.end() ? nullptr : iterator->second.get();
209 }
210
211 void ContentSubresourceFilterDriverFactory::ResetActivationState() { 181 void ContentSubresourceFilterDriverFactory::ResetActivationState() {
212 navigation_chain_.clear(); 182 navigation_chain_.clear();
213 activation_list_matches_.clear(); 183 activation_list_matches_.clear();
214 activation_level_ = ActivationLevel::DISABLED; 184 activation_level_ = ActivationLevel::DISABLED;
215 measure_performance_ = false; 185 measure_performance_ = false;
216 aggregated_document_statistics_ = DocumentLoadStatistics(); 186 aggregated_document_statistics_ = DocumentLoadStatistics();
217 } 187 }
218 188
219 void ContentSubresourceFilterDriverFactory::DidStartNavigation( 189 void ContentSubresourceFilterDriverFactory::DidStartNavigation(
220 content::NavigationHandle* navigation_handle) { 190 content::NavigationHandle* navigation_handle) {
221 if (navigation_handle->IsInMainFrame() && !navigation_handle->IsSamePage()) { 191 if (navigation_handle->IsInMainFrame() && !navigation_handle->IsSamePage()) {
222 ResetActivationState(); 192 ResetActivationState();
223 navigation_chain_.push_back(navigation_handle->GetURL()); 193 navigation_chain_.push_back(navigation_handle->GetURL());
224 client_->ToggleNotificationVisibility(false); 194 client_->ToggleNotificationVisibility(false);
225 } 195 }
226 } 196 }
227 197
228 void ContentSubresourceFilterDriverFactory::DidRedirectNavigation( 198 void ContentSubresourceFilterDriverFactory::DidRedirectNavigation(
229 content::NavigationHandle* navigation_handle) { 199 content::NavigationHandle* navigation_handle) {
230 DCHECK(!navigation_handle->IsSamePage()); 200 DCHECK(!navigation_handle->IsSamePage());
231 if (navigation_handle->IsInMainFrame()) 201 if (navigation_handle->IsInMainFrame())
232 navigation_chain_.push_back(navigation_handle->GetURL()); 202 navigation_chain_.push_back(navigation_handle->GetURL());
233 } 203 }
234 204
235 void ContentSubresourceFilterDriverFactory::RenderFrameCreated(
236 content::RenderFrameHost* render_frame_host) {
237 CreateDriverForFrameHostIfNeeded(render_frame_host);
238 }
239
240 void ContentSubresourceFilterDriverFactory::RenderFrameDeleted(
241 content::RenderFrameHost* render_frame_host) {
242 frame_drivers_.erase(render_frame_host);
243 }
244
245 void ContentSubresourceFilterDriverFactory::ReadyToCommitNavigation( 205 void ContentSubresourceFilterDriverFactory::ReadyToCommitNavigation(
246 content::NavigationHandle* navigation_handle) { 206 content::NavigationHandle* navigation_handle) {
247 DCHECK(!navigation_handle->IsSamePage()); 207 DCHECK(!navigation_handle->IsSamePage());
248 content::RenderFrameHost* render_frame_host = 208 content::RenderFrameHost* render_frame_host =
249 navigation_handle->GetRenderFrameHost(); 209 navigation_handle->GetRenderFrameHost();
250 GURL url = navigation_handle->GetURL(); 210 GURL url = navigation_handle->GetURL();
251 const content::Referrer& referrer = navigation_handle->GetReferrer(); 211 const content::Referrer& referrer = navigation_handle->GetReferrer();
252 ui::PageTransition transition = navigation_handle->GetPageTransition(); 212 ui::PageTransition transition = navigation_handle->GetPageTransition();
253 ReadyToCommitNavigationInternal( 213 ReadyToCommitNavigationInternal(
254 render_frame_host, url, referrer, transition, 214 render_frame_host, url, referrer, transition,
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
384 if (!hits_pattern) 344 if (!hits_pattern)
385 return; 345 return;
386 UMA_HISTOGRAM_ENUMERATION( 346 UMA_HISTOGRAM_ENUMERATION(
387 "SubresourceFilter.PageLoad.RedirectChainMatchPattern", hits_pattern, 347 "SubresourceFilter.PageLoad.RedirectChainMatchPattern", hits_pattern,
388 0x10 /* max value */); 348 0x10 /* max value */);
389 UMA_HISTOGRAM_COUNTS("SubresourceFilter.PageLoad.RedirectChainLength", 349 UMA_HISTOGRAM_COUNTS("SubresourceFilter.PageLoad.RedirectChainLength",
390 navigation_chain_.size()); 350 navigation_chain_.size());
391 } 351 }
392 352
393 } // namespace subresource_filter 353 } // namespace subresource_filter
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698