| 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 b6e6de5ecbbf505c069ddec6b2190416543aff33..68ec9e0040d15a85df8a27d7e10e6906e71db5cd 100644
|
| --- a/chrome/browser/chrome_content_browser_client.cc
|
| +++ b/chrome/browser/chrome_content_browser_client.cc
|
| @@ -620,6 +620,36 @@ 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_IDENTIFIER:
|
| +#if defined(OS_ANDROID)
|
| + return ProtectedMediaIdentifierPermissionContextFactory::GetForProfile(
|
| + profile);
|
| +#else
|
| + NOTIMPLEMENTED();
|
| + break;
|
| +#endif
|
| + 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 {
|
| @@ -1946,45 +1976,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_IDENTIFIER:
|
| -#if defined(OS_ANDROID)
|
| - context = ProtectedMediaIdentifierPermissionContextFactory::GetForProfile(
|
| - profile);
|
| -#else
|
| - NOTIMPLEMENTED();
|
| -#endif
|
| - 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(
|
|
|