summaryrefslogtreecommitdiffstats
path: root/chromium/chrome/browser/ui/webui/print_preview
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/chrome/browser/ui/webui/print_preview')
-rw-r--r--chromium/chrome/browser/ui/webui/print_preview/local_printer_handler_chromeos.cc8
-rw-r--r--chromium/chrome/browser/ui/webui/print_preview/local_printer_handler_chromeos_unittest.cc6
-rw-r--r--chromium/chrome/browser/ui/webui/print_preview/pdf_printer_handler.cc29
-rw-r--r--chromium/chrome/browser/ui/webui/print_preview/policy_settings.cc3
-rw-r--r--chromium/chrome/browser/ui/webui/print_preview/print_preview_handler.cc56
-rw-r--r--chromium/chrome/browser/ui/webui/print_preview/print_preview_handler.h10
-rw-r--r--chromium/chrome/browser/ui/webui/print_preview/print_preview_handler_unittest.cc140
-rw-r--r--chromium/chrome/browser/ui/webui/print_preview/print_preview_ui.cc80
-rw-r--r--chromium/chrome/browser/ui/webui/print_preview/print_preview_ui.h5
-rw-r--r--chromium/chrome/browser/ui/webui/print_preview/print_preview_utils.cc7
-rw-r--r--chromium/chrome/browser/ui/webui/print_preview/print_preview_utils_unittest.cc3
11 files changed, 191 insertions, 156 deletions
diff --git a/chromium/chrome/browser/ui/webui/print_preview/local_printer_handler_chromeos.cc b/chromium/chrome/browser/ui/webui/print_preview/local_printer_handler_chromeos.cc
index 9b926a8b629..9edda51b6d3 100644
--- a/chromium/chrome/browser/ui/webui/print_preview/local_printer_handler_chromeos.cc
+++ b/chromium/chrome/browser/ui/webui/print_preview/local_printer_handler_chromeos.cc
@@ -25,7 +25,7 @@
#include "chrome/browser/ui/webui/print_preview/print_preview_utils.h"
#include "chrome/common/pref_names.h"
#include "chromeos/dbus/dbus_thread_manager.h"
-#include "chromeos/dbus/debug_daemon_client.h"
+#include "chromeos/dbus/debug_daemon/debug_daemon_client.h"
#include "chromeos/printing/printer_configuration.h"
#include "components/prefs/pref_service.h"
#include "components/printing/browser/printer_capabilities.h"
@@ -303,6 +303,9 @@ base::Value LocalPrinterHandlerChromeos::GetNativePrinterPolicies() const {
policies.SetKey(
kAllowedPinModes,
base::Value(prefs->GetInteger(prefs::kPrintingAllowedPinModes)));
+ policies.SetKey(kAllowedBackgroundGraphicsModes,
+ base::Value(prefs->GetInteger(
+ prefs::kPrintingAllowedBackgroundGraphicsModes)));
policies.SetKey(kDefaultColorMode,
base::Value(prefs->GetInteger(prefs::kPrintingColorDefault)));
policies.SetKey(
@@ -310,6 +313,9 @@ base::Value LocalPrinterHandlerChromeos::GetNativePrinterPolicies() const {
base::Value(prefs->GetInteger(prefs::kPrintingDuplexDefault)));
policies.SetKey(kDefaultPinMode,
base::Value(prefs->GetInteger(prefs::kPrintingPinDefault)));
+ policies.SetKey(kDefaultBackgroundGraphicsMode,
+ base::Value(prefs->GetInteger(
+ prefs::kPrintingBackgroundGraphicsDefault)));
return policies;
}
diff --git a/chromium/chrome/browser/ui/webui/print_preview/local_printer_handler_chromeos_unittest.cc b/chromium/chrome/browser/ui/webui/print_preview/local_printer_handler_chromeos_unittest.cc
index 756f3b374ea..5329108a661 100644
--- a/chromium/chrome/browser/ui/webui/print_preview/local_printer_handler_chromeos_unittest.cc
+++ b/chromium/chrome/browser/ui/webui/print_preview/local_printer_handler_chromeos_unittest.cc
@@ -289,20 +289,26 @@ TEST_F(LocalPrinterHandlerChromeosTest, GetNativePrinterPolicies) {
std::make_unique<base::Value>(0));
prefs->SetUserPref(prefs::kPrintingAllowedPinModes,
std::make_unique<base::Value>(1));
+ prefs->SetUserPref(prefs::kPrintingAllowedBackgroundGraphicsModes,
+ std::make_unique<base::Value>(2));
prefs->SetUserPref(prefs::kPrintingColorDefault,
std::make_unique<base::Value>(2));
prefs->SetUserPref(prefs::kPrintingDuplexDefault,
std::make_unique<base::Value>(4));
prefs->SetUserPref(prefs::kPrintingPinDefault,
std::make_unique<base::Value>(0));
+ prefs->SetUserPref(prefs::kPrintingBackgroundGraphicsDefault,
+ std::make_unique<base::Value>(0));
base::Value expected_policies(base::Value::Type::DICTIONARY);
expected_policies.SetKey(kAllowedColorModes, base::Value(1));
expected_policies.SetKey(kAllowedDuplexModes, base::Value(0));
expected_policies.SetKey(kAllowedPinModes, base::Value(1));
+ expected_policies.SetKey(kAllowedBackgroundGraphicsModes, base::Value(2));
expected_policies.SetKey(kDefaultColorMode, base::Value(2));
expected_policies.SetKey(kDefaultDuplexMode, base::Value(4));
expected_policies.SetKey(kDefaultPinMode, base::Value(0));
+ expected_policies.SetKey(kDefaultBackgroundGraphicsMode, base::Value(0));
EXPECT_EQ(expected_policies,
local_printer_handler_->GetNativePrinterPolicies());
diff --git a/chromium/chrome/browser/ui/webui/print_preview/pdf_printer_handler.cc b/chromium/chrome/browser/ui/webui/print_preview/pdf_printer_handler.cc
index 00cf10991ed..f0033a7e67b 100644
--- a/chromium/chrome/browser/ui/webui/print_preview/pdf_printer_handler.cc
+++ b/chromium/chrome/browser/ui/webui/print_preview/pdf_printer_handler.cc
@@ -72,38 +72,41 @@ gfx::Size GetDefaultPdfMediaSizeMicrons() {
}
base::Value GetPdfCapabilities(const std::string& locale) {
- cloud_devices::CloudDeviceDescription description;
- using namespace cloud_devices::printer;
+ using cloud_devices::printer::MediaType;
- OrientationCapability orientation;
+ cloud_devices::CloudDeviceDescription description;
+ cloud_devices::printer::OrientationCapability orientation;
orientation.AddOption(cloud_devices::printer::OrientationType::PORTRAIT);
orientation.AddOption(cloud_devices::printer::OrientationType::LANDSCAPE);
- orientation.AddDefaultOption(OrientationType::AUTO_ORIENTATION, true);
+ orientation.AddDefaultOption(
+ cloud_devices::printer::OrientationType::AUTO_ORIENTATION, true);
orientation.SaveTo(&description);
- ColorCapability color;
+ cloud_devices::printer::ColorCapability color;
{
- Color standard_color(ColorType::STANDARD_COLOR);
+ cloud_devices::printer::Color standard_color(
+ cloud_devices::printer::ColorType::STANDARD_COLOR);
standard_color.vendor_id = base::NumberToString(COLOR);
color.AddDefaultOption(standard_color, true);
}
color.SaveTo(&description);
- static const cloud_devices::printer::MediaType kPdfMedia[] = {
+ static const MediaType kPdfMedia[] = {
MediaType::ISO_A0, MediaType::ISO_A1, MediaType::ISO_A2,
MediaType::ISO_A3, MediaType::ISO_A4, MediaType::ISO_A5,
MediaType::NA_LEGAL, MediaType::NA_LETTER, MediaType::NA_LEDGER};
const gfx::Size default_media_size = GetDefaultPdfMediaSizeMicrons();
- Media default_media("", "", default_media_size.width(),
- default_media_size.height());
+ cloud_devices::printer::Media default_media(std::string(), std::string(),
+ default_media_size.width(),
+ default_media_size.height());
if (!default_media.MatchBySize() ||
!base::Contains(kPdfMedia, default_media.type)) {
- default_media =
- Media(locale == "en-US" ? MediaType::NA_LETTER : MediaType::ISO_A4);
+ default_media = cloud_devices::printer::Media(
+ locale == "en-US" ? MediaType::NA_LETTER : MediaType::ISO_A4);
}
- MediaCapability media;
+ cloud_devices::printer::MediaCapability media;
for (const auto& pdf_media : kPdfMedia) {
- Media media_option(pdf_media);
+ cloud_devices::printer::Media media_option(pdf_media);
media.AddDefaultOption(media_option,
default_media.type == media_option.type);
}
diff --git a/chromium/chrome/browser/ui/webui/print_preview/policy_settings.cc b/chromium/chrome/browser/ui/webui/print_preview/policy_settings.cc
index dbaa090f34c..11ab72453e8 100644
--- a/chromium/chrome/browser/ui/webui/print_preview/policy_settings.cc
+++ b/chromium/chrome/browser/ui/webui/print_preview/policy_settings.cc
@@ -14,10 +14,13 @@ void PolicySettings::RegisterProfilePrefs(
user_prefs::PrefRegistrySyncable* registry) {
registry->RegisterBooleanPref(prefs::kPrintHeaderFooter, true);
#if defined(OS_CHROMEOS)
+ registry->RegisterIntegerPref(prefs::kPrintingAllowedBackgroundGraphicsModes,
+ 0);
registry->RegisterIntegerPref(prefs::kPrintingAllowedColorModes, 0);
registry->RegisterIntegerPref(prefs::kPrintingAllowedDuplexModes, 0);
registry->RegisterIntegerPref(prefs::kPrintingAllowedPinModes, 0);
registry->RegisterListPref(prefs::kPrintingAllowedPageSizes);
+ registry->RegisterIntegerPref(prefs::kPrintingBackgroundGraphicsDefault, 0);
registry->RegisterIntegerPref(prefs::kPrintingColorDefault, 0);
registry->RegisterIntegerPref(prefs::kPrintingDuplexDefault, 0);
registry->RegisterIntegerPref(prefs::kPrintingPinDefault, 0);
diff --git a/chromium/chrome/browser/ui/webui/print_preview/print_preview_handler.cc b/chromium/chrome/browser/ui/webui/print_preview/print_preview_handler.cc
index 977fa0091ff..2ecb8cdde5a 100644
--- a/chromium/chrome/browser/ui/webui/print_preview/print_preview_handler.cc
+++ b/chromium/chrome/browser/ui/webui/print_preview/print_preview_handler.cc
@@ -147,6 +147,7 @@ enum PrintSettingsBuckets {
DEFAULT_DPI,
NON_DEFAULT_DPI,
PIN,
+ FIT_TO_PAPER,
PRINT_SETTINGS_BUCKET_BOUNDARY
};
@@ -315,9 +316,6 @@ void ReportPrintSettingsStats(const base::Value& print_settings,
if (print_settings.FindIntKey(kSettingCopies).value_or(1) > 1)
ReportPrintSettingHistogram(COPIES);
- if (preview_settings.FindIntKey(kSettingScaleFactor).value_or(100) != 100)
- ReportPrintSettingHistogram(SCALING);
-
if (preview_settings.FindIntKey(kSettingPagesPerSheet).value_or(1) != 1)
ReportPrintSettingHistogram(PAGES_PER_SHEET);
@@ -354,9 +352,18 @@ void ReportPrintSettingsStats(const base::Value& print_settings,
if (preview_settings.FindBoolKey(kSettingRasterizePdf).value_or(false))
ReportPrintSettingHistogram(PRINT_AS_IMAGE);
- if (is_pdf &&
- preview_settings.FindBoolKey(kSettingFitToPageEnabled).value_or(false)) {
- ReportPrintSettingHistogram(FIT_TO_PAGE);
+ ScalingType scaling_type =
+ static_cast<ScalingType>(preview_settings.FindIntKey(kSettingScalingType)
+ .value_or(ScalingType::DEFAULT));
+ if (scaling_type == ScalingType::CUSTOM) {
+ ReportPrintSettingHistogram(SCALING);
+ }
+
+ if (is_pdf) {
+ if (scaling_type == ScalingType::FIT_TO_PAGE)
+ ReportPrintSettingHistogram(FIT_TO_PAGE);
+ else if (scaling_type == ScalingType::FIT_TO_PAPER)
+ ReportPrintSettingHistogram(FIT_TO_PAPER);
}
if (print_settings.FindIntKey(kSettingDpiHorizontal).value_or(0) > 0 &&
@@ -377,21 +384,32 @@ void ReportPrintSettingsStats(const base::Value& print_settings,
UserActionBuckets DetermineUserAction(const base::Value& settings) {
#if defined(OS_MACOSX)
- if (settings.FindKey(kSettingOpenPDFInPreview) != nullptr)
+ if (settings.FindKey(kSettingOpenPDFInPreview))
return OPEN_IN_MAC_PREVIEW;
#endif
// This needs to be checked before checking for a cloud print ID, since a
// print ticket for printing to Drive will also contain a cloud print ID.
if (settings.FindBoolKey(kSettingPrintToGoogleDrive).value_or(false))
return PRINT_TO_GOOGLE_DRIVE;
- if (settings.FindKey(kSettingCloudPrintId) != nullptr)
+ if (settings.FindKey(kSettingCloudPrintId))
return PRINT_WITH_CLOUD_PRINT;
- if (settings.FindBoolKey(kSettingPrintWithPrivet).value_or(false))
- return PRINT_WITH_PRIVET;
- if (settings.FindBoolKey(kSettingPrintWithExtension).value_or(false))
- return PRINT_WITH_EXTENSION;
- if (settings.FindBoolKey(kSettingPrintToPDF).value_or(false))
- return PRINT_TO_PDF;
+
+ PrinterType type = static_cast<PrinterType>(
+ settings.FindIntKey(kSettingPrinterType).value());
+ switch (type) {
+ case kPrivetPrinter:
+ return PRINT_WITH_PRIVET;
+ case kExtensionPrinter:
+ return PRINT_WITH_EXTENSION;
+ case kPdfPrinter:
+ return PRINT_TO_PDF;
+ case kLocalPrinter:
+ break;
+ default:
+ NOTREACHED();
+ break;
+ }
+
if (settings.FindBoolKey(kSettingShowSystemDialog).value_or(false))
return FALLBACK_TO_ADVANCED_SETTINGS_DIALOG;
return PRINT_TO_PRINTER;
@@ -965,7 +983,7 @@ void PrintPreviewHandler::GetUserAccountList(base::Value* settings) {
const std::vector<gaia::ListedAccount>& accounts =
identity_manager_->GetAccountsInCookieJar().signed_in_accounts;
for (const gaia::ListedAccount& account : accounts) {
- account_list.GetList().emplace_back(account.email);
+ account_list.Append(account.email);
}
settings->SetKey(kSyncAvailable, base::Value(true));
} else {
@@ -982,6 +1000,8 @@ void PrintPreviewHandler::SendInitialSettings(
print_preview_ui()->initiator_title());
initial_settings.SetBoolKey(kSettingPreviewModifiable,
print_preview_ui()->source_is_modifiable());
+ initial_settings.SetBoolKey(kSettingPreviewIsPdf,
+ print_preview_ui()->source_is_pdf());
initial_settings.SetStringKey(kSettingPrinterName, default_printer);
initial_settings.SetBoolKey(kDocumentHasSelection,
print_preview_ui()->source_has_selection());
@@ -1122,7 +1142,7 @@ void PrintPreviewHandler::OnAccountsInCookieUpdated(
const std::vector<gaia::ListedAccount>& accounts =
accounts_in_cookie_jar_info.signed_in_accounts;
for (const auto account : accounts) {
- account_list.GetList().emplace_back(account.email);
+ account_list.Append(account.email);
}
FireWebUIListener("user-accounts-updated", std::move(account_list));
}
@@ -1136,6 +1156,10 @@ void PrintPreviewHandler::OnPrintPreviewReady(int preview_uid, int request_id) {
}
void PrintPreviewHandler::OnPrintPreviewFailed(int request_id) {
+ WebContents* initiator = GetInitiator();
+ if (!initiator || initiator->IsBeingDestroyed())
+ return; // Drop notification if fired during destruction sequence.
+
std::string callback_id = GetCallbackId(request_id);
if (callback_id.empty())
return;
diff --git a/chromium/chrome/browser/ui/webui/print_preview/print_preview_handler.h b/chromium/chrome/browser/ui/webui/print_preview/print_preview_handler.h
index bdccac1a8a4..e5f5f921753 100644
--- a/chromium/chrome/browser/ui/webui/print_preview/print_preview_handler.h
+++ b/chromium/chrome/browser/ui/webui/print_preview/print_preview_handler.h
@@ -38,16 +38,6 @@ class PdfPrinterHandler;
class PrinterHandler;
class PrintPreviewUI;
-// Must match print_preview.PrinterType in
-// chrome/browser/resources/print_preview/native_layer.js
-enum PrinterType {
- kPrivetPrinter,
- kExtensionPrinter,
- kPdfPrinter,
- kLocalPrinter,
- kCloudPrinter
-};
-
// The handler for Javascript messages related to the print preview dialog.
class PrintPreviewHandler : public content::WebUIMessageHandler,
public signin::IdentityManager::Observer {
diff --git a/chromium/chrome/browser/ui/webui/print_preview/print_preview_handler_unittest.cc b/chromium/chrome/browser/ui/webui/print_preview/print_preview_handler_unittest.cc
index e56a96a4703..6d724094aa6 100644
--- a/chromium/chrome/browser/ui/webui/print_preview/print_preview_handler_unittest.cc
+++ b/chromium/chrome/browser/ui/webui/print_preview/print_preview_handler_unittest.cc
@@ -48,9 +48,13 @@ namespace {
const char kDummyInitiatorName[] = "TestInitiator";
const char kTestData[] = "abc";
-// Array of all PrinterType values.
-const PrinterType kAllTypes[] = {kPrivetPrinter, kExtensionPrinter, kPdfPrinter,
- kLocalPrinter};
+// Array of all PrinterTypes.
+constexpr PrinterType kAllTypes[] = {kPrivetPrinter, kExtensionPrinter,
+ kPdfPrinter, kLocalPrinter, kCloudPrinter};
+
+// Array of all PrinterTypes that have working PrinterHandlers.
+constexpr PrinterType kAllSupportedTypes[] = {kPrivetPrinter, kExtensionPrinter,
+ kPdfPrinter, kLocalPrinter};
struct PrinterInfo {
std::string id;
@@ -90,14 +94,15 @@ PrinterInfo GetEmptyPrinterInfo() {
return empty_printer;
}
-base::Value GetPrintPreviewTicket(bool is_pdf) {
- base::Value print_ticket = GetPrintTicket(kLocalPrinter, false);
+base::Value GetPrintPreviewTicket() {
+ base::Value print_ticket = GetPrintTicket(kLocalPrinter);
// Make some modifications to match a preview print ticket.
print_ticket.SetKey(kSettingPageRange, base::Value());
- print_ticket.SetKey(kIsFirstRequest, base::Value(true));
- print_ticket.SetKey(kPreviewRequestID, base::Value(0));
- print_ticket.SetKey(kSettingPreviewModifiable, base::Value(is_pdf));
+ print_ticket.SetBoolKey(kIsFirstRequest, true);
+ print_ticket.SetIntKey(kPreviewRequestID, 0);
+ print_ticket.SetBoolKey(kSettingPreviewModifiable, false);
+ print_ticket.SetBoolKey(kSettingPreviewIsPdf, true);
print_ticket.RemoveKey(kSettingPageWidth);
print_ticket.RemoveKey(kSettingPageHeight);
print_ticket.RemoveKey(kSettingShowSystemDialog);
@@ -109,10 +114,10 @@ std::unique_ptr<base::ListValue> ConstructPreviewArgs(
base::StringPiece callback_id,
const base::Value& print_ticket) {
base::Value args(base::Value::Type::LIST);
- args.GetList().emplace_back(callback_id);
+ args.Append(callback_id);
std::string json;
base::JSONWriter::Write(print_ticket, &json);
- args.GetList().emplace_back(json);
+ args.Append(json);
return base::ListValue::From(base::Value::ToUniquePtrValue(std::move(args)));
}
@@ -292,7 +297,7 @@ class PrintPreviewHandlerTest : public testing::Test {
// Sending this message will enable javascript, so it must always be called
// before any other messages are sent.
base::Value args(base::Value::Type::LIST);
- args.GetList().emplace_back("test-callback-id-0");
+ args.Append("test-callback-id-0");
std::unique_ptr<base::ListValue> list_args =
base::ListValue::From(base::Value::ToUniquePtrValue(std::move(args)));
@@ -512,8 +517,8 @@ TEST_F(PrintPreviewHandlerTest, GetPrinters) {
base::Value args(base::Value::Type::LIST);
std::string callback_id_in =
"test-callback-id-" + base::NumberToString(i + 1);
- args.GetList().emplace_back(callback_id_in);
- args.GetList().emplace_back(type);
+ args.Append(callback_id_in);
+ args.Append(type);
std::unique_ptr<base::ListValue> list_args =
base::ListValue::From(base::Value::ToUniquePtrValue(std::move(args)));
handler()->HandleGetPrinters(list_args.get());
@@ -531,7 +536,7 @@ TEST_F(PrintPreviewHandlerTest, GetPrinters) {
ASSERT_TRUE(add_data.arg2()->GetAsInteger(&type_out));
EXPECT_EQ(type, type_out);
ASSERT_TRUE(add_data.arg3());
- const base::Value::ListStorage& printer_list = add_data.arg3()->GetList();
+ base::span<const base::Value> printer_list = add_data.arg3()->GetList();
ASSERT_EQ(printer_list.size(), 1u);
EXPECT_TRUE(printer_list[0].FindKeyOfType("printer_name",
base::Value::Type::STRING));
@@ -552,15 +557,15 @@ TEST_F(PrintPreviewHandlerTest, GetPrinterCapabilities) {
// Check all four printer types that implement
// PrinterHandler::StartGetCapability().
- for (size_t i = 0; i < base::size(kAllTypes); i++) {
- PrinterType type = kAllTypes[i];
+ for (size_t i = 0; i < base::size(kAllSupportedTypes); i++) {
+ PrinterType type = kAllSupportedTypes[i];
handler()->reset_calls();
base::Value args(base::Value::Type::LIST);
std::string callback_id_in =
"test-callback-id-" + base::NumberToString(i + 1);
- args.GetList().emplace_back(callback_id_in);
- args.GetList().emplace_back(kDummyPrinterName);
- args.GetList().emplace_back(type);
+ args.Append(callback_id_in);
+ args.Append(kDummyPrinterName);
+ args.Append(type);
std::unique_ptr<base::ListValue> list_args =
base::ListValue::From(base::Value::ToUniquePtrValue(std::move(args)));
handler()->HandleGetPrinterCapabilities(list_args.get());
@@ -581,24 +586,25 @@ TEST_F(PrintPreviewHandlerTest, GetPrinterCapabilities) {
// Run through the loop again, this time with a printer that has no
// capabilities.
- for (size_t i = 0; i < base::size(kAllTypes); i++) {
- PrinterType type = kAllTypes[i];
+ for (size_t i = 0; i < base::size(kAllSupportedTypes); i++) {
+ PrinterType type = kAllSupportedTypes[i];
handler()->reset_calls();
base::Value args(base::Value::Type::LIST);
std::string callback_id_in =
"test-callback-id-" +
- base::NumberToString(i + base::size(kAllTypes) + 1);
- args.GetList().emplace_back(callback_id_in);
- args.GetList().emplace_back("EmptyPrinter");
- args.GetList().emplace_back(type);
+ base::NumberToString(i + base::size(kAllSupportedTypes) + 1);
+ args.Append(callback_id_in);
+ args.Append("EmptyPrinter");
+ args.Append(type);
std::unique_ptr<base::ListValue> list_args =
base::ListValue::From(base::Value::ToUniquePtrValue(std::move(args)));
handler()->HandleGetPrinterCapabilities(list_args.get());
EXPECT_TRUE(handler()->CalledOnlyForType(type));
- // Start with 1 call from initial settings plus base::size(kAllTypes) from
- // first loop, then add 1 more for each loop iteration.
- ASSERT_EQ(1u + base::size(kAllTypes) + (i + 1),
+ // Start with 1 call from initial settings plus
+ // base::size(kAllSupportedTypes) from first loop, then add 1 more for each
+ // loop iteration.
+ ASSERT_EQ(1u + base::size(kAllSupportedTypes) + (i + 1),
web_ui()->call_data().size());
// Verify printer capabilities promise was rejected.
@@ -610,27 +616,25 @@ TEST_F(PrintPreviewHandlerTest, GetPrinterCapabilities) {
TEST_F(PrintPreviewHandlerTest, Print) {
Initialize();
- // All four printer types can print, as well as cloud printers.
- for (size_t i = 0; i <= base::size(kAllTypes); i++) {
- // Also check cloud print. Use dummy type value of Privet (will be ignored).
- bool cloud = i == base::size(kAllTypes);
- PrinterType type = cloud ? kPrivetPrinter : kAllTypes[i];
+ // All printer types can print.
+ for (size_t i = 0; i < base::size(kAllTypes); i++) {
+ PrinterType type = kAllTypes[i];
handler()->reset_calls();
base::Value args(base::Value::Type::LIST);
std::string callback_id_in =
"test-callback-id-" + base::NumberToString(i + 1);
- args.GetList().emplace_back(callback_id_in);
- base::Value print_ticket = GetPrintTicket(type, cloud);
+ args.Append(callback_id_in);
+ base::Value print_ticket = GetPrintTicket(type);
std::string json;
base::JSONWriter::Write(print_ticket, &json);
- args.GetList().emplace_back(json);
+ args.Append(json);
std::unique_ptr<base::ListValue> list_args =
base::ListValue::From(base::Value::ToUniquePtrValue(std::move(args)));
handler()->HandlePrint(list_args.get());
// Verify correct PrinterHandler was called or that no handler was requested
// for cloud printers.
- if (cloud) {
+ if (type == kCloudPrinter) {
EXPECT_TRUE(handler()->NotCalled());
} else {
EXPECT_TRUE(handler()->CalledOnlyForType(type));
@@ -641,7 +645,7 @@ TEST_F(PrintPreviewHandlerTest, Print) {
CheckWebUIResponse(data, callback_id_in, true);
// For cloud print, should also get the encoded data back as a string.
- if (cloud) {
+ if (type == kCloudPrinter) {
std::string print_data;
ASSERT_TRUE(data.arg3()->GetAsString(&print_data));
std::string expected_data;
@@ -654,7 +658,7 @@ TEST_F(PrintPreviewHandlerTest, Print) {
TEST_F(PrintPreviewHandlerTest, GetPreview) {
Initialize();
- base::Value print_ticket = GetPrintPreviewTicket(false);
+ base::Value print_ticket = GetPrintPreviewTicket();
std::unique_ptr<base::ListValue> list_args =
ConstructPreviewArgs("test-callback-id-1", print_ticket);
handler()->HandleGetPreview(list_args.get());
@@ -668,7 +672,7 @@ TEST_F(PrintPreviewHandlerTest, GetPreview) {
preview_id_found = true;
continue;
}
- base::Value* value_in = print_ticket.FindKey(it.first);
+ const base::Value* value_in = print_ticket.FindKey(it.first);
ASSERT_TRUE(value_in);
EXPECT_EQ(*value_in, it.second);
}
@@ -679,37 +683,38 @@ TEST_F(PrintPreviewHandlerTest, SendPreviewUpdates) {
Initialize();
const char callback_id_in[] = "test-callback-id-1";
- base::Value print_ticket = GetPrintPreviewTicket(false);
+ base::Value print_ticket = GetPrintPreviewTicket();
std::unique_ptr<base::ListValue> list_args =
ConstructPreviewArgs(callback_id_in, print_ticket);
handler()->HandleGetPreview(list_args.get());
base::DictionaryValue preview_params = VerifyPreviewMessage();
// Read the preview UI ID and request ID
- const base::Value* request_value = preview_params.FindKey(kPreviewRequestID);
- ASSERT_TRUE(request_value);
- ASSERT_TRUE(request_value->is_int());
- int preview_request_id = request_value->GetInt();
+ base::Optional<int> request_value =
+ preview_params.FindIntKey(kPreviewRequestID);
+ ASSERT_TRUE(request_value.has_value());
+ int preview_request_id = request_value.value();
- const base::Value* ui_value = preview_params.FindKey(kPreviewUIID);
- ASSERT_TRUE(ui_value);
- ASSERT_TRUE(ui_value->is_int());
- int preview_ui_id = ui_value->GetInt();
+ base::Optional<int> ui_value = preview_params.FindIntKey(kPreviewUIID);
+ ASSERT_TRUE(ui_value.has_value());
+ int preview_ui_id = ui_value.value();
// Simulate renderer responses: PageLayoutReady, PageCountReady,
// PagePreviewReady, and OnPrintPreviewReady will be called in that order.
- base::DictionaryValue layout;
- layout.SetKey(kSettingMarginTop, base::Value(34.0));
- layout.SetKey(kSettingMarginLeft, base::Value(34.0));
- layout.SetKey(kSettingMarginBottom, base::Value(34.0));
- layout.SetKey(kSettingMarginRight, base::Value(34.0));
- layout.SetKey(kSettingContentWidth, base::Value(544.0));
- layout.SetKey(kSettingContentHeight, base::Value(700.0));
- layout.SetKey(kSettingPrintableAreaX, base::Value(17));
- layout.SetKey(kSettingPrintableAreaY, base::Value(17));
- layout.SetKey(kSettingPrintableAreaWidth, base::Value(578));
- layout.SetKey(kSettingPrintableAreaHeight, base::Value(734));
- handler()->SendPageLayoutReady(layout, false, preview_request_id);
+ base::Value layout(base::Value::Type::DICTIONARY);
+ layout.SetDoubleKey(kSettingMarginTop, 34.0);
+ layout.SetDoubleKey(kSettingMarginLeft, 34.0);
+ layout.SetDoubleKey(kSettingMarginBottom, 34.0);
+ layout.SetDoubleKey(kSettingMarginRight, 34.0);
+ layout.SetDoubleKey(kSettingContentWidth, 544.0);
+ layout.SetDoubleKey(kSettingContentHeight, 700.0);
+ layout.SetIntKey(kSettingPrintableAreaX, 17);
+ layout.SetIntKey(kSettingPrintableAreaY, 17);
+ layout.SetIntKey(kSettingPrintableAreaWidth, 578);
+ layout.SetIntKey(kSettingPrintableAreaHeight, 734);
+ handler()->SendPageLayoutReady(base::Value::AsDictionaryValue(layout),
+ /*has_custom_page_size_style,=*/false,
+ preview_request_id);
// Verify that page-layout-ready webUI event was fired.
AssertWebUIEventFired(*web_ui()->call_data().back(), "page-layout-ready");
@@ -732,7 +737,8 @@ TEST_F(PrintPreviewHandlerTest, SendPreviewUpdates) {
// None of these should work since there has been no new preview request.
// Check that there are no new web UI messages sent.
size_t message_count = web_ui()->call_data().size();
- handler()->SendPageLayoutReady(base::DictionaryValue(), false,
+ handler()->SendPageLayoutReady(base::DictionaryValue(),
+ /*has_custom_page_size_style,=*/false,
preview_request_id);
EXPECT_EQ(message_count, web_ui()->call_data().size());
handler()->SendPageCountReady(1, -1, 0);
@@ -788,15 +794,15 @@ TEST_F(PrintPreviewHandlerFailingTest, GetPrinterCapabilities) {
// Check all four printer types that implement
// PrinterHandler::StartGetCapability().
- for (size_t i = 0; i < base::size(kAllTypes); i++) {
- PrinterType type = kAllTypes[i];
+ for (size_t i = 0; i < base::size(kAllSupportedTypes); i++) {
+ PrinterType type = kAllSupportedTypes[i];
handler()->reset_calls();
base::Value args(base::Value::Type::LIST);
std::string callback_id_in =
"test-callback-id-" + base::NumberToString(i + 1);
- args.GetList().emplace_back(callback_id_in);
- args.GetList().emplace_back(kDummyPrinterName);
- args.GetList().emplace_back(type);
+ args.Append(callback_id_in);
+ args.Append(kDummyPrinterName);
+ args.Append(type);
std::unique_ptr<base::ListValue> list_args =
base::ListValue::From(base::Value::ToUniquePtrValue(std::move(args)));
handler()->HandleGetPrinterCapabilities(list_args.get());
diff --git a/chromium/chrome/browser/ui/webui/print_preview/print_preview_ui.cc b/chromium/chrome/browser/ui/webui/print_preview/print_preview_ui.cc
index a855e2f1d97..820820687a5 100644
--- a/chromium/chrome/browser/ui/webui/print_preview/print_preview_ui.cc
+++ b/chromium/chrome/browser/ui/webui/print_preview/print_preview_ui.cc
@@ -26,6 +26,7 @@
#include "base/values.h"
#include "build/build_config.h"
#include "chrome/browser/browser_process.h"
+#include "chrome/browser/browser_process_platform_part.h"
#include "chrome/browser/printing/background_printing_manager.h"
#include "chrome/browser/printing/print_preview_data_service.h"
#include "chrome/browser/profiles/profile.h"
@@ -66,6 +67,10 @@
#include "base/enterprise_util.h"
#endif
+#if !BUILDFLAG(OPTIMIZE_WEBUI)
+#include "chrome/browser/ui/webui/managed_ui_handler.h"
+#endif
+
using content::WebContents;
namespace printing {
@@ -223,6 +228,7 @@ void AddPrintPreviewStrings(content::WebUIDataSource* source) {
{"optionCustomScaling", IDS_PRINT_PREVIEW_OPTION_CUSTOM_SCALING},
{"optionDefaultScaling", IDS_PRINT_PREVIEW_OPTION_DEFAULT_SCALING},
{"optionFitToPage", IDS_PRINT_PREVIEW_OPTION_FIT_TO_PAGE},
+ {"optionFitToPaper", IDS_PRINT_PREVIEW_OPTION_FIT_TO_PAPER},
{"optionHeaderFooter", IDS_PRINT_PREVIEW_OPTION_HEADER_FOOTER},
{"optionLandscape", IDS_PRINT_PREVIEW_OPTION_LANDSCAPE},
{"optionLongEdge", IDS_PRINT_PREVIEW_OPTION_LONG_EDGE},
@@ -343,60 +349,44 @@ void SetupPrintPreviewPlugin(content::WebUIDataSource* source) {
int id;
} kPdfResources[] = {
{"pdf/browser_api.js", IDR_PDF_BROWSER_API_JS},
+ {"pdf/controller.js", IDR_PDF_CONTROLLER_JS},
{"pdf/elements/icons.html", IDR_PDF_ICONS_HTML},
{"pdf/elements/shared-vars.html", IDR_PDF_SHARED_VARS_HTML},
- {"pdf/elements/viewer-bookmark/viewer-bookmark.html",
- IDR_PDF_VIEWER_BOOKMARK_HTML},
- {"pdf/elements/viewer-bookmark/viewer-bookmark.js",
- IDR_PDF_VIEWER_BOOKMARK_JS},
- {"pdf/elements/viewer-error-screen/viewer-error-screen.html",
- IDR_PDF_VIEWER_ERROR_SCREEN_HTML},
- {"pdf/elements/viewer-error-screen/viewer-error-screen.js",
- IDR_PDF_VIEWER_ERROR_SCREEN_JS},
+ {"pdf/elements/viewer-bookmark.html", IDR_PDF_VIEWER_BOOKMARK_HTML},
+ {"pdf/elements/viewer-bookmark.js", IDR_PDF_VIEWER_BOOKMARK_JS},
+ {"pdf/elements/viewer-error-screen.html", IDR_PDF_VIEWER_ERROR_SCREEN_HTML},
+ {"pdf/elements/viewer-error-screen.js", IDR_PDF_VIEWER_ERROR_SCREEN_JS},
#if defined(OS_CHROMEOS)
- {"pdf/elements/viewer-ink-host/viewer-ink-host.html",
- IDR_PDF_VIEWER_INK_HOST_HTML},
- {"pdf/elements/viewer-ink-host/viewer-ink-host.js",
- IDR_PDF_VIEWER_INK_HOST_JS},
+ {"pdf/elements/viewer-ink-host.html", IDR_PDF_VIEWER_INK_HOST_HTML},
+ {"pdf/elements/viewer-ink-host.js", IDR_PDF_VIEWER_INK_HOST_JS},
#endif
- {"pdf/elements/viewer-page-indicator/viewer-page-indicator.html",
+ {"pdf/elements/viewer-page-indicator.html",
IDR_PDF_VIEWER_PAGE_INDICATOR_HTML},
- {"pdf/elements/viewer-page-indicator/viewer-page-indicator.js",
- IDR_PDF_VIEWER_PAGE_INDICATOR_JS},
- {"pdf/elements/viewer-page-selector/viewer-page-selector.html",
+ {"pdf/elements/viewer-page-indicator.js", IDR_PDF_VIEWER_PAGE_INDICATOR_JS},
+ {"pdf/elements/viewer-page-selector.html",
IDR_PDF_VIEWER_PAGE_SELECTOR_HTML},
- {"pdf/elements/viewer-page-selector/viewer-page-selector.js",
- IDR_PDF_VIEWER_PAGE_SELECTOR_JS},
- {"pdf/elements/viewer-password-screen/viewer-password-screen.html",
+ {"pdf/elements/viewer-page-selector.js", IDR_PDF_VIEWER_PAGE_SELECTOR_JS},
+ {"pdf/elements/viewer-password-screen.html",
IDR_PDF_VIEWER_PASSWORD_SCREEN_HTML},
- {"pdf/elements/viewer-password-screen/viewer-password-screen.js",
+ {"pdf/elements/viewer-password-screen.js",
IDR_PDF_VIEWER_PASSWORD_SCREEN_JS},
- {"pdf/elements/viewer-pdf-toolbar/viewer-pdf-toolbar.html",
- IDR_PDF_VIEWER_PDF_TOOLBAR_HTML},
- {"pdf/elements/viewer-pdf-toolbar/viewer-pdf-toolbar.js",
- IDR_PDF_VIEWER_PDF_TOOLBAR_JS},
+ {"pdf/elements/viewer-pdf-toolbar.html", IDR_PDF_VIEWER_PDF_TOOLBAR_HTML},
+ {"pdf/elements/viewer-pdf-toolbar.js", IDR_PDF_VIEWER_PDF_TOOLBAR_JS},
#if defined(OS_CHROMEOS)
- {"pdf/elements/viewer-form-warning/viewer-form-warning.html",
- IDR_PDF_VIEWER_FORM_WARNING_HTML},
- {"pdf/elements/viewer-form-warning/viewer-form-warning.js",
- IDR_PDF_VIEWER_FORM_WARNING_JS},
- {"pdf/elements/viewer-pen-options/viewer-pen-options.html",
- IDR_PDF_VIEWER_PEN_OPTIONS_HTML},
- {"pdf/elements/viewer-pen-options/viewer-pen-options.js",
- IDR_PDF_VIEWER_PEN_OPTIONS_JS},
+ {"pdf/elements/viewer-form-warning.html", IDR_PDF_VIEWER_FORM_WARNING_HTML},
+ {"pdf/elements/viewer-form-warning.js", IDR_PDF_VIEWER_FORM_WARNING_JS},
+ {"pdf/elements/viewer-pen-options.html", IDR_PDF_VIEWER_PEN_OPTIONS_HTML},
+ {"pdf/elements/viewer-pen-options.js", IDR_PDF_VIEWER_PEN_OPTIONS_JS},
#endif
- {"pdf/elements/viewer-toolbar-dropdown/viewer-toolbar-dropdown.html",
+ {"pdf/elements/viewer-toolbar-dropdown.html",
IDR_PDF_VIEWER_TOOLBAR_DROPDOWN_HTML},
- {"pdf/elements/viewer-toolbar-dropdown/viewer-toolbar-dropdown.js",
+ {"pdf/elements/viewer-toolbar-dropdown.js",
IDR_PDF_VIEWER_TOOLBAR_DROPDOWN_JS},
- {"pdf/elements/viewer-zoom-toolbar/viewer-zoom-button.html",
- IDR_PDF_VIEWER_ZOOM_BUTTON_HTML},
- {"pdf/elements/viewer-zoom-toolbar/viewer-zoom-button.js",
- IDR_PDF_VIEWER_ZOOM_BUTTON_JS},
- {"pdf/elements/viewer-zoom-toolbar/viewer-zoom-toolbar.html",
+ {"pdf/elements/viewer-zoom-button.html", IDR_PDF_VIEWER_ZOOM_BUTTON_HTML},
+ {"pdf/elements/viewer-zoom-button.js", IDR_PDF_VIEWER_ZOOM_BUTTON_JS},
+ {"pdf/elements/viewer-zoom-toolbar.html",
IDR_PDF_VIEWER_ZOOM_SELECTOR_HTML},
- {"pdf/elements/viewer-zoom-toolbar/viewer-zoom-toolbar.js",
- IDR_PDF_VIEWER_ZOOM_SELECTOR_JS},
+ {"pdf/elements/viewer-zoom-toolbar.js", IDR_PDF_VIEWER_ZOOM_SELECTOR_JS},
{"pdf/gesture_detector.js", IDR_PDF_GESTURE_DETECTOR_JS},
{"pdf/index.css", IDR_PDF_INDEX_CSS},
{"pdf/index.html", IDR_PDF_INDEX_HTML},
@@ -470,7 +460,12 @@ PrintPreviewUI::PrintPreviewUI(content::WebUI* web_ui)
handler_(CreatePrintPreviewHandlers(web_ui)) {
// Set up the chrome://print/ data source.
Profile* profile = Profile::FromWebUI(web_ui);
- content::WebUIDataSource::Add(profile, CreatePrintPreviewUISource(profile));
+ content::WebUIDataSource* source = CreatePrintPreviewUISource(profile);
+#if !BUILDFLAG(OPTIMIZE_WEBUI)
+ // For the Polymer 3 demo page.
+ ManagedUIHandler::Initialize(web_ui, source);
+#endif
+ content::WebUIDataSource::Add(profile, source);
// Set up the chrome://theme/ source.
content::URLDataSource::Add(profile, std::make_unique<ThemeSource>(profile));
@@ -574,6 +569,7 @@ void PrintPreviewUI::SetInitialParams(
PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>(
print_preview_dialog->GetWebUI()->GetController());
print_preview_ui->source_is_modifiable_ = params.is_modifiable;
+ print_preview_ui->source_is_pdf_ = params.is_pdf;
print_preview_ui->source_has_selection_ = params.has_selection;
print_preview_ui->print_selection_only_ = params.selection_only;
}
diff --git a/chromium/chrome/browser/ui/webui/print_preview/print_preview_ui.h b/chromium/chrome/browser/ui/webui/print_preview/print_preview_ui.h
index 2aca55e7bc1..1922e87b53e 100644
--- a/chromium/chrome/browser/ui/webui/print_preview/print_preview_ui.h
+++ b/chromium/chrome/browser/ui/webui/print_preview/print_preview_ui.h
@@ -61,6 +61,8 @@ class PrintPreviewUI : public ConstrainedWebDialogUI {
bool source_is_modifiable() const { return source_is_modifiable_; }
+ bool source_is_pdf() const { return source_is_pdf_; }
+
bool source_has_selection() const { return source_has_selection_; }
bool print_selection_only() const { return print_selection_only_; }
@@ -257,6 +259,9 @@ class PrintPreviewUI : public ConstrainedWebDialogUI {
// Indicates whether the source document can be modified.
bool source_is_modifiable_ = true;
+ // Indicates whether the source document is a PDF.
+ bool source_is_pdf_ = false;
+
// Indicates whether the source document has selection.
bool source_has_selection_ = false;
diff --git a/chromium/chrome/browser/ui/webui/print_preview/print_preview_utils.cc b/chromium/chrome/browser/ui/webui/print_preview/print_preview_utils.cc
index e9d21dc1c15..e8af4416366 100644
--- a/chromium/chrome/browser/ui/webui/print_preview/print_preview_utils.cc
+++ b/chromium/chrome/browser/ui/webui/print_preview/print_preview_utils.cc
@@ -212,15 +212,12 @@ bool ParseSettings(const base::Value& settings,
std::string* out_capabilities,
gfx::Size* out_page_size,
base::Value* out_ticket) {
- const std::string* destination_id_opt =
- settings.FindStringKey(kSettingDeviceName);
const std::string* ticket_opt = settings.FindStringKey(kSettingTicket);
const std::string* capabilities_opt =
settings.FindStringKey(kSettingCapabilities);
out_page_size->SetSize(settings.FindIntKey(kSettingPageWidth).value_or(0),
settings.FindIntKey(kSettingPageHeight).value_or(0));
- if (!destination_id_opt || !ticket_opt || !capabilities_opt ||
- out_page_size->IsEmpty()) {
+ if (!ticket_opt || !capabilities_opt || out_page_size->IsEmpty()) {
NOTREACHED();
return false;
}
@@ -229,7 +226,7 @@ bool ParseSettings(const base::Value& settings,
if (!ticket_value)
return false;
- *out_destination_id = *destination_id_opt;
+ *out_destination_id = *settings.FindStringKey(kSettingDeviceName);
*out_capabilities = *capabilities_opt;
*out_ticket = std::move(*ticket_value);
return true;
diff --git a/chromium/chrome/browser/ui/webui/print_preview/print_preview_utils_unittest.cc b/chromium/chrome/browser/ui/webui/print_preview/print_preview_utils_unittest.cc
index 2fed881bf5d..1d84fb3e65c 100644
--- a/chromium/chrome/browser/ui/webui/print_preview/print_preview_utils_unittest.cc
+++ b/chromium/chrome/browser/ui/webui/print_preview/print_preview_utils_unittest.cc
@@ -163,8 +163,7 @@ void ValidateVendorCaps(const base::Value* printer_out,
ASSERT_TRUE(vendor_capability_out);
size_t index = 0;
- const base::Value::ListStorage& output_list =
- vendor_capability_out->GetList();
+ base::span<const base::Value> output_list = vendor_capability_out->GetList();
for (const auto& input_entry : input_vendor_caps->GetList()) {
if (!HasValidEntry(
input_entry