1// Copyright (c) 2011 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_UI_WEBUI_PRINT_PREVIEW_HANDLER_H_
6#define CHROME_BROWSER_UI_WEBUI_PRINT_PREVIEW_HANDLER_H_
7#pragma once
8
9#include "base/memory/ref_counted.h"
10#include "base/memory/weak_ptr.h"
11#include "chrome/browser/ui/shell_dialogs.h"
12#include "content/browser/webui/web_ui.h"
13
14class FilePath;
15class PrintSystemTaskProxy;
16class FundamentalValue;
17
18namespace printing {
19class PrintBackend;
20}
21
22// The handler for Javascript messages related to the "print preview" dialog.
23class PrintPreviewHandler : public WebUIMessageHandler,
24                            public base::SupportsWeakPtr<PrintPreviewHandler>,
25                            public SelectFileDialog::Listener {
26 public:
27  PrintPreviewHandler();
28  virtual ~PrintPreviewHandler();
29
30  // WebUIMessageHandler implementation.
31  virtual void RegisterMessages();
32
33  // SelectFileDialog::Listener implementation.
34  virtual void FileSelected(const FilePath& path, int index, void* params);
35
36  // Displays a modal dialog, prompting the user to select a file.
37  void SelectFile(const FilePath& default_path);
38
39 private:
40  friend class PrintSystemTaskProxy;
41
42  // Get the list of printers. |args| is unused.
43  void HandleGetPrinters(const ListValue* args);
44
45  // Ask the initiator renderer to generate a preview.
46  // First element of |args| is a job settings JSON string.
47  void HandleGetPreview(const ListValue* args);
48
49  // Get the job settings from Web UI and initiate printing.
50  // First element of |args| is a job settings JSON string.
51  void HandlePrint(const ListValue* args);
52
53  // Get the printer capabilities.
54  // First element of |args| is the printer name.
55  void HandleGetPrinterCapabilities(const ListValue* args);
56
57  // Send the printer capabilities to the Web UI.
58  // |settings_info| contains printer capabilities information.
59  void SendPrinterCapabilities(const DictionaryValue& settings_info);
60
61  // Send the list of printers to the Web UI.
62  void SendPrinterList(const ListValue& printers,
63                       const FundamentalValue& default_printer_index);
64
65  // Helper function to process the color setting in the dictionary.
66  void ProcessColorSetting(const DictionaryValue& settings);
67
68  // Helper function to process the landscape setting in the dictionary.
69  void ProcessLandscapeSetting(const DictionaryValue& settings);
70
71  // Pointer to current print system.
72  scoped_refptr<printing::PrintBackend> print_backend_;
73
74  // The underlying dialog object.
75  scoped_refptr<SelectFileDialog> select_file_dialog_;
76
77  static FilePath* last_saved_path_;
78
79  DISALLOW_COPY_AND_ASSIGN(PrintPreviewHandler);
80};
81
82#endif  // CHROME_BROWSER_UI_WEBUI_PRINT_PREVIEW_HANDLER_H_
83