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
105
106
107
108
|
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
requestLongerTimeout(5);
var {Toolbox} = require("devtools/client/framework/toolbox");
function test() {
const URL_1 = "data:text/plain;charset=UTF-8,abcde";
const URL_2 = "data:text/plain;charset=UTF-8,12345";
const URL_3 = URL_ROOT + "browser_toolbox_window_title_changes_page.html";
const TOOL_ID_1 = "webconsole";
const TOOL_ID_2 = "jsdebugger";
const NAME_1 = "";
const NAME_2 = "";
const NAME_3 = "Toolbox test for title update";
let toolbox;
addTab(URL_1).then(function () {
let target = TargetFactory.forTab(gBrowser.selectedTab);
gDevTools.showToolbox(target, null, Toolbox.HostType.BOTTOM)
.then(function (aToolbox) { toolbox = aToolbox; })
.then(() => toolbox.selectTool(TOOL_ID_1))
// undock toolbox and check title
.then(() => {
// We have to first switch the host in order to spawn the new top level window
// on which we are going to listen from title change event
return toolbox.switchHost(Toolbox.HostType.WINDOW)
.then(() => waitForTitleChange(toolbox));
})
.then(checkTitle.bind(null, NAME_1, URL_1, "toolbox undocked"))
// switch to different tool and check title
.then(() => {
let onTitleChanged = waitForTitleChange(toolbox);
toolbox.selectTool(TOOL_ID_2);
return onTitleChanged;
})
.then(checkTitle.bind(null, NAME_1, URL_1, "tool changed"))
// navigate to different local url and check title
.then(function () {
let onTitleChanged = waitForTitleChange(toolbox);
gBrowser.loadURI(URL_2);
return onTitleChanged;
})
.then(checkTitle.bind(null, NAME_2, URL_2, "url changed"))
// navigate to a real url and check title
.then(() => {
let onTitleChanged = waitForTitleChange(toolbox);
gBrowser.loadURI(URL_3);
return onTitleChanged;
})
.then(checkTitle.bind(null, NAME_3, URL_3, "url changed"))
// destroy toolbox, create new one hosted in a window (with a
// different tool id), and check title
.then(function () {
// Give the tools a chance to handle the navigation event before
// destroying the toolbox.
executeSoon(function () {
toolbox.destroy()
.then(function () {
// After destroying the toolbox, a fresh target is required.
target = TargetFactory.forTab(gBrowser.selectedTab);
return gDevTools.showToolbox(target, null, Toolbox.HostType.WINDOW);
})
.then(function (aToolbox) { toolbox = aToolbox; })
.then(() => {
let onTitleChanged = waitForTitleChange(toolbox);
toolbox.selectTool(TOOL_ID_1);
return onTitleChanged;
})
.then(checkTitle.bind(null, NAME_3, URL_3,
"toolbox destroyed and recreated"))
// clean up
.then(() => toolbox.destroy())
.then(function () {
toolbox = null;
gBrowser.removeCurrentTab();
Services.prefs.clearUserPref("devtools.toolbox.host");
Services.prefs.clearUserPref("devtools.toolbox.selectedTool");
Services.prefs.clearUserPref("devtools.toolbox.sideEnabled");
finish();
});
});
});
});
}
function checkTitle(name, url, context) {
let win = Services.wm.getMostRecentWindow("devtools:toolbox");
let expectedTitle;
if (name) {
expectedTitle = `Developer Tools - ${name} - ${url}`;
} else {
expectedTitle = `Developer Tools - ${url}`;
}
is(win.document.title, expectedTitle, context);
}
|