Chromium Code Reviews| Index: ui/file_manager/video_player/js/cast/caster.js |
| diff --git a/ui/file_manager/video_player/js/cast/caster.js b/ui/file_manager/video_player/js/cast/caster.js |
| index 79214a88b699a9161a1e01efd2520ff2f499ac89..cc95c1bd51b2b2b35344117043438411bd6cdc3e 100644 |
| --- a/ui/file_manager/video_player/js/cast/caster.js |
| +++ b/ui/file_manager/video_player/js/cast/caster.js |
| @@ -24,31 +24,70 @@ chrome.commandLinePrivate.hasSwitch(CAST_COMMAND_LINE_FLAG, function(result) { |
| if (!result) |
| return; |
| - ensureLoad(initializeApi); |
| + // TODO(yoshiki): Check if the Google Cast extension is installed or not. |
| + // If not installed, we should skip all cast-related functionality. |
| + |
| + loadCastAPI(initializeApi); |
| }); |
| /** |
| * Executes the given callback after the cast extension is initialized. |
| * @param {function} callback Callback (executed asynchronously). |
|
hirono
2014/08/01 09:58:08
nit: jsdoc for opt_secondTry
yoshiki
2014/08/01 11:46:41
Done.
|
| */ |
| -function ensureLoad(callback) { |
| - if(!chrome.cast || !chrome.cast.isAvailable) { |
| - var checkTimer = setTimeout(function() { |
| - console.error('Either "Google Cast API" or "Google Cast" extension ' + |
| - 'seems not to be installed?'); |
| - }, 5000); |
| - |
| - window['__onGCastApiAvailable'] = function(loaded, errorInfo) { |
| - if (loaded) { |
| - callback(); |
| +function loadCastAPI(callback, opt_secondTry) { |
| + var script = document.createElement('script'); |
| + |
| + var onError = function() { |
| + script.removeEventListener('error', onError); |
| + document.body.removeChild(script); |
| + |
| + if (opt_secondTry) { |
| + // Shows error message and exits if it's the 2nd try. |
| + console.error('Google Cast API extension load failed.'); |
| + return; |
| + } |
| + |
| + // Installs the Google Cast API extension and retry loading. |
| + chrome.fileBrowserPrivate.installWebstoreItem( |
| + 'mafeflapfdfljijmlienjedomfjfmhpd', |
| + true, // Don't use installation prompt. |
| + function() { |
| + if (chrome.runtime.lastError) { |
| + console.error('Google Cast API extension installation error.', |
| + chrome.runtime.lastError.message); |
| + return; |
| + } |
| + |
| + console.info('Google Cast API extension installed.'); |
| + // Loads API again. |
| + setTimeout(loadCastAPI.bind(null, callback, true)); |
| + }.wrap()); |
| + }.wrap(); |
| + |
| + var onLoad = function() { |
| + if(!chrome.cast || !chrome.cast.isAvailable) { |
| + var checkTimer = setTimeout(function() { |
| + console.error('Either "Google Cast API" or "Google Cast" extension ' + |
| + 'seems not to be installed?'); |
| + }.wrap(), 5000); |
| + |
| + window['__onGCastApiAvailable'] = function(loaded, errorInfo) { |
| clearTimeout(checkTimer); |
| - } else { |
| - console.error(errorInfo); |
| - } |
| + |
| + if (loaded) |
| + callback(); |
| + else |
| + console.error('Google Cast exntnsion load failed.', errorInfo); |
| + }.wrap(); |
| + } else { |
| + setTimeout(callback); // Runs asynchronously. |
| } |
| - } else { |
| - setTimeout(callback); // Runs asynchronously. |
| - } |
| + }.wrap(); |
| + |
| + script.src = '_modules/mafeflapfdfljijmlienjedomfjfmhpd/cast_sender.js'; |
| + script.addEventListener('error', onError); |
| + script.addEventListener('load', onLoad); |
| + document.body.appendChild(script); |
| } |
| /** |