Index: remoting/webapp/crd/js/crd_init.js |
diff --git a/remoting/webapp/crd/js/crd_init.js b/remoting/webapp/crd/js/crd_init.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..03507eac5e191054d69583aa696cdf362968dc9b |
--- /dev/null |
+++ b/remoting/webapp/crd/js/crd_init.js |
@@ -0,0 +1,215 @@ |
+// 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'; |
+ |
+/** @suppress {duplicate} */ |
+var remoting = remoting || {}; |
+ |
+/** |
+ * Entry point for Chromoting webapp initialization. |
+ */ |
+remoting.init = function() { |
+ remoting.initCommon(); |
Jamie
2014/11/19 19:31:24
Can we come up with a better name for this?
garykac
2014/11/20 03:18:50
Changed to initGlobalObjects(), which isn't much b
|
+ remoting.initIdentity(); |
+ |
+ if (base.isAppsV2()) { |
+ remoting.windowFrame = new remoting.WindowFrame( |
+ document.getElementById('title-bar')); |
+ remoting.optionsMenu = remoting.windowFrame.createOptionsMenu(); |
+ } else { |
+ remoting.toolbar = new remoting.Toolbar( |
+ document.getElementById('session-toolbar')); |
+ remoting.optionsMenu = remoting.toolbar.createOptionsMenu(); |
+ } |
+ |
+ remoting.initHostlist_(); |
+ |
+ var homeFeedback = new remoting.MenuButton( |
+ document.getElementById('help-feedback-main')); |
+ var toolbarFeedback = new remoting.MenuButton( |
+ document.getElementById('help-feedback-toolbar')); |
+ remoting.manageHelpAndFeedback( |
+ document.getElementById('title-bar')); |
+ remoting.manageHelpAndFeedback( |
+ document.getElementById('help-feedback-toolbar')); |
+ remoting.manageHelpAndFeedback( |
+ document.getElementById('help-feedback-main')); |
+ |
+ remoting.windowShape.updateClientWindowShape(); |
+ |
+ remoting.showOrHideIT2MeUi(); |
+ remoting.showOrHideMe2MeUi(); |
+ |
+ // For Apps v1, check the tab type to warn the user if they are not getting |
+ // the best keyboard experience. |
+ if (!base.isAppsV2() && !remoting.platformIsMac()) { |
+ /** @param {boolean} isWindowed */ |
+ var onIsWindowed = function(isWindowed) { |
+ if (!isWindowed) { |
+ document.getElementById('startup-mode-box-me2me').hidden = false; |
+ document.getElementById('startup-mode-box-it2me').hidden = false; |
+ } |
+ }; |
+ isWindowed_(onIsWindowed); |
+ } |
+ |
+ remoting.ClientPlugin.factory.preloadPlugin(); |
+}; |
+ |
+/** |
+ * Initialize the host list. |
+ */ |
+remoting.initHostlist_ = function() { |
+ remoting.hostList = new remoting.HostList( |
+ document.getElementById('host-list'), |
+ document.getElementById('host-list-empty'), |
+ document.getElementById('host-list-error-message'), |
+ document.getElementById('host-list-refresh-failed-button'), |
+ document.getElementById('host-list-loading-indicator')); |
+ |
+ isHostModeSupported_().then( |
+ /** @param {Boolean} supported */ |
+ function(supported){ |
+ if (supported) { |
+ var noShare = document.getElementById('chrome-os-no-share'); |
+ noShare.parentNode.removeChild(noShare); |
+ } else { |
+ var button = document.getElementById('share-button'); |
+ button.disabled = true; |
+ } |
+ }); |
+ |
+ /** |
+ * @return {Promise} A promise that resolves to the id of the current |
+ * containing tab/window. |
+ */ |
+ var getCurrentId = function () { |
+ if (base.isAppsV2()) { |
+ return Promise.resolve(chrome.app.window.current().id); |
+ } |
+ |
+ /** |
+ * @param {function(*=):void} resolve |
+ * @param {function(*=):void} reject |
+ */ |
+ return new Promise(function(resolve, reject) { |
+ /** @param {chrome.Tab} tab */ |
+ chrome.tabs.getCurrent(function(tab){ |
+ if (tab) { |
+ resolve(String(tab.id)); |
+ } |
+ reject('Cannot retrieve the current tab.'); |
+ }); |
+ }); |
+ }; |
+ |
+ var onLoad = function() { |
+ // Parse URL parameters. |
+ var urlParams = getUrlParameters_(); |
+ if ('mode' in urlParams) { |
+ if (urlParams['mode'] === 'me2me') { |
+ var hostId = urlParams['hostId']; |
+ remoting.connectMe2Me(hostId); |
+ return; |
+ } else if (urlParams['mode'] === 'hangout') { |
+ /** @param {*} id */ |
+ getCurrentId().then(function(id) { |
+ /** @type {string} */ |
+ var accessCode = urlParams['accessCode']; |
+ remoting.ensureSessionConnector_(); |
+ remoting.setMode(remoting.AppMode.CLIENT_CONNECTING); |
+ remoting.connector.connectIT2Me(accessCode); |
+ |
+ document.body.classList.add('hangout-remote-desktop'); |
+ var senderId = /** @type {string} */ String(id); |
+ var hangoutSession = new remoting.HangoutSession(senderId); |
+ hangoutSession.init(); |
+ }); |
+ return; |
+ } |
+ } |
+ // No valid URL parameters, start up normally. |
+ remoting.initHomeScreenUi(); |
+ } |
+ remoting.hostList.load(onLoad); |
+} |
+ |
+/** |
+ * initHomeScreenUi is called if the app is not starting up in session mode, |
+ * and also if the user cancels pin entry or the connection in session mode. |
+ */ |
+remoting.initHomeScreenUi = function() { |
+ remoting.hostController = new remoting.HostController(); |
+ remoting.setMode(remoting.AppMode.HOME); |
+ remoting.hostSetupDialog = |
+ new remoting.HostSetupDialog(remoting.hostController); |
+ var dialog = document.getElementById('paired-clients-list'); |
+ var message = document.getElementById('paired-client-manager-message'); |
+ var deleteAll = document.getElementById('delete-all-paired-clients'); |
+ var close = document.getElementById('close-paired-client-manager-dialog'); |
+ var working = document.getElementById('paired-client-manager-dialog-working'); |
+ var error = document.getElementById('paired-client-manager-dialog-error'); |
+ var noPairedClients = document.getElementById('no-paired-clients'); |
+ remoting.pairedClientManager = |
+ new remoting.PairedClientManager(remoting.hostController, dialog, message, |
+ deleteAll, close, noPairedClients, |
+ working, error); |
+ // Display the cached host list, then asynchronously update and re-display it. |
+ remoting.updateLocalHostState(); |
+ remoting.hostList.refresh(remoting.updateLocalHostState); |
+ remoting.butterBar = new remoting.ButterBar(); |
+}; |
+ |
+/** |
+ * Fetches local host state and updates the DOM accordingly. |
+ */ |
+remoting.updateLocalHostState = function() { |
+ /** |
+ * @param {remoting.HostController.State} state Host state. |
+ */ |
+ var onHostState = function(state) { |
+ if (state == remoting.HostController.State.STARTED) { |
+ remoting.hostController.getLocalHostId(onHostId.bind(null, state)); |
+ } else { |
+ onHostId(state, null); |
+ } |
+ }; |
+ |
+ /** |
+ * @param {remoting.HostController.State} state Host state. |
+ * @param {string?} hostId Host id. |
+ */ |
+ var onHostId = function(state, hostId) { |
+ remoting.hostList.setLocalHostStateAndId(state, hostId); |
+ remoting.hostList.display(); |
+ }; |
+ |
+ /** |
+ * @param {boolean} response True if the feature is present. |
+ */ |
+ var onHasFeatureResponse = function(response) { |
+ /** |
+ * @param {remoting.Error} error |
+ */ |
+ var onError = function(error) { |
+ console.error('Failed to get pairing status: ' + error); |
+ remoting.pairedClientManager.setPairedClients([]); |
+ }; |
+ |
+ if (response) { |
+ remoting.hostController.getPairedClients( |
+ remoting.pairedClientManager.setPairedClients.bind( |
+ remoting.pairedClientManager), |
+ onError); |
+ } else { |
+ console.log('Pairing registry not supported by host.'); |
+ remoting.pairedClientManager.setPairedClients([]); |
+ } |
+ }; |
+ |
+ remoting.hostController.hasFeature( |
+ remoting.HostController.Feature.PAIRING_REGISTRY, onHasFeatureResponse); |
+ remoting.hostController.getLocalHostState(onHostState); |
+}; |