1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
const kRed = "rgb(255, 0, 0)";
const kBlue = "rgb(0, 0, 255)";
const prefix =
"http://example.com/tests/toolkit/components/places/tests/browser/461710_";
add_task(async function() {
registerCleanupFunction(PlacesUtils.history.clear);
let normalWindow = await BrowserTestUtils.openNewBrowserWindow();
let privateWindow = await BrowserTestUtils.openNewBrowserWindow({
private: true,
});
let tests = [
{
private: false,
topic: "uri-visit-saved",
subtest: "visited_page.html",
},
{
private: false,
subtest: "link_page.html",
color: kRed,
message: "Visited link coloring should work outside of private mode",
},
{
private: true,
subtest: "link_page-2.html",
color: kBlue,
message: "Visited link coloring should not work inside of private mode",
},
{
private: false,
subtest: "link_page-3.html",
color: kRed,
message: "Visited link coloring should work outside of private mode",
},
];
let uri = Services.io.newURI(prefix + tests[0].subtest);
for (let test of tests) {
info(test.subtest);
let promise = null;
if (test.topic) {
promise = TestUtils.topicObserved(test.topic, subject =>
uri.equals(subject.QueryInterface(Ci.nsIURI))
);
}
await BrowserTestUtils.withNewTab(
{
gBrowser: test.private ? privateWindow.gBrowser : normalWindow.gBrowser,
url: prefix + test.subtest,
},
async function(browser) {
if (promise) {
await promise;
}
if (test.color) {
// In e10s waiting for visited-status-resolution is not enough to ensure links
// have been updated, because it only tells us that messages to update links
// have been dispatched. We must still wait for the actual links to update.
await TestUtils.waitForCondition(async function() {
let color = await SpecialPowers.spawn(
browser,
[],
async function() {
let elem = content.document.getElementById("link");
return content.windowUtils.getVisitedDependentComputedStyle(
elem,
"",
"color"
);
}
);
return color == test.color;
}, test.message);
// The harness will consider the test as failed overall if there were no
// passes or failures, so record it as a pass.
ok(true, test.message);
}
}
);
}
let promisePBExit = TestUtils.topicObserved("last-pb-context-exited");
await BrowserTestUtils.closeWindow(privateWindow);
await promisePBExit;
await BrowserTestUtils.closeWindow(normalWindow);
});
|