mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-17 22:32:51 +00:00
Bug 1256652 - [webext] Add webNavigation form_submit transitions implementation and test case. r=krizsa
MozReview-Commit-ID: GiMnQpCpHHm --HG-- extra : transplant_source : %E5%02vk%3B%95%FC%D8%FF%8AC%E4%A6%A5e_%B4.%EA%DA
This commit is contained in:
parent
94d2a46537
commit
dc5fd2506d
@ -5,5 +5,8 @@
|
||||
|
||||
<iframe src="file_WebNavigation_page2.html" width="200" height="200"></iframe>
|
||||
|
||||
<form>
|
||||
</form>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
@ -168,6 +168,23 @@ add_task(function* webnav_transitions_props() {
|
||||
"transitionQualifiers found in the OnCommitted events");
|
||||
}
|
||||
|
||||
// transitionType: form_submit
|
||||
received = [];
|
||||
yield loadAndWait(win, "onCompleted", URL, () => {
|
||||
win.document.querySelector("form").submit();
|
||||
});
|
||||
|
||||
found = received.find((data) => (data.event == "onCommitted" && data.url == URL));
|
||||
|
||||
ok(found, "Got the onCommitted event");
|
||||
|
||||
if (found) {
|
||||
is(found.details.transitionType, "form_submit",
|
||||
"Got the expected 'form_submit' transitionType in the OnCommitted event");
|
||||
ok(Array.isArray(found.details.transitionQualifiers),
|
||||
"transitionQualifiers found in the OnCommitted events");
|
||||
}
|
||||
|
||||
// transitionQualifier: server_redirect
|
||||
received = [];
|
||||
yield loadAndWait(win, "onCompleted", REDIRECTED, () => { win.location = REDIRECT; });
|
||||
|
@ -23,6 +23,35 @@ addMessageListener("Extension:DisableWebNavigation", () => {
|
||||
removeEventListener("DOMContentLoaded", loadListener);
|
||||
});
|
||||
|
||||
var FormSubmitListener = {
|
||||
QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver,
|
||||
Ci.nsIFormSubmitObserver,
|
||||
Ci.nsISupportsWeakReference]),
|
||||
init() {
|
||||
this.formSubmitWindows = new WeakSet();
|
||||
Services.obs.addObserver(FormSubmitListener, "earlyformsubmit", false);
|
||||
},
|
||||
|
||||
uninit() {
|
||||
Services.obs.removeObserver(FormSubmitListener, "earlyformsubmit", false);
|
||||
this.formSubmitWindows = new WeakSet();
|
||||
},
|
||||
|
||||
notify: function(form, window, actionURI) {
|
||||
try {
|
||||
this.formSubmitWindows.add(window);
|
||||
} catch (e) {
|
||||
Cu.reportError("Error in FormSubmitListener.notify");
|
||||
}
|
||||
},
|
||||
|
||||
hasAndForget: function(window) {
|
||||
let has = this.formSubmitWindows.has(window);
|
||||
this.formSubmitWindows.delete(window);
|
||||
return has;
|
||||
},
|
||||
};
|
||||
|
||||
var WebProgressListener = {
|
||||
init: function() {
|
||||
// This WeakMap (DOMWindow -> nsIURI) keeps track of the pathname and hash
|
||||
@ -125,8 +154,8 @@ var WebProgressListener = {
|
||||
},
|
||||
|
||||
sendDocumentChange({webProgress, locationURI, request}) {
|
||||
let {loadType} = webProgress;
|
||||
let frameTransitionData = this.getFrameTransitionData({loadType, request});
|
||||
let {loadType, DOMWindow} = webProgress;
|
||||
let frameTransitionData = this.getFrameTransitionData({loadType, request, DOMWindow});
|
||||
|
||||
let data = {
|
||||
frameTransitionData,
|
||||
@ -139,7 +168,7 @@ var WebProgressListener = {
|
||||
},
|
||||
|
||||
sendHistoryChange({webProgress, previousURI, locationURI, request}) {
|
||||
let {loadType} = webProgress;
|
||||
let {loadType, DOMWindow} = webProgress;
|
||||
|
||||
let isHistoryStateUpdated = false;
|
||||
let isReferenceFragmentUpdated = false;
|
||||
@ -163,7 +192,7 @@ var WebProgressListener = {
|
||||
}
|
||||
|
||||
if (isHistoryStateUpdated || isReferenceFragmentUpdated) {
|
||||
let frameTransitionData = this.getFrameTransitionData({loadType, request});
|
||||
let frameTransitionData = this.getFrameTransitionData({loadType, request, DOMWindow});
|
||||
|
||||
let data = {
|
||||
frameTransitionData,
|
||||
@ -177,7 +206,7 @@ var WebProgressListener = {
|
||||
}
|
||||
},
|
||||
|
||||
getFrameTransitionData({loadType, request}) {
|
||||
getFrameTransitionData({loadType, request, DOMWindow}) {
|
||||
let frameTransitionData = {};
|
||||
|
||||
if (loadType & Ci.nsIDocShell.LOAD_CMD_HISTORY) {
|
||||
@ -194,24 +223,31 @@ var WebProgressListener = {
|
||||
}
|
||||
}
|
||||
|
||||
if (FormSubmitListener.hasAndForget(DOMWindow)) {
|
||||
frameTransitionData.form_submit = true;
|
||||
}
|
||||
|
||||
|
||||
return frameTransitionData;
|
||||
},
|
||||
|
||||
|
||||
QueryInterface: XPCOMUtils.generateQI([Ci.nsIWebProgressListener, Ci.nsISupportsWeakReference]),
|
||||
};
|
||||
|
||||
var disabled = false;
|
||||
WebProgressListener.init();
|
||||
FormSubmitListener.init();
|
||||
addEventListener("unload", () => {
|
||||
if (!disabled) {
|
||||
disabled = true;
|
||||
WebProgressListener.uninit();
|
||||
FormSubmitListener.uninit();
|
||||
}
|
||||
});
|
||||
addMessageListener("Extension:DisableWebNavigation", () => {
|
||||
if (!disabled) {
|
||||
disabled = true;
|
||||
WebProgressListener.uninit();
|
||||
FormSubmitListener.uninit();
|
||||
}
|
||||
});
|
||||
|
Loading…
x
Reference in New Issue
Block a user