Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(160)

Side by Side Diff: remoting/webapp/me2mom/wcs_loader.js

Issue 9148043: Rename webapp_it2me to remoting_webapp and move it from webapp/me2mom to webapp/ (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: add webapp_it2me back Created 8 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « remoting/webapp/me2mom/wcs_iq_client_proto.js ('k') | remoting/webapp/me2mom/xhr.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /* Copyright (c) 2012 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.
4 */
5
6 /**
7 * @fileoverview
8 * A class that loads a WCS IQ client and constructs remoting.wcs as a
9 * wrapper for it.
10 */
11
12 'use strict';
13
14 /** @suppress {duplicate} */
15 var remoting = remoting || {};
16
17 /** @type {remoting.WcsLoader} */
18 remoting.wcsLoader = null;
19
20 /**
21 * @constructor
22 * @private
23 */
24 remoting.WcsLoader = function() {
25 /**
26 * The WCS client that will be downloaded. This variable is initialized (via
27 * remoting.wcsLoader) by the downloaded Javascript.
28 * @type {remoting.WcsIqClient}
29 */
30 this.wcsIqClient = null;
31 };
32
33 /**
34 * Load WCS if necessary, then invoke the callback with an access token.
35 *
36 * @param {function(string?): void} onReady The callback function, called with
37 * an OAuth2 access token when WCS has been loaded, or with null on error.
38 * @return {void} Nothing.
39 */
40 remoting.WcsLoader.load = function(onReady) {
41 if (!remoting.wcsLoader) {
42 remoting.wcsLoader = new remoting.WcsLoader();
43 }
44 /** @param {string} token The OAuth2 access token. */
45 var start = function(token) {
46 remoting.wcsLoader.start_(token, onReady);
47 };
48 remoting.oauth2.callWithToken(start);
49 };
50
51 /**
52 * The URL of the GTalk gadget.
53 * @type {string}
54 * @private
55 */
56 remoting.WcsLoader.prototype.TALK_GADGET_URL_ =
57 'https://talkgadget.google.com/talkgadget/';
58
59 /**
60 * The id of the script node.
61 * @type {string}
62 * @private
63 */
64 remoting.WcsLoader.prototype.SCRIPT_NODE_ID_ = 'wcs-script-node';
65
66 /**
67 * The attribute name indicating that the WCS has finished loading.
68 * @type {string}
69 * @private
70 */
71 remoting.WcsLoader.prototype.SCRIPT_NODE_LOADED_FLAG_ = 'wcs-script-loaded';
72
73 /**
74 * Starts loading the WCS IQ client.
75 *
76 * When it's loaded, construct remoting.wcs as a wrapper for it.
77 * When the WCS connection is ready, or on error, call |onReady|.
78 *
79 * @param {string} token An OAuth2 access token.
80 * @param {function(string?): void} onReady The callback function, called with
81 * an OAuth2 access token when WCS has been loaded, or with null on error.
82 * @return {void} Nothing.
83 * @private
84 */
85 remoting.WcsLoader.prototype.start_ = function(token, onReady) {
86 var node = document.getElementById(this.SCRIPT_NODE_ID_);
87 if (!node) {
88 // The first time, there will be no script node, so create one.
89 node = document.createElement('script');
90 node.id = this.SCRIPT_NODE_ID_;
91 node.src = this.TALK_GADGET_URL_ + 'iq?access_token=' + token;
92 node.type = 'text/javascript';
93 document.body.insertBefore(node, document.body.firstChild);
94 } else if (node.hasAttribute(this.SCRIPT_NODE_LOADED_FLAG_)) {
95 // Subsequently, explicitly invoke onReady if onload has already fired.
96 // TODO(jamiewalch): It's possible that the WCS client has not finished
97 // initializing. Add support for multiple callbacks to the remoting.Wcs
98 // class to address this.
99 onReady(token);
100 return;
101 }
102 /** @type {remoting.WcsLoader} */
103 var that = this;
104 var onLoad = function() {
105 var typedNode = /** @type {Element} */ (node);
106 typedNode.setAttribute(that.SCRIPT_NODE_LOADED_FLAG_, true);
107 that.constructWcs_(token, onReady);
108 };
109 var onError = function() {
110 var typedNode = /** @type {Element} */ (node);
111 typedNode.parentNode.removeChild(node);
112 onReady(null);
113 };
114 node.addEventListener('load', onLoad, false);
115 node.addEventListener('error', onError, false);
116 };
117
118 /**
119 * Constructs the remoting.wcs object.
120 *
121 * @param {string} token An OAuth2 access token.
122 * @param {function(string?): void} onReady The callback function, called with
123 * an OAuth2 access token when WCS has been loaded, or with null on error.
124 * @return {void} Nothing.
125 * @private
126 */
127 remoting.WcsLoader.prototype.constructWcs_ = function(token, onReady) {
128 remoting.wcs = new remoting.Wcs(
129 remoting.wcsLoader.wcsIqClient,
130 token,
131 function() { onReady(token); });
132 };
OLDNEW
« no previous file with comments | « remoting/webapp/me2mom/wcs_iq_client_proto.js ('k') | remoting/webapp/me2mom/xhr.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698