Skip to content

Commit cb6f18a

Browse files
committed
Fix broken NoScript dialogs when browser.privatebrowsing.autostart = true (issue#259, thanks foenix for reporting).
1 parent c94a80b commit cb6f18a

3 files changed

Lines changed: 23 additions & 6 deletions

File tree

src/ui/Prompts.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,16 @@ var Prompts = (() => {
2323
var promptData;
2424
var backlog = [];
2525

26+
Messages.addHandler({
27+
getPromptData() { return Prompts.promptData },
28+
promptDone(data) {
29+
let promptData = promptDataMap.get(data.id);
30+
if (promptData) {
31+
Object.assign(promptData, data).done();
32+
}
33+
}
34+
});
35+
2636
class WindowManager {
2737
async open(data) {
2838
promptData = data;
@@ -82,6 +92,8 @@ var Prompts = (() => {
8292
}
8393

8494
var winMan = new WindowManager();
95+
var id = 0;
96+
var promptDataMap = new Map();
8597
var Prompts = {
8698
DEFAULTS: {
8799
title: "",
@@ -97,14 +109,17 @@ var Prompts = (() => {
97109
async prompt(features) {
98110
features = Object.assign({}, this.DEFAULTS, features || {});
99111
return new Promise((resolve, reject) => {
112+
++id;
100113
let data = {
114+
id,
101115
features,
102116
result: {
103117
button: -1,
104118
checks: [],
105119
option: null,
106120
},
107121
done() {
122+
promptDataMap.delete(this.id);
108123
this.done = () => {};
109124
winMan.close();
110125
resolve(this.result);
@@ -116,6 +131,7 @@ var Prompts = (() => {
116131
}
117132
}
118133
};
134+
promptDataMap.set(id, data);
119135
if (promptData) {
120136
backlog.push(data);
121137
switch(promptData.features.multiple) {

src/ui/prompt.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
<script src="/nscl/common/include.js"></script>
1717
<script src="/nscl/common/log.js"></script>
1818
<script src="/nscl/common/locale.js"></script>
19+
<script src="/nscl/common/Messages.js"></script>
1920
<script src="/ui/resize_hack.js"></script>
2021
<script src="/common/themes.js"></script>
2122
</head>

src/ui/prompt.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,16 @@
2020

2121
(async () => {
2222
document.documentElement.classList.toggle("mobile", !!UA.mobile);
23-
window.bg = await browser.runtime.getBackgroundPage();
24-
["Prompts"]
25-
.forEach(p => window[p] = bg[p]);
26-
let data = Prompts.promptData;
23+
let data = await Messages.send("getPromptData");
2724
debug(data);
2825
if (!data) {
2926
error("Missing promptData");
3027
window.close();
3128
return;
3229
}
30+
let done = () => {
31+
Messages.send("promptDone", data);
32+
}
3333
let {title, message, options, checks, buttons} = data.features;
3434

3535
function labelFor(el, text) {
@@ -99,7 +99,7 @@
9999
renderInputs("#checks", checks, "checkbox", "flag");
100100
renderInputs("#buttons", buttons, "button", "button");
101101
addEventListener("unload", e => {
102-
data.done();
102+
done();
103103
});
104104

105105
let buttonClicked = e => {
@@ -109,7 +109,7 @@
109109
result.option = option && parseInt(option.value);
110110
result.checks = [...document.querySelectorAll('#checks [type="checkbox"]:checked')]
111111
.map(c => parseInt(c.value));
112-
data.done();
112+
done();
113113
};
114114
for (let b of document.querySelectorAll("#buttons button")) {
115115
b.addEventListener("click", buttonClicked);

0 commit comments

Comments
 (0)