summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkmadhusu@chromium.org <kmadhusu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-15 21:05:42 +0000
committerkmadhusu@chromium.org <kmadhusu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-15 21:05:42 +0000
commitafbdd164e2cc5babc0fc8b8574c5b95d4a818b78 (patch)
tree215f033fc2c1895041097ae28af75c9a1fd17605
parente76a3631b7ea17e6514f6d5a13ebafb423b6c199 (diff)
downloadchromium_src-afbdd164e2cc5babc0fc8b8574c5b95d4a818b78.zip
chromium_src-afbdd164e2cc5babc0fc8b8574c5b95d4a818b78.tar.gz
chromium_src-afbdd164e2cc5babc0fc8b8574c5b95d4a818b78.tar.bz2
PrintPreview: Modify PrintMsg_Print_Params data validation check.
BUG=117323 TEST=None Review URL: http://codereview.chromium.org/9677034 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@126991 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/renderer/mock_printer.cc10
-rw-r--r--chrome/renderer/mock_printer.h4
-rw-r--r--chrome/renderer/print_web_view_helper.cc15
-rw-r--r--chrome/renderer/print_web_view_helper_browsertest.cc40
4 files changed, 59 insertions, 10 deletions
diff --git a/chrome/renderer/mock_printer.cc b/chrome/renderer/mock_printer.cc
index 8546d61..949e588 100644
--- a/chrome/renderer/mock_printer.cc
+++ b/chrome/renderer/mock_printer.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// 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.
@@ -123,6 +123,14 @@ void MockPrinter::UseInvalidSettings() {
SetDefaultPrintSettings(empty_param);
}
+void MockPrinter::UseInvalidPageSize() {
+ page_size_.SetSize(0, 0);
+}
+
+void MockPrinter::UseInvalidContentSize() {
+ content_size_.SetSize(0, 0);
+}
+
void MockPrinter::ScriptedPrint(int cookie,
int expected_pages_count,
bool has_selection,
diff --git a/chrome/renderer/mock_printer.h b/chrome/renderer/mock_printer.h
index 75e151f..255dbd8 100644
--- a/chrome/renderer/mock_printer.h
+++ b/chrome/renderer/mock_printer.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// 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.
@@ -71,6 +71,8 @@ class MockPrinter {
void ResetPrinter();
void SetDefaultPrintSettings(const PrintMsg_Print_Params& params);
void UseInvalidSettings();
+ void UseInvalidPageSize();
+ void UseInvalidContentSize();
// Functions that handles IPC events.
void GetDefaultPrintSettings(PrintMsg_Print_Params* params);
diff --git a/chrome/renderer/print_web_view_helper.cc b/chrome/renderer/print_web_view_helper.cc
index eca957e..5352be3 100644
--- a/chrome/renderer/print_web_view_helper.cc
+++ b/chrome/renderer/print_web_view_helper.cc
@@ -98,12 +98,11 @@ int GetDPI(const PrintMsg_Print_Params* print_params) {
#endif // defined(OS_MACOSX)
}
-bool PrintMsg_Print_Params_IsEmpty(const PrintMsg_Print_Params& params) {
- return !params.document_cookie && !params.desired_dpi && !params.max_shrink &&
- !params.min_shrink && !params.dpi && params.content_size.IsEmpty() &&
- !params.selection_only && params.page_size.IsEmpty() &&
- !params.margin_top && !params.margin_left &&
- !params.supports_alpha_blend;
+bool PrintMsg_Print_Params_IsValid(const PrintMsg_Print_Params& params) {
+ return !params.content_size.IsEmpty() && !params.page_size.IsEmpty() &&
+ !params.printable_area.IsEmpty() && params.document_cookie &&
+ params.desired_dpi && params.max_shrink && params.min_shrink &&
+ params.dpi && (params.margin_top >= 0) && (params.margin_left >= 0);
}
bool PageLayoutIsEqual(const PrintMsg_PrintPages_Params& oldParams,
@@ -1194,7 +1193,7 @@ bool PrintWebViewHelper::InitPrintSettings() {
// can safely assume there are no printer drivers configured. So we safely
// terminate.
bool result = true;
- if (PrintMsg_Print_Params_IsEmpty(settings.params))
+ if (!PrintMsg_Print_Params_IsValid(settings.params))
result = false;
if (result &&
@@ -1294,7 +1293,7 @@ bool PrintWebViewHelper::UpdatePrintSettings(
cookie, *job_settings, &settings));
print_pages_params_.reset(new PrintMsg_PrintPages_Params(settings));
- if (PrintMsg_Print_Params_IsEmpty(settings.params)) {
+ if (!PrintMsg_Print_Params_IsValid(settings.params)) {
if (!print_for_preview) {
print_preview_context_.set_error(PREVIEW_ERROR_INVALID_PRINTER_SETTINGS);
} else {
diff --git a/chrome/renderer/print_web_view_helper_browsertest.cc b/chrome/renderer/print_web_view_helper_browsertest.cc
index ec66bb7..bc4f8a3 100644
--- a/chrome/renderer/print_web_view_helper_browsertest.cc
+++ b/chrome/renderer/print_web_view_helper_browsertest.cc
@@ -759,6 +759,46 @@ TEST_F(PrintWebViewHelperPreviewTest,
VerifyPrintPreviewGenerated(false);
}
+// Tests that when the selected printer has invalid page settings, print preview
+// receives error message.
+TEST_F(PrintWebViewHelperPreviewTest,
+ OnPrintPreviewUsingInvalidPageSize) {
+ LoadHTML(kPrintPreviewHTML);
+
+ chrome_render_thread_->printer()->UseInvalidPageSize();
+
+ DictionaryValue dict;
+ CreatePrintSettingsDictionary(&dict);
+ OnPrintPreview(dict);
+
+ VerifyPrintPreviewInvalidPrinterSettings(true);
+ EXPECT_EQ(0, chrome_render_thread_->print_preview_pages_remaining());
+
+ // It should receive the invalid printer settings message only.
+ VerifyPrintPreviewFailed(false);
+ VerifyPrintPreviewGenerated(false);
+}
+
+// Tests that when the selected printer has invalid content settings, print
+// preview receives error message.
+TEST_F(PrintWebViewHelperPreviewTest,
+ OnPrintPreviewUsingInvalidContentSize) {
+ LoadHTML(kPrintPreviewHTML);
+
+ chrome_render_thread_->printer()->UseInvalidContentSize();
+
+ DictionaryValue dict;
+ CreatePrintSettingsDictionary(&dict);
+ OnPrintPreview(dict);
+
+ VerifyPrintPreviewInvalidPrinterSettings(true);
+ EXPECT_EQ(0, chrome_render_thread_->print_preview_pages_remaining());
+
+ // It should receive the invalid printer settings message only.
+ VerifyPrintPreviewFailed(false);
+ VerifyPrintPreviewGenerated(false);
+}
+
TEST_F(PrintWebViewHelperPreviewTest,
OnPrintForPrintPreviewUsingInvalidPrinterSettings) {
LoadHTML(kPrintPreviewHTML);