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