Changeset 740
- Timestamp:
- 2008-01-13 02:37:20 (1 year ago)
- Files:
-
- trunk/chrome/content/common/internalFunctions.js (modified) (7 diffs)
- trunk/chrome/content/common/overlayFunctions.js (modified) (6 diffs)
- trunk/chrome/content/dta/addurl.js (modified) (4 diffs)
- trunk/chrome/content/dta/manager.js (modified) (67 diffs)
- trunk/chrome/content/dta/manager/conflicts.xul (modified) (1 diff)
- trunk/chrome/content/dta/manager/customevent.js (modified) (1 diff)
- trunk/chrome/content/dta/manager/decompressor.js (modified) (2 diffs)
- trunk/chrome/content/dta/manager/filehandling.js (modified) (2 diffs)
- trunk/chrome/content/dta/manager/info.js (modified) (2 diffs)
- trunk/chrome/content/dta/manager/metalinker.js (modified) (3 diffs)
- trunk/chrome/content/dta/manager/prefs.js (modified) (2 diffs)
- trunk/chrome/content/dta/manager/sessionmanager.js (modified) (10 diffs)
- trunk/chrome/content/dta/manager/tooltip.js (modified) (4 diffs)
- trunk/chrome/content/dta/manager/tree.js (modified) (7 diffs)
- trunk/chrome/content/dta/manager/verificator.js (modified) (1 diff)
- trunk/chrome/content/dta/select.js (modified) (4 diffs)
- trunk/chrome/content/integration/elements.js (modified) (11 diffs)
- trunk/chrome/content/integration/saveas.js (modified) (2 diffs)
- trunk/chrome/content/preferences/prefs.js (modified) (4 diffs)
- trunk/components/debugService.idl (added)
- trunk/components/debugService.js (added)
- trunk/components/debugService.xpt (added)
- trunk/components/migrationService.js (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/chrome/content/common/internalFunctions.js
r719 r740 84 84 85 85 if (typeof(data) == 'object') { 86 return data.toSource(); 86 try { 87 return data.toSource(); 88 } 89 catch (ex) { 90 // fall-trough 91 } 87 92 } 88 93 … … 106 111 } 107 112 else { 108 Debug. dump("requested a non-existing element: " + id);113 Debug.logString("requested a non-existing element: " + id); 109 114 } 110 115 } … … 234 239 } 235 240 catch (ex) { 236 Debug. dump("Utils.askForDir():", ex);241 Debug.log("Utils.askForDir():", ex); 237 242 } 238 243 return false; … … 271 276 } 272 277 catch(ex) { 273 Debug. dump('Utils.validateDir()', ex);278 Debug.log('Utils.validateDir()', ex); 274 279 } 275 280 return false; … … 302 307 } 303 308 catch(ex) { 304 Debug. dump("Playing " + name + " sound failed", ex);309 Debug.log("Playing " + name + " sound failed", ex); 305 310 } 306 311 }, … … 438 443 } 439 444 catch (ex) { 440 Debug. dump("updateIcon: failed to grab icon", ex);445 Debug.log("updateIcon: failed to grab icon", ex); 441 446 } 442 447 return "moz-icon://foo.html?size=" + size; … … 730 735 killAll: function TM_killAll() { 731 736 for (id in this._timers) { 732 Debug. dump("killing: " + id);737 Debug.logString("killing: " + id); 733 738 window.clearTimeout(this._timers[id]._tid); 734 739 } trunk/chrome/content/common/overlayFunctions.js
r719 r740 180 180 } 181 181 }; 182 var DTA_debug = { 183 _dumpEnabled : false, 184 _consoleService : null, 185 _logPointer : null, 186 load : function() { 187 this._dumpEnabled = DTA_preferences.getDTA("logging", false); 188 if (!this._dumpEnabled) { 189 this.dump = this._dumpStub; 190 return; 191 } 192 this.dump = this._dump; 193 this._consoleService = Components.classes["@mozilla.org/consoleservice;1"].getService(Components.interfaces.nsIConsoleService); 194 this._logPointer = DTA_profileFile.get('dta_log.txt'); 195 try { 196 if (this._logPointer.fileSize > (200 * 1024)) 197 this._logPointer.remove(false); 198 } catch(e) {} 199 }, 200 formatTimeDate: function DD_formatTimeDate(value) { 201 return String(value).replace(/\b(\d)\b/g, "0$1"); 202 }, 203 _dump : function(message, e) { 204 try { 205 if (message == "" && typeof(e) != "object") { 206 return; 207 } 208 209 message = String(message); 210 211 var time = new Date(); 212 var text = this.formatTimeDate(time.getHours()) 213 + ":" + this.formatTimeDate(time.getMinutes()) 214 + ":" + this.formatTimeDate(time.getSeconds()) 215 + ":" + time.getMilliseconds() 216 + "\x0D\x0A\t"; 217 218 if (message != "") { 219 text += message.replace(/\n/g, "\x0D\x0A\t") + " "; 220 } 221 if (e instanceof Components.Exception) { 222 text += e.toString(); 223 } else if (e instanceof Error) { 224 if (!e.message) 225 text += e; 226 else 227 text += e.message + " (" + e.fileName +" line " + e.lineNumber + ")"; 228 } 229 else if (e instanceof String || typeof(e) == "string") { 230 text += e; 231 } 232 else if (e instanceof Number || typeof(e) == "number") { 233 text += "ResCode: " + e; 234 } 235 else if (e) { 236 text += e.toSource(); 237 } 238 text += "\x0D\x0A"; 239 240 if (Components.stack) { 241 var stack = Components.stack.caller; 242 for (var i = 0; i < 4 && stack; ++i) { 243 text += stack.toString() + "\x0D\x0A"; 244 stack = stack.caller; 245 } 246 } 247 248 this._consoleService.logStringMessage(text); 249 250 var fo = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream); 251 fo.init(this._logPointer, 0x04 | 0x08 | 0x10, 0664, 0); 252 fo.write(text, text.length); 253 fo.close(); 254 } catch(ex) { 255 Components.utils.reportError(ex); 256 } 257 }, 258 _dumpStub: function() {}, 259 dumpObj: function(obj) { 260 for (i in obj) { 261 Components.utils.reportError(i + ": " + (obj[i] ? obj[i].toSource() : obj[i])); 262 } 263 } 264 }; 265 DTA_debug.load(); 182 var DTA_debug = Components.classes['@downthemall.net/debug-service;1'] 183 .getService(Components.interfaces.dtaIDebugService); 266 184 267 185 var DTA_URLhelpers = { … … 279 197 try { 280 198 rv = decodeURIComponent(text); 281 } catch (ex) { 282 DTA_debug.dump("DTA_URLhelpers: failed to decode: " + text, ex); 199 } 200 catch (ex) { 201 DTA_debug.log("DTA_URLhelpers: failed to decode: " + text, ex); 283 202 } 284 203 } … … 509 428 if (turbo) { 510 429 511 DTA_debug. dump("saveLinkArray(): DtaOneClick filtering started");430 DTA_debug.logString("saveLinkArray(): DtaOneClick filtering started"); 512 431 513 432 var links; … … 538 457 ); 539 458 540 DTA_debug. dump("saveLinkArray(): DtaOneClick has filtered " + links.length + " URLs");459 DTA_debug.logString("saveLinkArray(): DtaOneClick has filtered " + links.length + " URLs"); 541 460 542 461 if (links.length == 0) { … … 572 491 return DTA_Mediator.getByUrl("chrome://dta/content/dta/manager.xul"); 573 492 } catch(ex) { 574 DTA_debug. dump("openManager():", ex);493 DTA_debug.log("openManager():", ex); 575 494 } 576 495 return null; … … 656 575 ref = DTA_AddingFunctions.ios.newURI(ref, null, null); 657 576 } catch (ex) { 658 DTA_debug. dump(ref, ex);577 DTA_debug.log(ref, ex); 659 578 ref = null; 660 579 } trunk/chrome/content/dta/addurl.js
r712 r740 152 152 } 153 153 catch (ex) { 154 Debug. dump(ex);154 Debug.log(ex); 155 155 this._pats.push(new Literal(m[0])); 156 156 } … … 175 175 } 176 176 catch (ex) { 177 Debug. dump(ex);177 Debug.log(ex); 178 178 this._pats.push(new Literal(m[0])); 179 179 } … … 321 321 } 322 322 catch (ex) { 323 Debug. dump("Not able to gather data from the clipboard!");323 Debug.log("Not able to gather data from the clipboard!"); 324 324 } 325 325 } … … 329 329 330 330 window.sizeToContent(); 331 } catch(ex) { 332 Debug.dump("load():", ex); 331 } 332 catch(ex) { 333 Debug.log("load():", ex); 333 334 } 334 335 }, trunk/chrome/content/dta/manager.js
r736 r740 112 112 } 113 113 catch (ex) { 114 Debug.dump("cannot set cancelQuit", ex); 115 // 114 Debug.log("cannot set cancelQuit", ex); 116 115 } 117 116 } … … 204 203 } 205 204 catch(ex) { 206 Debug. dump("refresh():", ex);205 Debug.log("refresh():", ex); 207 206 } 208 207 }, … … 243 242 d.cancel(_("timeout")); 244 243 } 245 Debug. dump(d + " is a timeout");244 Debug.logString(d + " is a timeout"); 246 245 } 247 246 } 248 247 ) 249 248 this.startNext(); 250 } catch(ex) { 251 Debug.dump("checkDownloads():", ex); 249 } 250 catch(ex) { 251 Debug.log("checkDownloads():", ex); 252 252 } 253 253 }, … … 277 277 } 278 278 return rv; 279 } catch(ex){ 280 Debug.dump("startNext():", ex); 279 } 280 catch(ex){ 281 Debug.log("startNext():", ex); 281 282 } 282 283 return false; … … 293 294 // but we cannot handle it because we don't know at which stage we crashed 294 295 download.partialSize = download.totalSize; 295 Debug. dump("Download seems to be complete; likely a left-over from a crash, finish it:" + download);296 Debug.logString("Download seems to be complete; likely a left-over from a crash, finish it:" + download); 296 297 download.finishDownload(); 297 298 return; … … 302 303 if (!download.started) { 303 304 download.started = true; 304 Debug. dump("Let's start " + download);305 Debug.logString("Let's start " + download); 305 306 } 306 307 else { 307 Debug. dump("Let's resume " + download + " at " + download.partialSize);308 Debug.logString("Let's resume " + download + " at " + download.partialSize); 308 309 } 309 310 this._running.push(new Dialog.RunningJob(download)); … … 334 335 return; 335 336 } 336 Debug. dump("signal(): Queue finished");337 Debug.logString("signal(): Queue finished"); 337 338 Utils.playSound("done"); 338 339 … … 359 360 } 360 361 catch(ex) { 361 Debug. dump("signal():", ex);362 Debug.log("signal():", ex); 362 363 } 363 364 }, … … 450 451 } 451 452 else { 452 Debug. dump("Going down even if queue was not probably closed yet!");453 Debug.logString("Going down even if queue was not probably closed yet!"); 453 454 } 454 455 } … … 457 458 try { 458 459 this._cleanTmpDir(); 459 } catch(ex) { 460 Debug.dump("_safeClose", ex); 460 } 461 catch(ex) { 462 Debug.log("_safeClose", ex); 461 463 } 462 464 self.close(); … … 607 609 var ch = aValue.match(/charset=['"]?([\w\d_-]+)/i); 608 610 if (ch && ch[1].length) { 609 DTA_debug. dump("visitHeader: found override to " + ch[1]);611 DTA_debug.logString("visitHeader: found override to " + ch[1]); 610 612 this.overrideCharset = ch[1]; 611 613 } … … 619 621 case 'accept-ranges': 620 622 this.acceptRanges = aValue.toLowerCase().indexOf('none') == -1; 621 Debug. dump("acceptrange = " + aValue.toLowerCase());623 Debug.logString("acceptrange = " + aValue.toLowerCase()); 622 624 break; 623 625 … … 638 640 } 639 641 catch (ex) { 640 Debug.dump("gts", ex); 641 // no-op 642 Debug.log("gts", ex); 642 643 } 643 644 break; … … 668 669 } 669 670 } 670 } catch (ex) { 671 Debug.dump("hrhv::visitHeader:", ex); 671 } 672 catch (ex) { 673 Debug.log("hrhv::visitHeader:", ex); 672 674 } 673 675 }, … … 688 690 continue; 689 691 } 690 Debug. dump(x + " missing");692 Debug.logString(x + " missing"); 691 693 throw new Exception(x + " is missing"); 692 694 } 693 695 // header is there, but differs 694 696 else if (this[x] != v[x]) { 695 Debug. dump(x + " nm: [" + this[x] + "] [" + v[x] + "]");697 Debug.logString(x + " nm: [" + this[x] + "] [" + v[x] + "]"); 696 698 throw new Exception("Header " + x + " doesn't match"); 697 699 } … … 731 733 try { 732 734 this._visitors[nodes[i].url] = new Visitor(nodes[i].values); 733 } catch (ex) { 734 Debug.dump("failed to read one visitor", ex); 735 } 736 catch (ex) { 737 Debug.log("failed to read one visitor", ex); 735 738 } 736 739 } … … 749 752 v.values = this._visitors[x].save(); 750 753 rv.push(v); 751 } catch(ex) { 752 Debug.dump(x, ex); 754 } 755 catch(ex) { 756 Debug.log(x, ex); 753 757 } 754 758 } … … 836 840 } 837 841 catch (ex) { 838 Debug. dump("tried to construct with invalid tmpFile", ex);842 Debug.log("tried to construct with invalid tmpFile", ex); 839 843 this.cancel(); 840 844 } … … 1017 1021 } 1018 1022 this.invalidate(); 1019 Debug. dump("mc set to", nv);1023 Debug.log("mc set to", nv); 1020 1024 return this._maxChunks; 1021 1025 }, … … 1041 1045 } 1042 1046 catch (ex) { 1043 Debug. dump("download::getSize(): ", e)1047 Debug.log("download::getSize(): ", e) 1044 1048 } 1045 1049 return 0; … … 1140 1144 this.chunks.forEach(function(c) { c.close(); }); 1141 1145 var destination = new FileFactory(this.destinationPath); 1142 Debug. dump(this.fileName + ": Move " + this.tmpFile.path + " to " + this.destinationFile);1146 Debug.logString(this.fileName + ": Move " + this.tmpFile.path + " to " + this.destinationFile); 1143 1147 1144 1148 if (!destination.exists()) { … … 1161 1165 } 1162 1166 catch(ex) { 1163 Debug. dump(ex);1167 Debug.log("continueMoveCompleted encountered an error", ex); 1164 1168 this.complete(ex); 1165 1169 } … … 1171 1175 } 1172 1176 catch (ex) { 1173 Debug. dump("handleMetalink", ex);1177 Debug.log("handleMetalink", ex); 1174 1178 } 1175 1179 }, … … 1201 1205 } 1202 1206 catch (ex) { 1203 Debug. dump("Setting timestamp on file failed: ", ex);1207 Debug.log("Setting timestamp on file failed: ", ex); 1204 1208 } 1205 1209 } … … 1210 1214 }, 1211 1215 finishDownload: function QI_finishDownload(exception) { 1212 Debug. dump("finishDownload, connections",this.sessionConnections);1216 Debug.logString("finishDownload, connections: " + this.sessionConnections); 1213 1217 this._completeEvents = ['moveCompleted', 'setAttributes']; 1214 1218 if (this.hash) { … … 1227 1231 if (exception) { 1228 1232 this.fail(_("accesserror"), _("permissions") + " " + _("destpath") + ". " + _("checkperm"), _("accesserror")); 1229 Debug. dump("complete: ", exception);1233 Debug.log("complete: ", exception); 1230 1234 return; 1231 1235 } … … 1239 1243 } 1240 1244 catch(ex) { 1241 Debug. dump("completeEvent failed: " + evt, ex);1245 Debug.log("completeEvent failed: " + evt, ex); 1242 1246 tp.complete(); 1243 1247 } … … 1342 1346 this._destinationName = this.fileName; 1343 1347 this._destinationPath = this.pathName.addFinalSlash(); 1344 Debug. dump("rebuildDestination():", ex);1348 Debug.log("rebuildDestination():", ex); 1345 1349 } 1346 1350 this._destinationNameFull = Utils.formatConflictName( … … 1355 1359 1356 1360 fail: function QI_fail(title, msg, state) { 1357 Debug. dump("failDownload invoked");1361 Debug.logString("failDownload invoked"); 1358 1362 1359 1363 this.cancel(state); … … 1383 1387 } 1384 1388 this.state = CANCELED; 1385 Debug. dump(this.fileName + ": canceled");1389 Debug.logString(this.fileName + ": canceled"); 1386 1390 1387 1391 this.visitors = new VisitorManager(); … … 1403 1407 1404 1408 } catch(ex) { 1405 Debug. dump("cancel():", ex);1409 Debug.log("cancel():", ex); 1406 1410 } 1407 1411 }, 1408 1412 1409 1413 removeTmpFile: function QI_removeTmpFile() { 1410 Debug.dump("remove tmpfile");1411 1414 if (this.tmpFile.exists()) { 1412 1415 try { … … 1414 1417 } 1415 1418 catch (ex) { 1416 Debug. dump("failed to remove tmpfile: " + this.tmpFile.path, ex);1419 Debug.log("failed to remove tmpfile: " + this.tmpFile.path, ex); 1417 1420 } 1418 1421 } 1419 1422 else { 1420 Debug. dump("tmpfile not found: " + this.tmpFile.path);1423 Debug.logString("tmpfile not found: " + this.tmpFile.path); 1421 1424 } 1422 1425 }, 1423 1426 sessionConnections: 0, 1424 1427 resumeDownload: function QI_resumeDownload() { 1425 Debug. dump("resumeDownload");1428 Debug.logString("resumeDownload: " + d); 1426 1429 function cleanChunks(d) { 1427 1430 // merge finished chunks together, so that the scoreboard does not bloat that much … … 1444 1447 chunk.running = true; 1445 1448 download.state = RUNNING; 1446 Debug. dump("started: " + chunk);1449 Debug.logString("started: " + chunk); 1447 1450 chunk.download = new Connection(download, chunk, header); 1448 1451 ++download.activeChunks; … … 1506 1509 } 1507 1510 catch(ex) { 1508 Debug. dump("resumeDownload():", ex);1511 Debug.log("resumeDownload():", ex); 1509 1512 } 1510 1513 return false; … … 1521 1524 } 1522 1525 ); 1523 Debug. dump("scoreboard\n" + scoreboard);1526 Debug.logString("scoreboard\n" + scoreboard); 1524 1527 }, 1525 1528 toString: function() { … … 1535 1538 'mask', 1536 1539 'pathName', 1537 'hash',1538 1540 'compression', 1539 1541 'maxChunks', … … 1546 1548 this 1547 1549 ); 1550 if (this.hash) { 1551 e.hash = _atos(this.hash.sum); 1552 e.hashType = _atos(this.hash.type); 1553 } 1548 1554 e.state = this.is(COMPLETE, CANCELED, FINISHING) ? this.state : PAUSED; 1549 1555 if (this.destinationNameOverride) { … … 1707 1713 } 1708 1714 catch (ex) { 1709 Debug. dump('write: ' + this.parent.tmpFile.path, ex);1715 Debug.log('write: ' + this.parent.tmpFile.path, ex); 1710 1716 throw ex; 1711 1717 } … … 1801 1807 return; 1802 1808 } 1803 Debug. dump("cancel");1809 Debug.logString("cancel"); 1804 1810 if (!aReason) { 1805 1811 aReason = 0x804b0002; // NS_BINDING_ABORTED; … … 1807 1813 this._chan.cancel(aReason); 1808 1814 this._closed = true; 1809 } catch (ex) { 1810 Debug.dump("cancel", ex); 1815 } 1816 catch (ex) { 1817 Debug.log("cancel", ex); 1811 1818 } 1812 1819 }, … … 1817 1824 } 1818 1825 catch (ex) { 1819 Debug. dump("interface not implemented: " + iid, ex);1826 Debug.log("interface not implemented: " + iid, ex); 1820 1827 throw ex; 1821 1828 } … … 1825 1832 return WindowWatcherService.getNewAuthPrompter(null) 1826 1833 .QueryInterface(Ci.nsIAuthPrompt); 1827 } catch (ex) { 1828 Debug.dump("authPrompter", ex); 1834 } 1835 catch (ex) { 1836 Debug.log("authPrompter", ex); 1829 1837 throw ex; 1830 1838 } … … 1887 1895 } 1888 1896 catch (ex) { 1889 Debug. dump('onDataAvailable', ex);1897 Debug.log('onDataAvailable', ex); 1890 1898 this.d.fail(_("accesserror"), _("permissions") + " " + _("destpath") + ". " + _("checkperm"), _("accesserror")); 1891 1899 } … … 1905 1913 } 1906 1914 1907 Debug. dump("handleError: problem found; trying to recover");1915 Debug.logString("handleError: problem found; trying to recover"); 1908 1916 1909 1917 1910 1918 if (d.urlManager.markBad(this.url)) { 1911 Debug. dump("handleError: fresh urls available, kill this one and use another!");1919 Debug.logString("handleError: fresh urls available, kill this one and use another!"); 1912 1920 return true; 1913 1921 } 1914 1922 1915 Debug. dump("affected: " + c);1923 Debug.logString("affected: " + c); 1916 1924 1917 1925 let max = -1, found = -1; … … 1924 1932 } 1925 1933 if (found > -1) { 1926 Debug. dump("handleError: found joinable chunk; recovering suceeded",found);1934 Debug.logString("handleError: found joinable chunk; recovering suceeded, chunk: " + found); 1927 1935 d.chunks[found].end = c.end; 1928 1936 if (--d.maxChunks == 1) { … … 1941 1949 // should never ever happen :p 1942 1950 d.dumpScoreboard(); 1943 Debug. dump("overlapping:\n" + c1 + "\n" + c2);1951 Debug.logString("overlapping:\n" + c1 + "\n" + c2); 1944 1952 d.fail("Internal error", "Please notify the developers that there were 'overlapping chunks'!", "Internal error (please report)"); 1945 1953 return false; … … 1974 1982 if (code >= 400) { 1975 1983 if (!this.handleError()) { 1976 Debug. dump("handleError: Cannot recover from problem!", code);1984 Debug.log("handleError: Cannot recover from problem!", code); 1977 1985 if ([401, 402, 407, 500, 502, 503, 504].indexOf(code) != -1) { 1978 Debug. dump("we got temp failure!", code);1986 Debug.log("we got temp failure!", code); 1979 1987 d.pause(); 1980 1988 d.status = code >= 500 ? _('temperror') : _('autherror'); … … 1998 2006 // not partial content altough we are multi-chunk 1999 2007 if (code != 206 && !this.isInfoGetter) { 2000 Debug. dump(d + ": Server returned a " + aChannel.responseStatus + " response instead of 206", this.isInfoGetter);2001 Debug. dump(c, this.url.url);2008 Debug.log(d + ": Server returned a " + aChannel.responseStatus + " response instead of 206", this.isInfoGetter); 2009 Debug.log(c, this.url.url); 2002 2010 2003 2011 d.resumable = false; … … 2006 2014 vis = {value: '', visitHeader: function(a,b) { this.value += a + ': ' + b + "\n"; }}; 2007 2015 aChannel.visitRequestHeaders(vis); 2008 Debug. dump("Request Headers\n\n" + vis.value);2016 Debug.logString("Request Headers\n\n" + vis.value); 2009 2017 vis.value = ''; 2010 2018 aChannel.visitResponseHeaders(vis); 2011 Debug. dump("Response Headers\n\n" + vis.value);2019 Debug.logString("Response Headers\n\n" + vis.value); 2012 2020 d.cancel(); 2013 2021 d.resumable = false; … … 2022 2030 } 2023 2031 catch (ex) { 2024 Debug. dump("header failed! " + d, ex);2032 Debug.log("header failed! " + d, ex); 2025 2033 // restart download from the beginning 2026 2034 d.cancel(); … … 2050 2058 2051 2059 if (visitor.type && visitor.type.search(/application\/metalink\+xml/) != -1) { 2052 Debug.dump(d + " is a metalink");2053 2060 d.isMetalink = true; 2054 2061 d.resumable = false; … … 2088 2095 if (c.start != 0 && d.is(RUNNING)) { 2089 2096 if (!this.handleError()) { 2090 Debug. dump(d + ": Server error or disconnection(type 1)");2097 Debug.log(d + ": Server error or disconnection", "(type 1)"); 2091 2098 d.status = _("servererror"); 2092 2099 d.pause(); … … 2121 2128 let c = this.c; 2122 2129 let d = this.d; 2123 Debug. dump('StartRequest: ' + c);2130 Debug.logString('StartRequest: ' + c); 2124 2131 2125 2132 this.started = true; … … 2169 2176 } 2170 2177 if (nsd < tsd) { 2171 Debug.dump("nsd", nsd); 2172 Debug.dump("tsd", tsd); 2178
