Index: ui/file_manager/video_player/js/video_player.js |
diff --git a/ui/file_manager/video_player/js/video_player.js b/ui/file_manager/video_player/js/video_player.js |
index a8b5b81a533ade6c09a6a505b58f5d5fdca32fd2..81ba71bede20c22d6a21180d5772b45e5741eb3b 100644 |
--- a/ui/file_manager/video_player/js/video_player.js |
+++ b/ui/file_manager/video_player/js/video_player.js |
@@ -135,6 +135,8 @@ function VideoPlayer() { |
this.videos_ = null; |
this.currentPos_ = 0; |
+ this.currentCast_ = null; |
+ |
Object.seal(this); |
} |
@@ -272,11 +274,24 @@ VideoPlayer.prototype.loadVideo_ = function(url, title, opt_callback) { |
this.controls.inactivityWatcher.disabled = false; |
this.controls.decodeErrorOccured = false; |
- this.videoElement_ = document.createElement('video'); |
- document.querySelector('#video-container').appendChild(this.videoElement_); |
- this.controls.attachMedia(this.videoElement_); |
+ if (this.currentCast_) { |
+ videoPlayerElement.setAttribute('casting', true); |
+ this.videoElement_ = new CastVideoElement(); |
+ this.controls.attachMedia(this.videoElement_); |
+ |
+ document.querySelector('#cast-name-label').textContent = |
+ loadTimeData.getString('VIDEO_PLAYER_PLAYING_ON');; |
+ document.querySelector('#cast-name').textContent = this.currentCast_.name; |
+ } else { |
+ videoPlayerElement.removeAttribute('casting'); |
+ |
+ this.videoElement_ = document.createElement('video'); |
+ document.querySelector('#video-container').appendChild(this.videoElement_); |
+ |
+ this.controls.attachMedia(this.videoElement_); |
+ this.videoElement_.src = url; |
+ } |
- this.videoElement_.src = url; |
this.videoElement_.load(); |
if (opt_callback) { |
@@ -304,7 +319,7 @@ VideoPlayer.prototype.playFirstVideo = function() { |
*/ |
VideoPlayer.prototype.unloadVideo = function() { |
// Detach the previous video element, if exists. |
- if (this.videoElement_) |
+ if (this.videoElement_ && this.videoElement_.parentNode) |
this.videoElement_.parentNode.removeChild(this.videoElement_); |
this.videoElement_ = null; |
}; |
@@ -380,6 +395,19 @@ VideoPlayer.prototype.reloadCurrentVideo_ = function(opt_callback) { |
}; |
/** |
+ * Invokes when a menuitem in the cast menu is selected. |
+ * @param {Object} cast Selected element in the list of casts. |
+ */ |
+VideoPlayer.prototype.onCastSelected_ = function(cast) { |
+ // If the selected item is same as the current item, do nothing. |
+ if ((this.currentCast_ && this.currentCast_.name) === (cast && cast.name)) |
+ return; |
+ |
+ this.currentCast_ = cast || null; |
+ this.reloadCurrentVideo_(); |
+}; |
+ |
+/** |
* Set the list of casts. |
* @param {Array.<Object>} casts List of casts. |
*/ |
@@ -388,14 +416,27 @@ VideoPlayer.prototype.setCastList = function(casts) { |
var menu = document.querySelector('#cast-menu'); |
menu.innerHTML = ''; |
+ // TODO(yoshiki): Handle the case that the current cast disapears. |
+ |
if (casts.length === 0) { |
button.classList.add('hidden'); |
+ if (!this.currentCast_) { |
+ this.currentCast_ = null; |
+ this.reloadCurrentVideo_(); |
+ } |
return; |
} |
+ var item = new cr.ui.MenuItem(); |
+ item.label = loadTimeData.getString('VIDEO_PLAYER_PLAY_THIS_COMPUTER'); |
+ item.addEventListener('activate', this.onCastSelected_.wrap(this, null)); |
+ menu.appendChild(item); |
+ |
for (var i = 0; i < casts.length; i++) { |
var item = new cr.ui.MenuItem(); |
- item.textContent = casts[i].name; |
+ item.label = casts[i].name; |
+ item.addEventListener('activate', |
+ this.onCastSelected_.wrap(this, casts[i])); |
menu.appendChild(item); |
} |
button.classList.remove('hidden'); |