| OLD | NEW |
| 1 /* | 1 /* |
| 2 * This file is part of Adblock Plus <https://adblockplus.org/>, | 2 * This file is part of Adblock Plus <https://adblockplus.org/>, |
| 3 * Copyright (C) 2006-2016 Eyeo GmbH | 3 * Copyright (C) 2006-2016 Eyeo GmbH |
| 4 * | 4 * |
| 5 * Adblock Plus is free software: you can redistribute it and/or modify | 5 * Adblock Plus is free software: you can redistribute it and/or modify |
| 6 * it under the terms of the GNU General Public License version 3 as | 6 * it under the terms of the GNU General Public License version 3 as |
| 7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
| 8 * | 8 * |
| 9 * Adblock Plus is distributed in the hope that it will be useful, | 9 * Adblock Plus is distributed in the hope that it will be useful, |
| 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 108 */ | 108 */ |
| 109 onDownloadSuccess: null, | 109 onDownloadSuccess: null, |
| 110 | 110 |
| 111 /** | 111 /** |
| 112 * Callback to be triggered whenever a download fails. | 112 * Callback to be triggered whenever a download fails. |
| 113 * @type Function | 113 * @type Function |
| 114 */ | 114 */ |
| 115 onDownloadError: null, | 115 onDownloadError: null, |
| 116 | 116 |
| 117 /** | 117 /** |
| 118 * Callback to be triggered for POST request data generation. |
| 119 * @type Function |
| 120 */ |
| 121 generateRequestData: null, |
| 122 |
| 123 /** |
| 124 * List of valid responses. |
| 125 * @type Array |
| 126 */ |
| 127 validResponses: [200], |
| 128 |
| 129 /** |
| 118 * Checks whether anything needs downloading. | 130 * Checks whether anything needs downloading. |
| 119 */ | 131 */ |
| 120 _doCheck: function() | 132 _doCheck: function() |
| 121 { | 133 { |
| 122 let now = Date.now(); | 134 let now = Date.now(); |
| 123 for (let downloadable of this.dataSource()) | 135 for (let downloadable of this.dataSource()) |
| 124 { | 136 { |
| 125 if (downloadable.lastCheck && now - downloadable.lastCheck > this.maxAbsen
ceInterval) | 137 if (downloadable.lastCheck && now - downloadable.lastCheck > this.maxAbsen
ceInterval) |
| 126 { | 138 { |
| 127 // No checks for a long time interval - user must have been offline, e.g
. | 139 // No checks for a long time interval - user must have been offline, e.g
. |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 243 } | 255 } |
| 244 | 256 |
| 245 this.onDownloadError(downloadable, downloadUrl, error, channelStatus, re
sponseStatus, redirectCallback); | 257 this.onDownloadError(downloadable, downloadUrl, error, channelStatus, re
sponseStatus, redirectCallback); |
| 246 } | 258 } |
| 247 }.bind(this); | 259 }.bind(this); |
| 248 | 260 |
| 249 try | 261 try |
| 250 { | 262 { |
| 251 request = new XMLHttpRequest(); | 263 request = new XMLHttpRequest(); |
| 252 request.mozBackgroundRequest = true; | 264 request.mozBackgroundRequest = true; |
| 253 request.open("GET", downloadUrl); | 265 request.open(this.generateRequestData ? "POST" : "GET", downloadUrl); |
| 254 } | 266 } |
| 255 catch (e) | 267 catch (e) |
| 256 { | 268 { |
| 257 errorCallback("synchronize_invalid_url"); | 269 errorCallback("synchronize_invalid_url"); |
| 258 return; | 270 return; |
| 259 } | 271 } |
| 260 | 272 |
| 261 try { | 273 try { |
| 262 request.overrideMimeType("text/plain"); | 274 request.overrideMimeType("text/plain"); |
| 263 request.channel.loadFlags = request.channel.loadFlags | | 275 request.channel.loadFlags = request.channel.loadFlags | |
| (...skipping 19 matching lines...) Expand all Loading... |
| 283 }.bind(this), false); | 295 }.bind(this), false); |
| 284 | 296 |
| 285 request.addEventListener("load", function(event) | 297 request.addEventListener("load", function(event) |
| 286 { | 298 { |
| 287 if (onShutdown.done) | 299 if (onShutdown.done) |
| 288 return; | 300 return; |
| 289 | 301 |
| 290 delete this._downloading[downloadable.url]; | 302 delete this._downloading[downloadable.url]; |
| 291 | 303 |
| 292 // Status will be 0 for non-HTTP requests | 304 // Status will be 0 for non-HTTP requests |
| 293 if (request.status && request.status != 200) | 305 if (request.status && this.validResponses.indexOf(request.status) == -1) |
| 294 { | 306 { |
| 295 errorCallback("synchronize_connection_error"); | 307 errorCallback("synchronize_connection_error"); |
| 296 return; | 308 return; |
| 297 } | 309 } |
| 298 | 310 |
| 299 downloadable.downloadCount++; | 311 downloadable.downloadCount++; |
| 300 | 312 |
| 301 this.onDownloadSuccess(downloadable, request.responseText, errorCallback,
function redirectCallback(url) | 313 this.onDownloadSuccess(downloadable, request.responseText, errorCallback,
function redirectCallback(url) |
| 302 { | 314 { |
| 303 if (redirects >= this.maxRedirects) | 315 if (redirects >= this.maxRedirects) |
| 304 errorCallback("synchronize_connection_error"); | 316 errorCallback("synchronize_connection_error"); |
| 305 else | 317 else |
| 306 { | 318 { |
| 307 downloadable.redirectURL = url; | 319 downloadable.redirectURL = url; |
| 308 this._download(downloadable, redirects + 1); | 320 this._download(downloadable, redirects + 1); |
| 309 } | 321 } |
| 310 }.bind(this)); | 322 }.bind(this)); |
| 311 }.bind(this), false); | 323 }.bind(this), false); |
| 312 | 324 |
| 313 request.send(null); | 325 if (this.generateRequestData) |
| 326 { |
| 327 Promise.resolve(this.generateRequestData(downloadable)) |
| 328 .then(data => { |
| 329 request.setRequestHeader("Content-Type", "application/json"); |
| 330 request.send(JSON.stringify(data)); |
| 331 }); |
| 332 } |
| 333 else |
| 334 request.send(null); |
| 314 | 335 |
| 315 this._downloading[downloadable.url] = true; | 336 this._downloading[downloadable.url] = true; |
| 316 if (this.onDownloadStarted) | 337 if (this.onDownloadStarted) |
| 317 this.onDownloadStarted(downloadable); | 338 this.onDownloadStarted(downloadable); |
| 318 }, | 339 }, |
| 319 | 340 |
| 320 /** | 341 /** |
| 321 * Produces a soft and a hard expiration interval for a given supplied | 342 * Produces a soft and a hard expiration interval for a given supplied |
| 322 * expiration interval. | 343 * expiration interval. |
| 323 * @return {Array} soft and hard expiration interval | 344 * @return {Array} soft and hard expiration interval |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 385 * @type Integer | 406 * @type Integer |
| 386 */ | 407 */ |
| 387 hardExpiration: 0, | 408 hardExpiration: 0, |
| 388 | 409 |
| 389 /** | 410 /** |
| 390 * Number indicating how often the object was downloaded. | 411 * Number indicating how often the object was downloaded. |
| 391 * @type Integer | 412 * @type Integer |
| 392 */ | 413 */ |
| 393 downloadCount: 0, | 414 downloadCount: 0, |
| 394 }; | 415 }; |
| OLD | NEW |