summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordharcourt@chromium.org <dharcourt@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-15 20:03:35 +0000
committerdharcourt@chromium.org <dharcourt@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-15 20:03:35 +0000
commitc96a81ee512a5cfb8634a65ef3c7b742535ec2e8 (patch)
treea3077bc859ef45b53e8127207c4c9fe6f3877f88
parentb4e8e870c2d46895bbccf2f4b9faf3c2e82cd01b (diff)
downloadchromium_src-c96a81ee512a5cfb8634a65ef3c7b742535ec2e8.zip
chromium_src-c96a81ee512a5cfb8634a65ef3c7b742535ec2e8.tar.gz
chromium_src-c96a81ee512a5cfb8634a65ef3c7b742535ec2e8.tar.bz2
Added a browser test of the print preview dialog size for Chrome apps.
The added PrintPreviewShouldNotBeTooSmall test verifies that the print preview dialog is big enough to be usable even when printing small application windows. Because the print preview dialog is currently limited to the size of the window being printed on all platforms but OS X, this test currently fails on all platforms but OS X. BUG=none Review URL: https://codereview.chromium.org/26678004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@228747 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/apps/app_browsertest.cc68
-rw-r--r--chrome/browser/ui/webui/print_preview/print_preview_ui.cc19
-rw-r--r--chrome/browser/ui/webui/print_preview/print_preview_ui.h6
-rw-r--r--chrome/test/data/extensions/platform_apps/print_api/test.js3
4 files changed, 68 insertions, 28 deletions
diff --git a/chrome/browser/apps/app_browsertest.cc b/chrome/browser/apps/app_browsertest.cc
index 8dbd88f..792695a 100644
--- a/chrome/browser/apps/app_browsertest.cc
+++ b/chrome/browser/apps/app_browsertest.cc
@@ -120,15 +120,15 @@ class TabsAddedNotificationObserver
class ScopedPreviewTestingDelegate : PrintPreviewUI::TestingDelegate {
public:
- ScopedPreviewTestingDelegate(bool auto_cancel)
+ explicit ScopedPreviewTestingDelegate(bool auto_cancel)
: auto_cancel_(auto_cancel),
- waiting_for_ready_(false),
- waiting_runner_(new content::MessageLoopRunner) {
- PrintPreviewUI::SetTestingDelegate(this);
+ total_page_count_(1),
+ rendered_page_count_(0) {
+ PrintPreviewUI::SetDelegateForTesting(this);
}
~ScopedPreviewTestingDelegate() {
- PrintPreviewUI::SetTestingDelegate(NULL);
+ PrintPreviewUI::SetDelegateForTesting(NULL);
}
// PrintPreviewUI::TestingDelegate implementation.
@@ -137,22 +137,40 @@ class ScopedPreviewTestingDelegate : PrintPreviewUI::TestingDelegate {
}
// PrintPreviewUI::TestingDelegate implementation.
- virtual void PreviewIsReady() OVERRIDE {
- waiting_runner_->Quit();
- waiting_for_ready_ = false;
+ virtual void DidGetPreviewPageCount(int page_count) OVERRIDE {
+ total_page_count_ = page_count;
+ }
+
+ // PrintPreviewUI::TestingDelegate implementation.
+ virtual void DidRenderPreviewPage(const content::WebContents& preview_dialog)
+ OVERRIDE {
+ dialog_size_ = preview_dialog.GetView()->GetContainerSize();
+ ++rendered_page_count_;
+ CHECK(rendered_page_count_ <= total_page_count_);
+ if (waiting_runner_ && rendered_page_count_ == total_page_count_) {
+ waiting_runner_->Quit();
+ }
}
void WaitUntilPreviewIsReady() {
- if (!waiting_for_ready_) {
- waiting_for_ready_ = true;
+ CHECK(!waiting_runner_);
+ if (rendered_page_count_ < total_page_count_) {
+ waiting_runner_ = new content::MessageLoopRunner;
waiting_runner_->Run();
+ waiting_runner_ = NULL;
}
}
+ gfx::Size dialog_size() {
+ return dialog_size_;
+ }
+
private:
bool auto_cancel_;
- bool waiting_for_ready_;
+ int total_page_count_;
+ int rendered_page_count_;
scoped_refptr<content::MessageLoopRunner> waiting_runner_;
+ gfx::Size dialog_size_;
};
bool CopyTestDataAndSetCommandLineArg(
@@ -1077,7 +1095,7 @@ IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, MAYBE_WebContentsHasFocus) {
GetRenderWidgetHostView()->HasFocus());
}
-// The next two tests will only run automatically with Chrome branded builds
+// The next three tests will only run automatically with Chrome branded builds
// because they require the PDF preview plug-in. To run these tests manually for
// Chromium (non-Chrome branded) builds in a development environment:
//
@@ -1124,6 +1142,32 @@ IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest,
GetFirstShellWindow()->GetBaseWindow()->Close();
}
+// This test currently only passes on OS X (on other platforms the print preview
+// dialog's size is limited by the size of the window being printed).
+#if !defined(GOOGLE_CHROME_BUILD) || !defined(OS_MACOSX)
+#define MAYBE_PrintPreviewShouldNotBeTooSmall \
+ DISABLED_PrintPreviewShouldNotBeTooSmall
+#else
+#define MAYBE_PrintPreviewShouldNotBeTooSmall \
+ PrintPreviewShouldNotBeTooSmall
+#endif
+
+IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest,
+ MAYBE_PrintPreviewShouldNotBeTooSmall) {
+ // Print preview dialogs with widths less than 410 pixels will have preview
+ // areas that are too small, and ones with heights less than 191 pixels will
+ // have vertical scrollers for their controls that are too small.
+ gfx::Size minimum_dialog_size(410, 191);
+ ScopedPreviewTestingDelegate preview_delegate(false);
+ ASSERT_TRUE(RunPlatformAppTest("platform_apps/print_api")) << message_;
+ preview_delegate.WaitUntilPreviewIsReady();
+ EXPECT_GE(preview_delegate.dialog_size().width(),
+ minimum_dialog_size.width());
+ EXPECT_GE(preview_delegate.dialog_size().height(),
+ minimum_dialog_size.height());
+ GetFirstShellWindow()->GetBaseWindow()->Close();
+}
+
#if defined(OS_CHROMEOS)
diff --git a/chrome/browser/ui/webui/print_preview/print_preview_ui.cc b/chrome/browser/ui/webui/print_preview/print_preview_ui.cc
index 649aeb4..a6352a6 100644
--- a/chrome/browser/ui/webui/print_preview/print_preview_ui.cc
+++ b/chrome/browser/ui/webui/print_preview/print_preview_ui.cc
@@ -340,16 +340,6 @@ content::WebUIDataSource* CreatePrintPreviewUISource() {
PrintPreviewUI::TestingDelegate *g_testing_delegate_ = NULL;
-bool IsAutoCancelEnabledForTesting() {
- return (g_testing_delegate_ != NULL &&
- g_testing_delegate_->IsAutoCancelEnabled());
-}
-
-void NotifyDelegateThatPreviewIsReadyForTesting() {
- if (g_testing_delegate_ != NULL)
- g_testing_delegate_->PreviewIsReady();
-}
-
} // namespace
PrintPreviewUI::PrintPreviewUI(content::WebUI* web_ui)
@@ -464,6 +454,8 @@ void PrintPreviewUI::OnShowSystemDialog() {
void PrintPreviewUI::OnDidGetPreviewPageCount(
const PrintHostMsg_DidGetPreviewPageCount_Params& params) {
DCHECK_GT(params.page_count, 0);
+ if (g_testing_delegate_)
+ g_testing_delegate_->DidGetPreviewPageCount(params.page_count);
base::FundamentalValue count(params.page_count);
base::FundamentalValue request_id(params.preview_request_id);
web_ui()->CallJavascriptFunction("onDidGetPreviewPageCount",
@@ -507,10 +499,11 @@ void PrintPreviewUI::OnDidPreviewPage(int page_number,
base::FundamentalValue number(page_number);
base::FundamentalValue ui_identifier(id_);
base::FundamentalValue request_id(preview_request_id);
- NotifyDelegateThatPreviewIsReadyForTesting();
+ if (g_testing_delegate_)
+ g_testing_delegate_->DidRenderPreviewPage(*web_ui()->GetWebContents());
web_ui()->CallJavascriptFunction(
"onDidPreviewPage", number, ui_identifier, request_id);
- if (IsAutoCancelEnabledForTesting())
+ if (g_testing_delegate_ && g_testing_delegate_->IsAutoCancelEnabled())
web_ui()->CallJavascriptFunction("autoCancelForTesting");
}
@@ -599,6 +592,6 @@ void PrintPreviewUI::OnPrintPreviewScalingDisabled() {
}
// static
-void PrintPreviewUI::SetTestingDelegate(TestingDelegate* delegate) {
+void PrintPreviewUI::SetDelegateForTesting(TestingDelegate* delegate) {
g_testing_delegate_ = delegate;
}
diff --git a/chrome/browser/ui/webui/print_preview/print_preview_ui.h b/chrome/browser/ui/webui/print_preview/print_preview_ui.h
index 39354db..ab893bb 100644
--- a/chrome/browser/ui/webui/print_preview/print_preview_ui.h
+++ b/chrome/browser/ui/webui/print_preview/print_preview_ui.h
@@ -151,11 +151,13 @@ class PrintPreviewUI : public ConstrainedWebDialogUI {
// also instructs the dialog to auto-cancel, which is used for testing only.
class TestingDelegate {
public:
- virtual void PreviewIsReady() = 0;
virtual bool IsAutoCancelEnabled() = 0;
+ virtual void DidGetPreviewPageCount(int page_count) = 0;
+ virtual void DidRenderPreviewPage(
+ const content::WebContents& preview_dialog) = 0;
};
- static void SetTestingDelegate(TestingDelegate* delegate);
+ static void SetDelegateForTesting(TestingDelegate* delegate);
private:
friend class PrintPreviewHandlerTest;
diff --git a/chrome/test/data/extensions/platform_apps/print_api/test.js b/chrome/test/data/extensions/platform_apps/print_api/test.js
index b041f16..8e9966e 100644
--- a/chrome/test/data/extensions/platform_apps/print_api/test.js
+++ b/chrome/test/data/extensions/platform_apps/print_api/test.js
@@ -4,7 +4,8 @@
chrome.app.runtime.onLaunched.addListener(function() {
chrome.test.getConfig(function(config) {
- chrome.app.window.create('test.html', {}, function(appWindow) {
+ var options = {bounds: {width: 200, height: 100}};
+ chrome.app.window.create('test.html', options, function(appWindow) {
appWindow.contentWindow.onload = function() {
appWindow.contentWindow.print();
chrome.test.notifyPass();