| 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 |