OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "base/json/json_writer.h" | 5 #include "base/json/json_writer.h" |
6 #include "base/message_loop/message_loop.h" | 6 #include "base/message_loop/message_loop.h" |
7 #include "base/strings/string_util.h" | 7 #include "base/strings/string_util.h" |
8 #include "base/strings/stringprintf.h" | 8 #include "base/strings/stringprintf.h" |
9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
10 #include "base/synchronization/waitable_event.h" | 10 #include "base/synchronization/waitable_event.h" |
11 #include "base/threading/platform_thread.h" | 11 #include "base/threading/platform_thread.h" |
12 #include "base/time/time.h" | 12 #include "base/time/time.h" |
13 #include "chrome/browser/browser_process.h" | 13 #include "chrome/browser/browser_process.h" |
14 #include "chrome/browser/extensions/api/webrtc_audio_private/webrtc_audio_privat
e_api.h" | 14 #include "chrome/browser/extensions/api/webrtc_audio_private/webrtc_audio_privat
e_api.h" |
15 #include "chrome/browser/extensions/component_loader.h" | 15 #include "chrome/browser/extensions/component_loader.h" |
16 #include "chrome/browser/extensions/extension_apitest.h" | 16 #include "chrome/browser/extensions/extension_apitest.h" |
17 #include "chrome/browser/extensions/extension_function_test_utils.h" | 17 #include "chrome/browser/extensions/extension_function_test_utils.h" |
18 #include "chrome/browser/extensions/extension_tab_util.h" | 18 #include "chrome/browser/extensions/extension_tab_util.h" |
19 #include "chrome/browser/media/webrtc_log_uploader.h" | 19 #include "chrome/browser/media/webrtc_log_uploader.h" |
20 #include "chrome/browser/ui/browser.h" | 20 #include "chrome/browser/ui/browser.h" |
21 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 21 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
22 #include "chrome/test/base/in_process_browser_test.h" | 22 #include "chrome/test/base/in_process_browser_test.h" |
23 #include "chrome/test/base/ui_test_utils.h" | 23 #include "chrome/test/base/ui_test_utils.h" |
| 24 #include "content/public/browser/browser_thread.h" |
24 #include "content/public/browser/media_device_id.h" | 25 #include "content/public/browser/media_device_id.h" |
25 #include "content/public/browser/web_contents.h" | 26 #include "content/public/browser/web_contents.h" |
26 #include "content/public/test/browser_test_utils.h" | 27 #include "content/public/test/browser_test_utils.h" |
27 #include "extensions/common/permissions/permission_set.h" | 28 #include "extensions/common/permissions/permission_set.h" |
28 #include "extensions/common/permissions/permissions_data.h" | 29 #include "extensions/common/permissions/permissions_data.h" |
29 #include "media/audio/audio_manager.h" | 30 #include "media/audio/audio_manager.h" |
30 #include "net/test/embedded_test_server/embedded_test_server.h" | 31 #include "net/test/embedded_test_server/embedded_test_server.h" |
31 #include "testing/gtest/include/gtest/gtest.h" | 32 #include "testing/gtest/include/gtest/gtest.h" |
32 | 33 |
33 using base::JSONWriter; | 34 using base::JSONWriter; |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
107 FROM_HERE, | 108 FROM_HERE, |
108 base::Bind(&WebrtcAudioPrivateTest::GetAudioDeviceNames, this, | 109 base::Bind(&WebrtcAudioPrivateTest::GetAudioDeviceNames, this, |
109 EnumerationFunc, device_names)); | 110 EnumerationFunc, device_names)); |
110 enumeration_event_.Wait(); | 111 enumeration_event_.Wait(); |
111 } else { | 112 } else { |
112 (audio_manager->*EnumerationFunc)(device_names); | 113 (audio_manager->*EnumerationFunc)(device_names); |
113 enumeration_event_.Signal(); | 114 enumeration_event_.Signal(); |
114 } | 115 } |
115 } | 116 } |
116 | 117 |
| 118 // Synchronously (from the calling thread's point of view) retrieve the |
| 119 // source id in the |origin| on the IO thread. On return, |
| 120 // |source_id_in_origin| contains the id |raw_device_id| is known by in |
| 121 // the origin. |
| 122 void GetSourceIDInOrigin(content::ResourceContext* resource_context, |
| 123 GURL origin, |
| 124 const std::string& raw_device_id, |
| 125 std::string* source_id_in_origin) { |
| 126 if (!content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)) { |
| 127 content::BrowserThread::PostTask( |
| 128 content::BrowserThread::IO, FROM_HERE, |
| 129 base::Bind(&WebrtcAudioPrivateTest::GetSourceIDInOrigin, |
| 130 this, resource_context, origin, raw_device_id, |
| 131 source_id_in_origin)); |
| 132 enumeration_event_.Wait(); |
| 133 } else { |
| 134 *source_id_in_origin = content::GetHMACForMediaDeviceID( |
| 135 resource_context, |
| 136 origin, |
| 137 raw_device_id); |
| 138 enumeration_event_.Signal(); |
| 139 } |
| 140 } |
| 141 |
117 // Event used to signal completion of enumeration. | 142 // Event used to signal completion of enumeration. |
118 base::WaitableEvent enumeration_event_; | 143 base::WaitableEvent enumeration_event_; |
119 }; | 144 }; |
120 | 145 |
121 IN_PROC_BROWSER_TEST_F(WebrtcAudioPrivateTest, GetSinks) { | 146 IN_PROC_BROWSER_TEST_F(WebrtcAudioPrivateTest, GetSinks) { |
122 AudioDeviceNames devices; | 147 AudioDeviceNames devices; |
123 GetAudioDeviceNames(&AudioManager::GetAudioOutputDeviceNames, &devices); | 148 GetAudioDeviceNames(&AudioManager::GetAudioOutputDeviceNames, &devices); |
124 | 149 |
125 scoped_refptr<WebrtcAudioPrivateGetSinksFunction> function = | 150 scoped_refptr<WebrtcAudioPrivateGetSinksFunction> function = |
126 new WebrtcAudioPrivateGetSinksFunction(); | 151 new WebrtcAudioPrivateGetSinksFunction(); |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
256 // Get the list of input devices. We can cheat in the unit test and | 281 // Get the list of input devices. We can cheat in the unit test and |
257 // run this on the main thread since nobody else will be running at | 282 // run this on the main thread since nobody else will be running at |
258 // the same time. | 283 // the same time. |
259 AudioDeviceNames devices; | 284 AudioDeviceNames devices; |
260 GetAudioDeviceNames(&AudioManager::GetAudioInputDeviceNames, &devices); | 285 GetAudioDeviceNames(&AudioManager::GetAudioInputDeviceNames, &devices); |
261 | 286 |
262 // Try to get an associated sink for each source. | 287 // Try to get an associated sink for each source. |
263 for (AudioDeviceNames::const_iterator device = devices.begin(); | 288 for (AudioDeviceNames::const_iterator device = devices.begin(); |
264 device != devices.end(); | 289 device != devices.end(); |
265 ++device) { | 290 ++device) { |
266 std::string raw_source_id = device->unique_id; | 291 scoped_refptr<WebrtcAudioPrivateGetAssociatedSinkFunction> function = |
267 VLOG(2) << "Trying to find associated sink for device " << raw_source_id; | 292 new WebrtcAudioPrivateGetAssociatedSinkFunction(); |
| 293 |
| 294 std::string raw_device_id = device->unique_id; |
| 295 VLOG(2) << "Trying to find associated sink for device " << raw_device_id; |
| 296 std::string source_id_in_origin; |
268 GURL origin(GURL("http://www.google.com/").GetOrigin()); | 297 GURL origin(GURL("http://www.google.com/").GetOrigin()); |
269 std::string source_id_in_origin = | 298 GetSourceIDInOrigin(profile()->GetResourceContext(), |
270 content::GetHMACForMediaDeviceID(origin, raw_source_id); | 299 origin, |
| 300 raw_device_id, |
| 301 &source_id_in_origin); |
271 | 302 |
272 ListValue parameters; | 303 ListValue parameters; |
273 parameters.AppendString(origin.spec()); | 304 parameters.AppendString(origin.spec()); |
274 parameters.AppendString(source_id_in_origin); | 305 parameters.AppendString(source_id_in_origin); |
275 std::string parameter_string; | 306 std::string parameter_string; |
276 JSONWriter::Write(¶meters, ¶meter_string); | 307 JSONWriter::Write(¶meters, ¶meter_string); |
277 | 308 |
278 scoped_refptr<WebrtcAudioPrivateGetAssociatedSinkFunction> function = | |
279 new WebrtcAudioPrivateGetAssociatedSinkFunction(); | |
280 scoped_ptr<base::Value> result( | 309 scoped_ptr<base::Value> result( |
281 RunFunctionAndReturnSingleResult(function.get(), | 310 RunFunctionAndReturnSingleResult(function.get(), |
282 parameter_string, | 311 parameter_string, |
283 browser())); | 312 browser())); |
284 std::string result_string; | 313 std::string result_string; |
285 JSONWriter::Write(result.get(), &result_string); | 314 JSONWriter::Write(result.get(), &result_string); |
286 VLOG(2) << "Results: " << result_string; | 315 VLOG(2) << "Results: " << result_string; |
287 } | 316 } |
288 } | 317 } |
289 | 318 |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
342 | 371 |
343 ASSERT_TRUE(content::ExecuteScript(tab, "browsertestRunAllTests();")); | 372 ASSERT_TRUE(content::ExecuteScript(tab, "browsertestRunAllTests();")); |
344 | 373 |
345 content::TitleWatcher title_watcher(tab, ASCIIToUTF16("success")); | 374 content::TitleWatcher title_watcher(tab, ASCIIToUTF16("success")); |
346 title_watcher.AlsoWaitForTitle(ASCIIToUTF16("failure")); | 375 title_watcher.AlsoWaitForTitle(ASCIIToUTF16("failure")); |
347 string16 result = title_watcher.WaitAndGetTitle(); | 376 string16 result = title_watcher.WaitAndGetTitle(); |
348 EXPECT_EQ(ASCIIToUTF16("success"), result); | 377 EXPECT_EQ(ASCIIToUTF16("success"), result); |
349 } | 378 } |
350 | 379 |
351 } // namespace extensions | 380 } // namespace extensions |
OLD | NEW |