Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 'use strict'; | 5 'use strict'; |
| 6 | 6 |
| 7 /** | 7 /** |
| 8 * @param {HTMLElement} container Container element. | 8 * @param {HTMLElement} container Container element. |
| 9 * @constructor | 9 * @constructor |
| 10 */ | 10 */ |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 96 */ | 96 */ |
| 97 AudioPlayer.prototype.load = function(playlist) { | 97 AudioPlayer.prototype.load = function(playlist) { |
| 98 this.playlistGeneration_++; | 98 this.playlistGeneration_++; |
| 99 this.currentTrackIndex_ = -1; | 99 this.currentTrackIndex_ = -1; |
| 100 | 100 |
| 101 // Save the app state, in case of restart. Make a copy of the object, so the | 101 // Save the app state, in case of restart. Make a copy of the object, so the |
| 102 // playlist member is not changed after entries are resolved. | 102 // playlist member is not changed after entries are resolved. |
| 103 window.appState = JSON.parse(JSON.stringify(playlist)); // cloning | 103 window.appState = JSON.parse(JSON.stringify(playlist)); // cloning |
| 104 util.saveAppState(); | 104 util.saveAppState(); |
| 105 | 105 |
| 106 this.isExpanded_ = this.model_.expanded; | |
| 107 | |
| 106 // Resolving entries has to be done after the volume manager is initialized. | 108 // Resolving entries has to be done after the volume manager is initialized. |
| 107 this.volumeManager_.ensureInitialized(function() { | 109 this.volumeManager_.ensureInitialized(function() { |
| 108 util.URLsToEntries(playlist.items, function(entries) { | 110 util.URLsToEntries(playlist.items, function(entries) { |
| 109 this.entries_ = entries; | 111 this.entries_ = entries; |
| 110 | 112 |
| 111 var position = playlist.position || 0; | 113 var position = playlist.position || 0; |
| 112 var time = playlist.time || 0; | 114 var time = playlist.time || 0; |
| 113 | 115 |
| 114 if (this.entries_.length == 0) | 116 if (this.entries_.length == 0) |
| 115 return; | 117 return; |
| 116 | 118 |
| 117 this.trackListItems_.splice(0); | 119 this.trackListItems_.splice(0); |
| 118 | 120 |
| 121 // Makes it sure that the track list is now empty to the handler, before | |
| 122 // adding new tracks. | |
| 123 Platform.performMicrotaskCheckpoint(); | |
|
hirono
2014/03/05 17:24:01
Just curious, what goes wrong without the line?
I'
yoshiki
2014/03/05 18:30:41
Yes, that's correct.
hirono
2014/03/06 03:44:47
So how about removing this.trackListItems_ member
yoshiki
2014/03/06 08:25:07
Done
| |
| 124 | |
| 119 for (var i = 0; i != this.entries_.length; i++) { | 125 for (var i = 0; i != this.entries_.length; i++) { |
| 120 var entry = this.entries_[i]; | 126 var entry = this.entries_[i]; |
| 121 var onClick = this.select_.bind(this, i, false /* no restore */); | 127 var onClick = this.select_.bind(this, i, false /* no restore */); |
| 122 this.trackListItems_.push(new AudioPlayer.TrackInfo(entry, onClick)); | 128 this.trackListItems_.push(new AudioPlayer.TrackInfo(entry, onClick)); |
| 123 } | 129 } |
| 124 | 130 |
| 125 // Makes it sure that the handler of the track list is called, before the | 131 // Makes it sure that the handler of the track list is called, before the |
| 126 // handler of the track index. | 132 // handler of the track index. |
| 127 Platform.performMicrotaskCheckpoint(); | 133 Platform.performMicrotaskCheckpoint(); |
| 128 | 134 |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 261 } | 267 } |
| 262 }; | 268 }; |
| 263 | 269 |
| 264 /* Keep the below constants in sync with the CSS. */ | 270 /* Keep the below constants in sync with the CSS. */ |
| 265 | 271 |
| 266 /** | 272 /** |
| 267 * Window header size in pixels. | 273 * Window header size in pixels. |
| 268 * @type {number} | 274 * @type {number} |
| 269 * @const | 275 * @const |
| 270 */ | 276 */ |
| 271 AudioPlayer.HEADER_HEIGHT = 28; | 277 AudioPlayer.HEADER_HEIGHT = 33; // 32px + border 1px |
| 272 | 278 |
| 273 /** | 279 /** |
| 274 * Track height in pixels. | 280 * Track height in pixels. |
| 275 * @type {number} | 281 * @type {number} |
| 276 * @const | 282 * @const |
| 277 */ | 283 */ |
| 278 AudioPlayer.TRACK_HEIGHT = 44; | 284 AudioPlayer.TRACK_HEIGHT = 44; |
| 279 | 285 |
| 280 /** | 286 /** |
| 281 * Controls bar height in pixels. | 287 * Controls bar height in pixels. |
| 282 * @type {number} | 288 * @type {number} |
| 283 * @const | 289 * @const |
| 284 */ | 290 */ |
| 285 AudioPlayer.CONTROLS_HEIGHT = 72; | 291 AudioPlayer.CONTROLS_HEIGHT = 73; // 72px + border 1px |
| 286 | 292 |
| 287 /** | 293 /** |
| 288 * Default number of items in the expanded mode. | 294 * Default number of items in the expanded mode. |
| 289 * @type {number} | 295 * @type {number} |
| 290 * @const | 296 * @const |
| 291 */ | 297 */ |
| 292 AudioPlayer.DEFAULT_EXPANDED_ITEMS = 5; | 298 AudioPlayer.DEFAULT_EXPANDED_ITEMS = 5; |
| 293 | 299 |
| 294 /** | 300 /** |
| 295 * Minimum size of the window in the expanded mode in pixels. | 301 * Minimum size of the window in the expanded mode in pixels. |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 308 if (this.isExpanded_ !== null && | 314 if (this.isExpanded_ !== null && |
| 309 this.isExpanded_ === newValue) | 315 this.isExpanded_ === newValue) |
| 310 return; | 316 return; |
| 311 | 317 |
| 312 if (this.isExpanded_ && !newValue) | 318 if (this.isExpanded_ && !newValue) |
| 313 this.lastExpandedHeight_ = window.innerHeight; | 319 this.lastExpandedHeight_ = window.innerHeight; |
| 314 | 320 |
| 315 if (this.isExpanded_ !== newValue) { | 321 if (this.isExpanded_ !== newValue) { |
| 316 this.isExpanded_ = newValue; | 322 this.isExpanded_ = newValue; |
| 317 this.syncHeight_(); | 323 this.syncHeight_(); |
| 324 | |
| 325 // Saves new state. | |
| 326 window.appState.expanded = newValue; | |
| 327 util.saveAppState(); | |
| 318 } | 328 } |
| 319 }; | 329 }; |
| 320 | 330 |
| 321 /** | 331 /** |
| 322 * @private | 332 * @private |
| 323 */ | 333 */ |
| 324 AudioPlayer.prototype.syncHeight_ = function() { | 334 AudioPlayer.prototype.syncHeight_ = function() { |
| 325 var targetHeight; | 335 var targetHeight; |
| 326 | 336 |
| 327 if (this.model_.expanded) { | 337 if (this.model_.expanded) { |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 405 this.title = (metadata.media && metadata.media.title) || | 415 this.title = (metadata.media && metadata.media.title) || |
| 406 this.getDefaultTitle(); | 416 this.getDefaultTitle(); |
| 407 this.artist = error || | 417 this.artist = error || |
| 408 (metadata.media && metadata.media.artist) || this.getDefaultArtist(); | 418 (metadata.media && metadata.media.artist) || this.getDefaultArtist(); |
| 409 }; | 419 }; |
| 410 | 420 |
| 411 // Starts loading the audio player. | 421 // Starts loading the audio player. |
| 412 window.addEventListener('WebComponentsReady', function(e) { | 422 window.addEventListener('WebComponentsReady', function(e) { |
| 413 AudioPlayer.load(); | 423 AudioPlayer.load(); |
| 414 }); | 424 }); |
| OLD | NEW |