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(); |
+}; |