Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions src/browser/components/preferences/sync-js.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
diff --git a/browser/components/preferences/sync.js b/browser/components/preferences/sync.js
index dc89a9c41a0dbd44054ede0025d333773f0ae908..7fd91bd704b3b187277e4c8b076f990cb56ea8dc 100644
--- a/browser/components/preferences/sync.js
+++ b/browser/components/preferences/sync.js
@@ -40,6 +40,7 @@ Preferences.addAll([
{ id: "services.sync.engine.creditcards", type: "bool" },
{ id: "services.sync.engine.addons", type: "bool" },
{ id: "services.sync.engine.prefs", type: "bool" },
+ { id: "services.sync.engine.workspaces", type: "bool" },
]);

/**
@@ -512,6 +513,7 @@ const SYNC_ENGINE_SETTINGS = [
},
{ id: "syncAddons", pref: "services.sync.engine.addons", type: "addons" },
{ id: "syncSettings", pref: "services.sync.engine.prefs", type: "settings" },
+ { id: "syncWorkspaces", pref: "services.sync.engine.workspaces", type: "workspaces" },
];

SYNC_ENGINE_SETTINGS.forEach(({ id, pref }) => {
15 changes: 15 additions & 0 deletions src/services/sync/modules/service-sys-mjs.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
diff --git a/services/sync/modules/service.sys.mjs b/services/sync/modules/service.sys.mjs
index c873293871ffaba305bc1bf41730d79c13546b85..0e0171cec13dfcbb296ec7bf03628370ce2fa93f 100644
--- a/services/sync/modules/service.sys.mjs
+++ b/services/sync/modules/service.sys.mjs
@@ -99,6 +99,10 @@ function getEngineModules() {
whenTrue: "ExtensionStorageEngineKinto",
whenFalse: "ExtensionStorageEngineBridge",
};
+ result.Workspaces = {
+ module: "resource:///modules/zen/ZenWorkspacesSync.sys.mjs",
+ symbol: "ZenWorkspacesEngine",
+ };
return result;
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
diff --git a/toolkit/components/contextualidentity/ContextualIdentityService.sys.mjs b/toolkit/components/contextualidentity/ContextualIdentityService.sys.mjs
index 5702ff28cc22206f5ce16584dac8a78d816562ce..2132ee9ad8f553b3effeb7c4386e5fae46b80507 100644
--- a/toolkit/components/contextualidentity/ContextualIdentityService.sys.mjs
+++ b/toolkit/components/contextualidentity/ContextualIdentityService.sys.mjs
@@ -270,11 +270,11 @@ _ContextualIdentityService.prototype = {
});
},

- create(name, icon, color) {
+ create(name, icon, color, id = null) {
this.ensureDataReady();

- // Retrieve the next userContextId available.
- let userContextId = ++this._lastUserContextId;
+ // If explicit ID is provided, use it if it's not already in use, otherwise use the next available ID.
+ let userContextId = id !== null && !this._identities.some(i => i.userContextId === id) ? id : ++this._lastUserContextId;

// Throw an error if the next userContextId available is invalid (the one associated to
// MAX_USER_CONTEXT_ID is already reserved to "userContextIdInternal.webextStorageLocal", which
7 changes: 7 additions & 0 deletions src/zen/folders/ZenFolder.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,13 @@ export class nsZenFolder extends MozTabbrowserTabGroup {
}

async delete() {
if (this.id) {
Services.obs.notifyObservers(
null,
"zen-workspace-item-changed",
`f~${this.id}`
);
}
for (const tab of this.allItemsRecursive) {
if (tab.hasAttribute("zen-empty-tab")) {
// Manually remove the empty tabs as removeTabs() inside removeTabGroup
Expand Down
47 changes: 38 additions & 9 deletions src/zen/folders/ZenFolders.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,14 @@ class nsZenFolders extends nsZenDOMOperatedFeature {
if (groupIsCollapsiblePins(group)) {
return;
}
// Mark tab as modified for sync when its folder membership changes.
if (tab.id && group?.isZenFolder) {
Services.obs.notifyObservers(
null,
"zen-workspace-item-changed",
`t~${tab.id}`
);
}
group.pinned = tab.pinned;
const isActiveFolder = group?.activeGroups?.length > 0;

Expand Down Expand Up @@ -329,6 +337,14 @@ class nsZenFolders extends nsZenDOMOperatedFeature {
async on_TabUngrouped(event) {
const tab = event.detail;
const group = event.target;
// Mark tab as modified for sync when its folder membership changes.
if (tab.id && group?.isZenFolder) {
Services.obs.notifyObservers(
null,
"zen-workspace-item-changed",
`t~${tab.id}`
);
}
if (
group.hasAttribute("split-view-group") &&
tab.hasAttribute("had-zen-pinned-changed")
Expand Down Expand Up @@ -558,16 +574,22 @@ class nsZenFolders extends nsZenDOMOperatedFeature {
const insertBefore =
options.insertBefore ||
pinnedContainer.querySelector(".pinned-tabs-container-separator");
const emptyTab = gBrowser.addTab("about:blank", {
skipAnimation: true,
pinned: true,
triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal(),
_forZenEmptyTab: true,
createLazyBrowser: true,
});

gBrowser.pinTab(emptyTab);
tabs = [emptyTab, ...filteredTabs];
if (!options.skipEmptyTab) {
const emptyTab = gBrowser.addTab("about:blank", {
skipAnimation: true,
pinned: true,
triggeringPrincipal:
Services.scriptSecurityManager.getSystemPrincipal(),
_forZenEmptyTab: true,
createLazyBrowser: true,
});

gBrowser.pinTab(emptyTab);
tabs = [emptyTab, ...filteredTabs];
} else {
tabs = filteredTabs;
}

const folder = this._createFolderNode(options);

Expand Down Expand Up @@ -597,6 +619,13 @@ class nsZenFolders extends nsZenDOMOperatedFeature {
}

this.#groupInit(folder);
if (folder.id) {
Services.obs.notifyObservers(
null,
"zen-workspace-item-changed",
`f~${folder.id}`
);
}
return folder;
}

Expand Down
Loading