Skip to content

Commit

Permalink
[CrOS Printing] Allow pin printing through HTTPS.
Browse files Browse the repository at this point in the history
Also merge the definition of secure protocol with one used in
printers_map.cc and exclude kUnknown (i.e. "other") from that list.

Bug: 848942
Change-Id: I14894d2775c0d6b251866bb0c09b02efc94c3cfc
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2005229
Reviewed-by: Lei Zhang <thestig@chromium.org>
Reviewed-by: Nikita Podguzov <nikitapodguzov@chromium.org>
Commit-Queue: Vladislav Kuzkokov <vkuzkokov@chromium.org>
Cr-Commit-Position: refs/heads/master@{#735011}
  • Loading branch information
Vladislav Kuzkokov authored and Commit Bot committed Jan 24, 2020
1 parent 103872b commit a922da2
Show file tree
Hide file tree
Showing 5 changed files with 73 additions and 11 deletions.
9 changes: 1 addition & 8 deletions chrome/browser/chromeos/printing/printers_map.cc
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,6 @@
namespace chromeos {
namespace {

bool IsProtocolSecure(const Printer& printer) {
return !printer.HasNetworkProtocol() ||
printer.GetProtocol() == Printer::kIpps ||
printer.GetProtocol() == Printer::kHttps;
}

} // namespace

PrintersMap::PrintersMap() = default;
Expand Down Expand Up @@ -107,9 +101,8 @@ std::vector<Printer> PrintersMap::GetSecurePrinters(
result.reserve(printers_.at(printer_class).size());
for (const auto& kv : printers_.at(printer_class)) {
const Printer& printer = kv.second;
if (IsProtocolSecure(printer)) {
if (printer.HasSecureProtocol())
result.push_back(printer);
}
}

return result;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,15 +94,13 @@ void FetchCapabilities(const chromeos::Printer& printer,
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);

PrinterBasicInfo basic_info = ToBasicInfo(printer);
bool has_secure_protocol = !printer.HasNetworkProtocol() ||
printer.GetProtocol() == chromeos::Printer::kIpps;

// USER_VISIBLE because the result is displayed in the print preview dialog.
base::PostTaskAndReplyWithResult(
FROM_HERE,
{base::ThreadPool(), base::MayBlock(), base::TaskPriority::USER_VISIBLE},
base::BindOnce(&FetchCapabilitiesAsync, printer.id(), basic_info,
has_secure_protocol,
printer.HasSecureProtocol(),
g_browser_process->GetApplicationLocale()),
base::BindOnce(&CapabilitiesFetched, std::move(policies), std::move(cb)));
}
Expand Down
13 changes: 13 additions & 0 deletions chromeos/printing/printer_configuration.cc
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,19 @@ bool Printer::IsUsbProtocol() const {
}
}

bool Printer::HasSecureProtocol() const {
Printer::PrinterProtocol current_protocol = GetProtocol();
switch (current_protocol) {
case PrinterProtocol::kUsb:
case PrinterProtocol::kIpps:
case PrinterProtocol::kHttps:
case PrinterProtocol::kIppUsb:
return true;
default:
return false;
}
}

base::Optional<UriComponents> Printer::GetUriComponents() const {
return chromeos::ParseUri(uri_);
}
Expand Down
4 changes: 4 additions & 0 deletions chromeos/printing/printer_configuration.h
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,10 @@ class CHROMEOS_EXPORT Printer {
// kIppUsb.
bool IsUsbProtocol() const;

// Returns true if the current protocol is either local (kUsb or kIppUsb) or
// secure (kIpps or kHttps).
bool HasSecureProtocol() const;

Source source() const { return source_; }
void set_source(const Source source) { source_ = source; }

Expand Down
54 changes: 54 additions & 0 deletions chromeos/printing/printer_configuration_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -84,4 +84,58 @@ TEST(PrinterConfigurationTest, ParseUriSubdomainQueueAndPort) {
EXPECT_EQ(result->path(), "/ipp/print");
}

TEST(PrinterConfigurationTest, SecureProtocolIpps) {
chromeos::Printer printer;
printer.set_uri("ipps://1.2.3.4");
EXPECT_TRUE(printer.HasSecureProtocol());
}

TEST(PrinterConfigurationTest, SecureProtocolHttps) {
chromeos::Printer printer;
printer.set_uri("https://1.2.3.4");
EXPECT_TRUE(printer.HasSecureProtocol());
}

TEST(PrinterConfigurationTest, SecureProtocolUsb) {
chromeos::Printer printer;
printer.set_uri("usb://");
EXPECT_TRUE(printer.HasSecureProtocol());
}

TEST(PrinterConfigurationTest, SecureProtocolIppusb) {
chromeos::Printer printer;
printer.set_uri("ippusb://");
EXPECT_TRUE(printer.HasSecureProtocol());
}

TEST(PrinterConfigurationTest, NonSecureProtocolIpp) {
chromeos::Printer printer;
printer.set_uri("ipp://1.2.3.4");
EXPECT_FALSE(printer.HasSecureProtocol());
}

TEST(PrinterConfigurationTest, NonSecureProtocolHttp) {
chromeos::Printer printer;
printer.set_uri("http://1.2.3.4");
EXPECT_FALSE(printer.HasSecureProtocol());
}

TEST(PrinterConfigurationTest, NonSecureProtocolSocket) {
chromeos::Printer printer;
printer.set_uri("socket://1.2.3.4");
EXPECT_FALSE(printer.HasSecureProtocol());
}

TEST(PrinterConfigurationTest, NonSecureProtocolLpd) {
chromeos::Printer printer;
printer.set_uri("lpd://1.2.3.4");
EXPECT_FALSE(printer.HasSecureProtocol());
}

TEST(PrinterConfigurationTest, NonSecureProtocolUnknown) {
chromeos::Printer printer;
printer.set_uri("foobar");
EXPECT_FALSE(printer.HasSecureProtocol());
}

} // namespace

0 comments on commit a922da2

Please sign in to comment.