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

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

Issue 2468063003: Initial hookup of PpdProvider. (Closed)
Patch Set: string -> const string& 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
« no previous file with comments | « chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.h ('k') | chrome/common/chrome_paths.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..fb7ebb240c5b863c6ebccd761107c89ad7883f50 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,29 @@ void CupsPrintersHandler::OnAddPrinterError() {
base::FundamentalValue(false), base::StringValue(""));
}
+void CupsPrintersHandler::HandleGetCupsPrinterManufacturers(
+ const base::ListValue* args) {
+ std::string js_callback;
+ CHECK_EQ(1U, args->GetSize());
+ CHECK(args->GetString(0, &js_callback));
+ ppd_provider_->QueryAvailable(
+ base::Bind(&CupsPrintersHandler::QueryAvailableManufacturersDone,
+ weak_factory_.GetWeakPtr(),
+ js_callback));
+}
+
+void CupsPrintersHandler::HandleGetCupsPrinterModels(
+ const base::ListValue* args) {
+ std::string js_callback;
+ std::string manufacturer;
+ CHECK_EQ(2U, args->GetSize());
+ CHECK(args->GetString(0, &js_callback));
+ CHECK(args->GetString(1, &manufacturer));
+ ppd_provider_->QueryAvailable(
+ base::Bind(&CupsPrintersHandler::QueryAvailableModelsDone,
+ weak_factory_.GetWeakPtr(), js_callback, manufacturer));
+}
+
void CupsPrintersHandler::HandleSelectPPDFile(const base::ListValue* args) {
CHECK_EQ(1U, args->GetSize());
CHECK(args->GetString(0, &webui_callback_id_));
@@ -238,6 +283,43 @@ void CupsPrintersHandler::HandleSelectPPDFile(const base::ListValue* args) {
nullptr, 0, FILE_PATH_LITERAL(""), owning_window, nullptr);
}
+void CupsPrintersHandler::QueryAvailableManufacturersDone(
+ const std::string& js_callback,
+ chromeos::printing::PpdProvider::CallbackResultCode result_code,
+ const chromeos::printing::PpdProvider::AvailablePrintersMap& available) {
+ auto manufacturers = base::MakeUnique<base::ListValue>();
+ if (result_code == chromeos::printing::PpdProvider::SUCCESS) {
+ for (const auto& entry : available) {
+ manufacturers->AppendString(entry.first);
+ }
+ }
+ base::DictionaryValue response;
+ response.SetBoolean("success",
+ result_code == chromeos::printing::PpdProvider::SUCCESS);
+ response.Set("manufacturers", std::move(manufacturers));
+ ResolveJavascriptCallback(base::StringValue(js_callback), response);
+}
+
+void CupsPrintersHandler::QueryAvailableModelsDone(
+ const std::string& js_callback,
+ const std::string& manufacturer,
+ chromeos::printing::PpdProvider::CallbackResultCode result_code,
+ const chromeos::printing::PpdProvider::AvailablePrintersMap& available) {
+ auto models = base::MakeUnique<base::ListValue>();
+ if (result_code == chromeos::printing::PpdProvider::SUCCESS) {
+ const auto it = available.find(manufacturer);
+ if (it != available.end()) {
+ // Everything looks good.
+ models->AppendStrings(it->second);
+ }
+ }
+ base::DictionaryValue response;
+ response.SetBoolean("success",
+ result_code == chromeos::printing::PpdProvider::SUCCESS);
+ response.Set("models", std::move(models));
+ ResolveJavascriptCallback(base::StringValue(js_callback), response);
+}
+
void CupsPrintersHandler::FileSelected(const base::FilePath& path,
int index,
void* params) {
« no previous file with comments | « chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.h ('k') | chrome/common/chrome_paths.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698