Index: chrome/browser/services/gcm/push_messaging_service_impl.cc |
diff --git a/chrome/browser/services/gcm/push_messaging_service_impl.cc b/chrome/browser/services/gcm/push_messaging_service_impl.cc |
index ec7b461420d340288fffabedf7ac30dc566b2b98..8b45e310b4641ca2cb84c9121dbd7a9207ebfed7 100644 |
--- a/chrome/browser/services/gcm/push_messaging_service_impl.cc |
+++ b/chrome/browser/services/gcm/push_messaging_service_impl.cc |
@@ -231,6 +231,44 @@ void PushMessagingServiceImpl::Register( |
callback)); |
} |
+static PushPermissionStatus ToPushPermission( |
+ ContentSetting setting) { |
+ switch (setting) { |
+ case CONTENT_SETTING_ALLOW: |
+ return PushPermissionStatus::PushPermissionGranted; |
+ case CONTENT_SETTING_BLOCK: |
+ return PushPermissionStatus::PushPermissionDenied; |
+ case CONTENT_SETTING_ASK: |
+ return PushPermissionStatus::PushPermissionDefault; |
mlamouri (slow - plz ping)
2014/10/16 09:04:57
Why isn't that named PushPermissionAsk?
Miguel Garcia
2014/10/16 13:50:26
The API permission is defined as default. Since th
|
+ default: |
mlamouri (slow - plz ping)
2014/10/16 09:04:57
What about the other values? Shouldn't SESSION_ONL
Miguel Garcia
2014/10/16 13:50:26
I rather keep it simple.
- Default does not mean a
mlamouri (slow - plz ping)
2014/10/17 09:30:56
I would prefer to have SESSION_ONLY be respected a
|
+ NOTREACHED(); |
+ return PushPermissionStatus::PushPermissionDenied; |
+ } |
+} |
+ |
+PushPermissionStatus PushMessagingServiceImpl::PermissionStatus( |
+ const GURL& requesting_origin, int renderer_id, int render_frame_id) { |
+ content::RenderFrameHost* render_frame_host = |
+ content::RenderFrameHost::FromID(renderer_id, render_frame_id); |
+ |
+ // The frame doesn't exist any more, or we received a bad frame id. |
+ if (!render_frame_host) |
+ return PushPermissionStatus::PushPermissionDenied; |
+ |
+ content::WebContents* web_contents = |
+ content::WebContents::FromRenderFrameHost(render_frame_host); |
+ |
+ // The page doesn't exist any more or we got a bad render frame host. |
+ if (!web_contents) |
+ return PushPermissionStatus::PushPermissionDenied; |
+ |
+ GURL embedder_origin = web_contents->GetLastCommittedURL().GetOrigin(); |
+ gcm::PushMessagingPermissionContext* permission_context = |
+ gcm::PushMessagingPermissionContextFactory::GetForProfile(profile_); |
+ return ToPushPermission( |
+ permission_context->PermissionStatus(requesting_origin, embedder_origin)); |
+} |
+ |
void PushMessagingServiceImpl::RegisterEnd( |
const content::PushMessagingService::RegisterCallback& callback, |
const std::string& registration_id, |