diff options
author | kmadhusu@chromium.org <kmadhusu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-15 21:05:42 +0000 |
---|---|---|
committer | kmadhusu@chromium.org <kmadhusu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-15 21:05:42 +0000 |
commit | afbdd164e2cc5babc0fc8b8574c5b95d4a818b78 (patch) | |
tree | 215f033fc2c1895041097ae28af75c9a1fd17605 | |
parent | e76a3631b7ea17e6514f6d5a13ebafb423b6c199 (diff) | |
download | chromium_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.cc | 10 | ||||
-rw-r--r-- | chrome/renderer/mock_printer.h | 4 | ||||
-rw-r--r-- | chrome/renderer/print_web_view_helper.cc | 15 | ||||
-rw-r--r-- | chrome/renderer/print_web_view_helper_browsertest.cc | 40 |
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); |