Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(297)

Side by Side Diff: chrome/browser/desktop_notification_handler.cc

Issue 7125006: Get rid of Chrome notifications dependency, and instead go through ContentBrowserClient to show U... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: fix browsertest Created 9 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2011 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 "chrome/browser/desktop_notification_handler.h"
6
7 #include "chrome/browser/notifications/desktop_notification_service.h"
8 #include "chrome/browser/notifications/desktop_notification_service_factory.h"
9 #include "chrome/browser/profiles/profile.h"
10 #include "chrome/common/url_constants.h"
11 #include "content/browser/renderer_host/render_process_host.h"
12 #include "content/browser/renderer_host/render_view_host.h"
13 #include "content/browser/renderer_host/render_view_host_delegate.h"
14 #include "content/common/desktop_notification_messages.h"
15
16 // static
17 DesktopNotificationHandler*
18 DesktopNotificationHandler::Create(RenderViewHost* render_view_host) {
19 return new DesktopNotificationHandler(render_view_host);
20 }
21
22 DesktopNotificationHandler::~DesktopNotificationHandler() {
23 }
24
25 DesktopNotificationHandler::DesktopNotificationHandler(
26 RenderViewHost* render_view_host)
27 : RenderViewHostObserver(render_view_host) {
28 }
29
30 bool DesktopNotificationHandler::OnMessageReceived(
31 const IPC::Message& message) {
32 bool handled = true;
33
34 IPC_BEGIN_MESSAGE_MAP(DesktopNotificationHandler, message)
35 IPC_MESSAGE_HANDLER(DesktopNotificationHostMsg_Show, OnShow)
36 IPC_MESSAGE_HANDLER(DesktopNotificationHostMsg_Cancel, OnCancel)
37 IPC_MESSAGE_HANDLER(DesktopNotificationHostMsg_RequestPermission,
38 OnRequestPermission)
39 IPC_MESSAGE_UNHANDLED(handled = false)
40 IPC_END_MESSAGE_MAP()
41
42 return handled;
43 }
44
45 void DesktopNotificationHandler::OnShow(
46 const DesktopNotificationHostMsg_Show_Params& params) {
47 // Disallow HTML notifications from unwanted schemes. javascript:
48 // in particular allows unwanted cross-domain access.
49 GURL url = params.contents_url;
50 if (params.is_html &&
51 !url.SchemeIs(chrome::kHttpScheme) &&
52 !url.SchemeIs(chrome::kHttpsScheme) &&
53 !url.SchemeIs(chrome::kExtensionScheme) &&
54 !url.SchemeIs(chrome::kDataScheme)) {
55 return;
56 }
57
58 RenderProcessHost* process = render_view_host()->process();
59 DesktopNotificationService* service =
60 DesktopNotificationServiceFactory::GetForProfile(process->profile());
61
62 service->ShowDesktopNotification(
63 params,
64 process->id(),
65 routing_id(),
66 DesktopNotificationService::PageNotification);
67 }
68
69 void DesktopNotificationHandler::OnCancel(int notification_id) {
70 RenderProcessHost* process = render_view_host()->process();
71 DesktopNotificationService* service =
72 DesktopNotificationServiceFactory::GetForProfile(process->profile());
73
74 service->CancelDesktopNotification(
75 process->id(),
76 routing_id(),
77 notification_id);
78 }
79
80 void DesktopNotificationHandler::OnRequestPermission(
81 const GURL& source_origin, int callback_context) {
82 if (render_view_host()->delegate()->RequestDesktopNotificationPermission(
83 source_origin, callback_context)) {
84 return;
85 }
86
87 RenderProcessHost* process = render_view_host()->process();
88 DesktopNotificationService* service =
89 DesktopNotificationServiceFactory::GetForProfile(process->profile());
90 service->RequestPermission(
91 source_origin, process->id(), routing_id(), callback_context, NULL);
92 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698