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

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

Issue 10694037: Add a policy to disable proceeding through the Safe Browsing interstitials. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Removed self-closing <img> tags Created 8 years, 5 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 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 const string16& title, 233 const string16& title,
234 const string16& headline, 234 const string16& headline,
235 const string16& description1, 235 const string16& description1,
236 const string16& description2, 236 const string16& description2,
237 const string16& description3) { 237 const string16& description3) {
238 strings->SetString("title", title); 238 strings->SetString("title", title);
239 strings->SetString("headLine", headline); 239 strings->SetString("headLine", headline);
240 strings->SetString("description1", description1); 240 strings->SetString("description1", description1);
241 strings->SetString("description2", description2); 241 strings->SetString("description2", description2);
242 strings->SetString("description3", description3); 242 strings->SetString("description3", description3);
243 strings->SetBoolean("proceedDisabled",
244 IsPrefEnabled(prefs::kSafeBrowsingProceedAnywayDisabled));
243 } 245 }
244 246
245 void SafeBrowsingBlockingPage::PopulateMultipleThreatStringDictionary( 247 void SafeBrowsingBlockingPage::PopulateMultipleThreatStringDictionary(
246 DictionaryValue* strings) { 248 DictionaryValue* strings) {
247 bool malware = false; 249 bool malware = false;
248 bool phishing = false; 250 bool phishing = false;
249 251
250 string16 malware_label = 252 string16 malware_label =
251 l10n_util::GetStringUTF16(IDS_SAFE_BROWSING_MALWARE_LABEL); 253 l10n_util::GetStringUTF16(IDS_SAFE_BROWSING_MALWARE_LABEL);
252 string16 malware_link = 254 string16 malware_link =
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
382 384
383 std::string privacy_link = base::StringPrintf( 385 std::string privacy_link = base::StringPrintf(
384 kPrivacyLinkHtml, 386 kPrivacyLinkHtml,
385 l10n_util::GetStringUTF8( 387 l10n_util::GetStringUTF8(
386 IDS_SAFE_BROWSING_PRIVACY_POLICY_PAGE).c_str()); 388 IDS_SAFE_BROWSING_PRIVACY_POLICY_PAGE).c_str());
387 389
388 strings->SetString("confirm_text", 390 strings->SetString("confirm_text",
389 l10n_util::GetStringFUTF16( 391 l10n_util::GetStringFUTF16(
390 IDS_SAFE_BROWSING_MALWARE_REPORTING_AGREE, 392 IDS_SAFE_BROWSING_MALWARE_REPORTING_AGREE,
391 UTF8ToUTF16(privacy_link))); 393 UTF8ToUTF16(privacy_link)));
392 394 if (IsPrefEnabled(prefs::kSafeBrowsingReportingEnabled))
393 Profile* profile = Profile::FromBrowserContext(
394 web_contents_->GetBrowserContext());
395 const PrefService::Preference* pref =
396 profile->GetPrefs()->FindPreference(
397 prefs::kSafeBrowsingReportingEnabled);
398
399 bool value;
400 if (pref && pref->GetValue()->GetAsBoolean(&value) && value) {
401 strings->SetString(kBoxChecked, "yes"); 395 strings->SetString(kBoxChecked, "yes");
402 } else { 396 else
403 strings->SetString(kBoxChecked, ""); 397 strings->SetString(kBoxChecked, "");
404 }
405 } 398 }
406 } 399 }
407 400
408 void SafeBrowsingBlockingPage::PopulatePhishingStringDictionary( 401 void SafeBrowsingBlockingPage::PopulatePhishingStringDictionary(
409 DictionaryValue* strings) { 402 DictionaryValue* strings) {
410 std::string proceed_link = base::StringPrintf( 403 std::string proceed_link = base::StringPrintf(
411 kPLinkHtml, 404 kPLinkHtml,
412 l10n_util::GetStringUTF8( 405 l10n_util::GetStringUTF8(
413 IDS_SAFE_BROWSING_PHISHING_PROCEED_LINK).c_str()); 406 IDS_SAFE_BROWSING_PHISHING_PROCEED_LINK).c_str());
414 string16 description3 = l10n_util::GetStringFUTF16( 407 string16 description3 = l10n_util::GetStringFUTF16(
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
470 463
471 if (command == kShowPrivacyCommand) { 464 if (command == kShowPrivacyCommand) {
472 // User pressed "Safe Browsing privacy policy". 465 // User pressed "Safe Browsing privacy policy".
473 GURL url(kSbPrivacyPolicyUrl); 466 GURL url(kSbPrivacyPolicyUrl);
474 OpenURLParams params( 467 OpenURLParams params(
475 url, Referrer(), CURRENT_TAB, content::PAGE_TRANSITION_LINK, false); 468 url, Referrer(), CURRENT_TAB, content::PAGE_TRANSITION_LINK, false);
476 web_contents_->OpenURL(params); 469 web_contents_->OpenURL(params);
477 return; 470 return;
478 } 471 }
479 472
473 bool proceed_blocked = false;
480 if (command == kProceedCommand) { 474 if (command == kProceedCommand) {
481 interstitial_page_->Proceed(); 475 if (IsPrefEnabled(prefs::kSafeBrowsingProceedAnywayDisabled)) {
482 // We are deleted after this. 476 proceed_blocked = true;
483 return; 477 } else {
478 interstitial_page_->Proceed();
479 // |this| has been deleted after Proceed() returns.
480 return;
481 }
484 } 482 }
485 483
486 if (command == kTakeMeBackCommand) { 484 if (command == kTakeMeBackCommand || proceed_blocked) {
487 if (is_main_frame_load_blocked_) { 485 if (is_main_frame_load_blocked_) {
488 // If the load is blocked, we want to close the interstitial and discard 486 // If the load is blocked, we want to close the interstitial and discard
489 // the pending entry. 487 // the pending entry.
490 interstitial_page_->DontProceed(); 488 interstitial_page_->DontProceed();
491 // We are deleted after this. 489 // |this| has been deleted after DontProceed() returns.
492 return; 490 return;
493 } 491 }
494 492
495 // Otherwise the offending entry has committed, and we need to go back or 493 // Otherwise the offending entry has committed, and we need to go back or
496 // to a safe page. We will close the interstitial when that page commits. 494 // to a safe page. We will close the interstitial when that page commits.
497 if (web_contents_->GetController().CanGoBack()) { 495 if (web_contents_->GetController().CanGoBack()) {
498 web_contents_->GetController().GoBack(); 496 web_contents_->GetController().GoBack();
499 } else { 497 } else {
500 web_contents_->GetController().LoadURL( 498 web_contents_->GetController().LoadURL(
501 GURL(chrome::kChromeUINewTabURL), 499 GURL(chrome::kChromeUINewTabURL),
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
671 } 669 }
672 670
673 switch (event) { 671 switch (event) {
674 case SHOW: 672 case SHOW:
675 action.append("Show"); 673 action.append("Show");
676 break; 674 break;
677 case PROCEED: 675 case PROCEED:
678 action.append("Proceed"); 676 action.append("Proceed");
679 break; 677 break;
680 case DONT_PROCEED: 678 case DONT_PROCEED:
681 action.append("DontProceed"); 679 if (IsPrefEnabled(prefs::kSafeBrowsingProceedAnywayDisabled))
680 action.append("ForcedDontProceed");
681 else
682 action.append("DontProceed");
682 break; 683 break;
683 default: 684 default:
684 NOTREACHED() << "Unexpected event: " << event; 685 NOTREACHED() << "Unexpected event: " << event;
685 } 686 }
686 687
687 content::RecordComputedAction(action); 688 content::RecordComputedAction(action);
688 } 689 }
689 690
690 void SafeBrowsingBlockingPage::RecordUserReactionTime( 691 void SafeBrowsingBlockingPage::RecordUserReactionTime(
691 const std::string& command) { 692 const std::string& command) {
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
732 } 733 }
733 } 734 }
734 if (recorded) // Making sure we don't double-count reaction times. 735 if (recorded) // Making sure we don't double-count reaction times.
735 interstitial_show_time_ = base::TimeTicks(); // Resets the show time. 736 interstitial_show_time_ = base::TimeTicks(); // Resets the show time.
736 } 737 }
737 738
738 void SafeBrowsingBlockingPage::FinishMalwareDetails(int64 delay_ms) { 739 void SafeBrowsingBlockingPage::FinishMalwareDetails(int64 delay_ms) {
739 if (malware_details_ == NULL) 740 if (malware_details_ == NULL)
740 return; // Not all interstitials have malware details (eg phishing). 741 return; // Not all interstitials have malware details (eg phishing).
741 742
742 Profile* profile = Profile::FromBrowserContext( 743 if (IsPrefEnabled(prefs::kSafeBrowsingReportingEnabled)) {
743 web_contents_->GetBrowserContext());
744 const PrefService::Preference* pref =
745 profile->GetPrefs()->FindPreference(prefs::kSafeBrowsingReportingEnabled);
746
747 bool value;
748 if (pref && pref->GetValue()->GetAsBoolean(&value) && value) {
749 // Finish the malware details collection, send it over. 744 // Finish the malware details collection, send it over.
750 BrowserThread::PostDelayedTask( 745 BrowserThread::PostDelayedTask(
751 BrowserThread::IO, FROM_HERE, 746 BrowserThread::IO, FROM_HERE,
752 base::Bind(&MalwareDetails::FinishCollection, malware_details_.get()), 747 base::Bind(&MalwareDetails::FinishCollection, malware_details_.get()),
753 base::TimeDelta::FromMilliseconds(delay_ms)); 748 base::TimeDelta::FromMilliseconds(delay_ms));
754 } 749 }
755 } 750 }
756 751
752 bool SafeBrowsingBlockingPage::IsPrefEnabled(const char* pref) {
753 Profile* profile =
754 Profile::FromBrowserContext(web_contents_->GetBrowserContext());
755 return profile->GetPrefs()->GetBoolean(pref);
756 }
757
757 // static 758 // static
758 void SafeBrowsingBlockingPage::NotifySafeBrowsingService( 759 void SafeBrowsingBlockingPage::NotifySafeBrowsingService(
759 SafeBrowsingService* sb_service, 760 SafeBrowsingService* sb_service,
760 const UnsafeResourceList& unsafe_resources, 761 const UnsafeResourceList& unsafe_resources,
761 bool proceed) { 762 bool proceed) {
762 BrowserThread::PostTask( 763 BrowserThread::PostTask(
763 BrowserThread::IO, FROM_HERE, 764 BrowserThread::IO, FROM_HERE,
764 base::Bind(&SafeBrowsingService::OnBlockingPageDone, 765 base::Bind(&SafeBrowsingService::OnBlockingPageDone,
765 sb_service, unsafe_resources, proceed)); 766 sb_service, unsafe_resources, proceed));
766 } 767 }
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
814 // Client-side phishing detection interstitials never block the main frame 815 // Client-side phishing detection interstitials never block the main frame
815 // load, since they happen after the page is finished loading. 816 // load, since they happen after the page is finished loading.
816 if (unsafe_resources[0].threat_type == 817 if (unsafe_resources[0].threat_type ==
817 SafeBrowsingService::CLIENT_SIDE_PHISHING_URL) { 818 SafeBrowsingService::CLIENT_SIDE_PHISHING_URL) {
818 return false; 819 return false;
819 } 820 }
820 821
821 // Otherwise, check the threat type. 822 // Otherwise, check the threat type.
822 return unsafe_resources.size() == 1 && !unsafe_resources[0].is_subresource; 823 return unsafe_resources.size() == 1 && !unsafe_resources[0].is_subresource;
823 } 824 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698