Index: components/subresource_filter/content/browser/subframe_navigation_filtering_throttle.cc |
diff --git a/components/subresource_filter/content/browser/subframe_navigation_filtering_throttle.cc b/components/subresource_filter/content/browser/subframe_navigation_filtering_throttle.cc |
index 020b42f8bf4d5e85601f6447fe5b3c873804a383..ebb562e5278a6f19584c350ea235efd6285956b8 100644 |
--- a/components/subresource_filter/content/browser/subframe_navigation_filtering_throttle.cc |
+++ b/components/subresource_filter/content/browser/subframe_navigation_filtering_throttle.cc |
@@ -6,6 +6,8 @@ |
#include "base/bind.h" |
#include "base/logging.h" |
+#include "base/metrics/histogram_macros.h" |
+#include "components/subresource_filter/core/common/time_measurements.h" |
#include "content/public/browser/navigation_handle.h" |
namespace subresource_filter { |
@@ -20,7 +22,19 @@ SubframeNavigationFilteringThrottle::SubframeNavigationFilteringThrottle( |
DCHECK(parent_frame_filter_); |
} |
-SubframeNavigationFilteringThrottle::~SubframeNavigationFilteringThrottle() {} |
+SubframeNavigationFilteringThrottle::~SubframeNavigationFilteringThrottle() { |
+ if (disallowed_) { |
+ UMA_HISTOGRAM_CUSTOM_MICRO_TIMES( |
+ "SubresourceFilter.DocumentLoad.SubframeFilteringDelay.Disallowed", |
+ total_defer_time_, base::TimeDelta::FromMicroseconds(1), |
+ base::TimeDelta::FromSeconds(10), 50); |
+ } else { |
+ UMA_HISTOGRAM_CUSTOM_MICRO_TIMES( |
+ "SubresourceFilter.DocumentLoad.SubframeFilteringDelay.Allowed", |
+ total_defer_time_, base::TimeDelta::FromMicroseconds(1), |
+ base::TimeDelta::FromSeconds(10), 50); |
+ } |
+} |
content::NavigationThrottle::ThrottleCheckResult |
SubframeNavigationFilteringThrottle::WillStartRequest() { |
@@ -42,14 +56,18 @@ SubframeNavigationFilteringThrottle::DeferToCalculateLoadPolicy() { |
navigation_handle()->GetURL(), |
base::Bind(&SubframeNavigationFilteringThrottle::OnCalculatedLoadPolicy, |
weak_ptr_factory_.GetWeakPtr())); |
+ last_defer_timestamp_ = base::TimeTicks::Now(); |
return content::NavigationThrottle::ThrottleCheckResult::DEFER; |
} |
void SubframeNavigationFilteringThrottle::OnCalculatedLoadPolicy( |
LoadPolicy policy) { |
+ DCHECK(!last_defer_timestamp_.is_null()); |
+ total_defer_time_ += base::TimeTicks::Now() - last_defer_timestamp_; |
// TODO(csharrison): Support WouldDisallow pattern and expose the policy for |
// metrics. Also, cancel with BLOCK_AND_COLLAPSE when it is implemented. |
if (policy == LoadPolicy::DISALLOW) { |
+ disallowed_ = true; |
parent_frame_filter_->ReportDisallowedLoad(); |
navigation_handle()->CancelDeferredNavigation( |
content::NavigationThrottle::CANCEL); |