| 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-2015 Eyeo GmbH | 3 * Copyright (C) 2006-2015 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 299 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 310 subscriptionXML.setAttribute("softExpiration", subscription.softExpira
tion - now); | 310 subscriptionXML.setAttribute("softExpiration", subscription.softExpira
tion - now); |
| 311 if (subscription.expires) | 311 if (subscription.expires) |
| 312 subscriptionXML.setAttribute("hardExpiration", subscription.expires -
now); | 312 subscriptionXML.setAttribute("hardExpiration", subscription.expires -
now); |
| 313 subscriptionXML.setAttribute("downloadStatus", subscription.downloadStat
us); | 313 subscriptionXML.setAttribute("downloadStatus", subscription.downloadStat
us); |
| 314 } | 314 } |
| 315 } | 315 } |
| 316 callback(); | 316 callback(); |
| 317 } | 317 } |
| 318 }; | 318 }; |
| 319 | 319 |
| 320 var remoteDataSource = |
| 321 { |
| 322 collectData: function(wnd, windowURI, callback) |
| 323 { |
| 324 let outerWindowID = wnd.QueryInterface(Ci.nsIInterfaceRequestor) |
| 325 .getInterface(Ci.nsIDOMWindowUtils) |
| 326 .outerWindowID; |
| 327 let dataCollector = require("dataCollector"); |
| 328 let screenshotWidth = screenshotDataSource.getWidth(); |
| 329 dataCollector.collectData(outerWindowID, screenshotWidth, data => { |
| 330 screenshotDataSource.setData(data && data.screenshot); |
| 331 framesDataSource.setData(windowURI, data && data.opener, data && data.refe
rrer, data && data.frames); |
| 332 callback(); |
| 333 }); |
| 334 } |
| 335 } |
| 336 |
| 320 var screenshotDataSource = | 337 var screenshotDataSource = |
| 321 { | 338 { |
| 322 imageOffset: 10, | 339 imageOffset: 10, |
| 323 | 340 |
| 324 // Fields used for user interaction | 341 // Fields used for user interaction |
| 325 _enabled: true, | 342 _enabled: true, |
| 326 _canvas: null, | 343 _canvas: null, |
| 327 _context: null, | 344 _context: null, |
| 328 _selectionType: "mark", | 345 _selectionType: "mark", |
| 329 _currentData: null, | 346 _currentData: null, |
| 330 _undoQueue: [], | 347 _undoQueue: [], |
| 331 | 348 |
| 332 collectData: function(wnd, windowURI, callback) | 349 getWidth: function() |
| 333 { | 350 { |
| 334 let outerWindowID = wnd.QueryInterface(Ci.nsIInterfaceRequestor) | |
| 335 .getInterface(Ci.nsIDOMWindowUtils) | |
| 336 .outerWindowID; | |
| 337 let dataCollector = require("dataCollector"); | |
| 338 let canvas = E("screenshotCanvas"); | 351 let canvas = E("screenshotCanvas"); |
| 339 let screenshotWidth = canvas.offsetWidth - this.imageOffset * 2; | 352 return canvas.offsetWidth - this.imageOffset * 2; |
| 353 }, |
| 354 |
| 355 setData: function(screenshot) |
| 356 { |
| 357 let canvas = E("screenshotCanvas"); |
| 340 | 358 |
| 341 // Do not resize canvas any more (no idea why Gecko requires both to be set) | 359 // Do not resize canvas any more (no idea why Gecko requires both to be set) |
| 342 canvas.parentNode.style.MozBoxAlign = "center"; | 360 canvas.parentNode.style.MozBoxAlign = "center"; |
| 343 canvas.parentNode.align = "center"; | 361 canvas.parentNode.align = "center"; |
| 344 | 362 |
| 345 // Init canvas settings | 363 // Init canvas settings |
| 346 let context = canvas.getContext("2d"); | 364 let context = canvas.getContext("2d"); |
| 347 context.fillStyle = "rgb(0, 0, 0)"; | 365 context.fillStyle = "rgb(0, 0, 0)"; |
| 348 context.strokeStyle = "rgba(255, 0, 0, 0.7)"; | 366 context.strokeStyle = "rgba(255, 0, 0, 0.7)"; |
| 349 context.lineWidth = 3; | 367 context.lineWidth = 3; |
| 350 context.lineJoin = "round"; | 368 context.lineJoin = "round"; |
| 351 | 369 |
| 352 this._canvas = canvas; | 370 this._canvas = canvas; |
| 353 this._context = context; | 371 this._context = context; |
| 354 | 372 |
| 355 dataCollector.collectData(outerWindowID, screenshotWidth, data => { | 373 if (screenshot) |
| 356 if (data && data.screenshot) | 374 { |
| 357 { | 375 let image = new Image(); |
| 358 let image = new Image(); | 376 image.src = screenshot; |
| 359 image.src = data.screenshot; | 377 image.addEventListener("load", () => { |
| 360 image.addEventListener("load", () => { | 378 canvas.width = image.width + this.imageOffset * 2; |
| 361 canvas.width = image.width + this.imageOffset * 2; | 379 canvas.height = image.height + this.imageOffset * 2; |
| 362 canvas.height = image.height + this.imageOffset * 2; | 380 context.drawImage(image, this.imageOffset, this.imageOffset); |
| 363 context.drawImage(image, this.imageOffset, this.imageOffset); | 381 }); |
| 364 }); | 382 } |
| 365 } | |
| 366 callback(); | |
| 367 }); | |
| 368 }, | 383 }, |
| 369 | 384 |
| 370 get enabled() this._enabled, | 385 get enabled() this._enabled, |
| 371 set enabled(enabled) | 386 set enabled(enabled) |
| 372 { | 387 { |
| 373 if (this._enabled == enabled) | 388 if (this._enabled == enabled) |
| 374 return; | 389 return; |
| 375 | 390 |
| 376 this._enabled = enabled; | 391 this._enabled = enabled; |
| 377 this._canvas.style.opacity = this._enabled ? "" : "0.3" | 392 this._canvas.style.opacity = this._enabled ? "" : "0.3" |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 522 | 537 |
| 523 if (!this._undoQueue.length) | 538 if (!this._undoQueue.length) |
| 524 E("screenshotUndoButton").disabled = true; | 539 E("screenshotUndoButton").disabled = true; |
| 525 } | 540 } |
| 526 }; | 541 }; |
| 527 | 542 |
| 528 var framesDataSource = | 543 var framesDataSource = |
| 529 { | 544 { |
| 530 site: null, | 545 site: null, |
| 531 | 546 |
| 532 collectData: function(wnd, windowURI, callback) | 547 setData: function(windowURI, opener, referrer, frames) |
| 533 { | 548 { |
| 534 try | 549 try |
| 535 { | 550 { |
| 536 this.site = windowURI.host; | 551 this.site = windowURI.host; |
| 537 if (this.site) | 552 if (this.site) |
| 538 document.title += " (" + this.site + ")"; | 553 document.title += " (" + this.site + ")"; |
| 539 } | 554 } |
| 540 catch (e) | 555 catch (e) |
| 541 { | 556 { |
| 542 // Expected exception - not all URL schemes have a host name | 557 // Expected exception - not all URL schemes have a host name |
| 543 } | 558 } |
| 544 | 559 |
| 545 let window = reportElement("window"); | 560 let window = reportElement("window"); |
| 546 window.setAttribute("url", censorURL(windowURI ? windowURI.spec : wnd.locati
on.href)); | 561 window.setAttribute("url", censorURL(windowURI.spec)); |
| 547 if (wnd.opener && wnd.opener.location.href) | 562 if (opener) |
| 548 window.setAttribute("opener", censorURL(wnd.opener.location.href)); | 563 window.setAttribute("opener", censorURL(opener)); |
| 549 if (wnd.document.referrer) | 564 if (referrer) |
| 550 window.setAttribute("referrer", censorURL(wnd.document.referrer)); | 565 window.setAttribute("referrer", censorURL(referrer)); |
| 551 this.scanFrames(wnd, window); | 566 this.addFrames(frames || [], window); |
| 552 | |
| 553 callback(); | |
| 554 }, | 567 }, |
| 555 | 568 |
| 556 scanFrames: function(wnd, xmlList) | 569 addFrames: function(frames, xmlList) |
| 557 { | 570 { |
| 558 try | 571 for (let frame of frames) |
| 559 { | 572 { |
| 560 for (let i = 0; i < wnd.frames.length; i++) | 573 let frameXML = appendElement(xmlList, "frame", { |
| 561 { | 574 url: censorURL(frame.url) |
| 562 let frame = wnd.frames[i]; | 575 }); |
| 563 let frameXML = appendElement(xmlList, "frame", { | 576 this.addFrames(frame.frames, frameXML); |
| 564 url: censorURL(frame.location.href) | |
| 565 }); | |
| 566 this.scanFrames(frame, frameXML); | |
| 567 } | |
| 568 } | |
| 569 catch (e) | |
| 570 { | |
| 571 // Don't break if something goes wrong | |
| 572 Cu.reportError(e); | |
| 573 } | 577 } |
| 574 } | 578 } |
| 575 }; | 579 }; |
| 576 | 580 |
| 577 var errorsDataSource = | 581 var errorsDataSource = |
| 578 { | 582 { |
| 579 collectData: function(wnd, windowURI, callback) | 583 collectData: function(wnd, windowURI, callback) |
| 580 { | 584 { |
| 581 let {addonID} = require("info"); | 585 let {addonID} = require("info"); |
| 582 addonID = addonID.replace(/[\{\}]/g, ""); | 586 addonID = addonID.replace(/[\{\}]/g, ""); |
| (...skipping 555 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1138 subscription.disabled = false; | 1142 subscription.disabled = false; |
| 1139 | 1143 |
| 1140 node.parentNode.removeChild(node); | 1144 node.parentNode.removeChild(node); |
| 1141 if (!E("issuesDisabledSubscriptions").firstChild) | 1145 if (!E("issuesDisabledSubscriptions").firstChild) |
| 1142 E("issuesDisabledSubscriptionsBox").hidden = true; | 1146 E("issuesDisabledSubscriptionsBox").hidden = true; |
| 1143 this.forceReload(); | 1147 this.forceReload(); |
| 1144 } | 1148 } |
| 1145 }; | 1149 }; |
| 1146 | 1150 |
| 1147 let dataCollectors = [reportsListDataSource, requestsDataSource, filtersDataSour
ce, subscriptionsDataSource, | 1151 let dataCollectors = [reportsListDataSource, requestsDataSource, filtersDataSour
ce, subscriptionsDataSource, |
| 1148 screenshotDataSource, framesDataSource, errorsDataSource,
extensionsDataSource, | 1152 remoteDataSource, errorsDataSource, extensionsDataSource, |
| 1149 subscriptionUpdateDataSource, issuesDataSource]; | 1153 subscriptionUpdateDataSource, issuesDataSource]; |
| 1150 | 1154 |
| 1151 // | 1155 // |
| 1152 // Wizard logic | 1156 // Wizard logic |
| 1153 // | 1157 // |
| 1154 | 1158 |
| 1155 function initWizard() | 1159 function initWizard() |
| 1156 { | 1160 { |
| 1157 // Make sure no issue type is selected by default | 1161 // Make sure no issue type is selected by default |
| 1158 E("typeGroup").selectedItem = null; | 1162 E("typeGroup").selectedItem = null; |
| (...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1545 | 1549 |
| 1546 function censorURL(url) | 1550 function censorURL(url) |
| 1547 { | 1551 { |
| 1548 return url.replace(/([?;&\/#][^?;&\/#]+?=)[^?;&\/#]+/g, "$1*"); | 1552 return url.replace(/([?;&\/#][^?;&\/#]+?=)[^?;&\/#]+/g, "$1*"); |
| 1549 } | 1553 } |
| 1550 | 1554 |
| 1551 function encodeHTML(str) | 1555 function encodeHTML(str) |
| 1552 { | 1556 { |
| 1553 return str.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").
replace(/"/g, """); | 1557 return str.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").
replace(/"/g, """); |
| 1554 } | 1558 } |
| OLD | NEW |