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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/
*/
ignoreAllUncaughtExceptions();
add_task(async function () {
info("Check POST search engine support");
await SpecialPowers.pushPrefEnv({
set: [
[
"browser.newtabpage.activity-stream.improvesearch.handoffToAwesomebar",
false,
],
],
});
let currEngine = await Services.search.getDefault();
await BrowserTestUtils.withNewTab(
{ gBrowser, url: "about:home" },
async browser => {
let observerPromise = new Promise(resolve => {
let searchObserver = async function search_observer(
subject,
topic,
data
) {
let engine = subject.QueryInterface(Ci.nsISearchEngine);
info("Observer: " + data + " for " + engine.name);
if (data != "engine-added") {
return;
}
if (engine.name != "POST Search") {
return;
}
Services.obs.removeObserver(
searchObserver,
"browser-search-engine-modified"
);
resolve(engine);
};
Services.obs.addObserver(
searchObserver,
"browser-search-engine-modified"
);
});
let engine;
await promiseContentSearchChange(browser, async () => {
Services.search.addOpenSearchEngine(
// eslint-disable-next-line @microsoft/sdl/no-insecure-url
"http://test:80/browser/browser/base/content/test/about/POSTSearchEngine.xml",
null
);
engine = await observerPromise;
Services.search.setDefault(
engine,
Ci.nsISearchService.CHANGE_REASON_UNKNOWN
);
return engine.name;
});
// Ready to execute the tests!
let needle = "Search for something awesome.";
let promise = BrowserTestUtils.browserLoaded(browser);
await SpecialPowers.spawn(browser, [{ needle }], async function (args) {
let doc = content.document;
let el = doc.querySelector(["#searchText", "#newtab-search-text"]);
el.value = args.needle;
doc.getElementById("searchSubmit").click();
});
await promise;
// When the search results load, check them for correctness.
await SpecialPowers.spawn(browser, [{ needle }], async function (args) {
let loadedText = content.document.body.textContent;
ok(loadedText, "search page loaded");
is(
loadedText,
"searchterms=" + escape(args.needle.replace(/\s/g, "+")),
"Search text should arrive correctly"
);
});
await Services.search.setDefault(
currEngine,
Ci.nsISearchService.CHANGE_REASON_UNKNOWN
);
try {
await Services.search.removeEngine(engine);
} catch (ex) {}
}
);
await SpecialPowers.popPrefEnv();
});
|