Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2137)

Unified Diff: content/public/test/browser_test_utils.cc

Issue 2478803003: Remove DOMAutomationController::automation_id_ (Closed)
Patch Set: Rebasing... Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/public/test/browser_test_utils.h ('k') | content/renderer/dom_automation_controller.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 ec91284fda82f772e28cf9f8769ecf2e129d3a40..5b44b1df3b8ac98742492154747bff72f47278d7 100644
--- a/content/public/test/browser_test_utils.cc
+++ b/content/public/test/browser_test_utils.cc
@@ -413,19 +413,23 @@ void AppendGzippedResource(const base::RefCountedMemory& encoded,
//
// 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 == 'videoinput') {"
- "window.domAutomationController.send('has-video-input-device');"
- "return;"
- "}"
- "});"
- "window.domAutomationController.send('no-video-input-devices');"
- "});"
- "})()";
+const char kHasVideoInputDeviceOnSystem[] = R"(
+ (function() {
+ navigator.mediaDevices.enumerateDevices()
+ .then(function(devices) {
+ var found = false;
+ devices.forEach(function(device) {
+ if (device.kind == 'videoinput') {
+ window.domAutomationController.send('has-video-input-device');
ncarter (slow) 2017/07/05 20:30:44 looks like there could still be multiple sends() h
Łukasz Anforowicz 2017/07/06 15:48:02 Good catch. Thanks for the "devices.some" suggest
+ found = true;
+ }
+ });
+ if (!found) {
+ window.domAutomationController.send('no-video-input-devices');
+ }
+ });
+ })()
+)";
const char kHasVideoInputDevice[] = "has-video-input-device";
@@ -816,6 +820,12 @@ RenderFrameHost* ConvertToRenderFrameHost(RenderFrameHost* render_frame_host) {
bool ExecuteScript(const ToRenderFrameHost& adapter,
const std::string& script) {
+ // TODO(lukasza): ExecuteScript should just call
+ // ExecuteJavaScriptWithUserGestureForTests and avoid modifying the original
+ // script (and at that point we should remove ExecuteUnmodifiedScript). This
+ // is difficult to change, because many tests depend on the message loop
+ // pumping done by ExecuteScriptHelper below (this is fragile - these tests
+ // should wait on a more specific thing instead).
ncarter (slow) 2017/07/05 20:30:44 We could make this more robust by generating a GUI
Łukasz Anforowicz 2017/07/06 15:48:02 Done.
std::string new_script =
script + ";window.domAutomationController.send(0);";
return ExecuteScriptHelper(adapter.render_frame_host(), new_script, true,
@@ -829,6 +839,12 @@ bool ExecuteScriptWithoutUserGesture(const ToRenderFrameHost& adapter,
nullptr);
}
+void ExecuteUnmodifiedScript(const ToRenderFrameHost& adapter,
+ const std::string& script) {
+ adapter.render_frame_host()->ExecuteJavaScriptWithUserGestureForTests(
+ base::UTF8ToUTF16(script));
+}
+
bool ExecuteScriptAndExtractDouble(const ToRenderFrameHost& adapter,
const std::string& script, double* result) {
DCHECK(result);
@@ -1003,8 +1019,7 @@ bool ExecuteWebUIResourceTest(WebContents* web_contents,
return false;
DOMMessageQueue message_queue;
- if (!ExecuteScript(web_contents, "runTests()"))
- return false;
+ ExecuteUnmodifiedScript(web_contents, "runTests()");
std::string message;
do {
@@ -1492,7 +1507,7 @@ void DOMMessageQueue::Observe(int type,
const NotificationDetails& details) {
Details<std::string> dom_op_result(details);
message_queue_.push(*dom_op_result.ptr());
- if (message_loop_runner_.get())
+ if (message_loop_runner_)
message_loop_runner_->Quit();
}
@@ -1503,6 +1518,7 @@ void DOMMessageQueue::RenderProcessGone(base::TerminationStatus status) {
case base::TERMINATION_STATUS_STILL_RUNNING:
break;
default:
+ renderer_crashed_ = true;
if (message_loop_runner_.get())
message_loop_runner_->Quit();
break;
@@ -1515,7 +1531,7 @@ void DOMMessageQueue::ClearQueue() {
bool DOMMessageQueue::WaitForMessage(std::string* message) {
DCHECK(message);
- if (message_queue_.empty()) {
+ if (!renderer_crashed_ && message_queue_.empty()) {
// This will be quit when a new message comes in.
message_loop_runner_ =
new MessageLoopRunner(MessageLoopRunner::QuitMode::IMMEDIATE);
@@ -1526,7 +1542,7 @@ bool DOMMessageQueue::WaitForMessage(std::string* message) {
bool DOMMessageQueue::PopMessage(std::string* message) {
DCHECK(message);
- if (message_queue_.empty())
+ if (renderer_crashed_ || message_queue_.empty())
return false;
*message = message_queue_.front();
message_queue_.pop();
« no previous file with comments | « content/public/test/browser_test_utils.h ('k') | content/renderer/dom_automation_controller.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698