OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/ui/webui/print_preview_handler.h" | 5 #include "chrome/browser/ui/webui/print_preview_handler.h" |
6 | 6 |
| 7 #include "base/json/json_reader.h" |
7 #include "base/threading/thread.h" | 8 #include "base/threading/thread.h" |
8 #include "base/values.h" | 9 #include "base/values.h" |
| 10 #include "content/browser/browser_thread.h" |
9 #include "content/browser/renderer_host/render_view_host.h" | 11 #include "content/browser/renderer_host/render_view_host.h" |
10 #include "content/browser/browser_thread.h" | |
11 #include "printing/backend/print_backend.h" | 12 #include "printing/backend/print_backend.h" |
12 | 13 |
13 class EnumeratePrintersTaskProxy | 14 class EnumeratePrintersTaskProxy |
14 : public base::RefCountedThreadSafe<EnumeratePrintersTaskProxy, | 15 : public base::RefCountedThreadSafe<EnumeratePrintersTaskProxy, |
15 BrowserThread::DeleteOnUIThread> { | 16 BrowserThread::DeleteOnUIThread> { |
16 public: | 17 public: |
17 EnumeratePrintersTaskProxy(const base::WeakPtr<PrintPreviewHandler>& handler, | 18 EnumeratePrintersTaskProxy(const base::WeakPtr<PrintPreviewHandler>& handler, |
18 printing::PrintBackend* print_backend) | 19 printing::PrintBackend* print_backend) |
19 : handler_(handler), | 20 : handler_(handler), |
20 print_backend_(print_backend) { | 21 print_backend_(print_backend) { |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
72 | 73 |
73 void PrintPreviewHandler::HandleGetPrinters(const ListValue*) { | 74 void PrintPreviewHandler::HandleGetPrinters(const ListValue*) { |
74 scoped_refptr<EnumeratePrintersTaskProxy> task = | 75 scoped_refptr<EnumeratePrintersTaskProxy> task = |
75 new EnumeratePrintersTaskProxy(AsWeakPtr(), print_backend_.get()); | 76 new EnumeratePrintersTaskProxy(AsWeakPtr(), print_backend_.get()); |
76 BrowserThread::PostTask( | 77 BrowserThread::PostTask( |
77 BrowserThread::FILE, FROM_HERE, | 78 BrowserThread::FILE, FROM_HERE, |
78 NewRunnableMethod(task.get(), | 79 NewRunnableMethod(task.get(), |
79 &EnumeratePrintersTaskProxy::EnumeratePrinters)); | 80 &EnumeratePrintersTaskProxy::EnumeratePrinters)); |
80 } | 81 } |
81 | 82 |
82 void PrintPreviewHandler::HandlePrint(const ListValue*) { | 83 void PrintPreviewHandler::HandlePrint(const ListValue* args) { |
83 web_ui_->GetRenderViewHost()->PrintForPrintPreview(); | 84 std::string json_str; |
| 85 if (!args->GetString(0, &json_str)) { |
| 86 NOTREACHED() << "Could not read JSON argument"; |
| 87 return; |
| 88 } |
| 89 |
| 90 if (json_str.empty()) { |
| 91 NOTREACHED() << "Empty print job settings"; |
| 92 return; |
| 93 } |
| 94 scoped_ptr<DictionaryValue> settings(static_cast<DictionaryValue*>( |
| 95 base::JSONReader::Read(json_str, false))); |
| 96 if (!settings.get() || !settings->IsType(Value::TYPE_DICTIONARY)) { |
| 97 NOTREACHED() << "Print job settings must be a dictionary."; |
| 98 return; |
| 99 } |
| 100 |
| 101 if (settings->empty()) { |
| 102 NOTREACHED() << "Print job settings dictionary is empty"; |
| 103 return; |
| 104 } |
| 105 web_ui_->GetRenderViewHost()->PrintForPrintPreview(*settings); |
84 } | 106 } |
85 | 107 |
86 void PrintPreviewHandler::SendPrinterList(const ListValue& printers) { | 108 void PrintPreviewHandler::SendPrinterList(const ListValue& printers) { |
87 web_ui_->CallJavascriptFunction(L"setPrinters", printers); | 109 web_ui_->CallJavascriptFunction(L"setPrinters", printers); |
88 } | 110 } |
OLD | NEW |