diff options
author | dpapad@chromium.org <dpapad@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-10 18:38:30 +0000 |
---|---|---|
committer | dpapad@chromium.org <dpapad@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-10 18:38:30 +0000 |
commit | b2d78470385b9131dd387183ce300fdaeb303cb5 (patch) | |
tree | 1bfca4014504a8767293632ad3120962e8eab5a8 | |
parent | 78cfe42bd82ac58273e059087f210dbbfa011b98 (diff) | |
download | chromium_src-b2d78470385b9131dd387183ce300fdaeb303cb5.zip chromium_src-b2d78470385b9131dd387183ce300fdaeb303cb5.tar.gz chromium_src-b2d78470385b9131dd387183ce300fdaeb303cb5.tar.bz2 |
Print Preview: Refactoring sticky settings code.
Placing all stored settings in a separate class (and also moving some logic).
BUG=NONE
TEST=Sticky settings behavior should be unaffected.
Review URL: http://codereview.chromium.org/9347008
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@121479 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | base/gtest_prod_util.h | 46 | ||||
-rw-r--r-- | chrome/browser/printing/print_system_task_proxy.cc | 28 | ||||
-rw-r--r-- | chrome/browser/ui/webui/print_preview/print_preview_handler.cc | 86 | ||||
-rw-r--r-- | chrome/browser/ui/webui/print_preview/print_preview_handler.h | 14 | ||||
-rw-r--r-- | chrome/browser/ui/webui/print_preview/print_preview_handler_unittest.cc | 75 | ||||
-rw-r--r-- | chrome/browser/ui/webui/print_preview/sticky_settings.cc | 96 | ||||
-rw-r--r-- | chrome/browser/ui/webui/print_preview/sticky_settings.h | 87 | ||||
-rw-r--r-- | chrome/chrome_browser.gypi | 2 |
8 files changed, 318 insertions, 116 deletions
diff --git a/base/gtest_prod_util.h b/base/gtest_prod_util.h index a54235a..2db5853 100644 --- a/base/gtest_prod_util.h +++ b/base/gtest_prod_util.h @@ -1,4 +1,4 @@ -// Copyright (c) 2010 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. @@ -25,4 +25,48 @@ FRIEND_TEST(test_case_name, FLAKY_##test_name); \ FRIEND_TEST(test_case_name, FAILS_##test_name) +// C++ compilers will refuse to compile the following code: +// +// namespace foo { +// class MyClass { +// private: +// FRIEND_TEST_ALL_PREFIXES(MyClassTest, TestMethod); +// bool private_var; +// }; +// } // namespace foo +// +// class MyClassTest::TestMethod() { +// foo::MyClass foo_class; +// foo_class.private_var = true; +// } +// +// Unless you forward declare MyClassTest::TestMethod outside of namespace foo. +// Use FORWARD_DECLARE_TEST_ALL_PREFIXES to do so for all possible prefixes. +// +// Example usage: +// +// FORWARD_DECLARE_TEST_ALL_PREFIXES(MyClassTest, TestMethod); +// +// namespace foo { +// class MyClass { +// private: +// FRIEND_TEST_ALL_PREFIXES(::MyClassTest, TestMethod); // NOTE use of :: +// bool private_var; +// }; +// } // namespace foo +// +// class MyClassTest::TestMethod() { +// foo::MyClass foo_class; +// foo_class.private_var = true; +// } + +#define FORWARD_DECLARE_TEST(test_case_name, test_name) \ +class test_case_name##_##test_name##_Test\ + +#define FORWARD_DECLARE_TEST_ALL_PREFIXES(test_case_name, test_name) \ + FORWARD_DECLARE_TEST(test_case_name, test_name); \ + FORWARD_DECLARE_TEST(test_case_name, DISABLED_##test_name); \ + FORWARD_DECLARE_TEST(test_case_name, FLAKY_##test_name); \ + FORWARD_DECLARE_TEST(test_case_name, FAILS_##test_name) + #endif // BASE_GTEST_PROD_UTIL_H_ diff --git a/chrome/browser/printing/print_system_task_proxy.cc b/chrome/browser/printing/print_system_task_proxy.cc index 99baaf8..7386a6c 100644 --- a/chrome/browser/printing/print_system_task_proxy.cc +++ b/chrome/browser/printing/print_system_task_proxy.cc @@ -15,6 +15,7 @@ #include "base/string_util.h" #include "base/values.h" #include "chrome/browser/ui/webui/print_preview/print_preview_handler.h" +#include "chrome/browser/ui/webui/print_preview/sticky_settings.h" #include "printing/backend/print_backend.h" #include "printing/print_job_constants.h" #include "printing/print_settings.h" @@ -323,20 +324,22 @@ PrintSystemTaskProxy::~PrintSystemTaskProxy() { void PrintSystemTaskProxy::GetDefaultPrinter() { VLOG(1) << "Get default printer start"; + printing::StickySettings* sticky_settings = + PrintPreviewHandler::GetStickySettings(); + std::string* default_printer = NULL; - if (PrintPreviewHandler::last_used_printer_name_ == NULL) { + if (sticky_settings->printer_name() == NULL) default_printer = new std::string(print_backend_->GetDefaultPrinterName()); - } else { - default_printer = new std::string( - *PrintPreviewHandler::last_used_printer_name_); - } + else + default_printer = new std::string(*sticky_settings->printer_name()); + VLOG(1) << "Get default printer finished, found: " << *default_printer; std::string* cloud_print_data = NULL; - if (PrintPreviewHandler::last_used_printer_cloud_print_data_ != NULL) { - cloud_print_data = new std::string( - *PrintPreviewHandler::last_used_printer_cloud_print_data_); + if (sticky_settings->printer_cloud_print_data() != NULL) { + cloud_print_data = + new std::string(*sticky_settings->printer_cloud_print_data()); } else { cloud_print_data = new std::string; } @@ -561,13 +564,14 @@ void PrintSystemTaskProxy::GetPrinterCapabilities( printer_color_space_for_black = printing::GRAY; if (disable_color_options || - PrintPreviewHandler::last_used_color_model_ == + PrintPreviewHandler::GetStickySettings()->color_model() == printing::UNKNOWN_COLOR_MODEL) { settings_info.SetBoolean(kSetColorAsDefault, set_color_as_default); } else { - settings_info.SetBoolean(kSetColorAsDefault, - printing::isColorModelSelected( - PrintPreviewHandler::last_used_color_model_)); + settings_info.SetBoolean( + kSetColorAsDefault, + printing::isColorModelSelected( + PrintPreviewHandler::GetStickySettings()->color_model())); } settings_info.SetBoolean(kSetDuplexAsDefault, set_duplex_as_default); 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 9b287f5..afa934f 100644 --- a/chrome/browser/ui/webui/print_preview/print_preview_handler.cc +++ b/chrome/browser/ui/webui/print_preview/print_preview_handler.cc @@ -15,6 +15,7 @@ #include "base/i18n/file_util_icu.h" #include "base/i18n/number_formatting.h" #include "base/json/json_reader.h" +#include "base/lazy_instance.h" #include "base/memory/ref_counted_memory.h" #include "base/metrics/histogram.h" #include "base/path_service.h" @@ -36,6 +37,7 @@ #include "chrome/browser/ui/browser_list.h" #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" #include "chrome/browser/ui/webui/print_preview/print_preview_ui.h" +#include "chrome/browser/ui/webui/print_preview/sticky_settings.h" #include "chrome/common/chrome_paths.h" #include "chrome/common/pref_names.h" #include "chrome/common/print_messages.h" @@ -193,19 +195,15 @@ void PrintToPdfCallback(Metafile* metafile, const FilePath& path) { base::Bind(&base::DeletePointer<Metafile>, metafile)); } +static base::LazyInstance<printing::StickySettings> sticky_settings = + LAZY_INSTANCE_INITIALIZER; + } // namespace // static -FilePath* PrintPreviewHandler::last_saved_path_ = NULL; -std::string* PrintPreviewHandler::last_used_printer_cloud_print_data_ = NULL; -std::string* PrintPreviewHandler::last_used_printer_name_ = NULL; -printing::ColorModels PrintPreviewHandler::last_used_color_model_ = - printing::UNKNOWN_COLOR_MODEL; -printing::MarginType PrintPreviewHandler::last_used_margins_type_ = - printing::DEFAULT_MARGINS; -printing::PageSizeMargins* - PrintPreviewHandler::last_used_page_size_margins_ = NULL; -bool PrintPreviewHandler::last_used_headers_footers_ = true; +printing::StickySettings* PrintPreviewHandler::GetStickySettings() { + return sticky_settings.Pointer(); +} PrintPreviewHandler::PrintPreviewHandler() : print_backend_(printing::PrintBackend::CreateInstance(NULL)), @@ -374,27 +372,15 @@ void PrintPreviewHandler::HandlePrint(const ListValue* args) { return; // Storing last used color model. - int color_model; - if (!settings->GetInteger(printing::kSettingColor, &color_model)) - color_model = printing::GRAY; - last_used_color_model_ = static_cast<printing::ColorModels>(color_model); + GetStickySettings()->StoreColorModel(*settings); bool is_modifiable; settings->GetBoolean(printing::kSettingPreviewModifiable, &is_modifiable); if (is_modifiable) { // Storing last used margin settings. - int margin_type; - if (!settings->GetInteger(printing::kSettingMarginsType, &margin_type)) - margin_type = printing::DEFAULT_MARGINS; - last_used_margins_type_ = static_cast<printing::MarginType>(margin_type); - if (last_used_margins_type_ == printing::CUSTOM_MARGINS) { - if (!last_used_page_size_margins_) - last_used_page_size_margins_ = new printing::PageSizeMargins(); - GetCustomMarginsFromJobSettings(*settings, last_used_page_size_margins_); - } + GetStickySettings()->StoreMarginSettings(*settings); // Storing last used header and footer setting. - settings->GetBoolean( - printing::kSettingHeaderFooterEnabled, &last_used_headers_footers_); + GetStickySettings()->StoreHeadersFooters(*settings); } // Never try to add headers/footers here. It's already in the generated PDF. @@ -513,16 +499,11 @@ void PrintPreviewHandler::HandleCancelPendingPrintRequest( void PrintPreviewHandler::HandleSaveLastPrinter(const ListValue* args) { std::string data_to_save; - if (args->GetString(0, &data_to_save) && !data_to_save.empty()) { - if (last_used_printer_name_ == NULL) - last_used_printer_name_ = new std::string(); - *last_used_printer_name_ = data_to_save; - } - if (args->GetString(1, &data_to_save) && !data_to_save.empty()) { - if (last_used_printer_cloud_print_data_ == NULL) - last_used_printer_cloud_print_data_ = new std::string(); - *last_used_printer_cloud_print_data_ = data_to_save; - } + if (args->GetString(0, &data_to_save) && !data_to_save.empty()) + GetStickySettings()->StorePrinterName(data_to_save); + + if (args->GetString(1, &data_to_save) && !data_to_save.empty()) + GetStickySettings()->StoreCloudPrintData(data_to_save); } void PrintPreviewHandler::HandleGetPrinterCapabilities(const ListValue* args) { @@ -649,22 +630,6 @@ void PrintPreviewHandler::GetNumberFormatAndMeasurementSystem( settings->SetInteger(kMeasurementSystem, system); } -void PrintPreviewHandler::GetLastUsedMarginSettings( - base::DictionaryValue* custom_margins) { - custom_margins->SetInteger(printing::kSettingMarginsType, - PrintPreviewHandler::last_used_margins_type_); - if (last_used_page_size_margins_) { - custom_margins->SetDouble(printing::kSettingMarginTop, - last_used_page_size_margins_->margin_top); - custom_margins->SetDouble(printing::kSettingMarginBottom, - last_used_page_size_margins_->margin_bottom); - custom_margins->SetDouble(printing::kSettingMarginLeft, - last_used_page_size_margins_->margin_left); - custom_margins->SetDouble(printing::kSettingMarginRight, - last_used_page_size_margins_->margin_right); - } -} - void PrintPreviewHandler::HandleGetInitialSettings(const ListValue* /*args*/) { scoped_refptr<PrintSystemTaskProxy> task = new PrintSystemTaskProxy(AsWeakPtr(), @@ -690,7 +655,7 @@ void PrintPreviewHandler::SendInitialSettings( default_printer); initial_settings.SetString(kCloudPrintData, cloud_print_data); initial_settings.SetBoolean(printing::kSettingHeaderFooterEnabled, - last_used_headers_footers_); + GetStickySettings()->headers_footers()); #if defined(OS_MACOSX) @@ -703,7 +668,7 @@ void PrintPreviewHandler::SendInitialSettings( initial_settings.SetBoolean(kPrintAutomaticallyInKioskMode, kiosk_mode); if (print_preview_ui->source_is_modifiable()) { - GetLastUsedMarginSettings(&initial_settings); + GetStickySettings()->GetLastUsedMarginSettings(&initial_settings); GetNumberFormatAndMeasurementSystem(&initial_settings); } web_ui()->CallJavascriptFunction("setInitialSettings", initial_settings); @@ -817,14 +782,15 @@ void PrintPreviewHandler::SelectFile(const FilePath& default_filename) { file_type_info.extensions.resize(1); file_type_info.extensions[0].push_back(FILE_PATH_LITERAL("pdf")); - // Initializing last_saved_path_ if it is not already initialized. - if (!last_saved_path_) { - last_saved_path_ = new FilePath(); + // Initializing save_path_ if it is not already initialized. + if (!GetStickySettings()->save_path()) { // Allowing IO operation temporarily. It is ok to do so here because // the select file dialog performs IO anyway in order to display the // folders and also it is modal. base::ThreadRestrictions::ScopedAllowIO allow_io; - PathService::Get(chrome::DIR_USER_DOCUMENTS, last_saved_path_); + FilePath file_path; + PathService::Get(chrome::DIR_USER_DOCUMENTS, &file_path); + GetStickySettings()->StoreSavePath(file_path); } if (!select_file_dialog_.get()) @@ -833,7 +799,7 @@ void PrintPreviewHandler::SelectFile(const FilePath& default_filename) { select_file_dialog_->SelectFile( SelectFileDialog::SELECT_SAVEAS_FILE, string16(), - last_saved_path_->Append(default_filename), + GetStickySettings()->save_path()->Append(default_filename), &file_type_info, 0, FILE_PATH_LITERAL(""), @@ -863,8 +829,8 @@ void PrintPreviewHandler::ShowSystemDialog() { void PrintPreviewHandler::FileSelected(const FilePath& path, int index, void* params) { - // Updating |last_saved_path_| to the newly selected folder. - *last_saved_path_ = path.DirName(); + // Updating |save_path_| to the newly selected folder. + GetStickySettings()->StoreSavePath(path.DirName()); PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>( web_ui()->GetController()); diff --git a/chrome/browser/ui/webui/print_preview/print_preview_handler.h b/chrome/browser/ui/webui/print_preview/print_preview_handler.h index fcdcbc4..7c41519 100644 --- a/chrome/browser/ui/webui/print_preview/print_preview_handler.h +++ b/chrome/browser/ui/webui/print_preview/print_preview_handler.h @@ -31,6 +31,7 @@ class StringValue; namespace printing { struct PageSizeMargins; class PrintBackend; +class StickySettings; } // The handler for Javascript messages related to the print preview dialog. @@ -181,10 +182,7 @@ class PrintPreviewHandler : public content::WebUIMessageHandler, // Populates |settings| according to the current locale. void GetNumberFormatAndMeasurementSystem(base::DictionaryValue* settings); - // Populates |last_used_custom_margins| according to the last used margin - // settings. - void GetLastUsedMarginSettings( - base::DictionaryValue* last_used_custom_margins); + static printing::StickySettings* GetStickySettings(); // Pointer to current print system. scoped_refptr<printing::PrintBackend> print_backend_; @@ -192,14 +190,6 @@ class PrintPreviewHandler : public content::WebUIMessageHandler, // The underlying dialog object. scoped_refptr<SelectFileDialog> select_file_dialog_; - static FilePath* last_saved_path_; - static std::string* last_used_printer_cloud_print_data_; - static std::string* last_used_printer_name_; - static printing::ColorModels last_used_color_model_; - static printing::MarginType last_used_margins_type_; - static printing::PageSizeMargins* last_used_page_size_margins_; - static bool last_used_headers_footers_; - // A count of how many requests received to regenerate preview data. // Initialized to 0 then incremented and emitted to a histogram. int regenerate_preview_request_count_; diff --git a/chrome/browser/ui/webui/print_preview/print_preview_handler_unittest.cc b/chrome/browser/ui/webui/print_preview/print_preview_handler_unittest.cc index e3ebaf3..e300d45 100644 --- a/chrome/browser/ui/webui/print_preview/print_preview_handler_unittest.cc +++ b/chrome/browser/ui/webui/print_preview/print_preview_handler_unittest.cc @@ -13,6 +13,7 @@ #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" #include "chrome/browser/ui/webui/print_preview/print_preview_handler.h" #include "chrome/browser/ui/webui/print_preview/print_preview_ui.h" +#include "chrome/browser/ui/webui/print_preview/sticky_settings.h" #include "content/public/browser/web_contents.h" #include "printing/page_size_margins.h" #include "printing/print_job_constants.h" @@ -88,14 +89,34 @@ class PrintPreviewHandlerTest : public PrintPreviewUnitTestBase { const double margin_right, const double margin_bottom, const double margin_left) { - EXPECT_EQ(PrintPreviewHandler::last_used_page_size_margins_->margin_top, - margin_top); - EXPECT_EQ(PrintPreviewHandler::last_used_page_size_margins_->margin_right, - margin_right); - EXPECT_EQ(PrintPreviewHandler::last_used_page_size_margins_->margin_bottom, - margin_bottom); - EXPECT_EQ(PrintPreviewHandler::last_used_page_size_margins_->margin_left, - margin_left); + printing::PageSizeMargins* margins = + PrintPreviewHandler::GetStickySettings()-> + page_size_margins_.get(); + EXPECT_EQ(margin_top, margins->margin_top); + EXPECT_EQ(margin_right, margins->margin_right); + EXPECT_EQ(margin_bottom, margins->margin_bottom); + EXPECT_EQ(margin_left, margins->margin_left); + } + + // Checking that sticky settings were saved according to expectations. + void CheckStickySettings(printing::ColorModels color_model, + printing::MarginType margin_type, + bool margins_saved, + const double margin_top, + const double margin_right, + const double margin_bottom, + const double margin_left) { + printing::StickySettings* sticky_settings = + PrintPreviewHandler::GetStickySettings(); + EXPECT_EQ(color_model, sticky_settings->color_model()); + EXPECT_EQ(margin_type, sticky_settings->margins_type_); + + if (margins_saved) { + ASSERT_TRUE(sticky_settings->page_size_margins_.get()); + CheckCustomMargins(margin_top, margin_right, margin_bottom, margin_left); + } else { + ASSERT_FALSE(sticky_settings->page_size_margins_.get()); + } } void RequestPrintWithDefaultMargins() { @@ -144,9 +165,9 @@ class PrintPreviewHandlerTest : public PrintPreviewUnitTestBase { private: void ClearStickySettings() { - PrintPreviewHandler::last_used_margins_type_ = printing::DEFAULT_MARGINS; - delete PrintPreviewHandler::last_used_page_size_margins_; - PrintPreviewHandler::last_used_page_size_margins_ = NULL; + PrintPreviewHandler::GetStickySettings()->margins_type_ = + printing::DEFAULT_MARGINS; + PrintPreviewHandler::GetStickySettings()->page_size_margins_.reset(); } TabContentsWrapper* preview_tab_; @@ -164,11 +185,8 @@ TEST_F(PrintPreviewHandlerTest, StickyMarginsCustom) { EXPECT_EQ(1, browser()->tab_count()); // Checking that sticky settings were saved correctly. - EXPECT_EQ(PrintPreviewHandler::last_used_color_model_, printing::COLOR); - EXPECT_EQ(PrintPreviewHandler::last_used_margins_type_, - printing::CUSTOM_MARGINS); - ASSERT_TRUE(PrintPreviewHandler::last_used_page_size_margins_); - CheckCustomMargins(kMarginTop, kMarginRight, kMarginBottom, kMarginLeft); + CheckStickySettings(printing::COLOR, printing::CUSTOM_MARGINS, true, + kMarginTop, kMarginRight, kMarginBottom, kMarginLeft); } // Tests that margin settings are saved correctly when printing with default @@ -178,10 +196,8 @@ TEST_F(PrintPreviewHandlerTest, StickyMarginsDefault) { EXPECT_EQ(1, browser()->tab_count()); // Checking that sticky settings were saved correctly. - EXPECT_EQ(PrintPreviewHandler::last_used_color_model_, printing::COLOR); - EXPECT_EQ(PrintPreviewHandler::last_used_margins_type_, - printing::DEFAULT_MARGINS); - ASSERT_FALSE(PrintPreviewHandler::last_used_page_size_margins_); + CheckStickySettings( + printing::COLOR, printing::DEFAULT_MARGINS, false, 0, 0, 0, 0); } // Tests that margin settings are saved correctly when printing with custom @@ -195,20 +211,15 @@ TEST_F(PrintPreviewHandlerTest, StickyMarginsCustomThenDefault) { kMarginTop, kMarginRight, kMarginBottom, kMarginLeft); EXPECT_EQ(1, browser()->tab_count()); DeletePrintPreviewTab(); - EXPECT_EQ(PrintPreviewHandler::last_used_margins_type_, - printing::CUSTOM_MARGINS); - ASSERT_TRUE(PrintPreviewHandler::last_used_page_size_margins_); - CheckCustomMargins(kMarginTop, kMarginRight, kMarginBottom, kMarginLeft); + CheckStickySettings(printing::COLOR, printing::CUSTOM_MARGINS, true, + kMarginTop, kMarginRight, kMarginBottom, kMarginLeft); OpenPrintPreviewTab(); RequestPrintWithDefaultMargins(); // Checking that sticky settings were saved correctly. - EXPECT_EQ(PrintPreviewHandler::last_used_color_model_, printing::COLOR); - EXPECT_EQ(PrintPreviewHandler::last_used_margins_type_, - printing::DEFAULT_MARGINS); - ASSERT_TRUE(PrintPreviewHandler::last_used_page_size_margins_); - CheckCustomMargins(kMarginTop, kMarginRight, kMarginBottom, kMarginLeft); + CheckStickySettings(printing::COLOR, printing::DEFAULT_MARGINS, true, + kMarginTop, kMarginRight, kMarginBottom, kMarginLeft); } // Tests that margin settings are retrieved correctly after printing with custom @@ -221,7 +232,8 @@ TEST_F(PrintPreviewHandlerTest, GetLastUsedMarginSettingsCustom) { RequestPrintWithCustomMargins( kMarginTop, kMarginRight, kMarginBottom, kMarginLeft); base::DictionaryValue initial_settings; - preview_ui_->handler_->GetLastUsedMarginSettings(&initial_settings); + PrintPreviewHandler::GetStickySettings()-> + GetLastUsedMarginSettings(&initial_settings); int margins_type; EXPECT_TRUE(initial_settings.GetInteger(printing::kSettingMarginsType, &margins_type)); @@ -246,7 +258,8 @@ TEST_F(PrintPreviewHandlerTest, GetLastUsedMarginSettingsCustom) { TEST_F(PrintPreviewHandlerTest, GetLastUsedMarginSettingsDefault) { RequestPrintWithDefaultMargins(); base::DictionaryValue initial_settings; - preview_ui_->handler_->GetLastUsedMarginSettings(&initial_settings); + PrintPreviewHandler::GetStickySettings()-> + GetLastUsedMarginSettings(&initial_settings); int margins_type; EXPECT_TRUE(initial_settings.GetInteger(printing::kSettingMarginsType, &margins_type)); diff --git a/chrome/browser/ui/webui/print_preview/sticky_settings.cc b/chrome/browser/ui/webui/print_preview/sticky_settings.cc new file mode 100644 index 0000000..4a4a3a0 --- /dev/null +++ b/chrome/browser/ui/webui/print_preview/sticky_settings.cc @@ -0,0 +1,96 @@ +// 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 "chrome/browser/ui/webui/print_preview/sticky_settings.h" + +#include "base/file_path.h" +#include "base/values.h" +#include "printing/page_size_margins.h" + +namespace printing { + +StickySettings::StickySettings() + : color_model_(printing::UNKNOWN_COLOR_MODEL), + margins_type_(printing::DEFAULT_MARGINS), + headers_footers_(true) {} + +StickySettings::~StickySettings() {} + +void StickySettings::GetLastUsedMarginSettings( + base::DictionaryValue* custom_margins) const { + custom_margins->SetInteger(printing::kSettingMarginsType, + margins_type_); + if (page_size_margins_.get()) { + custom_margins->SetDouble(printing::kSettingMarginTop, + page_size_margins_->margin_top); + custom_margins->SetDouble(printing::kSettingMarginBottom, + page_size_margins_->margin_bottom); + custom_margins->SetDouble(printing::kSettingMarginLeft, + page_size_margins_->margin_left); + custom_margins->SetDouble(printing::kSettingMarginRight, + page_size_margins_->margin_right); + } +} + +void StickySettings::StoreColorModel( + const base::DictionaryValue& settings) { + int color_model; + if (!settings.GetInteger(printing::kSettingColor, &color_model)) + color_model = printing::GRAY; + color_model_ = static_cast<printing::ColorModels>(color_model); +} + +void StickySettings::StoreMarginSettings( + const base::DictionaryValue& settings) { + int margin_type; + if (!settings.GetInteger(printing::kSettingMarginsType, &margin_type)) + margin_type = printing::DEFAULT_MARGINS; + margins_type_ = static_cast<printing::MarginType>(margin_type); + if (margins_type_ == printing::CUSTOM_MARGINS) { + if (!page_size_margins_.get()) + page_size_margins_.reset(new printing::PageSizeMargins()); + GetCustomMarginsFromJobSettings( + settings, page_size_margins_.get()); + } +} + +void StickySettings::StoreHeadersFooters( + const base::DictionaryValue& settings) { + settings.GetBoolean( + printing::kSettingHeaderFooterEnabled, &headers_footers_); +} + +void StickySettings::StorePrinterName(const std::string& printer_name) { + printer_name_.reset(new std::string(printer_name)); +} + +void StickySettings::StoreCloudPrintData(const std::string& data) { + printer_cloud_print_data_.reset(new std::string(data)); +} + +void StickySettings::StoreSavePath(const FilePath& path) { + save_path_.reset(new FilePath(path)); +} + +std::string* StickySettings::printer_name() { + return printer_name_.get(); +} + +std::string* StickySettings::printer_cloud_print_data() { + return printer_cloud_print_data_.get(); +} + +printing::ColorModels StickySettings::color_model() const { + return color_model_; +} + +bool StickySettings::headers_footers() const { + return headers_footers_; +} + +FilePath* StickySettings::save_path() { + return save_path_.get(); +} + +} // namespace printing diff --git a/chrome/browser/ui/webui/print_preview/sticky_settings.h b/chrome/browser/ui/webui/print_preview/sticky_settings.h new file mode 100644 index 0000000..4e9c44b --- /dev/null +++ b/chrome/browser/ui/webui/print_preview/sticky_settings.h @@ -0,0 +1,87 @@ +// 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. + +#ifndef CHROME_BROWSER_UI_WEBUI_PRINT_PREVIEW_STICKY_SETTINGS_H_ +#define CHROME_BROWSER_UI_WEBUI_PRINT_PREVIEW_STICKY_SETTINGS_H_ + +#include "printing/print_job_constants.h" + +#include <string> + +#include "base/gtest_prod_util.h" +#include "base/memory/scoped_ptr.h" + +class FilePath; +class PrintPreviewHandlerTest; + +namespace base { +class DictionaryValue; +} + +namespace printing { +struct PageSizeMargins; +} + +FORWARD_DECLARE_TEST_ALL_PREFIXES(PrintPreviewHandlerTest, StickyMarginsCustom); +FORWARD_DECLARE_TEST_ALL_PREFIXES(PrintPreviewHandlerTest, + StickyMarginsDefault); +FORWARD_DECLARE_TEST_ALL_PREFIXES(PrintPreviewHandlerTest, + StickyMarginsCustomThenDefault); +FORWARD_DECLARE_TEST_ALL_PREFIXES(PrintPreviewHandlerTest, + GetLastUsedMarginSettingsCustom); +FORWARD_DECLARE_TEST_ALL_PREFIXES(PrintPreviewHandlerTest, + GetLastUsedMarginSettingsDefault); + +namespace printing { + +// Holds all the settings that should be remembered (sticky) in print preview. +// A sticky setting will be restored next time the user launches print preview. +// Only one instance of this class is instantiated. +class StickySettings { + public: + StickySettings(); + ~StickySettings(); + + // Populates |last_used_custom_margins| according to the last used margin + // settings. + void GetLastUsedMarginSettings( + base::DictionaryValue* last_used_custom_margins) const; + + std::string* printer_name(); + std::string* printer_cloud_print_data(); + printing::ColorModels color_model() const; + bool headers_footers() const; + FilePath* save_path(); + + // Methods for storing settings. + void StoreColorModel(const base::DictionaryValue& settings); + void StoreMarginSettings(const base::DictionaryValue& settings); + void StoreHeadersFooters(const base::DictionaryValue& settings); + void StorePrinterName(const std::string& printer_name); + void StoreCloudPrintData(const std::string& cloud_print_data); + void StoreSavePath(const FilePath& path); + + private: + scoped_ptr<FilePath> save_path_; + scoped_ptr<std::string> printer_name_; + scoped_ptr<std::string> printer_cloud_print_data_; + printing::ColorModels color_model_; + printing::MarginType margins_type_; + scoped_ptr<printing::PageSizeMargins> page_size_margins_; + bool headers_footers_; + + friend class ::PrintPreviewHandlerTest; + FRIEND_TEST_ALL_PREFIXES(::PrintPreviewHandlerTest, StickyMarginsCustom); + FRIEND_TEST_ALL_PREFIXES(::PrintPreviewHandlerTest, StickyMarginsDefault); + FRIEND_TEST_ALL_PREFIXES(::PrintPreviewHandlerTest, + StickyMarginsCustomThenDefault); + FRIEND_TEST_ALL_PREFIXES(::PrintPreviewHandlerTest, + GetLastUsedMarginSettingsCustom); + FRIEND_TEST_ALL_PREFIXES(::PrintPreviewHandlerTest, + GetLastUsedMarginSettingsDefault); +}; + +} // namespace printing + +#endif // CHROME_BROWSER_UI_WEBUI_PRINT_PREVIEW_STICKY_SETTINGS_H_ diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi index fb11f29..4818167 100644 --- a/chrome/chrome_browser.gypi +++ b/chrome/chrome_browser.gypi @@ -4129,6 +4129,8 @@ 'browser/ui/webui/print_preview/print_preview_handler.h', 'browser/ui/webui/print_preview/print_preview_ui.cc', 'browser/ui/webui/print_preview/print_preview_ui.h', + 'browser/ui/webui/print_preview/sticky_settings.cc', + 'browser/ui/webui/print_preview/sticky_settings.h', 'browser/ui/webui/profiler_ui.cc', 'browser/ui/webui/profiler_ui.h', 'browser/ui/webui/quota_internals_handler.cc', |