blob: 042bbf581c264499ac00131af6ad15b13176fa0b [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef EXTENSIONS_BROWSER_API_PRINTER_PROVIDER_PRINTER_PROVIDER_API_H_
#define EXTENSIONS_BROWSER_API_PRINTER_PROVIDER_PRINTER_PROVIDER_API_H_
#include <string>
#include "base/callback_forward.h"
#include "base/memory/ref_counted.h"
#include "components/keyed_service/core/keyed_service.h"
#include "services/device/public/mojom/usb_device.mojom.h"
namespace base {
class DictionaryValue;
class ListValue;
class Value;
}
namespace content {
class BrowserContext;
}
namespace extensions {
class Extension;
struct PrinterProviderPrintJob;
}
namespace extensions {
// Implements chrome.printerProvider API events.
class PrinterProviderAPI : public KeyedService {
public:
using GetPrintersCallback =
base::RepeatingCallback<void(const base::ListValue& printers, bool done)>;
using GetCapabilityCallback =
base::OnceCallback<void(const base::DictionaryValue& capability)>;
using PrintCallback = base::OnceCallback<void(const base::Value& error)>;
using GetPrinterInfoCallback =
base::OnceCallback<void(const base::DictionaryValue& printer_info)>;
static PrinterProviderAPI* Create(content::BrowserContext* context);
// Returns generic error string for print request.
static std::string GetDefaultPrintError();
~PrinterProviderAPI() override {}
// Requests list of supported printers from extensions implementing
// chrome.printerProvider API. It dispatches
// chrome.printerProvider.onGetPrintersRequested event. The callback is
// called once for every extension handling the event with a list of its
// supported printers. The printer values reported by an extension are
// added "extensionId" property that is set to the ID of the extension
// returning the list and "extensionName" property set to the extension's
// name.
// Note that the "id" property of printer values reported by an extension are
// rewriten as "<extension_id>:<id>" to ensure they are unique across
// different extensions.
virtual void DispatchGetPrintersRequested(
const GetPrintersCallback& callback) = 0;
// Requests printer capability for a printer with id |printer_id|.
// |printer_id| should be one of the printer ids reported by |GetPrinters|
// callback.
// It dispatches chrome.printerProvider.onGetCapabilityRequested event
// to the extension that manages the printer (which can be determined from
// |printer_id| value).
// |callback| is passed a dictionary value containing printer capabilities as
// reported by the extension.
virtual void DispatchGetCapabilityRequested(
const std::string& printer_id,
GetCapabilityCallback callback) = 0;
// It dispatches chrome.printerProvider.onPrintRequested event with the
// provided print job. The event is dispatched only to the extension that
// manages printer with id |job.printer_id|.
// |callback| is passed the print status returned by the extension, and it
// must not be null.
virtual void DispatchPrintRequested(PrinterProviderPrintJob job,
PrintCallback callback) = 0;
// Returns print job associated with the print request with id |request_id|
// for extension |extension|.
// It should return NULL if the job for the request does not exist.
virtual const PrinterProviderPrintJob* GetPrintJob(const Extension* extension,
int request_id) const = 0;
// Dispatches a chrome.printerProvider.getUsbPrinterInfo event requesting
// information about |device_id|. The event is only dispatched to the
// extension identified by |extension_id|.
virtual void DispatchGetUsbPrinterInfoRequested(
const std::string& extension_id,
const device::mojom::UsbDeviceInfo& device,
GetPrinterInfoCallback callback) = 0;
};
} // namespace extensions
#endif // EXTENSIONS_BROWSER_API_PRINTER_PROVIDER_PRINTER_PROVIDER_API_H_