1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CONTENT_RENDERER_NOTIFICATION_PERMISSION_DISPATCHER_H_ 6 #define CONTENT_RENDERER_NOTIFICATION_PERMISSION_DISPATCHER_H_ 7 8 #include "base/id_map.h" 9 #include "content/public/renderer/render_frame_observer.h" 10 #include "ipc/ipc_message.h" 11 #include "third_party/WebKit/public/platform/WebNotificationPermission.h" 12 13 namespace blink { 14 class WebNotificationPermissionCallback; 15 class WebSecurityOrigin; 16 } 17 18 namespace content { 19 20 // Dispatcher for Web Notification permission requests. 21 class NotificationPermissionDispatcher : public RenderFrameObserver { 22 public: 23 explicit NotificationPermissionDispatcher(RenderFrame* render_frame); 24 virtual ~NotificationPermissionDispatcher(); 25 26 // Requests permission to display Web Notifications for |origin|. The callback 27 // will be invoked when the permission status is available. This class will 28 // take ownership of |callback|. 29 void RequestPermission( 30 const blink::WebSecurityOrigin& origin, 31 blink::WebNotificationPermissionCallback* callback); 32 33 private: 34 // RenderFrameObserver implementation. 35 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; 36 37 void OnPermissionRequestComplete( 38 int request_id, blink::WebNotificationPermission result); 39 40 // Tracks the active notification permission requests. This class takes 41 // ownership of the created WebNotificationPermissionCallback objects. 42 IDMap<blink::WebNotificationPermissionCallback, IDMapOwnPointer> 43 pending_requests_; 44 45 DISALLOW_COPY_AND_ASSIGN(NotificationPermissionDispatcher); 46 }; 47 48 } // namespace content 49 50 #endif // CONTENT_RENDERER_NOTIFICATION_PERMISSION_DISPATCHER_H_ 51