Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: chrome/content/ui/sendReport.js

Issue 29333312: Issue 3486 - Issue reporter: don`t access content window to reload the page (Closed)
Patch Set: Created Jan. 7, 2016, 7:15 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | lib/ui.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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()
{
« no previous file with comments | « no previous file | lib/ui.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld