Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(135)

Side by Side Diff: chrome/browser/resources/print_preview/data/destination_store.js

Issue 10545181: Optimizes loading initial printer on non-chromeos platforms. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Add bug reference to TODOs. Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 cr.define('print_preview', function() { 5 cr.define('print_preview', function() {
6 'use strict'; 6 'use strict';
7 7
8 /** 8 /**
9 * A data store that stores destinations and dispatches events when the data 9 * A data store that stores destinations and dispatches events when the data
10 * store changes. 10 * store changes.
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
177 this.initialDestinationId_ = initialDestinationId; 177 this.initialDestinationId_ = initialDestinationId;
178 this.isInAutoSelectMode_ = true; 178 this.isInAutoSelectMode_ = true;
179 if (this.initialDestinationId_ == null) { 179 if (this.initialDestinationId_ == null) {
180 assert(this.destinations_.length > 0, 180 assert(this.destinations_.length > 0,
181 'No destinations available to select'); 181 'No destinations available to select');
182 this.selectDestination(this.destinations_[0]); 182 this.selectDestination(this.destinations_[0]);
183 } else { 183 } else {
184 var candidate = this.destinationMap_[this.initialDestinationId_]; 184 var candidate = this.destinationMap_[this.initialDestinationId_];
185 if (candidate != null) { 185 if (candidate != null) {
186 this.selectDestination(candidate); 186 this.selectDestination(candidate);
187 } else {
188 // Try and fetch the destination
189 // TODO(rltoscano): Since we don't know if the initialDestinationId is
190 // a local printer or a cloud printer, we are going to assume based on
191 // platform. The C++ layer should be modified to return more
192 // information about the initially selected printer so this assumption
193 // does not have to be made. See http://crbug.com/132831.
194 if (!cr.isChromeOS) {
195 this.nativeLayer_.startGetLocalDestinationCapabilities(
196 initialDestinationId);
197 }
187 } 198 }
188 } 199 }
189 }, 200 },
190 201
191 /** 202 /**
192 * Sets the destination store's Google Cloud Print interface. 203 * Sets the destination store's Google Cloud Print interface.
193 * @param {!print_preview.CloudPrintInterface} cloudPrintInterface Interface 204 * @param {!print_preview.CloudPrintInterface} cloudPrintInterface Interface
194 * to set. 205 * to set.
195 */ 206 */
196 setCloudPrintInterface: function(cloudPrintInterface) { 207 setCloudPrintInterface: function(cloudPrintInterface) {
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
385 */ 396 */
386 onLocalDestinationsSet_: function(event) { 397 onLocalDestinationsSet_: function(event) {
387 var localDestinations = event.destinationInfos.map(function(destInfo) { 398 var localDestinations = event.destinationInfos.map(function(destInfo) {
388 return print_preview.LocalDestinationParser.parse(destInfo); 399 return print_preview.LocalDestinationParser.parse(destInfo);
389 }); 400 });
390 this.insertDestinations(localDestinations); 401 this.insertDestinations(localDestinations);
391 }, 402 },
392 403
393 /** 404 /**
394 * Called when the native layer retrieves the capabilities for the selected 405 * Called when the native layer retrieves the capabilities for the selected
395 * local destination. 406 * local destination. Updates the destination with new capabilities if the
407 * destination already exists, otherwise it creates a new destination and
408 * then updates its capabilities.
396 * @param {cr.Event} event Contains the capabilities of the local print 409 * @param {cr.Event} event Contains the capabilities of the local print
397 * destination. 410 * destination.
398 * @private 411 * @private
399 */ 412 */
400 onLocalDestinationCapabilitiesSet_: function(event) { 413 onLocalDestinationCapabilitiesSet_: function(event) {
401 // TODO(rltoscano): There may be a race condition here. This method is 414 var destinationId = event.settingsInfo['printerId'];
402 // assumed to return capabilities for the currently selected printer. But 415 var destination = this.destinationMap_[destinationId];
403 // between the time the local printer was selected and the capabilities 416 var capabilities = print_preview.LocalCapabilitiesParser.parse(
404 // were retrieved, the selected printer can change. One way to address
405 // this is to include the destination ID in the event.settingsInfo
406 // parameter.
407 if (this.selectedDestination_ && this.selectedDestination_.isLocal) {
408 var capabilities = print_preview.LocalCapabilitiesParser.parse(
409 event.settingsInfo); 417 event.settingsInfo);
410 this.selectedDestination_.capabilities = capabilities; 418 if (destination) {
411 cr.dispatchSimpleEvent( 419 destination.capabilities = capabilities;
412 this, 420 if (this.selectedDestination_ &&
413 DestinationStore.EventType.SELECTED_DESTINATION_CAPABILITIES_READY); 421 this.selectedDestination_.id == destinationId) {
422 cr.dispatchSimpleEvent(this,
423 DestinationStore.EventType.
424 SELECTED_DESTINATION_CAPABILITIES_READY);
425 }
426 } else {
427 // TODO(rltoscano): This makes the assumption that the "deviceName" is
428 // the same as "printerName". We should include the "printerName" in the
429 // response. See http://crbug.com/132831.
430 destination = print_preview.LocalDestinationParser.parse(
431 {deviceName: destinationId, printerName: destinationId});
432 destination.capabilities = capabilities;
433 this.insertDestination(destination);
414 } 434 }
415 }, 435 },
416 436
417 /** 437 /**
418 * Called when the /search call completes. Adds the fetched printers to the 438 * Called when the /search call completes. Adds the fetched printers to the
419 * destination store. 439 * destination store.
420 * @param {cr.Event} event Contains the fetched printers. 440 * @param {cr.Event} event Contains the fetched printers.
421 * @private 441 * @private
422 */ 442 */
423 onCloudPrintSearchDone_: function(event) { 443 onCloudPrintSearchDone_: function(event) {
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
464 'No destinations were loaded before auto-select timeout expired'); 484 'No destinations were loaded before auto-select timeout expired');
465 this.selectDestination(this.destinations_[0]); 485 this.selectDestination(this.destinations_[0]);
466 } 486 }
467 }; 487 };
468 488
469 // Export 489 // Export
470 return { 490 return {
471 DestinationStore: DestinationStore 491 DestinationStore: DestinationStore
472 }; 492 };
473 }); 493 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698