Index: content/public/test/browser_test_utils.cc |
diff --git a/content/public/test/browser_test_utils.cc b/content/public/test/browser_test_utils.cc |
index 802d4eba324aefe2afe3628832346c879ff54346..5211cafb5b23381c965be8cde80b84cff3550b8c 100644 |
--- a/content/public/test/browser_test_utils.cc |
+++ b/content/public/test/browser_test_utils.cc |
@@ -408,6 +408,30 @@ void AppendGzippedResource(const base::RefCountedMemory& encoded, |
} while (status != net::Filter::FILTER_DONE); |
} |
+// Queries for video input devices on the current system using the getSources |
+// API. |
+// |
+// This does not guarantee that a getUserMedia with video will succeed, as the |
+// camera could be busy for instance. |
+// |
+// Returns has-video-input-device to the test if there is a webcam available, |
+// no-video-input-devices otherwise. |
+const char kHasVideoInputDeviceOnSystem[] = |
+ "(function() {" |
+ "navigator.mediaDevices.enumerateDevices()" |
+ ".then(function(devices) {" |
+ "devices.forEach(function(device) {" |
+ "if (device.kind == 'video-input') {" |
+ "window.domAutomationController.send('has-video-input-device');" |
+ "return;" |
+ "}" |
+ "});" |
+ "window.domAutomationController.send('no-video-input-devices');" |
+ "});" |
+ "})()"; |
+ |
+const char kHasVideoInputDevice[] = "has-video-input-device"; |
+ |
} // namespace |
bool NavigateIframeToURL(WebContents* web_contents, |
@@ -742,6 +766,13 @@ void SimulateKeyPress(WebContents* web_contents, |
ASSERT_EQ(modifiers, 0); |
} |
+bool IsWebcamAvailableOnSystem(WebContents* web_contents) { |
+ std::string result; |
+ EXPECT_TRUE(content::ExecuteScriptAndExtractString( |
+ web_contents, kHasVideoInputDeviceOnSystem, &result)); |
+ return result == kHasVideoInputDevice; |
+} |
+ |
RenderFrameHost* ConvertToRenderFrameHost(WebContents* web_contents) { |
return web_contents->GetMainFrame(); |
} |