| Index: chrome/browser/permissions/permission_manager_unittest.cc
|
| diff --git a/chrome/browser/permissions/permission_manager_unittest.cc b/chrome/browser/permissions/permission_manager_unittest.cc
|
| index b737ca12a2903c80f7d94ce6ce58f0cdae259804..68c9d87ace8a4a65ce5226552325bf1a0ae0bbf6 100644
|
| --- a/chrome/browser/permissions/permission_manager_unittest.cc
|
| +++ b/chrome/browser/permissions/permission_manager_unittest.cc
|
| @@ -32,13 +32,31 @@ class PermissionManagerTestingProfile final : public TestingProfile {
|
|
|
| class PermissionManagerTest : public testing::Test {
|
| public:
|
| - PermissionManagerTest() : url_("https://example.com") {}
|
| + void OnPermissionChange(content::PermissionStatus permission) {
|
| + callback_called_ = true;
|
| + callback_result_ = permission;
|
| + }
|
| +
|
| + protected:
|
| + PermissionManagerTest()
|
| + : url_("https://example.com"),
|
| + other_url_("https://foo.com"),
|
| + callback_called_(false),
|
| + callback_result_(content::PERMISSION_STATUS_ASK) {
|
| + }
|
| +
|
| + PermissionManager* GetPermissionManager() {
|
| + return profile_.GetPermissionManager();
|
| + }
|
| +
|
| + HostContentSettingsMap* GetHostContentSettingsMap() {
|
| + return profile_.GetHostContentSettingsMap();
|
| + }
|
|
|
| void CheckPermissionStatus(PermissionType type,
|
| PermissionStatus expected) {
|
| - EXPECT_EQ(expected,
|
| - profile_.GetPermissionManager()->GetPermissionStatus(
|
| - type, url_.GetOrigin(), url_.GetOrigin()));
|
| + EXPECT_EQ(expected, GetPermissionManager()->GetPermissionStatus(
|
| + type, url_.GetOrigin(), url_.GetOrigin()));
|
| }
|
|
|
| void SetPermission(ContentSettingsType type, ContentSetting value) {
|
| @@ -48,8 +66,32 @@ class PermissionManagerTest : public testing::Test {
|
| type, std::string(), value);
|
| }
|
|
|
| + const GURL& url() const {
|
| + return url_;
|
| + }
|
| +
|
| + const GURL& other_url() const {
|
| + return other_url_;
|
| + }
|
| +
|
| + bool callback_called() const {
|
| + return callback_called_;
|
| + }
|
| +
|
| + content::PermissionStatus callback_result() const {
|
| + return callback_result_;
|
| + }
|
| +
|
| + void Reset() {
|
| + callback_called_ = false;
|
| + callback_result_ = content::PERMISSION_STATUS_ASK;
|
| + }
|
| +
|
| private:
|
| const GURL url_;
|
| + const GURL other_url_;
|
| + bool callback_called_;
|
| + content::PermissionStatus callback_result_;
|
| content::TestBrowserThreadBundle thread_bundle_;
|
| PermissionManagerTestingProfile profile_;
|
| };
|
| @@ -93,3 +135,217 @@ TEST_F(PermissionManagerTest, GetPermissionStatusAfterSet) {
|
| content::PERMISSION_STATUS_GRANTED);
|
| #endif
|
| }
|
| +
|
| +TEST_F(PermissionManagerTest, SameTypeChangeNotifies) {
|
| + int subscription_id = GetPermissionManager()->SubscribePermissionStatusChange(
|
| + PermissionType::GEOLOCATION, url(), url(),
|
| + base::Bind(&PermissionManagerTest::OnPermissionChange,
|
| + base::Unretained(this)));
|
| +
|
| + GetHostContentSettingsMap()->SetContentSetting(
|
| + ContentSettingsPattern::FromURLNoWildcard(url()),
|
| + ContentSettingsPattern::FromURLNoWildcard(url()),
|
| + CONTENT_SETTINGS_TYPE_GEOLOCATION,
|
| + std::string(),
|
| + CONTENT_SETTING_ALLOW);
|
| +
|
| + EXPECT_TRUE(callback_called());
|
| + EXPECT_EQ(content::PERMISSION_STATUS_GRANTED, callback_result());
|
| +
|
| + GetPermissionManager()->UnsubscribePermissionStatusChange(subscription_id);
|
| +}
|
| +
|
| +TEST_F(PermissionManagerTest, DifferentTypeChangeDoesNotNotify) {
|
| + int subscription_id = GetPermissionManager()->SubscribePermissionStatusChange(
|
| + PermissionType::GEOLOCATION, url(), url(),
|
| + base::Bind(&PermissionManagerTest::OnPermissionChange,
|
| + base::Unretained(this)));
|
| +
|
| + GetHostContentSettingsMap()->SetContentSetting(
|
| + ContentSettingsPattern::FromURLNoWildcard(url()),
|
| + ContentSettingsPattern::FromURLNoWildcard(url()),
|
| + CONTENT_SETTINGS_TYPE_NOTIFICATIONS,
|
| + std::string(),
|
| + CONTENT_SETTING_ALLOW);
|
| +
|
| + EXPECT_FALSE(callback_called());
|
| +
|
| + GetPermissionManager()->UnsubscribePermissionStatusChange(subscription_id);
|
| +}
|
| +
|
| +TEST_F(PermissionManagerTest, ChangeAfterUnsubscribeDoesNotNotify) {
|
| + int subscription_id = GetPermissionManager()->SubscribePermissionStatusChange(
|
| + PermissionType::GEOLOCATION, url(), url(),
|
| + base::Bind(&PermissionManagerTest::OnPermissionChange,
|
| + base::Unretained(this)));
|
| +
|
| + GetPermissionManager()->UnsubscribePermissionStatusChange(subscription_id);
|
| +
|
| + GetHostContentSettingsMap()->SetContentSetting(
|
| + ContentSettingsPattern::FromURLNoWildcard(url()),
|
| + ContentSettingsPattern::FromURLNoWildcard(url()),
|
| + CONTENT_SETTINGS_TYPE_GEOLOCATION,
|
| + std::string(),
|
| + CONTENT_SETTING_ALLOW);
|
| +
|
| + EXPECT_FALSE(callback_called());
|
| +}
|
| +
|
| +TEST_F(PermissionManagerTest, DifferentPrimaryPatternDoesNotNotify) {
|
| + int subscription_id = GetPermissionManager()->SubscribePermissionStatusChange(
|
| + PermissionType::GEOLOCATION, url(), url(),
|
| + base::Bind(&PermissionManagerTest::OnPermissionChange,
|
| + base::Unretained(this)));
|
| +
|
| + GetHostContentSettingsMap()->SetContentSetting(
|
| + ContentSettingsPattern::FromURLNoWildcard(other_url()),
|
| + ContentSettingsPattern::FromURLNoWildcard(url()),
|
| + CONTENT_SETTINGS_TYPE_GEOLOCATION,
|
| + std::string(),
|
| + CONTENT_SETTING_ALLOW);
|
| +
|
| + EXPECT_FALSE(callback_called());
|
| +
|
| + GetPermissionManager()->UnsubscribePermissionStatusChange(subscription_id);
|
| +}
|
| +
|
| +TEST_F(PermissionManagerTest, DifferentSecondaryPatternDoesNotNotify) {
|
| + int subscription_id = GetPermissionManager()->SubscribePermissionStatusChange(
|
| + PermissionType::GEOLOCATION, url(), url(),
|
| + base::Bind(&PermissionManagerTest::OnPermissionChange,
|
| + base::Unretained(this)));
|
| +
|
| + GetHostContentSettingsMap()->SetContentSetting(
|
| + ContentSettingsPattern::FromURLNoWildcard(url()),
|
| + ContentSettingsPattern::FromURLNoWildcard(other_url()),
|
| + CONTENT_SETTINGS_TYPE_GEOLOCATION,
|
| + std::string(),
|
| + CONTENT_SETTING_ALLOW);
|
| +
|
| + EXPECT_FALSE(callback_called());
|
| +
|
| + GetPermissionManager()->UnsubscribePermissionStatusChange(subscription_id);
|
| +}
|
| +
|
| +TEST_F(PermissionManagerTest, WildCardPatternNotifies) {
|
| + int subscription_id = GetPermissionManager()->SubscribePermissionStatusChange(
|
| + PermissionType::GEOLOCATION, url(), url(),
|
| + base::Bind(&PermissionManagerTest::OnPermissionChange,
|
| + base::Unretained(this)));
|
| +
|
| + GetHostContentSettingsMap()->SetContentSetting(
|
| + ContentSettingsPattern::Wildcard(),
|
| + ContentSettingsPattern::Wildcard(),
|
| + CONTENT_SETTINGS_TYPE_GEOLOCATION,
|
| + std::string(),
|
| + CONTENT_SETTING_ALLOW);
|
| +
|
| + EXPECT_TRUE(callback_called());
|
| + EXPECT_EQ(content::PERMISSION_STATUS_GRANTED, callback_result());
|
| +
|
| + GetPermissionManager()->UnsubscribePermissionStatusChange(subscription_id);
|
| +}
|
| +
|
| +TEST_F(PermissionManagerTest, ClearSettingsNotifies) {
|
| + GetHostContentSettingsMap()->SetContentSetting(
|
| + ContentSettingsPattern::FromURLNoWildcard(url()),
|
| + ContentSettingsPattern::FromURLNoWildcard(url()),
|
| + CONTENT_SETTINGS_TYPE_GEOLOCATION,
|
| + std::string(),
|
| + CONTENT_SETTING_ALLOW);
|
| +
|
| + int subscription_id = GetPermissionManager()->SubscribePermissionStatusChange(
|
| + PermissionType::GEOLOCATION, url(), url(),
|
| + base::Bind(&PermissionManagerTest::OnPermissionChange,
|
| + base::Unretained(this)));
|
| +
|
| + GetHostContentSettingsMap()->ClearSettingsForOneType(
|
| + CONTENT_SETTINGS_TYPE_GEOLOCATION);
|
| +
|
| + EXPECT_TRUE(callback_called());
|
| + EXPECT_EQ(content::PERMISSION_STATUS_ASK, callback_result());
|
| +
|
| + GetPermissionManager()->UnsubscribePermissionStatusChange(subscription_id);
|
| +}
|
| +
|
| +TEST_F(PermissionManagerTest, NewValueCorrectlyPassed) {
|
| + int subscription_id = GetPermissionManager()->SubscribePermissionStatusChange(
|
| + PermissionType::GEOLOCATION, url(), url(),
|
| + base::Bind(&PermissionManagerTest::OnPermissionChange,
|
| + base::Unretained(this)));
|
| +
|
| + GetHostContentSettingsMap()->SetContentSetting(
|
| + ContentSettingsPattern::FromURLNoWildcard(url()),
|
| + ContentSettingsPattern::FromURLNoWildcard(url()),
|
| + CONTENT_SETTINGS_TYPE_GEOLOCATION,
|
| + std::string(),
|
| + CONTENT_SETTING_BLOCK);
|
| +
|
| + EXPECT_TRUE(callback_called());
|
| + EXPECT_EQ(content::PERMISSION_STATUS_DENIED, callback_result());
|
| +
|
| + GetPermissionManager()->UnsubscribePermissionStatusChange(subscription_id);
|
| +}
|
| +
|
| +TEST_F(PermissionManagerTest, ChangeWithoutPermissionChangeDoesNotNotify) {
|
| + GetHostContentSettingsMap()->SetContentSetting(
|
| + ContentSettingsPattern::FromURLNoWildcard(url()),
|
| + ContentSettingsPattern::FromURLNoWildcard(url()),
|
| + CONTENT_SETTINGS_TYPE_GEOLOCATION,
|
| + std::string(),
|
| + CONTENT_SETTING_ALLOW);
|
| +
|
| + int subscription_id = GetPermissionManager()->SubscribePermissionStatusChange(
|
| + PermissionType::GEOLOCATION, url(), url(),
|
| + base::Bind(&PermissionManagerTest::OnPermissionChange,
|
| + base::Unretained(this)));
|
| +
|
| + GetHostContentSettingsMap()->SetContentSetting(
|
| + ContentSettingsPattern::Wildcard(),
|
| + ContentSettingsPattern::Wildcard(),
|
| + CONTENT_SETTINGS_TYPE_GEOLOCATION,
|
| + std::string(),
|
| + CONTENT_SETTING_ALLOW);
|
| +
|
| + EXPECT_FALSE(callback_called());
|
| +
|
| + GetPermissionManager()->UnsubscribePermissionStatusChange(subscription_id);
|
| +}
|
| +
|
| +TEST_F(PermissionManagerTest, ChangesBackAndForth) {
|
| + GetHostContentSettingsMap()->SetContentSetting(
|
| + ContentSettingsPattern::FromURLNoWildcard(url()),
|
| + ContentSettingsPattern::FromURLNoWildcard(url()),
|
| + CONTENT_SETTINGS_TYPE_GEOLOCATION,
|
| + std::string(),
|
| + CONTENT_SETTING_ASK);
|
| +
|
| + int subscription_id = GetPermissionManager()->SubscribePermissionStatusChange(
|
| + PermissionType::GEOLOCATION, url(), url(),
|
| + base::Bind(&PermissionManagerTest::OnPermissionChange,
|
| + base::Unretained(this)));
|
| +
|
| + GetHostContentSettingsMap()->SetContentSetting(
|
| + ContentSettingsPattern::FromURLNoWildcard(url()),
|
| + ContentSettingsPattern::FromURLNoWildcard(url()),
|
| + CONTENT_SETTINGS_TYPE_GEOLOCATION,
|
| + std::string(),
|
| + CONTENT_SETTING_ALLOW);
|
| +
|
| + EXPECT_TRUE(callback_called());
|
| + EXPECT_EQ(content::PERMISSION_STATUS_GRANTED, callback_result());
|
| +
|
| + Reset();
|
| +
|
| + GetHostContentSettingsMap()->SetContentSetting(
|
| + ContentSettingsPattern::FromURLNoWildcard(url()),
|
| + ContentSettingsPattern::FromURLNoWildcard(url()),
|
| + CONTENT_SETTINGS_TYPE_GEOLOCATION,
|
| + std::string(),
|
| + CONTENT_SETTING_ASK);
|
| +
|
| + EXPECT_TRUE(callback_called());
|
| + EXPECT_EQ(content::PERMISSION_STATUS_ASK, callback_result());
|
| +
|
| + GetPermissionManager()->UnsubscribePermissionStatusChange(subscription_id);
|
| +}
|
|
|