99 lines
3.1 KiB
C++
99 lines
3.1 KiB
C++
// 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 <memory>
|
|
|
|
#include "base/callback.h"
|
|
#include "base/compiler_specific.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 GetSettingsAskParam {
|
|
DEFAULTS,
|
|
ASK_USER,
|
|
};
|
|
|
|
PrinterQuery(int render_process_id, int render_view_id);
|
|
|
|
// PrintJobWorkerOwner implementation.
|
|
virtual void GetSettingsDone(const PrintSettings& new_settings,
|
|
PrintingContext::Result result) override;
|
|
virtual PrintJobWorker* DetachWorker(PrintJobWorkerOwner* new_owner) override;
|
|
virtual const PrintSettings& settings() const override;
|
|
virtual 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,
|
|
const base::Closure& callback);
|
|
|
|
// Updates the current settings with |new_settings| dictionary values.
|
|
void SetSettings(std::unique_ptr<base::DictionaryValue> 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:
|
|
virtual ~PrinterQuery();
|
|
|
|
// 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.
|
|
std::unique_ptr<PrintJobWorker> 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_
|