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

Side by Side Diff: content/renderer/media/media_permission_dispatcher.cc

Issue 1470233002: media: Generalize MediaPermissionDispatcher. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase only Created 4 years, 10 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/media/media_permission_dispatcher.h" 5 #include "content/renderer/media/media_permission_dispatcher.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/single_thread_task_runner.h" 9 #include "base/single_thread_task_runner.h"
10 #include "base/thread_task_runner_handle.h" 10 #include "base/thread_task_runner_handle.h"
11 #include "content/public/common/service_registry.h"
12 #include "content/public/renderer/render_frame.h"
13 #include "media/base/bind_to_current_loop.h" 11 #include "media/base/bind_to_current_loop.h"
14 #include "third_party/WebKit/public/web/WebUserGestureIndicator.h" 12 #include "third_party/WebKit/public/web/WebUserGestureIndicator.h"
15 #include "url/gurl.h" 13 #include "url/gurl.h"
16 14
17 namespace { 15 namespace {
18 16
19 using Type = media::MediaPermission::Type; 17 using Type = media::MediaPermission::Type;
20 18
21 content::PermissionName MediaPermissionTypeToPermissionName(Type type) { 19 content::PermissionName MediaPermissionTypeToPermissionName(Type type) {
22 switch (type) { 20 switch (type) {
23 case Type::PROTECTED_MEDIA_IDENTIFIER: 21 case Type::PROTECTED_MEDIA_IDENTIFIER:
24 return content::PermissionName::PROTECTED_MEDIA_IDENTIFIER; 22 return content::PermissionName::PROTECTED_MEDIA_IDENTIFIER;
25 case Type::AUDIO_CAPTURE: 23 case Type::AUDIO_CAPTURE:
26 return content::PermissionName::AUDIO_CAPTURE; 24 return content::PermissionName::AUDIO_CAPTURE;
27 case Type::VIDEO_CAPTURE: 25 case Type::VIDEO_CAPTURE:
28 return content::PermissionName::VIDEO_CAPTURE; 26 return content::PermissionName::VIDEO_CAPTURE;
29 } 27 }
30 NOTREACHED(); 28 NOTREACHED();
31 return content::PermissionName::PROTECTED_MEDIA_IDENTIFIER; 29 return content::PermissionName::PROTECTED_MEDIA_IDENTIFIER;
32 } 30 }
33 31
34 } // namespace 32 } // namespace
35 33
36 namespace content { 34 namespace content {
37 35
38 MediaPermissionDispatcher::MediaPermissionDispatcher(RenderFrame* render_frame) 36 MediaPermissionDispatcher::MediaPermissionDispatcher(
39 : RenderFrameObserver(render_frame), 37 const ConnectToServiceCB& connect_to_service_cb)
38 : connect_to_service_cb_(connect_to_service_cb),
40 task_runner_(base::ThreadTaskRunnerHandle::Get()), 39 task_runner_(base::ThreadTaskRunnerHandle::Get()),
41 next_request_id_(0), 40 next_request_id_(0),
42 weak_factory_(this) { 41 weak_factory_(this) {
42 DCHECK(!connect_to_service_cb_.is_null());
43 weak_ptr_ = weak_factory_.GetWeakPtr(); 43 weak_ptr_ = weak_factory_.GetWeakPtr();
44 } 44 }
45 45
46 MediaPermissionDispatcher::~MediaPermissionDispatcher() { 46 MediaPermissionDispatcher::~MediaPermissionDispatcher() {
47 DCHECK(task_runner_->RunsTasksOnCurrentThread()); 47 DCHECK(task_runner_->RunsTasksOnCurrentThread());
48 48
49 // Fire all pending callbacks with |false|. 49 // Fire all pending callbacks with |false|.
50 for (auto& request : requests_) 50 for (auto& request : requests_)
51 request.second.Run(false); 51 request.second.Run(false);
52 } 52 }
53 53
54 void MediaPermissionDispatcher::HasPermission( 54 void MediaPermissionDispatcher::HasPermission(
55 Type type, 55 Type type,
56 const GURL& security_origin, 56 const GURL& security_origin,
57 const PermissionStatusCB& permission_status_cb) { 57 const PermissionStatusCB& permission_status_cb) {
58 if (!task_runner_->RunsTasksOnCurrentThread()) { 58 if (!task_runner_->RunsTasksOnCurrentThread()) {
59 task_runner_->PostTask( 59 task_runner_->PostTask(
60 FROM_HERE, base::Bind(&MediaPermissionDispatcher::HasPermission, 60 FROM_HERE, base::Bind(&MediaPermissionDispatcher::HasPermission,
61 weak_ptr_, type, security_origin, 61 weak_ptr_, type, security_origin,
62 media::BindToCurrentLoop(permission_status_cb))); 62 media::BindToCurrentLoop(permission_status_cb)));
63 return; 63 return;
64 } 64 }
65 65
66 DCHECK(task_runner_->RunsTasksOnCurrentThread()); 66 DCHECK(task_runner_->RunsTasksOnCurrentThread());
67 67
68 if (!permission_service_) { 68 if (!permission_service_)
69 render_frame()->GetServiceRegistry()->ConnectToRemoteService( 69 connect_to_service_cb_.Run(mojo::GetProxy(&permission_service_));
70 mojo::GetProxy(&permission_service_));
71 }
72 70
73 int request_id = RegisterCallback(permission_status_cb); 71 int request_id = RegisterCallback(permission_status_cb);
74 DVLOG(2) << __FUNCTION__ << ": request ID " << request_id; 72 DVLOG(2) << __FUNCTION__ << ": request ID " << request_id;
75 73
76 permission_service_->HasPermission( 74 permission_service_->HasPermission(
77 MediaPermissionTypeToPermissionName(type), security_origin.spec(), 75 MediaPermissionTypeToPermissionName(type), security_origin.spec(),
78 base::Bind(&MediaPermissionDispatcher::OnPermissionStatus, weak_ptr_, 76 base::Bind(&MediaPermissionDispatcher::OnPermissionStatus, weak_ptr_,
79 request_id)); 77 request_id));
80 } 78 }
81 79
82 void MediaPermissionDispatcher::RequestPermission( 80 void MediaPermissionDispatcher::RequestPermission(
83 Type type, 81 Type type,
84 const GURL& security_origin, 82 const GURL& security_origin,
85 const PermissionStatusCB& permission_status_cb) { 83 const PermissionStatusCB& permission_status_cb) {
86 if (!task_runner_->RunsTasksOnCurrentThread()) { 84 if (!task_runner_->RunsTasksOnCurrentThread()) {
87 task_runner_->PostTask( 85 task_runner_->PostTask(
88 FROM_HERE, base::Bind(&MediaPermissionDispatcher::RequestPermission, 86 FROM_HERE, base::Bind(&MediaPermissionDispatcher::RequestPermission,
89 weak_ptr_, type, security_origin, 87 weak_ptr_, type, security_origin,
90 media::BindToCurrentLoop(permission_status_cb))); 88 media::BindToCurrentLoop(permission_status_cb)));
91 return; 89 return;
92 } 90 }
93 91
94 DCHECK(task_runner_->RunsTasksOnCurrentThread()); 92 DCHECK(task_runner_->RunsTasksOnCurrentThread());
95 93
96 if (!permission_service_) { 94 if (!permission_service_)
97 render_frame()->GetServiceRegistry()->ConnectToRemoteService( 95 connect_to_service_cb_.Run(mojo::GetProxy(&permission_service_));
98 mojo::GetProxy(&permission_service_));
99 }
100 96
101 int request_id = RegisterCallback(permission_status_cb); 97 int request_id = RegisterCallback(permission_status_cb);
102 DVLOG(2) << __FUNCTION__ << ": request ID " << request_id; 98 DVLOG(2) << __FUNCTION__ << ": request ID " << request_id;
103 99
104 permission_service_->RequestPermission( 100 permission_service_->RequestPermission(
105 MediaPermissionTypeToPermissionName(type), security_origin.spec(), 101 MediaPermissionTypeToPermissionName(type), security_origin.spec(),
106 blink::WebUserGestureIndicator::isProcessingUserGesture(), 102 blink::WebUserGestureIndicator::isProcessingUserGesture(),
107 base::Bind(&MediaPermissionDispatcher::OnPermissionStatus, weak_ptr_, 103 base::Bind(&MediaPermissionDispatcher::OnPermissionStatus, weak_ptr_,
108 request_id)); 104 request_id));
109 } 105 }
(...skipping 17 matching lines...) Expand all
127 RequestMap::iterator iter = requests_.find(request_id); 123 RequestMap::iterator iter = requests_.find(request_id);
128 DCHECK(iter != requests_.end()) << "Request not found."; 124 DCHECK(iter != requests_.end()) << "Request not found.";
129 125
130 PermissionStatusCB permission_status_cb = iter->second; 126 PermissionStatusCB permission_status_cb = iter->second;
131 requests_.erase(iter); 127 requests_.erase(iter);
132 128
133 permission_status_cb.Run(status == PermissionStatus::GRANTED); 129 permission_status_cb.Run(status == PermissionStatus::GRANTED);
134 } 130 }
135 131
136 } // namespace content 132 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/media_permission_dispatcher.h ('k') | content/renderer/render_frame_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698