blob: 2e7e6227cab9178877c517dd71f7f1c162b58805 (
plain)
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
|
/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- */
/* 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/. */
"use strict";
const { SiteDataManager } = ChromeUtils.import(
"resource:///modules/SiteDataManager.jsm"
);
/**
* This dialog will ask the user to confirm that they really want to delete
* all site data for a number of hosts. Displaying the hosts can be done in
* two different ways by passing options in the arguments object.
*
* - Passing a "baseDomain" will cause the dialog to search for all applicable
* host names with that baseDomain using the SiteDataManager and populate the list
* asynchronously. As a side effect, the SiteDataManager will update. Thus it is
* safe to call SiteDataManager methods that require a manual updateSites call
* after spawning this dialog. However, you need to ensure that the SiteDataManager
* has finished updating.
*
* - Passing a "hosts" array allows you to manually specify the hosts to be displayed.
* The SiteDataManager will not be updated by spawning this dialog in that case.
*
* The two options are mutually exclusive. You must specify one.
**/
let gSiteDataRemoveSelected = {
init() {
document.addEventListener("dialogaccept", function() {
window.arguments[0].allowed = true;
});
document.addEventListener("dialogcancel", function() {
window.arguments[0].allowed = false;
});
let list = document.getElementById("removalList");
let baseDomain = window.arguments[0].baseDomain;
if (baseDomain) {
let hosts = new Set();
SiteDataManager.updateSites((host, site) => {
// Disregard local files.
if (!host) {
return;
}
if (site.baseDomain != baseDomain) {
return;
}
// Avoid listing duplicate hosts.
if (hosts.has(host)) {
return;
}
hosts.add(host);
let listItem = document.createXULElement("richlistitem");
let label = document.createXULElement("label");
label.setAttribute("value", host);
listItem.appendChild(label);
list.appendChild(listItem);
});
return;
}
let hosts = window.arguments[0].hosts;
if (hosts) {
hosts.sort();
let fragment = document.createDocumentFragment();
for (let host of hosts) {
let listItem = document.createXULElement("richlistitem");
let label = document.createXULElement("label");
if (host) {
label.setAttribute("value", host);
} else {
document.l10n.setAttributes(label, "site-data-local-file-host");
}
listItem.appendChild(label);
fragment.appendChild(listItem);
}
list.appendChild(fragment);
return;
}
throw new Error(
"Must specify either a hosts or baseDomain option in arguments."
);
},
};
|