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

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

Issue 297963005: Make reconnection in response to video channel inactivity less aggressive. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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 | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 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 reconnecting the session when it is disconnected due to 7 * Class handling reconnecting the session when it is disconnected due to
8 * network failure. 8 * network failure.
9 * 9 *
10 * The SmartReconnector listens for changes in connection state of 10 * The SmartReconnector listens for changes in connection state of
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 remoting.ClientSession.Events.videoChannelStateChanged, 55 remoting.ClientSession.Events.videoChannelStateChanged,
56 this.bound_.videoChannelStateChanged); 56 this.bound_.videoChannelStateChanged);
57 }; 57 };
58 58
59 // The online event only means the network adapter is enabled, but 59 // The online event only means the network adapter is enabled, but
60 // it doesn't necessarily mean that we have a working internet connection. 60 // it doesn't necessarily mean that we have a working internet connection.
61 // Therefore, delay the connection by |kReconnectDelay| to allow for the network 61 // Therefore, delay the connection by |kReconnectDelay| to allow for the network
62 // to connect. 62 // to connect.
63 remoting.SmartReconnector.kReconnectDelay = 2000; 63 remoting.SmartReconnector.kReconnectDelay = 2000;
64 64
65 // If no frames are received from the server for more than |kConnectionTimeout|, 65 // If the video channel is inactive for 10 seconds reconnect the session.
66 // disconnect the session.
67 remoting.SmartReconnector.kConnectionTimeout = 10000; 66 remoting.SmartReconnector.kConnectionTimeout = 10000;
68 67
69 remoting.SmartReconnector.prototype = { 68 remoting.SmartReconnector.prototype = {
70 reconnect_: function() { 69 reconnect_: function() {
71 this.cancelPending_(); 70 this.cancelPending_();
72 remoting.disconnect(); 71 remoting.disconnect();
73 remoting.setMode(remoting.AppMode.CLIENT_CONNECTING); 72 remoting.setMode(remoting.AppMode.CLIENT_CONNECTING);
74 this.connector_.reconnect(); 73 this.connector_.reconnect();
75 }, 74 },
76 75
(...skipping 13 matching lines...) Expand all
90 this.cancelPending_(); 89 this.cancelPending_();
91 if (navigator.onLine) { 90 if (navigator.onLine) {
92 this.reconnect_(); 91 this.reconnect_();
93 } else { 92 } else {
94 window.addEventListener('online', this.bound_.reconnectAsync, false); 93 window.addEventListener('online', this.bound_.reconnectAsync, false);
95 } 94 }
96 } 95 }
97 }, 96 },
98 97
99 /** 98 /**
100 * @param {boolean} active This function is called if no frames are received 99 * @param {boolean} active True if the video channel is active.
101 * on the client for more than 1 second.
102 */ 100 */
103 videoChannelStateChanged_: function (active) { 101 videoChannelStateChanged_: function (active) {
104 this.cancelPending_(); 102 this.cancelPending_();
105 if (!active) { 103 if (!active) {
106 // If the channel becomes inactive due to a lack of network connection, 104 window.addEventListener(
107 // wait for it to go online. The plugin will try to reconnect the video
108 // channel once it is online. If the video channels doesn't finish
109 // reconnecting within the timeout, tear down the session and reconnect.
110 if (navigator.onLine) {
Wez 2014/05/23 20:26:40 Would it be better to just have a shorter timeout
Sergey Ulanov 2014/05/23 20:38:36 navigator.onLine=true just tells us that the machi
111 this.reconnect_();
112 } else {
113 window.addEventListener(
114 'online', this.bound_.startReconnectTimeout, false); 105 'online', this.bound_.startReconnectTimeout, false);
115 }
116 } 106 }
117 }, 107 },
118 108
119 startReconnectTimeout_: function () { 109 startReconnectTimeout_: function () {
120 this.cancelPending_(); 110 this.cancelPending_();
121 this.connectionTimeoutTimerId_ = window.setTimeout( 111 this.connectionTimeoutTimerId_ = window.setTimeout(
122 this.bound_.reconnect, remoting.SmartReconnector.kConnectionTimeout); 112 this.bound_.reconnect, remoting.SmartReconnector.kConnectionTimeout);
123 }, 113 },
124 114
125 cancelPending_: function() { 115 cancelPending_: function() {
126 window.removeEventListener( 116 window.removeEventListener(
127 'online', this.bound_.startReconnectTimeout, false); 117 'online', this.bound_.startReconnectTimeout, false);
128 window.removeEventListener('online', this.bound_.reconnectAsync, false); 118 window.removeEventListener('online', this.bound_.reconnectAsync, false);
129 window.clearTimeout(this.reconnectTimerId_); 119 window.clearTimeout(this.reconnectTimerId_);
130 window.clearTimeout(this.connectionTimeoutTimerId_); 120 window.clearTimeout(this.connectionTimeoutTimerId_);
131 this.reconnectTimerId_ = null; 121 this.reconnectTimerId_ = null;
132 this.connectionTimeoutTimerId_ = null; 122 this.connectionTimeoutTimerId_ = null;
133 }, 123 },
134 124
135 dispose: function() { 125 dispose: function() {
136 this.clientSession_.removeEventListener( 126 this.clientSession_.removeEventListener(
137 remoting.ClientSession.Events.stateChanged, 127 remoting.ClientSession.Events.stateChanged,
138 this.bound_.stateChanged); 128 this.bound_.stateChanged);
139 this.clientSession_.removeEventListener( 129 this.clientSession_.removeEventListener(
140 remoting.ClientSession.Events.videoChannelStateChanged, 130 remoting.ClientSession.Events.videoChannelStateChanged,
141 this.bound_.videoChannelStateChanged); 131 this.bound_.videoChannelStateChanged);
142 } 132 }
143 }; 133 };
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698