Add usb resolution support to ppd provider.
This allows us to download information about the make/model of a printer based on the vendor and device ids.
BUG=chromium:616866
Review-Url: https://codereview.chromium.org/2697733003
Cr-Commit-Position: refs/heads/master@{#450501}
diff --git a/chromeos/printing/ppd_provider_unittest.cc b/chromeos/printing/ppd_provider_unittest.cc
index 6f64f4c..8c10a98 100644
--- a/chromeos/printing/ppd_provider_unittest.cc
+++ b/chromeos/printing/ppd_provider_unittest.cc
@@ -76,6 +76,11 @@
["printer_b_ref", "printer_b.ppd"],
["printer_c_ref", "printer_c.ppd"]
])"},
+ {"metadata/usb-031f.json",
+ R"([
+ [1592, "Some canonical reference"],
+ [6535, "Some other canonical reference"]
+ ])"},
{"metadata/manufacturers-en.json",
R"([
["manufacturer_a_en", "manufacturer_a.json"],
@@ -149,6 +154,12 @@
captured_resolve_ppd_.push_back({code, contents});
}
+ // Capture the result of a ResolveUsbIds() call.
+ void CaptureResolveUsbIds(PpdProvider::CallbackResultCode code,
+ const std::string& contents) {
+ captured_resolve_usb_ids_.push_back({code, contents});
+ }
+
// Discard the result of a ResolvePpd() call.
void DiscardResolvePpd(PpdProvider::CallbackResultCode code,
const std::string& contents) {}
@@ -202,6 +213,9 @@
std::vector<std::pair<PpdProvider::CallbackResultCode, std::string>>
captured_resolve_ppd_;
+ std::vector<std::pair<PpdProvider::CallbackResultCode, std::string>>
+ captured_resolve_usb_ids_;
+
std::unique_ptr<net::TestURLRequestInterceptor> interceptor_;
base::ScopedTempDir ppd_cache_temp_dir_;
@@ -264,6 +278,46 @@
RunLocalizationTest("bogus", "en");
}
+// Test successful and unsuccessful usb resolutions.
+TEST_F(PpdProviderTest, UsbResolution) {
+ StartFakePpdServer();
+ auto provider = CreateProvider("en");
+
+ // Should get back "Some canonical reference"
+ provider->ResolveUsbIds(0x031f, 1592,
+ base::Bind(&PpdProviderTest::CaptureResolveUsbIds,
+ base::Unretained(this)));
+ // Should get back "Some other canonical reference"
+ provider->ResolveUsbIds(0x031f, 6535,
+ base::Bind(&PpdProviderTest::CaptureResolveUsbIds,
+ base::Unretained(this)));
+
+ // Extant vendor id, nonexistant device id, should get a NOT_FOUND
+ provider->ResolveUsbIds(0x031f, 8162,
+ base::Bind(&PpdProviderTest::CaptureResolveUsbIds,
+ base::Unretained(this)));
+
+ // Nonexistant vendor id, should get a NOT_FOUND in the real world, but
+ // the URL interceptor we're using considers all nonexistant files to
+ // be effectively CONNECTION REFUSED, so we just check for non-success
+ // on this one.
+ provider->ResolveUsbIds(1234, 1782,
+ base::Bind(&PpdProviderTest::CaptureResolveUsbIds,
+ base::Unretained(this)));
+ Drain(*provider);
+
+ ASSERT_EQ(captured_resolve_usb_ids_.size(), static_cast<size_t>(4));
+ EXPECT_EQ(captured_resolve_usb_ids_[0].first, PpdProvider::SUCCESS);
+ EXPECT_EQ(captured_resolve_usb_ids_[0].second, "Some canonical reference");
+ EXPECT_EQ(captured_resolve_usb_ids_[1].first, PpdProvider::SUCCESS);
+ EXPECT_EQ(captured_resolve_usb_ids_[1].second,
+ "Some other canonical reference");
+ EXPECT_EQ(captured_resolve_usb_ids_[2].first, PpdProvider::NOT_FOUND);
+ EXPECT_EQ(captured_resolve_usb_ids_[2].second, "");
+ EXPECT_FALSE(captured_resolve_usb_ids_[3].first == PpdProvider::SUCCESS);
+ EXPECT_EQ(captured_resolve_usb_ids_[3].second, "");
+}
+
// For convenience a null ResolveManufacturers callback target.
void ResolveManufacturersNop(PpdProvider::CallbackResultCode code,
const std::vector<std::string>& v) {}