Index: content/renderer/pepper/pepper_media_device_manager.cc |
diff --git a/content/renderer/pepper/pepper_media_device_manager.cc b/content/renderer/pepper/pepper_media_device_manager.cc |
index 731a3093fcb811594cfe6852afa53b23abbd9ebb..af5a5d9cc7406b1907a447f870c739d9241797c9 100644 |
--- a/content/renderer/pepper/pepper_media_device_manager.cc |
+++ b/content/renderer/pepper/pepper_media_device_manager.cc |
@@ -4,12 +4,16 @@ |
#include "content/renderer/pepper/pepper_media_device_manager.h" |
+#include "base/feature_list.h" |
#include "base/location.h" |
#include "base/logging.h" |
#include "base/single_thread_task_runner.h" |
#include "base/threading/thread_task_runner_handle.h" |
+#include "content/public/common/console_message_level.h" |
+#include "content/public/common/content_features.h" |
#include "content/renderer/media/media_devices_event_dispatcher.h" |
#include "content/renderer/media/media_stream_dispatcher.h" |
+#include "content/renderer/pepper/renderer_ppapi_host_impl.h" |
#include "content/renderer/render_frame_impl.h" |
#include "media/media_features.h" |
#include "ppapi/shared_impl/ppb_device_ref_shared.h" |
@@ -19,6 +23,12 @@ namespace content { |
namespace { |
+const char kPepperInsecureOriginMessage[] = |
+ "Microphone and Camera access no longer works on insecure origins. To use " |
+ "this feature, you should consider switching your application to a " |
+ "secure origin, such as HTTPS. See https://goo.gl/rStTGz for more " |
+ "details."; |
+ |
PP_DeviceType_Dev FromMediaDeviceType(MediaDeviceType type) { |
switch (type) { |
case MEDIA_DEVICE_TYPE_AUDIO_INPUT: |
@@ -129,16 +139,32 @@ void PepperMediaDeviceManager::StopMonitoringDevices(PP_DeviceType_Dev type, |
int PepperMediaDeviceManager::OpenDevice(PP_DeviceType_Dev type, |
const std::string& device_id, |
- const GURL& document_url, |
+ PP_Instance pp_instance, |
const OpenDeviceCallback& callback) { |
open_callbacks_[next_id_] = callback; |
int request_id = next_id_++; |
+ RendererPpapiHostImpl* host = |
+ RendererPpapiHostImpl::GetForPPInstance(pp_instance); |
+ if (base::FeatureList::IsEnabled( |
+ features::kRequireSecureOriginsForPepperMediaRequests) && |
+ !host->IsSecureContext(pp_instance)) { |
+ RenderFrame* render_frame = host->GetRenderFrameForInstance(pp_instance); |
+ if (render_frame) { |
+ render_frame->AddMessageToConsole(CONSOLE_MESSAGE_LEVEL_WARNING, |
+ kPepperInsecureOriginMessage); |
+ } |
+ base::ThreadTaskRunnerHandle::Get()->PostTask( |
+ FROM_HERE, base::Bind(&PepperMediaDeviceManager::OnDeviceOpenFailed, |
+ AsWeakPtr(), request_id)); |
+ return request_id; |
+ } |
+ |
#if BUILDFLAG(ENABLE_WEBRTC) |
GetMediaStreamDispatcher()->OpenDevice( |
request_id, AsWeakPtr(), device_id, |
PepperMediaDeviceManager::FromPepperDeviceType(type), |
- url::Origin(document_url.GetOrigin())); |
+ url::Origin(host->GetDocumentURL(pp_instance).GetOrigin())); |
#else |
base::ThreadTaskRunnerHandle::Get()->PostTask( |
FROM_HERE, base::Bind(&PepperMediaDeviceManager::OnDeviceOpenFailed, |