mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-19 16:25:38 +00:00
Bug 1255061 - [e10s] convert test_bug_411966.html to mochitest-browser. r=adw
MozReview-Commit-ID: 5QCYC6uljKa --HG-- extra : rebase_source : 4dff5486bb2a0d141436e044804d2483231ba689
This commit is contained in:
parent
02c22ae659
commit
a224888879
@ -12,6 +12,7 @@ support-files =
|
||||
[browser_bug680727.js]
|
||||
skip-if = buildapp == 'mulet' # Bug ?????? - test times out on try on all platforms, but works locally for markh!
|
||||
[browser_colorAnalyzer.js]
|
||||
[browser_double_redirect.js]
|
||||
[browser_favicon_privatebrowsing_perwindowpb.js]
|
||||
[browser_favicon_setAndFetchFaviconForPage.js]
|
||||
[browser_favicon_setAndFetchFaviconForPage_failures.js]
|
||||
|
@ -0,0 +1,63 @@
|
||||
// Test for bug 411966.
|
||||
// When a page redirects multiple times, from_visit should point to the
|
||||
// previous visit in the chain, not to the first visit in the chain.
|
||||
|
||||
add_task(function* () {
|
||||
yield PlacesTestUtils.clearHistory();
|
||||
|
||||
const BASE_URL = "http://example.com/tests/toolkit/components/places/tests/browser/";
|
||||
const TEST_URI = NetUtil.newURI(BASE_URL + "begin.html");
|
||||
const FIRST_REDIRECTING_URI = NetUtil.newURI(BASE_URL + "redirect_twice.sjs");
|
||||
const FINAL_URI = NetUtil.newURI(BASE_URL + "final.html");
|
||||
|
||||
let promiseVisits = new Promise(resolve => {
|
||||
PlacesUtils.history.addObserver({
|
||||
__proto__: NavHistoryObserver.prototype,
|
||||
_notified: [],
|
||||
onVisit: function (uri, id, time, sessionId, referrerId, transition) {
|
||||
info("Received onVisit: " + uri.spec);
|
||||
this._notified.push(uri);
|
||||
|
||||
if (!uri.equals(FINAL_URI)) {
|
||||
return;
|
||||
}
|
||||
|
||||
is(this._notified.length, 4);
|
||||
PlacesUtils.history.removeObserver(this);
|
||||
|
||||
Task.spawn(function* () {
|
||||
// Get all pages visited from the original typed one
|
||||
let db = yield PlacesUtils.promiseDBConnection();
|
||||
let rows = yield db.execute(
|
||||
`SELECT url FROM moz_historyvisits
|
||||
JOIN moz_places h ON h.id = place_id
|
||||
WHERE from_visit IN
|
||||
(SELECT v.id FROM moz_historyvisits v
|
||||
JOIN moz_places p ON p.id = v.place_id
|
||||
WHERE p.url = :url)
|
||||
`, { url: TEST_URI.spec });
|
||||
|
||||
is(rows.length, 1, "Found right number of visits");
|
||||
let visitedUrl = rows[0].getResultByName("url");
|
||||
// Check that redirect from_visit is not from the original typed one
|
||||
is(visitedUrl, FIRST_REDIRECTING_URI.spec, "Check referrer for " + visitedUrl);
|
||||
|
||||
resolve();
|
||||
});
|
||||
}
|
||||
}, false);
|
||||
});
|
||||
|
||||
PlacesUtils.history.markPageAsTyped(TEST_URI);
|
||||
yield BrowserTestUtils.withNewTab({
|
||||
gBrowser,
|
||||
url: TEST_URI.spec,
|
||||
}, function* (browser) {
|
||||
// Load begin page, click link on page to record visits.
|
||||
yield BrowserTestUtils.synthesizeMouseAtCenter("#clickme", {}, browser);
|
||||
|
||||
yield promiseVisits;
|
||||
});
|
||||
|
||||
yield PlacesTestUtils.clearHistory();
|
||||
});
|
@ -3,8 +3,6 @@
|
||||
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
add_task(function* () {
|
||||
waitForExplicitFinish();
|
||||
|
||||
const REDIRECT_URI = NetUtil.newURI("http://mochi.test:8888/tests/toolkit/components/places/tests/browser/redirect.sjs");
|
||||
const TARGET_URI = NetUtil.newURI("http://mochi.test:8888/tests/toolkit/components/places/tests/browser/redirect-target.html");
|
||||
|
||||
|
@ -1,18 +1,19 @@
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
const TRANSITION_LINK = Ci.nsINavHistoryService.TRANSITION_LINK;
|
||||
const TRANSITION_TYPED = Ci.nsINavHistoryService.TRANSITION_TYPED;
|
||||
const TRANSITION_BOOKMARK = Ci.nsINavHistoryService.TRANSITION_BOOKMARK;
|
||||
const TRANSITION_REDIRECT_PERMANENT = Ci.nsINavHistoryService.TRANSITION_REDIRECT_PERMANENT;
|
||||
const TRANSITION_REDIRECT_TEMPORARY = Ci.nsINavHistoryService.TRANSITION_REDIRECT_TEMPORARY;
|
||||
const TRANSITION_EMBED = Ci.nsINavHistoryService.TRANSITION_EMBED;
|
||||
const TRANSITION_FRAMED_LINK = Ci.nsINavHistoryService.TRANSITION_FRAMED_LINK;
|
||||
const TRANSITION_DOWNLOAD = Ci.nsINavHistoryService.TRANSITION_DOWNLOAD;
|
||||
|
||||
Components.utils.import("resource://gre/modules/PlacesUtils.jsm");
|
||||
Components.utils.import("resource://gre/modules/NetUtil.jsm");
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "PlacesTestUtils",
|
||||
"resource://testing-common/PlacesTestUtils.jsm");
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "BrowserTestUtils",
|
||||
"resource://testing-common/BrowserTestUtils.jsm");
|
||||
|
||||
const TRANSITION_LINK = PlacesUtils.history.TRANSITION_LINK;
|
||||
const TRANSITION_TYPED = PlacesUtils.history.TRANSITION_TYPED;
|
||||
const TRANSITION_BOOKMARK = PlacesUtils.history.TRANSITION_BOOKMARK;
|
||||
const TRANSITION_REDIRECT_PERMANENT = PlacesUtils.history.TRANSITION_REDIRECT_PERMANENT;
|
||||
const TRANSITION_REDIRECT_TEMPORARY = PlacesUtils.history.TRANSITION_REDIRECT_TEMPORARY;
|
||||
const TRANSITION_EMBED = PlacesUtils.history.TRANSITION_EMBED;
|
||||
const TRANSITION_FRAMED_LINK = PlacesUtils.history.TRANSITION_FRAMED_LINK;
|
||||
const TRANSITION_DOWNLOAD = PlacesUtils.history.TRANSITION_DOWNLOAD;
|
||||
|
||||
/**
|
||||
* Returns a moz_places field value for a url.
|
||||
|
@ -4,6 +4,6 @@
|
||||
*/
|
||||
|
||||
function handleRequest(request, response) {
|
||||
response.setStatusLine("1.1", 302, "Found");
|
||||
response.setStatusLine("1.1", 301, "Found");
|
||||
response.setHeader("Location", "final.html", false);
|
||||
}
|
||||
|
@ -1,3 +1,2 @@
|
||||
[test_bug_94514.html]
|
||||
[test_bug_411966.html]
|
||||
[test_bug_461710_perwindowpb.html]
|
||||
|
@ -1,5 +0,0 @@
|
||||
{
|
||||
"extends": [
|
||||
"../../../../../../testing/mochitest/mochitest.eslintrc"
|
||||
]
|
||||
}
|
@ -1,9 +0,0 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<title>Bug 411966</title>
|
||||
</head>
|
||||
</body>
|
||||
Clicked link page!
|
||||
</body>
|
||||
</html>
|
@ -1,2 +0,0 @@
|
||||
HTTP 302 Moved Temporarily
|
||||
Location: http://localhost:8888/tests/toolkit/components/places/tests/bug_411966/TempRedirectPage.htm
|
@ -1,9 +0,0 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<title>Bug 411966</title>
|
||||
</head>
|
||||
</body>
|
||||
Permanently redirected!
|
||||
</body>
|
||||
</html>
|
@ -1,9 +0,0 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<title>Bug 411966</title>
|
||||
</head>
|
||||
</body>
|
||||
Temporarly redirected!
|
||||
</body>
|
||||
</html>
|
@ -1,2 +0,0 @@
|
||||
HTTP 301 Moved Permanently
|
||||
Location: http://localhost:8888/tests/toolkit/components/places/tests/bug_411966/PermRedirectPage.htm
|
@ -1,9 +0,0 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<title>Bug 411966</title>
|
||||
</head>
|
||||
</body>
|
||||
Typed in page!
|
||||
</body>
|
||||
</html>
|
@ -1,183 +0,0 @@
|
||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim:set ts=2 sw=2 sts=2 et: */
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
var Ci = Components.interfaces;
|
||||
var Cc = Components.classes;
|
||||
var Cu = Components.utils;
|
||||
|
||||
var PlacesUtils = Cu.import("resource://gre/modules/PlacesUtils.jsm").PlacesUtils;
|
||||
|
||||
// Get Services.
|
||||
var histsvc = Cc["@mozilla.org/browser/nav-history-service;1"].
|
||||
getService(Ci.nsINavHistoryService);
|
||||
ok(histsvc != null, "Could not get History Service");
|
||||
var bhist = histsvc.QueryInterface(Ci.nsIBrowserHistory);
|
||||
ok(bhist != null, "Could not get Browser History Service");
|
||||
var ios = Cc["@mozilla.org/network/io-service;1"].
|
||||
getService(Components.interfaces.nsIIOService);
|
||||
ok(ios != null, "Could not get IO Service");
|
||||
var storage = Cc["@mozilla.org/storage/service;1"].
|
||||
getService(Ci.mozIStorageService);
|
||||
ok(storage != null, "Could not get Storage Service");
|
||||
|
||||
// Get database connection.
|
||||
var mDBConn = histsvc.QueryInterface(Ci.nsPIPlacesDatabase).DBConnection;
|
||||
ok(mDBConn != null, "Could not get Database Connection");
|
||||
|
||||
function uri(URIString) {
|
||||
return ios.newURI(URIString, null, null);
|
||||
}
|
||||
|
||||
var typedURI = uri("http://localhost:8888/tests/toolkit/components/places/tests/mochitest/bug_411966/TypedPage.htm");
|
||||
var clickedLinkURI = uri("http://localhost:8888/tests/toolkit/components/places/tests/mochitest/bug_411966/ClickedPage.htm");
|
||||
var temporaryRedirectURI = uri("http://localhost:8888/tests/toolkit/components/places/tests/mochitest/bug_411966/TempRedirectPage.htm");
|
||||
var permanentRedirectURI = uri("http://localhost:8888/tests/toolkit/components/places/tests/mochitest/bug_411966/PermRedirectPage.htm");
|
||||
|
||||
// Stream Listener
|
||||
function StreamListener(aChannel, aCallbackFunc) {
|
||||
this.mChannel = aChannel;
|
||||
this.mCallbackFunc = aCallbackFunc;
|
||||
}
|
||||
|
||||
StreamListener.prototype = {
|
||||
mData: "",
|
||||
mChannel: null,
|
||||
|
||||
// nsIStreamListener
|
||||
onStartRequest: function (aRequest, aContext) {
|
||||
this.mData = "";
|
||||
},
|
||||
|
||||
onDataAvailable: function (aRequest, aContext, aStream, aSourceOffset, aLength) {
|
||||
// We actually don't need received data
|
||||
var scriptableInputStream =
|
||||
Components.classes["@mozilla.org/scriptableinputstream;1"]
|
||||
.createInstance(Components.interfaces.nsIScriptableInputStream);
|
||||
scriptableInputStream.init(aStream);
|
||||
|
||||
this.mData += scriptableInputStream.read(aLength);
|
||||
},
|
||||
|
||||
onStopRequest: function (aRequest, aContext, aStatus) {
|
||||
if (Components.isSuccessCode(aStatus))
|
||||
this.mCallbackFunc(this.mData);
|
||||
else
|
||||
throw("Could not get page.");
|
||||
|
||||
this.mChannel = null;
|
||||
},
|
||||
|
||||
// nsIChannelEventSink
|
||||
asyncOnChannelRedirect: function (aOldChannel, aNewChannel, aFlags, callback) {
|
||||
// If redirecting, store the new channel
|
||||
this.mChannel = aNewChannel;
|
||||
callback.onRedirectVerifyCallback(Components.results.NS_OK);
|
||||
},
|
||||
|
||||
// nsIInterfaceRequestor
|
||||
getInterface: function (aIID) {
|
||||
try {
|
||||
return this.QueryInterface(aIID);
|
||||
} catch (e) {
|
||||
throw Components.results.NS_NOINTERFACE;
|
||||
}
|
||||
},
|
||||
|
||||
// nsIProgressEventSink (not implementing will cause annoying exceptions)
|
||||
onProgress : function (aRequest, aContext, aProgress, aProgressMax) { },
|
||||
onStatus : function (aRequest, aContext, aStatus, aStatusArg) { },
|
||||
|
||||
// nsIHttpEventSink (not implementing will cause annoying exceptions)
|
||||
onRedirect : function (aOldChannel, aNewChannel) { },
|
||||
|
||||
// we are faking an XPCOM interface, so we need to implement QI
|
||||
QueryInterface : function(aIID) {
|
||||
if (aIID.equals(Components.interfaces.nsISupports) ||
|
||||
aIID.equals(Components.interfaces.nsIInterfaceRequestor) ||
|
||||
aIID.equals(Components.interfaces.nsIChannelEventSink) ||
|
||||
aIID.equals(Components.interfaces.nsIProgressEventSink) ||
|
||||
aIID.equals(Components.interfaces.nsIHttpEventSink) ||
|
||||
aIID.equals(Components.interfaces.nsIStreamListener))
|
||||
return this;
|
||||
|
||||
throw Components.results.NS_NOINTERFACE;
|
||||
}
|
||||
};
|
||||
|
||||
// Check Callback.
|
||||
function checkDB(data){
|
||||
var referrer = this.mChannel.QueryInterface(Ci.nsIHttpChannel).referrer;
|
||||
|
||||
addVisits(
|
||||
{uri: this.mChannel.URI,
|
||||
transition: Ci.nsINavHistoryService.TRANSITION_REDIRECT_PERMANENT,
|
||||
referrer: referrer},
|
||||
function() {
|
||||
// Get all pages visited from the original typed one
|
||||
var sql = `SELECT url FROM moz_historyvisits
|
||||
JOIN moz_places h ON h.id = place_id
|
||||
WHERE from_visit IN
|
||||
(SELECT v.id FROM moz_historyvisits v
|
||||
JOIN moz_places p ON p.id = v.place_id
|
||||
WHERE p.url = ?1)`;
|
||||
var stmt = mDBConn.createStatement(sql);
|
||||
stmt.bindByIndex(0, typedURI.spec);
|
||||
|
||||
var empty = true;
|
||||
while (stmt.executeStep()) {
|
||||
empty = false;
|
||||
var visitedURI = stmt.getUTF8String(0);
|
||||
// Check that redirect from_visit is not from the original typed one
|
||||
ok(visitedURI == clickedLinkURI.spec, "Got wrong referrer for " + visitedURI);
|
||||
}
|
||||
// Ensure that we got some result
|
||||
ok(!empty, "empty table");
|
||||
|
||||
SimpleTest.finish();
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
// Asynchronously adds visits to a page, invoking a callback function when done.
|
||||
function addVisits(aPlaceInfo, aCallback) {
|
||||
var places = [];
|
||||
if (aPlaceInfo instanceof Ci.nsIURI) {
|
||||
places.push({ uri: aPlaceInfo });
|
||||
} else if (Array.isArray(aPlaceInfo)) {
|
||||
places = places.concat(aPlaceInfo);
|
||||
} else {
|
||||
places.push(aPlaceInfo);
|
||||
}
|
||||
|
||||
// Create mozIVisitInfo for each entry.
|
||||
var now = Date.now();
|
||||
for (var i = 0; i < places.length; i++) {
|
||||
if (!places[i].title) {
|
||||
places[i].title = "test visit for " + places[i].uri.spec;
|
||||
}
|
||||
places[i].visits = [{
|
||||
transitionType: places[i].transition === undefined ? Ci.nsINavHistoryService.TRANSITION_LINK
|
||||
: places[i].transition,
|
||||
visitDate: places[i].visitDate || (now++) * 1000,
|
||||
referrerURI: places[i].referrer
|
||||
}];
|
||||
}
|
||||
|
||||
PlacesUtils.asyncHistory.updatePlaces(
|
||||
places,
|
||||
{
|
||||
handleError: function AAV_handleError() {
|
||||
throw("Unexpected error in adding visit.");
|
||||
},
|
||||
handleResult: function () {},
|
||||
handleCompletion: function UP_handleCompletion() {
|
||||
if (aCallback)
|
||||
aCallback();
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
@ -67,16 +67,6 @@ TEST_HARNESS_FILES.testing.mochitest.tests.toolkit.components.places.tests += [
|
||||
'bug94514-postpage.html',
|
||||
]
|
||||
|
||||
TEST_HARNESS_FILES.testing.mochitest.tests.toolkit.components.places.tests.mochitest.bug_411966 += [
|
||||
'mochitest/bug_411966/ClickedPage.htm',
|
||||
'mochitest/bug_411966/ClickedPage.htm^headers^',
|
||||
'mochitest/bug_411966/PermRedirectPage.htm',
|
||||
'mochitest/bug_411966/redirect.js',
|
||||
'mochitest/bug_411966/TempRedirectPage.htm',
|
||||
'mochitest/bug_411966/TempRedirectPage.htm^headers^',
|
||||
'mochitest/bug_411966/TypedPage.htm',
|
||||
]
|
||||
|
||||
TEST_HARNESS_FILES.testing.mochitest.tests.toolkit.components.places.tests.mochitest.bug_461710 += [
|
||||
'mochitest/bug_461710/iframe.html',
|
||||
'mochitest/bug_461710/link_page-2.html',
|
||||
|
@ -1,43 +0,0 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=411966
|
||||
-->
|
||||
<head>
|
||||
<title>Test for Bug 411966</title>
|
||||
<script type="text/javascript" src="http://mochi.test:8888/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<script type="text/javascript" src="http://mochi.test:8888/tests/toolkit/components/places/tests/mochitest/bug_411966/redirect.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="http://mochi.test:8888/tests/SimpleTest/test.css" />
|
||||
</head>
|
||||
<body>
|
||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=411966">
|
||||
Mozilla Bug 411966</a>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none">
|
||||
<iframe id="iframe"></iframe>
|
||||
</div>
|
||||
<pre id="test">
|
||||
<script class="testbody" type="text/javascript">
|
||||
|
||||
Cu.import("resource://gre/modules/NetUtil.jsm");
|
||||
|
||||
/** Test for Bug 411966 **/
|
||||
addVisits(typedURI, function() {
|
||||
histsvc.markPageAsTyped(typedURI);
|
||||
|
||||
var clickedLinkChannel = NetUtil.newChannel({
|
||||
uri: clickedLinkURI,
|
||||
loadUsingSystemPrincipal: true
|
||||
});
|
||||
clickedLinkChannel.QueryInterface(Ci.nsIHttpChannel).referrer = typedURI;
|
||||
var listener = new StreamListener(clickedLinkChannel, checkDB);
|
||||
clickedLinkChannel.notificationCallbacks = listener;
|
||||
clickedLinkChannel.asyncOpen2(listener);
|
||||
});
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in New Issue
Block a user