OLD | NEW |
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 "chrome/browser/media/tab_capture_access_handler.h" | 5 #include "chrome/browser/media/tab_capture_access_handler.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "chrome/browser/extensions/api/tab_capture/tab_capture_registry.h" | 9 #include "chrome/browser/extensions/api/tab_capture/tab_capture_registry.h" |
10 #include "chrome/browser/media/media_capture_devices_dispatcher.h" | 10 #include "chrome/browser/media/media_capture_devices_dispatcher.h" |
11 #include "chrome/browser/media/media_stream_capture_indicator.h" | 11 #include "chrome/browser/media/media_stream_capture_indicator.h" |
12 #include "chrome/browser/profiles/profile.h" | 12 #include "chrome/browser/profiles/profile.h" |
13 #include "content/public/browser/web_contents.h" | 13 #include "content/public/browser/web_contents.h" |
14 #include "extensions/common/permissions/permissions_data.h" | 14 #include "extensions/common/permissions/permissions_data.h" |
15 | 15 |
16 TabCaptureAccessHandler::TabCaptureAccessHandler() { | 16 TabCaptureAccessHandler::TabCaptureAccessHandler() |
17 } | 17 : render_process_id_(-1), |
| 18 render_frame_id_(-1), |
| 19 is_capturing_link_secure_(false), |
| 20 extension_whitelisted_(false) {} |
18 | 21 |
19 TabCaptureAccessHandler::~TabCaptureAccessHandler() { | 22 TabCaptureAccessHandler::~TabCaptureAccessHandler() { |
20 } | 23 } |
21 | 24 |
22 bool TabCaptureAccessHandler::SupportsStreamType( | 25 bool TabCaptureAccessHandler::SupportsStreamType( |
23 const content::MediaStreamType type, | 26 const content::MediaStreamType type, |
24 const extensions::Extension* extension) { | 27 const extensions::Extension* extension) { |
25 return type == content::MEDIA_TAB_VIDEO_CAPTURE || | 28 return type == content::MEDIA_TAB_VIDEO_CAPTURE || |
26 type == content::MEDIA_TAB_AUDIO_CAPTURE; | 29 type == content::MEDIA_TAB_AUDIO_CAPTURE; |
27 } | 30 } |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
71 extension->permissions_data()->HasAPIPermission( | 74 extension->permissions_data()->HasAPIPermission( |
72 extensions::APIPermission::kTabCapture)) { | 75 extensions::APIPermission::kTabCapture)) { |
73 devices.push_back(content::MediaStreamDevice( | 76 devices.push_back(content::MediaStreamDevice( |
74 content::MEDIA_TAB_VIDEO_CAPTURE, std::string(), std::string())); | 77 content::MEDIA_TAB_VIDEO_CAPTURE, std::string(), std::string())); |
75 } | 78 } |
76 | 79 |
77 if (!devices.empty()) { | 80 if (!devices.empty()) { |
78 ui = MediaCaptureDevicesDispatcher::GetInstance() | 81 ui = MediaCaptureDevicesDispatcher::GetInstance() |
79 ->GetMediaStreamCaptureIndicator() | 82 ->GetMediaStreamCaptureIndicator() |
80 ->RegisterMediaStream(web_contents, devices); | 83 ->RegisterMediaStream(web_contents, devices); |
| 84 render_process_id_ = request.render_process_id; |
| 85 render_frame_id_ = request.render_frame_id; |
81 } | 86 } |
| 87 extension_whitelisted_ = MediaCaptureDevicesDispatcher::IsOriginForCasting( |
| 88 request.security_origin); |
82 callback.Run(devices, devices.empty() ? content::MEDIA_DEVICE_INVALID_STATE | 89 callback.Run(devices, devices.empty() ? content::MEDIA_DEVICE_INVALID_STATE |
83 : content::MEDIA_DEVICE_OK, | 90 : content::MEDIA_DEVICE_OK, |
84 std::move(ui)); | 91 std::move(ui)); |
85 } | 92 } |
| 93 |
| 94 bool TabCaptureAccessHandler::IsCaptureInProgress(int render_process_id, |
| 95 int render_frame_id, |
| 96 bool* is_link_secure) { |
| 97 if ((render_frame_id == render_frame_id_) && |
| 98 (render_process_id == render_process_id_)) { |
| 99 *is_link_secure = is_capturing_link_secure_ && extension_whitelisted_; |
| 100 return true; |
| 101 } |
| 102 *is_link_secure = false; |
| 103 return false; |
| 104 } |
| 105 |
| 106 void TabCaptureAccessHandler::UpdateCapturingLinkSecured( |
| 107 int render_process_id, |
| 108 int render_frame_id, |
| 109 int page_request_id, |
| 110 content::MediaStreamType stream_type, |
| 111 bool is_secure) { |
| 112 if (stream_type != content::MEDIA_TAB_VIDEO_CAPTURE || |
| 113 render_process_id != render_process_id_ || |
| 114 render_frame_id != render_frame_id_) { |
| 115 return; |
| 116 } |
| 117 |
| 118 is_capturing_link_secure_ = is_secure; |
| 119 |
| 120 VLOG(1) << "TabCaptureAccessHandler:" |
| 121 << " render_process_id: " << render_process_id |
| 122 << " render_frame_id: " << render_frame_id |
| 123 << " is_capturing_link_secure_: " << is_secure; |
| 124 } |
OLD | NEW |