blob: 128706590d022bf0ac6941459e7ad6d16c1e4e2c [file] [log] [blame]
// Copyright 2015 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_UI_WEBUI_PRINT_PREVIEW_PRINTER_HANDLER_H_
#define CHROME_BROWSER_UI_WEBUI_PRINT_PREVIEW_PRINTER_HANDLER_H_
#include <memory>
#include <string>
#include "base/functional/callback.h"
#include "base/memory/ref_counted.h"
#include "base/memory/ref_counted_memory.h"
#include "base/values.h"
#include "build/build_config.h"
#include "chrome/common/buildflags.h"
namespace content {
class WebContents;
}
class Profile;
namespace printing {
class PrintPreviewStickySettings;
// Wrapper around PrinterProviderAPI to be used by print preview.
// It makes request lifetime management easier, and hides details of more
// complex operations like printing from the print preview handler. This class
// expects to be created and all functions called on the UI thread.
class PrinterHandler {
public:
using DefaultPrinterCallback =
base::OnceCallback<void(const std::string& printer_name)>;
using AddedPrintersCallback =
base::RepeatingCallback<void(base::Value::List printers)>;
using GetPrintersDoneCallback = base::OnceClosure;
// `capability` should contain a CDD with key `kSettingCapabilities`.
// It may also contain other information about the printer in a dictionary
// with key `kPrinter`.
// If `capability` does not contain a `kSettingCapabilities` key, this
// indicates a failure to retrieve capabilities. If the dictionary with key
// `kSettingCapabilities` is empty, this indicates capabilities were retrieved
// but the printer does not support any of the capability fields in a CDD.
using GetCapabilityCallback =
base::OnceCallback<void(base::Value::Dict capability)>;
using PrintCallback = base::OnceCallback<void(const base::Value& error)>;
using GetPrinterInfoCallback =
base::OnceCallback<void(const base::Value::Dict& printer_info)>;
#if BUILDFLAG(IS_CHROMEOS)
using GetEulaUrlCallback =
base::OnceCallback<void(const std::string& license)>;
using PrinterStatusRequestCallback = base::OnceCallback<void(
std::optional<base::Value::Dict> cups_printer_status)>;
#endif
// Creates an instance of a PrinterHandler for extension printers.
static std::unique_ptr<PrinterHandler> CreateForExtensionPrinters(
Profile* profile);
// Creates an instance of a PrinterHandler for PDF printer.
static std::unique_ptr<PrinterHandler> CreateForPdfPrinter(
Profile* profile,
content::WebContents* preview_web_contents,
PrintPreviewStickySettings* sticky_settings);
static std::unique_ptr<PrinterHandler> CreateForLocalPrinters(
content::WebContents* preview_web_contents,
Profile* profile);
virtual ~PrinterHandler() = default;
// Cancels all pending requests.
virtual void Reset() = 0;
// Returns the name of the default printer through |cb|. Must be overridden
// by implementations that expect this method to be called.
virtual void GetDefaultPrinter(DefaultPrinterCallback cb);
// Starts getting available printers.
// |added_printers_callback| should be called in the response when printers
// are found. May be called multiple times, or never if there are no printers
// to add.
// |done_callback| must be called exactly once when the search is complete.
virtual void StartGetPrinters(AddedPrintersCallback added_printers_callback,
GetPrintersDoneCallback done_callback) = 0;
// Starts getting printing capability of the printer with the provided
// destination ID.
// |callback| should be called in response to the request.
virtual void StartGetCapability(const std::string& destination_id,
GetCapabilityCallback callback) = 0;
// Starts granting access to the given provisional printer. The print handler
// will respond with more information about the printer including its non-
// provisional printer id. Must be overridden by implementations that expect
// this method to be called.
// |callback| should be called in response to the request.
virtual void StartGrantPrinterAccess(const std::string& printer_id,
GetPrinterInfoCallback callback);
// Starts a print request.
// |job_title|: The title used for print job.
// |settings|: The print job settings.
// |print_data|: The document bytes to print.
// |callback| should be called in the response to the request.
virtual void StartPrint(const std::u16string& job_title,
base::Value::Dict settings,
scoped_refptr<base::RefCountedMemory> print_data,
PrintCallback callback) = 0;
#if BUILDFLAG(IS_CHROMEOS)
// Starts getting the printer's PPD EULA URL with the provided destination ID.
// |destination_id|: The ID of the printer.
// |callback| should be called in response to the request.
virtual void StartGetEulaUrl(const std::string& destination_id,
GetEulaUrlCallback callback);
// Initiates a status request for specified printer.
// |printer_id|: Printer id.
// |callback|: should be called in response to the request.
virtual void StartPrinterStatusRequest(const std::string& printer_id,
PrinterStatusRequestCallback callback);
#endif
};
} // namespace printing
#endif // CHROME_BROWSER_UI_WEBUI_PRINT_PREVIEW_PRINTER_HANDLER_H_