| 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..5ca459a7e33537cc556e68e0629cbe92b74d51e9 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,44 @@ 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] /* requestId */, null);
|
| + return;
|
| + }
|
| + dispatch(args.slice(1).concat(reportResult));
|
| + });
|
| });
|
| }
|
|
|
| -handleEvent('onGetPrintersRequested', printerProviderInternal.reportPrinters);
|
| +// Sets up printJob.document property for a print request.
|
| +function createPrintRequestBlobArguments(args, callback) {
|
| + printerProviderInternal.getPrintData(args[0] /* requestId */,
|
| + function(blobInfo) {
|
| + if (chrome.runtime.lastError) {
|
| + callback(false);
|
| + return;
|
| + }
|
| +
|
| + // |args[1]| is printJob.
|
| + args[1].document = blobNatives.TakeBrowserProcessBlob(
|
| + 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();
|
|
|