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

Side by Side Diff: remoting/webapp/client_session.js

Issue 594503004: Move ownership of the tool-bar's menu buttons into remoting.Toolbar. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove MenuButton changes (will follow up with a better fix. Created 6 years, 3 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
« no previous file with comments | « remoting/webapp/client_screen.js ('k') | remoting/webapp/options_menu.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 /** 5 /**
6 * @fileoverview 6 * @fileoverview
7 * Class handling creation and teardown of a remoting client session. 7 * Class handling creation and teardown of a remoting client session.
8 * 8 *
9 * The ClientSession class controls lifetime of the client plugin 9 * The ClientSession class controls lifetime of the client plugin
10 * object and provides the plugin with the functionality it needs to 10 * object and provides the plugin with the functionality it needs to
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 * 135 *
136 * @type {boolean} @private 136 * @type {boolean} @private
137 */ 137 */
138 this.logHostOfflineErrors_ = true; 138 this.logHostOfflineErrors_ = true;
139 139
140 /** @private */ 140 /** @private */
141 this.callPluginLostFocus_ = this.pluginLostFocus_.bind(this); 141 this.callPluginLostFocus_ = this.pluginLostFocus_.bind(this);
142 /** @private */ 142 /** @private */
143 this.callPluginGotFocus_ = this.pluginGotFocus_.bind(this); 143 this.callPluginGotFocus_ = this.pluginGotFocus_.bind(this);
144 /** @private */ 144 /** @private */
145 this.callToggleFullScreen_ = remoting.fullscreen.toggle.bind(
146 remoting.fullscreen);
147 /** @private */
148 this.callOnFullScreenChanged_ = this.onFullScreenChanged_.bind(this) 145 this.callOnFullScreenChanged_ = this.onFullScreenChanged_.bind(this)
149 146
150 /** @private */
151 this.screenOptionsMenu_ = new remoting.MenuButton(
152 document.getElementById('screen-options-menu'),
153 this.onShowOptionsMenu_.bind(this));
154 /** @private */
155 this.sendKeysMenu_ = new remoting.MenuButton(
156 document.getElementById('send-keys-menu')
157 );
158
159 /** @type {HTMLMediaElement} @private */ 147 /** @type {HTMLMediaElement} @private */
160 this.video_ = null; 148 this.video_ = null;
161 149
162 /** @type {Element} @private */ 150 /** @type {Element} @private */
163 this.mouseCursorOverlay_ = 151 this.mouseCursorOverlay_ =
164 this.container_.querySelector('.mouse-cursor-overlay'); 152 this.container_.querySelector('.mouse-cursor-overlay');
165 153
166 /** @type {Element} */ 154 /** @type {Element} */
167 var img = this.mouseCursorOverlay_; 155 var img = this.mouseCursorOverlay_;
168 /** @param {Event} event @private */ 156 /** @param {Event} event @private */
169 this.updateMouseCursorPosition_ = function(event) { 157 this.updateMouseCursorPosition_ = function(event) {
170 img.style.top = event.y + 'px'; 158 img.style.top = event.y + 'px';
171 img.style.left = event.x + 'px'; 159 img.style.left = event.x + 'px';
172 }; 160 };
173 161
174 /** @type {HTMLElement} @private */
175 this.resizeToClientButton_ =
176 document.getElementById('screen-resize-to-client');
177 /** @type {HTMLElement} @private */
178 this.shrinkToFitButton_ = document.getElementById('screen-shrink-to-fit');
179 /** @type {HTMLElement} @private */
180 this.fullScreenButton_ = document.getElementById('toggle-full-screen');
181
182 /** @type {remoting.GnubbyAuthHandler} @private */ 162 /** @type {remoting.GnubbyAuthHandler} @private */
183 this.gnubbyAuthHandler_ = null; 163 this.gnubbyAuthHandler_ = null;
184 164
185 /** @type {remoting.CastExtensionHandler} @private */ 165 /** @type {remoting.CastExtensionHandler} @private */
186 this.castExtensionHandler_ = null; 166 this.castExtensionHandler_ = null;
187 167
188 /** @type {remoting.VideoFrameRecorder} @private */ 168 /** @type {remoting.VideoFrameRecorder} @private */
189 this.videoFrameRecorder_ = null; 169 this.videoFrameRecorder_ = null;
190 170
191 if (this.mode_ == remoting.ClientSession.Mode.IT2ME) {
192 // Resize-to-client is not supported for IT2Me hosts.
193 this.resizeToClientButton_.hidden = true;
194 } else {
195 this.resizeToClientButton_.hidden = false;
196 }
197
198 this.fullScreenButton_.addEventListener(
199 'click', this.callToggleFullScreen_, false);
200
201 this.defineEvents(Object.keys(remoting.ClientSession.Events)); 171 this.defineEvents(Object.keys(remoting.ClientSession.Events));
202 }; 172 };
203 173
204 base.extend(remoting.ClientSession, base.EventSource); 174 base.extend(remoting.ClientSession, base.EventSource);
205 175
206 /** @enum {string} */ 176 /** @enum {string} */
207 remoting.ClientSession.Events = { 177 remoting.ClientSession.Events = {
208 stateChanged: 'stateChanged', 178 stateChanged: 'stateChanged',
209 videoChannelStateChanged: 'videoChannelStateChanged', 179 videoChannelStateChanged: 'videoChannelStateChanged',
210 bumpScrollStarted: 'bumpScrollStarted', 180 bumpScrollStarted: 'bumpScrollStarted',
(...skipping 377 matching lines...) Expand 10 before | Expand all | Expand 10 after
588 remoting.ClientSession.prototype.removePlugin = function() { 558 remoting.ClientSession.prototype.removePlugin = function() {
589 if (this.plugin_) { 559 if (this.plugin_) {
590 this.plugin_.element().removeEventListener( 560 this.plugin_.element().removeEventListener(
591 'focus', this.callPluginGotFocus_, false); 561 'focus', this.callPluginGotFocus_, false);
592 this.plugin_.element().removeEventListener( 562 this.plugin_.element().removeEventListener(
593 'blur', this.callPluginLostFocus_, false); 563 'blur', this.callPluginLostFocus_, false);
594 this.plugin_.dispose(); 564 this.plugin_.dispose();
595 this.plugin_ = null; 565 this.plugin_ = null;
596 } 566 }
597 567
598 // Delete event handlers that aren't relevent when not connected.
599 this.fullScreenButton_.removeEventListener(
600 'click', this.callToggleFullScreen_, false);
601
602 // Leave full-screen mode, and stop listening for related events. 568 // Leave full-screen mode, and stop listening for related events.
603 var listener = this.callOnFullScreenChanged_; 569 var listener = this.callOnFullScreenChanged_;
604 remoting.fullscreen.activate( 570 remoting.fullscreen.activate(
605 false, 571 false,
606 function() { 572 function() {
607 remoting.fullscreen.removeListener(listener); 573 remoting.fullscreen.removeListener(listener);
608 }); 574 });
609 if (remoting.windowFrame) { 575 if (remoting.windowFrame) {
610 remoting.windowFrame.setClientSession(null); 576 remoting.windowFrame.setClientSession(null);
611 } else { 577 } else {
612 remoting.toolbar.setClientSession(null); 578 remoting.toolbar.setClientSession(null);
613 } 579 }
580 remoting.optionsMenu.setClientSession(null);
614 document.body.classList.remove('connected'); 581 document.body.classList.remove('connected');
615 582
616 // Remove mediasource-rendering class from the container - this will also 583 // Remove mediasource-rendering class from the container - this will also
617 // hide the <video> element. 584 // hide the <video> element.
618 this.container_.classList.remove('mediasource-rendering'); 585 this.container_.classList.remove('mediasource-rendering');
619 586
620 this.container_.removeEventListener('mousemove', 587 this.container_.removeEventListener('mousemove',
621 this.updateMouseCursorPosition_, 588 this.updateMouseCursorPosition_,
622 true); 589 true);
623 }; 590 };
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after
960 clientArea.height, 927 clientArea.height,
961 window.devicePixelRatio); 928 window.devicePixelRatio);
962 } 929 }
963 // Activate full-screen related UX. 930 // Activate full-screen related UX.
964 remoting.fullscreen.addListener(this.callOnFullScreenChanged_); 931 remoting.fullscreen.addListener(this.callOnFullScreenChanged_);
965 if (remoting.windowFrame) { 932 if (remoting.windowFrame) {
966 remoting.windowFrame.setClientSession(this); 933 remoting.windowFrame.setClientSession(this);
967 } else { 934 } else {
968 remoting.toolbar.setClientSession(this); 935 remoting.toolbar.setClientSession(this);
969 } 936 }
937 remoting.optionsMenu.setClientSession(this);
970 document.body.classList.add('connected'); 938 document.body.classList.add('connected');
971 939
972 this.container_.addEventListener('mousemove', 940 this.container_.addEventListener('mousemove',
973 this.updateMouseCursorPosition_, 941 this.updateMouseCursorPosition_,
974 true); 942 true);
975 943
976 } else if (status == remoting.ClientSession.State.FAILED) { 944 } else if (status == remoting.ClientSession.State.FAILED) {
977 switch (error) { 945 switch (error) {
978 case remoting.ClientSession.ConnectionError.HOST_IS_OFFLINE: 946 case remoting.ClientSession.ConnectionError.HOST_IS_OFFLINE:
979 this.error_ = remoting.Error.HOST_IS_OFFLINE; 947 this.error_ = remoting.Error.HOST_IS_OFFLINE;
(...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after
1298 var htmlNode = /** @type {HTMLElement} */ (document.documentElement); 1266 var htmlNode = /** @type {HTMLElement} */ (document.documentElement);
1299 this.enableBumpScroll_(fullscreen); 1267 this.enableBumpScroll_(fullscreen);
1300 if (fullscreen) { 1268 if (fullscreen) {
1301 htmlNode.classList.add('full-screen'); 1269 htmlNode.classList.add('full-screen');
1302 } else { 1270 } else {
1303 htmlNode.classList.remove('full-screen'); 1271 htmlNode.classList.remove('full-screen');
1304 } 1272 }
1305 }; 1273 };
1306 1274
1307 /** 1275 /**
1308 * Updates the options menu to reflect the current scale-to-fit and full-screen
1309 * settings.
1310 * @return {void} Nothing.
1311 * @private
1312 */
1313 remoting.ClientSession.prototype.onShowOptionsMenu_ = function() {
1314 remoting.MenuButton.select(this.resizeToClientButton_, this.resizeToClient_);
1315 remoting.MenuButton.select(this.shrinkToFitButton_, this.shrinkToFit_);
1316 remoting.MenuButton.select(this.fullScreenButton_,
1317 remoting.fullscreen.isActive());
1318 };
1319
1320 /**
1321 * Scroll the client plugin by the specified amount, keeping it visible. 1276 * Scroll the client plugin by the specified amount, keeping it visible.
1322 * Note that this is only used in content full-screen mode (not windowed or 1277 * Note that this is only used in content full-screen mode (not windowed or
1323 * browser full-screen modes), where window.scrollBy and the scrollTop and 1278 * browser full-screen modes), where window.scrollBy and the scrollTop and
1324 * scrollLeft properties don't work. 1279 * scrollLeft properties don't work.
1325 * @param {number} dx The amount by which to scroll horizontally. Positive to 1280 * @param {number} dx The amount by which to scroll horizontally. Positive to
1326 * scroll right; negative to scroll left. 1281 * scroll right; negative to scroll left.
1327 * @param {number} dy The amount by which to scroll vertically. Positive to 1282 * @param {number} dy The amount by which to scroll vertically. Positive to
1328 * scroll down; negative to scroll up. 1283 * scroll down; negative to scroll up.
1329 * @return {boolean} True if the requested scroll had no effect because both 1284 * @return {boolean} True if the requested scroll had no effect because both
1330 * vertical and horizontal edges of the screen have been reached. 1285 * vertical and horizontal edges of the screen have been reached.
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after
1610 * @param {string} data Contents of the extension message. 1565 * @param {string} data Contents of the extension message.
1611 * @return {boolean} True if the message was recognized, false otherwise. 1566 * @return {boolean} True if the message was recognized, false otherwise.
1612 */ 1567 */
1613 remoting.ClientSession.prototype.handleExtensionMessage = 1568 remoting.ClientSession.prototype.handleExtensionMessage =
1614 function(type, data) { 1569 function(type, data) {
1615 if (this.videoFrameRecorder_) { 1570 if (this.videoFrameRecorder_) {
1616 return this.videoFrameRecorder_.handleMessage(type, data); 1571 return this.videoFrameRecorder_.handleMessage(type, data);
1617 } 1572 }
1618 return false; 1573 return false;
1619 } 1574 }
OLDNEW
« no previous file with comments | « remoting/webapp/client_screen.js ('k') | remoting/webapp/options_menu.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698