Home | History | Annotate | Download | only in printing
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CHROME_BROWSER_PRINTING_PRINTER_QUERY_H_
      6 #define CHROME_BROWSER_PRINTING_PRINTER_QUERY_H_
      7 
      8 #include "base/callback.h"
      9 #include "base/compiler_specific.h"
     10 #include "base/memory/scoped_ptr.h"
     11 #include "chrome/browser/printing/print_job_worker_owner.h"
     12 #include "printing/print_job_constants.h"
     13 
     14 namespace base {
     15 class DictionaryValue;
     16 }
     17 
     18 namespace printing {
     19 
     20 class PrintDestinationInterface;
     21 class PrintJobWorker;
     22 
     23 // Query the printer for settings.
     24 class PrinterQuery : public PrintJobWorkerOwner {
     25  public:
     26   // GetSettings() UI parameter.
     27   enum GetSettingsAskParam {
     28     DEFAULTS,
     29     ASK_USER,
     30   };
     31 
     32   PrinterQuery(int render_process_id, int render_view_id);
     33 
     34   // PrintJobWorkerOwner implementation.
     35   virtual void GetSettingsDone(const PrintSettings& new_settings,
     36                                PrintingContext::Result result) OVERRIDE;
     37   virtual PrintJobWorker* DetachWorker(PrintJobWorkerOwner* new_owner) OVERRIDE;
     38   virtual const PrintSettings& settings() const OVERRIDE;
     39   virtual int cookie() const OVERRIDE;
     40 
     41   // Initializes the printing context. It is fine to call this function multiple
     42   // times to reinitialize the settings. |web_contents_observer| can be queried
     43   // to find the owner of the print setting dialog box. It is unused when
     44   // |ask_for_user_settings| is DEFAULTS.
     45   void GetSettings(
     46       GetSettingsAskParam ask_user_for_settings,
     47       int expected_page_count,
     48       bool has_selection,
     49       MarginType margin_type,
     50       const base::Closure& callback);
     51 
     52   // Updates the current settings with |new_settings| dictionary values.
     53   void SetSettings(scoped_ptr<base::DictionaryValue> new_settings,
     54                    const base::Closure& callback);
     55 
     56   // Stops the worker thread since the client is done with this object.
     57   void StopWorker();
     58 
     59   // Returns true if a GetSettings() call is pending completion.
     60   bool is_callback_pending() const;
     61 
     62   PrintingContext::Result last_status() const { return last_status_; }
     63 
     64   // Returns if a worker thread is still associated to this instance.
     65   bool is_valid() const;
     66 
     67  private:
     68   virtual ~PrinterQuery();
     69 
     70   // Lazy create the worker thread. There is one worker thread per print job.
     71   void StartWorker(const base::Closure& callback);
     72 
     73   // All the UI is done in a worker thread because many Win32 print functions
     74   // are blocking and enters a message loop without your consent. There is one
     75   // worker thread per print job.
     76   scoped_ptr<PrintJobWorker> worker_;
     77 
     78   // Cache of the print context settings for access in the UI thread.
     79   PrintSettings settings_;
     80 
     81   // Is the Print... dialog box currently shown.
     82   bool is_print_dialog_box_shown_;
     83 
     84   // Cookie that make this instance unique.
     85   int cookie_;
     86 
     87   // Results from the last GetSettingsDone() callback.
     88   PrintingContext::Result last_status_;
     89 
     90   // Callback waiting to be run.
     91   base::Closure callback_;
     92 
     93   DISALLOW_COPY_AND_ASSIGN(PrinterQuery);
     94 };
     95 
     96 }  // namespace printing
     97 
     98 #endif  // CHROME_BROWSER_PRINTING_PRINTER_QUERY_H_
     99