Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 #include "chrome/browser/ssl/security_state_tab_helper.h" | 5 #include "chrome/browser/ssl/security_state_tab_helper.h" |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/test/histogram_tester.h" | 8 #include "base/test/histogram_tester.h" |
| 9 #include "chrome/test/base/chrome_render_view_host_test_harness.h" | 9 #include "chrome/test/base/chrome_render_view_host_test_harness.h" |
| 10 #include "components/security_state/core/switches.h" | 10 #include "components/security_state/core/switches.h" |
| 11 #include "testing/gtest/include/gtest/gtest.h" | 11 #include "testing/gtest/include/gtest/gtest.h" |
| 12 | 12 |
| 13 namespace { | 13 namespace { |
| 14 | 14 |
| 15 const char kHTTPBadNavigationHistogram[] = | |
| 16 "Security.HTTPBad.NavigationStartedAfterUserWarnedAboutSensitiveInput"; | |
| 17 const char kHTTPBadWebContentsDestroyedHistogram[] = | |
| 18 "Security.HTTPBad.WebContentsDestroyedAfterUserWarnedAboutSensitiveInput"; | |
| 19 | |
| 15 class SecurityStateTabHelperHistogramTest | 20 class SecurityStateTabHelperHistogramTest |
| 16 : public ChromeRenderViewHostTestHarness, | 21 : public ChromeRenderViewHostTestHarness, |
| 17 public testing::WithParamInterface<bool> { | 22 public testing::WithParamInterface<bool> { |
| 18 public: | 23 public: |
| 19 SecurityStateTabHelperHistogramTest() : helper_(nullptr) {} | 24 SecurityStateTabHelperHistogramTest() : helper_(nullptr) {} |
| 20 ~SecurityStateTabHelperHistogramTest() override {} | 25 ~SecurityStateTabHelperHistogramTest() override {} |
| 21 | 26 |
| 22 void SetUp() override { | 27 void SetUp() override { |
| 23 ChromeRenderViewHostTestHarness::SetUp(); | 28 ChromeRenderViewHostTestHarness::SetUp(); |
| 24 | 29 |
| 25 SecurityStateTabHelper::CreateForWebContents(web_contents()); | 30 SecurityStateTabHelper::CreateForWebContents(web_contents()); |
| 26 helper_ = SecurityStateTabHelper::FromWebContents(web_contents()); | 31 helper_ = SecurityStateTabHelper::FromWebContents(web_contents()); |
| 27 navigate_to_http(); | 32 NavigateToHTTP(); |
| 28 } | 33 } |
| 29 | 34 |
| 30 protected: | 35 protected: |
| 31 void signal_sensitive_input() { | 36 void SignalSensitiveInput() { |
| 32 if (GetParam()) | 37 if (GetParam()) |
| 33 web_contents()->OnPasswordInputShownOnHttp(); | 38 web_contents()->OnPasswordInputShownOnHttp(); |
| 34 else | 39 else |
| 35 web_contents()->OnCreditCardInputShownOnHttp(); | 40 web_contents()->OnCreditCardInputShownOnHttp(); |
| 36 helper_->VisibleSecurityStateChanged(); | 41 helper_->VisibleSecurityStateChanged(); |
| 37 } | 42 } |
| 38 | 43 |
| 39 const std::string histogram_name() { | 44 const std::string histogram_name() { |
| 40 if (GetParam()) | 45 if (GetParam()) |
| 41 return "Security.HTTPBad.UserWarnedAboutSensitiveInput.Password"; | 46 return "Security.HTTPBad.UserWarnedAboutSensitiveInput.Password"; |
| 42 else | 47 else |
| 43 return "Security.HTTPBad.UserWarnedAboutSensitiveInput.CreditCard"; | 48 return "Security.HTTPBad.UserWarnedAboutSensitiveInput.CreditCard"; |
| 44 } | 49 } |
| 45 | 50 |
| 46 void navigate_to_http() { NavigateAndCommit(GURL("http://example.test")); } | 51 void NavigateToHTTP() { NavigateAndCommit(GURL("http://example.test")); } |
| 47 | 52 |
| 48 void navigate_to_different_http_page() { | 53 void NavigateToDifferentHTTPPage() { |
| 49 NavigateAndCommit(GURL("http://example2.test")); | 54 NavigateAndCommit(GURL("http://example2.test")); |
| 50 } | 55 } |
| 51 | 56 |
| 52 private: | 57 private: |
| 53 SecurityStateTabHelper* helper_; | 58 SecurityStateTabHelper* helper_; |
| 54 DISALLOW_COPY_AND_ASSIGN(SecurityStateTabHelperHistogramTest); | 59 DISALLOW_COPY_AND_ASSIGN(SecurityStateTabHelperHistogramTest); |
| 55 }; | 60 }; |
| 56 | 61 |
| 62 // Tests that an UMA histogram is recorded after setting the security | |
| 63 // level to HTTP_SHOW_WARNING and navigating away. | |
| 64 TEST_P(SecurityStateTabHelperHistogramTest, | |
| 65 HTTPOmniboxWarningNavigationHistogram) { | |
| 66 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( | |
| 67 security_state::switches::kMarkHttpAs, | |
| 68 security_state::switches::kMarkHttpWithPasswordsOrCcWithChip); | |
| 69 | |
| 70 base::HistogramTester histograms; | |
| 71 SignalSensitiveInput(); | |
| 72 // Make sure that if the omnibox warning gets dynamically hidden, the | |
| 73 // histogram still gets recorded. | |
| 74 NavigateToDifferentHTTPPage(); | |
| 75 if (GetParam()) | |
| 76 web_contents()->OnAllPasswordInputsHiddenOnHttp(); | |
| 77 // Destroy the WebContents to simulate the tab being closed after a | |
| 78 // navigation. | |
| 79 SetContents(nullptr); | |
| 80 histograms.ExpectTotalCount(kHTTPBadNavigationHistogram, 1); | |
| 81 histograms.ExpectTotalCount(kHTTPBadWebContentsDestroyedHistogram, 0); | |
| 82 } | |
| 83 | |
| 84 // Tests that an UMA histogram is recorded after showing a console | |
| 85 // warning for a sensitive input on HTTP and navigating away. | |
| 86 TEST_P(SecurityStateTabHelperHistogramTest, | |
| 87 HTTPConsoleWarningNavigationHistogram) { | |
| 88 // Same as HTTPOmniboxWarningNavigationHistogram, but ensuring that | |
| 89 // the histogram gets recorded even if the command-line switch to show | |
| 90 // the omnibox warning is not set. | |
| 91 base::HistogramTester histograms; | |
| 92 SignalSensitiveInput(); | |
| 93 NavigateToDifferentHTTPPage(); | |
| 94 // Destroy the WebContents to simulate the tab being closed after a | |
| 95 // navigation. | |
| 96 SetContents(nullptr); | |
| 97 histograms.ExpectTotalCount(kHTTPBadNavigationHistogram, 1); | |
| 98 histograms.ExpectTotalCount(kHTTPBadWebContentsDestroyedHistogram, 0); | |
| 99 } | |
| 100 | |
| 101 // Tests that an UMA histogram is recorded after setting the security | |
| 102 // level to HTTP_SHOW_WARNING and closing the tab. | |
| 103 TEST_P(SecurityStateTabHelperHistogramTest, | |
| 104 HTTPOmniboxWarningTabClosedHistogram) { | |
| 105 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( | |
| 106 security_state::switches::kMarkHttpAs, | |
| 107 security_state::switches::kMarkHttpWithPasswordsOrCcWithChip); | |
| 108 | |
| 109 base::HistogramTester histograms; | |
| 110 SignalSensitiveInput(); | |
| 111 // Destroy the WebContents to simulate the tab being closed. | |
| 112 SetContents(nullptr); | |
| 113 histograms.ExpectTotalCount(kHTTPBadNavigationHistogram, 0); | |
| 114 histograms.ExpectTotalCount(kHTTPBadWebContentsDestroyedHistogram, 1); | |
| 115 } | |
| 116 | |
| 117 // Tests that an UMA histogram is recorded after showing a console | |
| 118 // warning for a sensitive input on HTTP and closing the tab. | |
| 119 TEST_P(SecurityStateTabHelperHistogramTest, | |
| 120 HTTPConsoleWarningTabClosedHistogram) { | |
| 121 // Same as HTTPOmniboxWarningTabClosedHistogram, but ensuring that the | |
| 122 // histogram gets recorded even if the command-line switch to show the | |
| 123 // omnibox warning is not set. | |
|
elawrence
2016/11/18 17:43:30
Do we need to explicitly write out the flag state
estark
2016/11/18 23:59:35
Oops, sorry, lost that in the rebase too. :( Done.
| |
| 124 base::HistogramTester histograms; | |
| 125 SignalSensitiveInput(); | |
| 126 // Destroy the WebContents to simulate the tab being closed. | |
| 127 SetContents(nullptr); | |
| 128 histograms.ExpectTotalCount(kHTTPBadNavigationHistogram, 0); | |
| 129 histograms.ExpectTotalCount(kHTTPBadWebContentsDestroyedHistogram, 1); | |
| 130 } | |
| 131 | |
| 57 // Tests that UMA logs the omnibox warning when security level is | 132 // Tests that UMA logs the omnibox warning when security level is |
| 58 // HTTP_SHOW_WARNING. | 133 // HTTP_SHOW_WARNING. |
| 59 TEST_P(SecurityStateTabHelperHistogramTest, HTTPOmniboxWarningHistogram) { | 134 TEST_P(SecurityStateTabHelperHistogramTest, HTTPOmniboxWarningHistogram) { |
| 60 // Show Warning Chip. | 135 // Show Warning Chip. |
| 61 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( | 136 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
| 62 security_state::switches::kMarkHttpAs, | 137 security_state::switches::kMarkHttpAs, |
| 63 security_state::switches::kMarkHttpWithPasswordsOrCcWithChip); | 138 security_state::switches::kMarkHttpWithPasswordsOrCcWithChip); |
| 64 | 139 |
| 65 base::HistogramTester histograms; | 140 base::HistogramTester histograms; |
| 66 signal_sensitive_input(); | 141 SignalSensitiveInput(); |
| 67 histograms.ExpectUniqueSample(histogram_name(), true, 1); | 142 histograms.ExpectUniqueSample(histogram_name(), true, 1); |
| 68 | 143 |
| 69 // Fire again and ensure no sample is recorded. | 144 // Fire again and ensure no sample is recorded. |
| 70 signal_sensitive_input(); | 145 SignalSensitiveInput(); |
| 71 histograms.ExpectUniqueSample(histogram_name(), true, 1); | 146 histograms.ExpectUniqueSample(histogram_name(), true, 1); |
| 72 | 147 |
| 73 // Navigate to a new page and ensure a sample is recorded. | 148 // Navigate to a new page and ensure a sample is recorded. |
| 74 navigate_to_different_http_page(); | 149 NavigateToDifferentHTTPPage(); |
| 75 histograms.ExpectUniqueSample(histogram_name(), true, 1); | 150 histograms.ExpectUniqueSample(histogram_name(), true, 1); |
| 76 signal_sensitive_input(); | 151 SignalSensitiveInput(); |
| 77 histograms.ExpectUniqueSample(histogram_name(), true, 2); | 152 histograms.ExpectUniqueSample(histogram_name(), true, 2); |
| 78 } | 153 } |
| 79 | 154 |
| 80 // Tests that UMA logs the console warning when security level is NONE. | 155 // Tests that UMA logs the console warning when security level is NONE. |
| 81 TEST_P(SecurityStateTabHelperHistogramTest, HTTPConsoleWarningHistogram) { | 156 TEST_P(SecurityStateTabHelperHistogramTest, HTTPConsoleWarningHistogram) { |
| 82 // Show Neutral for HTTP | 157 // Show Neutral for HTTP |
| 83 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( | 158 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
| 84 security_state::switches::kMarkHttpAs, | 159 security_state::switches::kMarkHttpAs, |
| 85 security_state::switches::kMarkHttpAsNeutral); | 160 security_state::switches::kMarkHttpAsNeutral); |
| 86 | 161 |
| 87 base::HistogramTester histograms; | 162 base::HistogramTester histograms; |
| 88 signal_sensitive_input(); | 163 SignalSensitiveInput(); |
| 89 histograms.ExpectUniqueSample(histogram_name(), false, 1); | 164 histograms.ExpectUniqueSample(histogram_name(), false, 1); |
| 90 | 165 |
| 91 // Fire again and ensure no sample is recorded. | 166 // Fire again and ensure no sample is recorded. |
| 92 signal_sensitive_input(); | 167 SignalSensitiveInput(); |
| 93 histograms.ExpectUniqueSample(histogram_name(), false, 1); | 168 histograms.ExpectUniqueSample(histogram_name(), false, 1); |
| 94 | 169 |
| 95 // Navigate to a new page and ensure a sample is recorded. | 170 // Navigate to a new page and ensure a sample is recorded. |
| 96 navigate_to_different_http_page(); | 171 NavigateToDifferentHTTPPage(); |
| 97 histograms.ExpectUniqueSample(histogram_name(), false, 1); | 172 histograms.ExpectUniqueSample(histogram_name(), false, 1); |
| 98 signal_sensitive_input(); | 173 SignalSensitiveInput(); |
| 99 histograms.ExpectUniqueSample(histogram_name(), false, 2); | 174 histograms.ExpectUniqueSample(histogram_name(), false, 2); |
| 100 } | 175 } |
| 101 | 176 |
| 102 INSTANTIATE_TEST_CASE_P(SecurityStateTabHelperHistogramTest, | 177 INSTANTIATE_TEST_CASE_P(SecurityStateTabHelperHistogramTest, |
| 103 SecurityStateTabHelperHistogramTest, | 178 SecurityStateTabHelperHistogramTest, |
| 104 // Here 'true' to test password field triggered | 179 // Here 'true' to test password field triggered |
| 105 // histogram and 'false' to test credit card field. | 180 // histogram and 'false' to test credit card field. |
| 106 testing::Bool()); | 181 testing::Bool()); |
| 107 | 182 |
| 108 } // namespace | 183 } // namespace |
| OLD | NEW |