forked from mirrors/gecko-dev
99 lines
2.7 KiB
JavaScript
99 lines
2.7 KiB
JavaScript
/* 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/. */
|
|
|
|
// This file is loaded into the browser window scope.
|
|
/* eslint-env mozilla/browser-window */
|
|
|
|
XPCOMUtils.defineLazyServiceGetter(
|
|
this,
|
|
"ProfileService",
|
|
"@mozilla.org/toolkit/profile-service;1",
|
|
"nsIToolkitProfileService"
|
|
);
|
|
|
|
var gProfiles = {
|
|
init() {
|
|
XPCOMUtils.defineLazyPreferenceGetter(
|
|
this,
|
|
"PROFILES_ENABLED",
|
|
"browser.profiles.enabled",
|
|
false,
|
|
this.toggleProfileButtonsVisibility.bind(this)
|
|
);
|
|
|
|
if (!this.PROFILES_ENABLED) {
|
|
return;
|
|
}
|
|
|
|
this.toggleProfileButtonsVisibility();
|
|
},
|
|
|
|
toggleProfileButtonsVisibility() {
|
|
let profilesButton = PanelMultiView.getViewNode(
|
|
document,
|
|
"appMenu-profiles-button"
|
|
);
|
|
|
|
profilesButton.hidden = !this.PROFILES_ENABLED;
|
|
|
|
if (this.PROFILES_ENABLED) {
|
|
document.l10n.setArgs(profilesButton, {
|
|
profilename: ProfileService.currentProfile?.name ?? "",
|
|
});
|
|
}
|
|
},
|
|
|
|
updateView(panel) {
|
|
this.populateSubView();
|
|
PanelUI.showSubView("PanelUI-profiles", panel);
|
|
},
|
|
|
|
async populateSubView() {
|
|
let closeProfileButton = PanelMultiView.getViewNode(
|
|
document,
|
|
"profiles-close-profile-button"
|
|
);
|
|
document.l10n.setArgs(closeProfileButton, {
|
|
profilename: ProfileService.currentProfile?.name ?? "",
|
|
});
|
|
|
|
let profileIconEl = PanelMultiView.getViewNode(
|
|
document,
|
|
"profile-icon-image"
|
|
);
|
|
profileIconEl.style.listStyleImage = `url(${
|
|
ProfileService.currentProfile?.iconURL ??
|
|
"chrome://branding/content/icon64.png"
|
|
})`;
|
|
|
|
let profileNameEl = PanelMultiView.getViewNode(document, "profile-name");
|
|
profileNameEl.textContent = ProfileService.currentProfile?.name ?? "";
|
|
|
|
let profilesList = PanelMultiView.getViewNode(
|
|
document,
|
|
"PanelUI-profiles"
|
|
).querySelector("#profiles-list");
|
|
while (profilesList.lastElementChild) {
|
|
profilesList.lastElementChild.remove();
|
|
}
|
|
|
|
for (let profile of ProfileService.profiles) {
|
|
if (profile === ProfileService.currentProfile) {
|
|
continue;
|
|
}
|
|
|
|
let button = document.createXULElement("toolbarbutton");
|
|
button.setAttribute("label", profile.name);
|
|
button.className = "subviewbutton subviewbutton-iconic";
|
|
button.style.listStyleImage = `url(${
|
|
profile.iconURL ?? "chrome://branding/content/icon16.png"
|
|
})`;
|
|
button.onclick = () => {
|
|
Services.startup.createInstanceWithProfile(profile);
|
|
};
|
|
|
|
profilesList.appendChild(button);
|
|
}
|
|
},
|
|
};
|