Revert of [Android WebView] Synthesize a fake page loading event on page source modif...
[chromium-blink-merge.git] / content / renderer / notification_permission_dispatcher.cc
blobfae8aaddf81328e1a2fc35f87e3f8c76e340ab9a
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.
5 #include "content/renderer/notification_permission_dispatcher.h"
7 #include "base/bind.h"
8 #include "content/public/common/service_registry.h"
9 #include "content/public/renderer/render_frame.h"
10 #include "third_party/WebKit/public/platform/WebString.h"
11 #include "third_party/WebKit/public/web/WebSecurityOrigin.h"
12 #include "third_party/WebKit/public/web/WebUserGestureIndicator.h"
13 #include "third_party/WebKit/public/web/modules/notifications/WebNotificationPermissionCallback.h"
15 namespace content {
17 NotificationPermissionDispatcher::NotificationPermissionDispatcher(
18 RenderFrame* render_frame) : RenderFrameObserver(render_frame) {
21 NotificationPermissionDispatcher::~NotificationPermissionDispatcher() {
24 void NotificationPermissionDispatcher::RequestPermission(
25 const blink::WebSecurityOrigin& origin,
26 blink::WebNotificationPermissionCallback* callback) {
27 if (!permission_service_.get()) {
28 render_frame()->GetServiceRegistry()->ConnectToRemoteService(
29 &permission_service_);
32 int request_id = pending_requests_.Add(callback);
34 permission_service_->RequestPermission(
35 PERMISSION_NAME_NOTIFICATIONS,
36 origin.toString().utf8(),
37 blink::WebUserGestureIndicator::isProcessingUserGesture(),
38 base::Bind(&NotificationPermissionDispatcher::OnPermissionRequestComplete,
39 base::Unretained(this),
40 request_id));
43 void NotificationPermissionDispatcher::OnPermissionRequestComplete(
44 int request_id, PermissionStatus status) {
45 blink::WebNotificationPermissionCallback* callback =
46 pending_requests_.Lookup(request_id);
47 DCHECK(callback);
49 // TODO(mlamouri): we should have a switch to handle all cases but for now,
50 // the Notification code is assuming allowed/denied.
51 // See http://crbug.com/434547 and http://crbug.com/436414
52 blink::WebNotificationPermission permission =
53 status == PERMISSION_STATUS_GRANTED
54 ? blink::WebNotificationPermissionAllowed
55 : blink::WebNotificationPermissionDenied;
57 callback->permissionRequestComplete(permission);
58 pending_requests_.Remove(request_id);
61 } // namespace content