| Index: ui/file_manager/video_player/js/cast/cast_extension_discoverer.js
|
| diff --git a/ui/file_manager/video_player/js/cast/cast_extension_discoverer.js b/ui/file_manager/video_player/js/cast/cast_extension_discoverer.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..e980e4ae2df0d22485f33ab53335b908e756e128
|
| --- /dev/null
|
| +++ b/ui/file_manager/video_player/js/cast/cast_extension_discoverer.js
|
| @@ -0,0 +1,83 @@
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +'use strict';
|
| +
|
| +/**
|
| + * Discover the ID of installed cast extesnion.
|
| + * @constructor
|
| + */
|
| +function CastExtensionDiscoverer() {
|
| +}
|
| +
|
| +/**
|
| + * Tentatice IDs to try.
|
| + * @type {Array.<string>}
|
| + * @const
|
| + */
|
| +CastExtensionDiscoverer.CAST_EXTENSION_IDS = [
|
| + 'boadgeojelhgndaghljhdicfkmllpafd', // release
|
| + 'dliochdbjfkdbacpmhlcpmleaejidimm', // beta
|
| + 'hfaagokkkhdbgiakmmlclaapfelnkoah',
|
| + 'fmfcbgogabcbclcofgocippekhfcmgfj',
|
| + 'enhhojjnijigcajfphajepfemndkmdlo'
|
| +];
|
| +
|
| +/**
|
| + * @param {function(string)} callback Callback called with the extension ID. The
|
| + * ID may be null if extension is not found.
|
| + */
|
| +CastExtensionDiscoverer.findInstalledExtension = function(callback) {
|
| + CastExtensionDiscoverer.findInstalledExtensionHelper_(0, callback);
|
| +};
|
| +
|
| +/**
|
| + * @param {number} index Current index which is tried to check.
|
| + * @param {function(string)} callback Callback function which will be called
|
| + * the extension is found.
|
| + * @private
|
| + */
|
| +CastExtensionDiscoverer.findInstalledExtensionHelper_ = function(index,
|
| + callback) {
|
| + if (index === CastExtensionDiscoverer.CAST_EXTENSION_IDS.length) {
|
| + // no extension found.
|
| + callback(null);
|
| + return;
|
| + }
|
| +
|
| + CastExtensionDiscoverer.isExtensionInstalled_(
|
| + CastExtensionDiscoverer.CAST_EXTENSION_IDS[index],
|
| + function(installed) {
|
| + if (installed) {
|
| + callback(CastExtensionDiscoverer.CAST_EXTENSION_IDS[index]);
|
| + } else {
|
| + CastExtensionDiscoverer.findInstalledExtensionHelper_(index + 1,
|
| + callback);
|
| + }
|
| + });
|
| +};
|
| +
|
| +/**
|
| + * The result will be notified on |callback|. True if installed, false not.
|
| + * @param {string} extensionId Id to be checked.
|
| + * @param {function(boolean)} callback Callback to notify the result.
|
| + * @private
|
| + */
|
| +CastExtensionDiscoverer.isExtensionInstalled_ =
|
| + function(extensionId, callback) {
|
| +
|
| + var xhr = new XMLHttpRequest();
|
| + var url = 'chrome-extension://' + extensionId + '/cast_sender.js';
|
| + xhr.open('GET', url, true);
|
| + xhr.onerror = function() { callback(false); };
|
| + xhr.onreadystatechange =
|
| + /** @param {*} response */
|
| + function(event) {
|
| + if (xhr.readyState == 4 && xhr.status === 200) {
|
| + // Cast extension found.
|
| + callback(true);
|
| + }
|
| + }.wrap(this);
|
| + xhr.send();
|
| +};
|
|
|