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

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: Created 5 years 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"
(...skipping 17 matching lines...) Expand all
28 return content::PERMISSION_NAME_VIDEO_CAPTURE; 28 return content::PERMISSION_NAME_VIDEO_CAPTURE;
29 } 29 }
30 NOTREACHED(); 30 NOTREACHED();
31 return content::PERMISSION_NAME_PROTECTED_MEDIA_IDENTIFIER; 31 return content::PERMISSION_NAME_PROTECTED_MEDIA_IDENTIFIER;
32 } 32 }
33 33
34 } // namespace 34 } // namespace
35 35
36 namespace content { 36 namespace content {
37 37
38 MediaPermissionDispatcher::MediaPermissionDispatcher(RenderFrame* render_frame) 38 MediaPermissionDispatcher::MediaPermissionDispatcher(
39 : RenderFrameObserver(render_frame), 39 const ConnectToServiceCB& connect_to_service_cb)
40 : connect_to_service_cb_(connect_to_service_cb),
40 task_runner_(base::ThreadTaskRunnerHandle::Get()), 41 task_runner_(base::ThreadTaskRunnerHandle::Get()),
41 next_request_id_(0), 42 next_request_id_(0),
42 weak_factory_(this) {} 43 weak_factory_(this) {
44 DCHECK(!connect_to_service_cb_.is_null());
45 }
43 46
44 MediaPermissionDispatcher::~MediaPermissionDispatcher() { 47 MediaPermissionDispatcher::~MediaPermissionDispatcher() {
45 DCHECK(task_runner_->RunsTasksOnCurrentThread()); 48 DCHECK(task_runner_->RunsTasksOnCurrentThread());
46 49
47 // Fire all pending callbacks with |false|. 50 // Fire all pending callbacks with |false|.
48 for (auto& request : requests_) 51 for (auto& request : requests_)
49 request.second.Run(false); 52 request.second.Run(false);
50 53
51 requests_.clear(); 54 requests_.clear();
52 } 55 }
53 56
54 void MediaPermissionDispatcher::HasPermission( 57 void MediaPermissionDispatcher::HasPermission(
55 Type type, 58 Type type,
56 const GURL& security_origin, 59 const GURL& security_origin,
57 const PermissionStatusCB& permission_status_cb) { 60 const PermissionStatusCB& permission_status_cb) {
58 if (!task_runner_->RunsTasksOnCurrentThread()) { 61 if (!task_runner_->RunsTasksOnCurrentThread()) {
59 // Use BindToCurrentLoop to bind the callback to the current thread. 62 // Use BindToCurrentLoop to bind the callback to the current thread.
60 task_runner_->PostTask( 63 task_runner_->PostTask(
61 FROM_HERE, base::Bind(&MediaPermissionDispatcher::HasPermission, 64 FROM_HERE, base::Bind(&MediaPermissionDispatcher::HasPermission,
62 weak_factory_.GetWeakPtr(), type, security_origin, 65 weak_factory_.GetWeakPtr(), type, security_origin,
63 media::BindToCurrentLoop(permission_status_cb))); 66 media::BindToCurrentLoop(permission_status_cb)));
64 return; 67 return;
65 } 68 }
66 69
67 DCHECK(task_runner_->RunsTasksOnCurrentThread()); 70 DCHECK(task_runner_->RunsTasksOnCurrentThread());
68 71
69 if (!permission_service_.get()) { 72 if (!permission_service_.get())
70 render_frame()->GetServiceRegistry()->ConnectToRemoteService( 73 connect_to_service_cb_.Run(mojo::GetProxy(&permission_service_));
71 mojo::GetProxy(&permission_service_));
72 }
73 74
74 int request_id = RegisterCallback(permission_status_cb); 75 int request_id = RegisterCallback(permission_status_cb);
75 DVLOG(2) << __FUNCTION__ << ": request ID " << request_id; 76 DVLOG(2) << __FUNCTION__ << ": request ID " << request_id;
76 77
77 permission_service_->HasPermission( 78 permission_service_->HasPermission(
78 MediaPermissionTypeToPermissionName(type), security_origin.spec(), 79 MediaPermissionTypeToPermissionName(type), security_origin.spec(),
79 base::Bind(&MediaPermissionDispatcher::OnPermissionStatus, 80 base::Bind(&MediaPermissionDispatcher::OnPermissionStatus,
80 base::Unretained(this), request_id)); 81 base::Unretained(this), request_id));
81 } 82 }
82 83
83 void MediaPermissionDispatcher::RequestPermission( 84 void MediaPermissionDispatcher::RequestPermission(
84 Type type, 85 Type type,
85 const GURL& security_origin, 86 const GURL& security_origin,
86 const PermissionStatusCB& permission_status_cb) { 87 const PermissionStatusCB& permission_status_cb) {
87 if (!task_runner_->RunsTasksOnCurrentThread()) { 88 if (!task_runner_->RunsTasksOnCurrentThread()) {
88 // Use BindToCurrentLoop to bind the callback to the current thread. 89 // Use BindToCurrentLoop to bind the callback to the current thread.
89 task_runner_->PostTask( 90 task_runner_->PostTask(
90 FROM_HERE, base::Bind(&MediaPermissionDispatcher::RequestPermission, 91 FROM_HERE, base::Bind(&MediaPermissionDispatcher::RequestPermission,
91 weak_factory_.GetWeakPtr(), type, security_origin, 92 weak_factory_.GetWeakPtr(), type, security_origin,
92 media::BindToCurrentLoop(permission_status_cb))); 93 media::BindToCurrentLoop(permission_status_cb)));
93 return; 94 return;
94 } 95 }
95 96
96 DCHECK(task_runner_->RunsTasksOnCurrentThread()); 97 DCHECK(task_runner_->RunsTasksOnCurrentThread());
97 98
98 if (!permission_service_.get()) { 99 if (!permission_service_.get())
99 render_frame()->GetServiceRegistry()->ConnectToRemoteService( 100 connect_to_service_cb_.Run(mojo::GetProxy(&permission_service_));
100 mojo::GetProxy(&permission_service_));
101 }
102 101
103 int request_id = RegisterCallback(permission_status_cb); 102 int request_id = RegisterCallback(permission_status_cb);
104 DVLOG(2) << __FUNCTION__ << ": request ID " << request_id; 103 DVLOG(2) << __FUNCTION__ << ": request ID " << request_id;
105 104
106 permission_service_->RequestPermission( 105 permission_service_->RequestPermission(
107 MediaPermissionTypeToPermissionName(type), security_origin.spec(), 106 MediaPermissionTypeToPermissionName(type), security_origin.spec(),
108 blink::WebUserGestureIndicator::isProcessingUserGesture(), 107 blink::WebUserGestureIndicator::isProcessingUserGesture(),
109 base::Bind(&MediaPermissionDispatcher::OnPermissionStatus, 108 base::Bind(&MediaPermissionDispatcher::OnPermissionStatus,
110 base::Unretained(this), request_id)); 109 base::Unretained(this), request_id));
111 } 110 }
(...skipping 20 matching lines...) Expand all
132 return; 131 return;
133 } 132 }
134 133
135 PermissionStatusCB permission_status_cb = iter->second; 134 PermissionStatusCB permission_status_cb = iter->second;
136 requests_.erase(iter); 135 requests_.erase(iter);
137 136
138 permission_status_cb.Run(status == PERMISSION_STATUS_GRANTED); 137 permission_status_cb.Run(status == PERMISSION_STATUS_GRANTED);
139 } 138 }
140 139
141 } // namespace content 140 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698