| Index: chrome/browser/resources/print_preview/data/destination_store.js
|
| diff --git a/chrome/browser/resources/print_preview/data/destination_store.js b/chrome/browser/resources/print_preview/data/destination_store.js
|
| index 5aeaffe2c337573ac036b88697a3577df4fc51b5..86465a5a46c7ad18f6c21d0bdbbc8b2f718f2b60 100644
|
| --- a/chrome/browser/resources/print_preview/data/destination_store.js
|
| +++ b/chrome/browser/resources/print_preview/data/destination_store.js
|
| @@ -8,6 +8,96 @@ cr.define('print_preview', function() {
|
| /**
|
| * A data store that stores destinations and dispatches events when the data
|
| * store changes.
|
| + * @param {!Array<!print_preview.Destination.Origin>} origins Match
|
| + * destinations from these origins.
|
| + * @param {RegExp} idRegExp Match destination's id.
|
| + * @param {RegExp} displayNameRegExp Match destination's displayName.
|
| + * @param {boolean} skipVirtualDestinations Whether to ignore virtual
|
| + * destinations, for example, Save as PDF.
|
| + * @constructor
|
| + */
|
| + function DestinationMatch(
|
| + origins, idRegExp, displayNameRegExp, skipVirtualDestinations) {
|
| +
|
| + /** @private {!Array<!print_preview.Destination.Origin>} */
|
| + this.origins_ = origins;
|
| +
|
| + /** @private {RegExp} */
|
| + this.idRegExp_ = idRegExp;
|
| +
|
| + /** @private {RegExp} */
|
| + this.displayNameRegExp_ = displayNameRegExp;
|
| +
|
| + /** @private {boolean} */
|
| + this.skipVirtualDestinations_ = skipVirtualDestinations;
|
| + };
|
| +
|
| + DestinationMatch.prototype = {
|
| +
|
| + /**
|
| + * @param {!print_preview.Destination.Origin} origin Origin to match.
|
| + * @return {boolean} Whether the origin is one of the {@code origins_}.
|
| + */
|
| + matchOrigin: function(origin) {
|
| + return arrayContains(this.origins_, origin);
|
| + },
|
| +
|
| + /**
|
| + * @param {string} id Id of the destination.
|
| + * @param {string} origin Origin of the destination.
|
| + * @return {boolean} Whether destination is the same as initial.
|
| + */
|
| + matchIdAndOrigin: function(id, origin) {
|
| + return this.matchOrigin(origin) &&
|
| + this.idRegExp_ &&
|
| + this.idRegExp_.test(id);
|
| + },
|
| +
|
| + /**
|
| + * @param {!print_preview.Destination} destination Destination to match.
|
| + * @return {boolean} Whether {@code destination} matches the last user
|
| + * selected one.
|
| + */
|
| + match: function(destination) {
|
| + if (!this.matchOrigin(destination.origin)) {
|
| + return false;
|
| + }
|
| + if (this.idRegExp_ && !this.idRegExp_.test(destination.id)) {
|
| + return false;
|
| + }
|
| + if (this.displayNameRegExp_ &&
|
| + !this.displayNameRegExp_.test(destination.displayName)) {
|
| + return false;
|
| + }
|
| + if (this.skipVirtualDestinations_ &&
|
| + this.isVirtualDestination_(destination)) {
|
| + return false;
|
| + }
|
| + return true;
|
| + },
|
| +
|
| + /**
|
| + * @param {!print_preview.Destination} destination Destination to check.
|
| + * @return {boolean} Whether {@code destination} is virtual, in terms of
|
| + * destination selection.
|
| + * @private
|
| + */
|
| + isVirtualDestination_: function(destination) {
|
| + if (destination.origin == print_preview.Destination.Origin.LOCAL) {
|
| + return arrayContains(
|
| + [print_preview.Destination.GooglePromotedId.SAVE_AS_PDF],
|
| + destination.id);
|
| + }
|
| + return arrayContains(
|
| + [print_preview.Destination.GooglePromotedId.DOCS,
|
| + print_preview.Destination.GooglePromotedId.FEDEX],
|
| + destination.id);
|
| + }
|
| + };
|
| +
|
| + /**
|
| + * A data store that stores destinations and dispatches events when the data
|
| + * store changes.
|
| * @param {!print_preview.NativeLayer} nativeLayer Used to fetch local print
|
| * destinations.
|
| * @param {!print_preview.UserInfo} userInfo User information repository.
|
| @@ -69,11 +159,11 @@ cr.define('print_preview', function() {
|
|
|
| /**
|
| * Whether the destination store will auto select the destination that
|
| - * matches the last used destination stored in appState_.
|
| - * @type {boolean}
|
| + * matches this set of parameters.
|
| + * @type {print_preview.DestinationMatch}
|
| * @private
|
| */
|
| - this.isInAutoSelectMode_ = false;
|
| + this.autoSelectMatchingDestination_ = null;
|
|
|
| /**
|
| * Event tracker used to track event listeners of the destination store.
|
| @@ -91,6 +181,13 @@ cr.define('print_preview', function() {
|
| this.pdfPrinterEnabled_ = false;
|
|
|
| /**
|
| + * ID of the system default destination.
|
| + * @type {?string}
|
| + * @private
|
| + */
|
| + this.systemDefaultDestinationId_ = null;
|
| +
|
| + /**
|
| * Used to fetch cloud-based print destinations.
|
| * @type {cloudprint.CloudPrintInterface}
|
| * @private
|
| @@ -320,89 +417,287 @@ cr.define('print_preview', function() {
|
| * print_preview.AppState has been initialized.
|
| * @param {boolean} isInAppKioskMode Whether the print preview is in App
|
| * Kiosk mode.
|
| + * @param {?string} systemDefaultDestinationId ID of the system default
|
| + * destination.
|
| + * @param {?string} serializedDefaultDestinationSelectionRulesStr Serialized
|
| + * default destination selection rules.
|
| */
|
| - init: function(isInAppKioskMode) {
|
| + init: function(
|
| + isInAppKioskMode,
|
| + systemDefaultDestinationId,
|
| + serializedDefaultDestinationSelectionRulesStr) {
|
| this.pdfPrinterEnabled_ = !isInAppKioskMode;
|
| - this.isInAutoSelectMode_ = true;
|
| + this.systemDefaultDestinationId_ = systemDefaultDestinationId;
|
| this.createLocalPdfPrintDestination_();
|
| +
|
| if (!this.appState_.selectedDestinationId ||
|
| !this.appState_.selectedDestinationOrigin) {
|
| - this.selectDefaultDestination_();
|
| - } else {
|
| - var key = this.getDestinationKey_(
|
| - this.appState_.selectedDestinationOrigin,
|
| - this.appState_.selectedDestinationId,
|
| - this.appState_.selectedDestinationAccount || '');
|
| - var candidate = this.destinationMap_[key];
|
| - if (candidate != null) {
|
| - this.selectDestination(candidate);
|
| - } else if (this.appState_.selectedDestinationOrigin ==
|
| - print_preview.Destination.Origin.LOCAL) {
|
| - this.nativeLayer_.startGetLocalDestinationCapabilities(
|
| - this.appState_.selectedDestinationId);
|
| - } else if (this.cloudPrintInterface_ &&
|
| - (this.appState_.selectedDestinationOrigin ==
|
| - print_preview.Destination.Origin.COOKIES ||
|
| - this.appState_.selectedDestinationOrigin ==
|
| - print_preview.Destination.Origin.DEVICE)) {
|
| - this.cloudPrintInterface_.printer(
|
| - this.appState_.selectedDestinationId,
|
| - this.appState_.selectedDestinationOrigin,
|
| - this.appState_.selectedDestinationAccount || '');
|
| - } else if (this.appState_.selectedDestinationOrigin ==
|
| - print_preview.Destination.Origin.PRIVET) {
|
| - // TODO(noamsml): Resolve a specific printer instead of listing all
|
| - // privet printers in this case.
|
| - this.nativeLayer_.startGetPrivetDestinations();
|
| -
|
| - var destinationName = this.appState_.selectedDestinationName || '';
|
| -
|
| - // Create a fake selectedDestination_ that is not actually in the
|
| - // destination store. When the real destination is created, this
|
| - // destination will be overwritten.
|
| - this.selectedDestination_ = new print_preview.Destination(
|
| - this.appState_.selectedDestinationId,
|
| - print_preview.Destination.Type.LOCAL,
|
| - print_preview.Destination.Origin.PRIVET,
|
| - destinationName,
|
| - false /*isRecent*/,
|
| - print_preview.Destination.ConnectionStatus.ONLINE);
|
| - this.selectedDestination_.capabilities =
|
| - this.appState_.selectedDestinationCapabilities;
|
| + var destinationMatch = this.convertToDestinationMatch_(
|
| + serializedDefaultDestinationSelectionRulesStr);
|
| + if (destinationMatch) {
|
| + this.fetchMatchingDestination_(destinationMatch);
|
| + return;
|
| + }
|
| + }
|
| +
|
| + if (!this.systemDefaultDestinationId_ &&
|
| + !(this.appState_.selectedDestinationId &&
|
| + this.appState_.selectedDestinationOrigin)) {
|
| + this.selectPdfDestination_();
|
| + return;
|
| + }
|
| +
|
| + var origin = print_preview.Destination.Origin.LOCAL;
|
| + var id = this.systemDefaultDestinationId_;
|
| + var account = '';
|
| + var name = '';
|
| + var capabilities = null;
|
| + var extensionId = '';
|
| + var extensionName = '';
|
| + if (this.appState_.selectedDestinationId &&
|
| + this.appState_.selectedDestinationOrigin) {
|
| + origin = this.appState_.selectedDestinationOrigin;
|
| + id = this.appState_.selectedDestinationId;
|
| + account = this.appState_.selectedDestinationAccount || '';
|
| + name = this.appState_.selectedDestinationName || '';
|
| + capabilities = this.appState_.selectedDestinationCapabilities;
|
| + extensionId = this.appState_.selectedDestinationExtensionId || '';
|
| + extensionName = this.appState_.selectedDestinationExtensionName || '';
|
| + }
|
| + var candidate =
|
| + this.destinationMap_[this.getDestinationKey_(origin, id, account)];
|
| + if (candidate != null) {
|
| + this.selectDestination(candidate);
|
| + return;
|
| + }
|
| +
|
| + if (this.fetchPreselectedDestination_(
|
| + origin,
|
| + id,
|
| + account,
|
| + name,
|
| + capabilities,
|
| + extensionId,
|
| + extensionName)) {
|
| + return;
|
| + }
|
| +
|
| + this.selectPdfDestination_();
|
| + },
|
| +
|
| + /**
|
| + * Attempts to fetch capabilities of the destination identified by the
|
| + * provided origin, id and account.
|
| + * @param {!print_preview.Destination.Origin} origin Destination origin.
|
| + * @param {string} id Destination id.
|
| + * @param {string} account User account destination is registered for.
|
| + * @param {string} name Destination display name.
|
| + * @param {?print_preview.Cdd} capabilities Destination capabilities.
|
| + * @param {string} extensionId Extension ID associated with this
|
| + * destination.
|
| + * @param {string} extensionName Extension name associated with this
|
| + * destination.
|
| + * @private
|
| + */
|
| + fetchPreselectedDestination_: function(
|
| + origin, id, account, name, capabilities, extensionId, extensionName) {
|
| + this.autoSelectMatchingDestination_ =
|
| + this.createExactDestinationMatch_(origin, id);
|
| +
|
| + if (origin == print_preview.Destination.Origin.LOCAL) {
|
| + this.nativeLayer_.startGetLocalDestinationCapabilities(id);
|
| + return true;
|
| + }
|
| +
|
| + if (this.cloudPrintInterface_ &&
|
| + (origin == print_preview.Destination.Origin.COOKIES ||
|
| + origin == print_preview.Destination.Origin.DEVICE)) {
|
| + this.cloudPrintInterface_.printer(id, origin, account);
|
| + return true;
|
| + }
|
| +
|
| + if (origin == print_preview.Destination.Origin.PRIVET) {
|
| + // TODO(noamsml): Resolve a specific printer instead of listing all
|
| + // privet printers in this case.
|
| + this.nativeLayer_.startGetPrivetDestinations();
|
| +
|
| + // Create a fake selectedDestination_ that is not actually in the
|
| + // destination store. When the real destination is created, this
|
| + // destination will be overwritten.
|
| + this.selectedDestination_ = new print_preview.Destination(
|
| + id,
|
| + print_preview.Destination.Type.LOCAL,
|
| + print_preview.Destination.Origin.PRIVET,
|
| + name,
|
| + false /*isRecent*/,
|
| + print_preview.Destination.ConnectionStatus.ONLINE);
|
| + this.selectedDestination_.capabilities = capabilities;
|
| +
|
| + cr.dispatchSimpleEvent(
|
| + this,
|
| + DestinationStore.EventType.CACHED_SELECTED_DESTINATION_INFO_READY);
|
| + return true;
|
| + }
|
| +
|
| + if (origin == print_preview.Destination.Origin.EXTENSION) {
|
| + // TODO(tbarzic): Add support for requesting a single extension's
|
| + // printer list.
|
| + this.startLoadExtensionDestinations();
|
| +
|
| + this.selectedDestination_ =
|
| + print_preview.ExtensionDestinationParser.parse({
|
| + extensionId: extensionId,
|
| + extensionName: extensionName,
|
| + id: id,
|
| + name: name
|
| + });
|
| +
|
| + if (capabilities) {
|
| + this.selectedDestination_.capabilities = capabilities;
|
|
|
| cr.dispatchSimpleEvent(
|
| - this,
|
| - DestinationStore.EventType.CACHED_SELECTED_DESTINATION_INFO_READY);
|
| - } else if (this.appState_.selectedDestinationOrigin ==
|
| - print_preview.Destination.Origin.EXTENSION) {
|
| - // TODO(tbarzic): Add support for requesting a single extension's
|
| - // printer list.
|
| - this.startLoadExtensionDestinations();
|
| -
|
| - this.selectedDestination_ =
|
| - print_preview.ExtensionDestinationParser.parse({
|
| - extensionId: this.appState_.selectedDestinationExtensionId,
|
| - extensionName: this.appState_.selectedDestinationExtensionName,
|
| - id: this.appState_.selectedDestinationId,
|
| - name: this.appState_.selectedDestinationName || ''
|
| - });
|
| -
|
| - if (this.appState_.selectedDestinationCapabilities) {
|
| - this.selectedDestination_.capabilities =
|
| - this.appState_.selectedDestinationCapabilities;
|
| -
|
| - cr.dispatchSimpleEvent(
|
| - this,
|
| - DestinationStore.EventType
|
| - .CACHED_SELECTED_DESTINATION_INFO_READY);
|
| - }
|
| - } else {
|
| - this.selectDefaultDestination_();
|
| + this,
|
| + DestinationStore.EventType
|
| + .CACHED_SELECTED_DESTINATION_INFO_READY);
|
| }
|
| + return true;
|
| + }
|
| +
|
| + return false;
|
| + },
|
| +
|
| + /**
|
| + * Attempts to find a destination matching the provided rules.
|
| + * @param {!print_preview.DestinationMatch} destinationMatch Rules to match.
|
| + * @private
|
| + */
|
| + fetchMatchingDestination_: function(destinationMatch) {
|
| + this.autoSelectMatchingDestination_ = destinationMatch;
|
| +
|
| + if (destinationMatch.matchOrigin(
|
| + print_preview.Destination.Origin.LOCAL)) {
|
| + this.startLoadLocalDestinations();
|
| + }
|
| + if (destinationMatch.matchOrigin(
|
| + print_preview.Destination.Origin.PRIVET)) {
|
| + this.startLoadPrivetDestinations();
|
| + }
|
| + if (destinationMatch.matchOrigin(
|
| + print_preview.Destination.Origin.EXTENSION)) {
|
| + this.startLoadExtensionDestinations();
|
| + }
|
| + if (destinationMatch.matchOrigin(
|
| + print_preview.Destination.Origin.COOKIES) ||
|
| + destinationMatch.matchOrigin(
|
| + print_preview.Destination.Origin.DEVICE) ||
|
| + destinationMatch.matchOrigin(
|
| + print_preview.Destination.Origin.PROFILE)) {
|
| + this.startLoadCloudDestinations();
|
| }
|
| },
|
|
|
| /**
|
| + * @param {?string} serializedDefaultDestinationSelectionRulesStr Serialized
|
| + * default destination selection rules.
|
| + * @return {!print_preview.DestinationMatch} Creates rules matching
|
| + * previously selected destination.
|
| + * @private
|
| + */
|
| + convertToDestinationMatch_: function(
|
| + serializedDefaultDestinationSelectionRulesStr) {
|
| + var matchRules = null;
|
| + try {
|
| + if (serializedDefaultDestinationSelectionRulesStr) {
|
| + matchRules =
|
| + JSON.parse(serializedDefaultDestinationSelectionRulesStr);
|
| + }
|
| + } catch(e) {
|
| + console.error(
|
| + 'Failed to parse defaultDestinationSelectionRules: ' + e);
|
| + }
|
| + if (!matchRules)
|
| + return;
|
| +
|
| + var isLocal = !matchRules.kind || matchRules.kind == 'local';
|
| + var isCloud = !matchRules.kind || matchRules.kind == 'cloud';
|
| + if (!isLocal && !isCloud) {
|
| + console.error('Unsupported type: "' + matchRules.kind + '"');
|
| + return null;
|
| + }
|
| +
|
| + var origins = [];
|
| + if (isLocal) {
|
| + origins.push(print_preview.Destination.Origin.LOCAL);
|
| + origins.push(print_preview.Destination.Origin.PRIVET);
|
| + origins.push(print_preview.Destination.Origin.EXTENSION);
|
| + }
|
| + if (isCloud) {
|
| + origins.push(print_preview.Destination.Origin.COOKIES);
|
| + origins.push(print_preview.Destination.Origin.DEVICE);
|
| + origins.push(print_preview.Destination.Origin.PROFILE);
|
| + }
|
| +
|
| + var idRegExp = null;
|
| + try {
|
| + if (matchRules.idPattern) {
|
| + idRegExp = new RegExp(matchRules.idPattern || '.*');
|
| + }
|
| + } catch (e) {
|
| + console.error('Failed to parse regexp for "id": ' + e);
|
| + }
|
| +
|
| + var displayNameRegExp = null;
|
| + try {
|
| + if (matchRules.namePattern) {
|
| + displayNameRegExp = new RegExp(matchRules.namePattern || '.*');
|
| + }
|
| + } catch (e) {
|
| + console.error('Failed to parse regexp for "name": ' + e);
|
| + }
|
| +
|
| + return new DestinationMatch(
|
| + origins,
|
| + idRegExp,
|
| + displayNameRegExp,
|
| + true /*skipVirtualDestinations*/);
|
| + },
|
| +
|
| + /**
|
| + * @return {print_preview.DestinationMatch} Creates rules matching
|
| + * previously selected destination.
|
| + * @private
|
| + */
|
| + convertPreselectedToDestinationMatch_: function() {
|
| + if (this.appState_.selectedDestinationId &&
|
| + this.appState_.selectedDestinationOrigin) {
|
| + return this.createExactDestinationMatch_(
|
| + this.appState_.selectedDestinationOrigin,
|
| + this.appState_.selectedDestinationId);
|
| + }
|
| + if (this.systemDefaultDestinationId_) {
|
| + return this.createExactDestinationMatch_(
|
| + print_preview.Destination.Origin.LOCAL,
|
| + this.systemDefaultDestinationId_);
|
| + }
|
| + return null;
|
| + },
|
| +
|
| + /**
|
| + * @param {!print_preview.Destination.Origin} origin Destination origin.
|
| + * @param {string} id Destination id.
|
| + * @return {!print_preview.DestinationMatch} Creates rules matching
|
| + * provided destination.
|
| + * @private
|
| + */
|
| + createExactDestinationMatch_: function(origin, id) {
|
| + return new DestinationMatch(
|
| + [origin],
|
| + new RegExp('^' + id.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + '$'),
|
| + null /*displayNameRegExp*/,
|
| + false /*skipVirtualDestinations*/);
|
| + },
|
| +
|
| + /**
|
| * Sets the destination store's Google Cloud Print interface.
|
| * @param {!cloudprint.CloudPrintInterface} cloudPrintInterface Interface
|
| * to set.
|
| @@ -448,7 +743,7 @@ cr.define('print_preview', function() {
|
| * @param {print_preview.Destination} destination Destination to select.
|
| */
|
| selectDestination: function(destination) {
|
| - this.isInAutoSelectMode_ = false;
|
| + this.autoSelectMatchingDestination_ = null;
|
| // When auto select expires, DESTINATION_SELECT event has to be dispatched
|
| // anyway (see isAutoSelectDestinationInProgress() logic).
|
| if (this.autoSelectTimeout_) {
|
| @@ -534,7 +829,7 @@ cr.define('print_preview', function() {
|
| * Selects 'Save to PDF' destination (since it always exists).
|
| * @private
|
| */
|
| - selectDefaultDestination_: function() {
|
| + selectPdfDestination_: function() {
|
| var saveToPdfKey = this.getDestinationKey_(
|
| print_preview.Destination.Origin.LOCAL,
|
| print_preview.Destination.GooglePromotedId.SAVE_AS_PDF,
|
| @@ -543,6 +838,32 @@ cr.define('print_preview', function() {
|
| this.destinationMap_[saveToPdfKey] || this.destinations_[0] || null);
|
| },
|
|
|
| + /**
|
| + * Attempts to select system default destination with a fallback to
|
| + * 'Save to PDF' destination.
|
| + * @private
|
| + */
|
| + selectDefaultDestination_: function() {
|
| + if (this.systemDefaultDestinationId_) {
|
| + if (this.autoSelectMatchingDestination_ &&
|
| + !this.autoSelectMatchingDestination_.matchIdAndOrigin(
|
| + this.systemDefaultDestinationId_,
|
| + print_preview.Destination.Origin.LOCAL)) {
|
| + if (this.fetchPreselectedDestination_(
|
| + print_preview.Destination.Origin.LOCAL,
|
| + this.systemDefaultDestinationId_,
|
| + '' /*account*/,
|
| + '' /*name*/,
|
| + null /*capabilities*/,
|
| + '' /*extensionId*/,
|
| + '' /*extensionName*/)) {
|
| + return;
|
| + }
|
| + }
|
| + }
|
| + this.selectPdfDestination_();
|
| + },
|
| +
|
| /** Initiates loading of local print destinations. */
|
| startLoadLocalDestinations: function() {
|
| if (!this.hasLoadedAllLocalDestinations_) {
|
| @@ -711,20 +1032,21 @@ cr.define('print_preview', function() {
|
|
|
| /**
|
| * Dispatches DESTINATIONS_INSERTED event. In auto select mode, tries to
|
| - * update selected destination to match {@code appState_} settings.
|
| + * update selected destination to match
|
| + * {@code autoSelectMatchingDestination_}.
|
| * @param {print_preview.Destination=} opt_destination The only destination
|
| * that was changed or skipped if possibly more than one destination was
|
| - * changed. Used as a hint to limit destination search scope in
|
| - * {@code isInAutoSelectMode_).
|
| + * changed. Used as a hint to limit destination search scope against
|
| + * {@code autoSelectMatchingDestination_).
|
| */
|
| destinationsInserted_: function(opt_destination) {
|
| cr.dispatchSimpleEvent(
|
| this, DestinationStore.EventType.DESTINATIONS_INSERTED);
|
| - if (this.isInAutoSelectMode_) {
|
| + if (this.autoSelectMatchingDestination_) {
|
| var destinationsToSearch =
|
| opt_destination && [opt_destination] || this.destinations_;
|
| destinationsToSearch.some(function(destination) {
|
| - if (this.matchPersistedDestination_(destination)) {
|
| + if (this.autoSelectMatchingDestination_.match(destination)) {
|
| this.selectDestination(destination);
|
| return true;
|
| }
|
| @@ -783,8 +1105,13 @@ cr.define('print_preview', function() {
|
| this, DestinationStore.EventType.DESTINATION_SEARCH_DONE);
|
| // Clear initially selected (cached) extension destination if it hasn't
|
| // been found among reported extension destinations.
|
| - if (this.isInAutoSelectMode_ && this.selectedDestination_.isExtension)
|
| + if (this.autoSelectMatchingDestination_ &&
|
| + this.autoSelectMatchingDestination_.matchOrigin(
|
| + print_preview.Destination.Origin.EXTENSION) &&
|
| + this.selectedDestination_ &&
|
| + this.selectedDestination_.isExtension) {
|
| this.selectDefaultDestination_();
|
| + }
|
| },
|
|
|
| /**
|
| @@ -968,9 +1295,9 @@ cr.define('print_preview', function() {
|
| onGetCapabilitiesFail_: function(event) {
|
| console.error('Failed to get print capabilities for printer ' +
|
| event.destinationId);
|
| - if (this.isInAutoSelectMode_ &&
|
| - this.sameAsPersistedDestination_(event.destinationId,
|
| - event.destinationOrigin)) {
|
| + if (this.autoSelectMatchingDestination_ &&
|
| + this.autoSelectMatchingDestination_.matchIdAndOrigin(
|
| + event.destinationId, event.destinationOrigin)) {
|
| this.selectDefaultDestination_();
|
| }
|
| },
|
| @@ -1015,9 +1342,9 @@ cr.define('print_preview', function() {
|
| * @private
|
| */
|
| onCloudPrintPrinterFailed_: function(event) {
|
| - if (this.isInAutoSelectMode_ &&
|
| - this.sameAsPersistedDestination_(event.destinationId,
|
| - event.destinationOrigin)) {
|
| + if (this.autoSelectMatchingDestination_ &&
|
| + this.autoSelectMatchingDestination_.matchIdAndOrigin(
|
| + event.destinationId, event.destinationOrigin)) {
|
| console.error(
|
| 'Failed to fetch last used printer caps: ' + event.destinationId);
|
| this.selectDefaultDestination_();
|
| @@ -1112,7 +1439,8 @@ cr.define('print_preview', function() {
|
| */
|
| onDestinationsReload_: function() {
|
| this.reset_();
|
| - this.isInAutoSelectMode_ = true;
|
| + this.autoSelectMatchingDestination_ =
|
| + this.convertPreselectedToDestinationMatch_();
|
| this.createLocalPdfPrintDestination_();
|
| this.startLoadAllDestinations();
|
| },
|
| @@ -1138,30 +1466,6 @@ cr.define('print_preview', function() {
|
| getKey_: function(destination) {
|
| return this.getDestinationKey_(
|
| destination.origin, destination.id, destination.account);
|
| - },
|
| -
|
| - /**
|
| - * @param {!print_preview.Destination} destination Destination to match.
|
| - * @return {boolean} Whether {@code destination} matches the last user
|
| - * selected one.
|
| - * @private
|
| - */
|
| - matchPersistedDestination_: function(destination) {
|
| - return !this.appState_.selectedDestinationId ||
|
| - !this.appState_.selectedDestinationOrigin ||
|
| - this.sameAsPersistedDestination_(
|
| - destination.id, destination.origin);
|
| - },
|
| -
|
| - /**
|
| - * @param {?string} id Id of the destination.
|
| - * @param {?string} origin Oring of the destination.
|
| - * @return {boolean} Whether destination is the same as initial.
|
| - * @private
|
| - */
|
| - sameAsPersistedDestination_: function(id, origin) {
|
| - return id == this.appState_.selectedDestinationId &&
|
| - origin == this.appState_.selectedDestinationOrigin;
|
| }
|
| };
|
|
|
|
|