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

Side by Side Diff: chrome/common/extensions/docs/examples/extensions/gmail/background.html

Issue 7470036: Prevent Google Mail Checker from scheduling more than one concurrent request. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 5 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
OLDNEW
1 <html> 1 <html>
2 <head> 2 <head>
3 <script> 3 <script>
4 // Identifier used to debug the possibility of multiple instances of the 4 // Identifier used to debug the possibility of multiple instances of the
5 // extension making requests on behalf of a single user. 5 // extension making requests on behalf of a single user.
6 var instanceId = 'gmc' + parseInt(Date.now() * Math.random(), 10); 6 var instanceId = 'gmc' + parseInt(Date.now() * Math.random(), 10);
7 var animationFrames = 36; 7 var animationFrames = 36;
8 var animationSpeed = 10; // ms 8 var animationSpeed = 10; // ms
9 var canvas; 9 var canvas;
10 var canvasContext; 10 var canvasContext;
11 var loggedInImage; 11 var loggedInImage;
12 var pollIntervalMin = 1000 * 60; // 1 minute 12 var pollIntervalMin = 1000 * 60; // 1 minute
13 var pollIntervalMax = 1000 * 60 * 60; // 1 hour 13 var pollIntervalMax = 1000 * 60 * 60; // 1 hour
14 var requestFailureCount = 0; // used for exponential backoff 14 var requestFailureCount = 0; // used for exponential backoff
15 var requestTimeout = 1000 * 2; // 5 seconds 15 var requestTimeout = 1000 * 2; // 5 seconds
16 var rotation = 0; 16 var rotation = 0;
17 var unreadCount = -1; 17 var unreadCount = -1;
18 var loadingAnimation = new LoadingAnimation(); 18 var loadingAnimation = new LoadingAnimation();
19 var requestTimerId;
19 20
20 function getGmailUrl() { 21 function getGmailUrl() {
21 var url = "https://mail.google.com/"; 22 var url = "https://mail.google.com/";
22 if (localStorage.customDomain) 23 if (localStorage.customDomain)
23 url += localStorage.customDomain + "/"; 24 url += localStorage.customDomain + "/";
24 else 25 else
25 url += "mail/" 26 url += "mail/"
26 return url; 27 return url;
27 } 28 }
28 29
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 canvasContext = canvas.getContext('2d'); 103 canvasContext = canvas.getContext('2d');
103 104
104 chrome.browserAction.setBadgeBackgroundColor({color:[208, 0, 24, 255]}); 105 chrome.browserAction.setBadgeBackgroundColor({color:[208, 0, 24, 255]});
105 chrome.browserAction.setIcon({path: "gmail_logged_in.png"}); 106 chrome.browserAction.setIcon({path: "gmail_logged_in.png"});
106 loadingAnimation.start(); 107 loadingAnimation.start();
107 108
108 startRequest(); 109 startRequest();
109 } 110 }
110 111
111 function scheduleRequest() { 112 function scheduleRequest() {
113 if (requestTimerId) {
114 window.clearTimeout(requestTimerId);
115 }
112 var randomness = Math.random() * 2; 116 var randomness = Math.random() * 2;
113 var exponent = Math.pow(2, requestFailureCount); 117 var exponent = Math.pow(2, requestFailureCount);
114 var multiplier = Math.max(randomness * exponent, 1); 118 var multiplier = Math.max(randomness * exponent, 1);
115 var delay = Math.min(multiplier * pollIntervalMin, pollIntervalMax); 119 var delay = Math.min(multiplier * pollIntervalMin, pollIntervalMax);
116 delay = Math.round(delay); 120 delay = Math.round(delay);
117 121
118 window.setTimeout(startRequest, delay); 122 requestTimerId = window.setTimeout(startRequest, delay);
119 } 123 }
120 124
121 // ajax stuff 125 // ajax stuff
122 function startRequest() { 126 function startRequest() {
123 getInboxCount( 127 getInboxCount(
124 function(count) { 128 function(count) {
125 loadingAnimation.stop(); 129 loadingAnimation.stop();
126 updateUnreadCount(count); 130 updateUnreadCount(count);
127 scheduleRequest(); 131 scheduleRequest();
128 }, 132 },
(...skipping 11 matching lines...) Expand all
140 xhr.abort(); // synchronously calls onreadystatechange 144 xhr.abort(); // synchronously calls onreadystatechange
141 }, requestTimeout); 145 }, requestTimeout);
142 146
143 function handleSuccess(count) { 147 function handleSuccess(count) {
144 requestFailureCount = 0; 148 requestFailureCount = 0;
145 window.clearTimeout(abortTimerId); 149 window.clearTimeout(abortTimerId);
146 if (onSuccess) 150 if (onSuccess)
147 onSuccess(count); 151 onSuccess(count);
148 } 152 }
149 153
154 var invokedErrorCallback = false;
150 function handleError() { 155 function handleError() {
151 ++requestFailureCount; 156 ++requestFailureCount;
152 window.clearTimeout(abortTimerId); 157 window.clearTimeout(abortTimerId);
153 if (onError) 158 if (onError && !invokedErrorCallback)
154 onError(); 159 onError();
160 invokedErrorCallback = true;
155 } 161 }
156 162
157 try { 163 try {
158 xhr.onreadystatechange = function(){ 164 xhr.onreadystatechange = function(){
159 if (xhr.readyState != 4) 165 if (xhr.readyState != 4)
160 return; 166 return;
161 167
162 if (xhr.responseXML) { 168 if (xhr.responseXML) {
163 var xmlDoc = xhr.responseXML; 169 var xmlDoc = xhr.responseXML;
164 var fullCountSet = xmlDoc.evaluate("/gmail:feed/gmail:fullcount", 170 var fullCountSet = xmlDoc.evaluate("/gmail:feed/gmail:fullcount",
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
262 }); 268 });
263 269
264 </script> 270 </script>
265 </head> 271 </head>
266 <body onload="init()"> 272 <body onload="init()">
267 <img id="logged_in" src="gmail_logged_in.png"> 273 <img id="logged_in" src="gmail_logged_in.png">
268 <canvas id="canvas" width="19" height="19"> 274 <canvas id="canvas" width="19" height="19">
269 </body> 275 </body>
270 </html> 276 </html>
271 277
OLDNEW
« no previous file with comments | « chrome/common/extensions/docs/examples/extensions/gmail.zip ('k') | chrome/common/extensions/docs/samples.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698