Index: chrome/content/ui/sendReport.js |
=================================================================== |
--- a/chrome/content/ui/sendReport.js |
+++ b/chrome/content/ui/sendReport.js |
@@ -24,17 +24,20 @@ let {FileUtils} = Cu.import("resource:// |
let {PrivateBrowsingUtils} = Cu.import("resource://gre/modules/PrivateBrowsingUtils.jsm", {}); |
const MILLISECONDS_IN_SECOND = 1000; |
const SECONDS_IN_MINUTE = 60; |
const SECONDS_IN_HOUR = 60 * SECONDS_IN_MINUTE; |
const SECONDS_IN_DAY = 24 * SECONDS_IN_HOUR; |
let contentWindow = window.arguments[0]; |
-let windowURI = (window.arguments[1] instanceof Ci.nsIURI ? window.arguments[1] : null); |
+let windowURI = window.arguments[1]; |
+if (typeof windowURI == "string") |
+ windowURI = Services.newURI(windowURI, null, null); |
+let browser = window.arguments[2]; |
let reportData = new DOMParser().parseFromString("<report></report>", "text/xml"); |
// Some helper functions to work with the report data |
function reportElement(tag) |
{ |
for (let child = reportData.documentElement.firstChild; child; child = child.nextSibling) |
if (child.nodeType == Node.ELEMENT_NODE && child.tagName == tag) |
@@ -104,17 +107,17 @@ function serializeReportData() |
// |
// Data collectors |
// |
var reportsListDataSource = |
{ |
list: [], |
- collectData: function(wnd, windowURI, callback) |
+ collectData: function(wnd, windowURI, browser, callback) |
{ |
let data = Prefs.recentReports; |
if (data && "length" in data) |
{ |
for (let i = 0; i < data.length; i++) |
{ |
let entry = data[i]; |
if (typeof entry.reportURL == "string" && entry.reportURL && |
@@ -187,17 +190,17 @@ var reportsListDataSource = |
var requestsDataSource = |
{ |
requests: reportElement("requests"), |
origRequests: [], |
requestNotifier: null, |
callback: null, |
nodeByKey: Object.create(null), |
- collectData: function(wnd, windowURI, callback) |
+ collectData: function(wnd, windowURI, browser, callback) |
{ |
let outerWindowID = wnd.QueryInterface(Ci.nsIInterfaceRequestor) |
.getInterface(Ci.nsIDOMWindowUtils) |
.outerWindowID; |
this.callback = callback; |
this.requestNotifier = new RequestNotifier(outerWindowID, this.onRequestFound, this); |
}, |
@@ -241,17 +244,17 @@ var requestsDataSource = |
} |
} |
}; |
var filtersDataSource = |
{ |
origFilters: [], |
- collectData: function(wnd, windowURI, callback) |
+ collectData: function(wnd, windowURI, browser, callback) |
{ |
let outerWindowID = wnd.QueryInterface(Ci.nsIInterfaceRequestor) |
.getInterface(Ci.nsIDOMWindowUtils) |
.outerWindowID; |
RequestNotifier.getWindowStatistics(outerWindowID, (wndStats) => |
{ |
if (wndStats) |
{ |
@@ -279,17 +282,17 @@ var subscriptionsDataSource = |
{ |
if (s.disabled || !(s instanceof RegularSubscription)) |
return false; |
if (s instanceof DownloadableSubscription && !/^(http|https|ftp):/i.test(s.url)) |
return false; |
return true; |
}, |
- collectData: function(wnd, windowURI, callback) |
+ collectData: function(wnd, windowURI, browser, callback) |
{ |
let subscriptions = reportElement("subscriptions"); |
let now = Math.round(Date.now() / 1000); |
for (let i = 0; i < FilterStorage.subscriptions.length; i++) |
{ |
let subscription = FilterStorage.subscriptions[i]; |
if (!this.subscriptionFilter(subscription)) |
continue; |
@@ -314,17 +317,17 @@ var subscriptionsDataSource = |
} |
} |
callback(); |
} |
}; |
var remoteDataSource = |
{ |
- collectData: function(wnd, windowURI, callback) |
+ collectData: function(wnd, windowURI, browser, callback) |
{ |
let outerWindowID = wnd.QueryInterface(Ci.nsIInterfaceRequestor) |
.getInterface(Ci.nsIDOMWindowUtils) |
.outerWindowID; |
let dataCollector = require("dataCollector"); |
let screenshotWidth = screenshotDataSource.getWidth(); |
dataCollector.collectData(outerWindowID, screenshotWidth, data => { |
screenshotDataSource.setData(data && data.screenshot); |
@@ -575,17 +578,17 @@ var framesDataSource = |
}); |
this.addFrames(frame.frames, frameXML); |
} |
} |
}; |
var errorsDataSource = |
{ |
- collectData: function(wnd, windowURI, callback) |
+ collectData: function(wnd, windowURI, browser, callback) |
{ |
let {addonID} = require("info"); |
addonID = addonID.replace(/[\{\}]/g, ""); |
// See https://bugzilla.mozilla.org/show_bug.cgi?id=664695 - starting with |
// Gecko 19 this function returns the result, before that it wrote to a |
// parameter. |
let outparam = {}; |
@@ -650,17 +653,17 @@ var errorsDataSource = |
callback(); |
} |
}; |
var extensionsDataSource = |
{ |
data: reportData.createElement("extensions"), |
- collectData: function(wnd, windowURI, callback) |
+ collectData: function(wnd, windowURI, browser, callback) |
{ |
try |
{ |
let AddonManager = Cu.import("resource://gre/modules/AddonManager.jsm", null).AddonManager; |
AddonManager.getAddonsByTypes(["extension", "plugin"], function(items) |
{ |
for (let i = 0; i < items.length; i++) |
{ |
@@ -690,32 +693,32 @@ var extensionsDataSource = |
reportData.documentElement.appendChild(this.data); |
else if (this.data.parentNode) |
this.data.parentNode.removeChild(this.data); |
} |
}; |
var subscriptionUpdateDataSource = |
{ |
- contentWnd: null, |
+ browser: null, |
type: null, |
outdated: null, |
needUpdate: null, |
subscriptionFilter: function(s) |
{ |
if (s instanceof DownloadableSubscription) |
return subscriptionsDataSource.subscriptionFilter(s); |
else |
return false; |
}, |
- collectData: function(wnd, windowURI, callback) |
+ collectData: function(wnd, windowURI, browser, callback) |
{ |
- this.contentWnd = wnd; |
+ this.browser = browser; |
let now = Date.now() / MILLISECONDS_IN_SECOND; |
let outdatedThreshold = now - 14 * SECONDS_IN_DAY; |
let needUpdateThreshold = now - 1 * SECONDS_IN_HOUR; |
this.outdated = []; |
this.needUpdate = []; |
let subscriptions = FilterStorage.subscriptions.filter(this.subscriptionFilter); |
@@ -796,27 +799,27 @@ var subscriptionUpdateDataSource = |
if (filtersRemoved) |
{ |
// Force the user to reload the page |
E("updateFixedIssue").hidden = false; |
document.documentElement.canAdvance = true; |
let nextButton = document.documentElement.getButton("next"); |
[nextButton.label, nextButton.accessKey] = Utils.splitLabel(E("updatePage").getAttribute("reloadButtonLabel")); |
- document.documentElement.addEventListener("wizardnext", function(event) |
+ document.documentElement.addEventListener("wizardnext", event => |
{ |
event.preventDefault(); |
event.stopPropagation(); |
window.close(); |
- this.contentWnd.location.reload(); |
- }.bind(this), true); |
+ this.browser.reload(); |
Erik
2016/01/08 04:00:45
the only problem I see with this is that the curre
Wladimir Palant
2016/01/08 13:46:20
Given that it is a specific <browser> element rath
|
+ }, true); |
} |
else |
{ |
- this.collectData(null, null, function() {}); |
+ this.collectData(null, null, null, function() {}); |
this.needUpdate = []; |
if (this.outdated.length) |
{ |
document.documentElement.canRewind = true; |
this.updatePage(this.type); |
this.showPage(); |
} |
@@ -848,17 +851,17 @@ var subscriptionUpdateDataSource = |
{ |
for (let i = 0; i < this.outdated.length; i++) |
Synchronizer.execute(this.outdated[i], true); |
} |
} |
var issuesDataSource = |
{ |
- contentWnd: null, |
+ browser: null, |
isEnabled: Prefs.enabled, |
whitelistFilter: null, |
disabledFilters: [], |
disabledSubscriptions: [], |
ownFilters: [], |
numSubscriptions: 0, |
numAppliedFilters: Infinity, |
@@ -869,19 +872,19 @@ var issuesDataSource = |
s.url != Prefs.subscriptions_antiadblockurl) |
{ |
return subscriptionsDataSource.subscriptionFilter(s); |
} |
else |
return false; |
}, |
- collectData: function(wnd, windowURI, callback) |
+ collectData: function(wnd, windowURI, browser, callback) |
{ |
- this.contentWnd = wnd; |
+ this.browser = browser; |
this.whitelistFilter = Policy.isWhitelisted(windowURI.spec); |
if (!this.whitelistFilter && this.isEnabled) |
{ |
// Find disabled filters in active subscriptions matching any of the requests |
let disabledMatcher = new CombinedMatcher(); |
for (let subscription of FilterStorage.subscriptions) |
{ |
@@ -1048,25 +1051,24 @@ var issuesDataSource = |
{ |
// User changed configuration, don't allow sending report now - page needs |
// to be reloaded |
E("issuesOverride").hidden = true; |
E("issuesChangeMessage").hidden = false; |
document.documentElement.canRewind = false; |
document.documentElement.canAdvance = true; |
- let contentWnd = this.contentWnd; |
let nextButton = document.documentElement.getButton("next"); |
[nextButton.label, nextButton.accessKey] = Utils.splitLabel(E("updatePage").getAttribute("reloadButtonLabel")); |
- document.documentElement.addEventListener("wizardnext", function(event) |
+ document.documentElement.addEventListener("wizardnext", event => |
{ |
event.preventDefault(); |
event.stopPropagation(); |
window.close(); |
- contentWnd.location.reload(); |
+ this.browser.reload(); |
}, true); |
}, |
removeWhitelist: function() |
{ |
if (this.whitelistFilter && this.whitelistFilter.subscriptions.length) |
this.whitelistFilter.disabled = true; |
E("issuesWhitelistBox").hidden = true; |
@@ -1228,17 +1230,17 @@ function initDataCollectorPage() |
progressMeter.mode = "determined"; |
progressMeter.value = progress; |
} |
// Continue with the next data source, asynchronously to allow progress meter to update |
let dataSource = dataCollectors.shift(); |
Utils.runAsync(function() |
{ |
- dataSource.collectData(contentWindow, windowURI, initNextDataSource); |
+ dataSource.collectData(contentWindow, windowURI, browser, initNextDataSource); |
}); |
}; |
initNextDataSource(); |
} |
function initTypeSelectorPage() |
{ |