summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-10 20:50:39 +0000
committersky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-10 20:50:39 +0000
commit73ed7bb4c25ed6d77a6080bdfe83aadd5a7e17ee (patch)
tree562b84ba12602e4b1dc64c8c405b0ef12bcab0a4
parent466640fc7b8e220830e974fbb805019ddd028fe5 (diff)
downloadchromium_src-73ed7bb4c25ed6d77a6080bdfe83aadd5a7e17ee.zip
chromium_src-73ed7bb4c25ed6d77a6080bdfe83aadd5a7e17ee.tar.gz
chromium_src-73ed7bb4c25ed6d77a6080bdfe83aadd5a7e17ee.tar.bz2
Revert 55602 - Attempt at making BrowserKeyboardAccessibility lets flaky. If an
accessibility event was received before the tab key was seen, then we would prematurely quit the message loop and end up in ui_controls::SendKeyPressNotifyWhenDone again, resulting in hitting the DCHECK in ui_controls. Additionally if the test timed out we would keep running other tests, resulting in hitting the DCHECK in ui_controls. I'm not sure which was happening, but either could have caused the DCHECK to get hit. I'm going to leave the debugging code in for a few cycles. I think we need a SendKeyPressAndBlock and callers ASSERT that it returns true. I'll look into that later though. BUG=50864 TEST=this is only a test change Review URL: http://codereview.chromium.org/3058039 TBR=sky@chromium.org Review URL: http://codereview.chromium.org/3174001 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@55620 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/views/browser_keyboard_accessibility_test_win.cc180
-rw-r--r--chrome/test/in_process_browser_test.cc5
2 files changed, 81 insertions, 104 deletions
diff --git a/chrome/browser/views/browser_keyboard_accessibility_test_win.cc b/chrome/browser/views/browser_keyboard_accessibility_test_win.cc
index 0e2f592..f5b942f 100644
--- a/chrome/browser/views/browser_keyboard_accessibility_test_win.cc
+++ b/chrome/browser/views/browser_keyboard_accessibility_test_win.cc
@@ -15,63 +15,12 @@
namespace {
-// FocusWaiter is used to wait for focus on a NativeWindow. It is ViewsDelegate
-// to know when focus changes.
-class FocusWaiter : public ChromeViewsDelegate {
- public:
- // Wait for focus to be received on the window. Returns true if successful.
- static bool WaitForFocus(gfx::NativeWindow window) {
- FocusWaiter waiter(window);
- ui_test_utils::RunMessageLoop();
- // FocusWaiter exits the message loop when done.
- return waiter.quit_message_loop_;
- }
-
- private:
- FocusWaiter(gfx::NativeWindow window)
- : window_(window),
- last_delegate_(ViewsDelegate::views_delegate),
- quit_message_loop_(false) {
- ViewsDelegate::views_delegate = this;
- }
-
- ~FocusWaiter() {
- DCHECK_EQ(this, ViewsDelegate::views_delegate);
- ViewsDelegate::views_delegate = last_delegate_;
- }
-
- // Overidden from ChromeViewsDelegate.
- virtual void NotifyAccessibilityEvent(views::View* view,
- AccessibilityTypes::Event event_type) {
- if (!quit_message_loop_ && view->GetWidget()->GetNativeView() == window_) {
- quit_message_loop_ = true;
- MessageLoop::current()->Quit();
- }
-
- // Notify the existing delegate so that it can maintain whatever state it
- // needs to.
- if (last_delegate_)
- last_delegate_->NotifyAccessibilityEvent(view, event_type);
- }
-
- private:
- // Window we're waiting for focus on.
- gfx::NativeWindow window_;
-
- // ViewsDelegate at the time we were created.
- ViewsDelegate* last_delegate_;
-
- // Have we quit the message loop yet?
- bool quit_message_loop_;
-
- DISALLOW_COPY_AND_ASSIGN(FocusWaiter);
-};
-
class BrowserKeyboardAccessibility : public InProcessBrowserTest,
public ChromeViewsDelegate {
public:
BrowserKeyboardAccessibility()
- : current_view_(NULL),
+ : is_waiting_(false),
+ current_view_(NULL),
current_event_type_(AccessibilityTypes::EVENT_FOCUS) {
// Set ourselves as the currently active ViewsDelegate.
ViewsDelegate::views_delegate = this;
@@ -83,13 +32,22 @@ class BrowserKeyboardAccessibility : public InProcessBrowserTest,
// Save the last notification sent by views::View::NotifyAccessibilityEvent.
virtual void NotifyAccessibilityEvent(
views::View* view, AccessibilityTypes::Event event_type) {
- current_view_ = view;
+ current_view_ = view;
current_event_type_ = event_type;
+
+ // Are we within a message loop waiting for a particular event?
+ // TODO(phajdan.jr): remove logging after fixing http://crbug.com/50663.
+ LOG(ERROR) << "Got notification; is_waiting_ is "
+ << (is_waiting_ ? "true" : "false");
+ if (is_waiting_) {
+ is_waiting_ = false;
+ MessageLoop::current()->Quit();
+ }
}
// Helper that performs tabbing until it cycles back to the original focus.
- void TabCyclerForwardAndBack();
- void TabCycler(bool forward_tab);
+ void TabCyclerForwardAndBack(gfx::NativeWindow hwnd);
+ void TabCycler(gfx::NativeWindow hwnd, bool forward_tab);
views::View* current_view() const { return current_view_; }
@@ -101,7 +59,12 @@ class BrowserKeyboardAccessibility : public InProcessBrowserTest,
return current_event_type_;
}
+ void set_waiting(bool value) { is_waiting_ = value; }
+
private:
+ // Are we waiting for an event?
+ bool is_waiting_;
+
// View of interest (i.e. for testing or one we are waiting to gain focus).
views::View* current_view_;
@@ -109,45 +72,49 @@ class BrowserKeyboardAccessibility : public InProcessBrowserTest,
AccessibilityTypes::Event current_event_type_;
};
-IN_PROC_BROWSER_TEST_F(BrowserKeyboardAccessibility, TabInAboutChromeDialog) {
+// This test is disabled, see bug 50864.
+IN_PROC_BROWSER_TEST_F(BrowserKeyboardAccessibility,
+ DISABLED_TabInAboutChromeDialog) {
views::Window* about_chrome_window =
BrowserView::GetBrowserViewForNativeWindow(
browser()->window()->GetNativeHandle())->ShowAboutChromeDialog();
- if (current_view_native_window() != about_chrome_window->GetNativeWindow()) {
- // Wait for 'about' to get focus.
- ASSERT_TRUE(
- FocusWaiter::WaitForFocus(about_chrome_window->GetNativeWindow()));
- }
- TabCyclerForwardAndBack();
+ TabCyclerForwardAndBack(about_chrome_window->GetNativeWindow());
}
+// This test is disabled, see bug 50864.
IN_PROC_BROWSER_TEST_F(BrowserKeyboardAccessibility,
- TabInClearBrowsingDataDialog) {
+ DISABLED_TabInClearBrowsingDataDialog) {
browser()->OpenClearBrowsingDataDialog();
- TabCyclerForwardAndBack();
+ TabCyclerForwardAndBack(current_view_native_window());
}
+// This test is disabled, see bug 50864.
IN_PROC_BROWSER_TEST_F(BrowserKeyboardAccessibility,
- TabInImportSettingsDialog) {
+ DISABLED_TabInImportSettingsDialog) {
browser()->OpenImportSettingsDialog();
- TabCyclerForwardAndBack();
+ TabCyclerForwardAndBack(current_view_native_window());
}
-IN_PROC_BROWSER_TEST_F(BrowserKeyboardAccessibility, TabInKeywordEditor) {
+// This test is disabled, see bug 50864.
+IN_PROC_BROWSER_TEST_F(BrowserKeyboardAccessibility,
+ DISABLED_TabInKeywordEditor) {
browser()->OpenKeywordEditor();
- TabCyclerForwardAndBack();
+ TabCyclerForwardAndBack(current_view_native_window());
}
-IN_PROC_BROWSER_TEST_F(BrowserKeyboardAccessibility, TabInOptionsDialog) {
+// This test is disabled, see bug 50864.
+IN_PROC_BROWSER_TEST_F(BrowserKeyboardAccessibility,
+ DISABLED_TabInOptionsDialog) {
browser()->OpenOptionsDialog();
// Tab through each of the three tabs.
- for (int i = 0; i < 3 && !HasFatalFailure(); ++i) {
+ for (int i = 0; i < 3; ++i) {
// TODO(phajdan.jr): remove logging after fixing http://crbug.com/50663.
LOG(ERROR) << "Iteration no. " << i;
- TabCyclerForwardAndBack();
+ TabCyclerForwardAndBack(current_view_native_window());
+
// TODO(phajdan.jr): remove logging after fixing http://crbug.com/50663.
LOG(ERROR) << "Sending TAB key event...";
@@ -155,76 +122,87 @@ IN_PROC_BROWSER_TEST_F(BrowserKeyboardAccessibility, TabInOptionsDialog) {
base::VKEY_TAB,
true, false, false, false,
new MessageLoop::QuitTask());
+ set_waiting(true);
ui_test_utils::RunMessageLoop();
}
}
-IN_PROC_BROWSER_TEST_F(BrowserKeyboardAccessibility, TabInPasswordManager) {
+// This test is disabled, see bug 50864.
+IN_PROC_BROWSER_TEST_F(BrowserKeyboardAccessibility,
+ DISABLED_TabInPasswordManager) {
browser()->OpenPasswordManager();
- TabCyclerForwardAndBack();
+ TabCyclerForwardAndBack(current_view_native_window());
}
// TODO(dtseng): http://www.crbug.com/50402
IN_PROC_BROWSER_TEST_F(BrowserKeyboardAccessibility,
FAILS_TabInSyncMyBookmarksDialog) {
browser()->OpenSyncMyBookmarksDialog();
- TabCyclerForwardAndBack();
+ TabCyclerForwardAndBack(current_view_native_window());
}
-IN_PROC_BROWSER_TEST_F(BrowserKeyboardAccessibility, TabInTaskManager) {
+// This test is disabled, see bug 50864.
+IN_PROC_BROWSER_TEST_F(BrowserKeyboardAccessibility,
+ DISABLED_TabInTaskManager) {
browser()->OpenTaskManager();
- TabCyclerForwardAndBack();
+ TabCyclerForwardAndBack(current_view_native_window());
}
-IN_PROC_BROWSER_TEST_F(BrowserKeyboardAccessibility, TabInToolbar) {
+// This test is disabled, see bug 50864.
+IN_PROC_BROWSER_TEST_F(BrowserKeyboardAccessibility,
+ DISABLED_TabInToolbar) {
gfx::NativeWindow native_window = browser()->window()->GetNativeHandle();
ui_controls::SendKeyPressNotifyWhenDone(native_window,
base::VKEY_T,
false, true, true, false,
new MessageLoop::QuitTask());
+ set_waiting(true);
ui_test_utils::RunMessageLoop();
-
- // TODO: this needs to assert the toolbar got focus.
-
- TabCyclerForwardAndBack();
+ TabCyclerForwardAndBack(current_view_native_window());
}
-IN_PROC_BROWSER_TEST_F(BrowserKeyboardAccessibility, TabInUpdateChromeDialog) {
+// This test is disabled, see bug 50864.
+IN_PROC_BROWSER_TEST_F(BrowserKeyboardAccessibility,
+ DISABLED_TabInUpdateChromeDialog) {
browser()->OpenUpdateChromeDialog();
- TabCyclerForwardAndBack();
+ TabCyclerForwardAndBack(current_view_native_window());
}
-void BrowserKeyboardAccessibility::TabCyclerForwardAndBack() {
- if (HasFatalFailure())
- return;
-
- TabCycler(true);
-
- if (HasFatalFailure())
- return;
-
- TabCycler(false);
+void BrowserKeyboardAccessibility::TabCyclerForwardAndBack(
+ gfx::NativeWindow hwnd) {
+ TabCycler(hwnd, true);
+ TabCycler(hwnd, false);
}
-void BrowserKeyboardAccessibility::TabCycler(bool forward_tab) {
- gfx::NativeWindow hwnd = current_view_native_window();
- ASSERT_TRUE(hwnd);
+void BrowserKeyboardAccessibility::TabCycler(gfx::NativeWindow hwnd,
+ bool forward_tab) {
+ // Wait for a focus event on the provided native window.
+ while (current_event() != AccessibilityTypes::EVENT_FOCUS ||
+ current_view_native_window() != hwnd) {
+ // TODO(phajdan.jr): remove logging after fixing http://crbug.com/50663.
+ LOG(ERROR) << "Runnig message loop...";
+ set_waiting(true);
+ ui_test_utils::RunMessageLoop();
+ }
+ // TODO(phajdan.jr): remove logging after fixing http://crbug.com/50663.
+ LOG(ERROR) << "After the loop.";
views::View* first_focused_item = current_view();
ASSERT_TRUE(first_focused_item != NULL);
+ views::View* next_focused_item = first_focused_item;
+
// Keep tabbing until we reach the originally focused view.
do {
// TODO(phajdan.jr): remove logging after fixing http://crbug.com/50663.
LOG(ERROR) << "Sending TAB key event.";
ui_controls::SendKeyPressNotifyWhenDone(hwnd, base::VKEY_TAB,
false, !forward_tab, false, false, new MessageLoop::QuitTask());
-
- current_view_ = NULL;
-
+ set_waiting(true);
ui_test_utils::RunMessageLoop();
- } while (first_focused_item != current_view() && !HasFatalFailure());
+ next_focused_item = current_view();
+ } while (first_focused_item != next_focused_item);
// TODO(phajdan.jr): remove logging after fixing http://crbug.com/50663.
LOG(ERROR) << "After second loop.";
}
diff --git a/chrome/test/in_process_browser_test.cc b/chrome/test/in_process_browser_test.cc
index 39d9681..5d7e2be 100644
--- a/chrome/test/in_process_browser_test.cc
+++ b/chrome/test/in_process_browser_test.cc
@@ -334,10 +334,9 @@ void InProcessBrowserTest::TimedOut() {
error_message += base::IntToString(initial_timeout_);
error_message += " ms (kInitialTimeoutInMS).";
- MessageLoopForUI::current()->Quit();
+ GTEST_NONFATAL_FAILURE_(error_message.c_str());
- // WARNING: This must be after Quit as it returns.
- FAIL() << error_message;
+ MessageLoopForUI::current()->Quit();
}
void InProcessBrowserTest::SetInitialTimeoutInMS(int timeout_value) {