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

Side by Side Diff: content/browser/renderer_host/media/media_stream_manager.cc

Issue 345713005: Make sure MediaStreamManager handles requests in order. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Added comment. Created 6 years, 6 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 | Annotate | Revision Log
« no previous file with comments | « content/browser/renderer_host/media/media_stream_manager.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/browser/renderer_host/media/media_stream_manager.h" 5 #include "content/browser/renderer_host/media/media_stream_manager.h"
6 6
7 #include <list> 7 #include <list>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 1082 matching lines...) Expand 10 before | Expand all | Expand 10 after
1093 } 1093 }
1094 } 1094 }
1095 1095
1096 std::string MediaStreamManager::AddRequest(DeviceRequest* request) { 1096 std::string MediaStreamManager::AddRequest(DeviceRequest* request) {
1097 DCHECK_CURRENTLY_ON(BrowserThread::IO); 1097 DCHECK_CURRENTLY_ON(BrowserThread::IO);
1098 1098
1099 // Create a label for this request and verify it is unique. 1099 // Create a label for this request and verify it is unique.
1100 std::string unique_label; 1100 std::string unique_label;
1101 do { 1101 do {
1102 unique_label = RandomLabel(); 1102 unique_label = RandomLabel();
1103 } while (requests_.find(unique_label) != requests_.end()); 1103 } while (FindRequest(unique_label) != NULL);
1104 1104
1105 requests_.insert(std::make_pair(unique_label, request)); 1105 requests_.push_back(std::make_pair(unique_label, request));
1106 1106
1107 return unique_label; 1107 return unique_label;
1108 } 1108 }
1109 1109
1110 MediaStreamManager::DeviceRequest* 1110 MediaStreamManager::DeviceRequest*
1111 MediaStreamManager::FindRequest(const std::string& label) const { 1111 MediaStreamManager::FindRequest(const std::string& label) const {
1112 DeviceRequests::const_iterator request_it = requests_.find(label); 1112 for (DeviceRequests::const_iterator request_it = requests_.begin();
1113 return request_it == requests_.end() ? NULL : request_it->second; 1113 request_it != requests_.end(); ++request_it) {
1114 if (request_it->first == label)
1115 return request_it->second;
1116 }
1117 return NULL;
1114 } 1118 }
1115 1119
1116 void MediaStreamManager::DeleteRequest(const std::string& label) { 1120 void MediaStreamManager::DeleteRequest(const std::string& label) {
1117 DVLOG(1) << "DeleteRequest({label= " << label << "})"; 1121 DVLOG(1) << "DeleteRequest({label= " << label << "})";
1118 DeviceRequests::iterator it = requests_.find(label); 1122 for (DeviceRequests::iterator request_it = requests_.begin();
1119 scoped_ptr<DeviceRequest> request(it->second); 1123 request_it != requests_.end(); ++request_it) {
1120 requests_.erase(it); 1124 if (request_it->first == label) {
1125 scoped_ptr<DeviceRequest> request(request_it->second);
1126 requests_.erase(request_it);
1127 return;
1128 }
1129 }
1130 NOTREACHED();
1121 } 1131 }
1122 1132
1123 void MediaStreamManager::PostRequestToUI(const std::string& label, 1133 void MediaStreamManager::PostRequestToUI(const std::string& label,
1124 DeviceRequest* request) { 1134 DeviceRequest* request) {
1125 DCHECK_CURRENTLY_ON(BrowserThread::IO); 1135 DCHECK_CURRENTLY_ON(BrowserThread::IO);
1126 DCHECK(request->UIRequest()); 1136 DCHECK(request->UIRequest());
1127 DVLOG(1) << "PostRequestToUI({label= " << label << "})"; 1137 DVLOG(1) << "PostRequestToUI({label= " << label << "})";
1128 1138
1129 const MediaStreamType audio_type = request->audio_type(); 1139 const MediaStreamType audio_type = request->audio_type();
1130 const MediaStreamType video_type = request->video_type(); 1140 const MediaStreamType video_type = request->video_type();
(...skipping 510 matching lines...) Expand 10 before | Expand all | Expand 10 after
1641 StreamDeviceInfo::IsEqual)) { 1651 StreamDeviceInfo::IsEqual)) {
1642 StopRemovedDevices(cache->devices, devices); 1652 StopRemovedDevices(cache->devices, devices);
1643 cache->devices = devices; 1653 cache->devices = devices;
1644 need_update_clients = true; 1654 need_update_clients = true;
1645 1655
1646 // The device might not be able to be enumerated when it is not warmed up, 1656 // The device might not be able to be enumerated when it is not warmed up,
1647 // for example, when the machine just wakes up from sleep. We set the cache 1657 // for example, when the machine just wakes up from sleep. We set the cache
1648 // to be invalid so that the next media request will trigger the 1658 // to be invalid so that the next media request will trigger the
1649 // enumeration again. See issue/317673. 1659 // enumeration again. See issue/317673.
1650 cache->valid = !devices.empty(); 1660 cache->valid = !devices.empty();
1651 } 1661 }
1652 1662
1653 if (need_update_clients && monitoring_started_) 1663 if (need_update_clients && monitoring_started_)
1654 NotifyDevicesChanged(stream_type, devices); 1664 NotifyDevicesChanged(stream_type, devices);
1655 1665
1656 // Publish the result for all requests waiting for device list(s). 1666 // Publish the result for all requests waiting for device list(s).
1657 // Find the requests waiting for this device list, store their labels and 1667 // Find the requests waiting for this device list, store their labels and
1658 // release the iterator before calling device settings. We might get a call 1668 // release the iterator before calling device settings. We might get a call
1659 // back from device_settings that will need to iterate through devices. 1669 // back from device_settings that will need to iterate through devices.
1660 std::list<std::string> label_list; 1670 std::list<std::string> label_list;
1661 for (DeviceRequests::iterator it = requests_.begin(); it != requests_.end(); 1671 for (DeviceRequests::iterator it = requests_.begin(); it != requests_.end();
(...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after
2022 if (it->device.type == MEDIA_DESKTOP_VIDEO_CAPTURE) { 2032 if (it->device.type == MEDIA_DESKTOP_VIDEO_CAPTURE) {
2023 video_capture_manager_->SetDesktopCaptureWindowId(it->session_id, 2033 video_capture_manager_->SetDesktopCaptureWindowId(it->session_id,
2024 window_id); 2034 window_id);
2025 break; 2035 break;
2026 } 2036 }
2027 } 2037 }
2028 } 2038 }
2029 } 2039 }
2030 2040
2031 } // namespace content 2041 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/renderer_host/media/media_stream_manager.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698