| 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/browser/renderer_host/media/media_stream_manager.h" | 5 #include "content/browser/renderer_host/media/media_stream_manager.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 #include <string.h> | 9 #include <string.h> |
| 10 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 30 matching lines...) Expand all Loading... |
| 41 #include "content/public/browser/content_browser_client.h" | 41 #include "content/public/browser/content_browser_client.h" |
| 42 #include "content/public/browser/desktop_media_id.h" | 42 #include "content/public/browser/desktop_media_id.h" |
| 43 #include "content/public/browser/media_observer.h" | 43 #include "content/public/browser/media_observer.h" |
| 44 #include "content/public/browser/media_request_state.h" | 44 #include "content/public/browser/media_request_state.h" |
| 45 #include "content/public/browser/render_process_host.h" | 45 #include "content/public/browser/render_process_host.h" |
| 46 #include "content/public/browser/web_contents_media_capture_id.h" | 46 #include "content/public/browser/web_contents_media_capture_id.h" |
| 47 #include "content/public/common/content_client.h" | 47 #include "content/public/common/content_client.h" |
| 48 #include "content/public/common/content_switches.h" | 48 #include "content/public/common/content_switches.h" |
| 49 #include "content/public/common/media_stream_request.h" | 49 #include "content/public/common/media_stream_request.h" |
| 50 #include "crypto/hmac.h" | 50 #include "crypto/hmac.h" |
| 51 #include "media/audio/audio_manager_base.h" | 51 #include "media/audio/audio_device_description.h" |
| 52 #include "media/audio/audio_manager.h" |
| 52 #include "media/base/audio_parameters.h" | 53 #include "media/base/audio_parameters.h" |
| 53 #include "media/base/channel_layout.h" | 54 #include "media/base/channel_layout.h" |
| 54 #include "media/base/media_switches.h" | 55 #include "media/base/media_switches.h" |
| 55 #include "media/capture/video/video_capture_device_factory.h" | 56 #include "media/capture/video/video_capture_device_factory.h" |
| 56 #include "url/gurl.h" | 57 #include "url/gurl.h" |
| 57 | 58 |
| 58 #if defined(OS_WIN) | 59 #if defined(OS_WIN) |
| 59 #include "base/win/scoped_com_initializer.h" | 60 #include "base/win/scoped_com_initializer.h" |
| 60 #endif | 61 #endif |
| 61 | 62 |
| (...skipping 2059 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2121 subscriber->DevicesChanged(type); | 2122 subscriber->DevicesChanged(type); |
| 2122 } | 2123 } |
| 2123 | 2124 |
| 2124 // static | 2125 // static |
| 2125 std::string MediaStreamManager::GetHMACForMediaDeviceID( | 2126 std::string MediaStreamManager::GetHMACForMediaDeviceID( |
| 2126 const ResourceContext::SaltCallback& sc, | 2127 const ResourceContext::SaltCallback& sc, |
| 2127 const GURL& security_origin, | 2128 const GURL& security_origin, |
| 2128 const std::string& raw_unique_id) { | 2129 const std::string& raw_unique_id) { |
| 2129 DCHECK(security_origin.is_valid()); | 2130 DCHECK(security_origin.is_valid()); |
| 2130 DCHECK(!raw_unique_id.empty()); | 2131 DCHECK(!raw_unique_id.empty()); |
| 2131 if (raw_unique_id == media::AudioManagerBase::kDefaultDeviceId || | 2132 if (raw_unique_id == media::AudioDeviceDescription::kDefaultDeviceId || |
| 2132 raw_unique_id == media::AudioManagerBase::kCommunicationsDeviceId) { | 2133 raw_unique_id == media::AudioDeviceDescription::kCommunicationsDeviceId) { |
| 2133 return raw_unique_id; | 2134 return raw_unique_id; |
| 2134 } | 2135 } |
| 2135 | 2136 |
| 2136 crypto::HMAC hmac(crypto::HMAC::SHA256); | 2137 crypto::HMAC hmac(crypto::HMAC::SHA256); |
| 2137 const size_t digest_length = hmac.DigestLength(); | 2138 const size_t digest_length = hmac.DigestLength(); |
| 2138 std::vector<uint8_t> digest(digest_length); | 2139 std::vector<uint8_t> digest(digest_length); |
| 2139 std::string salt = sc.Run(); | 2140 std::string salt = sc.Run(); |
| 2140 bool result = hmac.Init(security_origin.spec()) && | 2141 bool result = hmac.Init(security_origin.spec()) && |
| 2141 hmac.Sign(raw_unique_id + salt, &digest[0], digest.size()); | 2142 hmac.Sign(raw_unique_id + salt, &digest[0], digest.size()); |
| 2142 DCHECK(result); | 2143 DCHECK(result); |
| 2143 return base::ToLowerASCII(base::HexEncode(&digest[0], digest.size())); | 2144 return base::ToLowerASCII(base::HexEncode(&digest[0], digest.size())); |
| 2144 } | 2145 } |
| 2145 | 2146 |
| 2146 // static | 2147 // static |
| 2147 bool MediaStreamManager::DoesMediaDeviceIDMatchHMAC( | 2148 bool MediaStreamManager::DoesMediaDeviceIDMatchHMAC( |
| 2148 const ResourceContext::SaltCallback& sc, | 2149 const ResourceContext::SaltCallback& sc, |
| 2149 const GURL& security_origin, | 2150 const GURL& security_origin, |
| 2150 const std::string& device_guid, | 2151 const std::string& device_guid, |
| 2151 const std::string& raw_unique_id) { | 2152 const std::string& raw_unique_id) { |
| 2152 DCHECK(security_origin.is_valid()); | 2153 DCHECK(security_origin.is_valid()); |
| 2153 DCHECK(!raw_unique_id.empty()); | 2154 DCHECK(!raw_unique_id.empty()); |
| 2154 std::string guid_from_raw_device_id = | 2155 std::string guid_from_raw_device_id = |
| 2155 GetHMACForMediaDeviceID(sc, security_origin, raw_unique_id); | 2156 GetHMACForMediaDeviceID(sc, security_origin, raw_unique_id); |
| 2156 return guid_from_raw_device_id == device_guid; | 2157 return guid_from_raw_device_id == device_guid; |
| 2157 } | 2158 } |
| 2158 | 2159 |
| 2159 } // namespace content | 2160 } // namespace content |
| OLD | NEW |