| Index: chrome/browser/chrome_content_browser_client.cc
|
| diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
|
| index a45399ec4245e8c283c4919377bf3bece0f974c0..a1089b65a2c61dde4ff79b5abf78b127af76c20e 100644
|
| --- a/chrome/browser/chrome_content_browser_client.cc
|
| +++ b/chrome/browser/chrome_content_browser_client.cc
|
| @@ -619,6 +619,31 @@ ContentSettingToPermissionStatus(ContentSetting setting) {
|
| return content::PERMISSION_STATUS_DENIED;
|
| }
|
|
|
| +PermissionContextBase* GetPermissionContext(Profile* profile,
|
| + content::PermissionType permission) {
|
| + switch (permission) {
|
| + case content::PERMISSION_MIDI_SYSEX:
|
| + return MidiPermissionContextFactory::GetForProfile(profile);
|
| + case content::PERMISSION_NOTIFICATIONS:
|
| +#if defined(ENABLE_NOTIFICATIONS)
|
| + return DesktopNotificationServiceFactory::GetForProfile(profile);
|
| +#else
|
| + NOTIMPLEMENTED();
|
| +#endif
|
| + case content::PERMISSION_GEOLOCATION:
|
| + return GeolocationPermissionContextFactory::GetForProfile(profile);
|
| + case content::PERMISSION_PROTECTED_MEDIA:
|
| + NOTIMPLEMENTED();
|
| + break;
|
| + case content::PERMISSION_PUSH_MESSAGING:
|
| + return gcm::PushMessagingPermissionContextFactory::GetForProfile(profile);
|
| + case content::PERMISSION_NUM:
|
| + NOTREACHED() << "Invalid RequestPermission for " << permission;
|
| + break;
|
| + }
|
| + return nullptr;
|
| +}
|
| +
|
| } // namespace
|
|
|
| namespace chrome {
|
| @@ -1945,40 +1970,30 @@ content::PermissionStatus ChromeContentBrowserClient::GetPermissionStatus(
|
| const GURL& embedding_origin) {
|
| DCHECK(browser_context);
|
| Profile* profile = Profile::FromBrowserContext(browser_context);
|
| + PermissionContextBase* context = GetPermissionContext(profile, permission);
|
|
|
| - PermissionContextBase* context = nullptr;
|
| - switch (permission) {
|
| - case content::PERMISSION_MIDI_SYSEX:
|
| - context = MidiPermissionContextFactory::GetForProfile(profile);
|
| - break;
|
| - case content::PERMISSION_NOTIFICATIONS:
|
| -#if defined(ENABLE_NOTIFICATIONS)
|
| - context = DesktopNotificationServiceFactory::GetForProfile(profile);
|
| -#else
|
| - NOTIMPLEMENTED();
|
| -#endif
|
| - break;
|
| - case content::PERMISSION_GEOLOCATION:
|
| - context = GeolocationPermissionContextFactory::GetForProfile(profile);
|
| - break;
|
| - case content::PERMISSION_PROTECTED_MEDIA:
|
| - NOTIMPLEMENTED();
|
| - break;
|
| - case content::PERMISSION_PUSH_MESSAGING:
|
| - context = gcm::PushMessagingPermissionContextFactory::GetForProfile(
|
| - profile);
|
| - break;
|
| - case content::PERMISSION_NUM:
|
| - NOTREACHED() << "Invalid RequestPermission for " << permission;
|
| - break;
|
| - }
|
| + if (!context)
|
| + return content::PERMISSION_STATUS_ASK;
|
| +
|
| + return ContentSettingToPermissionStatus(
|
| + context->GetPermissionStatus(requesting_origin.GetOrigin(),
|
| + embedding_origin.GetOrigin()));
|
| +}
|
| +
|
| +void ChromeContentBrowserClient::ResetPermission(
|
| + content::PermissionType permission,
|
| + content::BrowserContext* browser_context,
|
| + const GURL& requesting_origin,
|
| + const GURL& embedding_origin) {
|
| + DCHECK(browser_context);
|
| + Profile* profile = Profile::FromBrowserContext(browser_context);
|
| + PermissionContextBase* context = GetPermissionContext(profile, permission);
|
|
|
| - ContentSetting result = context
|
| - ? context->GetPermissionStatus(requesting_origin.GetOrigin(),
|
| - embedding_origin.GetOrigin())
|
| - : CONTENT_SETTING_DEFAULT;
|
| + if (!context)
|
| + return;
|
|
|
| - return ContentSettingToPermissionStatus(result);
|
| + context->ResetPermission(requesting_origin.GetOrigin(),
|
| + embedding_origin.GetOrigin());
|
| }
|
|
|
| void ChromeContentBrowserClient::CancelPermissionRequest(
|
|
|