Partial cleanup use of base::Value in printing backend.
Bug: 660612
Change-Id: I75404c19cf794abee8eff74e78005226139682b9
Reviewed-on: https://chromium-review.googlesource.com/c/1387467
Reviewed-by: Rebekah Potter <[email protected]>
Reviewed-by: Jan Wilken Dörrie <[email protected]>
Commit-Queue: Vladislav Kuzkokov <[email protected]>
Cr-Commit-Position: refs/heads/master@{#623194}
diff --git a/chrome/browser/printing/print_job_worker.cc b/chrome/browser/printing/print_job_worker.cc
index 1e2d43f..49f5881 100644
--- a/chrome/browser/printing/print_job_worker.cc
+++ b/chrome/browser/printing/print_job_worker.cc
@@ -211,8 +211,7 @@
}
}
-void PrintJobWorker::SetSettings(
- std::unique_ptr<base::DictionaryValue> new_settings) {
+void PrintJobWorker::SetSettings(base::Value new_settings) {
DCHECK(task_runner_->RunsTasksInCurrentSequence());
DCHECK(query_);
@@ -239,11 +238,10 @@
}
#endif
-void PrintJobWorker::UpdatePrintSettings(
- std::unique_ptr<base::DictionaryValue> new_settings) {
+void PrintJobWorker::UpdatePrintSettings(base::Value new_settings) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
PrintingContext::Result result =
- printing_context_->UpdatePrintSettings(*new_settings);
+ printing_context_->UpdatePrintSettings(std::move(new_settings));
GetSettingsDone(result);
}
diff --git a/chrome/browser/printing/print_job_worker.h b/chrome/browser/printing/print_job_worker.h
index 182f756..95341c40 100644
--- a/chrome/browser/printing/print_job_worker.h
+++ b/chrome/browser/printing/print_job_worker.h
@@ -11,6 +11,7 @@
#include "base/memory/ref_counted.h"
#include "base/memory/weak_ptr.h"
#include "base/threading/thread.h"
+#include "base/values.h"
#include "build/build_config.h"
#include "chrome/browser/printing/printer_query.h"
#include "content/public/browser/browser_thread.h"
@@ -18,10 +19,6 @@
#include "printing/print_job_constants.h"
#include "printing/printing_context.h"
-namespace base {
-class DictionaryValue;
-}
-
namespace printing {
class PrintJob;
@@ -57,7 +54,7 @@
bool is_modifiable);
// Set the new print settings from a dictionary value.
- void SetSettings(std::unique_ptr<base::DictionaryValue> new_settings);
+ void SetSettings(base::Value new_settings);
#if defined(OS_CHROMEOS)
// Set the new print settings from a POD type.
@@ -139,7 +136,7 @@
bool is_scripted);
// Called on the UI thread to update the print settings.
- void UpdatePrintSettings(std::unique_ptr<base::DictionaryValue> new_settings);
+ void UpdatePrintSettings(base::Value new_settings);
#if defined(OS_CHROMEOS)
// Called on the UI thread to update the print settings.
diff --git a/chrome/browser/printing/print_view_manager_base.cc b/chrome/browser/printing/print_view_manager_base.cc
index 620c890..73419c0 100644
--- a/chrome/browser/printing/print_view_manager_base.cc
+++ b/chrome/browser/printing/print_view_manager_base.cc
@@ -78,12 +78,11 @@
}
#if BUILDFLAG(ENABLE_PRINT_PREVIEW)
-void CreateQueryWithSettings(
- std::unique_ptr<base::DictionaryValue> job_settings,
- int render_process_id,
- int render_frame_id,
- scoped_refptr<PrintQueriesQueue> queue,
- PrintSettingsCallback callback) {
+void CreateQueryWithSettings(base::Value job_settings,
+ int render_process_id,
+ int render_frame_id,
+ scoped_refptr<PrintQueriesQueue> queue,
+ PrintSettingsCallback callback) {
DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
scoped_refptr<printing::PrinterQuery> printer_query =
queue->CreatePrinterQuery(render_process_id, render_frame_id);
@@ -133,16 +132,15 @@
#if BUILDFLAG(ENABLE_PRINT_PREVIEW)
void PrintViewManagerBase::PrintForPrintPreview(
- std::unique_ptr<base::DictionaryValue> job_settings,
- const scoped_refptr<base::RefCountedMemory>& print_data,
+ base::Value job_settings,
+ scoped_refptr<base::RefCountedMemory> print_data,
content::RenderFrameHost* rfh,
PrinterHandler::PrintCallback callback) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
- int page_count;
- job_settings->GetInteger(kSettingPreviewPageCount, &page_count);
PrintSettingsCallback settings_callback =
base::BindOnce(&PrintViewManagerBase::OnPrintSettingsDone,
- weak_ptr_factory_.GetWeakPtr(), print_data, page_count,
+ weak_ptr_factory_.GetWeakPtr(), print_data,
+ job_settings.FindIntKey(kSettingPreviewPageCount).value(),
std::move(callback));
base::PostTaskWithTraits(
FROM_HERE, {content::BrowserThread::IO},
diff --git a/chrome/browser/printing/print_view_manager_base.h b/chrome/browser/printing/print_view_manager_base.h
index fa8d5a17..a2569836 100644
--- a/chrome/browser/printing/print_view_manager_base.h
+++ b/chrome/browser/printing/print_view_manager_base.h
@@ -55,11 +55,10 @@
// |job_settings|. Runs |callback| with an error string on failure and with an
// empty string if the print job is started successfully. |rfh| is the render
// frame host for the preview initiator contents respectively.
- void PrintForPrintPreview(
- std::unique_ptr<base::DictionaryValue> job_settings,
- const scoped_refptr<base::RefCountedMemory>& print_data,
- content::RenderFrameHost* rfh,
- PrinterHandler::PrintCallback callback);
+ void PrintForPrintPreview(base::Value job_settings,
+ scoped_refptr<base::RefCountedMemory> print_data,
+ content::RenderFrameHost* rfh,
+ PrinterHandler::PrintCallback callback);
#endif
// Whether printing is enabled or not.
diff --git a/chrome/browser/printing/print_view_manager_unittest.cc b/chrome/browser/printing/print_view_manager_unittest.cc
index 9591235..470c8e2 100644
--- a/chrome/browser/printing/print_view_manager_unittest.cc
+++ b/chrome/browser/printing/print_view_manager_unittest.cc
@@ -135,17 +135,13 @@
print_view_manager->PrintPreviewNow(web_contents->GetMainFrame(), false);
base::Value print_ticket = GetPrintTicket(printing::kLocalPrinter, false);
- std::unique_ptr<base::DictionaryValue> job_settings =
- base::DictionaryValue::From(
- base::Value::ToUniquePtrValue(std::move(print_ticket)));
-
const char kTestData[] = "abc";
auto print_data = base::MakeRefCounted<base::RefCountedStaticMemory>(
kTestData, sizeof(kTestData));
PrinterHandler::PrintCallback callback =
base::BindOnce(&TestPrintViewManager::FakePrintCallback,
base::Unretained(print_view_manager.get()));
- print_view_manager->PrintForPrintPreview(std::move(job_settings), print_data,
+ print_view_manager->PrintForPrintPreview(std::move(print_ticket), print_data,
web_contents->GetMainFrame(),
std::move(callback));
print_view_manager->WaitForCallback();
diff --git a/chrome/browser/printing/printer_query.cc b/chrome/browser/printing/printer_query.cc
index 09f8e164..06461a0 100644
--- a/chrome/browser/printing/printer_query.cc
+++ b/chrome/browser/printing/printer_query.cc
@@ -97,9 +97,8 @@
has_selection, margin_type, is_scripted, is_modifiable));
}
-void PrinterQuery::SetSettings(
- std::unique_ptr<base::DictionaryValue> new_settings,
- base::OnceClosure callback) {
+void PrinterQuery::SetSettings(base::Value new_settings,
+ base::OnceClosure callback) {
StartWorker(std::move(callback));
worker_->PostTask(FROM_HERE, base::BindOnce(&PrintJobWorker::SetSettings,
diff --git a/chrome/browser/printing/printer_query.h b/chrome/browser/printing/printer_query.h
index 64db84f..3b17390 100644
--- a/chrome/browser/printing/printer_query.h
+++ b/chrome/browser/printing/printer_query.h
@@ -10,12 +10,12 @@
#include "base/callback.h"
#include "base/macros.h"
#include "base/memory/ref_counted.h"
+#include "base/values.h"
#include "printing/print_job_constants.h"
#include "printing/print_settings.h"
#include "printing/printing_context.h"
namespace base {
-class DictionaryValue;
class Location;
class SequencedTaskRunner;
}
@@ -60,7 +60,7 @@
base::OnceClosure callback);
// Updates the current settings with |new_settings| dictionary values.
- virtual void SetSettings(std::unique_ptr<base::DictionaryValue> new_settings,
+ virtual void SetSettings(base::Value new_settings,
base::OnceClosure callback);
#if defined(OS_CHROMEOS)
diff --git a/chrome/browser/printing/printing_message_filter.cc b/chrome/browser/printing/printing_message_filter.cc
index e415483..8cf82aaf 100644
--- a/chrome/browser/printing/printing_message_filter.cc
+++ b/chrome/browser/printing/printing_message_filter.cc
@@ -305,11 +305,9 @@
}
#endif
-void PrintingMessageFilter::OnUpdatePrintSettings(
- int document_cookie, const base::DictionaryValue& job_settings,
- IPC::Message* reply_msg) {
- std::unique_ptr<base::DictionaryValue> new_settings(job_settings.DeepCopy());
-
+void PrintingMessageFilter::OnUpdatePrintSettings(int document_cookie,
+ base::Value job_settings,
+ IPC::Message* reply_msg) {
scoped_refptr<PrinterQuery> printer_query;
if (!is_printing_enabled_.GetValue()) {
// Reply with NULL query.
@@ -322,7 +320,7 @@
content::ChildProcessHost::kInvalidUniqueID, MSG_ROUTING_NONE);
}
printer_query->SetSettings(
- std::move(new_settings),
+ std::move(job_settings),
base::Bind(&PrintingMessageFilter::OnUpdatePrintSettingsReply, this,
printer_query, reply_msg));
}
diff --git a/chrome/browser/printing/printing_message_filter.h b/chrome/browser/printing/printing_message_filter.h
index a881a85..63b71257 100644
--- a/chrome/browser/printing/printing_message_filter.h
+++ b/chrome/browser/printing/printing_message_filter.h
@@ -11,6 +11,7 @@
#include <string>
#include "base/macros.h"
+#include "base/values.h"
#include "build/build_config.h"
#include "components/keyed_service/core/keyed_service_shutdown_notifier.h"
#include "components/prefs/pref_member.h"
@@ -22,12 +23,11 @@
struct PrintHostMsg_ScriptedPrint_Params;
class Profile;
-namespace base {
-class DictionaryValue;
#if defined(OS_ANDROID)
+namespace base {
struct FileDescriptor;
-#endif
}
+#endif
namespace printing {
@@ -88,7 +88,7 @@
// handled by the print worker thread and the UI thread. The reply occurs on
// the IO thread.
void OnUpdatePrintSettings(int document_cookie,
- const base::DictionaryValue& job_settings,
+ base::Value job_settings,
IPC::Message* reply_msg);
void OnUpdatePrintSettingsReply(scoped_refptr<PrinterQuery> printer_query,
IPC::Message* reply_msg);
diff --git a/chrome/browser/printing/test_printer_query.cc b/chrome/browser/printing/test_printer_query.cc
index 7234d78..6d26be12 100644
--- a/chrome/browser/printing/test_printer_query.cc
+++ b/chrome/browser/printing/test_printer_query.cc
@@ -47,9 +47,8 @@
TestPrinterQuery::~TestPrinterQuery() {}
-void TestPrinterQuery::SetSettings(
- std::unique_ptr<base::DictionaryValue> new_settings,
- base::OnceClosure callback) {
+void TestPrinterQuery::SetSettings(base::Value new_settings,
+ base::OnceClosure callback) {
DCHECK(offsets_);
#if defined(OS_WIN)
DCHECK(printer_type_);
@@ -57,7 +56,7 @@
set_callback(std::move(callback));
PrintSettings settings;
PrintingContext::Result result =
- PrintSettingsFromJobSettings(*new_settings, &settings)
+ PrintSettingsFromJobSettings(new_settings, &settings)
? PrintingContext::OK
: PrintingContext::FAILED;
diff --git a/chrome/browser/printing/test_printer_query.h b/chrome/browser/printing/test_printer_query.h
index 934fc99d..9bc62d1 100644
--- a/chrome/browser/printing/test_printer_query.h
+++ b/chrome/browser/printing/test_printer_query.h
@@ -9,14 +9,11 @@
#include "base/callback.h"
#include "base/macros.h"
+#include "base/values.h"
#include "build/build_config.h"
#include "chrome/browser/printing/print_job_manager.h"
#include "chrome/browser/printing/printer_query.h"
-namespace base {
-class DictionaryValue;
-}
-
namespace printing {
class TestPrintQueriesQueue : public PrintQueriesQueue {
@@ -60,7 +57,7 @@
// Updates the current settings with |new_settings| dictionary values. Also
// fills in the settings with values from |offsets_| and |printer_type_| that
// would normally be filled in by the PrintingContext.
- void SetSettings(std::unique_ptr<base::DictionaryValue> new_settings,
+ void SetSettings(base::Value new_settings,
base::OnceClosure callback) override;
#if defined(OS_WIN)
diff --git a/chrome/browser/ui/webui/print_preview/local_printer_handler_chromeos.cc b/chrome/browser/ui/webui/print_preview/local_printer_handler_chromeos.cc
index 1504269..81bd450 100644
--- a/chrome/browser/ui/webui/print_preview/local_printer_handler_chromeos.cc
+++ b/chrome/browser/ui/webui/print_preview/local_printer_handler_chromeos.cc
@@ -9,6 +9,7 @@
#include <vector>
#include "base/bind_helpers.h"
+#include "base/json/json_reader.h"
#include "base/logging.h"
#include "base/metrics/histogram_macros.h"
#include "base/task/post_task.h"
@@ -239,9 +240,10 @@
PrintCallback callback) {
size_t size_in_kb = print_data->size() / 1024;
UMA_HISTOGRAM_MEMORY_KB("Printing.CUPS.PrintDocumentSize", size_in_kb);
-
- StartLocalPrint(ticket_json, print_data, preview_web_contents_,
- std::move(callback));
+ std::unique_ptr<base::Value> job_settings =
+ base::JSONReader::Read(ticket_json);
+ StartLocalPrint(base::Value::FromUniquePtrValue(std::move(job_settings)),
+ print_data, preview_web_contents_, std::move(callback));
}
} // namespace printing
diff --git a/chrome/browser/ui/webui/print_preview/local_printer_handler_default.cc b/chrome/browser/ui/webui/print_preview/local_printer_handler_default.cc
index dc23201..8b767a7c 100644
--- a/chrome/browser/ui/webui/print_preview/local_printer_handler_default.cc
+++ b/chrome/browser/ui/webui/print_preview/local_printer_handler_default.cc
@@ -7,8 +7,10 @@
#include <string>
#include <utility>
+#include "base/json/json_reader.h"
#include "base/logging.h"
#include "base/memory/ref_counted.h"
+#include "base/memory/ref_counted_memory.h"
#include "base/task/post_task.h"
#include "base/threading/scoped_blocking_call.h"
#include "build/build_config.h"
@@ -124,8 +126,10 @@
const gfx::Size& page_size,
const scoped_refptr<base::RefCountedMemory>& print_data,
PrintCallback callback) {
- StartLocalPrint(ticket_json, print_data, preview_web_contents_,
- std::move(callback));
+ std::unique_ptr<base::Value> job_settings =
+ base::JSONReader::Read(ticket_json);
+ StartLocalPrint(base::Value::FromUniquePtrValue(std::move(job_settings)),
+ print_data, preview_web_contents_, std::move(callback));
}
} // namespace printing
diff --git a/chrome/browser/ui/webui/print_preview/print_preview_utils.cc b/chrome/browser/ui/webui/print_preview/print_preview_utils.cc
index 48eca940..8bcf51f 100644
--- a/chrome/browser/ui/webui/print_preview/print_preview_utils.cc
+++ b/chrome/browser/ui/webui/print_preview/print_preview_utils.cc
@@ -9,7 +9,6 @@
#include <utility>
#include <vector>
-#include "base/json/json_reader.h"
#include "base/logging.h"
#include "base/memory/ref_counted_memory.h"
#include "base/stl_util.h"
@@ -180,17 +179,10 @@
std::move(done_callback).Run();
}
-void StartLocalPrint(const std::string& ticket_json,
- const scoped_refptr<base::RefCountedMemory>& print_data,
+void StartLocalPrint(base::Value job_settings,
+ scoped_refptr<base::RefCountedMemory> print_data,
content::WebContents* preview_web_contents,
PrinterHandler::PrintCallback callback) {
- std::unique_ptr<base::DictionaryValue> job_settings =
- base::DictionaryValue::From(base::JSONReader::Read(ticket_json));
- if (!job_settings) {
- std::move(callback).Run(base::Value("Invalid settings"));
- return;
- }
-
// Get print view manager.
PrintPreviewDialogController* dialog_controller =
PrintPreviewDialogController::GetInstance();
@@ -204,11 +196,8 @@
return;
}
- bool system_dialog = false;
- job_settings->GetBoolean(kSettingShowSystemDialog, &system_dialog);
- bool open_in_pdf = false;
- job_settings->GetBoolean(kSettingOpenPDFInPreview, &open_in_pdf);
- if (system_dialog || open_in_pdf) {
+ if (job_settings.FindBoolKey(kSettingShowSystemDialog).value_or(false) ||
+ job_settings.FindBoolKey(kSettingOpenPDFInPreview).value_or(false)) {
// Run the callback early, or the modal dialogs will prevent the preview
// from closing until they do.
std::move(callback).Run(base::Value());
diff --git a/chrome/browser/ui/webui/print_preview/print_preview_utils.h b/chrome/browser/ui/webui/print_preview/print_preview_utils.h
index 92016d22..ed8a23fa 100644
--- a/chrome/browser/ui/webui/print_preview/print_preview_utils.h
+++ b/chrome/browser/ui/webui/print_preview/print_preview_utils.h
@@ -41,9 +41,9 @@
const base::DictionaryValue& cdd);
// Starts a local print of |print_data| with print settings dictionary
-// |ticket_json|. Runs |callback| on failure or success.
-void StartLocalPrint(const std::string& ticket_json,
- const scoped_refptr<base::RefCountedMemory>& print_data,
+// |job_settings|. Runs |callback| on failure or success.
+void StartLocalPrint(base::Value job_settings,
+ scoped_refptr<base::RefCountedMemory> print_data,
content::WebContents* preview_web_contents,
PrinterHandler::PrintCallback callback);
diff --git a/printing/print_settings_conversion.cc b/printing/print_settings_conversion.cc
index 0bdc246..4ae32548 100644
--- a/printing/print_settings_conversion.cc
+++ b/printing/print_settings_conversion.cc
@@ -17,7 +17,6 @@
#include "base/time/time.h"
#include "base/values.h"
#include "build/build_config.h"
-#include "printing/page_size_margins.h"
#include "printing/print_job_constants.h"
#include "printing/print_settings.h"
#include "printing/units.h"
@@ -26,20 +25,21 @@
namespace {
-void GetCustomMarginsFromJobSettings(const base::DictionaryValue& settings,
- PageSizeMargins* page_size_margins) {
- const base::DictionaryValue* custom_margins;
- if (!settings.GetDictionary(kSettingMarginsCustom, &custom_margins) ||
- !custom_margins->GetDouble(kSettingMarginTop,
- &page_size_margins->margin_top) ||
- !custom_margins->GetDouble(kSettingMarginBottom,
- &page_size_margins->margin_bottom) ||
- !custom_margins->GetDouble(kSettingMarginLeft,
- &page_size_margins->margin_left) ||
- !custom_margins->GetDouble(kSettingMarginRight,
- &page_size_margins->margin_right)) {
+void GetCustomMarginsFromJobSettings(const base::Value& settings,
+ PageMargins* page_size_margins) {
+ const base::Value* custom_margins = settings.FindKey(kSettingMarginsCustom);
+ if (!custom_margins) {
NOTREACHED();
+ return;
}
+ page_size_margins->top =
+ custom_margins->FindKey(kSettingMarginTop)->GetDouble();
+ page_size_margins->bottom =
+ custom_margins->FindKey(kSettingMarginBottom)->GetDouble();
+ page_size_margins->left =
+ custom_margins->FindKey(kSettingMarginLeft)->GetDouble();
+ page_size_margins->right =
+ custom_margins->FindKey(kSettingMarginRight)->GetDouble();
}
void SetMarginsToJobSettings(const std::string& json_path,
@@ -75,150 +75,139 @@
} // namespace
-bool PrintSettingsFromJobSettings(const base::DictionaryValue& job_settings,
+bool PrintSettingsFromJobSettings(const base::Value& job_settings,
PrintSettings* settings) {
- bool display_header_footer = false;
- if (!job_settings.GetBoolean(kSettingHeaderFooterEnabled,
- &display_header_footer)) {
+ base::Optional<bool> display_header_footer =
+ job_settings.FindBoolKey(kSettingHeaderFooterEnabled);
+ if (!display_header_footer.has_value())
return false;
- }
- settings->set_display_header_footer(display_header_footer);
+ settings->set_display_header_footer(display_header_footer.value());
if (settings->display_header_footer()) {
- base::string16 title;
- base::string16 url;
- if (!job_settings.GetString(kSettingHeaderFooterTitle, &title) ||
- !job_settings.GetString(kSettingHeaderFooterURL, &url)) {
+ const std::string* title =
+ job_settings.FindStringKey(kSettingHeaderFooterTitle);
+ const std::string* url =
+ job_settings.FindStringKey(kSettingHeaderFooterURL);
+ if (!title || !url)
return false;
- }
- settings->set_title(title);
- settings->set_url(url);
+
+ settings->set_title(base::UTF8ToUTF16(*title));
+ settings->set_url(base::UTF8ToUTF16(*url));
}
- bool backgrounds = false;
- bool selection_only = false;
- if (!job_settings.GetBoolean(kSettingShouldPrintBackgrounds, &backgrounds) ||
- !job_settings.GetBoolean(kSettingShouldPrintSelectionOnly,
- &selection_only)) {
+ base::Optional<bool> backgrounds =
+ job_settings.FindBoolKey(kSettingShouldPrintBackgrounds);
+ base::Optional<bool> selection_only =
+ job_settings.FindBoolKey(kSettingShouldPrintSelectionOnly);
+ if (!backgrounds.has_value() || !selection_only.has_value())
return false;
- }
- settings->set_should_print_backgrounds(backgrounds);
- settings->set_selection_only(selection_only);
+
+ settings->set_should_print_backgrounds(backgrounds.value());
+ settings->set_selection_only(selection_only.value());
PrintSettings::RequestedMedia requested_media;
- const base::DictionaryValue* media_size_value = NULL;
- if (job_settings.GetDictionary(kSettingMediaSize, &media_size_value)) {
- int width_microns = 0;
- int height_microns = 0;
- if (media_size_value->GetInteger(kSettingMediaSizeWidthMicrons,
- &width_microns) &&
- media_size_value->GetInteger(kSettingMediaSizeHeightMicrons,
- &height_microns)) {
- requested_media.size_microns = gfx::Size(width_microns, height_microns);
+ const base::Value* media_size_value = job_settings.FindKeyOfType(
+ kSettingMediaSize, base::Value::Type::DICTIONARY);
+ if (media_size_value) {
+ base::Optional<int> width_microns =
+ media_size_value->FindIntKey(kSettingMediaSizeWidthMicrons);
+ base::Optional<int> height_microns =
+ media_size_value->FindIntKey(kSettingMediaSizeHeightMicrons);
+ if (width_microns.has_value() && height_microns.has_value()) {
+ requested_media.size_microns =
+ gfx::Size(width_microns.value(), height_microns.value());
}
- std::string vendor_id;
- if (media_size_value->GetString(kSettingMediaSizeVendorId, &vendor_id) &&
- !vendor_id.empty()) {
- requested_media.vendor_id = vendor_id;
- }
+
+ const std::string* vendor_id =
+ media_size_value->FindStringKey(kSettingMediaSizeVendorId);
+ if (vendor_id && !vendor_id->empty())
+ requested_media.vendor_id = *vendor_id;
}
settings->set_requested_media(requested_media);
- int margin_type = DEFAULT_MARGINS;
- if (!job_settings.GetInteger(kSettingMarginsType, &margin_type) ||
- (margin_type != DEFAULT_MARGINS &&
- margin_type != NO_MARGINS &&
- margin_type != CUSTOM_MARGINS &&
- margin_type != PRINTABLE_AREA_MARGINS)) {
+ int margin_type =
+ job_settings.FindIntKey(kSettingMarginsType).value_or(DEFAULT_MARGINS);
+ if (margin_type != DEFAULT_MARGINS && margin_type != NO_MARGINS &&
+ margin_type != CUSTOM_MARGINS && margin_type != PRINTABLE_AREA_MARGINS) {
margin_type = DEFAULT_MARGINS;
}
settings->set_margin_type(static_cast<MarginType>(margin_type));
if (margin_type == CUSTOM_MARGINS) {
- PageSizeMargins page_size_margins;
- GetCustomMarginsFromJobSettings(job_settings, &page_size_margins);
-
PageMargins margins_in_points;
margins_in_points.Clear();
- margins_in_points.top = page_size_margins.margin_top;
- margins_in_points.bottom = page_size_margins.margin_bottom;
- margins_in_points.left = page_size_margins.margin_left;
- margins_in_points.right = page_size_margins.margin_right;
-
+ GetCustomMarginsFromJobSettings(job_settings, &margins_in_points);
settings->SetCustomMargins(margins_in_points);
}
PageRanges new_ranges;
- const base::ListValue* page_range_array = NULL;
- if (job_settings.GetList(kSettingPageRange, &page_range_array)) {
- for (size_t index = 0; index < page_range_array->GetSize(); ++index) {
- const base::DictionaryValue* dict;
- if (!page_range_array->GetDictionary(index, &dict))
+ const base::Value* page_range_array =
+ job_settings.FindKeyOfType(kSettingPageRange, base::Value::Type::LIST);
+ if (page_range_array) {
+ for (const base::Value& value : page_range_array->GetList()) {
+ if (!value.is_dict())
continue;
- PageRange range;
- if (!dict->GetInteger(kSettingPageRangeFrom, &range.from) ||
- !dict->GetInteger(kSettingPageRangeTo, &range.to)) {
+ base::Optional<int> from = value.FindIntKey(kSettingPageRangeFrom);
+ base::Optional<int> to = value.FindIntKey(kSettingPageRangeTo);
+ if (!from.has_value() || !to.has_value())
continue;
- }
// Page numbers are 1-based in the dictionary.
// Page numbers are 0-based for the printing context.
- range.from--;
- range.to--;
- new_ranges.push_back(range);
+ new_ranges.push_back(PageRange{from.value() - 1, to.value() - 1});
}
}
settings->set_ranges(new_ranges);
- int color = 0;
- bool landscape = false;
- int duplex_mode = 0;
- base::string16 device_name;
- bool collate = false;
- int copies = 1;
- int scale_factor = 100;
- bool rasterize_pdf = false;
- int pages_per_sheet = 1;
+ base::Optional<bool> collate = job_settings.FindBoolKey(kSettingCollate);
+ base::Optional<int> copies = job_settings.FindIntKey(kSettingCopies);
+ base::Optional<int> color = job_settings.FindIntKey(kSettingColor);
+ base::Optional<int> duplex_mode = job_settings.FindIntKey(kSettingDuplexMode);
+ base::Optional<bool> landscape = job_settings.FindBoolKey(kSettingLandscape);
+ const std::string* device_name =
+ job_settings.FindStringKey(kSettingDeviceName);
+ base::Optional<int> scale_factor =
+ job_settings.FindIntKey(kSettingScaleFactor);
+ base::Optional<bool> rasterize_pdf =
+ job_settings.FindBoolKey(kSettingRasterizePdf);
+ base::Optional<int> pages_per_sheet =
+ job_settings.FindIntKey(kSettingPagesPerSheet);
- if (!job_settings.GetBoolean(kSettingCollate, &collate) ||
- !job_settings.GetInteger(kSettingCopies, &copies) ||
- !job_settings.GetInteger(kSettingColor, &color) ||
- !job_settings.GetInteger(kSettingDuplexMode, &duplex_mode) ||
- !job_settings.GetBoolean(kSettingLandscape, &landscape) ||
- !job_settings.GetString(kSettingDeviceName, &device_name) ||
- !job_settings.GetInteger(kSettingScaleFactor, &scale_factor) ||
- !job_settings.GetBoolean(kSettingRasterizePdf, &rasterize_pdf) ||
- !job_settings.GetInteger(kSettingPagesPerSheet, &pages_per_sheet)) {
+ if (!collate.has_value() || !copies.has_value() || !color.has_value() ||
+ !duplex_mode.has_value() || !landscape.has_value() || !device_name ||
+ !scale_factor.has_value() || !rasterize_pdf.has_value() ||
+ !pages_per_sheet.has_value()) {
return false;
}
#if defined(OS_WIN)
- int dpi_horizontal = 0;
- int dpi_vertical = 0;
- if (!job_settings.GetInteger(kSettingDpiHorizontal, &dpi_horizontal) ||
- !job_settings.GetInteger(kSettingDpiVertical, &dpi_vertical)) {
+ base::Optional<int> dpi_horizontal =
+ job_settings.FindIntKey(kSettingDpiHorizontal);
+ base::Optional<int> dpi_vertical =
+ job_settings.FindIntKey(kSettingDpiVertical);
+ if (!dpi_horizontal.has_value() || !dpi_vertical.has_value())
return false;
- }
- settings->set_dpi_xy(dpi_horizontal, dpi_vertical);
+
+ settings->set_dpi_xy(dpi_horizontal.value(), dpi_vertical.value());
#endif
- settings->set_collate(collate);
- settings->set_copies(copies);
- settings->SetOrientation(landscape);
- settings->set_device_name(device_name);
- settings->set_duplex_mode(static_cast<DuplexMode>(duplex_mode));
- settings->set_color(static_cast<ColorModel>(color));
- settings->set_scale_factor(static_cast<double>(scale_factor) / 100.0);
- settings->set_rasterize_pdf(rasterize_pdf);
- settings->set_pages_per_sheet(pages_per_sheet);
- bool is_modifiable = false;
- if (job_settings.GetBoolean(kSettingPreviewModifiable, &is_modifiable)) {
- settings->set_is_modifiable(is_modifiable);
+ settings->set_collate(collate.value());
+ settings->set_copies(copies.value());
+ settings->SetOrientation(landscape.value());
+ settings->set_device_name(base::UTF8ToUTF16(*device_name));
+ settings->set_duplex_mode(static_cast<DuplexMode>(duplex_mode.value()));
+ settings->set_color(static_cast<ColorModel>(color.value()));
+ settings->set_scale_factor(static_cast<double>(scale_factor.value()) / 100.0);
+ settings->set_rasterize_pdf(rasterize_pdf.value());
+ settings->set_pages_per_sheet(pages_per_sheet.value());
+ base::Optional<bool> is_modifiable =
+ job_settings.FindBoolKey(kSettingPreviewModifiable);
+ if (is_modifiable.has_value()) {
+ settings->set_is_modifiable(is_modifiable.value());
#if defined(OS_WIN)
- settings->set_print_text_with_gdi(is_modifiable);
+ settings->set_print_text_with_gdi(is_modifiable.value());
#endif
}
-
return true;
}
diff --git a/printing/print_settings_conversion.h b/printing/print_settings_conversion.h
index 283c0ff..07b6b03 100644
--- a/printing/print_settings_conversion.h
+++ b/printing/print_settings_conversion.h
@@ -11,6 +11,7 @@
namespace base {
class DictionaryValue;
+class Value;
}
namespace printing {
@@ -18,7 +19,7 @@
class PrintSettings;
PRINTING_EXPORT bool PrintSettingsFromJobSettings(
- const base::DictionaryValue& job_settings,
+ const base::Value& job_settings,
PrintSettings* print_settings);
// Use for debug only, because output is not completely consistent with format
diff --git a/printing/printing_context.cc b/printing/printing_context.cc
index 289b44b..1939a761 100644
--- a/printing/printing_context.cc
+++ b/printing/printing_context.cc
@@ -56,32 +56,31 @@
}
PrintingContext::Result PrintingContext::UsePdfSettings() {
- std::unique_ptr<base::DictionaryValue> pdf_settings(
- new base::DictionaryValue);
- pdf_settings->SetBoolean(kSettingHeaderFooterEnabled, false);
- pdf_settings->SetBoolean(kSettingShouldPrintBackgrounds, false);
- pdf_settings->SetBoolean(kSettingShouldPrintSelectionOnly, false);
- pdf_settings->SetInteger(kSettingMarginsType, printing::NO_MARGINS);
- pdf_settings->SetBoolean(kSettingCollate, true);
- pdf_settings->SetInteger(kSettingCopies, 1);
- pdf_settings->SetInteger(kSettingColor, printing::COLOR);
- pdf_settings->SetInteger(kSettingDpiHorizontal, kPointsPerInch);
- pdf_settings->SetInteger(kSettingDpiVertical, kPointsPerInch);
- pdf_settings->SetInteger(kSettingDuplexMode, printing::SIMPLEX);
- pdf_settings->SetBoolean(kSettingLandscape, false);
- pdf_settings->SetString(kSettingDeviceName, "");
- pdf_settings->SetBoolean(kSettingPrintToPDF, true);
- pdf_settings->SetBoolean(kSettingCloudPrintDialog, false);
- pdf_settings->SetBoolean(kSettingPrintWithPrivet, false);
- pdf_settings->SetBoolean(kSettingPrintWithExtension, false);
- pdf_settings->SetInteger(kSettingScaleFactor, 100);
- pdf_settings->SetBoolean(kSettingRasterizePdf, false);
- pdf_settings->SetInteger(kSettingPagesPerSheet, 1);
- return UpdatePrintSettings(*pdf_settings);
+ base::Value pdf_settings(base::Value::Type::DICTIONARY);
+ pdf_settings.SetKey(kSettingHeaderFooterEnabled, base::Value(false));
+ pdf_settings.SetKey(kSettingShouldPrintBackgrounds, base::Value(false));
+ pdf_settings.SetKey(kSettingShouldPrintSelectionOnly, base::Value(false));
+ pdf_settings.SetKey(kSettingMarginsType, base::Value(printing::NO_MARGINS));
+ pdf_settings.SetKey(kSettingCollate, base::Value(true));
+ pdf_settings.SetKey(kSettingCopies, base::Value(1));
+ pdf_settings.SetKey(kSettingColor, base::Value(printing::COLOR));
+ pdf_settings.SetKey(kSettingDpiHorizontal, base::Value(kPointsPerInch));
+ pdf_settings.SetKey(kSettingDpiVertical, base::Value(kPointsPerInch));
+ pdf_settings.SetKey(kSettingDuplexMode, base::Value(printing::SIMPLEX));
+ pdf_settings.SetKey(kSettingLandscape, base::Value(false));
+ pdf_settings.SetKey(kSettingDeviceName, base::Value(""));
+ pdf_settings.SetKey(kSettingPrintToPDF, base::Value(true));
+ pdf_settings.SetKey(kSettingCloudPrintDialog, base::Value(false));
+ pdf_settings.SetKey(kSettingPrintWithPrivet, base::Value(false));
+ pdf_settings.SetKey(kSettingPrintWithExtension, base::Value(false));
+ pdf_settings.SetKey(kSettingScaleFactor, base::Value(100));
+ pdf_settings.SetKey(kSettingRasterizePdf, base::Value(false));
+ pdf_settings.SetKey(kSettingPagesPerSheet, base::Value(1));
+ return UpdatePrintSettings(std::move(pdf_settings));
}
PrintingContext::Result PrintingContext::UpdatePrintSettings(
- const base::DictionaryValue& job_settings) {
+ base::Value job_settings) {
ResetSettings();
if (!PrintSettingsFromJobSettings(job_settings, &settings_)) {
@@ -89,23 +88,29 @@
return OnError();
}
- bool print_to_pdf = false;
- bool is_cloud_dialog = false;
- bool print_with_privet = false;
- bool print_with_extension = false;
+ base::Optional<bool> print_to_pdf_opt =
+ job_settings.FindBoolKey(kSettingPrintToPDF);
+ base::Optional<bool> is_cloud_dialog_opt =
+ job_settings.FindBoolKey(kSettingCloudPrintDialog);
+ base::Optional<bool> print_with_privet_opt =
+ job_settings.FindBoolKey(kSettingPrintWithPrivet);
+ base::Optional<bool> print_with_extension_opt =
+ job_settings.FindBoolKey(kSettingPrintWithExtension);
- if (!job_settings.GetBoolean(kSettingPrintToPDF, &print_to_pdf) ||
- !job_settings.GetBoolean(kSettingCloudPrintDialog, &is_cloud_dialog) ||
- !job_settings.GetBoolean(kSettingPrintWithPrivet, &print_with_privet) ||
- !job_settings.GetBoolean(kSettingPrintWithExtension,
- &print_with_extension)) {
+ if (!print_to_pdf_opt || !is_cloud_dialog_opt || !print_with_privet_opt ||
+ !print_with_extension_opt) {
NOTREACHED();
return OnError();
}
- bool print_to_cloud = job_settings.HasKey(kSettingCloudPrintId);
+ bool print_to_pdf = print_to_pdf_opt.value();
+ bool is_cloud_dialog = is_cloud_dialog_opt.value();
+ bool print_with_privet = print_with_privet_opt.value();
+ bool print_with_extension = print_with_extension_opt.value();
+
+ bool print_to_cloud = job_settings.FindKey(kSettingCloudPrintId) != nullptr;
bool open_in_external_preview =
- job_settings.HasKey(kSettingOpenPDFInPreview);
+ job_settings.FindKey(kSettingOpenPDFInPreview) != nullptr;
if (!open_in_external_preview &&
(print_to_pdf || print_to_cloud || is_cloud_dialog || print_with_privet ||
@@ -131,14 +136,10 @@
return OK;
}
- bool show_system_dialog = false;
- job_settings.GetBoolean(kSettingShowSystemDialog, &show_system_dialog);
-
- int page_count = 0;
- job_settings.GetInteger(kSettingPreviewPageCount, &page_count);
-
- return UpdatePrinterSettings(open_in_external_preview, show_system_dialog,
- page_count);
+ return UpdatePrinterSettings(
+ open_in_external_preview,
+ job_settings.FindBoolKey(kSettingShowSystemDialog).value_or(false),
+ job_settings.FindIntKey(kSettingPreviewPageCount).value_or(0));
}
#if defined(OS_CHROMEOS)
diff --git a/printing/printing_context.h b/printing/printing_context.h
index 88593790..1704d5a 100644
--- a/printing/printing_context.h
+++ b/printing/printing_context.h
@@ -11,14 +11,11 @@
#include "base/callback.h"
#include "base/macros.h"
#include "base/strings/string16.h"
+#include "base/values.h"
#include "printing/native_drawing_context.h"
#include "printing/print_settings.h"
#include "ui/gfx/native_widget_types.h"
-namespace base {
-class DictionaryValue;
-}
-
namespace printing {
// An abstraction of a printer context, implemented by objects that describe the
@@ -83,8 +80,8 @@
int page_count) = 0;
// Updates Print Settings. |job_settings| contains all print job
- // settings information. |ranges| has the new page range settings.
- Result UpdatePrintSettings(const base::DictionaryValue& job_settings);
+ // settings information.
+ Result UpdatePrintSettings(base::Value job_settings);
#if defined(OS_CHROMEOS)
// Updates Print Settings.