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 d2965906e7c498d48e13ef9c4424137d87f9d2d0..82ebc4cb315e6abf183e59e81d46f298536cba42 100644 |
--- a/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.cc |
+++ b/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.cc |
@@ -8,10 +8,15 @@ |
#include "base/bind.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/chromeos/printing/printer_pref_manager_factory.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 "content/public/browser/browser_thread.h" |
#include "content/public/browser/web_ui.h" |
#include "printing/backend/print_backend.h" |
@@ -38,6 +43,9 @@ void CupsPrintersHandler::RegisterMessages() { |
"removeCupsPrinter", |
base::Bind(&CupsPrintersHandler::HandleRemoveCupsPrinter, |
base::Unretained(this))); |
+ web_ui()->RegisterMessageCallback( |
+ "selectPPDFile", base::Bind(&CupsPrintersHandler::HandleSelectPPDFile, |
+ base::Unretained(this))); |
} |
void CupsPrintersHandler::HandleGetCupsPrintersList( |
@@ -109,5 +117,33 @@ void CupsPrintersHandler::HandleRemoveCupsPrinter(const base::ListValue* args) { |
printer_id); |
} |
+void CupsPrintersHandler::HandleSelectPPDFile(const base::ListValue* args) { |
+ CHECK_EQ(1U, args->GetSize()); |
+ CHECK(args->GetString(0, &webui_callback_id_)); |
+ |
+ base::FilePath downloads_path; |
+ if (!PathService::Get(chrome::DIR_DEFAULT_DOWNLOADS, &downloads_path)) |
michaelpg
2016/09/15 03:01:39
We probably want to use the user's preferred downl
xdai1
2016/09/16 21:19:32
Done.
|
+ return; |
+ |
+ select_file_dialog_ = ui::SelectFileDialog::Create( |
+ this, new ChromeSelectFilePolicy(web_ui()->GetWebContents())); |
+ gfx::NativeWindow owning_window = |
+ chrome::FindBrowserWithWebContents(web_ui()->GetWebContents()) |
+ ->window() |
+ ->GetNativeWindow(); |
+ select_file_dialog_->SelectFile( |
+ ui::SelectFileDialog::SELECT_OPEN_FILE, base::string16(), downloads_path, |
+ nullptr, 0, FILE_PATH_LITERAL(""), owning_window, nullptr); |
+} |
+ |
+void CupsPrintersHandler::FileSelected(const base::FilePath& path, |
+ int index, |
+ void* params) { |
+ DCHECK(!webui_callback_id_.empty()); |
+ ResolveJavascriptCallback(base::StringValue(webui_callback_id_), |
+ base::StringValue(path.value())); |
+ webui_callback_id_.clear(); |
+} |
+ |
} // namespace settings |
} // namespace chromeos |