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

Unified Diff: components/safe_browsing/base_blocking_page.cc

Issue 2700323002: Refactor BaseBlockingPage to reduce duplicated code (Closed)
Patch Set: 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
« no previous file with comments | « components/safe_browsing/base_blocking_page.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/safe_browsing/base_blocking_page.cc
diff --git a/components/safe_browsing/base_blocking_page.cc b/components/safe_browsing/base_blocking_page.cc
index 2b3f8e2ab4b0453ce42e10cb04d910fd461bea04..f424b282c411f7e4a0d589e94dc8db7e1b1d7c22 100644
--- a/components/safe_browsing/base_blocking_page.cc
+++ b/components/safe_browsing/base_blocking_page.cc
@@ -27,6 +27,12 @@ namespace safe_browsing {
namespace {
+// After a safe browsing interstitial where the user opted-in to the report
+// but clicked "proceed anyway", we delay the call to
+// ThreatDetails::FinishCollection() by this much time (in
+// milliseconds).
+const int64_t kThreatDetailsProceedDelayMilliSeconds = 3000;
+
base::LazyInstance<BaseBlockingPage::UnsafeResourceMap>::Leaky
g_unsafe_resource_map = LAZY_INSTANCE_INITIALIZER;
@@ -45,18 +51,21 @@ BaseBlockingPage::BaseBlockingPage(
ui_manager_(ui_manager),
main_frame_url_(main_frame_url),
navigation_entry_index_to_remove_(
- IsMainPageLoadBlocked(unsafe_resources) ?
- -1 :
- web_contents->GetController().GetLastCommittedEntryIndex()),
+ IsMainPageLoadBlocked(unsafe_resources)
+ ? -1
+ : web_contents->GetController().GetLastCommittedEntryIndex()),
unsafe_resources_(unsafe_resources),
sb_error_ui_(base::MakeUnique<SafeBrowsingErrorUI>(
- unsafe_resources_[0].url, main_frame_url_,
- GetInterstitialReason(unsafe_resources_),
- display_options,
- ui_manager->app_locale(),
- base::Time::NowFromSystemTime(),
- controller())),
- proceeded_(false) {}
+ unsafe_resources_[0].url,
+ main_frame_url_,
+ GetInterstitialReason(unsafe_resources_),
+ display_options,
+ ui_manager->app_locale(),
+ base::Time::NowFromSystemTime(),
+ controller())),
+ proceeded_(false),
+ threat_details_proceed_delay_ms_(kThreatDetailsProceedDelayMilliSeconds) {
+}
BaseBlockingPage::~BaseBlockingPage() {}
@@ -78,32 +87,25 @@ void BaseBlockingPage::ShowBlockingPage(
const UnsafeResource& unsafe_resource) {
WebContents* web_contents = unsafe_resource.web_contents_getter.Run();
- if (!InterstitialPage::GetInterstitialPage(web_contents) ||
- !unsafe_resource.is_subresource) {
+ if (InterstitialPage::GetInterstitialPage(web_contents) &&
+ unsafe_resource.is_subresource) {
+ // This is an interstitial for a page's resource, let's queue it.
+ UnsafeResourceMap* unsafe_resource_map = GetUnsafeResourcesMap();
+ (*unsafe_resource_map)[web_contents].push_back(unsafe_resource);
+ } else {
// There is no interstitial currently showing in that tab, or we are about
// to display a new one for the main frame. If there is already an
// interstitial, showing the new one will automatically hide the old one.
content::NavigationEntry* entry =
unsafe_resource.GetNavigationEntryForResource();
- const UnsafeResourceList resources{unsafe_resource};
- BaseBlockingPage* blocking_page =
- new BaseBlockingPage(
- ui_manager, web_contents,
- entry ? entry->GetURL() : GURL(),
- resources,
- CreateControllerClient(
- web_contents, resources,
- ui_manager->history_service(web_contents),
- ui_manager->app_locale(),
- ui_manager->default_safe_page()),
- CreateDefaultDisplayOptions());
+ const UnsafeResourceList unsafe_resources{unsafe_resource};
+ BaseBlockingPage* blocking_page = new BaseBlockingPage(
+ ui_manager, web_contents, entry ? entry->GetURL() : GURL(),
+ unsafe_resources,
+ CreateControllerClient(web_contents, unsafe_resources, ui_manager),
+ CreateDefaultDisplayOptions());
blocking_page->Show();
- return;
}
-
- // This is an interstitial for a page's resource, let's queue it.
- UnsafeResourceMap* unsafe_resource_map = GetUnsafeResourcesMap();
- (*unsafe_resource_map)[web_contents].push_back(unsafe_resource);
}
// static
@@ -116,10 +118,25 @@ bool BaseBlockingPage::IsMainPageLoadBlocked(
}
void BaseBlockingPage::OnProceed() {
- proceeded_ = true;
+ set_proceeded(true);
+ UpdateMetricsAfterSecurityInterstitial();
+
+ // Send the threat details, if we opted to.
+ FinishThreatDetails(
+ base::TimeDelta::FromMilliseconds(threat_details_proceed_delay_ms_),
+ true, /* did_proceed */
+ controller()->metrics_helper()->NumVisits());
ui_manager_->OnBlockingPageDone(unsafe_resources_, true /* proceed */,
web_contents(), main_frame_url_);
+
+ HandleSubresourcesAfterProceed();
+}
+
+void BaseBlockingPage::HandleSubresourcesAfterProceed() {}
+
+void BaseBlockingPage::SetThreatDetailsProceedDelayForTesting(int64_t delay) {
+ threat_details_proceed_delay_ms_ = delay;
}
void BaseBlockingPage::OnDontProceed() {
@@ -300,27 +317,35 @@ void BaseBlockingPage::set_proceeded(bool proceeded) {
}
// static
-std::unique_ptr<SecurityInterstitialControllerClient>
-BaseBlockingPage::CreateControllerClient(
- content::WebContents* web_contents,
- const UnsafeResourceList& unsafe_resources,
- history::HistoryService* history_service,
- const std::string& app_locale,
- const GURL& default_safe_page) {
+security_interstitials::MetricsHelper::ReportDetails
+BaseBlockingPage::GetReportingInfo(const UnsafeResourceList& unsafe_resources) {
SafeBrowsingErrorUI::SBInterstitialReason interstitial_reason =
GetInterstitialReason(unsafe_resources);
+
security_interstitials::MetricsHelper::ReportDetails reporting_info;
reporting_info.metric_prefix =
GetMetricPrefix(unsafe_resources, interstitial_reason);
reporting_info.extra_suffix = GetExtraMetricsSuffix(unsafe_resources);
+ return reporting_info;
+}
+
+// static
+std::unique_ptr<SecurityInterstitialControllerClient>
+BaseBlockingPage::CreateControllerClient(
+ content::WebContents* web_contents,
+ const UnsafeResourceList& unsafe_resources,
+ BaseUIManager* ui_manager) {
+ history::HistoryService* history_service =
+ ui_manager->history_service(web_contents);
std::unique_ptr<security_interstitials::MetricsHelper> metrics_helper =
base::MakeUnique<security_interstitials::MetricsHelper>(
- unsafe_resources[0].url, reporting_info, history_service);
+ unsafe_resources[0].url, GetReportingInfo(unsafe_resources),
+ history_service);
return base::MakeUnique<SecurityInterstitialControllerClient>(
- web_contents, std::move(metrics_helper), nullptr, app_locale,
- default_safe_page);
+ web_contents, std::move(metrics_helper), nullptr, /* prefs */
+ ui_manager->app_locale(), ui_manager->default_safe_page());
}
} // namespace safe_browsing
« no previous file with comments | « components/safe_browsing/base_blocking_page.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698