diff options
author | finnur@chromium.org <finnur@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-17 17:00:12 +0000 |
---|---|---|
committer | finnur@chromium.org <finnur@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-17 17:00:12 +0000 |
commit | b5464901bd28beacfe68d7b0fae6d258d51e32f3 (patch) | |
tree | 9de0768dd47a4b2eef46847a56d6faf738e7bc43 /chrome/test/ui_test_utils.cc | |
parent | 2e116bc834bd71cf306a62d6175ae2baa15851d5 (diff) | |
download | chromium_src-b5464901bd28beacfe68d7b0fae6d258d51e32f3.zip chromium_src-b5464901bd28beacfe68d7b0fae6d258d51e32f3.tar.gz chromium_src-b5464901bd28beacfe68d7b0fae6d258d51e32f3.tar.bz2 |
Fix 10573: Dismissing Find-in page doesn't set focus
to the link found.
We no longer use the selection controller to
highlight the active match. Before this change,
the focus would not be set if the user had changed
the selection. After this change, the focus will
be set unless the user has selected something on
the page.
I also wrote an in-browser unit test for this to
catch this regression in the future, but it is
disabled due to problem with running multiple
in-process browser tests in a row (teardown
problem).
BUG=10573
TEST=Covered by in process browser test now, see
bug for repro steps.
Review URL: http://codereview.chromium.org/79024
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@13945 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/test/ui_test_utils.cc')
-rw-r--r-- | chrome/test/ui_test_utils.cc | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/chrome/test/ui_test_utils.cc b/chrome/test/ui_test_utils.cc index 6af1091..be86d17 100644 --- a/chrome/test/ui_test_utils.cc +++ b/chrome/test/ui_test_utils.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. +// Copyright (c) 2009 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -6,6 +6,7 @@ #include "base/message_loop.h" #include "chrome/browser/browser.h" +#include "chrome/browser/dom_operation_notification_details.h" #include "chrome/browser/tab_contents/navigation_controller.h" #include "chrome/browser/tab_contents/web_contents.h" #include "chrome/common/notification_registrar.h" @@ -98,4 +99,42 @@ void NavigateToURLBlockUntilNavigationsComplete(Browser* browser, WaitForNavigations(controller, number_of_navigations); } +JavaScriptRunner::JavaScriptRunner(WebContents* web_contents, + const std::wstring& frame_xpath, + const std::wstring& jscript) + : web_contents_(web_contents), + frame_xpath_(frame_xpath), + jscript_(jscript) { + NotificationService::current()-> + AddObserver(this, NotificationType::DOM_OPERATION_RESPONSE, + Source<WebContents>(web_contents)); +} + +void JavaScriptRunner::Observe(NotificationType type, + const NotificationSource& source, + const NotificationDetails& details) { + Details<DomOperationNotificationDetails> dom_op_details(details); + result_ = dom_op_details->json(); + // The Jasonified response has quotes, remove them. + if (result_.length() > 1 && result_[0] == '"') + result_ = result_.substr(1, result_.length() - 2); + + NotificationService::current()-> + RemoveObserver(this, NotificationType::DOM_OPERATION_RESPONSE, + Source<WebContents>(web_contents_)); + MessageLoop::current()->PostTask(FROM_HERE, new MessageLoop::QuitTask()); +} + +std::string JavaScriptRunner::Run() { + // The DOMAutomationController requires an automation ID, even though we are + // not using it in this case. + web_contents_->render_view_host()->ExecuteJavascriptInWebFrame( + frame_xpath_, L"window.domAutomationController.setAutomationId(0);"); + + web_contents_->render_view_host()->ExecuteJavascriptInWebFrame(frame_xpath_, + jscript_); + ui_test_utils::RunMessageLoop(); + return result_; +} + } // namespace ui_test_utils |