OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/permissions/permission_manager.h" | 5 #include "chrome/browser/permissions/permission_manager.h" |
6 | 6 |
7 #include "chrome/browser/content_settings/host_content_settings_map_factory.h" | 7 #include "chrome/browser/content_settings/host_content_settings_map_factory.h" |
8 #include "chrome/browser/permissions/permission_manager_factory.h" | 8 #include "chrome/browser/permissions/permission_manager_factory.h" |
9 #include "chrome/test/base/testing_profile.h" | 9 #include "chrome/test/base/testing_profile.h" |
10 #include "components/content_settings/core/browser/host_content_settings_map.h" | 10 #include "components/content_settings/core/browser/host_content_settings_map.h" |
11 #include "content/public/browser/permission_type.h" | 11 #include "content/public/browser/permission_type.h" |
12 #include "content/public/test/test_browser_thread_bundle.h" | 12 #include "content/public/test/test_browser_thread_bundle.h" |
13 #include "testing/gtest/include/gtest/gtest.h" | 13 #include "testing/gtest/include/gtest/gtest.h" |
14 | 14 |
15 using content::PermissionType; | 15 using content::PermissionType; |
16 using content::PermissionStatus; | |
17 | 16 |
18 namespace { | 17 namespace { |
19 | 18 |
20 class PermissionManagerTestingProfile final : public TestingProfile { | 19 class PermissionManagerTestingProfile final : public TestingProfile { |
21 public: | 20 public: |
22 PermissionManagerTestingProfile() {} | 21 PermissionManagerTestingProfile() {} |
23 ~PermissionManagerTestingProfile() override {} | 22 ~PermissionManagerTestingProfile() override {} |
24 | 23 |
25 PermissionManager* GetPermissionManager() override { | 24 PermissionManager* GetPermissionManager() override { |
26 return PermissionManagerFactory::GetForProfile(this); | 25 return PermissionManagerFactory::GetForProfile(this); |
27 } | 26 } |
28 | 27 |
29 DISALLOW_COPY_AND_ASSIGN(PermissionManagerTestingProfile); | 28 DISALLOW_COPY_AND_ASSIGN(PermissionManagerTestingProfile); |
30 }; | 29 }; |
31 | 30 |
32 } // anonymous namespace | 31 } // anonymous namespace |
33 | 32 |
34 class PermissionManagerTest : public testing::Test { | 33 class PermissionManagerTest : public testing::Test { |
35 public: | 34 public: |
36 void OnPermissionChange(PermissionStatus permission) { | 35 void OnPermissionChange(permission::Status permission) { |
37 callback_called_ = true; | 36 callback_called_ = true; |
38 callback_result_ = permission; | 37 callback_result_ = permission; |
39 } | 38 } |
40 | 39 |
41 protected: | 40 protected: |
42 PermissionManagerTest() | 41 PermissionManagerTest() |
43 : url_("https://example.com"), | 42 : url_("https://example.com"), |
44 other_url_("https://foo.com"), | 43 other_url_("https://foo.com"), |
45 callback_called_(false), | 44 callback_called_(false), |
46 callback_result_(content::PERMISSION_STATUS_ASK) { | 45 callback_result_(permission::STATUS_ASK) {} |
47 } | |
48 | 46 |
49 PermissionManager* GetPermissionManager() { | 47 PermissionManager* GetPermissionManager() { |
50 return profile_.GetPermissionManager(); | 48 return profile_.GetPermissionManager(); |
51 } | 49 } |
52 | 50 |
53 HostContentSettingsMap* GetHostContentSettingsMap() { | 51 HostContentSettingsMap* GetHostContentSettingsMap() { |
54 return HostContentSettingsMapFactory::GetForProfile(&profile_); | 52 return HostContentSettingsMapFactory::GetForProfile(&profile_); |
55 } | 53 } |
56 | 54 |
57 void CheckPermissionStatus(PermissionType type, | 55 void CheckPermissionStatus(PermissionType type, permission::Status expected) { |
58 PermissionStatus expected) { | |
59 EXPECT_EQ(expected, GetPermissionManager()->GetPermissionStatus( | 56 EXPECT_EQ(expected, GetPermissionManager()->GetPermissionStatus( |
60 type, url_.GetOrigin(), url_.GetOrigin())); | 57 type, url_.GetOrigin(), url_.GetOrigin())); |
61 } | 58 } |
62 | 59 |
63 void SetPermission(ContentSettingsType type, ContentSetting value) { | 60 void SetPermission(ContentSettingsType type, ContentSetting value) { |
64 HostContentSettingsMapFactory::GetForProfile(&profile_)->SetContentSetting( | 61 HostContentSettingsMapFactory::GetForProfile(&profile_)->SetContentSetting( |
65 ContentSettingsPattern::FromURLNoWildcard(url_), | 62 ContentSettingsPattern::FromURLNoWildcard(url_), |
66 ContentSettingsPattern::FromURLNoWildcard(url_), | 63 ContentSettingsPattern::FromURLNoWildcard(url_), |
67 type, std::string(), value); | 64 type, std::string(), value); |
68 } | 65 } |
69 | 66 |
70 const GURL& url() const { | 67 const GURL& url() const { |
71 return url_; | 68 return url_; |
72 } | 69 } |
73 | 70 |
74 const GURL& other_url() const { | 71 const GURL& other_url() const { |
75 return other_url_; | 72 return other_url_; |
76 } | 73 } |
77 | 74 |
78 bool callback_called() const { | 75 bool callback_called() const { |
79 return callback_called_; | 76 return callback_called_; |
80 } | 77 } |
81 | 78 |
82 PermissionStatus callback_result() const { return callback_result_; } | 79 permission::Status callback_result() const { return callback_result_; } |
83 | 80 |
84 void Reset() { | 81 void Reset() { |
85 callback_called_ = false; | 82 callback_called_ = false; |
86 callback_result_ = content::PERMISSION_STATUS_ASK; | 83 callback_result_ = permission::STATUS_ASK; |
87 } | 84 } |
88 | 85 |
89 private: | 86 private: |
90 const GURL url_; | 87 const GURL url_; |
91 const GURL other_url_; | 88 const GURL other_url_; |
92 bool callback_called_; | 89 bool callback_called_; |
93 PermissionStatus callback_result_; | 90 permission::Status callback_result_; |
94 content::TestBrowserThreadBundle thread_bundle_; | 91 content::TestBrowserThreadBundle thread_bundle_; |
95 PermissionManagerTestingProfile profile_; | 92 PermissionManagerTestingProfile profile_; |
96 }; | 93 }; |
97 | 94 |
98 TEST_F(PermissionManagerTest, GetPermissionStatusDefault) { | 95 TEST_F(PermissionManagerTest, GetPermissionStatusDefault) { |
99 CheckPermissionStatus(PermissionType::MIDI_SYSEX, | 96 CheckPermissionStatus(PermissionType::MIDI_SYSEX, permission::STATUS_ASK); |
100 content::PERMISSION_STATUS_ASK); | 97 CheckPermissionStatus(PermissionType::PUSH_MESSAGING, permission::STATUS_ASK); |
101 CheckPermissionStatus(PermissionType::PUSH_MESSAGING, | 98 CheckPermissionStatus(PermissionType::NOTIFICATIONS, permission::STATUS_ASK); |
102 content::PERMISSION_STATUS_ASK); | 99 CheckPermissionStatus(PermissionType::GEOLOCATION, permission::STATUS_ASK); |
103 CheckPermissionStatus(PermissionType::NOTIFICATIONS, | |
104 content::PERMISSION_STATUS_ASK); | |
105 CheckPermissionStatus(PermissionType::GEOLOCATION, | |
106 content::PERMISSION_STATUS_ASK); | |
107 #if defined(OS_ANDROID) | 100 #if defined(OS_ANDROID) |
108 CheckPermissionStatus(PermissionType::PROTECTED_MEDIA_IDENTIFIER, | 101 CheckPermissionStatus(PermissionType::PROTECTED_MEDIA_IDENTIFIER, |
109 content::PERMISSION_STATUS_ASK); | 102 permission::STATUS_ASK); |
110 #endif | 103 #endif |
111 } | 104 } |
112 | 105 |
113 TEST_F(PermissionManagerTest, GetPermissionStatusAfterSet) { | 106 TEST_F(PermissionManagerTest, GetPermissionStatusAfterSet) { |
114 SetPermission(CONTENT_SETTINGS_TYPE_GEOLOCATION, CONTENT_SETTING_ALLOW); | 107 SetPermission(CONTENT_SETTINGS_TYPE_GEOLOCATION, CONTENT_SETTING_ALLOW); |
115 CheckPermissionStatus(PermissionType::GEOLOCATION, | 108 CheckPermissionStatus(PermissionType::GEOLOCATION, |
116 content::PERMISSION_STATUS_GRANTED); | 109 permission::STATUS_GRANTED); |
117 | 110 |
118 SetPermission(CONTENT_SETTINGS_TYPE_NOTIFICATIONS, CONTENT_SETTING_ALLOW); | 111 SetPermission(CONTENT_SETTINGS_TYPE_NOTIFICATIONS, CONTENT_SETTING_ALLOW); |
119 CheckPermissionStatus(PermissionType::NOTIFICATIONS, | 112 CheckPermissionStatus(PermissionType::NOTIFICATIONS, |
120 content::PERMISSION_STATUS_GRANTED); | 113 permission::STATUS_GRANTED); |
121 | 114 |
122 SetPermission(CONTENT_SETTINGS_TYPE_MIDI_SYSEX, CONTENT_SETTING_ALLOW); | 115 SetPermission(CONTENT_SETTINGS_TYPE_MIDI_SYSEX, CONTENT_SETTING_ALLOW); |
123 CheckPermissionStatus(PermissionType::MIDI_SYSEX, | 116 CheckPermissionStatus(PermissionType::MIDI_SYSEX, permission::STATUS_GRANTED); |
124 content::PERMISSION_STATUS_GRANTED); | |
125 | 117 |
126 SetPermission(CONTENT_SETTINGS_TYPE_PUSH_MESSAGING, CONTENT_SETTING_ALLOW); | 118 SetPermission(CONTENT_SETTINGS_TYPE_PUSH_MESSAGING, CONTENT_SETTING_ALLOW); |
127 CheckPermissionStatus(PermissionType::PUSH_MESSAGING, | 119 CheckPermissionStatus(PermissionType::PUSH_MESSAGING, |
128 content::PERMISSION_STATUS_GRANTED); | 120 permission::STATUS_GRANTED); |
129 | 121 |
130 #if defined(OS_ANDROID) | 122 #if defined(OS_ANDROID) |
131 SetPermission(CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER, | 123 SetPermission(CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER, |
132 CONTENT_SETTING_ALLOW); | 124 CONTENT_SETTING_ALLOW); |
133 CheckPermissionStatus(PermissionType::PROTECTED_MEDIA_IDENTIFIER, | 125 CheckPermissionStatus(PermissionType::PROTECTED_MEDIA_IDENTIFIER, |
134 content::PERMISSION_STATUS_GRANTED); | 126 permission::STATUS_GRANTED); |
135 #endif | 127 #endif |
136 } | 128 } |
137 | 129 |
138 TEST_F(PermissionManagerTest, SameTypeChangeNotifies) { | 130 TEST_F(PermissionManagerTest, SameTypeChangeNotifies) { |
139 int subscription_id = GetPermissionManager()->SubscribePermissionStatusChange( | 131 int subscription_id = GetPermissionManager()->SubscribePermissionStatusChange( |
140 PermissionType::GEOLOCATION, url(), url(), | 132 PermissionType::GEOLOCATION, url(), url(), |
141 base::Bind(&PermissionManagerTest::OnPermissionChange, | 133 base::Bind(&PermissionManagerTest::OnPermissionChange, |
142 base::Unretained(this))); | 134 base::Unretained(this))); |
143 | 135 |
144 GetHostContentSettingsMap()->SetContentSetting( | 136 GetHostContentSettingsMap()->SetContentSetting( |
145 ContentSettingsPattern::FromURLNoWildcard(url()), | 137 ContentSettingsPattern::FromURLNoWildcard(url()), |
146 ContentSettingsPattern::FromURLNoWildcard(url()), | 138 ContentSettingsPattern::FromURLNoWildcard(url()), |
147 CONTENT_SETTINGS_TYPE_GEOLOCATION, | 139 CONTENT_SETTINGS_TYPE_GEOLOCATION, |
148 std::string(), | 140 std::string(), |
149 CONTENT_SETTING_ALLOW); | 141 CONTENT_SETTING_ALLOW); |
150 | 142 |
151 EXPECT_TRUE(callback_called()); | 143 EXPECT_TRUE(callback_called()); |
152 EXPECT_EQ(content::PERMISSION_STATUS_GRANTED, callback_result()); | 144 EXPECT_EQ(permission::STATUS_GRANTED, callback_result()); |
153 | 145 |
154 GetPermissionManager()->UnsubscribePermissionStatusChange(subscription_id); | 146 GetPermissionManager()->UnsubscribePermissionStatusChange(subscription_id); |
155 } | 147 } |
156 | 148 |
157 TEST_F(PermissionManagerTest, DifferentTypeChangeDoesNotNotify) { | 149 TEST_F(PermissionManagerTest, DifferentTypeChangeDoesNotNotify) { |
158 int subscription_id = GetPermissionManager()->SubscribePermissionStatusChange( | 150 int subscription_id = GetPermissionManager()->SubscribePermissionStatusChange( |
159 PermissionType::GEOLOCATION, url(), url(), | 151 PermissionType::GEOLOCATION, url(), url(), |
160 base::Bind(&PermissionManagerTest::OnPermissionChange, | 152 base::Bind(&PermissionManagerTest::OnPermissionChange, |
161 base::Unretained(this))); | 153 base::Unretained(this))); |
162 | 154 |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
233 base::Unretained(this))); | 225 base::Unretained(this))); |
234 | 226 |
235 GetHostContentSettingsMap()->SetContentSetting( | 227 GetHostContentSettingsMap()->SetContentSetting( |
236 ContentSettingsPattern::Wildcard(), | 228 ContentSettingsPattern::Wildcard(), |
237 ContentSettingsPattern::Wildcard(), | 229 ContentSettingsPattern::Wildcard(), |
238 CONTENT_SETTINGS_TYPE_GEOLOCATION, | 230 CONTENT_SETTINGS_TYPE_GEOLOCATION, |
239 std::string(), | 231 std::string(), |
240 CONTENT_SETTING_ALLOW); | 232 CONTENT_SETTING_ALLOW); |
241 | 233 |
242 EXPECT_TRUE(callback_called()); | 234 EXPECT_TRUE(callback_called()); |
243 EXPECT_EQ(content::PERMISSION_STATUS_GRANTED, callback_result()); | 235 EXPECT_EQ(permission::STATUS_GRANTED, callback_result()); |
244 | 236 |
245 GetPermissionManager()->UnsubscribePermissionStatusChange(subscription_id); | 237 GetPermissionManager()->UnsubscribePermissionStatusChange(subscription_id); |
246 } | 238 } |
247 | 239 |
248 TEST_F(PermissionManagerTest, ClearSettingsNotifies) { | 240 TEST_F(PermissionManagerTest, ClearSettingsNotifies) { |
249 GetHostContentSettingsMap()->SetContentSetting( | 241 GetHostContentSettingsMap()->SetContentSetting( |
250 ContentSettingsPattern::FromURLNoWildcard(url()), | 242 ContentSettingsPattern::FromURLNoWildcard(url()), |
251 ContentSettingsPattern::FromURLNoWildcard(url()), | 243 ContentSettingsPattern::FromURLNoWildcard(url()), |
252 CONTENT_SETTINGS_TYPE_GEOLOCATION, | 244 CONTENT_SETTINGS_TYPE_GEOLOCATION, |
253 std::string(), | 245 std::string(), |
254 CONTENT_SETTING_ALLOW); | 246 CONTENT_SETTING_ALLOW); |
255 | 247 |
256 int subscription_id = GetPermissionManager()->SubscribePermissionStatusChange( | 248 int subscription_id = GetPermissionManager()->SubscribePermissionStatusChange( |
257 PermissionType::GEOLOCATION, url(), url(), | 249 PermissionType::GEOLOCATION, url(), url(), |
258 base::Bind(&PermissionManagerTest::OnPermissionChange, | 250 base::Bind(&PermissionManagerTest::OnPermissionChange, |
259 base::Unretained(this))); | 251 base::Unretained(this))); |
260 | 252 |
261 GetHostContentSettingsMap()->ClearSettingsForOneType( | 253 GetHostContentSettingsMap()->ClearSettingsForOneType( |
262 CONTENT_SETTINGS_TYPE_GEOLOCATION); | 254 CONTENT_SETTINGS_TYPE_GEOLOCATION); |
263 | 255 |
264 EXPECT_TRUE(callback_called()); | 256 EXPECT_TRUE(callback_called()); |
265 EXPECT_EQ(content::PERMISSION_STATUS_ASK, callback_result()); | 257 EXPECT_EQ(permission::STATUS_ASK, callback_result()); |
266 | 258 |
267 GetPermissionManager()->UnsubscribePermissionStatusChange(subscription_id); | 259 GetPermissionManager()->UnsubscribePermissionStatusChange(subscription_id); |
268 } | 260 } |
269 | 261 |
270 TEST_F(PermissionManagerTest, NewValueCorrectlyPassed) { | 262 TEST_F(PermissionManagerTest, NewValueCorrectlyPassed) { |
271 int subscription_id = GetPermissionManager()->SubscribePermissionStatusChange( | 263 int subscription_id = GetPermissionManager()->SubscribePermissionStatusChange( |
272 PermissionType::GEOLOCATION, url(), url(), | 264 PermissionType::GEOLOCATION, url(), url(), |
273 base::Bind(&PermissionManagerTest::OnPermissionChange, | 265 base::Bind(&PermissionManagerTest::OnPermissionChange, |
274 base::Unretained(this))); | 266 base::Unretained(this))); |
275 | 267 |
276 GetHostContentSettingsMap()->SetContentSetting( | 268 GetHostContentSettingsMap()->SetContentSetting( |
277 ContentSettingsPattern::FromURLNoWildcard(url()), | 269 ContentSettingsPattern::FromURLNoWildcard(url()), |
278 ContentSettingsPattern::FromURLNoWildcard(url()), | 270 ContentSettingsPattern::FromURLNoWildcard(url()), |
279 CONTENT_SETTINGS_TYPE_GEOLOCATION, | 271 CONTENT_SETTINGS_TYPE_GEOLOCATION, |
280 std::string(), | 272 std::string(), |
281 CONTENT_SETTING_BLOCK); | 273 CONTENT_SETTING_BLOCK); |
282 | 274 |
283 EXPECT_TRUE(callback_called()); | 275 EXPECT_TRUE(callback_called()); |
284 EXPECT_EQ(content::PERMISSION_STATUS_DENIED, callback_result()); | 276 EXPECT_EQ(permission::STATUS_DENIED, callback_result()); |
285 | 277 |
286 GetPermissionManager()->UnsubscribePermissionStatusChange(subscription_id); | 278 GetPermissionManager()->UnsubscribePermissionStatusChange(subscription_id); |
287 } | 279 } |
288 | 280 |
289 TEST_F(PermissionManagerTest, ChangeWithoutPermissionChangeDoesNotNotify) { | 281 TEST_F(PermissionManagerTest, ChangeWithoutPermissionChangeDoesNotNotify) { |
290 GetHostContentSettingsMap()->SetContentSetting( | 282 GetHostContentSettingsMap()->SetContentSetting( |
291 ContentSettingsPattern::FromURLNoWildcard(url()), | 283 ContentSettingsPattern::FromURLNoWildcard(url()), |
292 ContentSettingsPattern::FromURLNoWildcard(url()), | 284 ContentSettingsPattern::FromURLNoWildcard(url()), |
293 CONTENT_SETTINGS_TYPE_GEOLOCATION, | 285 CONTENT_SETTINGS_TYPE_GEOLOCATION, |
294 std::string(), | 286 std::string(), |
(...skipping 30 matching lines...) Expand all Loading... |
325 base::Unretained(this))); | 317 base::Unretained(this))); |
326 | 318 |
327 GetHostContentSettingsMap()->SetContentSetting( | 319 GetHostContentSettingsMap()->SetContentSetting( |
328 ContentSettingsPattern::FromURLNoWildcard(url()), | 320 ContentSettingsPattern::FromURLNoWildcard(url()), |
329 ContentSettingsPattern::FromURLNoWildcard(url()), | 321 ContentSettingsPattern::FromURLNoWildcard(url()), |
330 CONTENT_SETTINGS_TYPE_GEOLOCATION, | 322 CONTENT_SETTINGS_TYPE_GEOLOCATION, |
331 std::string(), | 323 std::string(), |
332 CONTENT_SETTING_ALLOW); | 324 CONTENT_SETTING_ALLOW); |
333 | 325 |
334 EXPECT_TRUE(callback_called()); | 326 EXPECT_TRUE(callback_called()); |
335 EXPECT_EQ(content::PERMISSION_STATUS_GRANTED, callback_result()); | 327 EXPECT_EQ(permission::STATUS_GRANTED, callback_result()); |
336 | 328 |
337 Reset(); | 329 Reset(); |
338 | 330 |
339 GetHostContentSettingsMap()->SetContentSetting( | 331 GetHostContentSettingsMap()->SetContentSetting( |
340 ContentSettingsPattern::FromURLNoWildcard(url()), | 332 ContentSettingsPattern::FromURLNoWildcard(url()), |
341 ContentSettingsPattern::FromURLNoWildcard(url()), | 333 ContentSettingsPattern::FromURLNoWildcard(url()), |
342 CONTENT_SETTINGS_TYPE_GEOLOCATION, | 334 CONTENT_SETTINGS_TYPE_GEOLOCATION, |
343 std::string(), | 335 std::string(), |
344 CONTENT_SETTING_ASK); | 336 CONTENT_SETTING_ASK); |
345 | 337 |
346 EXPECT_TRUE(callback_called()); | 338 EXPECT_TRUE(callback_called()); |
347 EXPECT_EQ(content::PERMISSION_STATUS_ASK, callback_result()); | 339 EXPECT_EQ(permission::STATUS_ASK, callback_result()); |
348 | 340 |
349 GetPermissionManager()->UnsubscribePermissionStatusChange(subscription_id); | 341 GetPermissionManager()->UnsubscribePermissionStatusChange(subscription_id); |
350 } | 342 } |
OLD | NEW |