// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "chrome/browser/desktop_notification_handler.h" #include "chrome/browser/notifications/desktop_notification_service.h" #include "chrome/browser/profiles/profile.h" #include "content/browser/renderer_host/render_process_host.h" #include "content/browser/renderer_host/render_view_host.h" #include "content/browser/renderer_host/render_view_host_delegate.h" #include "content/common/desktop_notification_messages.h" DesktopNotificationHandler::DesktopNotificationHandler( RenderViewHost* render_view_host) : RenderViewHostObserver(render_view_host) { } DesktopNotificationHandler::~DesktopNotificationHandler() { } bool DesktopNotificationHandler::OnMessageReceived( const IPC::Message& message) { bool handled = true; IPC_BEGIN_MESSAGE_MAP(DesktopNotificationHandler, message) IPC_MESSAGE_HANDLER(DesktopNotificationHostMsg_Show, OnShow) IPC_MESSAGE_HANDLER(DesktopNotificationHostMsg_Cancel, OnCancel) IPC_MESSAGE_HANDLER(DesktopNotificationHostMsg_RequestPermission, OnRequestPermission) IPC_MESSAGE_UNHANDLED(handled = false) IPC_END_MESSAGE_MAP() return handled; } void DesktopNotificationHandler::OnShow( const DesktopNotificationHostMsg_Show_Params& params) { RenderProcessHost* process = render_view_host()->process(); DesktopNotificationService* service = process->profile()->GetDesktopNotificationService(); service->ShowDesktopNotification( params, process->id(), routing_id(), DesktopNotificationService::PageNotification); } void DesktopNotificationHandler::OnCancel(int notification_id) { RenderProcessHost* process = render_view_host()->process(); DesktopNotificationService* service = process->profile()->GetDesktopNotificationService(); service->CancelDesktopNotification( process->id(), routing_id(), notification_id); } void DesktopNotificationHandler::OnRequestPermission( const GURL& source_origin, int callback_context) { if (render_view_host()->delegate()->RequestDesktopNotificationPermission( source_origin, callback_context)) { return; } RenderProcessHost* process = render_view_host()->process(); DesktopNotificationService* service = process->profile()->GetDesktopNotificationService(); service->RequestPermission( source_origin, process->id(), routing_id(), callback_context, NULL); }