Chromium Code Reviews| Index: chrome/browser/ui/webui/print_preview/print_preview_handler.cc |
| diff --git a/chrome/browser/ui/webui/print_preview/print_preview_handler.cc b/chrome/browser/ui/webui/print_preview/print_preview_handler.cc |
| index 335e6083faa72754eed0543e151c3244f205b2d6..44e2d04f730c9d0f4995edf31e7a12b8e6f0b8ef 100644 |
| --- a/chrome/browser/ui/webui/print_preview/print_preview_handler.cc |
| +++ b/chrome/browser/ui/webui/print_preview/print_preview_handler.cc |
| @@ -89,6 +89,10 @@ |
| #include "chrome/browser/local_discovery/privet_constants.h" |
| #endif |
| +#if defined(ENABLE_EXTENSIONS) |
| +#include "extensions/browser/api/printer_provider/printer_provider_api.h" |
| +#endif |
| + |
| using content::BrowserThread; |
| using content::RenderViewHost; |
| using content::WebContents; |
| @@ -647,6 +651,14 @@ void PrintPreviewHandler::RegisterMessages() { |
| web_ui()->RegisterMessageCallback("getPrivetPrinterCapabilities", |
| base::Bind(&PrintPreviewHandler::HandleGetPrivetPrinterCapabilities, |
| base::Unretained(this))); |
| + web_ui()->RegisterMessageCallback( |
| + "getExtensionPrinters", |
| + base::Bind(&PrintPreviewHandler::HandleGetExtensionPrinters, |
| + base::Unretained(this))); |
| + web_ui()->RegisterMessageCallback( |
| + "getExtensionPrinterCapabilities", |
| + base::Bind(&PrintPreviewHandler::HandleGetExtensionPrinterCapabilities, |
| + base::Unretained(this))); |
| RegisterForMergeSession(); |
| } |
| @@ -706,6 +718,46 @@ void PrintPreviewHandler::HandleGetPrivetPrinterCapabilities( |
| #endif |
| } |
| +void PrintPreviewHandler::HandleGetExtensionPrinters( |
| + const base::ListValue* args) { |
| +#if defined(ENABLE_EXTENSIONS) |
| + // TODO(tbarzic): Handle case where a new search is initiated before the |
| + // previous one finishes. Currently, in this case Web UI layer may get |
| + // multiple events with printer list from some extensions, and it may get |
| + // fooled by |done| flag from the first search into marking the search |
| + // complete. |
| + extensions::PrinterProviderAPI::GetFactoryInstance() |
| + ->Get(preview_web_contents()->GetBrowserContext()) |
| + ->DispatchGetPrintersRequested( |
| + base::Bind(&PrintPreviewHandler::OnGotPrintersForExtension, |
| + weak_factory_.GetWeakPtr())); |
| +#else |
| + OnGotPrintersForExtension(base::ListValue(), true /* done */); |
| +#endif |
| +} |
| + |
| +void PrintPreviewHandler::HandleGetExtensionPrinterCapabilities( |
| + const base::ListValue* args) { |
| + std::string extension_id; |
| + std::string printer_id; |
| + bool ok = true; |
| + ok = ok && args->GetString(0, &extension_id); |
|
Vitaly Buka (NO REVIEWS)
2015/02/03 16:55:48
bool ok = GetString(extension_id)
DCHECK(ok)
ok =
|
| + ok = ok && args->GetString(1, &printer_id); |
| + DCHECK(ok); |
| + |
| +#if defined(ENABLE_EXTENSIONS) |
| + extensions::PrinterProviderAPI::GetFactoryInstance() |
| + ->Get(preview_web_contents()->GetBrowserContext()) |
| + ->DispatchGetCapabilityRequested( |
| + extension_id, printer_id, |
| + base::Bind(&PrintPreviewHandler::OnGotExtensionPrinterCapabilities, |
| + weak_factory_.GetWeakPtr(), extension_id, printer_id)); |
| +#else |
| + OnGotExtensionPrinterCapabilities(extension_id, printer_id, |
| + base::DictionaryValue()); |
| +#endif |
| +} |
| + |
| void PrintPreviewHandler::HandleGetPreview(const base::ListValue* args) { |
| DCHECK_EQ(3U, args->GetSize()); |
| scoped_ptr<base::DictionaryValue> settings(GetSettingsDictionary(args)); |
| @@ -1588,6 +1640,23 @@ void PrintPreviewHandler::FillPrinterDescription( |
| #endif // defined(ENABLE_SERVICE_DISCOVERY) |
| +void PrintPreviewHandler::OnGotPrintersForExtension( |
| + const base::ListValue& printers, |
| + bool done) { |
| + web_ui()->CallJavascriptFunction("onExtensionPrintersAdded", printers, |
| + base::FundamentalValue(done)); |
| +} |
| + |
| +void PrintPreviewHandler::OnGotExtensionPrinterCapabilities( |
| + const std::string& extension_id, |
| + const std::string& printer_id, |
| + const base::DictionaryValue& capabilities) { |
| + web_ui()->CallJavascriptFunction("onExtensionCapabilitiesSet", |
| + base::StringValue(extension_id), |
| + base::StringValue(printer_id), |
|
Vitaly Buka (NO REVIEWS)
2015/02/03 16:55:48
consider merging them here and use single string a
tbarzic
2015/02/03 17:07:27
I had a similar idea. The main reason these are me
|
| + capabilities); |
| +} |
| + |
| void PrintPreviewHandler::RegisterForMergeSession() { |
| DCHECK(!reconcilor_); |
| Profile* profile = Profile::FromWebUI(web_ui()); |