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

Unified Diff: components/subresource_filter/content/browser/subresource_filter_navigation_throttle.cc

Issue 2060313002: Navigation throttle for the Safe Browsing Subresource Filter. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@pre-tab-activation
Patch Set: adressing engedy@ comments Created 4 years, 5 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 side-by-side diff with in-line comments
Download patch
Index: components/subresource_filter/content/browser/subresource_filter_navigation_throttle.cc
diff --git a/components/subresource_filter/content/browser/subresource_filter_navigation_throttle.cc b/components/subresource_filter/content/browser/subresource_filter_navigation_throttle.cc
new file mode 100644
index 0000000000000000000000000000000000000000..e136783f6ce136a2c1816c3cb3f7d0a069f21563
--- /dev/null
+++ b/components/subresource_filter/content/browser/subresource_filter_navigation_throttle.cc
@@ -0,0 +1,67 @@
+// Copyright 2016 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 "components/subresource_filter/content/browser/subresource_filter_navigation_throttle.h"
+
+#include "components/subresource_filter/content/browser/content_subresource_filter_driver.h"
+#include "components/subresource_filter/content/browser/content_subresource_filter_driver_factory.h"
+#include "components/subresource_filter/core/browser/subresource_filter_features.h"
+#include "components/subresource_filter/core/common/activation_state.h"
+#include "content/public/browser/navigation_handle.h"
+
+namespace subresource_filter {
+
+// static
+std::unique_ptr<content::NavigationThrottle>
+SubresourceFilterNavigationThrottle::Create(content::NavigationHandle* handle) {
+ return std::unique_ptr<content::NavigationThrottle>(
+ new SubresourceFilterNavigationThrottle(handle));
+}
+
+SubresourceFilterNavigationThrottle::SubresourceFilterNavigationThrottle(
+ content::NavigationHandle* handle)
+ : content::NavigationThrottle(handle),
+ initial_url_(navigation_handle()->GetURL()) {}
+
+SubresourceFilterNavigationThrottle::~SubresourceFilterNavigationThrottle() {}
+
+content::NavigationThrottle::ThrottleCheckResult
+SubresourceFilterNavigationThrottle::WillRedirectRequest() {
+ if (!navigation_handle()->GetURL().SchemeIsHTTPOrHTTPS())
+ return NavigationThrottle::PROCEED;
+ ContentSubresourceFilterDriverFactory* driver_factory =
+ ContentSubresourceFilterDriverFactory::FromWebContents(
+ navigation_handle()->GetWebContents());
+ // Ensure that the activation state of the subresource filter is persisted
+ // beyond redirects. In case of the desktop platforms, where Safe Browsing
+ // check is performed synchronously it's guaranteed that |driver_factory| has
+ // the information about the activation set. But if the Safe Browsing check in
+ // asynchronous, then we night miss some redirects.
+ if (driver_factory->ShouldActivateForURL(initial_url_)) {
+ driver_factory->AddOriginOfURLToActivationSet(
+ navigation_handle()->GetURL());
+ }
+
+ return NavigationThrottle::PROCEED;
+}
+
+content::NavigationThrottle::ThrottleCheckResult
+SubresourceFilterNavigationThrottle::WillProcessResponse() {
+ if (!navigation_handle()->GetURL().SchemeIsHTTPOrHTTPS())
+ return NavigationThrottle::PROCEED;
+
+ ContentSubresourceFilterDriverFactory* driver_factory =
+ ContentSubresourceFilterDriverFactory::FromWebContents(
+ navigation_handle()->GetWebContents());
+ if (driver_factory->ShouldActivateForURL(initial_url_)) {
+ ContentSubresourceFilterDriver* driver =
+ driver_factory->DriverFromFrameHost(
+ navigation_handle()->GetRenderFrameHost());
+ driver->ActivateForProvisionalLoad(GetMaximumActivationState());
+ }
+
+ return NavigationThrottle::PROCEED;
+}
+
+} // namespace subresource_filter

Powered by Google App Engine
This is Rietveld 408576698