| Index: chrome/browser/supervised_user/supervised_user_resource_throttle.cc
|
| diff --git a/chrome/browser/supervised_user/supervised_user_resource_throttle.cc b/chrome/browser/supervised_user/supervised_user_resource_throttle.cc
|
| deleted file mode 100644
|
| index f674898cf6ec99ebb4b45ef14541c630db248190..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/supervised_user/supervised_user_resource_throttle.cc
|
| +++ /dev/null
|
| @@ -1,232 +0,0 @@
|
| -// Copyright 2014 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 "chrome/browser/supervised_user/supervised_user_resource_throttle.h"
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/memory/ptr_util.h"
|
| -#include "base/metrics/histogram_macros.h"
|
| -#include "chrome/browser/supervised_user/supervised_user_interstitial.h"
|
| -#include "chrome/browser/supervised_user/supervised_user_navigation_observer.h"
|
| -#include "chrome/browser/supervised_user/supervised_user_url_filter.h"
|
| -#include "content/public/browser/browser_thread.h"
|
| -#include "content/public/browser/resource_request_info.h"
|
| -#include "net/url_request/redirect_info.h"
|
| -#include "net/url_request/url_request.h"
|
| -#include "ui/base/page_transition_types.h"
|
| -
|
| -using content::BrowserThread;
|
| -
|
| -namespace {
|
| -
|
| -// These values corresponds to SupervisedUserSafetyFilterResult in
|
| -// tools/metrics/histograms/histograms.xml. If you change anything here, make
|
| -// sure to also update histograms.xml accordingly.
|
| -enum {
|
| - FILTERING_BEHAVIOR_ALLOW = 1,
|
| - FILTERING_BEHAVIOR_ALLOW_UNCERTAIN,
|
| - FILTERING_BEHAVIOR_BLOCK_BLACKLIST,
|
| - FILTERING_BEHAVIOR_BLOCK_SAFESITES,
|
| - FILTERING_BEHAVIOR_BLOCK_MANUAL,
|
| - FILTERING_BEHAVIOR_BLOCK_DEFAULT,
|
| - FILTERING_BEHAVIOR_ALLOW_WHITELIST,
|
| - FILTERING_BEHAVIOR_MAX = FILTERING_BEHAVIOR_ALLOW_WHITELIST
|
| -};
|
| -const int kHistogramFilteringBehaviorSpacing = 100;
|
| -const int kHistogramPageTransitionMaxKnownValue =
|
| - static_cast<int>(ui::PAGE_TRANSITION_KEYWORD_GENERATED);
|
| -const int kHistogramPageTransitionFallbackValue =
|
| - kHistogramFilteringBehaviorSpacing - 1;
|
| -const int kHistogramMax = 800;
|
| -
|
| -static_assert(kHistogramPageTransitionMaxKnownValue <
|
| - kHistogramPageTransitionFallbackValue,
|
| - "HistogramPageTransition MaxKnownValue must be < FallbackValue");
|
| -static_assert(FILTERING_BEHAVIOR_MAX * kHistogramFilteringBehaviorSpacing +
|
| - kHistogramPageTransitionFallbackValue < kHistogramMax,
|
| - "Invalid HistogramMax value");
|
| -
|
| -int GetHistogramValueForFilteringBehavior(
|
| - SupervisedUserURLFilter::FilteringBehavior behavior,
|
| - supervised_user_error_page::FilteringBehaviorReason reason,
|
| - bool uncertain) {
|
| - switch (behavior) {
|
| - case SupervisedUserURLFilter::ALLOW:
|
| - case SupervisedUserURLFilter::WARN:
|
| - if (reason == supervised_user_error_page::WHITELIST)
|
| - return FILTERING_BEHAVIOR_ALLOW_WHITELIST;
|
| - return uncertain ? FILTERING_BEHAVIOR_ALLOW_UNCERTAIN
|
| - : FILTERING_BEHAVIOR_ALLOW;
|
| - case SupervisedUserURLFilter::BLOCK:
|
| - switch (reason) {
|
| - case supervised_user_error_page::BLACKLIST:
|
| - return FILTERING_BEHAVIOR_BLOCK_BLACKLIST;
|
| - case supervised_user_error_page::ASYNC_CHECKER:
|
| - return FILTERING_BEHAVIOR_BLOCK_SAFESITES;
|
| - case supervised_user_error_page::WHITELIST:
|
| - NOTREACHED();
|
| - break;
|
| - case supervised_user_error_page::MANUAL:
|
| - return FILTERING_BEHAVIOR_BLOCK_MANUAL;
|
| - case supervised_user_error_page::DEFAULT:
|
| - return FILTERING_BEHAVIOR_BLOCK_DEFAULT;
|
| - case supervised_user_error_page::NOT_SIGNED_IN:
|
| - // Should never happen, only used for requests from Webview
|
| - NOTREACHED();
|
| - }
|
| - case SupervisedUserURLFilter::INVALID:
|
| - NOTREACHED();
|
| - }
|
| - return 0;
|
| -}
|
| -
|
| -int GetHistogramValueForTransitionType(ui::PageTransition transition_type) {
|
| - int value =
|
| - static_cast<int>(ui::PageTransitionStripQualifier(transition_type));
|
| - if (0 <= value && value <= kHistogramPageTransitionMaxKnownValue)
|
| - return value;
|
| - NOTREACHED();
|
| - return kHistogramPageTransitionFallbackValue;
|
| -}
|
| -
|
| -void RecordFilterResultEvent(
|
| - bool safesites_histogram,
|
| - SupervisedUserURLFilter::FilteringBehavior behavior,
|
| - supervised_user_error_page::FilteringBehaviorReason reason,
|
| - bool uncertain,
|
| - ui::PageTransition transition_type) {
|
| - int value =
|
| - GetHistogramValueForFilteringBehavior(behavior, reason, uncertain) *
|
| - kHistogramFilteringBehaviorSpacing +
|
| - GetHistogramValueForTransitionType(transition_type);
|
| - DCHECK_LT(value, kHistogramMax);
|
| - // Note: We can't pass in the histogram name as a parameter to this function
|
| - // because of how the macro works (look up the histogram on the first
|
| - // invocation and cache it in a static variable).
|
| - if (safesites_histogram)
|
| - UMA_HISTOGRAM_SPARSE_SLOWLY("ManagedUsers.SafetyFilter", value);
|
| - else
|
| - UMA_HISTOGRAM_SPARSE_SLOWLY("ManagedUsers.FilteringResult", value);
|
| -}
|
| -
|
| -// Helper function to wrap a given callback in one that will post it to the
|
| -// IO thread.
|
| -base::Callback<void(bool)> ResultTrampoline(
|
| - const base::Callback<void(bool)>& callback) {
|
| - return base::Bind(
|
| - [](const base::Callback<void(bool)>& callback, bool result) {
|
| - BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
|
| - base::Bind(callback, result));
|
| - },
|
| - callback);
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -// static
|
| -std::unique_ptr<SupervisedUserResourceThrottle>
|
| -SupervisedUserResourceThrottle::MaybeCreate(
|
| - const net::URLRequest* request,
|
| - content::ResourceType resource_type,
|
| - const SupervisedUserURLFilter* url_filter) {
|
| - // Only treat main frame requests (ignoring subframes and subresources).
|
| - bool is_main_frame = resource_type == content::RESOURCE_TYPE_MAIN_FRAME;
|
| - if (!is_main_frame)
|
| - return nullptr;
|
| -
|
| - // Can't use base::MakeUnique because the constructor is private.
|
| - return base::WrapUnique(
|
| - new SupervisedUserResourceThrottle(request, url_filter));
|
| -}
|
| -
|
| -SupervisedUserResourceThrottle::SupervisedUserResourceThrottle(
|
| - const net::URLRequest* request,
|
| - const SupervisedUserURLFilter* url_filter)
|
| - : request_(request),
|
| - url_filter_(url_filter),
|
| - deferred_(false),
|
| - behavior_(SupervisedUserURLFilter::INVALID),
|
| - weak_ptr_factory_(this) {}
|
| -
|
| -SupervisedUserResourceThrottle::~SupervisedUserResourceThrottle() {}
|
| -
|
| -void SupervisedUserResourceThrottle::CheckURL(const GURL& url, bool* defer) {
|
| - deferred_ = false;
|
| - DCHECK_EQ(SupervisedUserURLFilter::INVALID, behavior_);
|
| - bool got_result = url_filter_->GetFilteringBehaviorForURLWithAsyncChecks(
|
| - url,
|
| - base::Bind(&SupervisedUserResourceThrottle::OnCheckDone,
|
| - weak_ptr_factory_.GetWeakPtr(), url));
|
| - DCHECK_EQ(got_result, behavior_ != SupervisedUserURLFilter::INVALID);
|
| - // If we got a "not blocked" result synchronously, don't defer.
|
| - *defer = deferred_ = !got_result ||
|
| - (behavior_ == SupervisedUserURLFilter::BLOCK);
|
| - if (got_result)
|
| - behavior_ = SupervisedUserURLFilter::INVALID;
|
| -}
|
| -
|
| -void SupervisedUserResourceThrottle::ShowInterstitial(
|
| - const GURL& url,
|
| - supervised_user_error_page::FilteringBehaviorReason reason) {
|
| - const content::ResourceRequestInfo* info =
|
| - content::ResourceRequestInfo::ForRequest(request_);
|
| - BrowserThread::PostTask(
|
| - BrowserThread::UI, FROM_HERE,
|
| - base::Bind(&SupervisedUserNavigationObserver::OnRequestBlocked,
|
| - info->GetWebContentsGetterForRequest(), url, reason,
|
| - ResultTrampoline(base::Bind(
|
| - &SupervisedUserResourceThrottle::OnInterstitialResult,
|
| - weak_ptr_factory_.GetWeakPtr()))));
|
| -}
|
| -
|
| -void SupervisedUserResourceThrottle::WillStartRequest(bool* defer) {
|
| - CheckURL(request_->url(), defer);
|
| -}
|
| -
|
| -void SupervisedUserResourceThrottle::WillRedirectRequest(
|
| - const net::RedirectInfo& redirect_info,
|
| - bool* defer) {
|
| - CheckURL(redirect_info.new_url, defer);
|
| -}
|
| -
|
| -const char* SupervisedUserResourceThrottle::GetNameForLogging() const {
|
| - return "SupervisedUserResourceThrottle";
|
| -}
|
| -
|
| -void SupervisedUserResourceThrottle::OnCheckDone(
|
| - const GURL& url,
|
| - SupervisedUserURLFilter::FilteringBehavior behavior,
|
| - supervised_user_error_page::FilteringBehaviorReason reason,
|
| - bool uncertain) {
|
| - DCHECK_EQ(SupervisedUserURLFilter::INVALID, behavior_);
|
| - // If we got a result synchronously, pass it back to ShowInterstitialIfNeeded.
|
| - if (!deferred_)
|
| - behavior_ = behavior;
|
| -
|
| - ui::PageTransition transition =
|
| - content::ResourceRequestInfo::ForRequest(request_)->GetPageTransition();
|
| -
|
| - RecordFilterResultEvent(false, behavior, reason, uncertain, transition);
|
| -
|
| - // If both the static blacklist and the async checker are enabled, also record
|
| - // SafeSites-only UMA events.
|
| - if (url_filter_->HasBlacklist() && url_filter_->HasAsyncURLChecker() &&
|
| - (reason == supervised_user_error_page::ASYNC_CHECKER ||
|
| - reason == supervised_user_error_page::BLACKLIST)) {
|
| - RecordFilterResultEvent(true, behavior, reason, uncertain, transition);
|
| - }
|
| -
|
| - if (behavior == SupervisedUserURLFilter::BLOCK)
|
| - ShowInterstitial(url, reason);
|
| - else if (deferred_)
|
| - Resume();
|
| -}
|
| -
|
| -void SupervisedUserResourceThrottle::OnInterstitialResult(
|
| - bool continue_request) {
|
| - if (continue_request)
|
| - Resume();
|
| - else
|
| - Cancel();
|
| -}
|
|
|