Chromium Code Reviews| Index: content/renderer/media/media_permission_dispatcher.h |
| diff --git a/content/renderer/media/media_permission_dispatcher.h b/content/renderer/media/media_permission_dispatcher.h |
| index 701afe6d088987a5c94754a1a0cd396ab1a13f11..06adffb15f3e1f23451797209d0e6bfd71c06d7c 100644 |
| --- a/content/renderer/media/media_permission_dispatcher.h |
| +++ b/content/renderer/media/media_permission_dispatcher.h |
| @@ -2,46 +2,63 @@ |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| -// Base class for MediaPermission implementations in content. This class allows |
| -// multiple pending PermissionService calls by managing callbacks for its |
| -// subclasses. This class is not thread safe and should only be used on one |
| -// thread. |
| - |
| #ifndef CONTENT_RENDERER_MEDIA_MEDIA_PERMISSION_DISPATCHER_H_ |
| #define CONTENT_RENDERER_MEDIA_MEDIA_PERMISSION_DISPATCHER_H_ |
| #include <map> |
| +#include "base/memory/ref_counted.h" |
| #include "base/memory/weak_ptr.h" |
| -#include "base/threading/thread_checker.h" |
| #include "content/common/content_export.h" |
| +#include "content/common/permission_service.mojom.h" |
| +#include "content/public/renderer/render_frame_observer.h" |
| #include "media/base/media_permission.h" |
| +namespace base { |
| +class SingleThreadTaskRunner; |
| +} |
| + |
| namespace content { |
| -class CONTENT_EXPORT MediaPermissionDispatcher : public media::MediaPermission { |
| +// MediaPermission implementation. |
| +class CONTENT_EXPORT MediaPermissionDispatcher : public media::MediaPermission, |
| + public RenderFrameObserver { |
|
nasko
2015/11/25 15:08:30
How is this related to https://codereview.chromium
xhwang
2015/11/25 17:30:23
In this CL I am simplifying MediaPermissionDispatc
|
| public: |
| - MediaPermissionDispatcher(); |
| + explicit MediaPermissionDispatcher(RenderFrame* render_frame); |
| ~MediaPermissionDispatcher() override; |
| - protected: |
| - // Register callbacks for PermissionService calls. |
| - uint32_t RegisterCallback(const PermissionStatusCB& permission_status_cb); |
| - |
| - // Deliver the permission status |granted| to the callback identified by |
| - // |request_id|. |
| - void DeliverResult(uint32_t request_id, bool granted); |
| - |
| - base::ThreadChecker& thread_checker() { return thread_checker_; } |
| + // media::MediaPermission implementation. |
| + // Note: Can be called on any thread but the caller needs to make sure |this| |
| + // is valid at the time of this call. The |permission_status_cb| will always |
| + // be fired on the thread where these methods are called. |
| + void HasPermission(Type type, |
| + const GURL& security_origin, |
| + const PermissionStatusCB& permission_status_cb) override; |
| + void RequestPermission( |
| + Type type, |
| + const GURL& security_origin, |
| + const PermissionStatusCB& permission_status_cb) override; |
| private: |
| // Map of request IDs and pending PermissionStatusCBs. |
| typedef std::map<uint32_t, PermissionStatusCB> RequestMap; |
| - base::ThreadChecker thread_checker_; |
| + // Register PermissionStatusCBs. Returns |request_id| that can be used to make |
| + // PermissionService calls. |
| + uint32_t RegisterCallback(const PermissionStatusCB& permission_status_cb); |
| + |
| + // Callback for |permission_service_| calls. |
| + void OnPermissionStatus(uint32_t request_id, PermissionStatus status); |
| + scoped_refptr<base::SingleThreadTaskRunner> task_runner_; |
| uint32_t next_request_id_; |
| RequestMap requests_; |
| + PermissionServicePtr permission_service_; |
| + |
| + // Used to safely post MediaPermission calls for execution on |task_runner_|. |
| + base::WeakPtr<MediaPermissionDispatcher> weak_ptr_; |
| + |
| + base::WeakPtrFactory<MediaPermissionDispatcher> weak_factory_; |
| DISALLOW_COPY_AND_ASSIGN(MediaPermissionDispatcher); |
| }; |