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 <string> | 9 #include <string> |
10 | 10 |
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
224 const string16& title, | 224 const string16& title, |
225 const string16& headline, | 225 const string16& headline, |
226 const string16& description1, | 226 const string16& description1, |
227 const string16& description2, | 227 const string16& description2, |
228 const string16& description3) { | 228 const string16& description3) { |
229 strings->SetString("title", title); | 229 strings->SetString("title", title); |
230 strings->SetString("headLine", headline); | 230 strings->SetString("headLine", headline); |
231 strings->SetString("description1", description1); | 231 strings->SetString("description1", description1); |
232 strings->SetString("description2", description2); | 232 strings->SetString("description2", description2); |
233 strings->SetString("description3", description3); | 233 strings->SetString("description3", description3); |
| 234 strings->SetBoolean("proceedDisabled", |
| 235 IsPrefEnabled(prefs::kSafeBrowsingProceedAnywayDisabled)); |
234 } | 236 } |
235 | 237 |
236 void SafeBrowsingBlockingPage::PopulateMultipleThreatStringDictionary( | 238 void SafeBrowsingBlockingPage::PopulateMultipleThreatStringDictionary( |
237 DictionaryValue* strings) { | 239 DictionaryValue* strings) { |
238 bool malware = false; | 240 bool malware = false; |
239 bool phishing = false; | 241 bool phishing = false; |
240 | 242 |
241 string16 malware_label = | 243 string16 malware_label = |
242 l10n_util::GetStringUTF16(IDS_SAFE_BROWSING_MALWARE_LABEL); | 244 l10n_util::GetStringUTF16(IDS_SAFE_BROWSING_MALWARE_LABEL); |
243 string16 malware_link = | 245 string16 malware_link = |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
373 | 375 |
374 std::string privacy_link = base::StringPrintf( | 376 std::string privacy_link = base::StringPrintf( |
375 kPrivacyLinkHtml, | 377 kPrivacyLinkHtml, |
376 l10n_util::GetStringUTF8( | 378 l10n_util::GetStringUTF8( |
377 IDS_SAFE_BROWSING_PRIVACY_POLICY_PAGE).c_str()); | 379 IDS_SAFE_BROWSING_PRIVACY_POLICY_PAGE).c_str()); |
378 | 380 |
379 strings->SetString("confirm_text", | 381 strings->SetString("confirm_text", |
380 l10n_util::GetStringFUTF16( | 382 l10n_util::GetStringFUTF16( |
381 IDS_SAFE_BROWSING_MALWARE_REPORTING_AGREE, | 383 IDS_SAFE_BROWSING_MALWARE_REPORTING_AGREE, |
382 UTF8ToUTF16(privacy_link))); | 384 UTF8ToUTF16(privacy_link))); |
383 | 385 if (IsPrefEnabled(prefs::kSafeBrowsingReportingEnabled)) |
384 Profile* profile = Profile::FromBrowserContext( | |
385 web_contents_->GetBrowserContext()); | |
386 const PrefService::Preference* pref = | |
387 profile->GetPrefs()->FindPreference( | |
388 prefs::kSafeBrowsingReportingEnabled); | |
389 | |
390 bool value; | |
391 if (pref && pref->GetValue()->GetAsBoolean(&value) && value) { | |
392 strings->SetString(kBoxChecked, "yes"); | 386 strings->SetString(kBoxChecked, "yes"); |
393 } else { | 387 else |
394 strings->SetString(kBoxChecked, ""); | 388 strings->SetString(kBoxChecked, ""); |
395 } | |
396 } | 389 } |
397 } | 390 } |
398 | 391 |
399 void SafeBrowsingBlockingPage::PopulatePhishingStringDictionary( | 392 void SafeBrowsingBlockingPage::PopulatePhishingStringDictionary( |
400 DictionaryValue* strings) { | 393 DictionaryValue* strings) { |
401 std::string proceed_link = base::StringPrintf( | 394 std::string proceed_link = base::StringPrintf( |
402 kPLinkHtml, | 395 kPLinkHtml, |
403 l10n_util::GetStringUTF8( | 396 l10n_util::GetStringUTF8( |
404 IDS_SAFE_BROWSING_PHISHING_PROCEED_LINK).c_str()); | 397 IDS_SAFE_BROWSING_PHISHING_PROCEED_LINK).c_str()); |
405 string16 description3 = l10n_util::GetStringFUTF16( | 398 string16 description3 = l10n_util::GetStringFUTF16( |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
461 | 454 |
462 if (command == kShowPrivacyCommand) { | 455 if (command == kShowPrivacyCommand) { |
463 // User pressed "Safe Browsing privacy policy". | 456 // User pressed "Safe Browsing privacy policy". |
464 GURL url(kSbPrivacyPolicyUrl); | 457 GURL url(kSbPrivacyPolicyUrl); |
465 OpenURLParams params( | 458 OpenURLParams params( |
466 url, Referrer(), CURRENT_TAB, content::PAGE_TRANSITION_LINK, false); | 459 url, Referrer(), CURRENT_TAB, content::PAGE_TRANSITION_LINK, false); |
467 web_contents_->OpenURL(params); | 460 web_contents_->OpenURL(params); |
468 return; | 461 return; |
469 } | 462 } |
470 | 463 |
| 464 bool proceed_blocked = false; |
471 if (command == kProceedCommand) { | 465 if (command == kProceedCommand) { |
472 interstitial_page_->Proceed(); | 466 if (IsPrefEnabled(prefs::kSafeBrowsingProceedAnywayDisabled)) { |
473 // We are deleted after this. | 467 proceed_blocked = true; |
474 return; | 468 } else { |
| 469 interstitial_page_->Proceed(); |
| 470 // |this| has been deleted after Proceed() returns. |
| 471 return; |
| 472 } |
475 } | 473 } |
476 | 474 |
477 if (command == kTakeMeBackCommand) { | 475 if (command == kTakeMeBackCommand || proceed_blocked) { |
478 if (is_main_frame_load_blocked_) { | 476 if (is_main_frame_load_blocked_) { |
479 // If the load is blocked, we want to close the interstitial and discard | 477 // If the load is blocked, we want to close the interstitial and discard |
480 // the pending entry. | 478 // the pending entry. |
481 interstitial_page_->DontProceed(); | 479 interstitial_page_->DontProceed(); |
482 // We are deleted after this. | 480 // |this| has been deleted after DontProceed() returns. |
483 return; | 481 return; |
484 } | 482 } |
485 | 483 |
486 // Otherwise the offending entry has committed, and we need to go back or | 484 // Otherwise the offending entry has committed, and we need to go back or |
487 // to a safe page. We will close the interstitial when that page commits. | 485 // to a safe page. We will close the interstitial when that page commits. |
488 if (web_contents_->GetController().CanGoBack()) { | 486 if (web_contents_->GetController().CanGoBack()) { |
489 web_contents_->GetController().GoBack(); | 487 web_contents_->GetController().GoBack(); |
490 } else { | 488 } else { |
491 web_contents_->GetController().LoadURL( | 489 web_contents_->GetController().LoadURL( |
492 GURL(chrome::kChromeUINewTabURL), | 490 GURL(chrome::kChromeUINewTabURL), |
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
673 NOTREACHED() << "Unexpected event: " << event; | 671 NOTREACHED() << "Unexpected event: " << event; |
674 } | 672 } |
675 | 673 |
676 content::RecordComputedAction(action); | 674 content::RecordComputedAction(action); |
677 } | 675 } |
678 | 676 |
679 void SafeBrowsingBlockingPage::FinishMalwareDetails(int64 delay_ms) { | 677 void SafeBrowsingBlockingPage::FinishMalwareDetails(int64 delay_ms) { |
680 if (malware_details_ == NULL) | 678 if (malware_details_ == NULL) |
681 return; // Not all interstitials have malware details (eg phishing). | 679 return; // Not all interstitials have malware details (eg phishing). |
682 | 680 |
683 Profile* profile = Profile::FromBrowserContext( | 681 if (IsPrefEnabled(prefs::kSafeBrowsingReportingEnabled)) { |
684 web_contents_->GetBrowserContext()); | |
685 const PrefService::Preference* pref = | |
686 profile->GetPrefs()->FindPreference(prefs::kSafeBrowsingReportingEnabled); | |
687 | |
688 bool value; | |
689 if (pref && pref->GetValue()->GetAsBoolean(&value) && value) { | |
690 // Finish the malware details collection, send it over. | 682 // Finish the malware details collection, send it over. |
691 BrowserThread::PostDelayedTask( | 683 BrowserThread::PostDelayedTask( |
692 BrowserThread::IO, FROM_HERE, | 684 BrowserThread::IO, FROM_HERE, |
693 base::Bind(&MalwareDetails::FinishCollection, malware_details_.get()), | 685 base::Bind(&MalwareDetails::FinishCollection, malware_details_.get()), |
694 base::TimeDelta::FromMilliseconds(delay_ms)); | 686 base::TimeDelta::FromMilliseconds(delay_ms)); |
695 } | 687 } |
696 } | 688 } |
697 | 689 |
| 690 bool SafeBrowsingBlockingPage::IsPrefEnabled(const char* pref) { |
| 691 Profile* profile = |
| 692 Profile::FromBrowserContext(web_contents_->GetBrowserContext()); |
| 693 return profile->GetPrefs()->GetBoolean(pref); |
| 694 } |
| 695 |
698 // static | 696 // static |
699 void SafeBrowsingBlockingPage::NotifySafeBrowsingService( | 697 void SafeBrowsingBlockingPage::NotifySafeBrowsingService( |
700 SafeBrowsingService* sb_service, | 698 SafeBrowsingService* sb_service, |
701 const UnsafeResourceList& unsafe_resources, | 699 const UnsafeResourceList& unsafe_resources, |
702 bool proceed) { | 700 bool proceed) { |
703 BrowserThread::PostTask( | 701 BrowserThread::PostTask( |
704 BrowserThread::IO, FROM_HERE, | 702 BrowserThread::IO, FROM_HERE, |
705 base::Bind(&SafeBrowsingService::OnBlockingPageDone, | 703 base::Bind(&SafeBrowsingService::OnBlockingPageDone, |
706 sb_service, unsafe_resources, proceed)); | 704 sb_service, unsafe_resources, proceed)); |
707 } | 705 } |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
755 // Client-side phishing detection interstitials never block the main frame | 753 // Client-side phishing detection interstitials never block the main frame |
756 // load, since they happen after the page is finished loading. | 754 // load, since they happen after the page is finished loading. |
757 if (unsafe_resources[0].threat_type == | 755 if (unsafe_resources[0].threat_type == |
758 SafeBrowsingService::CLIENT_SIDE_PHISHING_URL) { | 756 SafeBrowsingService::CLIENT_SIDE_PHISHING_URL) { |
759 return false; | 757 return false; |
760 } | 758 } |
761 | 759 |
762 // Otherwise, check the threat type. | 760 // Otherwise, check the threat type. |
763 return unsafe_resources.size() == 1 && !unsafe_resources[0].is_subresource; | 761 return unsafe_resources.size() == 1 && !unsafe_resources[0].is_subresource; |
764 } | 762 } |
OLD | NEW |