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

Unified Diff: components/subresource_filter/content/browser/activation_state_computing_navigation_throttle.h

Issue 2697703002: Introduce ActivationStateComputingNavigationThrottle (Closed)
Patch Set: remove unit tests 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 side-by-side diff with in-line comments
Download patch
Index: components/subresource_filter/content/browser/activation_state_computing_navigation_throttle.h
diff --git a/components/subresource_filter/content/browser/activation_state_computing_navigation_throttle.h b/components/subresource_filter/content/browser/activation_state_computing_navigation_throttle.h
new file mode 100644
index 0000000000000000000000000000000000000000..2fc7917078c317e52381175990f1d4f19a0c59f1
--- /dev/null
+++ b/components/subresource_filter/content/browser/activation_state_computing_navigation_throttle.h
@@ -0,0 +1,98 @@
+// Copyright 2017 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.
+
+#ifndef COMPONENTS_SUBRESOURCE_FILTER_CONTENT_BROWSER_FRAME_ACTIVATION_NAVIGATION_THROTTLE_H_
+#define COMPONENTS_SUBRESOURCE_FILTER_CONTENT_BROWSER_FRAME_ACTIVATION_NAVIGATION_THROTTLE_H_
+
+#include <memory>
+
+#include "base/macros.h"
+#include "base/memory/weak_ptr.h"
+#include "base/optional.h"
+#include "components/subresource_filter/content/browser/verified_ruleset_dealer.h"
+#include "components/subresource_filter/core/common/activation_state.h"
+#include "content/public/browser/navigation_throttle.h"
+
+namespace subresource_filter {
+
+class AsyncDocumentSubresourceFilter;
+
+// NavigationThrottle responsible for determining the activation state of
+// subresource filtering for a given navigation (either in the main frame or in
+// a subframe); and for deferring that navigation at WillProcessResponse until
+// the activation state computation on the blocking pool thread is complete.
+// Interested parties can retrieve the activation state after this point (most
+// likely in ReadyToCommitNavigation).
+class ActivationStateComputingNavigationThrottle
+ : public content::NavigationThrottle {
+ public:
+ // For main frames, a verified ruleset handle is not readily available at
+ // construction time. Since it is expensive to "warm up" the ruleset, the
+ // ruleset handle will be injected in NotifyPageActivationWithRuleset once it
+ // has been established that activation computation is needed.
+ static std::unique_ptr<ActivationStateComputingNavigationThrottle>
+ CreateForMainFrame(content::NavigationHandle* navigation_handle);
+
+ // It is illegal to create an activation computing throttle for subframes
+ // whose parents are not activated. Similarly, |ruleset_handle| should be
+ // non-null.
+ static std::unique_ptr<ActivationStateComputingNavigationThrottle>
+ CreateForSubframe(content::NavigationHandle* navigation_handle,
+ VerifiedRuleset::Handle* ruleset_handle,
+ const ActivationState& parent_activation_state);
+
+ ~ActivationStateComputingNavigationThrottle() override;
+
+ // Notification for main frames when the page level activation is computed.
+ // Must be called at most once before WillProcessResponse is called on this
+ // throttle. If it is never called, or it is called with a DISABLED state,
+ // this object will never delay the navigation.
+ void NotifyPageActivationWithRuleset(
+ VerifiedRuleset::Handle* ruleset_handle,
+ const ActivationState& page_activation_state);
+
+ // content::NavigationThrottle:
+ content::NavigationThrottle::ThrottleCheckResult WillProcessResponse()
+ override;
+
+ // After the navigation is finished, the client may optionally choose to
+ // continue using the DocumentSubresourceFilter that was used to compute the
+ // activation state for this frame. The transfered filter can be cached and
+ // used to calculate load policy for subframe navigations occuring in this
+ // frame.
+ std::unique_ptr<AsyncDocumentSubresourceFilter> ReleaseFilter();
+
+ // Gets the activation state calculated for this navigation. Must be called
+ // after the navigation is resumed from getting paused in WillProcessResponse,
+ // which, for example, will have happened at ReadyToCommitNavigation.
+ const ActivationState& GetActivationState() const;
+
+ private:
+ void SetActivationStateAndResume(ActivationState state);
+
+ ActivationStateComputingNavigationThrottle(
+ content::NavigationHandle* navigation_handle,
+ const base::Optional<ActivationState> parent_activation_state,
+ VerifiedRuleset::Handle* ruleset_handle);
+
+ // These members are optional to allow DCHECKing their existence at certain
+ // points in the navigation flow.
+ base::Optional<ActivationState> activation_state_;
+ base::Optional<ActivationState> parent_activation_state_;
+
+ std::unique_ptr<AsyncDocumentSubresourceFilter> async_filter_;
+
+ // Must outlive this class. For main frame navigations, this member will be
+ // nullptr until NotifyPageActivationWithRuleset is called.
+ VerifiedRuleset::Handle* ruleset_handle_;
+
+ base::WeakPtrFactory<ActivationStateComputingNavigationThrottle>
+ weak_ptr_factory_;
+
+ DISALLOW_COPY_AND_ASSIGN(ActivationStateComputingNavigationThrottle);
+};
+
+} // namespace subresource_filter
+
+#endif // COMPONENTS_SUBRESOURCE_FILTER_CONTENT_BROWSER_FRAME_ACTIVATION_NAVIGATION_THROTTLE_H_

Powered by Google App Engine
This is Rietveld 408576698