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

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

Issue 871663003: media: Add MediaPermission interface and MediaPermissionDispatcher. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 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
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "content/renderer/media/media_permission_dispatcher.h"
6
7 #include "base/bind.h"
8 #include "base/logging.h"
9 #include "content/public/common/service_registry.h"
10 #include "content/public/renderer/render_frame.h"
11 #include "third_party/WebKit/public/web/WebUserGestureIndicator.h"
12 #include "url/gurl.h"
13
14 namespace content {
15
16 MediaPermissionDispatcher::MediaPermissionDispatcher(RenderFrame* render_frame)
17 : RenderFrameObserver(render_frame), next_request_id_(0) {
18 }
19
20 MediaPermissionDispatcher::~MediaPermissionDispatcher() {
21 DCHECK(thread_checker_.CalledOnValidThread());
22
23 // Fire all pending callbacks with |false|.
24 for (auto& request : requests_)
25 request.second.Run(false);
26
27 requests_.clear();
28 }
29
30 void MediaPermissionDispatcher::HasPermission(
31 Type type,
32 const GURL& security_origin,
33 const PermissionStatusCB& permission_status_cb) {
34 DCHECK(thread_checker_.CalledOnValidThread());
35 CHECK_EQ(PROTECTED_MEDIA_IDENTIFIER, type);
36
37 if (!permission_service_.get()) {
38 render_frame()->GetServiceRegistry()->ConnectToRemoteService(
39 &permission_service_);
40 }
41
42 uint32_t request_id = next_request_id_++;
43 DCHECK(!requests_.count(request_id));
44 requests_[request_id] = permission_status_cb;
45
46 DVLOG(2) << __FUNCTION__ << ": request ID " << request_id;
47
48 permission_service_->HasPermission(
49 PERMISSION_NAME_PROTECTED_MEDIA_IDENTIFIER, security_origin.spec(),
50 base::Bind(&MediaPermissionDispatcher::OnPermissionStatus,
51 base::Unretained(this), request_id));
52 }
53
54 void MediaPermissionDispatcher::RequestPermission(
55 Type type,
56 const GURL& security_origin,
57 const PermissionStatusCB& permission_status_cb) {
58 DCHECK(thread_checker_.CalledOnValidThread());
59 CHECK_EQ(PROTECTED_MEDIA_IDENTIFIER, type);
60
61 if (!permission_service_.get()) {
62 render_frame()->GetServiceRegistry()->ConnectToRemoteService(
63 &permission_service_);
64 }
65
66 uint32_t request_id = next_request_id_++;
67 DCHECK(!requests_.count(request_id));
68 requests_[request_id] = permission_status_cb;
69
70 DVLOG(2) << __FUNCTION__ << ": request ID " << request_id;
71
72 permission_service_->RequestPermission(
73 PERMISSION_NAME_PROTECTED_MEDIA_IDENTIFIER, security_origin.spec(),
74 blink::WebUserGestureIndicator::isProcessingUserGesture(),
75 base::Bind(&MediaPermissionDispatcher::OnPermissionStatus,
76 base::Unretained(this), request_id));
77 }
78
79 void MediaPermissionDispatcher::OnPermissionStatus(uint32_t request_id,
80 PermissionStatus status) {
81 DVLOG(2) << __FUNCTION__ << ": (" << request_id << ", " << status << ")";
82 DCHECK(thread_checker_.CalledOnValidThread());
83
84 RequestMap::iterator iter = requests_.find(request_id);
85 if (iter == requests_.end()) {
86 DVLOG(2) << "Request not found.";
87 return;
88 }
89
90 PermissionStatusCB permission_status_cb = iter->second;
91 requests_.erase(iter);
92
93 permission_status_cb.Run(status == PERMISSION_STATUS_GRANTED);
94 }
95
96 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698