Index: chrome/browser/ui/views/constrained_window_views_browsertest.cc |
diff --git a/chrome/browser/ui/views/constrained_window_views_browsertest.cc b/chrome/browser/ui/views/constrained_window_views_browsertest.cc |
index 470566cc430a3dbf2612473648a82fa0d29b8317..81acfa4c70c5a6885a1d6439be5d7fc3c4598b87 100644 |
--- a/chrome/browser/ui/views/constrained_window_views_browsertest.cc |
+++ b/chrome/browser/ui/views/constrained_window_views_browsertest.cc |
@@ -14,14 +14,22 @@ |
#include "chrome/common/url_constants.h" |
#include "chrome/test/base/in_process_browser_test.h" |
#include "chrome/test/base/ui_test_utils.h" |
+#include "content/public/browser/native_web_keyboard_event.h" |
+#include "content/public/browser/render_view_host.h" |
#include "ipc/ipc_message.h" |
#include "ui/base/accelerators/accelerator.h" |
#include "ui/views/controls/textfield/textfield.h" |
#include "ui/views/focus/focus_manager.h" |
#include "ui/views/layout/fill_layout.h" |
+#include "ui/views/test/test_widget_observer.h" |
#include "ui/views/window/dialog_delegate.h" |
#include "ui/web_dialogs/test/test_web_dialog_delegate.h" |
+#if defined(USE_AURA) && defined(USE_X11) |
+#include <X11/Xlib.h> |
+#include "ui/base/x/x11_util.h" |
+#endif |
+ |
namespace { |
class TestConstrainedDialogContentsView |
@@ -250,36 +258,104 @@ IN_PROC_BROWSER_TEST_F(ConstrainedWindowViewTest, TabSwitchTest) { |
EXPECT_TRUE(test_dialog->done()); |
} |
-#if defined(OS_WIN) && !defined(USE_AURA) |
+#if defined(OS_WIN) || (defined(USE_AURA) && defined(USE_X11)) |
+ |
// Tests that backspace is not processed before it's sent to the web contents. |
-// We do not run this test on Aura because key events are sent to the web |
-// contents through a different code path that does not call |
-// views::FocusManager::OnKeyEvent when ConstrainedWindow is focused. |
IN_PROC_BROWSER_TEST_F(ConstrainedWindowViewTest, |
BackspaceSentToWebContent) { |
content::WebContents* web_contents = |
browser()->tab_strip_model()->GetActiveWebContents(); |
ASSERT_TRUE(web_contents != NULL); |
- GURL url(chrome::kChromeUINewTabURL); |
- ui_test_utils::NavigateToURL(browser(), url); |
+ GURL new_tab_url(chrome::kChromeUINewTabURL); |
+ ui_test_utils::NavigateToURL(browser(), new_tab_url); |
+ GURL about_url(chrome::kChromeUIAboutURL); |
+ ui_test_utils::NavigateToURL(browser(), about_url); |
+ |
+ ConstrainedWebDialogDelegate* cwdd = CreateConstrainedWebDialog( |
+ browser()->profile(), |
+ new ui::test::TestWebDialogDelegate(about_url), |
+ NULL, |
+ web_contents); |
+ |
+#if defined(OS_WIN) |
+ MSG native_key_event = { NULL, WM_KEYDOWN, ui::VKEY_BACK, 0 }; |
+#elif defined(USE_X11) |
+ XEvent x_event; |
+ ui::InitXKeyEventForTesting( |
+ ui::ET_KEY_PRESSED, ui::VKEY_BACK, ui::EF_NONE, &x_event); |
+ XEvent* native_key_event = &x_event; |
+#endif |
+ |
+#if defined(USE_AURA) |
+ ui::KeyEvent key(native_key_event, false); |
+ ui::KeyEvent* native_ui_key_event = &key; |
+#else |
+ MSG native_ui_key_event = native_key_event; |
+#endif |
+ |
+ content::RenderWidgetHost* render_widget_host = |
+ cwdd->GetWebContents()->GetRenderViewHost(); |
+ render_widget_host->ForwardKeyboardEvent( |
+ content::NativeWebKeyboardEvent(native_ui_key_event)); |
+ |
+ // Backspace is not processed as accelerator before it's sent to web contents. |
+ EXPECT_EQ(about_url.spec(), web_contents->GetURL().spec()); |
+ |
+ content::RunAllPendingInMessageLoop(); |
+ |
+ // Backspace is processed as accelerator after it's sent to web contents. |
+ EXPECT_EQ(new_tab_url.spec(), web_contents->GetURL().spec()); |
+} |
+// Tests that escape closes the constrained window. |
+IN_PROC_BROWSER_TEST_F(ConstrainedWindowViewTest, |
+ EscapeCloseConstrainedWindow) { |
+ content::WebContents* web_contents = |
+ browser()->tab_strip_model()->GetActiveWebContents(); |
+ ASSERT_TRUE(web_contents != NULL); |
+ |
+ GURL new_tab_url(chrome::kChromeUINewTabURL); |
+ ui_test_utils::NavigateToURL(browser(), new_tab_url); |
ConstrainedWebDialogDelegate* cwdd = CreateConstrainedWebDialog( |
browser()->profile(), |
- new ui::test::TestWebDialogDelegate(url), |
+ new ui::test::TestWebDialogDelegate(new_tab_url), |
NULL, |
web_contents); |
ConstrainedWindowViews* cwv = |
static_cast<ConstrainedWindowViews*>(cwdd->GetWindow()); |
+ views::test::TestWidgetObserver observer(cwv); |
cwv->FocusConstrainedWindow(); |
- BrowserView* browser_view = static_cast<BrowserView*>(browser()->window()); |
- ui::KeyEvent key_event(ui::ET_KEY_PRESSED, |
- ui::VKEY_BACK, |
- ui::EF_NONE, |
- false); |
- bool not_consumed = browser_view->GetFocusManager()->OnKeyEvent(key_event); |
- EXPECT_TRUE(not_consumed); |
+#if defined(OS_WIN) |
sky
2012/12/21 15:46:01
Can you refactor these ifdefs in some way to make
mazda
2013/01/07 22:41:14
Done.
|
+ MSG native_key_event = { NULL, WM_KEYDOWN, ui::VKEY_ESCAPE, 0 }; |
+#elif defined(USE_X11) |
+ XEvent x_event; |
+ ui::InitXKeyEventForTesting( |
+ ui::ET_KEY_PRESSED, ui::VKEY_ESCAPE, ui::EF_NONE, &x_event); |
+ XEvent* native_key_event = &x_event; |
+#endif |
+ |
+#if defined(USE_AURA) |
+ ui::KeyEvent key(native_key_event, false); |
+ ui::KeyEvent* native_ui_key_event = &key; |
+#else |
+ MSG native_ui_key_event = native_key_event; |
+#endif |
+ |
+ content::RenderWidgetHost* render_widget_host = |
+ cwdd->GetWebContents()->GetRenderViewHost(); |
+ render_widget_host->ForwardKeyboardEvent( |
+ content::NativeWebKeyboardEvent(native_ui_key_event)); |
+ |
+ // Escape is not processed as accelerator before it's sent to web contents. |
+ EXPECT_FALSE(observer.widget_closed()); |
+ |
+ content::RunAllPendingInMessageLoop(); |
+ |
+ // Escape is processed as accelerator after it's sent to web contents. |
+ EXPECT_TRUE(observer.widget_closed()); |
} |
-#endif // defined(OS_WIN) && !defined(USE_AURA) |
+ |
+#endif // defined(OS_WIN) || (defined(USE_AURA) && defined(USE_X11)) |