| Index: extensions/browser/api/printer_provider/printer_provider_apitest.cc
|
| diff --git a/extensions/browser/api/printer_provider/printer_provider_apitest.cc b/extensions/browser/api/printer_provider/printer_provider_apitest.cc
|
| index ccec1a643b9cb0b7f91a3c6de46f5ff7e55049ed..868dbcdfc90496db044efe4243e003d64c2a720c 100644
|
| --- a/extensions/browser/api/printer_provider/printer_provider_apitest.cc
|
| +++ b/extensions/browser/api/printer_provider/printer_provider_apitest.cc
|
| @@ -13,6 +13,8 @@
|
| #include "base/run_loop.h"
|
| #include "base/strings/stringprintf.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| +#include "device/usb/mock_usb_device.h"
|
| +#include "device/usb/mock_usb_service.h"
|
| #include "extensions/browser/api/printer_provider/printer_provider_api.h"
|
| #include "extensions/browser/api/printer_provider/printer_provider_api_factory.h"
|
| #include "extensions/browser/api/printer_provider/printer_provider_print_job.h"
|
| @@ -24,6 +26,9 @@
|
| #include "extensions/test/result_catcher.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| +using device::MockUsbDevice;
|
| +using device::MockUsbService;
|
| +
|
| namespace extensions {
|
|
|
| namespace {
|
| @@ -70,6 +75,17 @@ void RecordDictAndRunCallback(std::string* result,
|
| callback.Run();
|
| }
|
|
|
| +// Callback for PrinterProvider::DispatchGrantUsbPrinterAccess calls.
|
| +// It expects |value| to equal |expected_value| and runs |callback|.
|
| +void ExpectValueAndRunCallback(const base::Value* expected_value,
|
| + const base::Closure& callback,
|
| + const base::DictionaryValue& value) {
|
| + EXPECT_TRUE(value.Equals(expected_value));
|
| + if (!callback.is_null()) {
|
| + callback.Run();
|
| + }
|
| +}
|
| +
|
| // Tests for chrome.printerProvider API.
|
| class PrinterProviderApiTest : public ShellApiTest {
|
| public:
|
| @@ -90,6 +106,15 @@ class PrinterProviderApiTest : public ShellApiTest {
|
| ->DispatchGetPrintersRequested(callback);
|
| }
|
|
|
| + void StartGrantUsbPrinterAccess(
|
| + const std::string& extension_id,
|
| + int device_id,
|
| + const PrinterProviderAPI::UsbAccessGrantedCallback& callback) {
|
| + PrinterProviderAPIFactory::GetInstance()
|
| + ->GetForBrowserContext(browser_context())
|
| + ->DispatchGrantUsbPrinterAccess(extension_id, device_id, callback);
|
| + }
|
| +
|
| void StartPrintRequestWithNoData(
|
| const std::string& extension_id,
|
| const PrinterProviderAPI::PrintCallback& callback) {
|
| @@ -281,10 +306,13 @@ class PrinterProviderApiTest : public ShellApiTest {
|
| ASSERT_EQ(expected_printers.size(), printers.GetSize());
|
| for (const base::Value* printer_value : expected_printers) {
|
| EXPECT_TRUE(printers.Find(*printer_value) != printers.end())
|
| - << "Unabe to find " << *printer_value << " in " << printers;
|
| + << "Unable to find " << *printer_value << " in " << printers;
|
| }
|
| }
|
|
|
| + protected:
|
| + MockUsbService usb_service_;
|
| +
|
| private:
|
| // Initializes |data_dir_| if needed and creates a file in it containing
|
| // provided data.
|
| @@ -758,6 +786,98 @@ IN_PROC_BROWSER_TEST_F(PrinterProviderApiTest, GetPrintersInvalidPrinterValue) {
|
| EXPECT_TRUE(printers.empty());
|
| }
|
|
|
| +IN_PROC_BROWSER_TEST_F(PrinterProviderApiTest, GetUsbPrintersTwoExtensions) {
|
| + ResultCatcher catcher;
|
| + usb_service_.AddDevice(new MockUsbDevice(0, 0, "Google", "USB Printer", ""));
|
| + usb_service_.AddDevice(new MockUsbDevice(0, 1, "Google", "USB Printer", ""));
|
| +
|
| + std::string extension_id_1;
|
| + InitializePrinterProviderTestApp("api_test/printer_provider/usb_printers",
|
| + "OK", &extension_id_1);
|
| + ASSERT_FALSE(extension_id_1.empty());
|
| +
|
| + std::string extension_id_2;
|
| + InitializePrinterProviderTestApp(
|
| + "api_test/printer_provider/usb_printers_second", "OK", &extension_id_2);
|
| + ASSERT_FALSE(extension_id_2.empty());
|
| +
|
| + base::ListValue printers;
|
| + {
|
| + base::RunLoop run_loop;
|
| + StartGetPrintersRequest(base::Bind(&AppendPrintersAndRunCallbackIfDone,
|
| + &printers, run_loop.QuitClosure()));
|
| + run_loop.Run();
|
| + }
|
| +
|
| + ScopedVector<base::Value> expected_printers;
|
| + expected_printers.push_back(
|
| + DictionaryBuilder()
|
| + .Set("extensions", ListBuilder()
|
| + .Append(DictionaryBuilder()
|
| + .Set("extensionId", extension_id_2)
|
| + .Set("extensionName",
|
| + "Test USB printer provider"))
|
| + .Append(DictionaryBuilder()
|
| + .Set("extensionId", extension_id_1)
|
| + .Set("extensionName",
|
| + "Test USB printer provider")))
|
| + .Set("name", "USB Printer")
|
| + .Set("usbDevice", 0)
|
| + .Build());
|
| + expected_printers.push_back(
|
| + DictionaryBuilder()
|
| + .Set("extensions",
|
| + ListBuilder().Append(
|
| + DictionaryBuilder()
|
| + .Set("extensionId", extension_id_2)
|
| + .Set("extensionName", "Test USB printer provider")))
|
| + .Set("name", "USB Printer")
|
| + .Set("usbDevice", 1)
|
| + .Build());
|
| +
|
| + ValidatePrinterListValue(printers, expected_printers);
|
| +
|
| + scoped_ptr<base::Value> expected_printer_info(
|
| + DictionaryBuilder()
|
| + .Set("description", "This printer is a USB device.")
|
| + .Set("id", "granted-0")
|
| + .Set("name", "Test Printer")
|
| + .Set("usbDevice", 0)
|
| + .Build());
|
| + {
|
| + base::RunLoop run_loop;
|
| + StartGrantUsbPrinterAccess(
|
| + extension_id_1, 0,
|
| + base::Bind(&ExpectValueAndRunCallback, expected_printer_info.get(),
|
| + run_loop.QuitClosure()));
|
| + run_loop.Run();
|
| + }
|
| +
|
| + printers.Clear();
|
| + {
|
| + base::RunLoop run_loop;
|
| + StartGetPrintersRequest(base::Bind(&AppendPrintersAndRunCallbackIfDone,
|
| + &printers, run_loop.QuitClosure()));
|
| + run_loop.Run();
|
| + }
|
| +
|
| + expected_printers.push_back(
|
| + DictionaryBuilder()
|
| + .Set("description", "This printer is a USB device.")
|
| + .Set("extensionId", extension_id_1)
|
| + .Set("extensionName", "Test USB printer provider")
|
| + .Set("id",
|
| + base::StringPrintf("%s:enumerated-0", extension_id_1.c_str()))
|
| + .Set("name", "Test Printer")
|
| + .Set("usbDevice", 0)
|
| + .Build());
|
| +
|
| + ValidatePrinterListValue(printers, expected_printers);
|
| +
|
| + ASSERT_TRUE(catcher.GetNextResult()) << catcher.message();
|
| + ASSERT_TRUE(catcher.GetNextResult()) << catcher.message();
|
| +}
|
| +
|
| } // namespace
|
|
|
| } // namespace extensions
|
|
|