123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- // Copyright (c) 2012 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 CHROME_BROWSER_PRINTING_PRINT_JOB_MANAGER_H_
- #define CHROME_BROWSER_PRINTING_PRINT_JOB_MANAGER_H_
- #include <memory>
- #include <set>
- #include <vector>
- #include "base/logging.h"
- #include "base/macros.h"
- #include "base/memory/ref_counted.h"
- #include "base/synchronization/lock.h"
- #include "content/public/browser/notification_observer.h"
- #include "content/public/browser/notification_registrar.h"
- namespace printing {
- class JobEventDetails;
- class PrintJob;
- class PrinterQuery;
- class PrintQueriesQueue : public base::RefCountedThreadSafe<PrintQueriesQueue> {
- public:
- PrintQueriesQueue();
- // Queues a semi-initialized worker thread. Can be called from any thread.
- // Current use case is queuing from the I/O thread.
- // TODO(maruel): Have them vanish after a timeout (~5 minutes?)
- void QueuePrinterQuery(PrinterQuery* job);
- // Pops a queued PrintJobWorkerOwner object that was previously queued or
- // create new one. Can be called from any thread.
- scoped_refptr<PrinterQuery> PopPrinterQuery(int document_cookie);
- // Creates new query.
- scoped_refptr<PrinterQuery> CreatePrinterQuery(int render_process_id,
- int render_frame_id);
- void Shutdown();
- private:
- friend class base::RefCountedThreadSafe<PrintQueriesQueue>;
- typedef std::vector<scoped_refptr<PrinterQuery>> PrinterQueries;
- virtual ~PrintQueriesQueue();
- // Used to serialize access to queued_workers_.
- base::Lock lock_;
- PrinterQueries queued_queries_;
- DISALLOW_COPY_AND_ASSIGN(PrintQueriesQueue);
- };
- class PrintJobManager : public content::NotificationObserver {
- public:
- PrintJobManager();
- ~PrintJobManager() override;
- // On browser quit, we should wait to have the print job finished.
- void Shutdown();
- // content::NotificationObserver
- void Observe(int type,
- const content::NotificationSource& source,
- const content::NotificationDetails& details) override;
- // Returns queries queue. Never returns NULL. Must be called on Browser UI
- // Thread. Reference could be stored and used from any thread.
- scoped_refptr<PrintQueriesQueue> queue();
- private:
- typedef std::set<scoped_refptr<PrintJob>> PrintJobs;
- // Processes a NOTIFY_PRINT_JOB_EVENT notification.
- void OnPrintJobEvent(PrintJob* print_job,
- const JobEventDetails& event_details);
- // Stops all printing jobs. If wait_for_finish is true, tries to give jobs
- // a chance to complete before stopping them.
- void StopJobs(bool wait_for_finish);
- content::NotificationRegistrar registrar_;
- // Current print jobs that are active.
- PrintJobs current_jobs_;
- scoped_refptr<PrintQueriesQueue> queue_;
- bool is_shutdown_;
- DISALLOW_COPY_AND_ASSIGN(PrintJobManager);
- };
- } // namespace printing
- #endif // CHROME_BROWSER_PRINTING_PRINT_JOB_MANAGER_H_
|