| Index: content/browser/renderer_host/media/media_stream_manager_unittest.cc | 
| diff --git a/content/browser/renderer_host/media/media_stream_manager_unittest.cc b/content/browser/renderer_host/media/media_stream_manager_unittest.cc | 
| index fc0028c0a7669faf821b1907404c1b7a585304bc..9ef2bd395fc4e09f702acd01f506d5946124d597 100644 | 
| --- a/content/browser/renderer_host/media/media_stream_manager_unittest.cc | 
| +++ b/content/browser/renderer_host/media/media_stream_manager_unittest.cc | 
| @@ -50,6 +50,17 @@ typedef media::AudioManagerAndroid AudioManagerPlatform; | 
| typedef media::FakeAudioManager AudioManagerPlatform; | 
| #endif | 
|  | 
| +namespace { | 
| + | 
| +std::string ReturnMockSalt() { | 
| +  return std::string(); | 
| +} | 
| + | 
| +ResourceContext::SaltCallback GetMockSaltCallback() { | 
| +  return base::Bind(&ReturnMockSalt); | 
| +} | 
| + | 
| +}  // namespace | 
|  | 
| // This class mocks the audio manager and overrides the | 
| // GetAudioInputDeviceNames() method to ensure that we can run our tests on | 
| @@ -182,4 +193,39 @@ TEST_F(MediaStreamManagerTest, MakeAndCancelMultipleRequests) { | 
| run_loop_.Run(); | 
| } | 
|  | 
| +TEST_F(MediaStreamManagerTest, DeviceID) { | 
| +  GURL security_origin("http://localhost"); | 
| +  const std::string unique_default_id( | 
| +      media::AudioManagerBase::kDefaultDeviceId); | 
| +  const std::string hashed_default_id = | 
| +      MediaStreamManager::GetHMACForMediaDeviceID( | 
| +          GetMockSaltCallback(), security_origin, unique_default_id); | 
| +  EXPECT_TRUE(MediaStreamManager::DoesMediaDeviceIDMatchHMAC( | 
| +      GetMockSaltCallback(), security_origin, hashed_default_id, | 
| +      unique_default_id)); | 
| +  EXPECT_EQ(unique_default_id, hashed_default_id); | 
| + | 
| +  const std::string unique_communications_id( | 
| +      media::AudioManagerBase::kCommunicationsDeviceId); | 
| +  const std::string hashed_communications_id = | 
| +      MediaStreamManager::GetHMACForMediaDeviceID( | 
| +          GetMockSaltCallback(), security_origin, unique_communications_id); | 
| +  EXPECT_TRUE(MediaStreamManager::DoesMediaDeviceIDMatchHMAC( | 
| +      GetMockSaltCallback(), security_origin, hashed_communications_id, | 
| +      unique_communications_id)); | 
| +  EXPECT_EQ(unique_communications_id, hashed_communications_id); | 
| + | 
| +  const std::string unique_other_id("other-unique-id"); | 
| +  const std::string hashed_other_id = | 
| +      MediaStreamManager::GetHMACForMediaDeviceID( | 
| +          GetMockSaltCallback(), security_origin, unique_other_id); | 
| +  EXPECT_TRUE(MediaStreamManager::DoesMediaDeviceIDMatchHMAC( | 
| +      GetMockSaltCallback(), security_origin, hashed_other_id, | 
| +      unique_other_id)); | 
| +  EXPECT_NE(unique_other_id, hashed_other_id); | 
| +  EXPECT_EQ(hashed_other_id.size(), 64U); | 
| +  for (const char& c : hashed_other_id) | 
| +    EXPECT_TRUE((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f')); | 
| +} | 
| + | 
| }  // namespace content | 
|  |