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