summaryrefslogtreecommitdiffstats
path: root/chrome/browser/ui/webui
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/ui/webui')
-rw-r--r--chrome/browser/ui/webui/downloads_dom_handler.cc3
-rw-r--r--chrome/browser/ui/webui/ntp/foreign_session_handler.cc3
-rw-r--r--chrome/browser/ui/webui/ntp/recently_closed_tabs_handler.cc3
-rw-r--r--chrome/browser/ui/webui/print_preview/print_preview_handler.cc13
-rw-r--r--chrome/browser/ui/webui/print_preview/print_preview_ui_interactive_browsertest.cc105
-rw-r--r--chrome/browser/ui/webui/print_preview/print_preview_ui_unittest.cc39
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());
-}