15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// found in the LICENSE file. 45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#ifndef CONTENT_RENDERER_NOTIFICATION_PERMISSION_DISPATCHER_H_ 65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define CONTENT_RENDERER_NOTIFICATION_PERMISSION_DISPATCHER_H_ 75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/id_map.h" 95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "content/public/renderer/render_frame_observer.h" 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ipc/ipc_message.h" 115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "third_party/WebKit/public/platform/WebNotificationPermission.h" 125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace blink { 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class WebNotificationPermissionCallback; 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class WebSecurityOrigin; 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace content { 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Dispatcher for Web Notification permission requests. 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class NotificationPermissionDispatcher : public RenderFrameObserver { 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public: 235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) explicit NotificationPermissionDispatcher(RenderFrame* render_frame); 245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual ~NotificationPermissionDispatcher(); 255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Requests permission to display Web Notifications for |origin|. The callback 275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // will be invoked when the permission status is available. This class will 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // take ownership of |callback|. 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void RequestPermission( 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const blink::WebSecurityOrigin& origin, 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) blink::WebNotificationPermissionCallback* callback); 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) private: 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // RenderFrameObserver implementation. 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void OnPermissionRequestComplete( 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int request_id, blink::WebNotificationPermission result); 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Tracks the active notification permission requests. This class takes 415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // ownership of the created WebNotificationPermissionCallback objects. 425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) IDMap<blink::WebNotificationPermissionCallback, IDMapOwnPointer> 435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) pending_requests_; 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(NotificationPermissionDispatcher); 465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}; 475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} // namespace content 495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif // CONTENT_RENDERER_NOTIFICATION_PERMISSION_DISPATCHER_H_ 51