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

Side by Side Diff: chrome/browser/safe_browsing/safe_browsing_blocking_page.cc

Issue 935663004: Add checkbox for reporting invalid TLS/SSL cert chains (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: revert accidental deletion (fixes failing CaptivePortal tests) Created 5 years, 9 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 unified diff | Download patch
OLDNEW
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 <string> 9 #include <string>
10 10
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 const char kSbDiagnosticUrl[] = 61 const char kSbDiagnosticUrl[] =
62 "http://safebrowsing.clients.google.com/safebrowsing/diagnostic?site=%s&clie nt=chromium"; 62 "http://safebrowsing.clients.google.com/safebrowsing/diagnostic?site=%s&clie nt=chromium";
63 #endif 63 #endif
64 64
65 // URL for malware and phishing, V2. 65 // URL for malware and phishing, V2.
66 const char kLearnMoreMalwareUrlV2[] = 66 const char kLearnMoreMalwareUrlV2[] =
67 "https://www.google.com/transparencyreport/safebrowsing/"; 67 "https://www.google.com/transparencyreport/safebrowsing/";
68 const char kLearnMorePhishingUrlV2[] = 68 const char kLearnMorePhishingUrlV2[] =
69 "https://www.google.com/transparencyreport/safebrowsing/"; 69 "https://www.google.com/transparencyreport/safebrowsing/";
70 70
71 const char kPrivacyLinkHtml[] =
72 "<a id=\"privacy-link\" href=\"\" onclick=\"sendCommand(%d); "
73 "return false;\" onmousedown=\"return false;\">%s</a>";
74
75 // After a malware interstitial where the user opted-in to the report 71 // After a malware interstitial where the user opted-in to the report
76 // but clicked "proceed anyway", we delay the call to 72 // but clicked "proceed anyway", we delay the call to
77 // MalwareDetails::FinishCollection() by this much time (in 73 // MalwareDetails::FinishCollection() by this much time (in
78 // milliseconds). 74 // milliseconds).
79 const int64 kMalwareDetailsProceedDelayMilliSeconds = 3000; 75 const int64 kMalwareDetailsProceedDelayMilliSeconds = 3000;
80 76
81 // Other constants used to communicate with the JavaScript.
82 const char kBoxChecked[] = "boxchecked";
83 const char kDisplayCheckBox[] = "displaycheckbox";
84
85 // Constants for the Experience Sampling instrumentation. 77 // Constants for the Experience Sampling instrumentation.
86 const char kEventNameMalware[] = "safebrowsing_interstitial_"; 78 const char kEventNameMalware[] = "safebrowsing_interstitial_";
87 const char kEventNameHarmful[] = "harmful_interstitial_"; 79 const char kEventNameHarmful[] = "harmful_interstitial_";
88 const char kEventNamePhishing[] = "phishing_interstitial_"; 80 const char kEventNamePhishing[] = "phishing_interstitial_";
89 const char kEventNameOther[] = "safebrowsing_other_interstitial_"; 81 const char kEventNameOther[] = "safebrowsing_other_interstitial_";
90 82
91 base::LazyInstance<SafeBrowsingBlockingPage::UnsafeResourceMap> 83 base::LazyInstance<SafeBrowsingBlockingPage::UnsafeResourceMap>
92 g_unsafe_resource_map = LAZY_INSTANCE_INITIALIZER; 84 g_unsafe_resource_map = LAZY_INSTANCE_INITIALIZER;
93 85
94 } // namespace 86 } // namespace
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
160 DCHECK(phishing || malware || harmful); 152 DCHECK(phishing || malware || harmful);
161 if (malware) 153 if (malware)
162 interstitial_reason_ = SB_REASON_MALWARE; 154 interstitial_reason_ = SB_REASON_MALWARE;
163 else if (harmful) 155 else if (harmful)
164 interstitial_reason_ = SB_REASON_HARMFUL; 156 interstitial_reason_ = SB_REASON_HARMFUL;
165 else 157 else
166 interstitial_reason_ = SB_REASON_PHISHING; 158 interstitial_reason_ = SB_REASON_PHISHING;
167 159
168 // This must be done after calculating |interstitial_reason_| above. 160 // This must be done after calculating |interstitial_reason_| above.
169 // Use same prefix for UMA as for Rappor. 161 // Use same prefix for UMA as for Rappor.
170 metrics_helper_.reset(new SecurityInterstitialMetricsHelper( 162 set_metrics_helper(new SecurityInterstitialMetricsHelper(
171 web_contents, request_url(), GetMetricPrefix(), GetMetricPrefix(), 163 web_contents, request_url(), GetMetricPrefix(), GetMetricPrefix(),
172 SecurityInterstitialMetricsHelper::REPORT_RAPPOR, 164 SecurityInterstitialMetricsHelper::REPORT_RAPPOR,
173 GetSamplingEventName())); 165 GetSamplingEventName()));
174 metrics_helper_->RecordUserDecision(SecurityInterstitialMetricsHelper::SHOW); 166 metrics_helper()->RecordUserDecision(SecurityInterstitialMetricsHelper::SHOW);
175 metrics_helper_->RecordUserInteraction( 167 metrics_helper()->RecordUserInteraction(
176 SecurityInterstitialMetricsHelper::TOTAL_VISITS); 168 SecurityInterstitialMetricsHelper::TOTAL_VISITS);
177 if (IsPrefEnabled(prefs::kSafeBrowsingProceedAnywayDisabled)) { 169 if (IsPrefEnabled(prefs::kSafeBrowsingProceedAnywayDisabled)) {
178 metrics_helper_->RecordUserDecision( 170 metrics_helper()->RecordUserDecision(
179 SecurityInterstitialMetricsHelper::PROCEEDING_DISABLED); 171 SecurityInterstitialMetricsHelper::PROCEEDING_DISABLED);
180 } 172 }
181 173
182 if (!is_main_frame_load_blocked_) { 174 if (!is_main_frame_load_blocked_) {
183 navigation_entry_index_to_remove_ = 175 navigation_entry_index_to_remove_ =
184 web_contents->GetController().GetLastCommittedEntryIndex(); 176 web_contents->GetController().GetLastCommittedEntryIndex();
185 } else { 177 } else {
186 navigation_entry_index_to_remove_ = -1; 178 navigation_entry_index_to_remove_ = -1;
187 } 179 }
188 180
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
224 SetReportingPreference(true); 216 SetReportingPreference(true);
225 break; 217 break;
226 } 218 }
227 case CMD_DONT_REPORT: { 219 case CMD_DONT_REPORT: {
228 // User disabled SB Extended Reporting via the checkbox. 220 // User disabled SB Extended Reporting via the checkbox.
229 SetReportingPreference(false); 221 SetReportingPreference(false);
230 break; 222 break;
231 } 223 }
232 case CMD_OPEN_HELP_CENTER: { 224 case CMD_OPEN_HELP_CENTER: {
233 // User pressed "Learn more". 225 // User pressed "Learn more".
234 metrics_helper_->RecordUserInteraction( 226 metrics_helper()->RecordUserInteraction(
235 SecurityInterstitialMetricsHelper::SHOW_LEARN_MORE); 227 SecurityInterstitialMetricsHelper::SHOW_LEARN_MORE);
236 GURL learn_more_url( 228 GURL learn_more_url(
237 interstitial_reason_ == SB_REASON_PHISHING ? 229 interstitial_reason_ == SB_REASON_PHISHING ?
238 kLearnMorePhishingUrlV2 : kLearnMoreMalwareUrlV2); 230 kLearnMorePhishingUrlV2 : kLearnMoreMalwareUrlV2);
239 learn_more_url = google_util::AppendGoogleLocaleParam( 231 learn_more_url = google_util::AppendGoogleLocaleParam(
240 learn_more_url, g_browser_process->GetApplicationLocale()); 232 learn_more_url, g_browser_process->GetApplicationLocale());
241 OpenURLParams params(learn_more_url, 233 OpenURLParams params(learn_more_url,
242 Referrer(), 234 Referrer(),
243 CURRENT_TAB, 235 CURRENT_TAB,
244 ui::PAGE_TRANSITION_LINK, 236 ui::PAGE_TRANSITION_LINK,
245 false); 237 false);
246 web_contents()->OpenURL(params); 238 web_contents()->OpenURL(params);
247 break; 239 break;
248 } 240 }
249 case CMD_OPEN_REPORTING_PRIVACY: { 241 case CMD_OPEN_REPORTING_PRIVACY: {
250 // User pressed on the SB Extended Reporting "privacy policy" link. 242 // User pressed on the SB Extended Reporting "privacy policy" link.
251 metrics_helper_->RecordUserInteraction( 243 OpenExtendedReportingPrivacyPolicy();
252 SecurityInterstitialMetricsHelper::SHOW_PRIVACY_POLICY);
253 GURL privacy_url(
254 l10n_util::GetStringUTF8(IDS_SAFE_BROWSING_PRIVACY_POLICY_URL));
255 privacy_url = google_util::AppendGoogleLocaleParam(
256 privacy_url, g_browser_process->GetApplicationLocale());
257 OpenURLParams params(privacy_url,
258 Referrer(),
259 CURRENT_TAB,
260 ui::PAGE_TRANSITION_LINK,
261 false);
262 web_contents()->OpenURL(params);
263 break; 244 break;
264 } 245 }
265 case CMD_PROCEED: { 246 case CMD_PROCEED: {
266 // User pressed on the button to proceed. 247 // User pressed on the button to proceed.
267 if (!IsPrefEnabled(prefs::kSafeBrowsingProceedAnywayDisabled)) { 248 if (!IsPrefEnabled(prefs::kSafeBrowsingProceedAnywayDisabled)) {
268 metrics_helper_->RecordUserDecision( 249 metrics_helper()->RecordUserDecision(
269 SecurityInterstitialMetricsHelper::PROCEED); 250 SecurityInterstitialMetricsHelper::PROCEED);
270 interstitial_page()->Proceed(); 251 interstitial_page()->Proceed();
271 // |this| has been deleted after Proceed() returns. 252 // |this| has been deleted after Proceed() returns.
272 break; 253 break;
273 } 254 }
274 // If the user can't proceed, fall through to CMD_DONT_PROCEED. 255 // If the user can't proceed, fall through to CMD_DONT_PROCEED.
275 } 256 }
276 case CMD_DONT_PROCEED: { 257 case CMD_DONT_PROCEED: {
277 // User pressed on the button to return to safety. 258 // User pressed on the button to return to safety.
278 // Don't record the user action here because there are other ways of 259 // Don't record the user action here because there are other ways of
(...skipping 18 matching lines...) Expand all
297 std::string()); 278 std::string());
298 } 279 }
299 break; 280 break;
300 } 281 }
301 case CMD_OPEN_DIAGNOSTIC: { 282 case CMD_OPEN_DIAGNOSTIC: {
302 // User wants to see why this page is blocked. 283 // User wants to see why this page is blocked.
303 // TODO(felt): element_index will always be 0. See crbug.com/464732 284 // TODO(felt): element_index will always be 0. See crbug.com/464732
304 size_t element_index = 0; 285 size_t element_index = 0;
305 const UnsafeResource& unsafe_resource = unsafe_resources_[element_index]; 286 const UnsafeResource& unsafe_resource = unsafe_resources_[element_index];
306 std::string bad_url_spec = unsafe_resource.url.spec(); 287 std::string bad_url_spec = unsafe_resource.url.spec();
307 metrics_helper_->RecordUserInteraction( 288 metrics_helper()->RecordUserInteraction(
308 SecurityInterstitialMetricsHelper::SHOW_DIAGNOSTIC); 289 SecurityInterstitialMetricsHelper::SHOW_DIAGNOSTIC);
309 std::string diagnostic = 290 std::string diagnostic =
310 base::StringPrintf(kSbDiagnosticUrl, 291 base::StringPrintf(kSbDiagnosticUrl,
311 net::EscapeQueryParamValue(bad_url_spec, true).c_str()); 292 net::EscapeQueryParamValue(bad_url_spec, true).c_str());
312 GURL diagnostic_url(diagnostic); 293 GURL diagnostic_url(diagnostic);
313 diagnostic_url = google_util::AppendGoogleLocaleParam( 294 diagnostic_url = google_util::AppendGoogleLocaleParam(
314 diagnostic_url, g_browser_process->GetApplicationLocale()); 295 diagnostic_url, g_browser_process->GetApplicationLocale());
315 DCHECK(unsafe_resource.threat_type == SB_THREAT_TYPE_URL_MALWARE || 296 DCHECK(unsafe_resource.threat_type == SB_THREAT_TYPE_URL_MALWARE ||
316 unsafe_resource.threat_type == 297 unsafe_resource.threat_type ==
317 SB_THREAT_TYPE_CLIENT_SIDE_MALWARE_URL || 298 SB_THREAT_TYPE_CLIENT_SIDE_MALWARE_URL ||
318 unsafe_resource.threat_type == SB_THREAT_TYPE_URL_UNWANTED); 299 unsafe_resource.threat_type == SB_THREAT_TYPE_URL_UNWANTED);
319 OpenURLParams params( 300 OpenURLParams params(
320 diagnostic_url, Referrer(), CURRENT_TAB, ui::PAGE_TRANSITION_LINK, 301 diagnostic_url, Referrer(), CURRENT_TAB, ui::PAGE_TRANSITION_LINK,
321 false); 302 false);
322 web_contents()->OpenURL(params); 303 web_contents()->OpenURL(params);
323 break; 304 break;
324 } 305 }
325 case CMD_SHOW_MORE_SECTION: { 306 case CMD_SHOW_MORE_SECTION: {
326 // User has opened up the hidden text. 307 // User has opened up the hidden text.
327 metrics_helper_->RecordUserInteraction( 308 metrics_helper()->RecordUserInteraction(
328 SecurityInterstitialMetricsHelper::SHOW_ADVANCED); 309 SecurityInterstitialMetricsHelper::SHOW_ADVANCED);
329 break; 310 break;
330 } 311 }
331 } 312 }
332 } 313 }
333 314
334 void SafeBrowsingBlockingPage::OverrideRendererPrefs( 315 void SafeBrowsingBlockingPage::OverrideRendererPrefs(
335 content::RendererPreferences* prefs) { 316 content::RendererPreferences* prefs) {
336 Profile* profile = Profile::FromBrowserContext( 317 Profile* profile = Profile::FromBrowserContext(
337 web_contents()->GetBrowserContext()); 318 web_contents()->GetBrowserContext());
338 renderer_preferences_util::UpdateFromSystemSettings( 319 renderer_preferences_util::UpdateFromSystemSettings(
339 prefs, profile, web_contents()); 320 prefs, profile, web_contents());
340 } 321 }
341 322
342 void SafeBrowsingBlockingPage::SetReportingPreference(bool report) {
343 Profile* profile = Profile::FromBrowserContext(
344 web_contents()->GetBrowserContext());
345 PrefService* pref = profile->GetPrefs();
346 pref->SetBoolean(prefs::kSafeBrowsingExtendedReportingEnabled, report);
347 UMA_HISTOGRAM_BOOLEAN("SB2.SetExtendedReportingEnabled", report);
348 }
349
350 void SafeBrowsingBlockingPage::OnProceed() { 323 void SafeBrowsingBlockingPage::OnProceed() {
351 proceeded_ = true; 324 proceeded_ = true;
352 // Send the malware details, if we opted to. 325 // Send the malware details, if we opted to.
353 FinishMalwareDetails(malware_details_proceed_delay_ms_); 326 FinishMalwareDetails(malware_details_proceed_delay_ms_);
354 327
355 NotifySafeBrowsingUIManager(ui_manager_, unsafe_resources_, true); 328 NotifySafeBrowsingUIManager(ui_manager_, unsafe_resources_, true);
356 329
357 // Check to see if some new notifications of unsafe resources have been 330 // Check to see if some new notifications of unsafe resources have been
358 // received while we were showing the interstitial. 331 // received while we were showing the interstitial.
359 UnsafeResourceMap* unsafe_resource_map = GetUnsafeResourcesMap(); 332 UnsafeResourceMap* unsafe_resource_map = GetUnsafeResourcesMap();
(...skipping 23 matching lines...) Expand all
383 return is_main_frame_load_blocked_; 356 return is_main_frame_load_blocked_;
384 } 357 }
385 358
386 void SafeBrowsingBlockingPage::OnDontProceed() { 359 void SafeBrowsingBlockingPage::OnDontProceed() {
387 // We could have already called Proceed(), in which case we must not notify 360 // We could have already called Proceed(), in which case we must not notify
388 // the SafeBrowsingUIManager again, as the client has been deleted. 361 // the SafeBrowsingUIManager again, as the client has been deleted.
389 if (proceeded_) 362 if (proceeded_)
390 return; 363 return;
391 364
392 if (!IsPrefEnabled(prefs::kSafeBrowsingProceedAnywayDisabled)) { 365 if (!IsPrefEnabled(prefs::kSafeBrowsingProceedAnywayDisabled)) {
393 metrics_helper_->RecordUserDecision( 366 metrics_helper()->RecordUserDecision(
394 SecurityInterstitialMetricsHelper::DONT_PROCEED); 367 SecurityInterstitialMetricsHelper::DONT_PROCEED);
395 } 368 }
396 369
397 // Send the malware details, if we opted to. 370 // Send the malware details, if we opted to.
398 FinishMalwareDetails(0); // No delay 371 FinishMalwareDetails(0); // No delay
399 372
400 NotifySafeBrowsingUIManager(ui_manager_, unsafe_resources_, false); 373 NotifySafeBrowsingUIManager(ui_manager_, unsafe_resources_, false);
401 374
402 // The user does not want to proceed, clear the queued unsafe resources 375 // The user does not want to proceed, clear the queued unsafe resources
403 // notifications we received while the interstitial was showing. 376 // notifications we received while the interstitial was showing.
(...skipping 20 matching lines...) Expand all
424 } 397 }
425 } 398 }
426 399
427 void SafeBrowsingBlockingPage::FinishMalwareDetails(int64 delay_ms) { 400 void SafeBrowsingBlockingPage::FinishMalwareDetails(int64 delay_ms) {
428 if (malware_details_.get() == NULL) 401 if (malware_details_.get() == NULL)
429 return; // Not all interstitials have malware details (eg phishing). 402 return; // Not all interstitials have malware details (eg phishing).
430 DCHECK_EQ(interstitial_reason_, SB_REASON_MALWARE); 403 DCHECK_EQ(interstitial_reason_, SB_REASON_MALWARE);
431 404
432 const bool enabled = 405 const bool enabled =
433 IsPrefEnabled(prefs::kSafeBrowsingExtendedReportingEnabled); 406 IsPrefEnabled(prefs::kSafeBrowsingExtendedReportingEnabled);
434 UMA_HISTOGRAM_BOOLEAN("SB2.ExtendedReportingIsEnabled", enabled); 407 if (!enabled)
435 if (enabled) { 408 return;
436 // Finish the malware details collection, send it over.
437 BrowserThread::PostDelayedTask(
438 BrowserThread::IO, FROM_HERE,
439 base::Bind(&MalwareDetails::FinishCollection, malware_details_.get()),
440 base::TimeDelta::FromMilliseconds(delay_ms));
441 }
442 }
443 409
444 bool SafeBrowsingBlockingPage::IsPrefEnabled(const char* pref) { 410 metrics_helper()->RecordUserInteraction(
445 Profile* profile = 411 SecurityInterstitialMetricsHelper::EXTENDED_REPORTING_IS_ENABLED);
446 Profile::FromBrowserContext(web_contents()->GetBrowserContext()); 412 // Finish the malware details collection, send it over.
447 return profile->GetPrefs()->GetBoolean(pref); 413 BrowserThread::PostDelayedTask(
414 BrowserThread::IO, FROM_HERE,
415 base::Bind(&MalwareDetails::FinishCollection, malware_details_.get()),
416 base::TimeDelta::FromMilliseconds(delay_ms));
448 } 417 }
449 418
450 // static 419 // static
451 void SafeBrowsingBlockingPage::NotifySafeBrowsingUIManager( 420 void SafeBrowsingBlockingPage::NotifySafeBrowsingUIManager(
452 SafeBrowsingUIManager* ui_manager, 421 SafeBrowsingUIManager* ui_manager,
453 const UnsafeResourceList& unsafe_resources, 422 const UnsafeResourceList& unsafe_resources,
454 bool proceed) { 423 bool proceed) {
455 BrowserThread::PostTask( 424 BrowserThread::PostTask(
456 BrowserThread::IO, FROM_HERE, 425 BrowserThread::IO, FROM_HERE,
457 base::Bind(&SafeBrowsingUIManager::OnBlockingPageDone, 426 base::Bind(&SafeBrowsingUIManager::OnBlockingPageDone,
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
581 case SB_REASON_PHISHING: 550 case SB_REASON_PHISHING:
582 PopulatePhishingLoadTimeData(load_time_data); 551 PopulatePhishingLoadTimeData(load_time_data);
583 break; 552 break;
584 } 553 }
585 } 554 }
586 555
587 void SafeBrowsingBlockingPage::PopulateExtendedReportingOption( 556 void SafeBrowsingBlockingPage::PopulateExtendedReportingOption(
588 base::DictionaryValue* load_time_data) { 557 base::DictionaryValue* load_time_data) {
589 // Only show checkbox if !(HTTPS || incognito-mode). 558 // Only show checkbox if !(HTTPS || incognito-mode).
590 const bool show = CanShowMalwareDetailsOption(); 559 const bool show = CanShowMalwareDetailsOption();
591 load_time_data->SetBoolean(kDisplayCheckBox, show); 560 load_time_data->SetBoolean(interstitials::kDisplayCheckBox, show);
592 if (!show) 561 if (!show)
593 return; 562 return;
594 563
595 const std::string privacy_link = base::StringPrintf( 564 const std::string privacy_link = base::StringPrintf(
596 kPrivacyLinkHtml, 565 interstitials::kPrivacyLinkHtml, CMD_OPEN_REPORTING_PRIVACY,
597 CMD_OPEN_REPORTING_PRIVACY, 566 l10n_util::GetStringUTF8(IDS_SAFE_BROWSING_PRIVACY_POLICY_PAGE).c_str());
598 l10n_util::GetStringUTF8(
599 IDS_SAFE_BROWSING_PRIVACY_POLICY_PAGE).c_str());
600 load_time_data->SetString( 567 load_time_data->SetString(
601 "optInLink", 568 interstitials::kOptInLink,
602 l10n_util::GetStringFUTF16(IDS_SAFE_BROWSING_MALWARE_REPORTING_AGREE, 569 l10n_util::GetStringFUTF16(IDS_SAFE_BROWSING_MALWARE_REPORTING_AGREE,
603 base::UTF8ToUTF16(privacy_link))); 570 base::UTF8ToUTF16(privacy_link)));
604 load_time_data->SetBoolean( 571 load_time_data->SetBoolean(
605 kBoxChecked, 572 interstitials::kBoxChecked,
606 IsPrefEnabled(prefs::kSafeBrowsingExtendedReportingEnabled)); 573 IsPrefEnabled(prefs::kSafeBrowsingExtendedReportingEnabled));
607 } 574 }
608 575
609 void SafeBrowsingBlockingPage::PopulateMalwareLoadTimeData( 576 void SafeBrowsingBlockingPage::PopulateMalwareLoadTimeData(
610 base::DictionaryValue* load_time_data) { 577 base::DictionaryValue* load_time_data) {
611 load_time_data->SetBoolean("phishing", false); 578 load_time_data->SetBoolean("phishing", false);
612 load_time_data->SetString( 579 load_time_data->SetString(
613 "heading", l10n_util::GetStringUTF16(IDS_MALWARE_V3_HEADING)); 580 "heading", l10n_util::GetStringUTF16(IDS_MALWARE_V3_HEADING));
614 load_time_data->SetString( 581 load_time_data->SetString(
615 "primaryParagraph", 582 "primaryParagraph",
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
669 load_time_data->SetString( 636 load_time_data->SetString(
670 "explanationParagraph", 637 "explanationParagraph",
671 l10n_util::GetStringFUTF16(IDS_PHISHING_V3_EXPLANATION_PARAGRAPH, 638 l10n_util::GetStringFUTF16(IDS_PHISHING_V3_EXPLANATION_PARAGRAPH,
672 GetFormattedHostName())); 639 GetFormattedHostName()));
673 load_time_data->SetString( 640 load_time_data->SetString(
674 "finalParagraph", 641 "finalParagraph",
675 l10n_util::GetStringUTF16(IDS_PHISHING_V3_PROCEED_PARAGRAPH)); 642 l10n_util::GetStringUTF16(IDS_PHISHING_V3_PROCEED_PARAGRAPH));
676 643
677 PopulateExtendedReportingOption(load_time_data); 644 PopulateExtendedReportingOption(load_time_data);
678 } 645 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698