OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 /** | 5 /** |
6 * CWSWidgetContainer contains a Chrome Web Store widget that displays list of | 6 * CWSWidgetContainer contains a Chrome Web Store widget that displays list of |
7 * apps that satisfy certain constraints (e.g. fileHandler apps that can handle | 7 * apps that satisfy certain constraints (e.g. fileHandler apps that can handle |
8 * files with specific file extension or MIME type) and enables the user to | 8 * files with specific file extension or MIME type) and enables the user to |
9 * install apps directly from it. | 9 * install apps directly from it. |
10 * CWSWidgetContainer implements client side of the widget, which handles | 10 * CWSWidgetContainer implements client side of the widget, which handles |
(...skipping 351 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
362 * handle showing the Chrome Web Store webview. | 362 * handle showing the Chrome Web Store webview. |
363 * @return {Promise} Resolved when the container is ready to be used. | 363 * @return {Promise} Resolved when the container is ready to be used. |
364 */ | 364 */ |
365 CWSWidgetContainer.prototype.ready = function() { | 365 CWSWidgetContainer.prototype.ready = function() { |
366 return new Promise(function(resolve, reject) { | 366 return new Promise(function(resolve, reject) { |
367 if (this.state_ !== CWSWidgetContainer.State.UNINITIALIZED) { | 367 if (this.state_ !== CWSWidgetContainer.State.UNINITIALIZED) { |
368 reject('Invalid state.'); | 368 reject('Invalid state.'); |
369 return; | 369 return; |
370 } | 370 } |
371 | 371 |
| 372 this.spinnerLayerController_.setVisible(true); |
| 373 |
372 this.metricsRecorder_.recordShowDialog(); | 374 this.metricsRecorder_.recordShowDialog(); |
373 this.metricsRecorder_.startLoad(); | 375 this.metricsRecorder_.startLoad(); |
374 | 376 |
375 this.state_ = CWSWidgetContainer.State.GETTING_ACCESS_TOKEN; | 377 this.state_ = CWSWidgetContainer.State.GETTING_ACCESS_TOKEN; |
376 | 378 |
377 this.tokenGetter_.then(function(accessToken) { | 379 this.tokenGetter_.then(function(accessToken) { |
378 this.state_ = CWSWidgetContainer.State.ACCESS_TOKEN_READY; | 380 this.state_ = CWSWidgetContainer.State.ACCESS_TOKEN_READY; |
379 this.accessToken_ = accessToken; | 381 this.accessToken_ = accessToken; |
380 resolve(); | 382 resolve(); |
381 }.bind(this), function(error) { | 383 }.bind(this), function(error) { |
| 384 this.spinnerLayerController_.setVisible(false); |
382 this.state_ = CWSWidgetContainer.State.UNINITIALIZED; | 385 this.state_ = CWSWidgetContainer.State.UNINITIALIZED; |
383 reject('Failed to get Web Store access token: ' + error); | 386 reject('Failed to get Web Store access token: ' + error); |
384 }.bind(this)); | 387 }.bind(this)); |
385 }.bind(this)); | 388 }.bind(this)); |
386 }; | 389 }; |
387 | 390 |
388 /** | 391 /** |
389 * Initializes and starts loading the Chrome Web Store widget webview. | 392 * Initializes and starts loading the Chrome Web Store widget webview. |
390 * Must not be called before {@code this.ready()} is resolved. | 393 * Must not be called before {@code this.ready()} is resolved. |
391 * | 394 * |
(...skipping 424 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
816 function(visible) { | 819 function(visible) { |
817 if (this.visible_ === visible) | 820 if (this.visible_ === visible) |
818 return; | 821 return; |
819 | 822 |
820 if (this.clearTransition_) | 823 if (this.clearTransition_) |
821 this.clearTransition_(); | 824 this.clearTransition_(); |
822 | 825 |
823 this.visible_ = visible; | 826 this.visible_ = visible; |
824 | 827 |
825 // Spinner should be shown during transition. | 828 // Spinner should be shown during transition. |
826 if (!this.spinnerLayer_.classList.contains('cws-widget-show-spinner')) | 829 this.spinnerLayer_.classList.toggle('cws-widget-show-spinner', true); |
827 this.spinnerLayer_.classList.add('cws-widget-show-spinner'); | |
828 | 830 |
829 if (this.visible_) { | 831 if (this.visible_) { |
830 this.spinnerLayer_.focus(); | 832 this.spinnerLayer_.focus(); |
831 } else if (this.focusOnHide_) { | 833 } else if (this.focusOnHide_) { |
832 this.focusOnHide_.focus(); | 834 this.focusOnHide_.focus(); |
833 } | 835 } |
834 | 836 |
835 if (!this.visible_) | 837 if (!this.visible_) |
836 this.spinnerLayer_.classList.add('cws-widget-hiding-spinner'); | 838 this.spinnerLayer_.classList.add('cws-widget-hiding-spinner'); |
837 | 839 |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
933 this.metricsImpl_.recordUserAction('SuggestApps.ShowDialog'); | 935 this.metricsImpl_.recordUserAction('SuggestApps.ShowDialog'); |
934 }; | 936 }; |
935 | 937 |
936 CWSWidgetContainer.MetricsRecorder.prototype.startLoad = function() { | 938 CWSWidgetContainer.MetricsRecorder.prototype.startLoad = function() { |
937 this.metricsImpl_.startInterval('SuggestApps.LoadTime'); | 939 this.metricsImpl_.startInterval('SuggestApps.LoadTime'); |
938 }; | 940 }; |
939 | 941 |
940 CWSWidgetContainer.MetricsRecorder.prototype.finishLoad = function() { | 942 CWSWidgetContainer.MetricsRecorder.prototype.finishLoad = function() { |
941 this.metricsImpl_.recordInterval('SuggestApps.LoadTime'); | 943 this.metricsImpl_.recordInterval('SuggestApps.LoadTime'); |
942 }; | 944 }; |
OLD | NEW |