diff options
author | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-10 20:50:39 +0000 |
---|---|---|
committer | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-10 20:50:39 +0000 |
commit | 73ed7bb4c25ed6d77a6080bdfe83aadd5a7e17ee (patch) | |
tree | 562b84ba12602e4b1dc64c8c405b0ef12bcab0a4 | |
parent | 466640fc7b8e220830e974fbb805019ddd028fe5 (diff) | |
download | chromium_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.cc | 180 | ||||
-rw-r--r-- | chrome/test/in_process_browser_test.cc | 5 |
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) { |