| 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 "base/macros.h" | 7 #include "base/macros.h" |
| 8 #include "build/build_config.h" | 8 #include "build/build_config.h" |
| 9 #include "chrome/browser/content_settings/host_content_settings_map_factory.h" | 9 #include "chrome/browser/content_settings/host_content_settings_map_factory.h" |
| 10 #include "chrome/browser/permissions/permission_manager_factory.h" | 10 #include "chrome/browser/permissions/permission_manager_factory.h" |
| 11 #include "chrome/test/base/testing_profile.h" | 11 #include "chrome/test/base/testing_profile.h" |
| 12 #include "components/content_settings/core/browser/host_content_settings_map.h" | 12 #include "components/content_settings/core/browser/host_content_settings_map.h" |
| 13 #include "content/public/browser/permission_type.h" | 13 #include "content/public/browser/permission_type.h" |
| 14 #include "content/public/test/test_browser_thread_bundle.h" | 14 #include "content/public/test/test_browser_thread_bundle.h" |
| 15 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
| 16 #include "url/origin.h" |
| 16 | 17 |
| 17 using content::PermissionType; | 18 using content::PermissionType; |
| 18 using content::mojom::PermissionStatus; | 19 using content::mojom::PermissionStatus; |
| 19 | 20 |
| 20 namespace { | 21 namespace { |
| 21 | 22 |
| 22 class PermissionManagerTestingProfile final : public TestingProfile { | 23 class PermissionManagerTestingProfile final : public TestingProfile { |
| 23 public: | 24 public: |
| 24 PermissionManagerTestingProfile() {} | 25 PermissionManagerTestingProfile() {} |
| 25 ~PermissionManagerTestingProfile() override {} | 26 ~PermissionManagerTestingProfile() override {} |
| (...skipping 24 matching lines...) Expand all Loading... |
| 50 PermissionManager* GetPermissionManager() { | 51 PermissionManager* GetPermissionManager() { |
| 51 return profile_.GetPermissionManager(); | 52 return profile_.GetPermissionManager(); |
| 52 } | 53 } |
| 53 | 54 |
| 54 HostContentSettingsMap* GetHostContentSettingsMap() { | 55 HostContentSettingsMap* GetHostContentSettingsMap() { |
| 55 return HostContentSettingsMapFactory::GetForProfile(&profile_); | 56 return HostContentSettingsMapFactory::GetForProfile(&profile_); |
| 56 } | 57 } |
| 57 | 58 |
| 58 void CheckPermissionStatus(PermissionType type, | 59 void CheckPermissionStatus(PermissionType type, |
| 59 PermissionStatus expected) { | 60 PermissionStatus expected) { |
| 61 const url::Origin origin(url_); |
| 60 EXPECT_EQ(expected, GetPermissionManager()->GetPermissionStatus( | 62 EXPECT_EQ(expected, GetPermissionManager()->GetPermissionStatus( |
| 61 type, url_.GetOrigin(), url_.GetOrigin())); | 63 type, origin, origin)); |
| 62 } | 64 } |
| 63 | 65 |
| 64 void SetPermission(ContentSettingsType type, ContentSetting value) { | 66 void SetPermission(ContentSettingsType type, ContentSetting value) { |
| 65 HostContentSettingsMapFactory::GetForProfile(&profile_) | 67 HostContentSettingsMapFactory::GetForProfile(&profile_) |
| 66 ->SetContentSettingDefaultScope(url_, url_, type, std::string(), value); | 68 ->SetContentSettingDefaultScope(url_, url_, type, std::string(), value); |
| 67 } | 69 } |
| 68 | 70 |
| 69 const GURL& url() const { | 71 const GURL& url() const { |
| 70 return url_; | 72 return url_; |
| 71 } | 73 } |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 128 | 130 |
| 129 #if defined(OS_ANDROID) | 131 #if defined(OS_ANDROID) |
| 130 SetPermission(CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER, | 132 SetPermission(CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER, |
| 131 CONTENT_SETTING_ALLOW); | 133 CONTENT_SETTING_ALLOW); |
| 132 CheckPermissionStatus(PermissionType::PROTECTED_MEDIA_IDENTIFIER, | 134 CheckPermissionStatus(PermissionType::PROTECTED_MEDIA_IDENTIFIER, |
| 133 content::mojom::PermissionStatus::GRANTED); | 135 content::mojom::PermissionStatus::GRANTED); |
| 134 #endif | 136 #endif |
| 135 } | 137 } |
| 136 | 138 |
| 137 TEST_F(PermissionManagerTest, SameTypeChangeNotifies) { | 139 TEST_F(PermissionManagerTest, SameTypeChangeNotifies) { |
| 140 const url::Origin origin(url()); |
| 138 int subscription_id = GetPermissionManager()->SubscribePermissionStatusChange( | 141 int subscription_id = GetPermissionManager()->SubscribePermissionStatusChange( |
| 139 PermissionType::GEOLOCATION, url(), url(), | 142 PermissionType::GEOLOCATION, origin, origin, |
| 140 base::Bind(&PermissionManagerTest::OnPermissionChange, | 143 base::Bind(&PermissionManagerTest::OnPermissionChange, |
| 141 base::Unretained(this))); | 144 base::Unretained(this))); |
| 142 | 145 |
| 143 GetHostContentSettingsMap()->SetContentSettingDefaultScope( | 146 GetHostContentSettingsMap()->SetContentSettingDefaultScope( |
| 144 url(), url(), CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string(), | 147 url(), url(), CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string(), |
| 145 CONTENT_SETTING_ALLOW); | 148 CONTENT_SETTING_ALLOW); |
| 146 | 149 |
| 147 EXPECT_TRUE(callback_called()); | 150 EXPECT_TRUE(callback_called()); |
| 148 EXPECT_EQ(content::mojom::PermissionStatus::GRANTED, callback_result()); | 151 EXPECT_EQ(content::mojom::PermissionStatus::GRANTED, callback_result()); |
| 149 | 152 |
| 150 GetPermissionManager()->UnsubscribePermissionStatusChange(subscription_id); | 153 GetPermissionManager()->UnsubscribePermissionStatusChange(subscription_id); |
| 151 } | 154 } |
| 152 | 155 |
| 153 TEST_F(PermissionManagerTest, DifferentTypeChangeDoesNotNotify) { | 156 TEST_F(PermissionManagerTest, DifferentTypeChangeDoesNotNotify) { |
| 157 const url::Origin origin(url()); |
| 154 int subscription_id = GetPermissionManager()->SubscribePermissionStatusChange( | 158 int subscription_id = GetPermissionManager()->SubscribePermissionStatusChange( |
| 155 PermissionType::GEOLOCATION, url(), url(), | 159 PermissionType::GEOLOCATION, origin, origin, |
| 156 base::Bind(&PermissionManagerTest::OnPermissionChange, | 160 base::Bind(&PermissionManagerTest::OnPermissionChange, |
| 157 base::Unretained(this))); | 161 base::Unretained(this))); |
| 158 | 162 |
| 159 GetHostContentSettingsMap()->SetContentSettingDefaultScope( | 163 GetHostContentSettingsMap()->SetContentSettingDefaultScope( |
| 160 url(), GURL(), CONTENT_SETTINGS_TYPE_NOTIFICATIONS, std::string(), | 164 url(), GURL(), CONTENT_SETTINGS_TYPE_NOTIFICATIONS, std::string(), |
| 161 CONTENT_SETTING_ALLOW); | 165 CONTENT_SETTING_ALLOW); |
| 162 | 166 |
| 163 EXPECT_FALSE(callback_called()); | 167 EXPECT_FALSE(callback_called()); |
| 164 | 168 |
| 165 GetPermissionManager()->UnsubscribePermissionStatusChange(subscription_id); | 169 GetPermissionManager()->UnsubscribePermissionStatusChange(subscription_id); |
| 166 } | 170 } |
| 167 | 171 |
| 168 TEST_F(PermissionManagerTest, ChangeAfterUnsubscribeDoesNotNotify) { | 172 TEST_F(PermissionManagerTest, ChangeAfterUnsubscribeDoesNotNotify) { |
| 173 const url::Origin origin(url()); |
| 169 int subscription_id = GetPermissionManager()->SubscribePermissionStatusChange( | 174 int subscription_id = GetPermissionManager()->SubscribePermissionStatusChange( |
| 170 PermissionType::GEOLOCATION, url(), url(), | 175 PermissionType::GEOLOCATION, origin, origin, |
| 171 base::Bind(&PermissionManagerTest::OnPermissionChange, | 176 base::Bind(&PermissionManagerTest::OnPermissionChange, |
| 172 base::Unretained(this))); | 177 base::Unretained(this))); |
| 173 | 178 |
| 174 GetPermissionManager()->UnsubscribePermissionStatusChange(subscription_id); | 179 GetPermissionManager()->UnsubscribePermissionStatusChange(subscription_id); |
| 175 | 180 |
| 176 GetHostContentSettingsMap()->SetContentSettingDefaultScope( | 181 GetHostContentSettingsMap()->SetContentSettingDefaultScope( |
| 177 url(), url(), CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string(), | 182 url(), url(), CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string(), |
| 178 CONTENT_SETTING_ALLOW); | 183 CONTENT_SETTING_ALLOW); |
| 179 | 184 |
| 180 EXPECT_FALSE(callback_called()); | 185 EXPECT_FALSE(callback_called()); |
| 181 } | 186 } |
| 182 | 187 |
| 183 TEST_F(PermissionManagerTest, DifferentPrimaryUrlDoesNotNotify) { | 188 TEST_F(PermissionManagerTest, DifferentPrimaryUrlDoesNotNotify) { |
| 189 const url::Origin origin(url()); |
| 184 int subscription_id = GetPermissionManager()->SubscribePermissionStatusChange( | 190 int subscription_id = GetPermissionManager()->SubscribePermissionStatusChange( |
| 185 PermissionType::GEOLOCATION, url(), url(), | 191 PermissionType::GEOLOCATION, origin, origin, |
| 186 base::Bind(&PermissionManagerTest::OnPermissionChange, | 192 base::Bind(&PermissionManagerTest::OnPermissionChange, |
| 187 base::Unretained(this))); | 193 base::Unretained(this))); |
| 188 | 194 |
| 189 GetHostContentSettingsMap()->SetContentSettingDefaultScope( | 195 GetHostContentSettingsMap()->SetContentSettingDefaultScope( |
| 190 other_url(), url(), CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string(), | 196 other_url(), url(), CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string(), |
| 191 CONTENT_SETTING_ALLOW); | 197 CONTENT_SETTING_ALLOW); |
| 192 | 198 |
| 193 EXPECT_FALSE(callback_called()); | 199 EXPECT_FALSE(callback_called()); |
| 194 | 200 |
| 195 GetPermissionManager()->UnsubscribePermissionStatusChange(subscription_id); | 201 GetPermissionManager()->UnsubscribePermissionStatusChange(subscription_id); |
| 196 } | 202 } |
| 197 | 203 |
| 198 TEST_F(PermissionManagerTest, DifferentSecondaryUrlDoesNotNotify) { | 204 TEST_F(PermissionManagerTest, DifferentSecondaryUrlDoesNotNotify) { |
| 205 const url::Origin origin(url()); |
| 199 int subscription_id = GetPermissionManager()->SubscribePermissionStatusChange( | 206 int subscription_id = GetPermissionManager()->SubscribePermissionStatusChange( |
| 200 PermissionType::GEOLOCATION, url(), url(), | 207 PermissionType::GEOLOCATION, origin, origin, |
| 201 base::Bind(&PermissionManagerTest::OnPermissionChange, | 208 base::Bind(&PermissionManagerTest::OnPermissionChange, |
| 202 base::Unretained(this))); | 209 base::Unretained(this))); |
| 203 | 210 |
| 204 GetHostContentSettingsMap()->SetContentSettingDefaultScope( | 211 GetHostContentSettingsMap()->SetContentSettingDefaultScope( |
| 205 url(), other_url(), CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string(), | 212 url(), other_url(), CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string(), |
| 206 CONTENT_SETTING_ALLOW); | 213 CONTENT_SETTING_ALLOW); |
| 207 | 214 |
| 208 EXPECT_FALSE(callback_called()); | 215 EXPECT_FALSE(callback_called()); |
| 209 | 216 |
| 210 GetPermissionManager()->UnsubscribePermissionStatusChange(subscription_id); | 217 GetPermissionManager()->UnsubscribePermissionStatusChange(subscription_id); |
| 211 } | 218 } |
| 212 | 219 |
| 213 TEST_F(PermissionManagerTest, WildCardPatternNotifies) { | 220 TEST_F(PermissionManagerTest, WildCardPatternNotifies) { |
| 221 const url::Origin origin(url()); |
| 214 int subscription_id = GetPermissionManager()->SubscribePermissionStatusChange( | 222 int subscription_id = GetPermissionManager()->SubscribePermissionStatusChange( |
| 215 PermissionType::GEOLOCATION, url(), url(), | 223 PermissionType::GEOLOCATION, origin, origin, |
| 216 base::Bind(&PermissionManagerTest::OnPermissionChange, | 224 base::Bind(&PermissionManagerTest::OnPermissionChange, |
| 217 base::Unretained(this))); | 225 base::Unretained(this))); |
| 218 | 226 |
| 219 GetHostContentSettingsMap()->SetContentSetting( | 227 GetHostContentSettingsMap()->SetContentSetting( |
| 220 ContentSettingsPattern::Wildcard(), | 228 ContentSettingsPattern::Wildcard(), |
| 221 ContentSettingsPattern::Wildcard(), | 229 ContentSettingsPattern::Wildcard(), |
| 222 CONTENT_SETTINGS_TYPE_GEOLOCATION, | 230 CONTENT_SETTINGS_TYPE_GEOLOCATION, |
| 223 std::string(), | 231 std::string(), |
| 224 CONTENT_SETTING_ALLOW); | 232 CONTENT_SETTING_ALLOW); |
| 225 | 233 |
| 226 EXPECT_TRUE(callback_called()); | 234 EXPECT_TRUE(callback_called()); |
| 227 EXPECT_EQ(content::mojom::PermissionStatus::GRANTED, callback_result()); | 235 EXPECT_EQ(content::mojom::PermissionStatus::GRANTED, callback_result()); |
| 228 | 236 |
| 229 GetPermissionManager()->UnsubscribePermissionStatusChange(subscription_id); | 237 GetPermissionManager()->UnsubscribePermissionStatusChange(subscription_id); |
| 230 } | 238 } |
| 231 | 239 |
| 232 TEST_F(PermissionManagerTest, ClearSettingsNotifies) { | 240 TEST_F(PermissionManagerTest, ClearSettingsNotifies) { |
| 233 GetHostContentSettingsMap()->SetContentSettingDefaultScope( | 241 GetHostContentSettingsMap()->SetContentSettingDefaultScope( |
| 234 url(), url(), CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string(), | 242 url(), url(), CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string(), |
| 235 CONTENT_SETTING_ALLOW); | 243 CONTENT_SETTING_ALLOW); |
| 236 | 244 |
| 245 const url::Origin origin(url()); |
| 237 int subscription_id = GetPermissionManager()->SubscribePermissionStatusChange( | 246 int subscription_id = GetPermissionManager()->SubscribePermissionStatusChange( |
| 238 PermissionType::GEOLOCATION, url(), url(), | 247 PermissionType::GEOLOCATION, origin, origin, |
| 239 base::Bind(&PermissionManagerTest::OnPermissionChange, | 248 base::Bind(&PermissionManagerTest::OnPermissionChange, |
| 240 base::Unretained(this))); | 249 base::Unretained(this))); |
| 241 | 250 |
| 242 GetHostContentSettingsMap()->ClearSettingsForOneType( | 251 GetHostContentSettingsMap()->ClearSettingsForOneType( |
| 243 CONTENT_SETTINGS_TYPE_GEOLOCATION); | 252 CONTENT_SETTINGS_TYPE_GEOLOCATION); |
| 244 | 253 |
| 245 EXPECT_TRUE(callback_called()); | 254 EXPECT_TRUE(callback_called()); |
| 246 EXPECT_EQ(content::mojom::PermissionStatus::ASK, callback_result()); | 255 EXPECT_EQ(content::mojom::PermissionStatus::ASK, callback_result()); |
| 247 | 256 |
| 248 GetPermissionManager()->UnsubscribePermissionStatusChange(subscription_id); | 257 GetPermissionManager()->UnsubscribePermissionStatusChange(subscription_id); |
| 249 } | 258 } |
| 250 | 259 |
| 251 TEST_F(PermissionManagerTest, NewValueCorrectlyPassed) { | 260 TEST_F(PermissionManagerTest, NewValueCorrectlyPassed) { |
| 261 const url::Origin origin(url()); |
| 252 int subscription_id = GetPermissionManager()->SubscribePermissionStatusChange( | 262 int subscription_id = GetPermissionManager()->SubscribePermissionStatusChange( |
| 253 PermissionType::GEOLOCATION, url(), url(), | 263 PermissionType::GEOLOCATION, origin, origin, |
| 254 base::Bind(&PermissionManagerTest::OnPermissionChange, | 264 base::Bind(&PermissionManagerTest::OnPermissionChange, |
| 255 base::Unretained(this))); | 265 base::Unretained(this))); |
| 256 | 266 |
| 257 GetHostContentSettingsMap()->SetContentSettingDefaultScope( | 267 GetHostContentSettingsMap()->SetContentSettingDefaultScope( |
| 258 url(), url(), CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string(), | 268 url(), url(), CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string(), |
| 259 CONTENT_SETTING_BLOCK); | 269 CONTENT_SETTING_BLOCK); |
| 260 | 270 |
| 261 EXPECT_TRUE(callback_called()); | 271 EXPECT_TRUE(callback_called()); |
| 262 EXPECT_EQ(content::mojom::PermissionStatus::DENIED, callback_result()); | 272 EXPECT_EQ(content::mojom::PermissionStatus::DENIED, callback_result()); |
| 263 | 273 |
| 264 GetPermissionManager()->UnsubscribePermissionStatusChange(subscription_id); | 274 GetPermissionManager()->UnsubscribePermissionStatusChange(subscription_id); |
| 265 } | 275 } |
| 266 | 276 |
| 267 TEST_F(PermissionManagerTest, ChangeWithoutPermissionChangeDoesNotNotify) { | 277 TEST_F(PermissionManagerTest, ChangeWithoutPermissionChangeDoesNotNotify) { |
| 268 GetHostContentSettingsMap()->SetContentSettingDefaultScope( | 278 GetHostContentSettingsMap()->SetContentSettingDefaultScope( |
| 269 url(), url(), CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string(), | 279 url(), url(), CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string(), |
| 270 CONTENT_SETTING_ALLOW); | 280 CONTENT_SETTING_ALLOW); |
| 271 | 281 |
| 282 const url::Origin origin(url()); |
| 272 int subscription_id = GetPermissionManager()->SubscribePermissionStatusChange( | 283 int subscription_id = GetPermissionManager()->SubscribePermissionStatusChange( |
| 273 PermissionType::GEOLOCATION, url(), url(), | 284 PermissionType::GEOLOCATION, origin, origin, |
| 274 base::Bind(&PermissionManagerTest::OnPermissionChange, | 285 base::Bind(&PermissionManagerTest::OnPermissionChange, |
| 275 base::Unretained(this))); | 286 base::Unretained(this))); |
| 276 | 287 |
| 277 GetHostContentSettingsMap()->SetContentSettingDefaultScope( | 288 GetHostContentSettingsMap()->SetContentSettingDefaultScope( |
| 278 url(), url(), CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string(), | 289 url(), url(), CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string(), |
| 279 CONTENT_SETTING_ALLOW); | 290 CONTENT_SETTING_ALLOW); |
| 280 | 291 |
| 281 EXPECT_FALSE(callback_called()); | 292 EXPECT_FALSE(callback_called()); |
| 282 | 293 |
| 283 GetPermissionManager()->UnsubscribePermissionStatusChange(subscription_id); | 294 GetPermissionManager()->UnsubscribePermissionStatusChange(subscription_id); |
| 284 } | 295 } |
| 285 | 296 |
| 286 TEST_F(PermissionManagerTest, ChangesBackAndForth) { | 297 TEST_F(PermissionManagerTest, ChangesBackAndForth) { |
| 287 GetHostContentSettingsMap()->SetContentSettingDefaultScope( | 298 GetHostContentSettingsMap()->SetContentSettingDefaultScope( |
| 288 url(), url(), CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string(), | 299 url(), url(), CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string(), |
| 289 CONTENT_SETTING_ASK); | 300 CONTENT_SETTING_ASK); |
| 290 | 301 |
| 302 const url::Origin origin(url()); |
| 291 int subscription_id = GetPermissionManager()->SubscribePermissionStatusChange( | 303 int subscription_id = GetPermissionManager()->SubscribePermissionStatusChange( |
| 292 PermissionType::GEOLOCATION, url(), url(), | 304 PermissionType::GEOLOCATION, origin, origin, |
| 293 base::Bind(&PermissionManagerTest::OnPermissionChange, | 305 base::Bind(&PermissionManagerTest::OnPermissionChange, |
| 294 base::Unretained(this))); | 306 base::Unretained(this))); |
| 295 | 307 |
| 296 GetHostContentSettingsMap()->SetContentSettingDefaultScope( | 308 GetHostContentSettingsMap()->SetContentSettingDefaultScope( |
| 297 url(), url(), CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string(), | 309 url(), url(), CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string(), |
| 298 CONTENT_SETTING_ALLOW); | 310 CONTENT_SETTING_ALLOW); |
| 299 | 311 |
| 300 EXPECT_TRUE(callback_called()); | 312 EXPECT_TRUE(callback_called()); |
| 301 EXPECT_EQ(content::mojom::PermissionStatus::GRANTED, callback_result()); | 313 EXPECT_EQ(content::mojom::PermissionStatus::GRANTED, callback_result()); |
| 302 | 314 |
| 303 Reset(); | 315 Reset(); |
| 304 | 316 |
| 305 GetHostContentSettingsMap()->SetContentSettingDefaultScope( | 317 GetHostContentSettingsMap()->SetContentSettingDefaultScope( |
| 306 url(), url(), CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string(), | 318 url(), url(), CONTENT_SETTINGS_TYPE_GEOLOCATION, std::string(), |
| 307 CONTENT_SETTING_ASK); | 319 CONTENT_SETTING_ASK); |
| 308 | 320 |
| 309 EXPECT_TRUE(callback_called()); | 321 EXPECT_TRUE(callback_called()); |
| 310 EXPECT_EQ(content::mojom::PermissionStatus::ASK, callback_result()); | 322 EXPECT_EQ(content::mojom::PermissionStatus::ASK, callback_result()); |
| 311 | 323 |
| 312 GetPermissionManager()->UnsubscribePermissionStatusChange(subscription_id); | 324 GetPermissionManager()->UnsubscribePermissionStatusChange(subscription_id); |
| 313 } | 325 } |
| OLD | NEW |