Sort unlaunched apps on app list start page by apps grid order.
[chromium-blink-merge.git] / ui / file_manager / video_player / js / background.js
blob201088440a9555f2dc0c4fd8cb36544f561c05ec
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
3 // found in the LICENSE file.
5 /**
6  * Icon of the video player.
7  * TODO(yoshiki): Consider providing an exact size icon, instead of relying
8  * on downsampling by ash.
9  *
10  * @type {string}
11  * @const
12  */
13 var ICON_IMAGE = 'images/icon/video-player-64.png';
15 /**
16  * Configuration of the video player panel.
17  * @type {Object}
18  */
19 var windowCreateOptions = {
20   frame: 'none',
21   minWidth: 480,
22   minHeight: 270
25 /**
26  * Backgound object. This is necessary for AppWindowWrapper.
27  * @type {BackgroundBase}
28  */
29 var background = new BackgroundBase();
31 /**
32  * Queue to serialize initialization.
33  * @type {AsyncUtil.Queue}
34  */
35 var initializeQueue = new AsyncUtil.Queue();
37 // Initializes the strings. This needs for the volume manager.
38 initializeQueue.run(function(fulfill) {
39   chrome.fileManagerPrivate.getStrings(function(stringData) {
40     loadTimeData.data = stringData;
41     fulfill();
42   }.wrap());
43 }.wrap());
45 // Initializes the volume manager. This needs for isolated entries.
46 initializeQueue.run(function(fulfill) {
47   VolumeManager.getInstance(fulfill);
48 }.wrap());
50 // Registers the handlers.
51 chrome.app.runtime.onLaunched.addListener(onLaunched);
53 /**
54  * Called when an app is launched.
55  * @param {Object} launchData Launch data.
56  */
57 function onLaunched(launchData) {
58   if (!launchData || !launchData.items || launchData.items.length == 0)
59     return;
61   var playlist = {};
63   initializeQueue.run(function(fulfill) {
64     var isolatedEntries = launchData.items.map(function(item) {
65       return item.entry;
66     }.wrap());
68     chrome.fileManagerPrivate.resolveIsolatedEntries(isolatedEntries,
69         function(externalEntries) {
70           var urls = util.entriesToURLs(externalEntries);
71           playlist = {items: urls, position: 0};
72           fulfill();
73         }.wrap());
74   }.wrap());
76   initializeQueue.run(function(fulfill) {
77     openVideoPlayerWindow(playlist, false);
78     fulfill();
79   }.wrap());
82 var generateWindowId = (function() {
83   var seq = 0;
84   return function() {
85     return 'VIDEO_PLAYER_APP_' + seq++;
86   }.wrap();
87 }.wrap())();
89 /**
90  * Opens player window.
91  * @param {Object} playlist List of videos to play and index to start playing.
92  * @param {boolean} reopen True if reopen, false otherwise.
93  * @return {Promise} Promise to be fulfilled on success, or rejected on error.
94  */
95 function openVideoPlayerWindow(playlist, reopen) {
96   var items = playlist.items;
97   var position = playlist.position;
98   var startUrl = (position < items.length) ? items[position] : '';
99   var windowId = null;
101   return new Promise(function(fulfill, reject) {
102     util.URLsToEntries(items).then(function(result) {
103       fulfill(result.entries);
104     }.wrap()).catch(reject);
105   }.wrap()).then(function(entries) {
106     if (entries.length === 0)
107       return Promise.reject('No file to open.');
109     // Adjusts the position to start playing.
110     var maybePosition = util.entriesToURLs(entries).indexOf(startUrl);
111     if (maybePosition !== -1)
112       position = maybePosition;
114     windowId = generateWindowId();
116     // Opens the video player window.
117     return new Promise(function(fulfill, reject) {
118       var urls = util.entriesToURLs(entries);
119       var videoPlayer = new AppWindowWrapper('video_player.html',
120           windowId,
121           windowCreateOptions);
123       videoPlayer.launch(
124           {items: urls, position: position},
125           reopen,
126           fulfill.bind(null, videoPlayer));
127     }.wrap());
128   }.wrap()).then(function(videoPlayer) {
129     var appWindow = videoPlayer.rawAppWindow;
131     if (chrome.test)
132       appWindow.contentWindow.loadMockCastExtensionForTest = true;
134     videoPlayer.setIcon(ICON_IMAGE);
135     appWindow.focus();
137     return windowId;
138   }.wrap()).catch(function(error) {
139     console.error('Launch failed' + error.stack || error);
140     return Promise.reject(error);
141   }.wrap());