| // Copyright 2020 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_ASH_PRINTING_PRINT_MANAGEMENT_PRINTING_MANAGER_H_ |
| #define CHROME_BROWSER_ASH_PRINTING_PRINT_MANAGEMENT_PRINTING_MANAGER_H_ |
| |
| #include "base/memory/raw_ptr.h" |
| #include "base/memory/weak_ptr.h" |
| #include "base/scoped_observation.h" |
| #include "chrome/browser/ash/printing/cups_print_job_manager.h" |
| #include "chrome/browser/ash/printing/history/print_job_info.pb.h" |
| #include "chromeos/components/print_management/mojom/printing_manager.mojom.h" |
| #include "components/history/core/browser/history_service.h" |
| #include "components/history/core/browser/history_service_observer.h" |
| #include "components/keyed_service/core/keyed_service.h" |
| #include "components/prefs/pref_member.h" |
| #include "mojo/public/cpp/bindings/pending_receiver.h" |
| #include "mojo/public/cpp/bindings/receiver.h" |
| #include "mojo/public/cpp/bindings/remote_set.h" |
| |
| class PrefService; |
| |
| namespace history { |
| class DeletionInfo; |
| class HistoryService; |
| } // namespace history |
| |
| namespace ash { |
| |
| class PrintJobHistoryService; |
| |
| namespace printing { |
| namespace print_management { |
| |
| class PrintingManager : public chromeos::printing::printing_manager::mojom:: |
| PrintingMetadataProvider, |
| public KeyedService, |
| public history::HistoryServiceObserver, |
| public CupsPrintJobManager::Observer { |
| public: |
| PrintingManager(PrintJobHistoryService* print_job_history_service, |
| history::HistoryService* history_service, |
| CupsPrintJobManager* cups_print_job_manager, |
| PrefService* pref_service); |
| |
| ~PrintingManager() override; |
| |
| PrintingManager(const PrintingManager&) = delete; |
| PrintingManager& operator=(const PrintingManager&) = delete; |
| |
| // printing_chromeos::printing::manager::mojom::PrintingMetadataProvider: |
| void GetPrintJobs(GetPrintJobsCallback callback) override; |
| void GetPrintJobHistoryExpirationPeriod( |
| GetPrintJobHistoryExpirationPeriodCallback callback) override; |
| void DeleteAllPrintJobs(DeleteAllPrintJobsCallback callback) override; |
| void ObservePrintJobs( |
| mojo::PendingRemote< |
| chromeos::printing::printing_manager::mojom::PrintJobsObserver> |
| observer, |
| ObservePrintJobsCallback callback) override; |
| void CancelPrintJob(const std::string& id, |
| CancelPrintJobCallback callback) override; |
| void GetDeletePrintJobHistoryAllowedByPolicy( |
| GetDeletePrintJobHistoryAllowedByPolicyCallback callback) override; |
| |
| void BindInterface( |
| mojo::PendingReceiver< |
| chromeos::printing::printing_manager::mojom::PrintingMetadataProvider> |
| pending_receiver); |
| |
| private: |
| // KeyedService: |
| void Shutdown() override; |
| |
| // history::HistoryServiceObserver: |
| void OnHistoryDeletions(history::HistoryService* history_service, |
| const history::DeletionInfo& deletion_info) override; |
| |
| // CupsPrintJobManager::Observer impls |
| void OnPrintJobCreated(base::WeakPtr<CupsPrintJob> job) override; |
| void OnPrintJobStarted(base::WeakPtr<CupsPrintJob> job) override; |
| void OnPrintJobUpdated(base::WeakPtr<CupsPrintJob> job) override; |
| void OnPrintJobSuspended(base::WeakPtr<CupsPrintJob> job) override; |
| void OnPrintJobResumed(base::WeakPtr<CupsPrintJob> job) override; |
| void OnPrintJobDone(base::WeakPtr<CupsPrintJob> job) override; |
| void OnPrintJobError(base::WeakPtr<CupsPrintJob> job) override; |
| void OnPrintJobCancelled(base::WeakPtr<CupsPrintJob> job) override; |
| |
| // PrintJobHistoryObserver |
| void OnPrintJobsRetrieved( |
| GetPrintJobsCallback callback, |
| bool success, |
| std::vector<proto::PrintJobInfo> print_job_info_protos); |
| |
| // Callback function that is called when the print jobs are cleared from the |
| // local database. |
| void OnPrintJobsDeleted(bool success); |
| |
| // Returns true if the policy pref is enabled to allow history deletions. |
| bool IsHistoryDeletionAllowedByPolicy(); |
| |
| // Stores |job| to local cache and notifies observers of an update to |job|. |
| void UpdatePrintJob(base::WeakPtr<CupsPrintJob> job); |
| |
| // Removes |job| from the local cache and notifies observers of an update to |
| // |job|. |
| void RemoveAndUpdatePrintJob(base::WeakPtr<CupsPrintJob> job); |
| |
| // Notifies all observers in |print_job_observers_| of an update to a print |
| // job. |
| void NotifyPrintJobObservers(base::WeakPtr<CupsPrintJob> job); |
| |
| // Local cache that stores all ongoing print jobs. |
| std::map<std::string, base::WeakPtr<CupsPrintJob>> active_print_jobs_; |
| |
| // Set of PrintJobsObserver mojom::remotes, each remote is bound to a |
| // renderer process receiver. Automatically handles removing disconnected |
| // receivers. |
| mojo::RemoteSet< |
| chromeos::printing::printing_manager::mojom::PrintJobsObserver> |
| print_job_observers_; |
| |
| mojo::Receiver< |
| chromeos::printing::printing_manager::mojom::PrintingMetadataProvider> |
| receiver_{this}; |
| |
| // Policy-controlled pref that determines whether print job history can be |
| // deleted. |
| BooleanPrefMember delete_print_job_history_allowed_; |
| |
| // Not owned, this is the intermediate layer to interact with the print |
| // job local database. |
| raw_ptr<PrintJobHistoryService, DanglingUntriaged> print_job_history_service_; |
| |
| // Not owned, this provides the necessary observers to observe when browser |
| // history has been cleared. |
| raw_ptr<history::HistoryService> history_service_; |
| |
| // Not owned, this provides the necessary observers to observe when an |
| // ongoing print job has been updated. |
| raw_ptr<CupsPrintJobManager> cups_print_job_manager_; |
| |
| IntegerPrefMember print_job_history_expiration_period_; |
| |
| base::ScopedObservation<history::HistoryService, |
| history::HistoryServiceObserver> |
| history_service_observation_{this}; |
| |
| base::WeakPtrFactory<PrintingManager> weak_ptr_factory_{this}; |
| }; |
| |
| } // namespace print_management |
| } // namespace printing |
| } // namespace ash |
| |
| #endif // CHROME_BROWSER_ASH_PRINTING_PRINT_MANAGEMENT_PRINTING_MANAGER_H_ |