[Pkg-mozext-commits] [tabmixplus] 16/34: [e10s] Update AutoReload not to use unsafe CPOW
David Prévot
taffit at moszumanska.debian.org
Mon Mar 9 23:28:08 UTC 2015
This is an automated email from the git hooks/post-receive script.
taffit pushed a commit to branch master
in repository tabmixplus.
commit fc8889411f6480541dd127b2412b0f58155027b7
Author: onemen <tabmix.onemen at gmail.com>
Date: Sat Feb 21 19:32:46 2015 +0200
[e10s] Update AutoReload not to use unsafe CPOW
---
chrome/content/content.js | 17 +++++++
chrome/locale/en-US/tabmix.properties | 1 +
modules/AutoReload.jsm | 95 ++++++++++++++++++++++++-----------
modules/Utils.jsm | 6 +++
4 files changed, 89 insertions(+), 30 deletions(-)
diff --git a/chrome/content/content.js b/chrome/content/content.js
index 5671c77..6b17025 100644
--- a/chrome/content/content.js
+++ b/chrome/content/content.js
@@ -30,6 +30,8 @@ let TabmixContentHandler = {
"Tabmix:sendDOMTitleChanged",
"Tabmix:updateHistoryTitle",
"Tabmix:collectScrollPosition",
+ "Tabmix:setScrollPosition",
+ "Tabmix:collectReloadData",
],
init: function () {
@@ -73,6 +75,21 @@ let TabmixContentHandler = {
scrollY: content.scrollY};
sendAsyncMessage("Tabmix:updateScrollPosition", { scroll: scroll });
break;
+ case "Tabmix:setScrollPosition":
+ let {x, y} = data;
+ content.scrollTo(x, y);
+ break;
+ case "Tabmix:collectReloadData":
+ let json = {scrollX: content.scrollX,
+ scrollY: content.scrollY};
+ let sh = docShell.QueryInterface(Ci.nsIWebNavigation).sessionHistory;
+ if (sh) {
+ let entry = sh.getEntryAtIndex(sh.index, false);
+ json.isPostData = !!entry.QueryInterface(Ci.nsISHEntry).postData;
+ json.isPostData = true;
+ }
+ sendAsyncMessage("Tabmix:reloadTab", json);
+ break;
}
},
diff --git a/chrome/locale/en-US/tabmix.properties b/chrome/locale/en-US/tabmix.properties
index a1db12b..cdc319a 100644
--- a/chrome/locale/en-US/tabmix.properties
+++ b/chrome/locale/en-US/tabmix.properties
@@ -25,6 +25,7 @@ window.closeWarning.1=Warn me when I attempt to close window with multiple tabs
closeWindow.label=Close window
confirm_autoreloadPostData_title=Warning!
confirm_autoreloadPostData=The page on which you tried to enable Auto Reload contains POSTDATA.\nIf you enable Auto Reload, any action the form carries out (such as an online purchase) will be repeated.\n\nAre you sure that you want to enable Auto Reload?
+confirm_autoreloadPostData_remote=The page on which you tried to enable Auto Reload contains POSTDATA.\nIf you enable Auto Reload, any action the form carries out (such as an online purchase) will be lost.\n\nAre you sure that you want to enable Auto Reload?
incompatible.title= Tab Mix Plus
incompatible.msg0= The following extensions are integrated or incompatible with Tab Mix Plus.
incompatible.msg1= Would you like to disable these extensions?
diff --git a/modules/AutoReload.jsm b/modules/AutoReload.jsm
index 342c7cc..5d7c5eb 100644
--- a/modules/AutoReload.jsm
+++ b/modules/AutoReload.jsm
@@ -7,7 +7,7 @@ const {interfaces: Ci, utils: Cu} = Components;
Cu.import("resource://gre/modules/Services.jsm");
Cu.import("resource://tabmixplus/Services.jsm");
-let AutoReload = {
+this.AutoReload = {
init: function() {
_setItem = TabmixSvc.topWin().Tabmix.setItem;
},
@@ -231,8 +231,15 @@ let AutoReload = {
if (!TabmixSvc.prefBranch.getBoolPref("reload_match_address") ||
aTab.autoReloadURI == aBrowser.currentURI.spec) {
if (aBrowser.__tabmixScrollPosition || null) {
- let {x, y} = aBrowser.__tabmixScrollPosition;
- aBrowser[TabmixSvc.contentWindowAsCPOW].scrollTo(x, y);
+ if (TabmixSvc.version(330)) {
+ aBrowser.messageManager
+ .sendAsyncMessage("Tabmix:setScrollPosition",
+ aBrowser.__tabmixScrollPosition);
+ }
+ else {
+ let {x, y} = aBrowser.__tabmixScrollPosition;
+ aBrowser.contentWindow.scrollTo(x, y);
+ }
aBrowser.__tabmixScrollPosition = null;
}
@@ -244,6 +251,36 @@ let AutoReload = {
else if (aTab.autoReloadEnabled)
aTab.autoReloadEnabled = false;
_setItem(aTab, "_reload", aTab.autoReloadEnabled || null);
+ },
+
+ confirm: function(window, tab, isRemote) {
+ if (tab.postDataAcceptedByUser)
+ return true;
+ let title = TabmixSvc.getString('confirm_autoreloadPostData_title');
+ let remote = isRemote ? '_remote' : '';
+ let msg = TabmixSvc.getString('confirm_autoreloadPostData' + remote);
+ Services.obs.addObserver(_observe, "common-dialog-loaded", false);
+ let resultOK = Services.prompt.confirm(window, title, msg);
+ if (resultOK)
+ tab.postDataAcceptedByUser = true;
+ else {
+ tab.autoReloadEnabled = false;
+ _setItem(tab, "_reload", null);
+ tab.autoReloadURI = null;
+ this._update(tab);
+ }
+ return resultOK;
+ },
+
+ reloadRemoteTab: function(browser, data) {
+ var window = browser.ownerDocument.defaultView;
+ let tab = window.gBrowser.getTabForBrowser(browser);
+ // RemoteWebNavigation doesn't accept postdata or headers.
+ if (data.isPostData && !this.confirm(window, tab, true))
+ return;
+
+ data.remote = true;
+ doReloadTab(window, browser, data);
}
};
@@ -259,55 +296,53 @@ function _reloadTab(aTab) {
}
var browser = aTab.linkedBrowser;
- var webNav = browser.webNavigation;
- var sh, postData, referrer;
+ if (TabmixSvc.version(330) && aTab.getAttribute("remote")) {
+ browser.messageManager.sendAsyncMessage("Tabmix:collectReloadData");
+ return;
+ }
+
+ var data = {};
var window = aTab.ownerDocument.defaultView;
try {
- sh = webNav.sessionHistory;
+ let sh = browser.webNavigation.sessionHistory;
if (sh) {
let entry = sh.getEntryAtIndex(sh.index, false);
- postData = entry.QueryInterface(Ci.nsISHEntry).postData;
- referrer = entry.QueryInterface(Ci.nsISHEntry).referrerURI;
-
- if (postData && !aTab.postDataAcceptedByUser) {
- let title = TabmixSvc.getString('confirm_autoreloadPostData_title');
- let msg = TabmixSvc.getString('confirm_autoreloadPostData');
- Services.obs.addObserver(_observe, "common-dialog-loaded", false);
- let resultOK = Services.prompt.confirm(window, title, msg);
- if (resultOK)
- aTab.postDataAcceptedByUser = true;
- else {
- aTab.autoReloadEnabled = false;
- _setItem(aTab, "_reload", null);
- aTab.autoReloadURI = null;
- AutoReload._update(aTab);
- return;
- }
- }
+ data.postData = entry.QueryInterface(Ci.nsISHEntry).postData;
+ data.referrer = entry.QueryInterface(Ci.nsISHEntry).referrerURI;
+ if (data.postData && !AutoReload.confirm(window, aTab))
+ return;
}
} catch (e) { }
- let contentWindow = browser[TabmixSvc.contentWindowAsCPOW];
- browser.__tabmixScrollPosition = {x: contentWindow.scrollX,
- y: contentWindow.scrollY};
+ let contentWindow = browser.contentWindow;
+ data.scrollX = contentWindow.scrollX;
+ data.scrollY = contentWindow.scrollY;
+ doReloadTab(window, browser, data);
+}
+
+function doReloadTab(window, browser, data) {
+ browser.__tabmixScrollPosition = {x: data.scrollX,
+ y: data.scrollY};
var loadFlags = Ci.nsIWebNavigation.LOAD_FLAGS_BYPASS_HISTORY |
Ci.nsIWebNavigation.LOAD_FLAGS_BYPASS_PROXY |
Ci.nsIWebNavigation.LOAD_FLAGS_BYPASS_CACHE;
// This part is based on BrowserReloadWithFlags.
- let url = webNav.currentURI.spec;
+ let url = browser.currentURI.spec;
+ let {postData, referrer, remote} = data;
let loadURIWithFlags = TabmixSvc.version(330) &&
window.gBrowser.updateBrowserRemotenessByURL(browser, url) || postData;
if (loadURIWithFlags) {
- if (!postData)
+ if (remote || !postData)
postData = referrer = null;
browser.loadURIWithFlags(url, loadFlags, referrer, null, postData);
return;
}
if (!TabmixSvc.version(330)) {
- webNav = sh.QueryInterface(Ci.nsIWebNavigation);
+ let webNav = browser.webNavigation.sessionHistory
+ .QueryInterface(Ci.nsIWebNavigation);
webNav.reload(loadFlags);
return;
}
diff --git a/modules/Utils.jsm b/modules/Utils.jsm
index cc43dea..1945a1b 100644
--- a/modules/Utils.jsm
+++ b/modules/Utils.jsm
@@ -9,6 +9,7 @@ const FMM_MESSAGES = [
"Tabmix:SetSyncHandler",
"Tabmix:restorePermissionsComplete",
"Tabmix:updateScrollPosition",
+ "Tabmix:reloadTab",
];
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
@@ -19,6 +20,8 @@ XPCOMUtils.defineLazyModuleGetter(this, "TabmixSvc",
"resource://tabmixplus/Services.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "DocShellCapabilities",
"resource://tabmixplus/DocShellCapabilities.jsm");
+XPCOMUtils.defineLazyModuleGetter(this, "AutoReload",
+ "resource://tabmixplus/AutoReload.jsm");
this.TabmixUtils = {
initMessageManager: function(window) {
@@ -48,6 +51,9 @@ this.TabmixUtils = {
let tab = win.gBrowser.getTabForBrowser(browser);
win.TabmixSessionManager.updateScrollPosition(tab, message.data.scroll);
break;
+ case "Tabmix:reloadTab":
+ AutoReload.reloadRemoteTab(browser, message.data);
+ break;
}
},
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-mozext/tabmixplus.git
More information about the Pkg-mozext-commits
mailing list