// 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_PRINTER_QUERY_H_ #define CHROME_BROWSER_PRINTING_PRINTER_QUERY_H_ #include "base/callback.h" #include "base/compiler_specific.h" #include "base/macros.h" #include "base/memory/scoped_ptr.h" #include "chrome/browser/printing/print_job_worker_owner.h" #include "printing/print_job_constants.h" namespace base { class DictionaryValue; } namespace printing { class PrintDestinationInterface; class PrintJobWorker; // Query the printer for settings. class PrinterQuery : public PrintJobWorkerOwner { public: // GetSettings() UI parameter. enum class GetSettingsAskParam { DEFAULTS, ASK_USER, }; PrinterQuery(int render_process_id, int render_view_id); // PrintJobWorkerOwner implementation. void GetSettingsDone(const PrintSettings& new_settings, PrintingContext::Result result) override; PrintJobWorker* DetachWorker(PrintJobWorkerOwner* new_owner) override; const PrintSettings& settings() const override; int cookie() const override; // Initializes the printing context. It is fine to call this function multiple // times to reinitialize the settings. |web_contents_observer| can be queried // to find the owner of the print setting dialog box. It is unused when // |ask_for_user_settings| is DEFAULTS. void GetSettings( GetSettingsAskParam ask_user_for_settings, int expected_page_count, bool has_selection, MarginType margin_type, bool is_scripted, const base::Closure& callback); // Updates the current settings with |new_settings| dictionary values. void SetSettings(scoped_ptr new_settings, const base::Closure& callback); // Stops the worker thread since the client is done with this object. void StopWorker(); // Returns true if a GetSettings() call is pending completion. bool is_callback_pending() const; PrintingContext::Result last_status() const { return last_status_; } // Returns if a worker thread is still associated to this instance. bool is_valid() const; private: ~PrinterQuery() override; // Lazy create the worker thread. There is one worker thread per print job. void StartWorker(const base::Closure& callback); // All the UI is done in a worker thread because many Win32 print functions // are blocking and enters a message loop without your consent. There is one // worker thread per print job. scoped_ptr worker_; // Cache of the print context settings for access in the UI thread. PrintSettings settings_; // Is the Print... dialog box currently shown. bool is_print_dialog_box_shown_; // Cookie that make this instance unique. int cookie_; // Results from the last GetSettingsDone() callback. PrintingContext::Result last_status_; // Callback waiting to be run. base::Closure callback_; DISALLOW_COPY_AND_ASSIGN(PrinterQuery); }; } // namespace printing #endif // CHROME_BROWSER_PRINTING_PRINTER_QUERY_H_