Chromium Code Reviews| 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 #include "chrome/browser/ui/page_info/website_settings.h" | 5 #include "chrome/browser/ui/page_info/page_info.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/at_exit.h" | 10 #include "base/at_exit.h" |
| 11 #include "base/bind.h" | 11 #include "base/bind.h" |
| 12 #include "base/memory/ptr_util.h" | 12 #include "base/memory/ptr_util.h" |
| 13 #include "base/message_loop/message_loop.h" | 13 #include "base/message_loop/message_loop.h" |
| 14 #include "base/strings/string16.h" | 14 #include "base/strings/string16.h" |
| 15 #include "base/strings/utf_string_conversions.h" | 15 #include "base/strings/utf_string_conversions.h" |
| 16 #include "base/test/histogram_tester.h" | 16 #include "base/test/histogram_tester.h" |
| 17 #include "build/build_config.h" | 17 #include "build/build_config.h" |
| 18 #include "chrome/browser/content_settings/host_content_settings_map_factory.h" | 18 #include "chrome/browser/content_settings/host_content_settings_map_factory.h" |
| 19 #include "chrome/browser/infobars/infobar_service.h" | 19 #include "chrome/browser/infobars/infobar_service.h" |
| 20 #include "chrome/browser/ui/page_info/website_settings_ui.h" | 20 #include "chrome/browser/ui/page_info/page_info_ui.h" |
| 21 #include "chrome/browser/usb/usb_chooser_context.h" | 21 #include "chrome/browser/usb/usb_chooser_context.h" |
| 22 #include "chrome/browser/usb/usb_chooser_context_factory.h" | 22 #include "chrome/browser/usb/usb_chooser_context_factory.h" |
| 23 #include "chrome/grit/theme_resources.h" | 23 #include "chrome/grit/theme_resources.h" |
| 24 #include "chrome/test/base/chrome_render_view_host_test_harness.h" | 24 #include "chrome/test/base/chrome_render_view_host_test_harness.h" |
| 25 #include "chrome/test/base/testing_profile.h" | 25 #include "chrome/test/base/testing_profile.h" |
| 26 #include "components/content_settings/core/browser/host_content_settings_map.h" | 26 #include "components/content_settings/core/browser/host_content_settings_map.h" |
| 27 #include "components/content_settings/core/common/content_settings.h" | 27 #include "components/content_settings/core/common/content_settings.h" |
| 28 #include "components/content_settings/core/common/content_settings_types.h" | 28 #include "components/content_settings/core/common/content_settings_types.h" |
| 29 #include "components/infobars/core/infobar.h" | 29 #include "components/infobars/core/infobar.h" |
| 30 #include "content/public/browser/ssl_status.h" | 30 #include "content/public/browser/ssl_status.h" |
| (...skipping 30 matching lines...) Expand all Loading... | |
| 61 int bitmask = version << net::SSL_CONNECTION_VERSION_SHIFT; | 61 int bitmask = version << net::SSL_CONNECTION_VERSION_SHIFT; |
| 62 return bitmask | connection_status; | 62 return bitmask | connection_status; |
| 63 } | 63 } |
| 64 | 64 |
| 65 int SetSSLCipherSuite(int connection_status, int cipher_suite) { | 65 int SetSSLCipherSuite(int connection_status, int cipher_suite) { |
| 66 // Clear cipher suite bits (the 16 lowest bits). | 66 // Clear cipher suite bits (the 16 lowest bits). |
| 67 connection_status &= ~net::SSL_CONNECTION_CIPHERSUITE_MASK; | 67 connection_status &= ~net::SSL_CONNECTION_CIPHERSUITE_MASK; |
| 68 return cipher_suite | connection_status; | 68 return cipher_suite | connection_status; |
| 69 } | 69 } |
| 70 | 70 |
| 71 class MockWebsiteSettingsUI : public WebsiteSettingsUI { | 71 class MockPageInfoUI : public PageInfoUI { |
| 72 public: | 72 public: |
| 73 virtual ~MockWebsiteSettingsUI() {} | 73 virtual ~MockPageInfoUI() {} |
| 74 MOCK_METHOD1(SetCookieInfo, void(const CookieInfoList& cookie_info_list)); | 74 MOCK_METHOD1(SetCookieInfo, void(const CookieInfoList& cookie_info_list)); |
| 75 MOCK_METHOD0(SetPermissionInfoStub, void()); | 75 MOCK_METHOD0(SetPermissionInfoStub, void()); |
| 76 MOCK_METHOD1(SetIdentityInfo, void(const IdentityInfo& identity_info)); | 76 MOCK_METHOD1(SetIdentityInfo, void(const IdentityInfo& identity_info)); |
| 77 | 77 |
| 78 void SetPermissionInfo( | 78 void SetPermissionInfo( |
| 79 const PermissionInfoList& permission_info_list, | 79 const PermissionInfoList& permission_info_list, |
| 80 ChosenObjectInfoList chosen_object_info_list) override { | 80 ChosenObjectInfoList chosen_object_info_list) override { |
| 81 SetPermissionInfoStub(); | 81 SetPermissionInfoStub(); |
| 82 if (set_permission_info_callback_) { | 82 if (set_permission_info_callback_) { |
| 83 set_permission_info_callback_.Run(permission_info_list, | 83 set_permission_info_callback_.Run(permission_info_list, |
| 84 std::move(chosen_object_info_list)); | 84 std::move(chosen_object_info_list)); |
| 85 } | 85 } |
| 86 } | 86 } |
| 87 | 87 |
| 88 base::Callback<void(const PermissionInfoList& permission_info_list, | 88 base::Callback<void(const PermissionInfoList& permission_info_list, |
| 89 ChosenObjectInfoList chosen_object_info_list)> | 89 ChosenObjectInfoList chosen_object_info_list)> |
| 90 set_permission_info_callback_; | 90 set_permission_info_callback_; |
| 91 }; | 91 }; |
| 92 | 92 |
| 93 class WebsiteSettingsTest : public ChromeRenderViewHostTestHarness { | 93 class PageInfoTest : public ChromeRenderViewHostTestHarness { |
| 94 public: | 94 public: |
| 95 WebsiteSettingsTest() : url_("http://www.example.com") {} | 95 PageInfoTest() : url_("http://www.example.com") {} |
| 96 | 96 |
| 97 ~WebsiteSettingsTest() override {} | 97 ~PageInfoTest() override {} |
| 98 | 98 |
| 99 void SetUp() override { | 99 void SetUp() override { |
| 100 ChromeRenderViewHostTestHarness::SetUp(); | 100 ChromeRenderViewHostTestHarness::SetUp(); |
| 101 | 101 |
| 102 // Setup stub SecurityInfo. | 102 // Setup stub SecurityInfo. |
| 103 security_info_.security_level = security_state::NONE; | 103 security_info_.security_level = security_state::NONE; |
| 104 | 104 |
| 105 // Create the certificate. | 105 // Create the certificate. |
| 106 cert_ = | 106 cert_ = |
| 107 net::ImportCertFromFile(net::GetTestCertsDirectory(), "ok_cert.pem"); | 107 net::ImportCertFromFile(net::GetTestCertsDirectory(), "ok_cert.pem"); |
| 108 ASSERT_TRUE(cert_); | 108 ASSERT_TRUE(cert_); |
| 109 | 109 |
| 110 TabSpecificContentSettings::CreateForWebContents(web_contents()); | 110 TabSpecificContentSettings::CreateForWebContents(web_contents()); |
| 111 InfoBarService::CreateForWebContents(web_contents()); | 111 InfoBarService::CreateForWebContents(web_contents()); |
| 112 | 112 |
| 113 // Setup mock ui. | 113 // Setup mock ui. |
| 114 mock_ui_.reset(new MockWebsiteSettingsUI()); | 114 mock_ui_.reset(new MockPageInfoUI()); |
| 115 // Use this rather than gmock's ON_CALL.WillByDefault(Invoke(... because | 115 // Use this rather than gmock's ON_CALL.WillByDefault(Invoke(... because |
| 116 // gmock doesn't handle move-only types well. | 116 // gmock doesn't handle move-only types well. |
| 117 mock_ui_->set_permission_info_callback_ = base::Bind( | 117 mock_ui_->set_permission_info_callback_ = |
| 118 &WebsiteSettingsTest::SetPermissionInfo, base::Unretained(this)); | 118 base::Bind(&PageInfoTest::SetPermissionInfo, base::Unretained(this)); |
| 119 } | 119 } |
| 120 | 120 |
| 121 void TearDown() override { | 121 void TearDown() override { |
| 122 ASSERT_TRUE(website_settings_.get()) | 122 ASSERT_TRUE(website_settings_.get()) << "No PageInfo instance created."; |
|
estark
2017/03/20 20:19:17
do |website_settings_| and its getter need to be r
lgarron
2017/03/24 05:55:20
Done in the latest patch.
| |
| 123 << "No WebsiteSettings instance created."; | |
| 124 RenderViewHostTestHarness::TearDown(); | 123 RenderViewHostTestHarness::TearDown(); |
| 125 website_settings_.reset(); | 124 website_settings_.reset(); |
| 126 } | 125 } |
| 127 | 126 |
| 128 void SetDefaultUIExpectations(MockWebsiteSettingsUI* mock_ui) { | 127 void SetDefaultUIExpectations(MockPageInfoUI* mock_ui) { |
| 129 // During creation |WebsiteSettings| makes the following calls to the ui. | 128 // During creation |PageInfo| makes the following calls to the ui. |
| 130 EXPECT_CALL(*mock_ui, SetPermissionInfoStub()); | 129 EXPECT_CALL(*mock_ui, SetPermissionInfoStub()); |
| 131 EXPECT_CALL(*mock_ui, SetIdentityInfo(_)); | 130 EXPECT_CALL(*mock_ui, SetIdentityInfo(_)); |
| 132 EXPECT_CALL(*mock_ui, SetCookieInfo(_)); | 131 EXPECT_CALL(*mock_ui, SetCookieInfo(_)); |
| 133 } | 132 } |
| 134 | 133 |
| 135 void SetURL(const std::string& url) { url_ = GURL(url); } | 134 void SetURL(const std::string& url) { url_ = GURL(url); } |
| 136 | 135 |
| 137 void SetPermissionInfo(const PermissionInfoList& permission_info_list, | 136 void SetPermissionInfo(const PermissionInfoList& permission_info_list, |
| 138 ChosenObjectInfoList chosen_object_info_list) { | 137 ChosenObjectInfoList chosen_object_info_list) { |
| 139 last_chosen_object_info_.clear(); | 138 last_chosen_object_info_.clear(); |
| 140 for (auto& chosen_object_info : chosen_object_info_list) | 139 for (auto& chosen_object_info : chosen_object_info_list) |
| 141 last_chosen_object_info_.push_back(std::move(chosen_object_info)); | 140 last_chosen_object_info_.push_back(std::move(chosen_object_info)); |
| 142 } | 141 } |
| 143 | 142 |
| 144 void ResetMockUI() { mock_ui_.reset(new MockWebsiteSettingsUI()); } | 143 void ResetMockUI() { mock_ui_.reset(new MockPageInfoUI()); } |
| 145 | 144 |
| 146 void ClearWebsiteSettings() { website_settings_.reset(nullptr); } | 145 void ClearPageInfo() { website_settings_.reset(nullptr); } |
| 147 | 146 |
| 148 const GURL& url() const { return url_; } | 147 const GURL& url() const { return url_; } |
| 149 scoped_refptr<net::X509Certificate> cert() { return cert_; } | 148 scoped_refptr<net::X509Certificate> cert() { return cert_; } |
| 150 MockWebsiteSettingsUI* mock_ui() { return mock_ui_.get(); } | 149 MockPageInfoUI* mock_ui() { return mock_ui_.get(); } |
| 151 const security_state::SecurityInfo& security_info() { return security_info_; } | 150 const security_state::SecurityInfo& security_info() { return security_info_; } |
| 152 const std::vector<std::unique_ptr<WebsiteSettingsUI::ChosenObjectInfo>>& | 151 const std::vector<std::unique_ptr<PageInfoUI::ChosenObjectInfo>>& |
| 153 last_chosen_object_info() { | 152 last_chosen_object_info() { |
| 154 return last_chosen_object_info_; | 153 return last_chosen_object_info_; |
| 155 } | 154 } |
| 156 TabSpecificContentSettings* tab_specific_content_settings() { | 155 TabSpecificContentSettings* tab_specific_content_settings() { |
| 157 return TabSpecificContentSettings::FromWebContents(web_contents()); | 156 return TabSpecificContentSettings::FromWebContents(web_contents()); |
| 158 } | 157 } |
| 159 InfoBarService* infobar_service() { | 158 InfoBarService* infobar_service() { |
| 160 return InfoBarService::FromWebContents(web_contents()); | 159 return InfoBarService::FromWebContents(web_contents()); |
| 161 } | 160 } |
| 162 | 161 |
| 163 WebsiteSettings* website_settings() { | 162 PageInfo* website_settings() { |
| 164 if (!website_settings_.get()) { | 163 if (!website_settings_.get()) { |
| 165 website_settings_.reset(new WebsiteSettings( | 164 website_settings_.reset( |
| 166 mock_ui(), profile(), tab_specific_content_settings(), web_contents(), | 165 new PageInfo(mock_ui(), profile(), tab_specific_content_settings(), |
| 167 url(), security_info())); | 166 web_contents(), url(), security_info())); |
| 168 } | 167 } |
| 169 return website_settings_.get(); | 168 return website_settings_.get(); |
| 170 } | 169 } |
| 171 | 170 |
| 172 device::MockUsbService& usb_service() { | 171 device::MockUsbService& usb_service() { |
| 173 return *device_client_.usb_service(); | 172 return *device_client_.usb_service(); |
| 174 } | 173 } |
| 175 | 174 |
| 176 security_state::SecurityInfo security_info_; | 175 security_state::SecurityInfo security_info_; |
| 177 | 176 |
| 178 private: | 177 private: |
| 179 device::MockDeviceClient device_client_; | 178 device::MockDeviceClient device_client_; |
| 180 std::unique_ptr<WebsiteSettings> website_settings_; | 179 std::unique_ptr<PageInfo> website_settings_; |
| 181 std::unique_ptr<MockWebsiteSettingsUI> mock_ui_; | 180 std::unique_ptr<MockPageInfoUI> mock_ui_; |
| 182 scoped_refptr<net::X509Certificate> cert_; | 181 scoped_refptr<net::X509Certificate> cert_; |
| 183 GURL url_; | 182 GURL url_; |
| 184 std::vector<std::unique_ptr<WebsiteSettingsUI::ChosenObjectInfo>> | 183 std::vector<std::unique_ptr<PageInfoUI::ChosenObjectInfo>> |
| 185 last_chosen_object_info_; | 184 last_chosen_object_info_; |
| 186 }; | 185 }; |
| 187 | 186 |
| 188 } // namespace | 187 } // namespace |
| 189 | 188 |
| 190 TEST_F(WebsiteSettingsTest, OnPermissionsChanged) { | 189 TEST_F(PageInfoTest, OnPermissionsChanged) { |
| 191 // Setup site permissions. | 190 // Setup site permissions. |
| 192 HostContentSettingsMap* content_settings = | 191 HostContentSettingsMap* content_settings = |
| 193 HostContentSettingsMapFactory::GetForProfile(profile()); | 192 HostContentSettingsMapFactory::GetForProfile(profile()); |
| 194 ContentSetting setting = content_settings->GetContentSetting( | 193 ContentSetting setting = content_settings->GetContentSetting( |
| 195 url(), url(), CONTENT_SETTINGS_TYPE_POPUPS, std::string()); | 194 url(), url(), CONTENT_SETTINGS_TYPE_POPUPS, std::string()); |
| 196 EXPECT_EQ(setting, CONTENT_SETTING_BLOCK); | 195 EXPECT_EQ(setting, CONTENT_SETTING_BLOCK); |
| 197 #if BUILDFLAG(ENABLE_PLUGINS) | 196 #if BUILDFLAG(ENABLE_PLUGINS) |
| 198 setting = content_settings->GetContentSetting( | 197 setting = content_settings->GetContentSetting( |
| 199 url(), url(), CONTENT_SETTINGS_TYPE_PLUGINS, std::string()); | 198 url(), url(), CONTENT_SETTINGS_TYPE_PLUGINS, std::string()); |
| 200 EXPECT_EQ(setting, CONTENT_SETTING_DETECT_IMPORTANT_CONTENT); | 199 EXPECT_EQ(setting, CONTENT_SETTING_DETECT_IMPORTANT_CONTENT); |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 256 url(), url(), CONTENT_SETTINGS_TYPE_NOTIFICATIONS, std::string()); | 255 url(), url(), CONTENT_SETTINGS_TYPE_NOTIFICATIONS, std::string()); |
| 257 EXPECT_EQ(setting, CONTENT_SETTING_ALLOW); | 256 EXPECT_EQ(setting, CONTENT_SETTING_ALLOW); |
| 258 setting = content_settings->GetContentSetting( | 257 setting = content_settings->GetContentSetting( |
| 259 url(), url(), CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC, std::string()); | 258 url(), url(), CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC, std::string()); |
| 260 EXPECT_EQ(setting, CONTENT_SETTING_ALLOW); | 259 EXPECT_EQ(setting, CONTENT_SETTING_ALLOW); |
| 261 setting = content_settings->GetContentSetting( | 260 setting = content_settings->GetContentSetting( |
| 262 url(), url(), CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA, std::string()); | 261 url(), url(), CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA, std::string()); |
| 263 EXPECT_EQ(setting, CONTENT_SETTING_ALLOW); | 262 EXPECT_EQ(setting, CONTENT_SETTING_ALLOW); |
| 264 } | 263 } |
| 265 | 264 |
| 266 TEST_F(WebsiteSettingsTest, OnSiteDataAccessed) { | 265 TEST_F(PageInfoTest, OnSiteDataAccessed) { |
| 267 EXPECT_CALL(*mock_ui(), SetPermissionInfoStub()); | 266 EXPECT_CALL(*mock_ui(), SetPermissionInfoStub()); |
| 268 EXPECT_CALL(*mock_ui(), SetIdentityInfo(_)); | 267 EXPECT_CALL(*mock_ui(), SetIdentityInfo(_)); |
| 269 EXPECT_CALL(*mock_ui(), SetCookieInfo(_)).Times(2); | 268 EXPECT_CALL(*mock_ui(), SetCookieInfo(_)).Times(2); |
| 270 | 269 |
| 271 website_settings()->OnSiteDataAccessed(); | 270 website_settings()->OnSiteDataAccessed(); |
| 272 } | 271 } |
| 273 | 272 |
| 274 TEST_F(WebsiteSettingsTest, OnChosenObjectDeleted) { | 273 TEST_F(PageInfoTest, OnChosenObjectDeleted) { |
| 275 scoped_refptr<device::UsbDevice> device = | 274 scoped_refptr<device::UsbDevice> device = |
| 276 new device::MockUsbDevice(0, 0, "Google", "Gizmo", "1234567890"); | 275 new device::MockUsbDevice(0, 0, "Google", "Gizmo", "1234567890"); |
| 277 usb_service().AddDevice(device); | 276 usb_service().AddDevice(device); |
| 278 UsbChooserContext* store = UsbChooserContextFactory::GetForProfile(profile()); | 277 UsbChooserContext* store = UsbChooserContextFactory::GetForProfile(profile()); |
| 279 store->GrantDevicePermission(url(), url(), device->guid()); | 278 store->GrantDevicePermission(url(), url(), device->guid()); |
| 280 | 279 |
| 281 EXPECT_CALL(*mock_ui(), SetIdentityInfo(_)); | 280 EXPECT_CALL(*mock_ui(), SetIdentityInfo(_)); |
| 282 EXPECT_CALL(*mock_ui(), SetCookieInfo(_)); | 281 EXPECT_CALL(*mock_ui(), SetCookieInfo(_)); |
| 283 | 282 |
| 284 // Access WebsiteSettings so that SetPermissionInfo is called once to populate | 283 // Access PageInfo so that SetPermissionInfo is called once to populate |
| 285 // |last_chosen_object_info_|. It will be called again by | 284 // |last_chosen_object_info_|. It will be called again by |
| 286 // OnSiteChosenObjectDeleted. | 285 // OnSiteChosenObjectDeleted. |
| 287 EXPECT_CALL(*mock_ui(), SetPermissionInfoStub()).Times(2); | 286 EXPECT_CALL(*mock_ui(), SetPermissionInfoStub()).Times(2); |
| 288 website_settings(); | 287 website_settings(); |
| 289 | 288 |
| 290 ASSERT_EQ(1u, last_chosen_object_info().size()); | 289 ASSERT_EQ(1u, last_chosen_object_info().size()); |
| 291 const WebsiteSettingsUI::ChosenObjectInfo* info = | 290 const PageInfoUI::ChosenObjectInfo* info = last_chosen_object_info()[0].get(); |
| 292 last_chosen_object_info()[0].get(); | |
| 293 website_settings()->OnSiteChosenObjectDeleted(info->ui_info, *info->object); | 291 website_settings()->OnSiteChosenObjectDeleted(info->ui_info, *info->object); |
| 294 | 292 |
| 295 EXPECT_FALSE(store->HasDevicePermission(url(), url(), device)); | 293 EXPECT_FALSE(store->HasDevicePermission(url(), url(), device)); |
| 296 EXPECT_EQ(0u, last_chosen_object_info().size()); | 294 EXPECT_EQ(0u, last_chosen_object_info().size()); |
| 297 } | 295 } |
| 298 | 296 |
| 299 TEST_F(WebsiteSettingsTest, Malware) { | 297 TEST_F(PageInfoTest, Malware) { |
| 300 security_info_.security_level = security_state::DANGEROUS; | 298 security_info_.security_level = security_state::DANGEROUS; |
| 301 security_info_.malicious_content_status = | 299 security_info_.malicious_content_status = |
| 302 security_state::MALICIOUS_CONTENT_STATUS_MALWARE; | 300 security_state::MALICIOUS_CONTENT_STATUS_MALWARE; |
| 303 SetDefaultUIExpectations(mock_ui()); | 301 SetDefaultUIExpectations(mock_ui()); |
| 304 | 302 |
| 305 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_UNENCRYPTED, | 303 EXPECT_EQ(PageInfo::SITE_CONNECTION_STATUS_UNENCRYPTED, |
| 306 website_settings()->site_connection_status()); | 304 website_settings()->site_connection_status()); |
| 307 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_MALWARE, | 305 EXPECT_EQ(PageInfo::SITE_IDENTITY_STATUS_MALWARE, |
| 308 website_settings()->site_identity_status()); | 306 website_settings()->site_identity_status()); |
| 309 } | 307 } |
| 310 | 308 |
| 311 TEST_F(WebsiteSettingsTest, SocialEngineering) { | 309 TEST_F(PageInfoTest, SocialEngineering) { |
| 312 security_info_.security_level = security_state::DANGEROUS; | 310 security_info_.security_level = security_state::DANGEROUS; |
| 313 security_info_.malicious_content_status = | 311 security_info_.malicious_content_status = |
| 314 security_state::MALICIOUS_CONTENT_STATUS_SOCIAL_ENGINEERING; | 312 security_state::MALICIOUS_CONTENT_STATUS_SOCIAL_ENGINEERING; |
| 315 SetDefaultUIExpectations(mock_ui()); | 313 SetDefaultUIExpectations(mock_ui()); |
| 316 | 314 |
| 317 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_UNENCRYPTED, | 315 EXPECT_EQ(PageInfo::SITE_CONNECTION_STATUS_UNENCRYPTED, |
| 318 website_settings()->site_connection_status()); | 316 website_settings()->site_connection_status()); |
| 319 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_SOCIAL_ENGINEERING, | 317 EXPECT_EQ(PageInfo::SITE_IDENTITY_STATUS_SOCIAL_ENGINEERING, |
| 320 website_settings()->site_identity_status()); | 318 website_settings()->site_identity_status()); |
| 321 } | 319 } |
| 322 | 320 |
| 323 TEST_F(WebsiteSettingsTest, UnwantedSoftware) { | 321 TEST_F(PageInfoTest, UnwantedSoftware) { |
| 324 security_info_.security_level = security_state::DANGEROUS; | 322 security_info_.security_level = security_state::DANGEROUS; |
| 325 security_info_.malicious_content_status = | 323 security_info_.malicious_content_status = |
| 326 security_state::MALICIOUS_CONTENT_STATUS_UNWANTED_SOFTWARE; | 324 security_state::MALICIOUS_CONTENT_STATUS_UNWANTED_SOFTWARE; |
| 327 SetDefaultUIExpectations(mock_ui()); | 325 SetDefaultUIExpectations(mock_ui()); |
| 328 | 326 |
| 329 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_UNENCRYPTED, | 327 EXPECT_EQ(PageInfo::SITE_CONNECTION_STATUS_UNENCRYPTED, |
| 330 website_settings()->site_connection_status()); | 328 website_settings()->site_connection_status()); |
| 331 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_UNWANTED_SOFTWARE, | 329 EXPECT_EQ(PageInfo::SITE_IDENTITY_STATUS_UNWANTED_SOFTWARE, |
| 332 website_settings()->site_identity_status()); | 330 website_settings()->site_identity_status()); |
| 333 } | 331 } |
| 334 | 332 |
| 335 TEST_F(WebsiteSettingsTest, HTTPConnection) { | 333 TEST_F(PageInfoTest, HTTPConnection) { |
| 336 SetDefaultUIExpectations(mock_ui()); | 334 SetDefaultUIExpectations(mock_ui()); |
| 337 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_UNENCRYPTED, | 335 EXPECT_EQ(PageInfo::SITE_CONNECTION_STATUS_UNENCRYPTED, |
| 338 website_settings()->site_connection_status()); | 336 website_settings()->site_connection_status()); |
| 339 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_NO_CERT, | 337 EXPECT_EQ(PageInfo::SITE_IDENTITY_STATUS_NO_CERT, |
| 340 website_settings()->site_identity_status()); | 338 website_settings()->site_identity_status()); |
| 341 EXPECT_EQ(base::string16(), website_settings()->organization_name()); | 339 EXPECT_EQ(base::string16(), website_settings()->organization_name()); |
| 342 } | 340 } |
| 343 | 341 |
| 344 TEST_F(WebsiteSettingsTest, HTTPSConnection) { | 342 TEST_F(PageInfoTest, HTTPSConnection) { |
| 345 security_info_.security_level = security_state::SECURE; | 343 security_info_.security_level = security_state::SECURE; |
| 346 security_info_.scheme_is_cryptographic = true; | 344 security_info_.scheme_is_cryptographic = true; |
| 347 security_info_.certificate = cert(); | 345 security_info_.certificate = cert(); |
| 348 security_info_.cert_status = 0; | 346 security_info_.cert_status = 0; |
| 349 security_info_.security_bits = 81; // No error if > 80. | 347 security_info_.security_bits = 81; // No error if > 80. |
| 350 int status = 0; | 348 int status = 0; |
| 351 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); | 349 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); |
| 352 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); | 350 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); |
| 353 security_info_.connection_status = status; | 351 security_info_.connection_status = status; |
| 354 | 352 |
| 355 SetDefaultUIExpectations(mock_ui()); | 353 SetDefaultUIExpectations(mock_ui()); |
| 356 | 354 |
| 357 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED, | 355 EXPECT_EQ(PageInfo::SITE_CONNECTION_STATUS_ENCRYPTED, |
| 358 website_settings()->site_connection_status()); | 356 website_settings()->site_connection_status()); |
| 359 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_CERT, | 357 EXPECT_EQ(PageInfo::SITE_IDENTITY_STATUS_CERT, |
| 360 website_settings()->site_identity_status()); | 358 website_settings()->site_identity_status()); |
| 361 EXPECT_EQ(base::string16(), website_settings()->organization_name()); | 359 EXPECT_EQ(base::string16(), website_settings()->organization_name()); |
| 362 } | 360 } |
| 363 | 361 |
| 364 TEST_F(WebsiteSettingsTest, InsecureContent) { | 362 TEST_F(PageInfoTest, InsecureContent) { |
| 365 struct TestCase { | 363 struct TestCase { |
| 366 security_state::SecurityLevel security_level; | 364 security_state::SecurityLevel security_level; |
| 367 net::CertStatus cert_status; | 365 net::CertStatus cert_status; |
| 368 security_state::ContentStatus mixed_content_status; | 366 security_state::ContentStatus mixed_content_status; |
| 369 security_state::ContentStatus content_with_cert_errors_status; | 367 security_state::ContentStatus content_with_cert_errors_status; |
| 370 WebsiteSettings::SiteConnectionStatus expected_site_connection_status; | 368 PageInfo::SiteConnectionStatus expected_site_connection_status; |
| 371 WebsiteSettings::SiteIdentityStatus expected_site_identity_status; | 369 PageInfo::SiteIdentityStatus expected_site_identity_status; |
| 372 int expected_connection_icon_id; | 370 int expected_connection_icon_id; |
| 373 }; | 371 }; |
| 374 | 372 |
| 375 const TestCase kTestCases[] = { | 373 const TestCase kTestCases[] = { |
| 376 // Passive mixed content. | 374 // Passive mixed content. |
| 377 {security_state::NONE, 0, security_state::CONTENT_STATUS_DISPLAYED, | 375 {security_state::NONE, 0, security_state::CONTENT_STATUS_DISPLAYED, |
| 378 security_state::CONTENT_STATUS_NONE, | 376 security_state::CONTENT_STATUS_NONE, |
| 379 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_PASSIVE_SUBRESOURCE, | 377 PageInfo::SITE_CONNECTION_STATUS_INSECURE_PASSIVE_SUBRESOURCE, |
| 380 WebsiteSettings::SITE_IDENTITY_STATUS_CERT, IDR_PAGEINFO_WARNING_MINOR}, | 378 PageInfo::SITE_IDENTITY_STATUS_CERT, IDR_PAGEINFO_WARNING_MINOR}, |
| 381 // Passive mixed content with a cert error on the main resource. | 379 // Passive mixed content with a cert error on the main resource. |
| 382 {security_state::DANGEROUS, net::CERT_STATUS_DATE_INVALID, | 380 {security_state::DANGEROUS, net::CERT_STATUS_DATE_INVALID, |
| 383 security_state::CONTENT_STATUS_DISPLAYED, | 381 security_state::CONTENT_STATUS_DISPLAYED, |
| 384 security_state::CONTENT_STATUS_NONE, | 382 security_state::CONTENT_STATUS_NONE, |
| 385 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_PASSIVE_SUBRESOURCE, | 383 PageInfo::SITE_CONNECTION_STATUS_INSECURE_PASSIVE_SUBRESOURCE, |
| 386 WebsiteSettings::SITE_IDENTITY_STATUS_ERROR, IDR_PAGEINFO_WARNING_MINOR}, | 384 PageInfo::SITE_IDENTITY_STATUS_ERROR, IDR_PAGEINFO_WARNING_MINOR}, |
| 387 // Active and passive mixed content. | 385 // Active and passive mixed content. |
| 388 {security_state::DANGEROUS, 0, | 386 {security_state::DANGEROUS, 0, |
| 389 security_state::CONTENT_STATUS_DISPLAYED_AND_RAN, | 387 security_state::CONTENT_STATUS_DISPLAYED_AND_RAN, |
| 390 security_state::CONTENT_STATUS_NONE, | 388 security_state::CONTENT_STATUS_NONE, |
| 391 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_ACTIVE_SUBRESOURCE, | 389 PageInfo::SITE_CONNECTION_STATUS_INSECURE_ACTIVE_SUBRESOURCE, |
| 392 WebsiteSettings::SITE_IDENTITY_STATUS_CERT, IDR_PAGEINFO_BAD}, | 390 PageInfo::SITE_IDENTITY_STATUS_CERT, IDR_PAGEINFO_BAD}, |
| 393 // Active and passive mixed content with a cert error on the main | 391 // Active and passive mixed content with a cert error on the main |
| 394 // resource. | 392 // resource. |
| 395 {security_state::DANGEROUS, net::CERT_STATUS_DATE_INVALID, | 393 {security_state::DANGEROUS, net::CERT_STATUS_DATE_INVALID, |
| 396 security_state::CONTENT_STATUS_DISPLAYED_AND_RAN, | 394 security_state::CONTENT_STATUS_DISPLAYED_AND_RAN, |
| 397 security_state::CONTENT_STATUS_NONE, | 395 security_state::CONTENT_STATUS_NONE, |
| 398 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_ACTIVE_SUBRESOURCE, | 396 PageInfo::SITE_CONNECTION_STATUS_INSECURE_ACTIVE_SUBRESOURCE, |
| 399 WebsiteSettings::SITE_IDENTITY_STATUS_ERROR, IDR_PAGEINFO_BAD}, | 397 PageInfo::SITE_IDENTITY_STATUS_ERROR, IDR_PAGEINFO_BAD}, |
| 400 // Active mixed content. | 398 // Active mixed content. |
| 401 {security_state::DANGEROUS, 0, security_state::CONTENT_STATUS_RAN, | 399 {security_state::DANGEROUS, 0, security_state::CONTENT_STATUS_RAN, |
| 402 security_state::CONTENT_STATUS_NONE, | 400 security_state::CONTENT_STATUS_NONE, |
| 403 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_ACTIVE_SUBRESOURCE, | 401 PageInfo::SITE_CONNECTION_STATUS_INSECURE_ACTIVE_SUBRESOURCE, |
| 404 WebsiteSettings::SITE_IDENTITY_STATUS_CERT, IDR_PAGEINFO_BAD}, | 402 PageInfo::SITE_IDENTITY_STATUS_CERT, IDR_PAGEINFO_BAD}, |
| 405 // Active mixed content with a cert error on the main resource. | 403 // Active mixed content with a cert error on the main resource. |
| 406 {security_state::DANGEROUS, net::CERT_STATUS_DATE_INVALID, | 404 {security_state::DANGEROUS, net::CERT_STATUS_DATE_INVALID, |
| 407 security_state::CONTENT_STATUS_RAN, security_state::CONTENT_STATUS_NONE, | 405 security_state::CONTENT_STATUS_RAN, security_state::CONTENT_STATUS_NONE, |
| 408 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_ACTIVE_SUBRESOURCE, | 406 PageInfo::SITE_CONNECTION_STATUS_INSECURE_ACTIVE_SUBRESOURCE, |
| 409 WebsiteSettings::SITE_IDENTITY_STATUS_ERROR, IDR_PAGEINFO_BAD}, | 407 PageInfo::SITE_IDENTITY_STATUS_ERROR, IDR_PAGEINFO_BAD}, |
| 410 | 408 |
| 411 // Passive subresources with cert errors. | 409 // Passive subresources with cert errors. |
| 412 {security_state::NONE, 0, security_state::CONTENT_STATUS_NONE, | 410 {security_state::NONE, 0, security_state::CONTENT_STATUS_NONE, |
| 413 security_state::CONTENT_STATUS_DISPLAYED, | 411 security_state::CONTENT_STATUS_DISPLAYED, |
| 414 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_PASSIVE_SUBRESOURCE, | 412 PageInfo::SITE_CONNECTION_STATUS_INSECURE_PASSIVE_SUBRESOURCE, |
| 415 WebsiteSettings::SITE_IDENTITY_STATUS_CERT, IDR_PAGEINFO_WARNING_MINOR}, | 413 PageInfo::SITE_IDENTITY_STATUS_CERT, IDR_PAGEINFO_WARNING_MINOR}, |
| 416 // Passive subresources with cert errors, with a cert error on the | 414 // Passive subresources with cert errors, with a cert error on the |
| 417 // main resource also. In this case, the subresources with | 415 // main resource also. In this case, the subresources with |
| 418 // certificate errors are ignored: if the main resource had a cert | 416 // certificate errors are ignored: if the main resource had a cert |
| 419 // error, it's not that useful to warn about subresources with cert | 417 // error, it's not that useful to warn about subresources with cert |
| 420 // errors as well. | 418 // errors as well. |
| 421 {security_state::DANGEROUS, net::CERT_STATUS_DATE_INVALID, | 419 {security_state::DANGEROUS, net::CERT_STATUS_DATE_INVALID, |
| 422 security_state::CONTENT_STATUS_NONE, | 420 security_state::CONTENT_STATUS_NONE, |
| 423 security_state::CONTENT_STATUS_DISPLAYED, | 421 security_state::CONTENT_STATUS_DISPLAYED, |
| 424 WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED, | 422 PageInfo::SITE_CONNECTION_STATUS_ENCRYPTED, |
| 425 WebsiteSettings::SITE_IDENTITY_STATUS_ERROR, IDR_PAGEINFO_GOOD}, | 423 PageInfo::SITE_IDENTITY_STATUS_ERROR, IDR_PAGEINFO_GOOD}, |
| 426 // Passive and active subresources with cert errors. | 424 // Passive and active subresources with cert errors. |
| 427 {security_state::DANGEROUS, 0, security_state::CONTENT_STATUS_NONE, | 425 {security_state::DANGEROUS, 0, security_state::CONTENT_STATUS_NONE, |
| 428 security_state::CONTENT_STATUS_DISPLAYED_AND_RAN, | 426 security_state::CONTENT_STATUS_DISPLAYED_AND_RAN, |
| 429 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_ACTIVE_SUBRESOURCE, | 427 PageInfo::SITE_CONNECTION_STATUS_INSECURE_ACTIVE_SUBRESOURCE, |
| 430 WebsiteSettings::SITE_IDENTITY_STATUS_CERT, IDR_PAGEINFO_BAD}, | 428 PageInfo::SITE_IDENTITY_STATUS_CERT, IDR_PAGEINFO_BAD}, |
| 431 // Passive and active subresources with cert errors, with a cert | 429 // Passive and active subresources with cert errors, with a cert |
| 432 // error on the main resource also. | 430 // error on the main resource also. |
| 433 {security_state::DANGEROUS, net::CERT_STATUS_DATE_INVALID, | 431 {security_state::DANGEROUS, net::CERT_STATUS_DATE_INVALID, |
| 434 security_state::CONTENT_STATUS_NONE, | 432 security_state::CONTENT_STATUS_NONE, |
| 435 security_state::CONTENT_STATUS_DISPLAYED_AND_RAN, | 433 security_state::CONTENT_STATUS_DISPLAYED_AND_RAN, |
| 436 WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED, | 434 PageInfo::SITE_CONNECTION_STATUS_ENCRYPTED, |
| 437 WebsiteSettings::SITE_IDENTITY_STATUS_ERROR, IDR_PAGEINFO_GOOD}, | 435 PageInfo::SITE_IDENTITY_STATUS_ERROR, IDR_PAGEINFO_GOOD}, |
| 438 // Active subresources with cert errors. | 436 // Active subresources with cert errors. |
| 439 {security_state::DANGEROUS, 0, security_state::CONTENT_STATUS_NONE, | 437 {security_state::DANGEROUS, 0, security_state::CONTENT_STATUS_NONE, |
| 440 security_state::CONTENT_STATUS_RAN, | 438 security_state::CONTENT_STATUS_RAN, |
| 441 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_ACTIVE_SUBRESOURCE, | 439 PageInfo::SITE_CONNECTION_STATUS_INSECURE_ACTIVE_SUBRESOURCE, |
| 442 WebsiteSettings::SITE_IDENTITY_STATUS_CERT, IDR_PAGEINFO_BAD}, | 440 PageInfo::SITE_IDENTITY_STATUS_CERT, IDR_PAGEINFO_BAD}, |
| 443 // Active subresources with cert errors, with a cert error on the main | 441 // Active subresources with cert errors, with a cert error on the main |
| 444 // resource also. | 442 // resource also. |
| 445 {security_state::DANGEROUS, net::CERT_STATUS_DATE_INVALID, | 443 {security_state::DANGEROUS, net::CERT_STATUS_DATE_INVALID, |
| 446 security_state::CONTENT_STATUS_NONE, security_state::CONTENT_STATUS_RAN, | 444 security_state::CONTENT_STATUS_NONE, security_state::CONTENT_STATUS_RAN, |
| 447 WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED, | 445 PageInfo::SITE_CONNECTION_STATUS_ENCRYPTED, |
| 448 WebsiteSettings::SITE_IDENTITY_STATUS_ERROR, IDR_PAGEINFO_GOOD}, | 446 PageInfo::SITE_IDENTITY_STATUS_ERROR, IDR_PAGEINFO_GOOD}, |
| 449 | 447 |
| 450 // Passive mixed content and subresources with cert errors. | 448 // Passive mixed content and subresources with cert errors. |
| 451 {security_state::NONE, 0, security_state::CONTENT_STATUS_DISPLAYED, | 449 {security_state::NONE, 0, security_state::CONTENT_STATUS_DISPLAYED, |
| 452 security_state::CONTENT_STATUS_DISPLAYED, | 450 security_state::CONTENT_STATUS_DISPLAYED, |
| 453 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_PASSIVE_SUBRESOURCE, | 451 PageInfo::SITE_CONNECTION_STATUS_INSECURE_PASSIVE_SUBRESOURCE, |
| 454 WebsiteSettings::SITE_IDENTITY_STATUS_CERT, IDR_PAGEINFO_WARNING_MINOR}, | 452 PageInfo::SITE_IDENTITY_STATUS_CERT, IDR_PAGEINFO_WARNING_MINOR}, |
| 455 // Passive mixed content and active subresources with cert errors. | 453 // Passive mixed content and active subresources with cert errors. |
| 456 {security_state::DANGEROUS, 0, security_state::CONTENT_STATUS_DISPLAYED, | 454 {security_state::DANGEROUS, 0, security_state::CONTENT_STATUS_DISPLAYED, |
| 457 security_state::CONTENT_STATUS_RAN, | 455 security_state::CONTENT_STATUS_RAN, |
| 458 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_ACTIVE_SUBRESOURCE, | 456 PageInfo::SITE_CONNECTION_STATUS_INSECURE_ACTIVE_SUBRESOURCE, |
| 459 WebsiteSettings::SITE_IDENTITY_STATUS_CERT, IDR_PAGEINFO_BAD}, | 457 PageInfo::SITE_IDENTITY_STATUS_CERT, IDR_PAGEINFO_BAD}, |
| 460 // Active mixed content and passive subresources with cert errors. | 458 // Active mixed content and passive subresources with cert errors. |
| 461 {security_state::DANGEROUS, 0, security_state::CONTENT_STATUS_RAN, | 459 {security_state::DANGEROUS, 0, security_state::CONTENT_STATUS_RAN, |
| 462 security_state::CONTENT_STATUS_DISPLAYED, | 460 security_state::CONTENT_STATUS_DISPLAYED, |
| 463 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_ACTIVE_SUBRESOURCE, | 461 PageInfo::SITE_CONNECTION_STATUS_INSECURE_ACTIVE_SUBRESOURCE, |
| 464 WebsiteSettings::SITE_IDENTITY_STATUS_CERT, IDR_PAGEINFO_BAD}, | 462 PageInfo::SITE_IDENTITY_STATUS_CERT, IDR_PAGEINFO_BAD}, |
| 465 // Passive mixed content, active subresources with cert errors, and a cert | 463 // Passive mixed content, active subresources with cert errors, and a cert |
| 466 // error on the main resource. | 464 // error on the main resource. |
| 467 {security_state::DANGEROUS, net::CERT_STATUS_DATE_INVALID, | 465 {security_state::DANGEROUS, net::CERT_STATUS_DATE_INVALID, |
| 468 security_state::CONTENT_STATUS_DISPLAYED, | 466 security_state::CONTENT_STATUS_DISPLAYED, |
| 469 security_state::CONTENT_STATUS_RAN, | 467 security_state::CONTENT_STATUS_RAN, |
| 470 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_PASSIVE_SUBRESOURCE, | 468 PageInfo::SITE_CONNECTION_STATUS_INSECURE_PASSIVE_SUBRESOURCE, |
| 471 WebsiteSettings::SITE_IDENTITY_STATUS_ERROR, IDR_PAGEINFO_WARNING_MINOR}, | 469 PageInfo::SITE_IDENTITY_STATUS_ERROR, IDR_PAGEINFO_WARNING_MINOR}, |
| 472 }; | 470 }; |
| 473 | 471 |
| 474 for (const auto& test : kTestCases) { | 472 for (const auto& test : kTestCases) { |
| 475 ResetMockUI(); | 473 ResetMockUI(); |
| 476 ClearWebsiteSettings(); | 474 ClearPageInfo(); |
| 477 security_info_ = security_state::SecurityInfo(); | 475 security_info_ = security_state::SecurityInfo(); |
| 478 security_info_.security_level = test.security_level; | 476 security_info_.security_level = test.security_level; |
| 479 security_info_.scheme_is_cryptographic = true; | 477 security_info_.scheme_is_cryptographic = true; |
| 480 security_info_.certificate = cert(); | 478 security_info_.certificate = cert(); |
| 481 security_info_.cert_status = test.cert_status; | 479 security_info_.cert_status = test.cert_status; |
| 482 security_info_.security_bits = 81; // No error if > 80. | 480 security_info_.security_bits = 81; // No error if > 80. |
| 483 security_info_.mixed_content_status = test.mixed_content_status; | 481 security_info_.mixed_content_status = test.mixed_content_status; |
| 484 security_info_.content_with_cert_errors_status = | 482 security_info_.content_with_cert_errors_status = |
| 485 test.content_with_cert_errors_status; | 483 test.content_with_cert_errors_status; |
| 486 int status = 0; | 484 int status = 0; |
| 487 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); | 485 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); |
| 488 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); | 486 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); |
| 489 security_info_.connection_status = status; | 487 security_info_.connection_status = status; |
| 490 | 488 |
| 491 SetDefaultUIExpectations(mock_ui()); | 489 SetDefaultUIExpectations(mock_ui()); |
| 492 | 490 |
| 493 EXPECT_EQ(test.expected_site_connection_status, | 491 EXPECT_EQ(test.expected_site_connection_status, |
| 494 website_settings()->site_connection_status()); | 492 website_settings()->site_connection_status()); |
| 495 EXPECT_EQ(test.expected_site_identity_status, | 493 EXPECT_EQ(test.expected_site_identity_status, |
| 496 website_settings()->site_identity_status()); | 494 website_settings()->site_identity_status()); |
| 497 EXPECT_EQ(test.expected_connection_icon_id, | 495 EXPECT_EQ(test.expected_connection_icon_id, |
| 498 WebsiteSettingsUI::GetConnectionIconID( | 496 PageInfoUI::GetConnectionIconID( |
| 499 website_settings()->site_connection_status())); | 497 website_settings()->site_connection_status())); |
| 500 EXPECT_EQ(base::string16(), website_settings()->organization_name()); | 498 EXPECT_EQ(base::string16(), website_settings()->organization_name()); |
| 501 } | 499 } |
| 502 } | 500 } |
| 503 | 501 |
| 504 TEST_F(WebsiteSettingsTest, HTTPSEVCert) { | 502 TEST_F(PageInfoTest, HTTPSEVCert) { |
| 505 scoped_refptr<net::X509Certificate> ev_cert = | 503 scoped_refptr<net::X509Certificate> ev_cert = |
| 506 net::X509Certificate::CreateFromBytes( | 504 net::X509Certificate::CreateFromBytes( |
| 507 reinterpret_cast<const char*>(google_der), sizeof(google_der)); | 505 reinterpret_cast<const char*>(google_der), sizeof(google_der)); |
| 508 | 506 |
| 509 security_info_.security_level = security_state::NONE; | 507 security_info_.security_level = security_state::NONE; |
| 510 security_info_.scheme_is_cryptographic = true; | 508 security_info_.scheme_is_cryptographic = true; |
| 511 security_info_.certificate = ev_cert; | 509 security_info_.certificate = ev_cert; |
| 512 security_info_.cert_status = net::CERT_STATUS_IS_EV; | 510 security_info_.cert_status = net::CERT_STATUS_IS_EV; |
| 513 security_info_.security_bits = 81; // No error if > 80. | 511 security_info_.security_bits = 81; // No error if > 80. |
| 514 security_info_.mixed_content_status = | 512 security_info_.mixed_content_status = |
| 515 security_state::CONTENT_STATUS_DISPLAYED; | 513 security_state::CONTENT_STATUS_DISPLAYED; |
| 516 int status = 0; | 514 int status = 0; |
| 517 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); | 515 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); |
| 518 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); | 516 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); |
| 519 security_info_.connection_status = status; | 517 security_info_.connection_status = status; |
| 520 | 518 |
| 521 SetDefaultUIExpectations(mock_ui()); | 519 SetDefaultUIExpectations(mock_ui()); |
| 522 | 520 |
| 523 EXPECT_EQ( | 521 EXPECT_EQ(PageInfo::SITE_CONNECTION_STATUS_INSECURE_PASSIVE_SUBRESOURCE, |
| 524 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_PASSIVE_SUBRESOURCE, | 522 website_settings()->site_connection_status()); |
| 525 website_settings()->site_connection_status()); | 523 EXPECT_EQ(PageInfo::SITE_IDENTITY_STATUS_EV_CERT, |
| 526 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_EV_CERT, | |
| 527 website_settings()->site_identity_status()); | 524 website_settings()->site_identity_status()); |
| 528 EXPECT_EQ(base::UTF8ToUTF16("Google Inc"), | 525 EXPECT_EQ(base::UTF8ToUTF16("Google Inc"), |
| 529 website_settings()->organization_name()); | 526 website_settings()->organization_name()); |
| 530 } | 527 } |
| 531 | 528 |
| 532 TEST_F(WebsiteSettingsTest, HTTPSRevocationError) { | 529 TEST_F(PageInfoTest, HTTPSRevocationError) { |
| 533 security_info_.security_level = security_state::SECURE; | 530 security_info_.security_level = security_state::SECURE; |
| 534 security_info_.scheme_is_cryptographic = true; | 531 security_info_.scheme_is_cryptographic = true; |
| 535 security_info_.certificate = cert(); | 532 security_info_.certificate = cert(); |
| 536 security_info_.cert_status = net::CERT_STATUS_UNABLE_TO_CHECK_REVOCATION; | 533 security_info_.cert_status = net::CERT_STATUS_UNABLE_TO_CHECK_REVOCATION; |
| 537 security_info_.security_bits = 81; // No error if > 80. | 534 security_info_.security_bits = 81; // No error if > 80. |
| 538 int status = 0; | 535 int status = 0; |
| 539 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); | 536 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); |
| 540 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); | 537 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); |
| 541 security_info_.connection_status = status; | 538 security_info_.connection_status = status; |
| 542 | 539 |
| 543 SetDefaultUIExpectations(mock_ui()); | 540 SetDefaultUIExpectations(mock_ui()); |
| 544 | 541 |
| 545 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED, | 542 EXPECT_EQ(PageInfo::SITE_CONNECTION_STATUS_ENCRYPTED, |
| 546 website_settings()->site_connection_status()); | 543 website_settings()->site_connection_status()); |
| 547 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_CERT_REVOCATION_UNKNOWN, | 544 EXPECT_EQ(PageInfo::SITE_IDENTITY_STATUS_CERT_REVOCATION_UNKNOWN, |
| 548 website_settings()->site_identity_status()); | 545 website_settings()->site_identity_status()); |
| 549 EXPECT_EQ(base::string16(), website_settings()->organization_name()); | 546 EXPECT_EQ(base::string16(), website_settings()->organization_name()); |
| 550 } | 547 } |
| 551 | 548 |
| 552 TEST_F(WebsiteSettingsTest, HTTPSConnectionError) { | 549 TEST_F(PageInfoTest, HTTPSConnectionError) { |
| 553 security_info_.security_level = security_state::SECURE; | 550 security_info_.security_level = security_state::SECURE; |
| 554 security_info_.scheme_is_cryptographic = true; | 551 security_info_.scheme_is_cryptographic = true; |
| 555 security_info_.certificate = cert(); | 552 security_info_.certificate = cert(); |
| 556 security_info_.cert_status = 0; | 553 security_info_.cert_status = 0; |
| 557 security_info_.security_bits = -1; | 554 security_info_.security_bits = -1; |
| 558 int status = 0; | 555 int status = 0; |
| 559 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); | 556 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); |
| 560 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); | 557 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); |
| 561 security_info_.connection_status = status; | 558 security_info_.connection_status = status; |
| 562 | 559 |
| 563 SetDefaultUIExpectations(mock_ui()); | 560 SetDefaultUIExpectations(mock_ui()); |
| 564 | 561 |
| 565 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED_ERROR, | 562 EXPECT_EQ(PageInfo::SITE_CONNECTION_STATUS_ENCRYPTED_ERROR, |
| 566 website_settings()->site_connection_status()); | 563 website_settings()->site_connection_status()); |
| 567 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_CERT, | 564 EXPECT_EQ(PageInfo::SITE_IDENTITY_STATUS_CERT, |
| 568 website_settings()->site_identity_status()); | 565 website_settings()->site_identity_status()); |
| 569 EXPECT_EQ(base::string16(), website_settings()->organization_name()); | 566 EXPECT_EQ(base::string16(), website_settings()->organization_name()); |
| 570 } | 567 } |
| 571 | 568 |
| 572 TEST_F(WebsiteSettingsTest, HTTPSPolicyCertConnection) { | 569 TEST_F(PageInfoTest, HTTPSPolicyCertConnection) { |
| 573 security_info_.security_level = | 570 security_info_.security_level = |
| 574 security_state::SECURE_WITH_POLICY_INSTALLED_CERT; | 571 security_state::SECURE_WITH_POLICY_INSTALLED_CERT; |
| 575 security_info_.scheme_is_cryptographic = true; | 572 security_info_.scheme_is_cryptographic = true; |
| 576 security_info_.certificate = cert(); | 573 security_info_.certificate = cert(); |
| 577 security_info_.cert_status = 0; | 574 security_info_.cert_status = 0; |
| 578 security_info_.security_bits = 81; // No error if > 80. | 575 security_info_.security_bits = 81; // No error if > 80. |
| 579 int status = 0; | 576 int status = 0; |
| 580 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); | 577 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); |
| 581 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); | 578 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); |
| 582 security_info_.connection_status = status; | 579 security_info_.connection_status = status; |
| 583 | 580 |
| 584 SetDefaultUIExpectations(mock_ui()); | 581 SetDefaultUIExpectations(mock_ui()); |
| 585 | 582 |
| 586 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED, | 583 EXPECT_EQ(PageInfo::SITE_CONNECTION_STATUS_ENCRYPTED, |
| 587 website_settings()->site_connection_status()); | 584 website_settings()->site_connection_status()); |
| 588 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_ADMIN_PROVIDED_CERT, | 585 EXPECT_EQ(PageInfo::SITE_IDENTITY_STATUS_ADMIN_PROVIDED_CERT, |
| 589 website_settings()->site_identity_status()); | 586 website_settings()->site_identity_status()); |
| 590 EXPECT_EQ(base::string16(), website_settings()->organization_name()); | 587 EXPECT_EQ(base::string16(), website_settings()->organization_name()); |
| 591 } | 588 } |
| 592 | 589 |
| 593 TEST_F(WebsiteSettingsTest, HTTPSSHA1) { | 590 TEST_F(PageInfoTest, HTTPSSHA1) { |
| 594 security_info_.security_level = security_state::NONE; | 591 security_info_.security_level = security_state::NONE; |
| 595 security_info_.scheme_is_cryptographic = true; | 592 security_info_.scheme_is_cryptographic = true; |
| 596 security_info_.certificate = cert(); | 593 security_info_.certificate = cert(); |
| 597 security_info_.cert_status = 0; | 594 security_info_.cert_status = 0; |
| 598 security_info_.security_bits = 81; // No error if > 80. | 595 security_info_.security_bits = 81; // No error if > 80. |
| 599 int status = 0; | 596 int status = 0; |
| 600 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); | 597 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); |
| 601 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); | 598 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); |
| 602 security_info_.connection_status = status; | 599 security_info_.connection_status = status; |
| 603 security_info_.sha1_in_chain = true; | 600 security_info_.sha1_in_chain = true; |
| 604 | 601 |
| 605 SetDefaultUIExpectations(mock_ui()); | 602 SetDefaultUIExpectations(mock_ui()); |
| 606 | 603 |
| 607 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED, | 604 EXPECT_EQ(PageInfo::SITE_CONNECTION_STATUS_ENCRYPTED, |
| 608 website_settings()->site_connection_status()); | 605 website_settings()->site_connection_status()); |
| 609 EXPECT_EQ( | 606 EXPECT_EQ(PageInfo::SITE_IDENTITY_STATUS_DEPRECATED_SIGNATURE_ALGORITHM, |
| 610 WebsiteSettings::SITE_IDENTITY_STATUS_DEPRECATED_SIGNATURE_ALGORITHM, | 607 website_settings()->site_identity_status()); |
| 611 website_settings()->site_identity_status()); | |
| 612 EXPECT_EQ(base::string16(), website_settings()->organization_name()); | 608 EXPECT_EQ(base::string16(), website_settings()->organization_name()); |
| 613 EXPECT_EQ(IDR_PAGEINFO_WARNING_MINOR, | 609 EXPECT_EQ(IDR_PAGEINFO_WARNING_MINOR, |
| 614 WebsiteSettingsUI::GetIdentityIconID( | 610 PageInfoUI::GetIdentityIconID( |
| 615 website_settings()->site_identity_status())); | 611 website_settings()->site_identity_status())); |
| 616 } | 612 } |
| 617 | 613 |
| 618 #if !defined(OS_ANDROID) | 614 #if !defined(OS_ANDROID) |
| 619 TEST_F(WebsiteSettingsTest, NoInfoBar) { | 615 TEST_F(PageInfoTest, NoInfoBar) { |
| 620 SetDefaultUIExpectations(mock_ui()); | 616 SetDefaultUIExpectations(mock_ui()); |
| 621 EXPECT_EQ(0u, infobar_service()->infobar_count()); | 617 EXPECT_EQ(0u, infobar_service()->infobar_count()); |
| 622 website_settings()->OnUIClosing(); | 618 website_settings()->OnUIClosing(); |
| 623 EXPECT_EQ(0u, infobar_service()->infobar_count()); | 619 EXPECT_EQ(0u, infobar_service()->infobar_count()); |
| 624 } | 620 } |
| 625 | 621 |
| 626 TEST_F(WebsiteSettingsTest, ShowInfoBar) { | 622 TEST_F(PageInfoTest, ShowInfoBar) { |
| 627 EXPECT_CALL(*mock_ui(), SetIdentityInfo(_)); | 623 EXPECT_CALL(*mock_ui(), SetIdentityInfo(_)); |
| 628 EXPECT_CALL(*mock_ui(), SetCookieInfo(_)); | 624 EXPECT_CALL(*mock_ui(), SetCookieInfo(_)); |
| 629 | 625 |
| 630 EXPECT_CALL(*mock_ui(), SetPermissionInfoStub()).Times(2); | 626 EXPECT_CALL(*mock_ui(), SetPermissionInfoStub()).Times(2); |
| 631 | 627 |
| 632 EXPECT_EQ(0u, infobar_service()->infobar_count()); | 628 EXPECT_EQ(0u, infobar_service()->infobar_count()); |
| 633 website_settings()->OnSitePermissionChanged(CONTENT_SETTINGS_TYPE_GEOLOCATION, | 629 website_settings()->OnSitePermissionChanged(CONTENT_SETTINGS_TYPE_GEOLOCATION, |
| 634 CONTENT_SETTING_ALLOW); | 630 CONTENT_SETTING_ALLOW); |
| 635 website_settings()->OnUIClosing(); | 631 website_settings()->OnUIClosing(); |
| 636 ASSERT_EQ(1u, infobar_service()->infobar_count()); | 632 ASSERT_EQ(1u, infobar_service()->infobar_count()); |
| 637 | 633 |
| 638 infobar_service()->RemoveInfoBar(infobar_service()->infobar_at(0)); | 634 infobar_service()->RemoveInfoBar(infobar_service()->infobar_at(0)); |
| 639 } | 635 } |
| 640 #endif | 636 #endif |
| 641 | 637 |
| 642 TEST_F(WebsiteSettingsTest, AboutBlankPage) { | 638 TEST_F(PageInfoTest, AboutBlankPage) { |
| 643 SetURL("about:blank"); | 639 SetURL("about:blank"); |
| 644 SetDefaultUIExpectations(mock_ui()); | 640 SetDefaultUIExpectations(mock_ui()); |
| 645 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_UNENCRYPTED, | 641 EXPECT_EQ(PageInfo::SITE_CONNECTION_STATUS_UNENCRYPTED, |
| 646 website_settings()->site_connection_status()); | 642 website_settings()->site_connection_status()); |
| 647 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_NO_CERT, | 643 EXPECT_EQ(PageInfo::SITE_IDENTITY_STATUS_NO_CERT, |
| 648 website_settings()->site_identity_status()); | 644 website_settings()->site_identity_status()); |
| 649 EXPECT_EQ(base::string16(), website_settings()->organization_name()); | 645 EXPECT_EQ(base::string16(), website_settings()->organization_name()); |
| 650 } | 646 } |
| 651 | 647 |
| 652 // On desktop, internal URLs aren't handled by WebsiteSettings class. Instead, a | 648 // On desktop, internal URLs aren't handled by PageInfo class. Instead, a |
| 653 // custom and simpler popup is shown, so no need to test. | 649 // custom and simpler popup is shown, so no need to test. |
| 654 #if defined(OS_ANDROID) || defined(OS_IOS) | 650 #if defined(OS_ANDROID) || defined(OS_IOS) |
| 655 TEST_F(WebsiteSettingsTest, InternalPage) { | 651 TEST_F(PageInfoTest, InternalPage) { |
| 656 SetURL("chrome://bookmarks"); | 652 SetURL("chrome://bookmarks"); |
| 657 SetDefaultUIExpectations(mock_ui()); | 653 SetDefaultUIExpectations(mock_ui()); |
| 658 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_INTERNAL_PAGE, | 654 EXPECT_EQ(PageInfo::SITE_CONNECTION_STATUS_INTERNAL_PAGE, |
| 659 website_settings()->site_connection_status()); | 655 website_settings()->site_connection_status()); |
| 660 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_INTERNAL_PAGE, | 656 EXPECT_EQ(PageInfo::SITE_IDENTITY_STATUS_INTERNAL_PAGE, |
| 661 website_settings()->site_identity_status()); | 657 website_settings()->site_identity_status()); |
| 662 EXPECT_EQ(base::string16(), website_settings()->organization_name()); | 658 EXPECT_EQ(base::string16(), website_settings()->organization_name()); |
| 663 } | 659 } |
| 664 #endif | 660 #endif |
| 665 | 661 |
| 666 // Tests that metrics are recorded on a WebsiteSettings for pages with | 662 // Tests that metrics are recorded on a PageInfo for pages with |
| 667 // various security levels. | 663 // various security levels. |
| 668 TEST_F(WebsiteSettingsTest, SecurityLevelMetrics) { | 664 TEST_F(PageInfoTest, SecurityLevelMetrics) { |
| 669 struct TestCase { | 665 struct TestCase { |
| 670 const std::string url; | 666 const std::string url; |
| 671 const security_state::SecurityLevel security_level; | 667 const security_state::SecurityLevel security_level; |
| 672 const std::string histogram_name; | 668 const std::string histogram_name; |
| 673 }; | 669 }; |
| 674 const char kGenericHistogram[] = "WebsiteSettings.Action"; | 670 const char kGenericHistogram[] = "WebsiteSettings.Action"; |
| 675 | 671 |
| 676 const TestCase kTestCases[] = { | 672 const TestCase kTestCases[] = { |
| 677 {"https://example.test", security_state::SECURE, | 673 {"https://example.test", security_state::SECURE, |
| 678 "Security.PageInfo.Action.HttpsUrl.Valid"}, | 674 "Security.PageInfo.Action.HttpsUrl.Valid"}, |
| 679 {"https://example.test", security_state::EV_SECURE, | 675 {"https://example.test", security_state::EV_SECURE, |
| 680 "Security.PageInfo.Action.HttpsUrl.Valid"}, | 676 "Security.PageInfo.Action.HttpsUrl.Valid"}, |
| 681 {"https://example2.test", security_state::NONE, | 677 {"https://example2.test", security_state::NONE, |
| 682 "Security.PageInfo.Action.HttpsUrl.Downgraded"}, | 678 "Security.PageInfo.Action.HttpsUrl.Downgraded"}, |
| 683 {"https://example.test", security_state::DANGEROUS, | 679 {"https://example.test", security_state::DANGEROUS, |
| 684 "Security.PageInfo.Action.HttpsUrl.Dangerous"}, | 680 "Security.PageInfo.Action.HttpsUrl.Dangerous"}, |
| 685 {"http://example.test", security_state::HTTP_SHOW_WARNING, | 681 {"http://example.test", security_state::HTTP_SHOW_WARNING, |
| 686 "Security.PageInfo.Action.HttpUrl.Warning"}, | 682 "Security.PageInfo.Action.HttpUrl.Warning"}, |
| 687 {"http://example.test", security_state::DANGEROUS, | 683 {"http://example.test", security_state::DANGEROUS, |
| 688 "Security.PageInfo.Action.HttpUrl.Dangerous"}, | 684 "Security.PageInfo.Action.HttpUrl.Dangerous"}, |
| 689 {"http://example.test", security_state::NONE, | 685 {"http://example.test", security_state::NONE, |
| 690 "Security.PageInfo.Action.HttpUrl.Neutral"}, | 686 "Security.PageInfo.Action.HttpUrl.Neutral"}, |
| 691 }; | 687 }; |
| 692 | 688 |
| 693 for (const auto& test : kTestCases) { | 689 for (const auto& test : kTestCases) { |
| 694 base::HistogramTester histograms; | 690 base::HistogramTester histograms; |
| 695 SetURL(test.url); | 691 SetURL(test.url); |
| 696 security_info_.security_level = test.security_level; | 692 security_info_.security_level = test.security_level; |
| 697 ResetMockUI(); | 693 ResetMockUI(); |
| 698 ClearWebsiteSettings(); | 694 ClearPageInfo(); |
| 699 SetDefaultUIExpectations(mock_ui()); | 695 SetDefaultUIExpectations(mock_ui()); |
| 700 | 696 |
| 701 histograms.ExpectTotalCount(kGenericHistogram, 0); | 697 histograms.ExpectTotalCount(kGenericHistogram, 0); |
| 702 histograms.ExpectTotalCount(test.histogram_name, 0); | 698 histograms.ExpectTotalCount(test.histogram_name, 0); |
| 703 | 699 |
| 704 website_settings()->RecordWebsiteSettingsAction( | 700 website_settings()->RecordPageInfoAction( |
| 705 WebsiteSettings::WebsiteSettingsAction::WEBSITE_SETTINGS_OPENED); | 701 PageInfo::PageInfoAction::WEBSITE_SETTINGS_OPENED); |
| 706 | 702 |
| 707 // RecordWebsiteSettingsAction() is called during WebsiteSettings | 703 // RecordPageInfoAction() is called during PageInfo |
| 708 // creation in addition to the explicit RecordWebsiteSettingsAction() | 704 // creation in addition to the explicit RecordPageInfoAction() |
| 709 // call, so it is called twice in total. | 705 // call, so it is called twice in total. |
| 710 histograms.ExpectTotalCount(kGenericHistogram, 2); | 706 histograms.ExpectTotalCount(kGenericHistogram, 2); |
| 711 histograms.ExpectBucketCount( | 707 histograms.ExpectBucketCount( |
| 712 kGenericHistogram, | 708 kGenericHistogram, PageInfo::PageInfoAction::WEBSITE_SETTINGS_OPENED, |
| 713 WebsiteSettings::WebsiteSettingsAction::WEBSITE_SETTINGS_OPENED, 2); | 709 2); |
| 714 | 710 |
| 715 histograms.ExpectTotalCount(test.histogram_name, 2); | 711 histograms.ExpectTotalCount(test.histogram_name, 2); |
| 716 histograms.ExpectBucketCount( | 712 histograms.ExpectBucketCount( |
| 717 test.histogram_name, | 713 test.histogram_name, PageInfo::PageInfoAction::WEBSITE_SETTINGS_OPENED, |
| 718 WebsiteSettings::WebsiteSettingsAction::WEBSITE_SETTINGS_OPENED, 2); | 714 2); |
| 719 } | 715 } |
| 720 } | 716 } |
| OLD | NEW |