Commit a59ee43b authored by peter's avatar peter Committed by Commit bot

Stop using base::IDMap in the NotificationPermissionDispatcher

BUG=

Review URL: https://codereview.chromium.org/1471833002

Cr-Commit-Position: refs/heads/master@{#361310}
parent d517f846
...@@ -12,38 +12,38 @@ ...@@ -12,38 +12,38 @@
#include "third_party/WebKit/public/web/WebUserGestureIndicator.h" #include "third_party/WebKit/public/web/WebUserGestureIndicator.h"
#include "third_party/WebKit/public/web/modules/notifications/WebNotificationPermissionCallback.h" #include "third_party/WebKit/public/web/modules/notifications/WebNotificationPermissionCallback.h"
using blink::WebNotificationPermissionCallback;
namespace content { namespace content {
NotificationPermissionDispatcher::NotificationPermissionDispatcher( NotificationPermissionDispatcher::NotificationPermissionDispatcher(
RenderFrame* render_frame) : RenderFrameObserver(render_frame) { RenderFrame* render_frame)
} : RenderFrameObserver(render_frame) {}
NotificationPermissionDispatcher::~NotificationPermissionDispatcher() { NotificationPermissionDispatcher::~NotificationPermissionDispatcher() {}
}
void NotificationPermissionDispatcher::RequestPermission( void NotificationPermissionDispatcher::RequestPermission(
const blink::WebSecurityOrigin& origin, const blink::WebSecurityOrigin& origin,
blink::WebNotificationPermissionCallback* callback) { WebNotificationPermissionCallback* callback) {
if (!permission_service_.get()) { if (!permission_service_.get()) {
render_frame()->GetServiceRegistry()->ConnectToRemoteService( render_frame()->GetServiceRegistry()->ConnectToRemoteService(
mojo::GetProxy(&permission_service_)); mojo::GetProxy(&permission_service_));
} }
int request_id = pending_requests_.Add(callback); scoped_ptr<WebNotificationPermissionCallback> owned_callback(callback);
// base::Unretained is safe here because the Mojo channel, with associated
// callbacks, will be deleted before the "this" instance is deleted.
permission_service_->RequestPermission( permission_service_->RequestPermission(
PERMISSION_NAME_NOTIFICATIONS, PERMISSION_NAME_NOTIFICATIONS, origin.toString().utf8(),
origin.toString().utf8(),
blink::WebUserGestureIndicator::isProcessingUserGesture(), blink::WebUserGestureIndicator::isProcessingUserGesture(),
base::Bind(&NotificationPermissionDispatcher::OnPermissionRequestComplete, base::Bind(&NotificationPermissionDispatcher::OnPermissionRequestComplete,
base::Unretained(this), base::Unretained(this), base::Passed(owned_callback.Pass())));
request_id));
} }
void NotificationPermissionDispatcher::OnPermissionRequestComplete( void NotificationPermissionDispatcher::OnPermissionRequestComplete(
int request_id, PermissionStatus status) { scoped_ptr<WebNotificationPermissionCallback> callback,
blink::WebNotificationPermissionCallback* callback = PermissionStatus status) {
pending_requests_.Lookup(request_id);
DCHECK(callback); DCHECK(callback);
blink::WebNotificationPermission permission = blink::WebNotificationPermission permission =
...@@ -61,7 +61,6 @@ void NotificationPermissionDispatcher::OnPermissionRequestComplete( ...@@ -61,7 +61,6 @@ void NotificationPermissionDispatcher::OnPermissionRequestComplete(
} }
callback->permissionRequestComplete(permission); callback->permissionRequestComplete(permission);
pending_requests_.Remove(request_id);
} }
} // namespace content } // namespace content
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
#ifndef CONTENT_RENDERER_NOTIFICATION_PERMISSION_DISPATCHER_H_ #ifndef CONTENT_RENDERER_NOTIFICATION_PERMISSION_DISPATCHER_H_
#define CONTENT_RENDERER_NOTIFICATION_PERMISSION_DISPATCHER_H_ #define CONTENT_RENDERER_NOTIFICATION_PERMISSION_DISPATCHER_H_
#include "base/id_map.h" #include "base/memory/scoped_ptr.h"
#include "content/common/permission_service.mojom.h" #include "content/common/permission_service.mojom.h"
#include "content/public/renderer/render_frame_observer.h" #include "content/public/renderer/render_frame_observer.h"
...@@ -16,6 +16,8 @@ class WebSecurityOrigin; ...@@ -16,6 +16,8 @@ class WebSecurityOrigin;
namespace content { namespace content {
class RenderFrame;
// Dispatcher for Web Notification permission requests. // Dispatcher for Web Notification permission requests.
class NotificationPermissionDispatcher : public RenderFrameObserver { class NotificationPermissionDispatcher : public RenderFrameObserver {
public: public:
...@@ -25,18 +27,13 @@ class NotificationPermissionDispatcher : public RenderFrameObserver { ...@@ -25,18 +27,13 @@ class NotificationPermissionDispatcher : public RenderFrameObserver {
// Requests permission to display Web Notifications for |origin|. The callback // Requests permission to display Web Notifications for |origin|. The callback
// will be invoked when the permission status is available. This class will // will be invoked when the permission status is available. This class will
// take ownership of |callback|. // take ownership of |callback|.
void RequestPermission( void RequestPermission(const blink::WebSecurityOrigin& origin,
const blink::WebSecurityOrigin& origin, blink::WebNotificationPermissionCallback* callback);
blink::WebNotificationPermissionCallback* callback);
private: private:
void OnPermissionRequestComplete( void OnPermissionRequestComplete(
int request_id, PermissionStatus status); scoped_ptr<blink::WebNotificationPermissionCallback> callback,
PermissionStatus status);
// Tracks the active notification permission requests. This class takes
// ownership of the created WebNotificationPermissionCallback objects.
IDMap<blink::WebNotificationPermissionCallback, IDMapOwnPointer>
pending_requests_;
PermissionServicePtr permission_service_; PermissionServicePtr permission_service_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment