#ifndef CHROME_BROWSER_ASH_CROSAPI_LOCAL_PRINTER_ASH_H_
#define CHROME_BROWSER_ASH_CROSAPI_LOCAL_PRINTER_ASH_H_
#include <string>
#include <vector>
#include "base/memory/scoped_refptr.h"
#include "base/memory/weak_ptr.h"
#include "base/scoped_observation.h"
#include "chrome/browser/ash/printing/cups_print_job.h"
#include "chrome/browser/ash/printing/cups_print_job_manager.h"
#include "chrome/browser/ash/printing/cups_printers_manager.h"
#include "chrome/browser/ash/printing/print_servers_manager.h"
#include "chrome/browser/profiles/profile_manager_observer.h"
#include "chromeos/crosapi/mojom/local_printer.mojom.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/receiver_set.h"
#include "mojo/public/cpp/bindings/remote_set.h"
class Profile;
class ProfileManager;
namespace ash {
struct PrintServersConfig;
namespace printing {
class IppClientInfoCalculator;
}
}
namespace chromeos {
class PpdProvider;
}
namespace crosapi {
class LocalPrinterAsh : public mojom::LocalPrinter,
public ProfileManagerObserver,
public ash::CupsPrintJobManager::Observer,
public ash::PrintServersManager::Observer,
public ash::CupsPrintersManager::LocalPrintersObserver {
public:
LocalPrinterAsh();
LocalPrinterAsh(const LocalPrinterAsh&) = delete;
LocalPrinterAsh& operator=(const LocalPrinterAsh&) = delete;
~LocalPrinterAsh() override;
static mojom::PrintServersConfigPtr ConfigToMojom(
const ash::PrintServersConfig& config);
void BindReceiver(mojo::PendingReceiver<mojom::LocalPrinter> receiver);
void OnProfileAdded(Profile* profile) override;
void OnProfileManagerDestroying() override;
void OnPrintJobCreated(base::WeakPtr<ash::CupsPrintJob> job) override;
void OnPrintJobStarted(base::WeakPtr<ash::CupsPrintJob> job) override;
void OnPrintJobUpdated(base::WeakPtr<ash::CupsPrintJob> job) override;
void OnPrintJobSuspended(base::WeakPtr<ash::CupsPrintJob> job) override;
void OnPrintJobResumed(base::WeakPtr<ash::CupsPrintJob> job) override;
void OnPrintJobDone(base::WeakPtr<ash::CupsPrintJob> job) override;
void OnPrintJobError(base::WeakPtr<ash::CupsPrintJob> job) override;
void OnPrintJobCancelled(base::WeakPtr<ash::CupsPrintJob> job) override;
void OnPrintServersChanged(const ash::PrintServersConfig& config) override;
void OnServerPrintersChanged(
const std::vector<ash::PrinterDetector::DetectedPrinter>&) override;
void OnLocalPrintersUpdated() override;
void GetPrinters(GetPrintersCallback callback) override;
void GetCapability(const std::string& printer_id,
GetCapabilityCallback callback) override;
void GetEulaUrl(const std::string& printer_id,
GetEulaUrlCallback callback) override;
void GetStatus(const std::string& printer_id,
GetStatusCallback callback) override;
void ShowSystemPrintSettings(
ShowSystemPrintSettingsCallback callback) override;
void CreatePrintJob(mojom::PrintJobPtr job,
CreatePrintJobCallback callback) override;
void CancelPrintJob(const std::string& printer_id,
unsigned int job_id,
CancelPrintJobCallback callback) override;
void GetPrintServersConfig(GetPrintServersConfigCallback callback) override;
void ChoosePrintServers(const std::vector<std::string>& print_server_ids,
ChoosePrintServersCallback callback) override;
void AddPrintServerObserver(
mojo::PendingRemote<mojom::PrintServerObserver> remote,
AddPrintServerObserverCallback callback) override;
void GetPolicies(GetPoliciesCallback callback) override;
void GetUsernamePerPolicy(GetUsernamePerPolicyCallback callback) override;
void GetPrinterTypeDenyList(GetPrinterTypeDenyListCallback callback) override;
void AddPrintJobObserver(mojo::PendingRemote<mojom::PrintJobObserver> remote,
mojom::PrintJobSource source,
AddPrintJobObserverCallback callback) override;
void AddLocalPrintersObserver(
mojo::PendingRemote<mojom::LocalPrintersObserver> remote,
AddLocalPrintersObserverCallback callback) override;
void GetOAuthAccessToken(const std::string& printer_id,
GetOAuthAccessTokenCallback callback) override;
void GetIppClientInfo(const std::string& printer_id,
GetIppClientInfoCallback callback) override;
private:
void NotifyPrintJobUpdate(base::WeakPtr<ash::CupsPrintJob> job,
mojom::PrintJobStatus status);
virtual Profile* GetProfile();
virtual scoped_refptr<chromeos::PpdProvider> CreatePpdProvider(
Profile* profile);
virtual ash::printing::IppClientInfoCalculator* GetIppClientInfoCalculator();
base::ScopedObservation<ProfileManager, LocalPrinterAsh>
profile_manager_observer_{this};
bool observers_registered_ = false;
std::unique_ptr<ash::printing::IppClientInfoCalculator>
ipp_client_info_calculator_;
mojo::ReceiverSet<mojom::LocalPrinter> receivers_;
mojo::RemoteSet<mojom::PrintServerObserver> print_server_remotes_;
mojo::RemoteSet<mojom::PrintJobObserver> print_job_remotes_;
mojo::RemoteSet<mojom::PrintJobObserver> extension_print_job_remotes_;
mojo::RemoteSet<mojom::PrintJobObserver> iwa_print_job_remotes_;
mojo::RemoteSet<mojom::LocalPrintersObserver>
local_printers_observer_remotes_;
};
}
#endif