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#include "content/renderer/notification_permission_dispatcher.h"
6
7#include "content/common/platform_notification_messages.h"
8#include "third_party/WebKit/public/platform/WebString.h"
9#include "third_party/WebKit/public/web/WebNotificationPermissionCallback.h"
10#include "third_party/WebKit/public/web/WebSecurityOrigin.h"
11#include "url/gurl.h"
12
13namespace content {
14
15NotificationPermissionDispatcher::NotificationPermissionDispatcher(
16    RenderFrame* render_frame) : RenderFrameObserver(render_frame) {
17}
18
19NotificationPermissionDispatcher::~NotificationPermissionDispatcher() {
20}
21
22void NotificationPermissionDispatcher::RequestPermission(
23    const blink::WebSecurityOrigin& origin,
24    blink::WebNotificationPermissionCallback* callback) {
25  int request_id = pending_requests_.Add(callback);
26  Send(new PlatformNotificationHostMsg_RequestPermission(
27      routing_id(), GURL(origin.toString()), request_id));
28}
29
30bool NotificationPermissionDispatcher::OnMessageReceived(
31    const IPC::Message& message) {
32  bool handled = true;
33  IPC_BEGIN_MESSAGE_MAP(NotificationPermissionDispatcher, message)
34    IPC_MESSAGE_HANDLER(PlatformNotificationMsg_PermissionRequestComplete,
35                        OnPermissionRequestComplete);
36    IPC_MESSAGE_UNHANDLED(handled = false)
37  IPC_END_MESSAGE_MAP()
38
39  return handled;
40}
41
42void NotificationPermissionDispatcher::OnPermissionRequestComplete(
43    int request_id, blink::WebNotificationPermission result) {
44  blink::WebNotificationPermissionCallback* callback =
45      pending_requests_.Lookup(request_id);
46  DCHECK(callback);
47
48  callback->permissionRequestComplete(result);
49  pending_requests_.Remove(request_id);
50}
51
52}  // namespace content
53