Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / ui / file_manager / video_player / js / cast / media_manager.js
blobdb6b3e25b49fae8a348d6b04fba5d847ac7c68ec
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  * Media manager class.
7  * This class supports the information for the media file.
8  * @param {!FileEntry} entry Entry of media file. This must be a external entry.
9  * @constructor
10  */
11 function MediaManager(entry) {
12   this.entry_ = entry;
14   this.cachedDriveProp_ = null;
15   this.cachedUrl_ = null;
16   this.cachedToken_ = null;
18   Object.seal(this);
21 MediaManager.prototype = {};
23 /**
24  * Checks if the file is available for cast or not.
25  *
26  * @return {Promise} Promise which is resolved with boolean. If true, the file
27  *     is available for cast. False, otherwise.
28  */
29 MediaManager.prototype.isAvailableForCast = function() {
30   return this.getUrl().then(function(url) {
31     return true;
32   }, function() {
33     return false;
34   });
37 /**
38  * Retrieves the token for cast.
39  *
40  * @param {boolean} refresh If true, force to refresh a token. If false, use the
41  *     cached token if available.
42  * @return {Promise} Promise which is resolved with the token. Reject if failed.
43  */
44 MediaManager.prototype.getToken = function(refresh) {
45   if (chrome.test)
46     return Promise.resolve('DUMMY_ACCESS_TOKEN');
48   if (this.cachedToken_ && !refresh)
49     return Promise.resolve(this.cachedToken_);
51   return new Promise(function(fulfill, reject) {
52     // TODO(yoshiki): Creates the method to get a token and use it.
53     chrome.fileManagerPrivate.getDownloadUrl(this.entry_, fulfill);
54   }.bind(this)).then(function(url) {
55     if (chrome.runtime.lastError) {
56       return Promise.reject(
57           'Token fetch failed: ' + chrome.runtime.lastError.message);
58     }
59     if (!url)
60       return Promise.reject('Token fetch failed.');
61     var index = url.indexOf('access_token=');
62     var token = url.substring(index + 13);
63     if (index > 0 && token) {
64       this.cachedToken_ = token;
65       return token;
66     } else {
67       return Promise.reject('Token fetch failed.');
68     }
69   }.bind(this));
72 /**
73  * Retrieves the url for cast.
74  *
75  * @return {Promise} Promise which is resolved with the url. Reject if failed.
76  */
77 MediaManager.prototype.getUrl = function() {
78   if (chrome.test)
79     return Promise.resolve('http://example.com/dummy_url.mp4');
81   if (this.cachedUrl_)
82     return Promise.resolve(this.cachedUrl_);
84   return new Promise(function(fulfill, reject) {
85     // TODO(yoshiki): Creates the method to get a url and use it.
86     chrome.fileManagerPrivate.getDownloadUrl(this.entry_, fulfill);
87   }.bind(this)).then(function(url) {
88     if (chrome.runtime.lastError) {
89       return Promise.reject(
90           'URL fetch failed: ' + chrome.runtime.lastError.message);
91     }
92     if (!url)
93       return Promise.reject('URL fetch failed.');
94     var access_token_index = url.indexOf('access_token=');
95     if (access_token_index) {
96       url = url.substring(0, access_token_index - 1);
97     }
98     this.cachedUrl_ = url;
99     return url;
100   }.bind(this));
104  * Retrieves the mime of file.
106  * @return {Promise} Promise which is resolved with the mime. Reject if failed.
107  */
108 MediaManager.prototype.getMime = function() {
109   if (this.cachedDriveProp_)
110     return Promise.resolve(this.cachedDriveProp_.contentMimeType || '');
112   return new Promise(function(fulfill, reject) {
113     chrome.fileManagerPrivate.getEntryProperties(
114         [this.entry_], ['contentMimeType', 'thumbnailUrl'], fulfill);
115   }.bind(this)).then(function(props) {
116     if (!props || !props[0]) {
117       return Promise.reject('Mime fetch failed.');
118     } else if (!props[0].contentMimeType) {
119       // TODO(yoshiki): Adds a logic to guess the mime.
120       this.cachedDriveProp_ = props[0];
121       return '';
122     } else {
123       this.cachedDriveProp_ = props[0];
124       return props[0].contentMimeType;
125     }
126   }.bind(this));
130  * Retrieves the thumbnail url of file.
132  * @return {Promise} Promise which is resolved with the url. Reject if failed.
133  */
134 MediaManager.prototype.getThumbnail = function() {
135   if (this.cachedDriveProp_)
136     return Promise.resolve(this.cachedDriveProp_.thumbnailUrl || '');
138   return new Promise(function(fulfill, reject) {
139     chrome.fileManagerPrivate.getEntryProperties(
140         [this.entry_], ['contentMimeType', 'thumbnailUrl'], fulfill);
141   }.bind(this)).then(function(props) {
142     if (!props || !props[0]) {
143       return Promise.reject('Thumbnail fetch failed.');
144     } else {
145       this.cachedDriveProp_ = props[0];
146       return props[0].thumbnailUrl || '';
147     }
148   }.bind(this));