| 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 f3e134c5c13e205461d3768cfea2535abc50d3c2..a393ea3627499ca1e043f111cef1f49a94ceee83 100644
 | 
| --- a/chrome/browser/chrome_content_browser_client.cc
 | 
| +++ b/chrome/browser/chrome_content_browser_client.cc
 | 
| @@ -1922,7 +1922,8 @@ void ChromeContentBrowserClient::ShowDesktopNotification(
 | 
|  #endif
 | 
|  }
 | 
|  
 | 
| -void ChromeContentBrowserClient::RequestGeolocationPermission(
 | 
| +void ChromeContentBrowserClient::RequestPermission(
 | 
| +    content::PermissionType permission,
 | 
|      content::WebContents* web_contents,
 | 
|      int bridge_id,
 | 
|      const GURL& requesting_frame,
 | 
| @@ -1935,14 +1936,43 @@ void ChromeContentBrowserClient::RequestGeolocationPermission(
 | 
|                                         render_view_id,
 | 
|                                         bridge_id,
 | 
|                                         requesting_frame);
 | 
| -  GeolocationPermissionContextFactory::GetForProfile(
 | 
| -      Profile::FromBrowserContext(web_contents->GetBrowserContext()))->
 | 
| -          RequestPermission(web_contents, request_id,
 | 
| -                            requesting_frame.GetOrigin(), user_gesture,
 | 
| -                            result_callback);
 | 
| +
 | 
| +  switch (permission) {
 | 
| +    case content::PERMISSION_MIDI_SYSEX:
 | 
| +      MidiPermissionContextFactory::GetForProfile(
 | 
| +          Profile::FromBrowserContext(web_contents->GetBrowserContext()))
 | 
| +      ->RequestPermission(web_contents, request_id, requesting_frame,
 | 
| +                          user_gesture, result_callback);
 | 
| +      break;
 | 
| +    case content::PERMISSION_NOTIFICATIONS:
 | 
| +      // TODO(miguelg) implement notifications once the platform refactor
 | 
| +      // is finished.
 | 
| +      LOG(WARNING) << "Permission request not implemented for " << permission;
 | 
| +      break;
 | 
| +    case content::PERMISSION_GEOLOCATION:
 | 
| +      GeolocationPermissionContextFactory::GetForProfile(
 | 
| +          Profile::FromBrowserContext(web_contents->GetBrowserContext()))
 | 
| +      ->RequestPermission(web_contents, request_id,
 | 
| +                          requesting_frame.GetOrigin(), user_gesture,
 | 
| +                          result_callback);
 | 
| +      break;
 | 
| +#if defined(OS_ANDROID)
 | 
| +    case content::PERMISSION_PROTECTED_MEDIA:
 | 
| +      ProtectedMediaIdentifierPermissionContextFactory::GetForProfile(
 | 
| +          Profile::FromBrowserContext(web_contents->GetBrowserContext()))
 | 
| +      ->RequestProtectedMediaIdentifierPermission(web_contents,
 | 
| +                                                  requesting_frame,
 | 
| +                                                  result_callback);
 | 
| +      break;
 | 
| +#endif
 | 
| +    default:
 | 
| +      LOG(WARNING) << "Permission not available " << permission;
 | 
| +  }
 | 
| +
 | 
|  }
 | 
|  
 | 
| -void ChromeContentBrowserClient::CancelGeolocationPermissionRequest(
 | 
| +void ChromeContentBrowserClient::CancelPermissionRequest(
 | 
| +    content::PermissionType permission,
 | 
|      content::WebContents* web_contents,
 | 
|      int bridge_id,
 | 
|      const GURL& requesting_frame) {
 | 
| @@ -1953,28 +1983,39 @@ void ChromeContentBrowserClient::CancelGeolocationPermissionRequest(
 | 
|                                         render_view_id,
 | 
|                                         bridge_id,
 | 
|                                         requesting_frame);
 | 
| -  GeolocationPermissionContextFactory::GetForProfile(
 | 
| -        Profile::FromBrowserContext(web_contents->GetBrowserContext()))->
 | 
| -            CancelPermissionRequest(web_contents, request_id);
 | 
| +  switch (permission) {
 | 
| +    case content::PERMISSION_MIDI_SYSEX:
 | 
| +          MidiPermissionContextFactory::GetForProfile(
 | 
| +              Profile::FromBrowserContext(web_contents->GetBrowserContext()))
 | 
| +          ->CancelPermissionRequest(web_contents, request_id);
 | 
| +          break;
 | 
| +        case content::PERMISSION_NOTIFICATIONS:
 | 
| +          // TODO(miguelg) implement notifications once the platform refactor
 | 
| +          // is finished.
 | 
| +          LOG(WARNING) << "Cancel Permission request not implemented for "
 | 
| +              << permission;
 | 
| +          break;
 | 
| +        case content::PERMISSION_GEOLOCATION:
 | 
| +          GeolocationPermissionContextFactory::GetForProfile(
 | 
| +                Profile::FromBrowserContext(
 | 
| +                    web_contents->GetBrowserContext()))
 | 
| +          ->CancelPermissionRequest(web_contents, request_id);
 | 
| +          break;
 | 
| +    #if defined(OS_ANDROID)
 | 
| +        case content::PERMISSION_PROTECTED_MEDIA:
 | 
| +          ProtectedMediaIdentifierPermissionContextFactory::GetForProfile(
 | 
| +              Profile::FromBrowserContext(web_contents->GetBrowserContext()))
 | 
| +          ->CancelProtectedMediaIdentifierPermissionRequests(
 | 
| +              render_process_id,
 | 
| +              render_view_id,
 | 
| +              requesting_frame);
 | 
| +          break;
 | 
| +    #endif
 | 
| +        default:
 | 
| +          LOG(WARNING) << "Permission not available " << permission;
 | 
| +  }
 | 
|  }
 | 
|  
 | 
| -void ChromeContentBrowserClient::RequestMidiSysExPermission(
 | 
| -    content::WebContents* web_contents,
 | 
| -    int bridge_id,
 | 
| -    const GURL& requesting_frame,
 | 
| -    bool user_gesture,
 | 
| -    base::Callback<void(bool)> result_callback,
 | 
| -    base::Closure* cancel_callback) {
 | 
| -  MidiPermissionContext* context =
 | 
| -      MidiPermissionContextFactory::GetForProfile(
 | 
| -          Profile::FromBrowserContext(web_contents->GetBrowserContext()));
 | 
| -  int renderer_id = web_contents->GetRenderProcessHost()->GetID();
 | 
| -  int render_view_id = web_contents->GetRenderViewHost()->GetRoutingID();
 | 
| -  const PermissionRequestID id(renderer_id, render_view_id, bridge_id, GURL());
 | 
| -
 | 
| -  context->RequestPermission(web_contents, id, requesting_frame,
 | 
| -                             user_gesture, result_callback);
 | 
| -}
 | 
|  
 | 
|  void ChromeContentBrowserClient::DidUseGeolocationPermission(
 | 
|      content::WebContents* web_contents,
 | 
| @@ -1986,25 +2027,6 @@ void ChromeContentBrowserClient::DidUseGeolocationPermission(
 | 
|            frame_url, main_frame_url, CONTENT_SETTINGS_TYPE_GEOLOCATION);
 | 
|  }
 | 
|  
 | 
| -void ChromeContentBrowserClient::RequestProtectedMediaIdentifierPermission(
 | 
| -    content::WebContents* web_contents,
 | 
| -    const GURL& origin,
 | 
| -    base::Callback<void(bool)> result_callback,
 | 
| -    base::Closure* cancel_callback) {
 | 
| -#if defined(OS_ANDROID)
 | 
| -  ProtectedMediaIdentifierPermissionContext* context =
 | 
| -      ProtectedMediaIdentifierPermissionContextFactory::GetForProfile(
 | 
| -          Profile::FromBrowserContext(web_contents->GetBrowserContext()));
 | 
| -  context->RequestProtectedMediaIdentifierPermission(web_contents,
 | 
| -                                                     origin,
 | 
| -                                                     result_callback,
 | 
| -                                                     cancel_callback);
 | 
| -#else
 | 
| -  NOTIMPLEMENTED();
 | 
| -  result_callback.Run(false);
 | 
| -#endif  // defined(OS_ANDROID)
 | 
| -}
 | 
| -
 | 
|  bool ChromeContentBrowserClient::CanCreateWindow(
 | 
|      const GURL& opener_url,
 | 
|      const GURL& opener_top_level_frame_url,
 | 
| 
 |