Index: extensions/renderer/resources/printer_provider_custom_bindings.js |
diff --git a/extensions/renderer/resources/printer_provider_custom_bindings.js b/extensions/renderer/resources/printer_provider_custom_bindings.js |
index 9bf9fa27bf09f7a7c88208051cd20077c2d409bc..8e858bac9f5cdbe2f4d6f424bfaa7157a0367c26 100644 |
--- a/extensions/renderer/resources/printer_provider_custom_bindings.js |
+++ b/extensions/renderer/resources/printer_provider_custom_bindings.js |
@@ -6,6 +6,7 @@ var binding = require('binding').Binding.create('printerProvider'); |
var printerProviderInternal = require('binding').Binding.create( |
'printerProviderInternal').generate(); |
var eventBindings = require('event_bindings'); |
+var blobNatives = requireNative('blob_natives'); |
var printerProviderSchema = |
requireNative('schema_registry').GetSchema('printerProvider') |
@@ -29,9 +30,15 @@ var validate = require('schemaUtils').validate; |
// Handles a chrome.printerProvider event as described in the file comment. |
// |eventName|: The event name. |
+// |prepareArgsForDispatch|: Function called before dispatching the event to |
+// the extension. It's called with original event |args| list and callback |
+// that should be called when the |args| are ready for dispatch. The |
+// callbacks should report whether the argument preparation was successful. |
+// The function should not change the first argument, which contains the |
+// request id. |
// |resultreporter|: The function that should be called to report event result. |
-// One of chrome.printerProviderInternal API functions. |
-function handleEvent(eventName, resultReporter) { |
+// One of chrome.printerProviderInternal API functions. |
+function handleEvent(eventName, prepareArgsForDispatch, resultReporter) { |
eventBindings.registerArgumentMassager( |
'printerProvider.' + eventName, |
function(args, dispatch) { |
@@ -69,15 +76,43 @@ function handleEvent(eventName, resultReporter) { |
} |
}; |
- dispatch(args.slice(1).concat(reportResult)); |
+ prepareArgsForDispatch(args, function(success) { |
+ if (!success) { |
+ // Do not throw an exception since the extension should not yet be |
+ // aware of the event. |
+ resultReporter(args[0], null); |
not at google - send to devlin
2015/03/04 21:54:49
document that args[0] is the request ID, like you
tbarzic
2015/03/04 23:24:34
Done.
|
+ return; |
+ } |
+ dispatch(args.slice(1).concat(reportResult)); |
+ }); |
}); |
} |
-handleEvent('onGetPrintersRequested', printerProviderInternal.reportPrinters); |
+// Sets up printJob.document property for a print request. The printJob argument |
+// is at |args[1]|. |
+function createPrintRequestBlobArguments(args, callback) { |
+ printerProviderInternal.getPrintData(args[0], function(blobInfo) { |
not at google - send to devlin
2015/03/04 21:54:49
and here
tbarzic
2015/03/04 23:24:34
Done.
|
+ if (chrome.runtime.lastError) { |
+ callback(false); |
+ return; |
+ } |
+ |
+ args[1].document = blobNatives.TakeBrowserProcessBlob( |
not at google - send to devlin
2015/03/04 21:54:49
and document what args[1] is.
tbarzic
2015/03/04 23:24:34
Done.
|
+ blobInfo.blobUuid, blobInfo.type, blobInfo.size); |
+ callback(true); |
+ }); |
+} |
+ |
+handleEvent('onGetPrintersRequested', |
+ function(args, callback) { callback(true); }, |
+ printerProviderInternal.reportPrinters); |
handleEvent('onGetCapabilityRequested', |
+ function(args, callback) { callback(true); }, |
printerProviderInternal.reportPrinterCapability); |
-handleEvent('onPrintRequested', printerProviderInternal.reportPrintResult); |
+handleEvent('onPrintRequested', |
+ createPrintRequestBlobArguments, |
+ printerProviderInternal.reportPrintResult); |
exports.binding = binding.generate(); |