diff options
Diffstat (limited to 'chrome/browser/ui/webui')
6 files changed, 118 insertions, 48 deletions
diff --git a/chrome/browser/ui/webui/downloads_dom_handler.cc b/chrome/browser/ui/webui/downloads_dom_handler.cc index 209a9ab..da4bc31 100644 --- a/chrome/browser/ui/webui/downloads_dom_handler.cc +++ b/chrome/browser/ui/webui/downloads_dom_handler.cc @@ -39,6 +39,7 @@ #include "content/public/browser/user_metrics.h" #include "content/public/browser/url_data_source.h" #include "content/public/browser/web_contents.h" +#include "content/public/browser/web_contents_view.h" #include "content/public/browser/web_ui.h" #include "grit/generated_resources.h" #include "net/base/net_util.h" @@ -344,7 +345,7 @@ void DownloadsDOMHandler::HandleDrag(const base::ListValue* args) { return; gfx::Image* icon = g_browser_process->icon_manager()->LookupIcon( file->GetTargetFilePath(), IconLoader::NORMAL); - gfx::NativeView view = web_contents->GetNativeView(); + gfx::NativeView view = web_contents->GetView()->GetNativeView(); { // Enable nested tasks during DnD, while |DragDownload()| blocks. MessageLoop::ScopedNestableTaskAllower allow(MessageLoop::current()); diff --git a/chrome/browser/ui/webui/ntp/foreign_session_handler.cc b/chrome/browser/ui/webui/ntp/foreign_session_handler.cc index 2436cb5..7436e44 100644 --- a/chrome/browser/ui/webui/ntp/foreign_session_handler.cc +++ b/chrome/browser/ui/webui/ntp/foreign_session_handler.cc @@ -33,6 +33,7 @@ #include "content/public/browser/notification_source.h" #include "content/public/browser/url_data_source.h" #include "content/public/browser/web_contents.h" +#include "content/public/browser/web_contents_view.h" #include "content/public/browser/web_ui.h" #include "grit/generated_resources.h" #include "ui/base/l10n/l10n_util.h" @@ -112,7 +113,7 @@ void ForeignSessionHandler::OpenForeignSessionWindows( iter_begin + 1; chrome::HostDesktopType host_desktop_type = chrome::GetHostDesktopTypeForNativeView( - web_ui->GetWebContents()->GetNativeView()); + web_ui->GetWebContents()->GetView()->GetNativeView()); SessionRestore::RestoreForeignSessionWindows( Profile::FromWebUI(web_ui), host_desktop_type, iter_begin, iter_end); } diff --git a/chrome/browser/ui/webui/ntp/recently_closed_tabs_handler.cc b/chrome/browser/ui/webui/ntp/recently_closed_tabs_handler.cc index fdc30a1..da133de 100644 --- a/chrome/browser/ui/webui/ntp/recently_closed_tabs_handler.cc +++ b/chrome/browser/ui/webui/ntp/recently_closed_tabs_handler.cc @@ -14,6 +14,7 @@ #include "chrome/browser/ui/webui/ntp/new_tab_ui.h" #include "chrome/common/url_constants.h" #include "content/public/browser/web_contents.h" +#include "content/public/browser/web_contents_view.h" #include "content/public/browser/web_ui.h" #include "ui/webui/web_ui_util.h" @@ -106,7 +107,7 @@ void RecentlyClosedTabsHandler::HandleReopenTab(const ListValue* args) { return; chrome::HostDesktopType host_desktop_type = chrome::GetHostDesktopTypeForNativeView( - web_ui()->GetWebContents()->GetNativeView()); + web_ui()->GetWebContents()->GetView()->GetNativeView()); WindowOpenDisposition disposition = webui::GetDispositionFromClick(args, 2); tab_restore_service_->RestoreEntryById(delegate, static_cast<int>(session_to_restore), diff --git a/chrome/browser/ui/webui/print_preview/print_preview_handler.cc b/chrome/browser/ui/webui/print_preview/print_preview_handler.cc index 88d3ef4..2a875ef 100644 --- a/chrome/browser/ui/webui/print_preview/print_preview_handler.cc +++ b/chrome/browser/ui/webui/print_preview/print_preview_handler.cc @@ -505,7 +505,7 @@ void PrintPreviewHandler::PrintToPdf() { } else if (!select_file_dialog_ || !select_file_dialog_->IsRunning( platform_util::GetTopLevel( - preview_web_contents()->GetNativeView()))) { + preview_web_contents()->GetView()->GetNativeView()))) { PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>( web_ui()->GetController()); // Pre-populating select file dialog with print job title. @@ -582,8 +582,8 @@ void PrintPreviewHandler::OnSigninComplete( } void PrintPreviewHandler::HandleSignin(const ListValue* /*args*/) { - gfx::NativeWindow modal_parent = - platform_util::GetTopLevel(preview_web_contents()->GetNativeView()); + gfx::NativeWindow modal_parent = platform_util::GetTopLevel( + preview_web_contents()->GetView()->GetNativeView()); print_dialog_cloud::CreateCloudPrintSigninDialog( preview_web_contents()->GetBrowserContext(), modal_parent, @@ -597,8 +597,8 @@ void PrintPreviewHandler::PrintWithCloudPrintDialog( // instead of the print preview dialog. ReportStats(); - gfx::NativeWindow modal_parent = - platform_util::GetTopLevel(preview_web_contents()->GetNativeView()); + gfx::NativeWindow modal_parent = platform_util::GetTopLevel( + preview_web_contents()->GetView()->GetNativeView()); print_dialog_cloud::CreatePrintDialogForBytes( preview_web_contents()->GetBrowserContext(), modal_parent, @@ -877,7 +877,8 @@ void PrintPreviewHandler::SelectFile(const base::FilePath& default_filename) { &file_type_info, 0, FILE_PATH_LITERAL(""), - platform_util::GetTopLevel(preview_web_contents()->GetNativeView()), + platform_util::GetTopLevel( + preview_web_contents()->GetView()->GetNativeView()), NULL); } diff --git a/chrome/browser/ui/webui/print_preview/print_preview_ui_interactive_browsertest.cc b/chrome/browser/ui/webui/print_preview/print_preview_ui_interactive_browsertest.cc new file mode 100644 index 0000000..c7fb081 --- /dev/null +++ b/chrome/browser/ui/webui/print_preview/print_preview_ui_interactive_browsertest.cc @@ -0,0 +1,105 @@ +// Copyright (c) 2012 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. + +#include "base/command_line.h" +#include "chrome/browser/printing/print_preview_dialog_controller.h" +#include "chrome/browser/printing/print_view_manager.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/browser/ui/tabs/tab_strip_model.h" +#include "chrome/browser/ui/web_contents_modal_dialog_manager.h" +#include "chrome/browser/ui/webui/print_preview/print_preview_ui.h" +#include "chrome/common/chrome_switches.h" +#include "chrome/test/base/in_process_browser_test.h" +#include "content/public/browser/render_widget_host_view.h" +#include "content/public/test/test_utils.h" + +namespace { + +bool IsShowingWebContentsModalDialog(content::WebContents* tab) { + WebContentsModalDialogManager* web_contents_modal_dialog_manager = + WebContentsModalDialogManager::FromWebContents(tab); + return web_contents_modal_dialog_manager->IsShowingDialog(); +} + +class PrintPreviewTest : public InProcessBrowserTest { + public: + PrintPreviewTest() {} + +#if !defined(GOOGLE_CHROME_BUILD) + virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { + command_line->AppendSwitch(switches::kEnablePrintPreview); + } +#endif +}; + +class WebContentsDestroyedWatcher : public content::WebContentsObserver { + public: + WebContentsDestroyedWatcher(content::WebContents* web_contents, + const base::Closure& callback) + : content::WebContentsObserver(web_contents), + callback_(callback) {} + + virtual void WebContentsDestroyed(content::WebContents* web_contents) { + callback_.Run(); + } + + private: + base::Closure callback_; +}; + +#if defined(OS_MACOSX) // TODO(jam): track down. +#define MAYBE_InitiatorTabGetsFocusOnPrintPreviewDialogClose \ + DISABLED_InitiatorTabGetsFocusOnPrintPreviewDialogClose +#else +#define MAYBE_InitiatorTabGetsFocusOnPrintPreviewDialogClose \ + InitiatorTabGetsFocusOnPrintPreviewDialogClose +#endif + +IN_PROC_BROWSER_TEST_F(PrintPreviewTest, + MAYBE_InitiatorTabGetsFocusOnPrintPreviewDialogClose) { + content::WebContents* initiator_tab = + browser()->tab_strip_model()->GetActiveWebContents(); + + printing::PrintPreviewDialogController* controller = + printing::PrintPreviewDialogController::GetInstance(); + ASSERT_TRUE(controller); + + printing::PrintViewManager* print_view_manager = + printing::PrintViewManager::FromWebContents(initiator_tab); + print_view_manager->PrintPreviewNow(false); + + // Don't call GetOrCreatePreviewDialog since that would create the dialog now. + // The problem with doing so is that if we close it right away (which this + // test does), then when the IPC comes back from the renderer in the normal + // printing workflow that would cause the dialog to get created again (and it + // would be dispatched, racily, in the second nested message loop below). + scoped_refptr<content::MessageLoopRunner> dialog_runner = + new content::MessageLoopRunner; + controller->set_print_preview_tab_created_callback_for_testing( + dialog_runner->QuitClosure()); + dialog_runner->Run(); + + content::WebContents* preview_dialog = + controller->GetPrintPreviewForContents(initiator_tab); + + EXPECT_NE(initiator_tab, preview_dialog); + EXPECT_TRUE(IsShowingWebContentsModalDialog(initiator_tab)); + EXPECT_FALSE(initiator_tab->GetRenderWidgetHostView()->HasFocus()); + + PrintPreviewUI* preview_ui = static_cast<PrintPreviewUI*>( + preview_dialog->GetWebUI()->GetController()); + ASSERT_TRUE(preview_ui != NULL); + + scoped_refptr<content::MessageLoopRunner> runner = + new content::MessageLoopRunner; + WebContentsDestroyedWatcher watcher(preview_dialog, runner->QuitClosure()); + + preview_ui->OnPrintPreviewDialogClosed(); + + runner->Run(); + + EXPECT_FALSE(IsShowingWebContentsModalDialog(initiator_tab)); + EXPECT_TRUE(initiator_tab->GetRenderWidgetHostView()->HasFocus()); +} +} // namespace diff --git a/chrome/browser/ui/webui/print_preview/print_preview_ui_unittest.cc b/chrome/browser/ui/webui/print_preview/print_preview_ui_unittest.cc index b85f9fc..15b6eb2 100644 --- a/chrome/browser/ui/webui/print_preview/print_preview_ui_unittest.cc +++ b/chrome/browser/ui/webui/print_preview/print_preview_ui_unittest.cc @@ -19,12 +19,10 @@ #include "content/public/browser/plugin_service.h" #include "content/public/browser/site_instance.h" #include "content/public/browser/web_contents.h" -#include "content/public/test/web_contents_tester.h" #include "printing/print_job_constants.h" #include "webkit/plugins/npapi/mock_plugin_list.h" using content::WebContents; -using content::WebContentsTester; namespace { @@ -239,40 +237,3 @@ TEST_F(PrintPreviewUIUnitTest, GetCurrentPrintPreviewStatus) { &cancel); EXPECT_FALSE(cancel); } - -TEST_F(PrintPreviewUIUnitTest, InitiatorTabGetsFocusOnPrintPreviewDialogClose) { - EXPECT_EQ(1, browser()->tab_strip_model()->count()); - WebContents* initiator_tab = - WebContentsTester::CreateTestWebContentsCountFocus(profile(), NULL); - WebContentsTester* initiator_tester = WebContentsTester::For(initiator_tab); - chrome::AddWebContents(browser(), NULL, initiator_tab, - NEW_FOREGROUND_TAB, gfx::Rect(), false, NULL); - EXPECT_EQ(2, browser()->tab_strip_model()->count()); - EXPECT_EQ(0, initiator_tester->GetNumberOfFocusCalls()); - - printing::PrintPreviewDialogController* controller = - printing::PrintPreviewDialogController::GetInstance(); - ASSERT_TRUE(controller); - - printing::PrintViewManager* print_view_manager = - printing::PrintViewManager::FromWebContents(initiator_tab); - print_view_manager->PrintPreviewNow(false); - WebContents* preview_dialog = - controller->GetOrCreatePreviewDialog(initiator_tab); - - EXPECT_NE(initiator_tab, preview_dialog); - EXPECT_EQ(2, browser()->tab_strip_model()->count()); - EXPECT_TRUE(IsShowingWebContentsModalDialog(initiator_tab)); - EXPECT_EQ(0, initiator_tester->GetNumberOfFocusCalls()); - - PrintPreviewUI* preview_ui = static_cast<PrintPreviewUI*>( - preview_dialog->GetWebUI()->GetController()); - ASSERT_TRUE(preview_ui != NULL); - - preview_ui->OnPrintPreviewDialogClosed(); - message_loop()->RunUntilIdle(); - - EXPECT_EQ(2, browser()->tab_strip_model()->count()); - EXPECT_FALSE(IsShowingWebContentsModalDialog(initiator_tab)); - EXPECT_EQ(1, initiator_tester->GetNumberOfFocusCalls()); -} |