| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/settings/chromeos/cups_printers_handler.h" | 5 #include "chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
| 11 #include "base/memory/ptr_util.h" | 11 #include "base/memory/ptr_util.h" |
| 12 #include "base/path_service.h" |
| 12 #include "base/strings/string_util.h" | 13 #include "base/strings/string_util.h" |
| 13 #include "base/values.h" | 14 #include "base/values.h" |
| 15 #include "chrome/browser/browser_process.h" |
| 14 #include "chrome/browser/chromeos/printing/printer_pref_manager_factory.h" | 16 #include "chrome/browser/chromeos/printing/printer_pref_manager_factory.h" |
| 15 #include "chrome/browser/download/download_prefs.h" | 17 #include "chrome/browser/download/download_prefs.h" |
| 16 #include "chrome/browser/profiles/profile.h" | 18 #include "chrome/browser/profiles/profile.h" |
| 17 #include "chrome/browser/ui/browser_finder.h" | 19 #include "chrome/browser/ui/browser_finder.h" |
| 18 #include "chrome/browser/ui/browser_window.h" | 20 #include "chrome/browser/ui/browser_window.h" |
| 19 #include "chrome/browser/ui/chrome_select_file_policy.h" | 21 #include "chrome/browser/ui/chrome_select_file_policy.h" |
| 22 #include "chrome/common/chrome_paths.h" |
| 20 #include "chromeos/dbus/dbus_thread_manager.h" | 23 #include "chromeos/dbus/dbus_thread_manager.h" |
| 21 #include "chromeos/dbus/debug_daemon_client.h" | 24 #include "chromeos/dbus/debug_daemon_client.h" |
| 22 #include "chromeos/printing/fake_printer_discoverer.h" | 25 #include "chromeos/printing/fake_printer_discoverer.h" |
| 26 #include "chromeos/printing/ppd_cache.h" |
| 27 #include "chromeos/printing/ppd_provider.h" |
| 23 #include "content/public/browser/browser_context.h" | 28 #include "content/public/browser/browser_context.h" |
| 24 #include "content/public/browser/browser_thread.h" | 29 #include "content/public/browser/browser_thread.h" |
| 25 #include "content/public/browser/web_ui.h" | 30 #include "content/public/browser/web_ui.h" |
| 31 #include "google_apis/google_api_keys.h" |
| 32 #include "net/url_request/url_request_context_getter.h" |
| 26 #include "printing/backend/print_backend.h" | 33 #include "printing/backend/print_backend.h" |
| 27 #include "url/third_party/mozilla/url_parse.h" | 34 #include "url/third_party/mozilla/url_parse.h" |
| 28 | 35 |
| 29 namespace chromeos { | 36 namespace chromeos { |
| 30 namespace settings { | 37 namespace settings { |
| 31 | 38 |
| 32 namespace { | 39 namespace { |
| 33 | 40 |
| 34 void OnRemovedPrinter(bool success) {} | 41 void OnRemovedPrinter(bool success) {} |
| 35 | 42 |
| (...skipping 27 matching lines...) Expand all Loading... |
| 63 printer_info->SetString("printerQueue", path.substr(1)); | 70 printer_info->SetString("printerQueue", path.substr(1)); |
| 64 | 71 |
| 65 return printer_info; | 72 return printer_info; |
| 66 } | 73 } |
| 67 | 74 |
| 68 } // namespace | 75 } // namespace |
| 69 | 76 |
| 70 CupsPrintersHandler::CupsPrintersHandler(content::WebUI* webui) | 77 CupsPrintersHandler::CupsPrintersHandler(content::WebUI* webui) |
| 71 : printer_discoverer_(nullptr), | 78 : printer_discoverer_(nullptr), |
| 72 profile_(Profile::FromWebUI(webui)), | 79 profile_(Profile::FromWebUI(webui)), |
| 73 weak_factory_(this) {} | 80 weak_factory_(this) { |
| 81 base::FilePath ppd_cache_path; |
| 82 CHECK( |
| 83 base::PathService::Get(chrome::DIR_CHROMEOS_PPD_CACHE, &ppd_cache_path)); |
| 84 ppd_provider_ = chromeos::printing::PpdProvider::Create( |
| 85 google_apis::GetAPIKey(), g_browser_process->system_request_context(), |
| 86 chromeos::printing::PpdCache::Create(ppd_cache_path)); |
| 87 } |
| 74 | 88 |
| 75 CupsPrintersHandler::~CupsPrintersHandler() {} | 89 CupsPrintersHandler::~CupsPrintersHandler() {} |
| 76 | 90 |
| 77 void CupsPrintersHandler::RegisterMessages() { | 91 void CupsPrintersHandler::RegisterMessages() { |
| 78 web_ui()->RegisterMessageCallback( | 92 web_ui()->RegisterMessageCallback( |
| 79 "getCupsPrintersList", | 93 "getCupsPrintersList", |
| 80 base::Bind(&CupsPrintersHandler::HandleGetCupsPrintersList, | 94 base::Bind(&CupsPrintersHandler::HandleGetCupsPrintersList, |
| 81 base::Unretained(this))); | 95 base::Unretained(this))); |
| 82 web_ui()->RegisterMessageCallback( | 96 web_ui()->RegisterMessageCallback( |
| 83 "updateCupsPrinter", | 97 "updateCupsPrinter", |
| 84 base::Bind(&CupsPrintersHandler::HandleUpdateCupsPrinter, | 98 base::Bind(&CupsPrintersHandler::HandleUpdateCupsPrinter, |
| 85 base::Unretained(this))); | 99 base::Unretained(this))); |
| 86 web_ui()->RegisterMessageCallback( | 100 web_ui()->RegisterMessageCallback( |
| 87 "removeCupsPrinter", | 101 "removeCupsPrinter", |
| 88 base::Bind(&CupsPrintersHandler::HandleRemoveCupsPrinter, | 102 base::Bind(&CupsPrintersHandler::HandleRemoveCupsPrinter, |
| 89 base::Unretained(this))); | 103 base::Unretained(this))); |
| 90 web_ui()->RegisterMessageCallback( | 104 web_ui()->RegisterMessageCallback( |
| 91 "addCupsPrinter", base::Bind(&CupsPrintersHandler::HandleAddCupsPrinter, | 105 "addCupsPrinter", base::Bind(&CupsPrintersHandler::HandleAddCupsPrinter, |
| 92 base::Unretained(this))); | 106 base::Unretained(this))); |
| 93 web_ui()->RegisterMessageCallback( | 107 web_ui()->RegisterMessageCallback( |
| 108 "getCupsPrinterManufacturersList", |
| 109 base::Bind(&CupsPrintersHandler::HandleGetCupsPrinterManufacturers, |
| 110 base::Unretained(this))); |
| 111 web_ui()->RegisterMessageCallback( |
| 112 "getCupsPrinterModelsList", |
| 113 base::Bind(&CupsPrintersHandler::HandleGetCupsPrinterModels, |
| 114 base::Unretained(this))); |
| 115 web_ui()->RegisterMessageCallback( |
| 94 "selectPPDFile", base::Bind(&CupsPrintersHandler::HandleSelectPPDFile, | 116 "selectPPDFile", base::Bind(&CupsPrintersHandler::HandleSelectPPDFile, |
| 95 base::Unretained(this))); | 117 base::Unretained(this))); |
| 96 web_ui()->RegisterMessageCallback( | 118 web_ui()->RegisterMessageCallback( |
| 97 "startDiscoveringPrinters", | 119 "startDiscoveringPrinters", |
| 98 base::Bind(&CupsPrintersHandler::HandleStartDiscovery, | 120 base::Bind(&CupsPrintersHandler::HandleStartDiscovery, |
| 99 base::Unretained(this))); | 121 base::Unretained(this))); |
| 100 web_ui()->RegisterMessageCallback( | 122 web_ui()->RegisterMessageCallback( |
| 101 "stopDiscoveringPrinters", | 123 "stopDiscoveringPrinters", |
| 102 base::Bind(&CupsPrintersHandler::HandleStopDiscovery, | 124 base::Bind(&CupsPrintersHandler::HandleStopDiscovery, |
| 103 base::Unretained(this))); | 125 base::Unretained(this))); |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 213 "cr.webUIListenerCallback", base::StringValue("on-add-cups-printer"), | 235 "cr.webUIListenerCallback", base::StringValue("on-add-cups-printer"), |
| 214 base::FundamentalValue(success), base::StringValue(printer_name)); | 236 base::FundamentalValue(success), base::StringValue(printer_name)); |
| 215 } | 237 } |
| 216 | 238 |
| 217 void CupsPrintersHandler::OnAddPrinterError() { | 239 void CupsPrintersHandler::OnAddPrinterError() { |
| 218 CallJavascriptFunction("cr.webUIListenerCallback", | 240 CallJavascriptFunction("cr.webUIListenerCallback", |
| 219 base::StringValue("on-add-cups-printer"), | 241 base::StringValue("on-add-cups-printer"), |
| 220 base::FundamentalValue(false), base::StringValue("")); | 242 base::FundamentalValue(false), base::StringValue("")); |
| 221 } | 243 } |
| 222 | 244 |
| 245 void CupsPrintersHandler::HandleGetCupsPrinterManufacturers( |
| 246 const base::ListValue* args) { |
| 247 std::string js_callback; |
| 248 CHECK_EQ(1U, args->GetSize()); |
| 249 CHECK(args->GetString(0, &js_callback)); |
| 250 ppd_provider_->QueryAvailable( |
| 251 base::Bind(&CupsPrintersHandler::QueryAvailableManufacturersDone, |
| 252 weak_factory_.GetWeakPtr(), |
| 253 js_callback)); |
| 254 } |
| 255 |
| 256 void CupsPrintersHandler::HandleGetCupsPrinterModels( |
| 257 const base::ListValue* args) { |
| 258 std::string js_callback; |
| 259 std::string manufacturer; |
| 260 CHECK_EQ(2U, args->GetSize()); |
| 261 CHECK(args->GetString(0, &js_callback)); |
| 262 CHECK(args->GetString(1, &manufacturer)); |
| 263 ppd_provider_->QueryAvailable( |
| 264 base::Bind(&CupsPrintersHandler::QueryAvailableModelsDone, |
| 265 weak_factory_.GetWeakPtr(), js_callback, manufacturer)); |
| 266 } |
| 267 |
| 223 void CupsPrintersHandler::HandleSelectPPDFile(const base::ListValue* args) { | 268 void CupsPrintersHandler::HandleSelectPPDFile(const base::ListValue* args) { |
| 224 CHECK_EQ(1U, args->GetSize()); | 269 CHECK_EQ(1U, args->GetSize()); |
| 225 CHECK(args->GetString(0, &webui_callback_id_)); | 270 CHECK(args->GetString(0, &webui_callback_id_)); |
| 226 | 271 |
| 227 base::FilePath downloads_path = DownloadPrefs::FromDownloadManager( | 272 base::FilePath downloads_path = DownloadPrefs::FromDownloadManager( |
| 228 content::BrowserContext::GetDownloadManager(profile_))->DownloadPath(); | 273 content::BrowserContext::GetDownloadManager(profile_))->DownloadPath(); |
| 229 | 274 |
| 230 select_file_dialog_ = ui::SelectFileDialog::Create( | 275 select_file_dialog_ = ui::SelectFileDialog::Create( |
| 231 this, new ChromeSelectFilePolicy(web_ui()->GetWebContents())); | 276 this, new ChromeSelectFilePolicy(web_ui()->GetWebContents())); |
| 232 gfx::NativeWindow owning_window = | 277 gfx::NativeWindow owning_window = |
| 233 chrome::FindBrowserWithWebContents(web_ui()->GetWebContents()) | 278 chrome::FindBrowserWithWebContents(web_ui()->GetWebContents()) |
| 234 ->window() | 279 ->window() |
| 235 ->GetNativeWindow(); | 280 ->GetNativeWindow(); |
| 236 select_file_dialog_->SelectFile( | 281 select_file_dialog_->SelectFile( |
| 237 ui::SelectFileDialog::SELECT_OPEN_FILE, base::string16(), downloads_path, | 282 ui::SelectFileDialog::SELECT_OPEN_FILE, base::string16(), downloads_path, |
| 238 nullptr, 0, FILE_PATH_LITERAL(""), owning_window, nullptr); | 283 nullptr, 0, FILE_PATH_LITERAL(""), owning_window, nullptr); |
| 239 } | 284 } |
| 240 | 285 |
| 286 void CupsPrintersHandler::QueryAvailableManufacturersDone( |
| 287 const std::string& js_callback, |
| 288 chromeos::printing::PpdProvider::CallbackResultCode result_code, |
| 289 const chromeos::printing::PpdProvider::AvailablePrintersMap& available) { |
| 290 auto manufacturers = base::MakeUnique<base::ListValue>(); |
| 291 if (result_code == chromeos::printing::PpdProvider::SUCCESS) { |
| 292 for (const auto& entry : available) { |
| 293 manufacturers->AppendString(entry.first); |
| 294 } |
| 295 } |
| 296 base::DictionaryValue response; |
| 297 response.SetBoolean("success", |
| 298 result_code == chromeos::printing::PpdProvider::SUCCESS); |
| 299 response.Set("manufacturers", std::move(manufacturers)); |
| 300 ResolveJavascriptCallback(base::StringValue(js_callback), response); |
| 301 } |
| 302 |
| 303 void CupsPrintersHandler::QueryAvailableModelsDone( |
| 304 const std::string& js_callback, |
| 305 const std::string& manufacturer, |
| 306 chromeos::printing::PpdProvider::CallbackResultCode result_code, |
| 307 const chromeos::printing::PpdProvider::AvailablePrintersMap& available) { |
| 308 auto models = base::MakeUnique<base::ListValue>(); |
| 309 if (result_code == chromeos::printing::PpdProvider::SUCCESS) { |
| 310 const auto it = available.find(manufacturer); |
| 311 if (it != available.end()) { |
| 312 // Everything looks good. |
| 313 models->AppendStrings(it->second); |
| 314 } |
| 315 } |
| 316 base::DictionaryValue response; |
| 317 response.SetBoolean("success", |
| 318 result_code == chromeos::printing::PpdProvider::SUCCESS); |
| 319 response.Set("models", std::move(models)); |
| 320 ResolveJavascriptCallback(base::StringValue(js_callback), response); |
| 321 } |
| 322 |
| 241 void CupsPrintersHandler::FileSelected(const base::FilePath& path, | 323 void CupsPrintersHandler::FileSelected(const base::FilePath& path, |
| 242 int index, | 324 int index, |
| 243 void* params) { | 325 void* params) { |
| 244 DCHECK(!webui_callback_id_.empty()); | 326 DCHECK(!webui_callback_id_.empty()); |
| 245 ResolveJavascriptCallback(base::StringValue(webui_callback_id_), | 327 ResolveJavascriptCallback(base::StringValue(webui_callback_id_), |
| 246 base::StringValue(path.value())); | 328 base::StringValue(path.value())); |
| 247 webui_callback_id_.clear(); | 329 webui_callback_id_.clear(); |
| 248 } | 330 } |
| 249 | 331 |
| 250 void CupsPrintersHandler::HandleStartDiscovery(const base::ListValue* args) { | 332 void CupsPrintersHandler::HandleStartDiscovery(const base::ListValue* args) { |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 282 *printers_list); | 364 *printers_list); |
| 283 } | 365 } |
| 284 | 366 |
| 285 void CupsPrintersHandler::OnDiscoveryDone() { | 367 void CupsPrintersHandler::OnDiscoveryDone() { |
| 286 CallJavascriptFunction("cr.webUIListenerCallback", | 368 CallJavascriptFunction("cr.webUIListenerCallback", |
| 287 base::StringValue("on-printer-discovery-done")); | 369 base::StringValue("on-printer-discovery-done")); |
| 288 } | 370 } |
| 289 | 371 |
| 290 } // namespace settings | 372 } // namespace settings |
| 291 } // namespace chromeos | 373 } // namespace chromeos |
| OLD | NEW |