Index: chrome/browser/ui/libgtk2ui/select_file_dialog_interactive_uitest.cc |
diff --git a/chrome/browser/ui/libgtk2ui/select_file_dialog_interactive_uitest.cc b/chrome/browser/ui/libgtk2ui/select_file_dialog_interactive_uitest.cc |
index 657731f549122ba2d2e4b0eb2070e19cd24b1ea2..8078d4fc96836b8e6700a6b2f6066d1f80b461b4 100644 |
--- a/chrome/browser/ui/libgtk2ui/select_file_dialog_interactive_uitest.cc |
+++ b/chrome/browser/ui/libgtk2ui/select_file_dialog_interactive_uitest.cc |
@@ -100,3 +100,47 @@ class FilePicker : public ui::SelectFileDialog::Listener { |
}; |
} // namespace libgtk2ui |
+ |
+// Test that the file-picker is modal. |
+IN_PROC_BROWSER_TEST_F(BrowserSelectFileDialogTest, ModalTest) { |
+ // Bring the native window to the foreground. Returns true on success. |
+ ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); |
+ ASSERT_TRUE(browser()->window()->IsActive()); |
+ |
+ // Leaks in GtkFileChooserDialog. http://crbug.com/537468 |
+ ANNOTATE_SCOPED_MEMORY_LEAK; |
+ libgtk2ui::FilePicker file_picker(browser()->window()); |
+ |
+ gfx::NativeWindow window = browser()->window()->GetNativeWindow(); |
+ views::Widget* widget = views::Widget::GetWidgetForNativeWindow(window); |
+ ASSERT_NE(nullptr, widget); |
+ |
+ // Run a nested loop until the browser window becomes inactive |
+ // so that the file-picker can be active. |
+ WidgetActivationWaiter waiter_inactive(widget, false); |
+ waiter_inactive.Wait(); |
+ EXPECT_FALSE(browser()->window()->IsActive()); |
+ |
+ ui_test_utils::ClickOnView(browser(), VIEW_ID_TAB_CONTAINER); |
+ // The window should not get focus due to modal dialog. |
+ EXPECT_FALSE(browser()->window()->IsActive()); |
+ |
+ ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); |
+ EXPECT_FALSE(browser()->window()->IsActive()); |
+ |
+ ASSERT_TRUE(ui_test_utils::ShowAndFocusNativeWindow(window)); |
+ EXPECT_FALSE(browser()->window()->IsActive()); |
+ |
+ ASSERT_TRUE(ui_test_utils::SendKeyPressSync( |
+ browser(), ui::VKEY_TAB, false, false, true, false)); |
+ EXPECT_FALSE(browser()->window()->IsActive()); |
+ |
+ file_picker.Close(); |
+ |
+ // Run a nested loop until the browser window becomes active. |
+ WidgetActivationWaiter wait_active(widget, true); |
+ wait_active.Wait(); |
+ |
+ ui_test_utils::ClickOnView(browser(), VIEW_ID_TAB_CONTAINER); |
+ EXPECT_TRUE(browser()->window()->IsActive()); |
+} |