Chromium Code Reviews| Index: chrome/browser/ssl/ssl_blocking_page.cc |
| diff --git a/chrome/browser/ssl/ssl_blocking_page.cc b/chrome/browser/ssl/ssl_blocking_page.cc |
| index e6083f8768ecf1a12308fb8d693f8b38bc584562..523f6f1a83c75d0c35de973dd0ad3a3236f886dd 100644 |
| --- a/chrome/browser/ssl/ssl_blocking_page.cc |
| +++ b/chrome/browser/ssl/ssl_blocking_page.cc |
| @@ -15,6 +15,7 @@ |
| #include "base/metrics/histogram.h" |
| #include "base/prefs/pref_service.h" |
| #include "base/process/launch.h" |
| +#include "base/rand_util.h" |
| #include "base/strings/string_number_conversions.h" |
| #include "base/strings/string_piece.h" |
| #include "base/strings/string_util.h" |
| @@ -35,6 +36,7 @@ |
| #include "chrome/grit/chromium_strings.h" |
| #include "chrome/grit/generated_resources.h" |
| #include "components/google/core/browser/google_util.h" |
| +#include "components/variations/variations_associated_data.h" |
| #include "content/public/browser/browser_thread.h" |
| #include "content/public/browser/cert_store.h" |
| #include "content/public/browser/interstitial_page.h" |
| @@ -78,6 +80,12 @@ using content::InterstitialPageDelegate; |
| using content::NavigationController; |
| using content::NavigationEntry; |
| +// Constants for the HTTPSErrorReporter Finch experiment |
| +const char kHTTPSErrorReporterFinchExperimentName[] = "ReportCertificateErrors"; |
| +const char kHTTPSErrorReporterFinchGroupShowPossiblySend[] = |
| + "ShowAndPossiblySend"; |
| +const char kHTTPSErrorReporterFinchParamName[] = "possibly_send"; |
| + |
| namespace { |
| // URL for help page. |
| @@ -100,6 +108,31 @@ enum SSLExpirationAndDecision { |
| // Rappor prefix |
| const char kSSLRapporPrefix[] = "ssl"; |
| +// Check whether to show the certificate reporter checkbox |
| +bool ShouldShowCertificateReporterCheckbox(bool in_incognito) { |
| + // Check Finch parameters |
| + return base::FieldTrialList::FindFullName( |
| + kHTTPSErrorReporterFinchExperimentName) |
|
felt
2015/04/03 14:32:28
nit: this indentation is very odd, is this what gi
fahl
2015/04/03 17:39:31
Yep, I usually run git cl format before git cl upl
|
| + .compare(kHTTPSErrorReporterFinchGroupShowPossiblySend) == 0 && |
|
felt
2015/04/03 14:32:29
nit: you normally see this as FindFullName(name) =
fahl
2015/04/03 17:39:31
Done.
|
| + !in_incognito; |
| +} |
| + |
| +// Check whether to report certificate verification errors to Google |
| +bool ShouldReportCertificateErrors(bool in_incognito) { |
| + DCHECK(ShouldShowCertificateReporterCheckbox(in_incognito)); |
| + // Check Finch parameters |
|
felt
2015/04/03 14:32:29
either leave off this comment (as it's obvious), o
fahl
2015/04/03 17:39:31
Done.
|
| + const std::string param = |
| + variations::GetVariationParamValue(kHTTPSErrorReporterFinchExperimentName, |
| + kHTTPSErrorReporterFinchParamName); |
| + if (param.compare("") != 0) { |
|
felt
2015/04/03 14:32:29
this is an awfully weird check too. if (!param.emp
fahl
2015/04/03 17:39:31
Done.
|
| + double possiblySend; |
|
felt
2015/04/03 14:32:28
nit: would "sendingThreshold" be a more descriptiv
fahl
2015/04/03 17:39:31
Done.
|
| + if (base::StringToDouble(param, &possiblySend)) |
|
felt
2015/04/03 14:32:29
you'll need { } for the outermost one because its
fahl
2015/04/03 17:39:31
Done.
|
| + if (possiblySend >= 0.0 && possiblySend <= 1.0) |
| + return base::RandDouble() <= possiblySend; |
| + } |
| + return false; |
| +} |
| + |
| void RecordSSLExpirationPageEventState(bool expired_but_previously_allowed, |
| bool proceed, |
| bool overridable) { |
| @@ -457,9 +490,8 @@ void SSLBlockingPage::PopulateExtendedReportingOption( |
| base::DictionaryValue* load_time_data) { |
| // Only show the checkbox if not off-the-record and if the |
| // command-line option is set. |
|
felt
2015/04/03 14:32:29
does this comment need to be updated?
fahl
2015/04/03 17:39:31
Done.
|
| - const bool show = !web_contents()->GetBrowserContext()->IsOffTheRecord() && |
| - base::CommandLine::ForCurrentProcess()->HasSwitch( |
| - switches::kEnableInvalidCertCollection); |
| + const bool show = ShouldShowCertificateReporterCheckbox( |
| + web_contents()->GetBrowserContext()->IsOffTheRecord()); |
| load_time_data->SetBoolean(interstitials::kDisplayCheckBox, show); |
| if (!show) |
| @@ -645,9 +677,8 @@ void SSLBlockingPage::FinishCertCollection() { |
| base::ScopedClosureRunner scoped_callback( |
| certificate_report_callback_for_testing_); |
| - if (!base::CommandLine::ForCurrentProcess()->HasSwitch( |
| - switches::kEnableInvalidCertCollection) || |
| - web_contents()->GetBrowserContext()->IsOffTheRecord()) { |
| + if (!ShouldShowCertificateReporterCheckbox( |
| + web_contents()->GetBrowserContext()->IsOffTheRecord())) { |
| return; |
| } |
| @@ -660,11 +691,13 @@ void SSLBlockingPage::FinishCertCollection() { |
| metrics_helper()->RecordUserInteraction( |
| SecurityInterstitialMetricsHelper::EXTENDED_REPORTING_IS_ENABLED); |
| - if (certificate_report_callback_for_testing_.is_null()) |
| - scoped_callback.Reset(base::Bind(&base::DoNothing)); |
| - |
| - safe_browsing_ui_manager_->ReportInvalidCertificateChain( |
| - request_url().host(), ssl_info_, scoped_callback.Release()); |
| + if (ShouldReportCertificateErrors( |
| + web_contents()->GetBrowserContext()->IsOffTheRecord())) { |
| + if (certificate_report_callback_for_testing_.is_null()) |
| + scoped_callback.Reset(base::Bind(&base::DoNothing)); |
| + safe_browsing_ui_manager_->ReportInvalidCertificateChain( |
| + request_url().host(), ssl_info_, scoped_callback.Release()); |
| + } |
| } |
| // static |