| // Copyright 2022 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_CROSAPI_PRINTING_METRICS_ASH_H_ |
| #define CHROME_BROWSER_ASH_CROSAPI_PRINTING_METRICS_ASH_H_ |
| |
| #include "base/memory/weak_ptr.h" |
| #include "base/scoped_observation.h" |
| #include "chrome/browser/ash/printing/history/print_job_history_service.h" |
| #include "chrome/browser/ash/printing/history/print_job_info.pb.h" |
| #include "chrome/browser/profiles/profile.h" |
| #include "chromeos/crosapi/mojom/printing_metrics.mojom.h" |
| #include "mojo/public/cpp/bindings/pending_receiver.h" |
| #include "mojo/public/cpp/bindings/remote.h" |
| #include "mojo/public/cpp/bindings/unique_receiver_set.h" |
| #include "printing/buildflags/buildflags.h" |
| |
| #if !BUILDFLAG(USE_CUPS) |
| #error PrintingMetricsAsh must be used with the USE_CUPS flag. |
| #endif |
| |
| namespace crosapi { |
| // Ash implementation of crosapi::mojom::PrintingMetricsForProfile. |
| // This class communicates with ash::PrintJobHistory service for the given |
| // profile -- queries print jobs and listens to finished events. |
| class PrintingMetricsForProfileAsh |
| : public crosapi::mojom::PrintingMetricsForProfile, |
| public ash::PrintJobHistoryService::Observer { |
| public: |
| PrintingMetricsForProfileAsh( |
| Profile* profile, |
| mojo::PendingRemote<crosapi::mojom::PrintJobObserverForProfile> observer); |
| ~PrintingMetricsForProfileAsh() override; |
| |
| // crosapi::mojom::PrintingMetricsForProfile: |
| void GetPrintJobs(GetPrintJobsCallback) override; |
| |
| // ash::PrintJobHistoryService::Observer: |
| void OnPrintJobFinished( |
| const ash::printing::proto::PrintJobInfo& print_job_info) override; |
| void OnShutdown() override; |
| |
| private: |
| void OnPrintJobsRetrieved(GetPrintJobsCallback, |
| bool success, |
| std::vector<ash::printing::proto::PrintJobInfo>); |
| |
| raw_ptr<Profile> profile_ = nullptr; |
| |
| base::ScopedObservation<ash::PrintJobHistoryService, |
| ash::PrintJobHistoryService::Observer> |
| print_job_history_service_observation_{this}; |
| |
| mojo::Remote<crosapi::mojom::PrintJobObserverForProfile> observer_; |
| |
| base::WeakPtrFactory<PrintingMetricsForProfileAsh> weak_factory_{this}; |
| }; |
| |
| // Ash implementation for crosapi::mojom::PrintingMetrics. |
| // This class creates bridges between ash and lacros -- the actual |
| // processing happens in PrintingMetricsForProfileAsh. |
| class PrintingMetricsAsh : public crosapi::mojom::PrintingMetrics { |
| public: |
| PrintingMetricsAsh(); |
| ~PrintingMetricsAsh() override; |
| |
| // crosapi::mojom::PrintingMetrics: |
| void RegisterForMainProfile( |
| mojo::PendingReceiver<crosapi::mojom::PrintingMetricsForProfile> receiver, |
| mojo::PendingRemote<crosapi::mojom::PrintJobObserverForProfile> observer) |
| override; |
| |
| void RegisterForProfile( |
| Profile* profile, |
| mojo::PendingReceiver<crosapi::mojom::PrintingMetricsForProfile> receiver, |
| mojo::PendingRemote<crosapi::mojom::PrintJobObserverForProfile> observer); |
| |
| void BindReceiver( |
| mojo::PendingReceiver<crosapi::mojom::PrintingMetrics> receiver); |
| |
| private: |
| mojo::UniqueReceiverSet<crosapi::mojom::PrintingMetricsForProfile> receivers_; |
| |
| mojo::ReceiverSet<crosapi::mojom::PrintingMetrics> crosapi_receivers_; |
| }; |
| |
| } // namespace crosapi |
| |
| #endif // CHROME_BROWSER_ASH_CROSAPI_PRINTING_METRICS_ASH_H_ |