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

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

Issue 514103002: Video Player: Close the video when the session is disconnected (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix a minor bug 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 * @param {Element} playerContainer Main container. 8 * @param {Element} playerContainer Main container.
9 * @param {Element} videoContainer Container for the video element. 9 * @param {Element} videoContainer Container for the video element.
10 * @param {Element} controlsContainer Container for video controls. 10 * @param {Element} controlsContainer Container for video controls.
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 this.controls_ = null; 152 this.controls_ = null;
153 this.videoElement_ = null; 153 this.videoElement_ = null;
154 this.videos_ = null; 154 this.videos_ = null;
155 this.currentPos_ = 0; 155 this.currentPos_ = 0;
156 156
157 this.currentSession_ = null; 157 this.currentSession_ = null;
158 this.currentCast_ = null; 158 this.currentCast_ = null;
159 159
160 this.loadQueue_ = new AsyncUtil.Queue(); 160 this.loadQueue_ = new AsyncUtil.Queue();
161 161
162 this.onCastSessionUpdateBound_ = this.onCastSessionUpdate_.wrap(this);
163
162 Object.seal(this); 164 Object.seal(this);
163 } 165 }
164 166
165 VideoPlayer.prototype = { 167 VideoPlayer.prototype = {
166 get controls() { 168 get controls() {
167 return this.controls_; 169 return this.controls_;
168 } 170 }
169 }; 171 };
170 172
171 /** 173 /**
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 326
325 videoElementInitializePromise = 327 videoElementInitializePromise =
326 media.isAvailableForCast().then(function(result) { 328 media.isAvailableForCast().then(function(result) {
327 if (!result) 329 if (!result)
328 return Promise.reject('No casts are available.'); 330 return Promise.reject('No casts are available.');
329 331
330 return new Promise(function(fulfill, reject) { 332 return new Promise(function(fulfill, reject) {
331 chrome.cast.requestSession( 333 chrome.cast.requestSession(
332 fulfill, reject, undefined, this.currentCast_.label); 334 fulfill, reject, undefined, this.currentCast_.label);
333 }.bind(this)).then(function(session) { 335 }.bind(this)).then(function(session) {
336 session.addUpdateListener(this.onCastSessionUpdateBound_);
337
334 this.currentSession_ = session; 338 this.currentSession_ = session;
335 this.videoElement_ = new CastVideoElement(media, session); 339 this.videoElement_ = new CastVideoElement(media, session);
336 this.controls.attachMedia(this.videoElement_); 340 this.controls.attachMedia(this.videoElement_);
337 }.bind(this)); 341 }.bind(this));
338 }.bind(this)); 342 }.bind(this));
339 } else { 343 } else {
340 videoPlayerElement.removeAttribute('casting'); 344 videoPlayerElement.removeAttribute('casting');
341 345
342 this.videoElement_ = document.createElement('video'); 346 this.videoElement_ = document.createElement('video');
343 document.querySelector('#video-container').appendChild( 347 document.querySelector('#video-container').appendChild(
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
406 if (this.videoElement_.dispose) 410 if (this.videoElement_.dispose)
407 this.videoElement_.dispose(); 411 this.videoElement_.dispose();
408 // Detach the previous video element, if exists. 412 // Detach the previous video element, if exists.
409 if (this.videoElement_.parentNode) 413 if (this.videoElement_.parentNode)
410 this.videoElement_.parentNode.removeChild(this.videoElement_); 414 this.videoElement_.parentNode.removeChild(this.videoElement_);
411 } 415 }
412 this.videoElement_ = null; 416 this.videoElement_ = null;
413 417
414 if (!opt_keepSession && this.currentSession_) { 418 if (!opt_keepSession && this.currentSession_) {
415 this.currentSession_.stop(callback, callback); 419 this.currentSession_.stop(callback, callback);
420 this.currentSession_.removeUpdateListener(this.onCastSessionUpdateBound_);
416 this.currentSession_ = null; 421 this.currentSession_ = null;
417 } else { 422 } else {
418 callback(); 423 callback();
419 } 424 }
420 }.wrap(this)); 425 }.wrap(this));
421 }; 426 };
422 427
423 /** 428 /**
424 * Called when the first video is ready after starting to load. 429 * Called when the first video is ready after starting to load.
425 * @private 430 * @private
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
572 } 577 }
573 } 578 }
574 }; 579 };
575 580
576 /** 581 /**
577 * Called when the current cast is disappear from the cast list. 582 * Called when the current cast is disappear from the cast list.
578 * @private 583 * @private
579 */ 584 */
580 VideoPlayer.prototype.onCurrentCastDisappear_ = function() { 585 VideoPlayer.prototype.onCurrentCastDisappear_ = function() {
581 this.currentCast_ = null; 586 this.currentCast_ = null;
587 this.currentSession_.removeUpdateListener(this.onCastSessionUpdateBound_);
582 this.currentSession_ = null; 588 this.currentSession_ = null;
583 this.controls.showErrorMessage('GALLERY_VIDEO_DECODING_ERROR'); 589 this.controls.showErrorMessage('GALLERY_VIDEO_DECODING_ERROR');
584 this.unloadVideo(); 590 this.unloadVideo();
585 }; 591 };
586 592
587 /** 593 /**
594 * This method should be called when the session is updated.
595 * @param {boolean} alive Whether the session is alive or not.
596 * @private
597 */
598 VideoPlayer.prototype.onCastSessionUpdate_ = function(alive) {
599 if (!alive)
600 this.unloadVideo();
601 };
602
603 /**
588 * Initialize the list of videos. 604 * Initialize the list of videos.
589 * @param {function(Array.<Object>)} callback Called with the video list when 605 * @param {function(Array.<Object>)} callback Called with the video list when
590 * it is ready. 606 * it is ready.
591 */ 607 */
592 function initVideos(callback) { 608 function initVideos(callback) {
593 if (window.videos) { 609 if (window.videos) {
594 var videos = window.videos; 610 var videos = window.videos;
595 window.videos = null; 611 window.videos = null;
596 callback(videos); 612 callback(videos);
597 return; 613 return;
(...skipping 23 matching lines...) Expand all
621 var initPromise = Promise.all( 637 var initPromise = Promise.all(
622 [new Promise(initVideos.wrap(null)), 638 [new Promise(initVideos.wrap(null)),
623 new Promise(initStrings.wrap(null)), 639 new Promise(initStrings.wrap(null)),
624 new Promise(util.addPageLoadHandler.wrap(null))]); 640 new Promise(util.addPageLoadHandler.wrap(null))]);
625 641
626 initPromise.then(function(results) { 642 initPromise.then(function(results) {
627 var videos = results[0]; 643 var videos = results[0];
628 player.prepare(videos); 644 player.prepare(videos);
629 return new Promise(player.playFirstVideo.wrap(player)); 645 return new Promise(player.playFirstVideo.wrap(player));
630 }.wrap(null)); 646 }.wrap(null));
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