1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
7 #include "base/message_loop/message_loop.h"
8 #include "chrome/browser/geolocation/geolocation_settings_state.h"
9 #include "chrome/test/base/testing_profile.h"
10 #include "components/content_settings/core/browser/host_content_settings_map.h"
11 #include "content/public/browser/navigation_details.h"
12 #include "content/public/browser/navigation_entry.h"
13 #include "content/public/test/test_browser_thread.h"
14 #include "testing/gtest/include/gtest/gtest.h"
16 using content::BrowserThread
;
17 using content::NavigationEntry
;
21 class GeolocationSettingsStateTests
: public testing::Test
{
23 GeolocationSettingsStateTests()
24 : ui_thread_(BrowserThread::UI
, &message_loop_
) {
28 base::MessageLoop message_loop_
;
29 content::TestBrowserThread ui_thread_
;
32 TEST_F(GeolocationSettingsStateTests
, ClearOnNewOrigin
) {
33 TestingProfile profile
;
34 GeolocationSettingsState
state(&profile
);
35 GURL
url_0("http://www.example.com");
37 scoped_ptr
<NavigationEntry
> entry(NavigationEntry::Create());
39 content::LoadCommittedDetails load_committed_details
;
40 load_committed_details
.entry
= entry
.get();
41 state
.DidNavigate(load_committed_details
);
43 profile
.GetHostContentSettingsMap()->SetContentSetting(
44 ContentSettingsPattern::FromURLNoWildcard(url_0
),
45 ContentSettingsPattern::FromURLNoWildcard(url_0
),
46 CONTENT_SETTINGS_TYPE_GEOLOCATION
,
48 CONTENT_SETTING_ALLOW
);
49 state
.OnGeolocationPermissionSet(url_0
, true);
51 GURL
url_1("http://www.example1.com");
52 profile
.GetHostContentSettingsMap()->SetContentSetting(
53 ContentSettingsPattern::FromURLNoWildcard(url_1
),
54 ContentSettingsPattern::FromURLNoWildcard(url_0
),
55 CONTENT_SETTINGS_TYPE_GEOLOCATION
,
57 CONTENT_SETTING_BLOCK
);
58 state
.OnGeolocationPermissionSet(url_1
, false);
60 GeolocationSettingsState::StateMap state_map
=
62 EXPECT_EQ(2U, state_map
.size());
64 GeolocationSettingsState::FormattedHostsPerState formatted_host_per_state
;
65 unsigned int tab_state_flags
= 0;
66 state
.GetDetailedInfo(&formatted_host_per_state
, &tab_state_flags
);
67 EXPECT_TRUE(tab_state_flags
&
68 GeolocationSettingsState::TABSTATE_HAS_ANY_ALLOWED
)
70 EXPECT_TRUE(tab_state_flags
&
71 GeolocationSettingsState::TABSTATE_HAS_EXCEPTION
)
73 EXPECT_FALSE(tab_state_flags
&
74 GeolocationSettingsState::TABSTATE_HAS_CHANGED
)
76 EXPECT_TRUE(tab_state_flags
&
77 GeolocationSettingsState::TABSTATE_HAS_ANY_ICON
)
79 EXPECT_EQ(1U, formatted_host_per_state
[CONTENT_SETTING_ALLOW
].size());
81 formatted_host_per_state
[CONTENT_SETTING_ALLOW
].count(
84 EXPECT_EQ(1U, formatted_host_per_state
[CONTENT_SETTING_BLOCK
].size());
86 formatted_host_per_state
[CONTENT_SETTING_BLOCK
].count(
89 state
.OnGeolocationPermissionSet(url_0
, false);
91 formatted_host_per_state
.clear();
93 state
.GetDetailedInfo(&formatted_host_per_state
, &tab_state_flags
);
94 EXPECT_FALSE(tab_state_flags
&
95 GeolocationSettingsState::TABSTATE_HAS_ANY_ALLOWED
)
97 EXPECT_TRUE(tab_state_flags
&
98 GeolocationSettingsState::TABSTATE_HAS_EXCEPTION
)
100 EXPECT_TRUE(tab_state_flags
&
101 GeolocationSettingsState::TABSTATE_HAS_CHANGED
)
103 EXPECT_TRUE(tab_state_flags
&
104 GeolocationSettingsState::TABSTATE_HAS_ANY_ICON
)
106 EXPECT_EQ(0U, formatted_host_per_state
[CONTENT_SETTING_ALLOW
].size());
107 EXPECT_EQ(2U, formatted_host_per_state
[CONTENT_SETTING_BLOCK
].size());
109 formatted_host_per_state
[CONTENT_SETTING_BLOCK
].count(
112 formatted_host_per_state
[CONTENT_SETTING_BLOCK
].count(
115 state
.OnGeolocationPermissionSet(url_0
, true);
117 load_committed_details
.previous_url
= url_0
;
118 state
.DidNavigate(load_committed_details
);
120 GeolocationSettingsState::StateMap new_state_map
=
122 EXPECT_EQ(state_map
.size(), new_state_map
.size());
124 GURL
different_url("http://foo.com");
125 entry
->SetURL(different_url
);
126 state
.DidNavigate(load_committed_details
);
128 EXPECT_TRUE(state
.state_map().empty());
130 formatted_host_per_state
.clear();
132 state
.GetDetailedInfo(&formatted_host_per_state
, &tab_state_flags
);
133 EXPECT_TRUE(formatted_host_per_state
.empty());
134 EXPECT_EQ(0U, tab_state_flags
);
137 TEST_F(GeolocationSettingsStateTests
, ShowPortOnSameHost
) {
138 TestingProfile profile
;
139 GeolocationSettingsState
state(&profile
);
140 GURL
url_0("http://www.example.com");
142 scoped_ptr
<NavigationEntry
> entry(NavigationEntry::Create());
143 entry
->SetURL(url_0
);
144 content::LoadCommittedDetails load_committed_details
;
145 load_committed_details
.entry
= entry
.get();
146 state
.DidNavigate(load_committed_details
);
148 profile
.GetHostContentSettingsMap()->SetContentSetting(
149 ContentSettingsPattern::FromURLNoWildcard(url_0
),
150 ContentSettingsPattern::FromURLNoWildcard(url_0
),
151 CONTENT_SETTINGS_TYPE_GEOLOCATION
,
153 CONTENT_SETTING_ALLOW
);
154 state
.OnGeolocationPermissionSet(url_0
, true);
156 GURL
url_1("https://www.example.com");
157 profile
.GetHostContentSettingsMap()->SetContentSetting(
158 ContentSettingsPattern::FromURLNoWildcard(url_1
),
159 ContentSettingsPattern::FromURLNoWildcard(url_0
),
160 CONTENT_SETTINGS_TYPE_GEOLOCATION
,
162 CONTENT_SETTING_ALLOW
);
163 state
.OnGeolocationPermissionSet(url_1
, true);
165 GURL
url_2("http://www.example1.com");
166 profile
.GetHostContentSettingsMap()->SetContentSetting(
167 ContentSettingsPattern::FromURLNoWildcard(url_2
),
168 ContentSettingsPattern::FromURLNoWildcard(url_0
),
169 CONTENT_SETTINGS_TYPE_GEOLOCATION
,
171 CONTENT_SETTING_ALLOW
);
172 state
.OnGeolocationPermissionSet(url_2
, true);
174 GeolocationSettingsState::StateMap state_map
=
176 EXPECT_EQ(3U, state_map
.size());
178 GeolocationSettingsState::FormattedHostsPerState formatted_host_per_state
;
179 unsigned int tab_state_flags
= 0;
180 state
.GetDetailedInfo(&formatted_host_per_state
, &tab_state_flags
);
182 EXPECT_EQ(3U, formatted_host_per_state
[CONTENT_SETTING_ALLOW
].size());
184 formatted_host_per_state
[CONTENT_SETTING_ALLOW
].count(
187 formatted_host_per_state
[CONTENT_SETTING_ALLOW
].count(
190 formatted_host_per_state
[CONTENT_SETTING_ALLOW
].count(
193 state
.OnGeolocationPermissionSet(url_1
, false);
194 formatted_host_per_state
.clear();
196 state
.GetDetailedInfo(&formatted_host_per_state
, &tab_state_flags
);
198 EXPECT_EQ(2U, formatted_host_per_state
[CONTENT_SETTING_ALLOW
].size());
200 formatted_host_per_state
[CONTENT_SETTING_ALLOW
].count(
203 formatted_host_per_state
[CONTENT_SETTING_ALLOW
].count(
205 EXPECT_EQ(1U, formatted_host_per_state
[CONTENT_SETTING_BLOCK
].size());
207 formatted_host_per_state
[CONTENT_SETTING_BLOCK
].count(