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)#include "content/renderer/notification_permission_dispatcher.h"
65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "content/common/platform_notification_messages.h"
85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "third_party/WebKit/public/platform/WebString.h"
95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "third_party/WebKit/public/web/WebNotificationPermissionCallback.h"
105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "third_party/WebKit/public/web/WebSecurityOrigin.h"
115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "url/gurl.h"
125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace content {
145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)NotificationPermissionDispatcher::NotificationPermissionDispatcher(
165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    RenderFrame* render_frame) : RenderFrameObserver(render_frame) {
175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)NotificationPermissionDispatcher::~NotificationPermissionDispatcher() {
205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void NotificationPermissionDispatcher::RequestPermission(
235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const blink::WebSecurityOrigin& origin,
245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    blink::WebNotificationPermissionCallback* callback) {
255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  int request_id = pending_requests_.Add(callback);
265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  Send(new PlatformNotificationHostMsg_RequestPermission(
275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      routing_id(), GURL(origin.toString()), request_id));
285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bool NotificationPermissionDispatcher::OnMessageReceived(
315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const IPC::Message& message) {
325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  bool handled = true;
335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  IPC_BEGIN_MESSAGE_MAP(NotificationPermissionDispatcher, message)
345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    IPC_MESSAGE_HANDLER(PlatformNotificationMsg_PermissionRequestComplete,
355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                        OnPermissionRequestComplete);
365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    IPC_MESSAGE_UNHANDLED(handled = false)
375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  IPC_END_MESSAGE_MAP()
385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return handled;
405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void NotificationPermissionDispatcher::OnPermissionRequestComplete(
435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    int request_id, blink::WebNotificationPermission result) {
445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  blink::WebNotificationPermissionCallback* callback =
455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      pending_requests_.Lookup(request_id);
465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  DCHECK(callback);
475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  callback->permissionRequestComplete(result);
495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  pending_requests_.Remove(request_id);
505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}  // namespace content
53