Bug 1279635 - Change mozbrowserlocationchange event detail to match Servo. r=smaug
MozReview-Commit-ID: 1kCbM5lJ4Sr
--- a/dom/browser-element/BrowserElementChildPreload.js
+++ b/dom/browser-element/BrowserElementChildPreload.js
@@ -1562,17 +1562,21 @@ BrowserElementChild.prototype = {
if (!this._seenLoadStart) {
return;
}
// Remove password and wyciwyg from uri.
location = Cc["@mozilla.org/docshell/urifixup;1"]
.getService(Ci.nsIURIFixup).createExposableURI(location);
- sendAsyncMsg('locationchange', { _payload_: location.spec });
+ var webNav = docShell.QueryInterface(Ci.nsIWebNavigation);
+
+ sendAsyncMsg('locationchange', { url: location.spec,
+ canGoBack: webNav.canGoBack,
+ canGoForward: webNav.canGoForward });
},
onStateChange: function(webProgress, request, stateFlags, status) {
if (webProgress != docShell) {
return;
}
if (stateFlags & Ci.nsIWebProgressListener.STATE_START) {
--- a/dom/browser-element/mochitest/browserElement_BackForward.js
+++ b/dom/browser-element/mochitest/browserElement_BackForward.js
@@ -65,34 +65,40 @@ function test3() {
SimpleTest.executeSoon(function() {
iframe.src = browserElementTestHelpers.emptyPage2;
});
}
function test4() {
addOneShotIframeEventListener('mozbrowserlocationchange', function(e) {
- is(e.detail, browserElementTestHelpers.emptyPage3);
+ is(e.detail.url, browserElementTestHelpers.emptyPage3);
+ is(e.detail.canGoBack, true);
+ is(e.detail.canGoForward, false);
checkCanGoBackAndForward(true, false, test5);
});
SimpleTest.executeSoon(function() {
iframe.src = browserElementTestHelpers.emptyPage3;
});
}
function test5() {
addOneShotIframeEventListener('mozbrowserlocationchange', function(e) {
- is(e.detail, browserElementTestHelpers.emptyPage2);
+ is(e.detail.url, browserElementTestHelpers.emptyPage2);
+ is(e.detail.canGoBack, true);
+ is(e.detail.canGoForward, true);
checkCanGoBackAndForward(true, true, test6);
});
iframe.goBack();
}
function test6() {
addOneShotIframeEventListener('mozbrowserlocationchange', function(e) {
- is(e.detail, browserElementTestHelpers.emptyPage1);
+ is(e.detail.url, browserElementTestHelpers.emptyPage1);
+ is(e.detail.canGoBack, false);
+ is(e.detail.canGoForward, true);
checkCanGoBackAndForward(false, true, SimpleTest.finish);
});
iframe.goBack();
}
addEventListener('testready', runTest);
--- a/dom/browser-element/mochitest/browserElement_BrowserWindowNamespace.js
+++ b/dom/browser-element/mochitest/browserElement_BrowserWindowNamespace.js
@@ -19,22 +19,22 @@ function runTest() {
// window.open("foo", "bar") call. We should only get one
// mozbrowseropenwindow event.
iframe1.addEventListener('mozbrowseropenwindow', function(e) {
ok(true, "Got first mozbrowseropenwindow event.");
document.body.appendChild(e.detail.frameElement);
e.detail.frameElement.addEventListener('mozbrowserlocationchange', function(e) {
- if (e.detail == "http://example.com/#2") {
+ if (e.detail.url == "http://example.com/#2") {
ok(true, "Got locationchange to http://example.com/#2");
SimpleTest.finish();
}
else {
- ok(true, "Got locationchange to " + e.detail);
+ ok(true, "Got locationchange to " + e.detail.url);
}
});
SimpleTest.executeSoon(function() {
var iframe2 = document.createElement('iframe');
iframe2.setAttribute('mozbrowser', 'true');
iframe2.addEventListener('mozbrowseropenwindow', function(e) {
--- a/dom/browser-element/mochitest/browserElement_DataURI.js
+++ b/dom/browser-element/mochitest/browserElement_DataURI.js
@@ -31,17 +31,17 @@ function runTest2() {
var sawLoadEnd = false;
var sawLocationChange = false;
iframe1.addEventListener('mozbrowserlocationchange', function(e) {
ok(e.isTrusted, 'Event should be trusted.');
ok(!sawLocationChange, 'Just one locationchange event.');
ok(!sawLoadEnd, 'locationchange before load.');
- is(e.detail, 'data:text/html,1', "event's reported location");
+ is(e.detail.url, 'data:text/html,1', "event's reported location");
sawLocationChange = true;
});
iframe1.addEventListener('mozbrowserloadend', function() {
ok(sawLocationChange, 'Loadend after locationchange.');
ok(!sawLoadEnd, 'Just one loadend event.');
sawLoadEnd = true;
});
--- a/dom/browser-element/mochitest/browserElement_ExposableURI.js
+++ b/dom/browser-element/mochitest/browserElement_ExposableURI.js
@@ -8,17 +8,17 @@
SimpleTest.waitForExplicitFinish();
browserElementTestHelpers.setEnabledPref(true);
browserElementTestHelpers.addPermission();
var iframe;
function testPassword() {
function locationchange(e) {
- var uri = e.detail;
+ var uri = e.detail.url;
is(uri, 'http://mochi.test:8888/tests/dom/browser-element/mochitest/file_empty.html',
"Username and password shouldn't be exposed in uri.");
SimpleTest.finish();
}
iframe.addEventListener('mozbrowserlocationchange', locationchange);
iframe.src = "http://iamuser:iampassword@mochi.test:8888/tests/dom/browser-element/mochitest/file_empty.html";
}
@@ -28,17 +28,17 @@ function testWyciwyg() {
function locationchange(e) {
// locationChangeCount:
// 0 - the first load.
// 1 - after document.write().
if (locationChangeCount == 0) {
locationChangeCount ++;
} else if (locationChangeCount == 1) {
- var uri = e.detail;
+ var uri = e.detail.url;
is(uri, 'http://mochi.test:8888/tests/dom/browser-element/mochitest/file_wyciwyg.html', "Scheme in string shouldn't be wyciwyg");
iframe.removeEventListener('mozbrowserlocationchange', locationchange);
SimpleTest.executeSoon(testPassword);
}
}
// file_wyciwyg.html calls document.write() to create a wyciwyg channel.
iframe.src = 'file_wyciwyg.html';
--- a/dom/browser-element/mochitest/browserElement_FirstPaint.js
+++ b/dom/browser-element/mochitest/browserElement_FirstPaint.js
@@ -19,23 +19,23 @@ function runTest() {
gotFirstPaint = true;
if (gotFirstLocationChange) {
iframe.src = browserElementTestHelpers.emptyPage1 + '?2';
}
});
iframe.addEventListener('mozbrowserlocationchange', function(e) {
- if (e.detail == browserElementTestHelpers.emptyPage1) {
+ if (e.detail.url == browserElementTestHelpers.emptyPage1) {
gotFirstLocationChange = true;
if (gotFirstPaint) {
iframe.src = browserElementTestHelpers.emptyPage1 + '?2';
}
}
- else if (e.detail.endsWith('?2')) {
+ else if (e.detail.url.endsWith('?2')) {
SimpleTest.finish();
}
});
document.body.appendChild(iframe);
iframe.src = browserElementTestHelpers.emptyPage1;
}
--- a/dom/browser-element/mochitest/browserElement_ForwardName.js
+++ b/dom/browser-element/mochitest/browserElement_ForwardName.js
@@ -15,18 +15,18 @@ function runTest() {
iframe.setAttribute('mozbrowser', 'true');
iframe.setAttribute('name', 'foo');
iframe.addEventListener("mozbrowseropenwindow", function(e) {
ok(false, 'Got mozbrowseropenwindow, but should not have.');
});
iframe.addEventListener('mozbrowserlocationchange', function(e) {
- ok(true, "Got locationchange to " + e.detail);
- if (e.detail.endsWith("ForwardName.html#finish")) {
+ ok(true, "Got locationchange to " + e.detail.url);
+ if (e.detail.url.endsWith("ForwardName.html#finish")) {
SimpleTest.finish();
}
});
// The file sends us messages via alert() that start with "success:" or
// "failure:".
iframe.addEventListener('mozbrowsershowmodalprompt', function(e) {
ok(e.detail.message.startsWith('success:'), e.detail.message);
--- a/dom/browser-element/mochitest/browserElement_LoadEvents.js
+++ b/dom/browser-element/mochitest/browserElement_LoadEvents.js
@@ -33,17 +33,17 @@ function runTest() {
}
function locationchange(e) {
ok(e.isTrusted, 'Event should be trusted.');
ok(!seenLocationChange, 'Just one locationchange event.');
seenLocationChange = true;
ok(seenLoadStart, 'Location change after load start.');
ok(!seenLoadEnd, 'Location change before load end.');
- ok(e.detail, browserElementTestHelpers.emptyPage1, "event's reported location");
+ ok(e.detail.url, browserElementTestHelpers.emptyPage1, "event's reported location");
}
function loadend(e) {
ok(e.isTrusted, 'Event should be trusted.');
ok(seenLoadStart, 'loadend after loadstart.');
ok(!seenLoadEnd, 'Just one loadend event.');
ok(seenLocationChange, 'loadend after locationchange.');
is(e.detail.backgroundColor, 'rgb(0, 128, 0)', 'Expected background color reported')
@@ -86,17 +86,17 @@ function runTest2() {
var iframe = document.getElementById('iframe');
iframe.addEventListener('mozbrowserlocationchange', function(e) {
ok(e.isTrusted, 'Event should be trusted.');
ok(!seenLocationChange, 'Just one locationchange event.');
seenLocationChange = true;
ok(seenLoadStart, 'Location change after load start.');
ok(!seenLoadEnd, 'Location change before load end.');
- ok(e.detail, browserElementTestHelpers.emptyPage2, "event's reported location");
+ ok(e.detail.url, browserElementTestHelpers.emptyPage2, "event's reported location");
});
iframe.addEventListener('mozbrowserloadend', function(e) {
ok(e.isTrusted, 'Event should be trusted.');
ok(!seenLoadEnd, 'Just one load end event.');
seenLoadEnd = true;
ok(seenLoadStart, 'Load end after load start.');
ok(seenLocationChange, 'Load end after location change.');
--- a/dom/browser-element/mochitest/browserElement_PurgeHistory.js
+++ b/dom/browser-element/mochitest/browserElement_PurgeHistory.js
@@ -70,17 +70,17 @@ function test3() {
SimpleTest.executeSoon(function() {
iframe.src = browserElementTestHelpers.emptyPage2;
});
}
function test4() {
addOneShotIframeEventListener('mozbrowserlocationchange', function(e) {
- is(e.detail, browserElementTestHelpers.emptyPage3);
+ is(e.detail.url, browserElementTestHelpers.emptyPage3);
purgeHistory(SimpleTest.finish);
});
SimpleTest.executeSoon(function() {
iframe.src = browserElementTestHelpers.emptyPage3;
});
}
--- a/dom/browser-element/mochitest/browserElement_SendEvent.js
+++ b/dom/browser-element/mochitest/browserElement_SendEvent.js
@@ -30,17 +30,17 @@ function runTest() {
}
iframe.addEventListener("mozbrowserloadend", function onloadend(e) {
iframe.sendMouseEvent("mousedown", x, y, 0, 1, 0);
});
iframe.addEventListener("mozbrowserlocationchange", function onlocchange(e) {
var a = document.createElement("a");
- a.href = e.detail;
+ a.href = e.detail.url;
switch (a.hash) {
case "#mousedown":
ok(true, "Receive a mousedown event.");
iframe.sendMouseEvent("mousemove", x, y, 0, 0, 0);
break;
case "#mousemove":
ok(true, "Receive a mousemove event.");
--- a/dom/browser-element/mochitest/browserElement_TargetTop.js
+++ b/dom/browser-element/mochitest/browserElement_TargetTop.js
@@ -13,17 +13,17 @@ function runTest() {
var iframe = document.createElement('iframe');
iframe.setAttribute('mozbrowser', 'true');
iframe.addEventListener('mozbrowseropenwindow', function(e) {
ok(false, 'Not expecting an openwindow event.');
});
iframe.addEventListener('mozbrowserlocationchange', function(e) {
- if (/file_browserElement_TargetTop.html\?2$/.test(e.detail)) {
+ if (/file_browserElement_TargetTop.html\?2$/.test(e.detail.url)) {
ok(true, 'Got the locationchange we were looking for.');
SimpleTest.finish();
}
});
document.body.appendChild(iframe);
iframe.src = 'file_browserElement_TargetTop.html';
}