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()); |