- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / printing / printer_query.h
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 class PrintingUIWebContentsObserver;
15
16 namespace base {
17 class DictionaryValue;
18 class MessageLoop;
19 }
20
21 namespace printing {
22
23 class PrintDestinationInterface;
24 class PrintJobWorker;
25
26 // Query the printer for settings.
27 class PrinterQuery : public PrintJobWorkerOwner {
28  public:
29   // GetSettings() UI parameter.
30   enum GetSettingsAskParam {
31     DEFAULTS,
32     ASK_USER,
33   };
34
35   PrinterQuery();
36
37   // PrintJobWorkerOwner implementation.
38   virtual void GetSettingsDone(const PrintSettings& new_settings,
39                                PrintingContext::Result result) OVERRIDE;
40   virtual PrintJobWorker* DetachWorker(PrintJobWorkerOwner* new_owner) OVERRIDE;
41   virtual base::MessageLoop* message_loop() OVERRIDE;
42   virtual const PrintSettings& settings() const OVERRIDE;
43   virtual int cookie() const OVERRIDE;
44
45   // Initializes the printing context. It is fine to call this function multiple
46   // times to reinitialize the settings. |web_contents_observer| can be queried
47   // to find the owner of the print setting dialog box. It is unused when
48   // |ask_for_user_settings| is DEFAULTS.
49   void GetSettings(
50       GetSettingsAskParam ask_user_for_settings,
51       scoped_ptr<PrintingUIWebContentsObserver> web_contents_observer,
52       int expected_page_count,
53       bool has_selection,
54       MarginType margin_type,
55       const base::Closure& callback);
56
57   // Updates the current settings with |new_settings| dictionary values.
58   void SetSettings(const base::DictionaryValue& new_settings,
59                    const base::Closure& callback);
60
61   // Set a destination for the worker.
62   void SetWorkerDestination(PrintDestinationInterface* destination);
63
64   // Stops the worker thread since the client is done with this object.
65   void StopWorker();
66
67   // Returns true if a GetSettings() call is pending completion.
68   bool is_callback_pending() const;
69
70   PrintingContext::Result last_status() const { return last_status_; }
71
72   // Returns if a worker thread is still associated to this instance.
73   bool is_valid() const;
74
75  private:
76   virtual ~PrinterQuery();
77
78   // Lazy create the worker thread. There is one worker thread per print job.
79   void StartWorker(const base::Closure& callback);
80
81   // Main message loop reference. Used to send notifications in the right
82   // thread.
83   base::MessageLoop* const io_message_loop_;
84
85   // All the UI is done in a worker thread because many Win32 print functions
86   // are blocking and enters a message loop without your consent. There is one
87   // worker thread per print job.
88   scoped_ptr<PrintJobWorker> worker_;
89
90   // Cache of the print context settings for access in the UI thread.
91   PrintSettings settings_;
92
93   // Is the Print... dialog box currently shown.
94   bool is_print_dialog_box_shown_;
95
96   // Cookie that make this instance unique.
97   int cookie_;
98
99   // Results from the last GetSettingsDone() callback.
100   PrintingContext::Result last_status_;
101
102   // Callback waiting to be run.
103   base::Closure callback_;
104
105   DISALLOW_COPY_AND_ASSIGN(PrinterQuery);
106 };
107
108 }  // namespace printing
109
110 #endif  // CHROME_BROWSER_PRINTING_PRINTER_QUERY_H_