| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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_stream_center.h" | 5 #include "content/renderer/media/media_stream_center.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 10 matching lines...) Expand all Loading... |
| 21 #include "third_party/WebKit/public/platform/WebMediaStream.h" | 21 #include "third_party/WebKit/public/platform/WebMediaStream.h" |
| 22 #include "third_party/WebKit/public/platform/WebMediaStreamCenterClient.h" | 22 #include "third_party/WebKit/public/platform/WebMediaStreamCenterClient.h" |
| 23 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h" | 23 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h" |
| 24 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h" | 24 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h" |
| 25 #include "third_party/WebKit/public/platform/WebMediaStreamTrackSourcesRequest.h
" | 25 #include "third_party/WebKit/public/platform/WebMediaStreamTrackSourcesRequest.h
" |
| 26 #include "third_party/WebKit/public/platform/WebSourceInfo.h" | 26 #include "third_party/WebKit/public/platform/WebSourceInfo.h" |
| 27 #include "third_party/WebKit/public/platform/WebVector.h" | 27 #include "third_party/WebKit/public/platform/WebVector.h" |
| 28 #include "third_party/WebKit/public/web/WebFrame.h" | 28 #include "third_party/WebKit/public/web/WebFrame.h" |
| 29 #include "third_party/libjingle/source/talk/app/webrtc/jsep.h" | 29 #include "third_party/libjingle/source/talk/app/webrtc/jsep.h" |
| 30 | 30 |
| 31 using WebKit::WebFrame; | 31 using blink::WebFrame; |
| 32 using WebKit::WebView; | 32 using blink::WebView; |
| 33 | 33 |
| 34 namespace content { | 34 namespace content { |
| 35 | 35 |
| 36 MediaStreamCenter::MediaStreamCenter(WebKit::WebMediaStreamCenterClient* client, | 36 MediaStreamCenter::MediaStreamCenter(blink::WebMediaStreamCenterClient* client, |
| 37 MediaStreamDependencyFactory* factory) | 37 MediaStreamDependencyFactory* factory) |
| 38 : rtc_factory_(factory), next_request_id_(0) {} | 38 : rtc_factory_(factory), next_request_id_(0) {} |
| 39 | 39 |
| 40 MediaStreamCenter::~MediaStreamCenter() {} | 40 MediaStreamCenter::~MediaStreamCenter() {} |
| 41 | 41 |
| 42 bool MediaStreamCenter::getMediaStreamTrackSources( | 42 bool MediaStreamCenter::getMediaStreamTrackSources( |
| 43 const WebKit::WebMediaStreamTrackSourcesRequest& request) { | 43 const blink::WebMediaStreamTrackSourcesRequest& request) { |
| 44 if (!CommandLine::ForCurrentProcess()->HasSwitch( | 44 if (!CommandLine::ForCurrentProcess()->HasSwitch( |
| 45 switches::kDisableDeviceEnumeration)) { | 45 switches::kDisableDeviceEnumeration)) { |
| 46 int request_id = next_request_id_++; | 46 int request_id = next_request_id_++; |
| 47 requests_.insert(std::make_pair(request_id, request)); | 47 requests_.insert(std::make_pair(request_id, request)); |
| 48 RenderThread::Get()->Send(new MediaStreamHostMsg_GetSources( | 48 RenderThread::Get()->Send(new MediaStreamHostMsg_GetSources( |
| 49 request_id, GURL(request.origin().utf8()))); | 49 request_id, GURL(request.origin().utf8()))); |
| 50 return true; | 50 return true; |
| 51 } | 51 } |
| 52 return false; | 52 return false; |
| 53 } | 53 } |
| 54 | 54 |
| 55 void MediaStreamCenter::didEnableMediaStreamTrack( | 55 void MediaStreamCenter::didEnableMediaStreamTrack( |
| 56 const WebKit::WebMediaStream& stream, | 56 const blink::WebMediaStream& stream, |
| 57 const WebKit::WebMediaStreamTrack& component) { | 57 const blink::WebMediaStreamTrack& component) { |
| 58 webrtc::MediaStreamTrackInterface* track = | 58 webrtc::MediaStreamTrackInterface* track = |
| 59 MediaStreamDependencyFactory::GetNativeMediaStreamTrack(component); | 59 MediaStreamDependencyFactory::GetNativeMediaStreamTrack(component); |
| 60 if (track) | 60 if (track) |
| 61 track->set_enabled(true); | 61 track->set_enabled(true); |
| 62 } | 62 } |
| 63 | 63 |
| 64 void MediaStreamCenter::didDisableMediaStreamTrack( | 64 void MediaStreamCenter::didDisableMediaStreamTrack( |
| 65 const WebKit::WebMediaStream& stream, | 65 const blink::WebMediaStream& stream, |
| 66 const WebKit::WebMediaStreamTrack& component) { | 66 const blink::WebMediaStreamTrack& component) { |
| 67 webrtc::MediaStreamTrackInterface* track = | 67 webrtc::MediaStreamTrackInterface* track = |
| 68 MediaStreamDependencyFactory::GetNativeMediaStreamTrack(component); | 68 MediaStreamDependencyFactory::GetNativeMediaStreamTrack(component); |
| 69 if (track) | 69 if (track) |
| 70 track->set_enabled(false); | 70 track->set_enabled(false); |
| 71 } | 71 } |
| 72 | 72 |
| 73 bool MediaStreamCenter::didStopMediaStreamTrack( | 73 bool MediaStreamCenter::didStopMediaStreamTrack( |
| 74 const WebKit::WebMediaStreamTrack& web_track) { | 74 const blink::WebMediaStreamTrack& web_track) { |
| 75 DVLOG(1) << "MediaStreamCenter::didStopMediaStreamTrack"; | 75 DVLOG(1) << "MediaStreamCenter::didStopMediaStreamTrack"; |
| 76 WebKit::WebMediaStreamSource web_source = web_track.source(); | 76 blink::WebMediaStreamSource web_source = web_track.source(); |
| 77 MediaStreamSourceExtraData* extra_data = | 77 MediaStreamSourceExtraData* extra_data = |
| 78 static_cast<MediaStreamSourceExtraData*>(web_source.extraData()); | 78 static_cast<MediaStreamSourceExtraData*>(web_source.extraData()); |
| 79 if (!extra_data) { | 79 if (!extra_data) { |
| 80 DVLOG(1) << "didStopMediaStreamTrack called on a remote track."; | 80 DVLOG(1) << "didStopMediaStreamTrack called on a remote track."; |
| 81 return false; | 81 return false; |
| 82 } | 82 } |
| 83 | 83 |
| 84 extra_data->OnLocalSourceStop(); | 84 extra_data->OnLocalSourceStop(); |
| 85 return true; | 85 return true; |
| 86 } | 86 } |
| 87 | 87 |
| 88 void MediaStreamCenter::didStopLocalMediaStream( | 88 void MediaStreamCenter::didStopLocalMediaStream( |
| 89 const WebKit::WebMediaStream& stream) { | 89 const blink::WebMediaStream& stream) { |
| 90 DVLOG(1) << "MediaStreamCenter::didStopLocalMediaStream"; | 90 DVLOG(1) << "MediaStreamCenter::didStopLocalMediaStream"; |
| 91 MediaStreamExtraData* extra_data = | 91 MediaStreamExtraData* extra_data = |
| 92 static_cast<MediaStreamExtraData*>(stream.extraData()); | 92 static_cast<MediaStreamExtraData*>(stream.extraData()); |
| 93 if (!extra_data) { | 93 if (!extra_data) { |
| 94 NOTREACHED(); | 94 NOTREACHED(); |
| 95 return; | 95 return; |
| 96 } | 96 } |
| 97 | 97 |
| 98 // TODO(perkj): MediaStream::Stop is being deprecated. But for the moment we | 98 // TODO(perkj): MediaStream::Stop is being deprecated. But for the moment we |
| 99 // need to support the old behavior and the new. Since we only create one | 99 // need to support the old behavior and the new. Since we only create one |
| 100 // source object per actual device- we need to fake stopping a | 100 // source object per actual device- we need to fake stopping a |
| 101 // MediaStreamTrack by disabling it if the same device is used as source by | 101 // MediaStreamTrack by disabling it if the same device is used as source by |
| 102 // multiple tracks. Note that disabling a track here, don't affect the | 102 // multiple tracks. Note that disabling a track here, don't affect the |
| 103 // enabled property in JS. | 103 // enabled property in JS. |
| 104 WebKit::WebVector<WebKit::WebMediaStreamTrack> audio_tracks; | 104 blink::WebVector<blink::WebMediaStreamTrack> audio_tracks; |
| 105 stream.audioTracks(audio_tracks); | 105 stream.audioTracks(audio_tracks); |
| 106 for (size_t i = 0; i < audio_tracks.size(); ++i) | 106 for (size_t i = 0; i < audio_tracks.size(); ++i) |
| 107 didDisableMediaStreamTrack(stream, audio_tracks[i]); | 107 didDisableMediaStreamTrack(stream, audio_tracks[i]); |
| 108 | 108 |
| 109 WebKit::WebVector<WebKit::WebMediaStreamTrack> video_tracks; | 109 blink::WebVector<blink::WebMediaStreamTrack> video_tracks; |
| 110 stream.videoTracks(video_tracks); | 110 stream.videoTracks(video_tracks); |
| 111 for (size_t i = 0; i < video_tracks.size(); ++i) | 111 for (size_t i = 0; i < video_tracks.size(); ++i) |
| 112 didDisableMediaStreamTrack(stream, video_tracks[i]); | 112 didDisableMediaStreamTrack(stream, video_tracks[i]); |
| 113 | 113 |
| 114 extra_data->OnLocalStreamStop(); | 114 extra_data->OnLocalStreamStop(); |
| 115 } | 115 } |
| 116 | 116 |
| 117 void MediaStreamCenter::didCreateMediaStream( | 117 void MediaStreamCenter::didCreateMediaStream( |
| 118 WebKit::WebMediaStream& stream) { | 118 blink::WebMediaStream& stream) { |
| 119 if (!rtc_factory_) | 119 if (!rtc_factory_) |
| 120 return; | 120 return; |
| 121 rtc_factory_->CreateNativeLocalMediaStream(&stream); | 121 rtc_factory_->CreateNativeLocalMediaStream(&stream); |
| 122 } | 122 } |
| 123 | 123 |
| 124 bool MediaStreamCenter::didAddMediaStreamTrack( | 124 bool MediaStreamCenter::didAddMediaStreamTrack( |
| 125 const WebKit::WebMediaStream& stream, | 125 const blink::WebMediaStream& stream, |
| 126 const WebKit::WebMediaStreamTrack& track) { | 126 const blink::WebMediaStreamTrack& track) { |
| 127 if (!rtc_factory_) | 127 if (!rtc_factory_) |
| 128 return false; | 128 return false; |
| 129 | 129 |
| 130 return rtc_factory_->AddNativeMediaStreamTrack(stream, track); | 130 return rtc_factory_->AddNativeMediaStreamTrack(stream, track); |
| 131 } | 131 } |
| 132 | 132 |
| 133 bool MediaStreamCenter::didRemoveMediaStreamTrack( | 133 bool MediaStreamCenter::didRemoveMediaStreamTrack( |
| 134 const WebKit::WebMediaStream& stream, | 134 const blink::WebMediaStream& stream, |
| 135 const WebKit::WebMediaStreamTrack& track) { | 135 const blink::WebMediaStreamTrack& track) { |
| 136 if (!rtc_factory_) | 136 if (!rtc_factory_) |
| 137 return false; | 137 return false; |
| 138 | 138 |
| 139 return rtc_factory_->RemoveNativeMediaStreamTrack(stream, track); | 139 return rtc_factory_->RemoveNativeMediaStreamTrack(stream, track); |
| 140 } | 140 } |
| 141 | 141 |
| 142 bool MediaStreamCenter::OnControlMessageReceived(const IPC::Message& message) { | 142 bool MediaStreamCenter::OnControlMessageReceived(const IPC::Message& message) { |
| 143 bool handled = true; | 143 bool handled = true; |
| 144 IPC_BEGIN_MESSAGE_MAP(MediaStreamCenter, message) | 144 IPC_BEGIN_MESSAGE_MAP(MediaStreamCenter, message) |
| 145 IPC_MESSAGE_HANDLER(MediaStreamMsg_GetSourcesACK, | 145 IPC_MESSAGE_HANDLER(MediaStreamMsg_GetSourcesACK, |
| 146 OnGetSourcesComplete) | 146 OnGetSourcesComplete) |
| 147 IPC_MESSAGE_UNHANDLED(handled = false) | 147 IPC_MESSAGE_UNHANDLED(handled = false) |
| 148 IPC_END_MESSAGE_MAP() | 148 IPC_END_MESSAGE_MAP() |
| 149 return handled; | 149 return handled; |
| 150 } | 150 } |
| 151 | 151 |
| 152 void MediaStreamCenter::OnGetSourcesComplete( | 152 void MediaStreamCenter::OnGetSourcesComplete( |
| 153 int request_id, | 153 int request_id, |
| 154 const content::StreamDeviceInfoArray& devices) { | 154 const content::StreamDeviceInfoArray& devices) { |
| 155 RequestMap::iterator request_it = requests_.find(request_id); | 155 RequestMap::iterator request_it = requests_.find(request_id); |
| 156 DCHECK(request_it != requests_.end()); | 156 DCHECK(request_it != requests_.end()); |
| 157 | 157 |
| 158 WebKit::WebVector<WebKit::WebSourceInfo> sourceInfos(devices.size()); | 158 blink::WebVector<blink::WebSourceInfo> sourceInfos(devices.size()); |
| 159 for (size_t i = 0; i < devices.size(); ++i) { | 159 for (size_t i = 0; i < devices.size(); ++i) { |
| 160 const MediaStreamDevice& device = devices[i].device; | 160 const MediaStreamDevice& device = devices[i].device; |
| 161 DCHECK(device.type == MEDIA_DEVICE_AUDIO_CAPTURE || | 161 DCHECK(device.type == MEDIA_DEVICE_AUDIO_CAPTURE || |
| 162 device.type == MEDIA_DEVICE_VIDEO_CAPTURE); | 162 device.type == MEDIA_DEVICE_VIDEO_CAPTURE); |
| 163 WebKit::WebSourceInfo::VideoFacingMode video_facing; | 163 blink::WebSourceInfo::VideoFacingMode video_facing; |
| 164 switch (device.video_facing) { | 164 switch (device.video_facing) { |
| 165 case MEDIA_VIDEO_FACING_USER: | 165 case MEDIA_VIDEO_FACING_USER: |
| 166 video_facing = WebKit::WebSourceInfo::VideoFacingModeUser; | 166 video_facing = blink::WebSourceInfo::VideoFacingModeUser; |
| 167 break; | 167 break; |
| 168 case MEDIA_VIDEO_FACING_ENVIRONMENT: | 168 case MEDIA_VIDEO_FACING_ENVIRONMENT: |
| 169 video_facing = WebKit::WebSourceInfo::VideoFacingModeEnvironment; | 169 video_facing = blink::WebSourceInfo::VideoFacingModeEnvironment; |
| 170 break; | 170 break; |
| 171 default: | 171 default: |
| 172 video_facing = WebKit::WebSourceInfo::VideoFacingModeNone; | 172 video_facing = blink::WebSourceInfo::VideoFacingModeNone; |
| 173 } | 173 } |
| 174 | 174 |
| 175 sourceInfos[i] | 175 sourceInfos[i] |
| 176 .initialize(WebKit::WebString::fromUTF8(device.id), | 176 .initialize(blink::WebString::fromUTF8(device.id), |
| 177 device.type == MEDIA_DEVICE_AUDIO_CAPTURE | 177 device.type == MEDIA_DEVICE_AUDIO_CAPTURE |
| 178 ? WebKit::WebSourceInfo::SourceKindAudio | 178 ? blink::WebSourceInfo::SourceKindAudio |
| 179 : WebKit::WebSourceInfo::SourceKindVideo, | 179 : blink::WebSourceInfo::SourceKindVideo, |
| 180 WebKit::WebString::fromUTF8(device.name), | 180 blink::WebString::fromUTF8(device.name), |
| 181 video_facing); | 181 video_facing); |
| 182 } | 182 } |
| 183 request_it->second.requestSucceeded(sourceInfos); | 183 request_it->second.requestSucceeded(sourceInfos); |
| 184 } | 184 } |
| 185 | 185 |
| 186 } // namespace content | 186 } // namespace content |
| OLD | NEW |