Index: chrome/browser/ssl/ssl_browser_tests.cc |
diff --git a/chrome/browser/ssl/ssl_browser_tests.cc b/chrome/browser/ssl/ssl_browser_tests.cc |
index ba69fe78eb8b47aee9d8ebc1bb8ecb8fff4a3cc8..69250187282974e3ec866bc800dccb76cbab1596 100644 |
--- a/chrome/browser/ssl/ssl_browser_tests.cc |
+++ b/chrome/browser/ssl/ssl_browser_tests.cc |
@@ -6,6 +6,7 @@ |
#include "base/bind_helpers.h" |
#include "base/callback.h" |
#include "base/command_line.h" |
+#include "base/metrics/field_trial.h" |
#include "base/prefs/pref_service.h" |
#include "base/strings/string_util.h" |
#include "base/strings/stringprintf.h" |
@@ -31,6 +32,7 @@ |
#include "chrome/test/base/in_process_browser_test.h" |
#include "chrome/test/base/ui_test_utils.h" |
#include "components/content_settings/core/browser/host_content_settings_map.h" |
+#include "components/variations/variations_associated_data.h" |
#include "components/web_modal/web_contents_modal_dialog_manager.h" |
#include "content/public/browser/browser_context.h" |
#include "content/public/browser/interstitial_page.h" |
@@ -74,6 +76,10 @@ using web_modal::WebContentsModalDialogManager; |
const base::FilePath::CharType kDocRoot[] = |
FILE_PATH_LITERAL("chrome/test/data"); |
+// Const for the Finch group DontShowDontSend |
+const char kHTTPSErrorReporterFinchGroupDontShowDontSend[] = |
+ "DontShowAndDontSend"; |
+ |
namespace { |
class ProvisionalLoadWaiter : public content::WebContentsObserver { |
@@ -473,6 +479,24 @@ class SSLUITest : public InProcessBrowserTest { |
} |
} |
+ // Helper function to set the Finch options |
+ void SetCertReportingFinchConfig(const std::string& group_name, |
+ const std::string& param_value) { |
+ base::FieldTrialList::CreateFieldTrial( |
+ kHTTPSErrorReporterFinchExperimentName, group_name); |
+ if (!param_value.empty()) { |
+ std::map<std::string, std::string> params; |
+ params[kHTTPSErrorReporterFinchParamName] = param_value; |
+ variations::AssociateVariationParams( |
+ kHTTPSErrorReporterFinchExperimentName, group_name, params); |
+ } |
+ } |
+ |
+ // Helper function to set the Finch options in case we have no parameter |
+ void SetCertReportingFinchConfig(const std::string& group_name) { |
+ SetCertReportingFinchConfig(group_name, std::string()); |
+ } |
+ |
net::SpawnedTestServer https_server_; |
net::SpawnedTestServer https_server_expired_; |
net::SpawnedTestServer https_server_mismatched_; |
@@ -518,12 +542,6 @@ class SSLUITestIgnoreLocalhostCertErrors : public SSLUITest { |
class SSLUITestWithExtendedReporting : public SSLUITest { |
public: |
SSLUITestWithExtendedReporting() : SSLUITest() {} |
- |
- void SetUpCommandLine(base::CommandLine* command_line) override { |
- // Enable a checkbox on SSL interstitials that allows users to opt |
- // in to reporting invalid certificate chains. |
- command_line->AppendSwitch(switches::kEnableInvalidCertCollection); |
- } |
}; |
// Visits a regular page over http. |
@@ -1123,73 +1141,116 @@ IN_PROC_BROWSER_TEST_F(SSLUITest, MAYBE_TestDisplaysInsecureContent) { |
AuthState::DISPLAYED_INSECURE_CONTENT); |
} |
-// Test that when the checkbox is checked and the user proceeds through |
-// the interstitial, the FraudulentCertificateReporter sees a request to |
-// send a report. |
-IN_PROC_BROWSER_TEST_F(SSLUITestWithExtendedReporting, |
- TestBrokenHTTPSProceedWithReporting) { |
+// User proceeds, checkbox is shown and checked, Finch parameter is set |
+// -> we expect a report. |
+IN_PROC_BROWSER_TEST_F( |
+ SSLUITestWithExtendedReporting, |
+ TestBrokenHTTPSProceedWithShowYesCheckYesParamYesReportYes) { |
+ SetCertReportingFinchConfig(kHTTPSErrorReporterFinchGroupShowPossiblySend, |
+ "1.0"); |
TestBrokenHTTPSReporting(CertificateReporting::EXTENDED_REPORTING_OPT_IN, |
CertificateReporting::SSL_INTERSTITIAL_PROCEED, |
CertificateReporting::CERT_REPORT_EXPECTED, |
browser()); |
} |
-// Test that when the checkbox is checked and the user goes back (does |
-// not proceed through the interstitial), the |
-// FraudulentCertificateReporter sees a request to send a report. |
-IN_PROC_BROWSER_TEST_F(SSLUITestWithExtendedReporting, |
- TestBrokenHTTPSGoBackWithReporting) { |
+// User goes back, checkbox is shown and checked, Finch parameter is set |
+// -> we expect a report. |
+IN_PROC_BROWSER_TEST_F( |
+ SSLUITestWithExtendedReporting, |
+ TestBrokenHTTPSGoBackWithShowYesCheckYesParamYesReportYes) { |
+ SetCertReportingFinchConfig(kHTTPSErrorReporterFinchGroupShowPossiblySend, |
+ "1.0"); |
TestBrokenHTTPSReporting( |
CertificateReporting::EXTENDED_REPORTING_OPT_IN, |
CertificateReporting::SSL_INTERSTITIAL_DO_NOT_PROCEED, |
CertificateReporting::CERT_REPORT_EXPECTED, browser()); |
} |
-// Test that when the checkbox is not checked and the user proceeds |
-// through the interstitial, the FraudulentCertificateReporter does not |
-// see a request to send a report. |
-IN_PROC_BROWSER_TEST_F(SSLUITestWithExtendedReporting, |
- TestBrokenHTTPSProceedWithNoReporting) { |
+// User proceeds, checkbox is shown but unchecked, Finch parameter is set |
+// -> we expect no report. |
+IN_PROC_BROWSER_TEST_F( |
+ SSLUITestWithExtendedReporting, |
+ TestBrokenHTTPSProceedWithShowYesCheckNoParamYesReportNo) { |
+ SetCertReportingFinchConfig(kHTTPSErrorReporterFinchGroupShowPossiblySend, |
+ "1.0"); |
TestBrokenHTTPSReporting( |
CertificateReporting::EXTENDED_REPORTING_DO_NOT_OPT_IN, |
CertificateReporting::SSL_INTERSTITIAL_PROCEED, |
CertificateReporting::CERT_REPORT_NOT_EXPECTED, browser()); |
} |
-// Test that when the checkbox is not checked and the user does not proceed |
-// through the interstitial, the FraudulentCertificateReporter does not |
-// see a request to send a report. |
+// User goes back, checkbox is shown but unchecked, Finch parameter is set |
+// -> we expect no report. |
IN_PROC_BROWSER_TEST_F(SSLUITestWithExtendedReporting, |
- TestBrokenHTTPSGoBackWithNoReporting) { |
+ TestBrokenHTTPSGoBackShowYesCheckNoParamYesReportNo) { |
+ SetCertReportingFinchConfig(kHTTPSErrorReporterFinchGroupShowPossiblySend, |
+ "1.0"); |
TestBrokenHTTPSReporting( |
CertificateReporting::EXTENDED_REPORTING_DO_NOT_OPT_IN, |
CertificateReporting::SSL_INTERSTITIAL_DO_NOT_PROCEED, |
CertificateReporting::CERT_REPORT_NOT_EXPECTED, browser()); |
} |
-// Test that when the command-line switch for reporting invalid cert |
-// chains is not enabled, reports don't get sent, even if the opt-in |
-// preference is set. (i.e. if a user enables invalid cert collection in |
-// chrome://flags, checks the box on an interstitial, and then disables |
-// the flag in chrome://flags, reports shouldn't be sent on the next |
-// interstitial). |
-IN_PROC_BROWSER_TEST_F(SSLUITest, TestBrokenHTTPSNoReportingWithoutSwitch) { |
+// User proceeds, checkbox is shown and checked, Finch parameter is not |
+// set -> we expect no report. |
+IN_PROC_BROWSER_TEST_F(SSLUITestWithExtendedReporting, |
+ TestBrokenHTTPSProceedShowYesCheckYesParamNoReportNo) { |
+ SetCertReportingFinchConfig(kHTTPSErrorReporterFinchGroupShowPossiblySend, |
+ "-1.0"); |
TestBrokenHTTPSReporting(CertificateReporting::EXTENDED_REPORTING_OPT_IN, |
CertificateReporting::SSL_INTERSTITIAL_PROCEED, |
CertificateReporting::CERT_REPORT_NOT_EXPECTED, |
browser()); |
} |
-// Test that reports don't get sent in incognito mode even if the opt-in |
-// preference is set and the command-line switch is enabled. |
+// User goes back, checkbox is shown and checked, Finch parameter is not set |
+// -> we expect no report. |
IN_PROC_BROWSER_TEST_F(SSLUITestWithExtendedReporting, |
- TestBrokenHTTPSNoReportingInIncognito) { |
+ TestBrokenHTTPSGoBackShowYesCheckYesParamNoReportNo) { |
+ SetCertReportingFinchConfig(kHTTPSErrorReporterFinchGroupShowPossiblySend, |
+ "-1.0"); |
+ TestBrokenHTTPSReporting( |
+ CertificateReporting::EXTENDED_REPORTING_OPT_IN, |
+ CertificateReporting::SSL_INTERSTITIAL_DO_NOT_PROCEED, |
+ CertificateReporting::CERT_REPORT_NOT_EXPECTED, browser()); |
+} |
+ |
+// User proceeds, checkbox is not shown but checked -> we expect no report |
+IN_PROC_BROWSER_TEST_F(SSLUITestWithExtendedReporting, |
+ TestBrokenHTTPSProceedShowNoCheckYesReportNo) { |
+ SetCertReportingFinchConfig(kHTTPSErrorReporterFinchGroupDontShowDontSend); |
+ TestBrokenHTTPSReporting(CertificateReporting::EXTENDED_REPORTING_OPT_IN, |
+ CertificateReporting::SSL_INTERSTITIAL_PROCEED, |
+ CertificateReporting::CERT_REPORT_NOT_EXPECTED, |
+ browser()); |
+} |
+ |
+// Browser is incognito, user proceeds, checkbox is shown and checked, Finch |
+// parameter is set -> we expect no report |
+IN_PROC_BROWSER_TEST_F(SSLUITestWithExtendedReporting, |
+ TestBrokenHTTPSInIncognitoReportNo) { |
+ SetCertReportingFinchConfig(kHTTPSErrorReporterFinchGroupShowPossiblySend, |
+ "1.0"); |
TestBrokenHTTPSReporting(CertificateReporting::EXTENDED_REPORTING_OPT_IN, |
CertificateReporting::SSL_INTERSTITIAL_PROCEED, |
CertificateReporting::CERT_REPORT_NOT_EXPECTED, |
CreateIncognitoBrowser()); |
} |
+// User proceeds, checkbox is shown and checked, Finch parameter is invalid |
+// -> we expect no report. |
+IN_PROC_BROWSER_TEST_F( |
+ SSLUITestWithExtendedReporting, |
+ TestBrokenHTTPSProceedWithShowYesCheckYesParamInvalidReportNo) { |
+ SetCertReportingFinchConfig(kHTTPSErrorReporterFinchGroupShowPossiblySend, |
+ "abcdef"); |
+ TestBrokenHTTPSReporting(CertificateReporting::EXTENDED_REPORTING_OPT_IN, |
+ CertificateReporting::SSL_INTERSTITIAL_PROCEED, |
+ CertificateReporting::CERT_REPORT_NOT_EXPECTED, |
+ browser()); |
+} |
+ |
// Visits a page that runs insecure content and tries to suppress the insecure |
// content warnings by randomizing location.hash. |
// Based on http://crbug.com/8706 |