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

Side by Side Diff: ui/file_manager/video_player/js/cast/cast_video_element.js

Issue 563253002: Support 'loop' atribute on fake video element for casting (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add a JSdoc Created 6 years, 3 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 * Interval for updating media info (in ms). 8 * Interval for updating media info (in ms).
9 * @type {number} 9 * @type {number}
10 * @const 10 * @const
(...skipping 18 matching lines...) Expand all
29 */ 29 */
30 function CastVideoElement(media, session) { 30 function CastVideoElement(media, session) {
31 this.mediaManager_ = media; 31 this.mediaManager_ = media;
32 this.mediaInfo_ = null; 32 this.mediaInfo_ = null;
33 33
34 this.castMedia_ = null; 34 this.castMedia_ = null;
35 this.castSession_ = session; 35 this.castSession_ = session;
36 this.currentTime_ = null; 36 this.currentTime_ = null;
37 this.src_ = ''; 37 this.src_ = '';
38 this.volume_ = 100; 38 this.volume_ = 100;
39 this.loop_ = false;
39 this.currentMediaPlayerState_ = null; 40 this.currentMediaPlayerState_ = null;
40 this.currentMediaCurrentTime_ = null; 41 this.currentMediaCurrentTime_ = null;
41 this.currentMediaDuration_ = null; 42 this.currentMediaDuration_ = null;
42 this.playInProgress_ = false; 43 this.playInProgress_ = false;
43 this.pauseInProgress_ = false; 44 this.pauseInProgress_ = false;
44 this.errorCode_ = 0; 45 this.errorCode_ = 0;
45 46
46 this.onMessageBound_ = this.onMessage_.bind(this); 47 this.onMessageBound_ = this.onMessage_.bind(this);
47 this.onCastMediaUpdatedBound_ = this.onCastMediaUpdated_.bind(this); 48 this.onCastMediaUpdatedBound_ = this.onCastMediaUpdated_.bind(this);
48 this.castSession_.addMessageListener( 49 this.castSession_.addMessageListener(
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 * @type {?string} 187 * @type {?string}
187 */ 188 */
188 get src() { 189 get src() {
189 return null; 190 return null;
190 }, 191 },
191 set src(value) { 192 set src(value) {
192 // Do nothing. 193 // Do nothing.
193 }, 194 },
194 195
195 /** 196 /**
197 * Returns the flag if the video loops at end or not.
198 * @type {boolean}
199 */
200 get loop() {
201 return this.loop_;
202 },
203 set loop(value) {
204 this.loop_ = !!value;
205 },
206
207 /**
196 * Returns the error object if available. 208 * Returns the error object if available.
197 * @type {?Object} 209 * @type {?Object}
198 */ 210 */
199 get error() { 211 get error() {
200 if (this.errorCode_ === 0) 212 if (this.errorCode_ === 0)
201 return null; 213 return null;
202 214
203 return {code: this.errorCode_}; 215 return {code: this.errorCode_};
204 }, 216 },
205 217
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
401 * is fired. 413 * is fired.
402 * 414 *
403 * @param {boolean} alive Media availability. False if it's unavailable. 415 * @param {boolean} alive Media availability. False if it's unavailable.
404 * @private 416 * @private
405 */ 417 */
406 onCastMediaUpdated_: function(alive) { 418 onCastMediaUpdated_: function(alive) {
407 if (!this.castMedia_) 419 if (!this.castMedia_)
408 return; 420 return;
409 421
410 var media = this.castMedia_; 422 var media = this.castMedia_;
423 if (this.loop_ &&
424 media.idleReason === chrome.cast.media.IdleReason.FINISHED &&
425 !alive) {
426 // Resets the previous media silently.
427 this.castMedia_ = null;
428
429 // Replay the current media.
430 this.currentMediaPlayerState_ = chrome.cast.media.PlayerState.BUFFERING;
431 this.currentMediaCurrentTime_ = 0;
432 this.dispatchEvent(new Event('play'));
433 this.dispatchEvent(new Event('timeupdate'));
434 this.play();
435 return;
436 }
437
411 if (this.currentMediaPlayerState_ !== media.playerState) { 438 if (this.currentMediaPlayerState_ !== media.playerState) {
412 var oldPlayState = false; 439 var oldPlayState = false;
413 var oldState = this.currentMediaPlayerState_; 440 var oldState = this.currentMediaPlayerState_;
414 if (oldState === chrome.cast.media.PlayerState.BUFFERING || 441 if (oldState === chrome.cast.media.PlayerState.BUFFERING ||
415 oldState === chrome.cast.media.PlayerState.PLAYING) { 442 oldState === chrome.cast.media.PlayerState.PLAYING) {
416 oldPlayState = true; 443 oldPlayState = true;
417 } 444 }
418 var newPlayState = false; 445 var newPlayState = false;
419 var newState = media.playerState; 446 var newState = media.playerState;
420 if (newState === chrome.cast.media.PlayerState.BUFFERING || 447 if (newState === chrome.cast.media.PlayerState.BUFFERING ||
(...skipping 17 matching lines...) Expand all
438 this.dispatchEvent(new Event('durationchange')); 465 this.dispatchEvent(new Event('durationchange'));
439 } 466 }
440 467
441 // Media is being unloaded. 468 // Media is being unloaded.
442 if (!alive) { 469 if (!alive) {
443 this.unloadMedia_(); 470 this.unloadMedia_();
444 return; 471 return;
445 } 472 }
446 }, 473 },
447 }; 474 };
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698