Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(9091)

Unified Diff: chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.cc

Issue 2468063003: Initial hookup of PpdProvider. (Closed)
Patch Set: Fix callback name bug. Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.cc
diff --git a/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.cc b/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.cc
index 53abf17f57a789dd8557d4a025240a51e3893979..843fe10195df48ee19ca6fb452ff8c351f1bb7e0 100644
--- a/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.cc
+++ b/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.cc
@@ -4,25 +4,32 @@
#include "chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.h"
-#include <memory>
+#include <utility>
#include "base/bind.h"
#include "base/bind_helpers.h"
#include "base/memory/ptr_util.h"
+#include "base/path_service.h"
#include "base/strings/string_util.h"
#include "base/values.h"
+#include "chrome/browser/browser_process.h"
#include "chrome/browser/chromeos/printing/printer_pref_manager_factory.h"
#include "chrome/browser/download/download_prefs.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser_finder.h"
#include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/chrome_select_file_policy.h"
+#include "chrome/common/chrome_paths.h"
#include "chromeos/dbus/dbus_thread_manager.h"
#include "chromeos/dbus/debug_daemon_client.h"
#include "chromeos/printing/fake_printer_discoverer.h"
+#include "chromeos/printing/ppd_cache.h"
+#include "chromeos/printing/ppd_provider.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/web_ui.h"
+#include "google_apis/google_api_keys.h"
+#include "net/url_request/url_request_context_getter.h"
#include "printing/backend/print_backend.h"
#include "url/third_party/mozilla/url_parse.h"
@@ -70,7 +77,14 @@ std::unique_ptr<base::DictionaryValue> GetPrinterInfo(const Printer& printer) {
CupsPrintersHandler::CupsPrintersHandler(content::WebUI* webui)
: printer_discoverer_(nullptr),
profile_(Profile::FromWebUI(webui)),
- weak_factory_(this) {}
+ weak_factory_(this) {
+ base::FilePath ppd_cache_path;
+ CHECK(
+ base::PathService::Get(chrome::DIR_CHROMEOS_PPD_CACHE, &ppd_cache_path));
+ ppd_provider_ = chromeos::printing::PpdProvider::Create(
+ google_apis::GetAPIKey(), g_browser_process->system_request_context(),
+ chromeos::printing::PpdCache::Create(ppd_cache_path));
+}
CupsPrintersHandler::~CupsPrintersHandler() {}
@@ -91,6 +105,14 @@ void CupsPrintersHandler::RegisterMessages() {
"addCupsPrinter", base::Bind(&CupsPrintersHandler::HandleAddCupsPrinter,
base::Unretained(this)));
web_ui()->RegisterMessageCallback(
+ "getCupsPrinterManufacturersList",
+ base::Bind(&CupsPrintersHandler::HandleGetCupsPrinterManufacturers,
+ base::Unretained(this)));
+ web_ui()->RegisterMessageCallback(
+ "getCupsPrinterModelsList",
+ base::Bind(&CupsPrintersHandler::HandleGetCupsPrinterModels,
+ base::Unretained(this)));
+ web_ui()->RegisterMessageCallback(
"selectPPDFile", base::Bind(&CupsPrintersHandler::HandleSelectPPDFile,
base::Unretained(this)));
web_ui()->RegisterMessageCallback(
@@ -220,6 +242,24 @@ void CupsPrintersHandler::OnAddPrinterError() {
base::FundamentalValue(false), base::StringValue(""));
}
+void CupsPrintersHandler::HandleGetCupsPrinterManufacturers(
+ const base::ListValue* args) {
+ CHECK(args->empty());
+ ppd_provider_->QueryAvailable(
+ base::Bind(&CupsPrintersHandler::QueryAvailableManufacturersDone,
+ base::Unretained(this)));
+}
+
+void CupsPrintersHandler::HandleGetCupsPrinterModels(
+ const base::ListValue* args) {
+ std::string manufacturer;
+ CHECK_EQ(1U, args->GetSize());
+ CHECK(args->GetString(0, &manufacturer));
+ ppd_provider_->QueryAvailable(
+ base::Bind(&CupsPrintersHandler::QueryAvailableModelsDone,
+ base::Unretained(this), manufacturer));
+}
+
void CupsPrintersHandler::HandleSelectPPDFile(const base::ListValue* args) {
CHECK_EQ(1U, args->GetSize());
CHECK(args->GetString(0, &webui_callback_id_));
@@ -238,6 +278,48 @@ void CupsPrintersHandler::HandleSelectPPDFile(const base::ListValue* args) {
nullptr, 0, FILE_PATH_LITERAL(""), owning_window, nullptr);
}
+void CupsPrintersHandler::QueryAvailableManufacturersDone(
+ chromeos::printing::PpdProvider::CallbackResultCode result_code,
+ const chromeos::printing::PpdProvider::AvailablePrintersMap& available) {
+ if (result_code == chromeos::printing::PpdProvider::SUCCESS) {
+ // Convert to a list of strings.
+ base::ListValue manufacturers;
+ for (const auto& entry : available) {
+ manufacturers.AppendString(entry.first);
+ }
+ CallJavascriptFunction("cr.webUIListenerCallback",
+ base::StringValue("on-manufacturer-list-ready"),
+ manufacturers);
+ } else {
+ CallJavascriptFunction("cr.webUIListenerCallback",
+ base::StringValue("on-manufacturer-list-error"));
+ }
+}
+
+void CupsPrintersHandler::QueryAvailableModelsDone(
+ const std::string manufacturer,
+ chromeos::printing::PpdProvider::CallbackResultCode result_code,
+ const chromeos::printing::PpdProvider::AvailablePrintersMap& available) {
+ if (result_code == chromeos::printing::PpdProvider::SUCCESS) {
+ // Convert to a list of strings.
+ const auto it = available.find(manufacturer);
+ if (it == available.end()) {
+ // No models for this manufacturer. That's an error.
+ CallJavascriptFunction("cr.webUIListenerCallback",
+ base::StringValue("on-model-list-error"));
+ } else {
+ base::ListValue models;
+ models.AppendStrings(it->second);
+ CallJavascriptFunction("cr.webUIListenerCallback",
+ base::StringValue("on-model-list-ready"), models);
+ }
+ } else {
+ // Something went wrong with the query.
+ CallJavascriptFunction("cr.webUIListenerCallback",
+ base::StringValue("on-model-list-error"));
+ }
+}
+
void CupsPrintersHandler::FileSelected(const base::FilePath& path,
int index,
void* params) {

Powered by Google App Engine
This is Rietveld 408576698