| 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 |