base: Change DCHECK_IS_ON to a macro DCHECK_IS_ON().
[chromium-blink-merge.git] / ui / file_manager / video_player / js / cast / cast_extension_discoverer.js
blob59e2bf5a588ce25446393b767b2620bcb3cb688d
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  * Discover the ID of installed cast extension.
7  * @constructor
8  * @struct
9  */
10 function CastExtensionDiscoverer() {}
12 /**
13  * Tentatice IDs to try.
14  * @type {!Array.<string>}
15  * @const
16  */
17 CastExtensionDiscoverer.CAST_EXTENSION_IDS = [
18   'boadgeojelhgndaghljhdicfkmllpafd', // release
19   'dliochdbjfkdbacpmhlcpmleaejidimm', // beta
20   'hfaagokkkhdbgiakmmlclaapfelnkoah',
21   'fmfcbgogabcbclcofgocippekhfcmgfj',
22   'enhhojjnijigcajfphajepfemndkmdlo'
25 /**
26  * @param {function(?string)} callback Callback called with the extension ID.
27  *     The ID may be null if extension is not found.
28  */
29 CastExtensionDiscoverer.findInstalledExtension = function(callback) {
30   CastExtensionDiscoverer.findInstalledExtensionHelper_(0, callback);
33 /**
34  * @param {number} index Current index which is tried to check.
35  * @param {function(?string)} callback Callback function which will be called
36  *     the extension is found.
37  * @private
38  */
39 CastExtensionDiscoverer.findInstalledExtensionHelper_ = function(index,
40     callback) {
41   if (index === CastExtensionDiscoverer.CAST_EXTENSION_IDS.length) {
42     // no extension found.
43     callback(null);
44     return;
45   }
47   CastExtensionDiscoverer.isExtensionInstalled_(
48       CastExtensionDiscoverer.CAST_EXTENSION_IDS[index],
49       function(installed) {
50         if (installed) {
51           callback(CastExtensionDiscoverer.CAST_EXTENSION_IDS[index]);
52         } else {
53           CastExtensionDiscoverer.findInstalledExtensionHelper_(index + 1,
54                                                                 callback);
55         }
56       });
59 /**
60  * The result will be notified on |callback|. True if installed, false not.
61  * @param {string} extensionId Id to be checked.
62  * @param {function(boolean)} callback Callback to notify the result.
63  * @private
64  */
65 CastExtensionDiscoverer.isExtensionInstalled_ =
66     function(extensionId, callback) {
68   var xhr = new XMLHttpRequest();
69   var url = 'chrome-extension://' + extensionId + '/cast_sender.js';
70   xhr.open('GET', url, true);
71   xhr.onerror = function() { callback(false); };
72   /** @param {*} event */
73   xhr.onreadystatechange = function(event) {
74     if (xhr.readyState == 4 && xhr.status === 200) {
75       // Cast extension found.
76       callback(true);
77     }
78   }.wrap(this);
79   xhr.send();