1f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// found in the LICENSE file. 4f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 5f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/command_line.h" 6f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/json/json_reader.h" 7f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/strings/string_util.h" 8f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/media/webrtc_browsertest_base.h" 9f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/media/webrtc_browsertest_common.h" 10f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 11f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/ui/browser_tabstrip.h" 12f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h" 13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 14f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h" 15f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 16f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "content/public/test/browser_test_utils.h" 17f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "media/audio/audio_manager.h" 18f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "media/base/media_switches.h" 19f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "net/test/embedded_test_server/embedded_test_server.h" 20f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 21f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)namespace { 22f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 23f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)const char kMainWebrtcTestHtmlPage[] = "/webrtc/webrtc_jsep01_test.html"; 24f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 25f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)const char kDeviceKindAudioInput[] = "audioinput"; 26f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)const char kDeviceKindVideoInput[] = "videoinput"; 27f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)const char kDeviceKindAudioOutput[] = "audiooutput"; 28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)const char kSourceKindAudioInput[] = "audio"; 30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)const char kSourceKindVideoInput[] = "video"; 31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} // namespace 33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 34f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Integration test for WebRTC getMediaDevices. It always uses fake devices. 35f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// It needs to be a browser test (and not content browser test) to be able to 36f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// test that labels are cleared or not depending on if access to devices has 37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// been granted. 38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class WebRtcGetMediaDevicesBrowserTest 39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) : public WebRtcTestBase, 40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) public testing::WithParamInterface<bool> { 41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) public: 42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) WebRtcGetMediaDevicesBrowserTest() 43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) : has_audio_output_devices_initialized_(false), 44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) has_audio_output_devices_(false) {} 45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 46f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { 47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) DetectErrorsInJavaScript(); // Look for errors in our rather complex js. 48f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 49f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 50f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 51f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Ensure the infobar is enabled, since we expect that in this test. 52f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_FALSE(command_line->HasSwitch(switches::kUseFakeUIForMediaStream)); 53f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 54f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Always use fake devices. 55f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) command_line->AppendSwitch(switches::kUseFakeDeviceForMediaStream); 56f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 57f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 58f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) protected: 59f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // This is used for media devices and sources. 60f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) struct MediaDeviceInfo { 61f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string device_id; // Domain specific device ID. 62f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string kind; 63f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string label; 64f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string group_id; 65f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }; 66f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 67f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool HasOutputDevices() { 68f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // There's no fake audio output devices supported yet. We can't test audio 69f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // output devices on bots with no output devices, so skip testing for that 70f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // on such bots. We cache the result since querying for devices can take 71f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // considerable time. 72f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (!has_audio_output_devices_initialized_) { 73f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) has_audio_output_devices_ = 74f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) media::AudioManager::Get()->HasAudioOutputDevices(); 75f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) has_audio_output_devices_initialized_ = true; 76f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 77f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return has_audio_output_devices_; 78f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 79f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 80f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // If |get_sources| is true, use getSources API and leave groupId empty, 81f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // otherwise use getMediaDevices API. 82f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void GetMediaDevicesOrSources(content::WebContents* tab, 83f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::vector<MediaDeviceInfo>* devices, 84f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool get_sources) { 85f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string devices_as_json = 86f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ExecuteJavascript(get_sources ? "getSources()" : "getMediaDevices()", 87f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) tab); 88f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_FALSE(devices_as_json.empty()); 89f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 90f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) int error_code; 91f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string error_message; 92f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<base::Value> value( 93f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::JSONReader::ReadAndReturnError(devices_as_json, 94f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::JSON_ALLOW_TRAILING_COMMAS, 95f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) &error_code, 96f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) &error_message)); 97f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 98f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(value.get() != NULL) << error_message; 99f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(value->GetType(), base::Value::TYPE_LIST); 100f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 101f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::ListValue* values; 102f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(value->GetAsList(&values)); 103f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_FALSE(values->empty()); 104f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool found_audio_input = false; 105f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool found_video_input = false; 106f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool found_audio_output = false; 107f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 108f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) for (base::ListValue::iterator it = values->begin(); 109f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) it != values->end(); ++it) { 110f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const base::DictionaryValue* dict; 111f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) MediaDeviceInfo device; 112f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE((*it)->GetAsDictionary(&dict)); 113f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(dict->GetString(get_sources ? "id" : "deviceId", 114f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) &device.device_id)); 115f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(dict->GetString("kind", &device.kind)); 116f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(dict->GetString("label", &device.label)); 117f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (!get_sources) 118f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(dict->GetString("groupId", &device.group_id)); 119f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 120f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Should be HMAC SHA256. 121f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(64ul, device.device_id.length()); 122f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(base::ContainsOnlyChars(device.device_id, 123f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "0123456789abcdef")); 124f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 125f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const char* kAudioInputKind = 126f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) get_sources ? kSourceKindAudioInput : kDeviceKindAudioInput; 127f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const char* kVideoInputKind = 128f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) get_sources ? kSourceKindVideoInput : kDeviceKindVideoInput; 129f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (get_sources) { 130f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(device.kind == kAudioInputKind || 131f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) device.kind == kVideoInputKind); 132f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } else { 133f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(device.kind == kAudioInputKind || 134f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) device.kind == kVideoInputKind || 135f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) device.kind == kDeviceKindAudioOutput); 136f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 137f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (device.kind == kAudioInputKind) { 138f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) found_audio_input = true; 139f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } else if (device.kind == kVideoInputKind) { 140f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) found_video_input = true; 141f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } else { 142f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) found_audio_output = true; 143f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 144f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 145f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // getSources doesn't have group ID support. getMediaDevices doesn't have 146f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // group ID support for video input devices. 147f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (get_sources || device.kind == kDeviceKindVideoInput) { 148f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(device.group_id.empty()); 149f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } else { 150f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_FALSE(device.group_id.empty()); 151f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 152f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 153f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) devices->push_back(device); 154f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 155f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 156f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(found_audio_input); 157f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(found_video_input); 158f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (get_sources) { 159f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_FALSE(found_audio_output); 160f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } else { 161f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(HasOutputDevices(), found_audio_output); 162f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 163f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 164f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 165f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void GetMediaDevices(content::WebContents* tab, 166f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::vector<MediaDeviceInfo>* devices) { 167f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetMediaDevicesOrSources(tab, devices, false); 168f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 169f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 170f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void GetSources(content::WebContents* tab, 171f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::vector<MediaDeviceInfo>* sources) { 172f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetMediaDevicesOrSources(tab, sources, true); 173f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 174f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 175f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool has_audio_output_devices_initialized_; 176f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool has_audio_output_devices_; 177f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}; 178f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 179f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)static const bool kParamsToRunTestsWith[] = { false, true }; 180f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)INSTANTIATE_TEST_CASE_P(WebRtcGetMediaDevicesBrowserTests, 181f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) WebRtcGetMediaDevicesBrowserTest, 182f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) testing::ValuesIn(kParamsToRunTestsWith)); 183f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 184116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// getMediaDevices has been removed and will be replaced 185116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// MediaDevices.enumerateDevices. http://crbug.com/388648. 186f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)IN_PROC_BROWSER_TEST_P(WebRtcGetMediaDevicesBrowserTest, 187116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DISABLED_GetMediaDevicesWithoutAccess) { 188f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 189f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GURL url(embedded_test_server()->GetURL(kMainWebrtcTestHtmlPage)); 190f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 191f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) content::WebContents* tab = 192f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 193f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 194f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::vector<MediaDeviceInfo> devices; 195f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetMediaDevices(tab, &devices); 196f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 197f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Labels should be empty if access has not been allowed. 198f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) for (std::vector<MediaDeviceInfo>::iterator it = devices.begin(); 199f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) it != devices.end(); ++it) { 200f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(it->label.empty()); 201f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 202f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 203f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 204116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// getMediaDevices has been removed and will be replaced 205116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// MediaDevices.enumerateDevices. http://crbug.com/388648. 206f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Disabled, fails due to http://crbug.com/382391. 207f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)IN_PROC_BROWSER_TEST_P(WebRtcGetMediaDevicesBrowserTest, 208f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) DISABLED_GetMediaDevicesWithAccess) { 209f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 210f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GURL url(embedded_test_server()->GetURL(kMainWebrtcTestHtmlPage)); 211f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 212f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) content::WebContents* tab = 213f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 214f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 215f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetUserMediaAndAccept(tab); 216f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 217f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::vector<MediaDeviceInfo> devices; 218f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetMediaDevices(tab, &devices); 219f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 220f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Labels should be non-empty if access has been allowed. 221f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) for (std::vector<MediaDeviceInfo>::iterator it = devices.begin(); 222f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) it != devices.end(); ++it) { 223f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(!it->label.empty()); 224f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 225f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 226f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 227116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// getMediaDevices has been removed and will be replaced 228116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// MediaDevices.enumerateDevices. http://crbug.com/388648. 229f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)IN_PROC_BROWSER_TEST_P(WebRtcGetMediaDevicesBrowserTest, 230116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DISABLED_GetMediaDevicesEqualsGetSourcesWithoutAccess) { 231f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 232f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GURL url(embedded_test_server()->GetURL(kMainWebrtcTestHtmlPage)); 233f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 234f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) content::WebContents* tab = 235f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 236f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 237f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::vector<MediaDeviceInfo> devices; 238f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetMediaDevices(tab, &devices); 239f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 240f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::vector<MediaDeviceInfo> sources; 241f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetSources(tab, &sources); 242f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 243f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::vector<MediaDeviceInfo>::iterator sources_it = sources.begin(); 244f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) for (std::vector<MediaDeviceInfo>::iterator devices_it = devices.begin(); 245f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) devices_it != devices.end(); ++devices_it) { 246f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (devices_it->kind == kDeviceKindAudioOutput) 247f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) continue; 248f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_STREQ(devices_it->device_id.c_str(), sources_it->device_id.c_str()); 249f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (devices_it->kind == kDeviceKindAudioInput) { 250f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_STREQ(kSourceKindAudioInput, sources_it->kind.c_str()); 251f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } else { 252f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_STREQ(kSourceKindVideoInput, sources_it->kind.c_str()); 253f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 254f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(devices_it->label.empty()); 255f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(sources_it->label.empty()); 256f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ++sources_it; 257f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 258f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(sources.end(), sources_it); 259f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 260f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 261116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// getMediaDevices has been removed and will be replaced 262116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// MediaDevices.enumerateDevices. http://crbug.com/388648. 263f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Disabled, fails due to http://crbug.com/382391. 264f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)IN_PROC_BROWSER_TEST_P(WebRtcGetMediaDevicesBrowserTest, 265f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) DISABLED_GetMediaDevicesEqualsGetSourcesWithAccess) { 266f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 267f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GURL url(embedded_test_server()->GetURL(kMainWebrtcTestHtmlPage)); 268f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 269f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) content::WebContents* tab = 270f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 271f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 272f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetUserMediaAndAccept(tab); 273f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 274f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::vector<MediaDeviceInfo> devices; 275f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetMediaDevices(tab, &devices); 276f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 277f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::vector<MediaDeviceInfo> sources; 278f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetSources(tab, &sources); 279f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 280f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::vector<MediaDeviceInfo>::iterator sources_it = sources.begin(); 281f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) for (std::vector<MediaDeviceInfo>::iterator devices_it = devices.begin(); 282f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) devices_it != devices.end(); ++devices_it) { 283f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (devices_it->kind == kDeviceKindAudioOutput) 284f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) continue; 285f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_STREQ(devices_it->device_id.c_str(), sources_it->device_id.c_str()); 286f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (devices_it->kind == kDeviceKindAudioInput) { 287f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_STREQ(kSourceKindAudioInput, sources_it->kind.c_str()); 288f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } else { 289f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_STREQ(kSourceKindVideoInput, sources_it->kind.c_str()); 290f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 291f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(!devices_it->label.empty()); 292f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_STREQ(devices_it->label.c_str(), sources_it->label.c_str()); 293f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ++sources_it; 294f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 295f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(sources.end(), sources_it); 296f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 297