OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 // | 4 // |
5 // Implementation of the SafeBrowsingBlockingPage class. | 5 // Implementation of the SafeBrowsingBlockingPage class. |
6 | 6 |
7 #include "chrome/browser/safe_browsing/safe_browsing_blocking_page.h" | 7 #include "chrome/browser/safe_browsing/safe_browsing_blocking_page.h" |
8 | 8 |
9 #include "base/lazy_instance.h" | 9 #include "base/lazy_instance.h" |
10 #include "chrome/browser/browser_process.h" | 10 #include "chrome/browser/browser_process.h" |
11 #include "chrome/browser/history/history_service_factory.h" | 11 #include "chrome/browser/history/history_service_factory.h" |
12 #include "chrome/browser/interstitials/chrome_controller_client.h" | 12 #include "chrome/browser/interstitials/chrome_controller_client.h" |
13 #include "chrome/browser/interstitials/chrome_metrics_helper.h" | 13 #include "chrome/browser/interstitials/chrome_metrics_helper.h" |
14 #include "chrome/browser/profiles/profile.h" | 14 #include "chrome/browser/profiles/profile.h" |
15 #include "chrome/browser/renderer_preferences_util.h" | 15 #include "chrome/browser/renderer_preferences_util.h" |
16 #include "chrome/browser/safe_browsing/safe_browsing_service.h" | 16 #include "chrome/browser/safe_browsing/safe_browsing_service.h" |
17 #include "chrome/common/pref_names.h" | 17 #include "chrome/common/pref_names.h" |
18 #include "components/prefs/pref_service.h" | 18 #include "components/prefs/pref_service.h" |
19 #include "components/safe_browsing/browser/threat_details.h" | 19 #include "components/safe_browsing/browser/threat_details.h" |
20 #include "components/safe_browsing/triggers/trigger_manager.h" | 20 #include "components/safe_browsing/triggers/trigger_manager.h" |
21 #include "components/safe_browsing_db/safe_browsing_prefs.h" | 21 #include "components/safe_browsing_db/safe_browsing_prefs.h" |
22 #include "content/public/browser/browser_thread.h" | 22 #include "content/public/browser/browser_thread.h" |
23 #include "content/public/browser/interstitial_page.h" | 23 #include "content/public/browser/interstitial_page.h" |
24 #include "content/public/browser/navigation_entry.h" | 24 #include "content/public/browser/navigation_entry.h" |
25 #include "content/public/browser/web_contents.h" | 25 #include "content/public/browser/web_contents.h" |
26 | 26 |
27 using content::BrowserThread; | 27 using content::BrowserThread; |
28 using content::InterstitialPage; | 28 using content::InterstitialPage; |
29 using content::WebContents; | 29 using content::WebContents; |
30 using security_interstitials::SafeBrowsingErrorUI; | 30 using security_interstitials::BaseSafeBrowsingErrorUI; |
31 using security_interstitials::SecurityInterstitialControllerClient; | 31 using security_interstitials::SecurityInterstitialControllerClient; |
32 | 32 |
33 namespace safe_browsing { | 33 namespace safe_browsing { |
34 | 34 |
35 namespace { | 35 namespace { |
36 | 36 |
37 // Constants for the Experience Sampling instrumentation. | 37 // Constants for the Experience Sampling instrumentation. |
38 const char kEventNameMalware[] = "safebrowsing_interstitial_"; | 38 const char kEventNameMalware[] = "safebrowsing_interstitial_"; |
39 const char kEventNameHarmful[] = "harmful_interstitial_"; | 39 const char kEventNameHarmful[] = "harmful_interstitial_"; |
40 const char kEventNamePhishing[] = "phishing_interstitial_"; | 40 const char kEventNamePhishing[] = "phishing_interstitial_"; |
(...skipping 22 matching lines...) Expand all Loading... |
63 bool is_extended_reporting_opt_in_allowed = | 63 bool is_extended_reporting_opt_in_allowed = |
64 prefs->GetBoolean(prefs::kSafeBrowsingExtendedReportingOptInAllowed); | 64 prefs->GetBoolean(prefs::kSafeBrowsingExtendedReportingOptInAllowed); |
65 bool is_proceed_anyway_disabled = | 65 bool is_proceed_anyway_disabled = |
66 prefs->GetBoolean(prefs::kSafeBrowsingProceedAnywayDisabled); | 66 prefs->GetBoolean(prefs::kSafeBrowsingProceedAnywayDisabled); |
67 | 67 |
68 // Determine if any prefs need to be updated prior to showing the security | 68 // Determine if any prefs need to be updated prior to showing the security |
69 // interstitial. This must happen before querying IsScout to populate the | 69 // interstitial. This must happen before querying IsScout to populate the |
70 // Display Options below. | 70 // Display Options below. |
71 safe_browsing::UpdatePrefsBeforeSecurityInterstitial(prefs); | 71 safe_browsing::UpdatePrefsBeforeSecurityInterstitial(prefs); |
72 | 72 |
73 SafeBrowsingErrorUI::SBErrorDisplayOptions display_options( | 73 BaseSafeBrowsingErrorUI::SBErrorDisplayOptions display_options( |
74 BaseBlockingPage::IsMainPageLoadBlocked(unsafe_resources), | 74 BaseBlockingPage::IsMainPageLoadBlocked(unsafe_resources), |
75 is_extended_reporting_opt_in_allowed, | 75 is_extended_reporting_opt_in_allowed, |
76 web_contents->GetBrowserContext()->IsOffTheRecord(), | 76 web_contents->GetBrowserContext()->IsOffTheRecord(), |
77 IsExtendedReportingEnabled(*prefs), IsScout(*prefs), | 77 IsExtendedReportingEnabled(*prefs), IsScout(*prefs), |
78 is_proceed_anyway_disabled, | 78 is_proceed_anyway_disabled, |
79 BaseBlockingPage::IsMainPageLoadBlocked(unsafe_resources)); | 79 BaseBlockingPage::IsMainPageLoadBlocked(unsafe_resources)); |
80 | 80 |
81 return new SafeBrowsingBlockingPage(ui_manager, web_contents, | 81 return new SafeBrowsingBlockingPage(ui_manager, web_contents, |
82 main_frame_url, unsafe_resources, | 82 main_frame_url, unsafe_resources, |
83 display_options); | 83 display_options); |
(...skipping 14 matching lines...) Expand all Loading... |
98 // static | 98 // static |
99 content::InterstitialPageDelegate::TypeID | 99 content::InterstitialPageDelegate::TypeID |
100 SafeBrowsingBlockingPage::kTypeForTesting = | 100 SafeBrowsingBlockingPage::kTypeForTesting = |
101 &SafeBrowsingBlockingPage::kTypeForTesting; | 101 &SafeBrowsingBlockingPage::kTypeForTesting; |
102 | 102 |
103 SafeBrowsingBlockingPage::SafeBrowsingBlockingPage( | 103 SafeBrowsingBlockingPage::SafeBrowsingBlockingPage( |
104 BaseUIManager* ui_manager, | 104 BaseUIManager* ui_manager, |
105 WebContents* web_contents, | 105 WebContents* web_contents, |
106 const GURL& main_frame_url, | 106 const GURL& main_frame_url, |
107 const UnsafeResourceList& unsafe_resources, | 107 const UnsafeResourceList& unsafe_resources, |
108 const SafeBrowsingErrorUI::SBErrorDisplayOptions& display_options) | 108 const BaseSafeBrowsingErrorUI::SBErrorDisplayOptions& display_options) |
109 : BaseBlockingPage( | 109 : BaseBlockingPage( |
110 ui_manager, | 110 ui_manager, |
111 web_contents, | 111 web_contents, |
112 main_frame_url, | 112 main_frame_url, |
113 unsafe_resources, | 113 unsafe_resources, |
114 CreateControllerClient(web_contents, unsafe_resources, ui_manager), | 114 CreateControllerClient(web_contents, unsafe_resources, ui_manager), |
115 display_options) { | 115 display_options) { |
116 // Start computing threat details. They will be sent only | 116 // Start computing threat details. They will be sent only |
117 // if the user opts-in on the blocking page later. | 117 // if the user opts-in on the blocking page later. |
118 // If there's more than one malicious resources, it means the user | 118 // If there's more than one malicious resources, it means the user |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
181 SafeBrowsingBlockingPage::GetTypeForTesting() const { | 181 SafeBrowsingBlockingPage::GetTypeForTesting() const { |
182 return SafeBrowsingBlockingPage::kTypeForTesting; | 182 return SafeBrowsingBlockingPage::kTypeForTesting; |
183 } | 183 } |
184 | 184 |
185 void SafeBrowsingBlockingPage::FinishThreatDetails(const base::TimeDelta& delay, | 185 void SafeBrowsingBlockingPage::FinishThreatDetails(const base::TimeDelta& delay, |
186 bool did_proceed, | 186 bool did_proceed, |
187 int num_visits) { | 187 int num_visits) { |
188 if (threat_details_.get() == NULL) | 188 if (threat_details_.get() == NULL) |
189 return; // Not all interstitials have threat details (eg., incognito mode). | 189 return; // Not all interstitials have threat details (eg., incognito mode). |
190 | 190 |
191 const bool enabled = | 191 const bool enabled = sb_error_ui()->is_extended_reporting_enabled() && |
192 sb_error_ui()->is_extended_reporting_enabled() && | 192 sb_error_ui()->is_extended_reporting_opt_in_allowed(); |
193 sb_error_ui()->is_extended_reporting_opt_in_allowed(); | |
194 if (!enabled) | 193 if (!enabled) |
195 return; | 194 return; |
196 | 195 |
197 controller()->metrics_helper()->RecordUserInteraction( | 196 controller()->metrics_helper()->RecordUserInteraction( |
198 security_interstitials::MetricsHelper::EXTENDED_REPORTING_IS_ENABLED); | 197 security_interstitials::MetricsHelper::EXTENDED_REPORTING_IS_ENABLED); |
199 // Finish the malware details collection, send it over. | 198 // Finish the malware details collection, send it over. |
200 BrowserThread::PostDelayedTask( | 199 BrowserThread::PostDelayedTask( |
201 BrowserThread::IO, FROM_HERE, | 200 BrowserThread::IO, FROM_HERE, |
202 base::BindOnce(&ThreatDetails::FinishCollection, threat_details_, | 201 base::BindOnce(&ThreatDetails::FinishCollection, threat_details_, |
203 did_proceed, num_visits), | 202 did_proceed, num_visits), |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
239 unsafe_resource.GetNavigationEntryForResource(); | 238 unsafe_resource.GetNavigationEntryForResource(); |
240 SafeBrowsingBlockingPage* blocking_page = | 239 SafeBrowsingBlockingPage* blocking_page = |
241 CreateBlockingPage(ui_manager, web_contents, | 240 CreateBlockingPage(ui_manager, web_contents, |
242 entry ? entry->GetURL() : GURL(), unsafe_resource); | 241 entry ? entry->GetURL() : GURL(), unsafe_resource); |
243 blocking_page->Show(); | 242 blocking_page->Show(); |
244 } | 243 } |
245 } | 244 } |
246 | 245 |
247 // static | 246 // static |
248 std::string SafeBrowsingBlockingPage::GetSamplingEventName( | 247 std::string SafeBrowsingBlockingPage::GetSamplingEventName( |
249 SafeBrowsingErrorUI::SBInterstitialReason interstitial_reason) { | 248 BaseSafeBrowsingErrorUI::SBInterstitialReason interstitial_reason) { |
250 switch (interstitial_reason) { | 249 switch (interstitial_reason) { |
251 case SafeBrowsingErrorUI::SB_REASON_MALWARE: | 250 case BaseSafeBrowsingErrorUI::SB_REASON_MALWARE: |
252 return kEventNameMalware; | 251 return kEventNameMalware; |
253 case SafeBrowsingErrorUI::SB_REASON_HARMFUL: | 252 case BaseSafeBrowsingErrorUI::SB_REASON_HARMFUL: |
254 return kEventNameHarmful; | 253 return kEventNameHarmful; |
255 case SafeBrowsingErrorUI::SB_REASON_PHISHING: | 254 case BaseSafeBrowsingErrorUI::SB_REASON_PHISHING: |
256 return kEventNamePhishing; | 255 return kEventNamePhishing; |
257 default: | 256 default: |
258 return kEventNameOther; | 257 return kEventNameOther; |
259 } | 258 } |
260 } | 259 } |
261 | 260 |
262 // static | 261 // static |
263 std::unique_ptr<SecurityInterstitialControllerClient> | 262 std::unique_ptr<SecurityInterstitialControllerClient> |
264 SafeBrowsingBlockingPage::CreateControllerClient( | 263 SafeBrowsingBlockingPage::CreateControllerClient( |
265 WebContents* web_contents, | 264 WebContents* web_contents, |
266 const UnsafeResourceList& unsafe_resources, | 265 const UnsafeResourceList& unsafe_resources, |
267 const BaseUIManager* ui_manager) { | 266 const BaseUIManager* ui_manager) { |
268 Profile* profile = Profile::FromBrowserContext( | 267 Profile* profile = Profile::FromBrowserContext( |
269 web_contents->GetBrowserContext()); | 268 web_contents->GetBrowserContext()); |
270 DCHECK(profile); | 269 DCHECK(profile); |
271 | 270 |
272 std::unique_ptr<ChromeMetricsHelper> metrics_helper = | 271 std::unique_ptr<ChromeMetricsHelper> metrics_helper = |
273 base::MakeUnique<ChromeMetricsHelper>( | 272 base::MakeUnique<ChromeMetricsHelper>( |
274 web_contents, unsafe_resources[0].url, | 273 web_contents, unsafe_resources[0].url, |
275 GetReportingInfo(unsafe_resources), | 274 GetReportingInfo(unsafe_resources), |
276 GetSamplingEventName(GetInterstitialReason(unsafe_resources))); | 275 GetSamplingEventName(GetInterstitialReason(unsafe_resources))); |
277 | 276 |
278 return base::MakeUnique<SecurityInterstitialControllerClient>( | 277 return base::MakeUnique<SecurityInterstitialControllerClient>( |
279 web_contents, std::move(metrics_helper), profile->GetPrefs(), | 278 web_contents, std::move(metrics_helper), profile->GetPrefs(), |
280 ui_manager->app_locale(), ui_manager->default_safe_page()); | 279 ui_manager->app_locale(), ui_manager->default_safe_page()); |
281 } | 280 } |
282 | 281 |
283 } // namespace safe_browsing | 282 } // namespace safe_browsing |
OLD | NEW |