| // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/geolocation/geolocation_content_settings_map.h" |
| #include "chrome/browser/geolocation/geolocation_settings_state.h" |
| #include "chrome/test/testing_profile.h" |
| #include "content/browser/browser_thread.h" |
| #include "content/browser/tab_contents/navigation_entry.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace { |
| |
| class GeolocationSettingsStateTests : public testing::Test { |
| public: |
| GeolocationSettingsStateTests() |
| : ui_thread_(BrowserThread::UI, &message_loop_) { |
| } |
| |
| protected: |
| MessageLoop message_loop_; |
| BrowserThread ui_thread_; |
| }; |
| |
| TEST_F(GeolocationSettingsStateTests, ClearOnNewOrigin) { |
| TestingProfile profile; |
| GeolocationSettingsState state(&profile); |
| GURL url_0("http://www.example.com"); |
| |
| NavigationEntry entry; |
| entry.set_url(url_0); |
| NavigationController::LoadCommittedDetails load_committed_details; |
| load_committed_details.entry = &entry; |
| state.DidNavigate(load_committed_details); |
| |
| profile.GetGeolocationContentSettingsMap()->SetContentSetting( |
| url_0, url_0, CONTENT_SETTING_ALLOW); |
| state.OnGeolocationPermissionSet(url_0, true); |
| |
| GURL url_1("http://www.example1.com"); |
| profile.GetGeolocationContentSettingsMap()->SetContentSetting( |
| url_1, url_0, CONTENT_SETTING_BLOCK); |
| state.OnGeolocationPermissionSet(url_1, false); |
| |
| GeolocationSettingsState::StateMap state_map = |
| state.state_map(); |
| EXPECT_EQ(2U, state_map.size()); |
| |
| GeolocationSettingsState::FormattedHostsPerState formatted_host_per_state; |
| unsigned int tab_state_flags = 0; |
| state.GetDetailedInfo(&formatted_host_per_state, &tab_state_flags); |
| EXPECT_TRUE(tab_state_flags & |
| GeolocationSettingsState::TABSTATE_HAS_ANY_ALLOWED) |
| << tab_state_flags; |
| EXPECT_TRUE(tab_state_flags & |
| GeolocationSettingsState::TABSTATE_HAS_EXCEPTION) |
| << tab_state_flags; |
| EXPECT_FALSE(tab_state_flags & |
| GeolocationSettingsState::TABSTATE_HAS_CHANGED) |
| << tab_state_flags; |
| EXPECT_TRUE(tab_state_flags & |
| GeolocationSettingsState::TABSTATE_HAS_ANY_ICON) |
| << tab_state_flags; |
| EXPECT_EQ(1U, formatted_host_per_state[CONTENT_SETTING_ALLOW].size()); |
| EXPECT_EQ(1U, |
| formatted_host_per_state[CONTENT_SETTING_ALLOW].count( |
| url_0.host())); |
| |
| EXPECT_EQ(1U, formatted_host_per_state[CONTENT_SETTING_BLOCK].size()); |
| EXPECT_EQ(1U, |
| formatted_host_per_state[CONTENT_SETTING_BLOCK].count( |
| url_1.host())); |
| |
| state.OnGeolocationPermissionSet(url_0, false); |
| |
| formatted_host_per_state.clear(); |
| tab_state_flags = 0; |
| state.GetDetailedInfo(&formatted_host_per_state, &tab_state_flags); |
| EXPECT_FALSE(tab_state_flags & |
| GeolocationSettingsState::TABSTATE_HAS_ANY_ALLOWED) |
| << tab_state_flags; |
| EXPECT_TRUE(tab_state_flags & |
| GeolocationSettingsState::TABSTATE_HAS_EXCEPTION) |
| << tab_state_flags; |
| EXPECT_TRUE(tab_state_flags & |
| GeolocationSettingsState::TABSTATE_HAS_CHANGED) |
| << tab_state_flags; |
| EXPECT_TRUE(tab_state_flags & |
| GeolocationSettingsState::TABSTATE_HAS_ANY_ICON) |
| << tab_state_flags; |
| EXPECT_EQ(0U, formatted_host_per_state[CONTENT_SETTING_ALLOW].size()); |
| EXPECT_EQ(2U, formatted_host_per_state[CONTENT_SETTING_BLOCK].size()); |
| EXPECT_EQ(1U, |
| formatted_host_per_state[CONTENT_SETTING_BLOCK].count( |
| url_0.host())); |
| EXPECT_EQ(1U, |
| formatted_host_per_state[CONTENT_SETTING_BLOCK].count( |
| url_1.host())); |
| |
| state.OnGeolocationPermissionSet(url_0, true); |
| |
| load_committed_details.previous_url = url_0; |
| state.DidNavigate(load_committed_details); |
| |
| GeolocationSettingsState::StateMap new_state_map = |
| state.state_map(); |
| EXPECT_EQ(state_map.size(), new_state_map.size()); |
| |
| GURL different_url("http://foo.com"); |
| entry.set_url(different_url); |
| state.DidNavigate(load_committed_details); |
| |
| EXPECT_TRUE(state.state_map().empty()); |
| |
| formatted_host_per_state.clear(); |
| tab_state_flags = 0; |
| state.GetDetailedInfo(&formatted_host_per_state, &tab_state_flags); |
| EXPECT_TRUE(formatted_host_per_state.empty()); |
| EXPECT_EQ(0U, tab_state_flags); |
| } |
| |
| TEST_F(GeolocationSettingsStateTests, ShowPortOnSameHost) { |
| TestingProfile profile; |
| GeolocationSettingsState state(&profile); |
| GURL url_0("http://www.example.com"); |
| |
| NavigationEntry entry; |
| entry.set_url(url_0); |
| NavigationController::LoadCommittedDetails load_committed_details; |
| load_committed_details.entry = &entry; |
| state.DidNavigate(load_committed_details); |
| |
| profile.GetGeolocationContentSettingsMap()->SetContentSetting( |
| url_0, url_0, CONTENT_SETTING_ALLOW); |
| state.OnGeolocationPermissionSet(url_0, true); |
| |
| GURL url_1("https://www.example.com"); |
| profile.GetGeolocationContentSettingsMap()->SetContentSetting( |
| url_1, url_0, CONTENT_SETTING_ALLOW); |
| state.OnGeolocationPermissionSet(url_1, true); |
| |
| GURL url_2("http://www.example1.com"); |
| profile.GetGeolocationContentSettingsMap()->SetContentSetting( |
| url_2, url_0, CONTENT_SETTING_ALLOW); |
| state.OnGeolocationPermissionSet(url_2, true); |
| |
| GeolocationSettingsState::StateMap state_map = |
| state.state_map(); |
| EXPECT_EQ(3U, state_map.size()); |
| |
| GeolocationSettingsState::FormattedHostsPerState formatted_host_per_state; |
| unsigned int tab_state_flags = 0; |
| state.GetDetailedInfo(&formatted_host_per_state, &tab_state_flags); |
| |
| EXPECT_EQ(3U, formatted_host_per_state[CONTENT_SETTING_ALLOW].size()); |
| EXPECT_EQ(1U, |
| formatted_host_per_state[CONTENT_SETTING_ALLOW].count( |
| url_0.spec())); |
| EXPECT_EQ(1U, |
| formatted_host_per_state[CONTENT_SETTING_ALLOW].count( |
| url_1.spec())); |
| EXPECT_EQ(1U, |
| formatted_host_per_state[CONTENT_SETTING_ALLOW].count( |
| url_2.host())); |
| |
| state.OnGeolocationPermissionSet(url_1, false); |
| formatted_host_per_state.clear(); |
| tab_state_flags = 0; |
| state.GetDetailedInfo(&formatted_host_per_state, &tab_state_flags); |
| |
| EXPECT_EQ(2U, formatted_host_per_state[CONTENT_SETTING_ALLOW].size()); |
| EXPECT_EQ(1U, |
| formatted_host_per_state[CONTENT_SETTING_ALLOW].count( |
| url_0.spec())); |
| EXPECT_EQ(1U, |
| formatted_host_per_state[CONTENT_SETTING_ALLOW].count( |
| url_2.host())); |
| EXPECT_EQ(1U, formatted_host_per_state[CONTENT_SETTING_BLOCK].size()); |
| EXPECT_EQ(1U, |
| formatted_host_per_state[CONTENT_SETTING_BLOCK].count( |
| url_1.spec())); |
| } |
| |
| |
| } // namespace |