blob: 0a37234421281d571d1b202f7cca4aaaabb63220 [file] [log] [blame]
// Copyright (c) 2012 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/loader/safe_browsing_resource_throttle.h"
#include "chrome/browser/safe_browsing/safe_browsing_service.h"
#include "chrome/browser/safe_browsing/ui_manager.h"
#include "components/safe_browsing/base_ui_manager.h"
#include "components/safe_browsing/db/v4_protocol_manager_util.h"
#include "components/safe_browsing/features.h"
#include "content/public/browser/resource_request_info.h"
#include "net/http/http_request_headers.h"
content::ResourceThrottle* MaybeCreateSafeBrowsingResourceThrottle(
net::URLRequest* request,
content::ResourceType resource_type,
safe_browsing::SafeBrowsingService* sb_service) {
if (!sb_service->database_manager()->IsSupported())
return nullptr;
if (base::FeatureList::IsEnabled(safe_browsing::kParallelUrlCheck)) {
return new SafeBrowsingParallelResourceThrottle(request, resource_type,
sb_service);
}
return new SafeBrowsingResourceThrottle(request, resource_type, sb_service);
}
SafeBrowsingResourceThrottle::SafeBrowsingResourceThrottle(
const net::URLRequest* request,
content::ResourceType resource_type,
safe_browsing::SafeBrowsingService* sb_service)
: safe_browsing::BaseResourceThrottle(
request,
resource_type,
safe_browsing::CreateSBThreatTypeSet(
{safe_browsing::SB_THREAT_TYPE_URL_MALWARE,
safe_browsing::SB_THREAT_TYPE_URL_PHISHING,
safe_browsing::SB_THREAT_TYPE_URL_UNWANTED}),
sb_service->database_manager(),
sb_service->ui_manager()),
url_checker_delegate_(new safe_browsing::UrlCheckerDelegateImpl(
sb_service->database_manager(),
sb_service->ui_manager())) {}
SafeBrowsingResourceThrottle::~SafeBrowsingResourceThrottle() = default;
const char* SafeBrowsingResourceThrottle::GetNameForLogging() const {
return "SafeBrowsingResourceThrottle";
}
void SafeBrowsingResourceThrottle::MaybeDestroyPrerenderContents(
const content::ResourceRequestInfo* info) {
url_checker_delegate_->MaybeDestroyPrerenderContents(
info->GetWebContentsGetterForRequest());
}
void SafeBrowsingResourceThrottle::StartDisplayingBlockingPageHelper(
security_interstitials::UnsafeResource resource) {
// On Chrome only the first argument is used.
url_checker_delegate_->StartDisplayingBlockingPageHelper(
resource, std::string(), net::HttpRequestHeaders(),
false /* is_main_frame */, false /* has_user_gesture */);
}
SafeBrowsingParallelResourceThrottle::SafeBrowsingParallelResourceThrottle(
const net::URLRequest* request,
content::ResourceType resource_type,
safe_browsing::SafeBrowsingService* sb_service)
: safe_browsing::BaseParallelResourceThrottle(
request,
resource_type,
new safe_browsing::UrlCheckerDelegateImpl(
sb_service->database_manager(),
sb_service->ui_manager())) {}
SafeBrowsingParallelResourceThrottle::~SafeBrowsingParallelResourceThrottle() =
default;
const char* SafeBrowsingParallelResourceThrottle::GetNameForLogging() const {
return "SafeBrowsingParallelResourceThrottle";
}