mirror of
https://github.com/zen-browser/desktop.git
synced 2026-01-05 12:57:51 +00:00
test: Added tests for folders opening from owner tabs, b=no-bug, c=folders, tests, tabs
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/components/tabbrowser/content/tabbrowser.js b/browser/components/tabbrowser/content/tabbrowser.js
|
||||
index d80a66a01002e78a9c65545d08fe786328ddf124..50ff735a4621110ff3691186139cabf76482a941 100644
|
||||
index d80a66a01002e78a9c65545d08fe786328ddf124..a25073f3a700e4d6765a9ba92eddbc0bf4bfa444 100644
|
||||
--- a/browser/components/tabbrowser/content/tabbrowser.js
|
||||
+++ b/browser/components/tabbrowser/content/tabbrowser.js
|
||||
@@ -422,15 +422,60 @@
|
||||
@@ -249,17 +249,14 @@ index d80a66a01002e78a9c65545d08fe786328ddf124..50ff735a4621110ff3691186139cabf7
|
||||
if (insertTab) {
|
||||
// Insert the tab into the tab container in the correct position.
|
||||
this.#insertTabAtIndex(t, {
|
||||
@@ -2790,8 +2874,9 @@
|
||||
@@ -2790,6 +2874,7 @@
|
||||
ownerTab,
|
||||
openerTab,
|
||||
pinned,
|
||||
+ essential,
|
||||
bulkOrderedOpen,
|
||||
- tabGroup: tabGroup ?? openerTab?.group,
|
||||
+ tabGroup: tabGroup,
|
||||
tabGroup: tabGroup ?? openerTab?.group,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -2808,6 +2893,7 @@
|
||||
openWindowInfo,
|
||||
skipLoad,
|
||||
@@ -394,10 +391,10 @@ index d80a66a01002e78a9c65545d08fe786328ddf124..50ff735a4621110ff3691186139cabf7
|
||||
+ gZenWorkspaces._initialTab._shouldRemove = true;
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
+ }
|
||||
+ else {
|
||||
+ gZenWorkspaces._tabToRemoveForEmpty = this.selectedTab;
|
||||
+ }
|
||||
}
|
||||
+ this._hasAlreadyInitializedZenSessionStore = true;
|
||||
|
||||
if (tabs.length > 1 || !tabs[0].selected) {
|
||||
|
||||
@@ -166,6 +166,7 @@
|
||||
window.addEventListener('TabGroupCollapse', this.#onTabGroupCollapse.bind(this));
|
||||
window.addEventListener('FolderGrouped', this.#onFolderGrouped.bind(this));
|
||||
window.addEventListener('TabSelect', this.#onTabSelected.bind(this));
|
||||
window.addEventListener('TabOpen', this.#onTabOpened.bind(this));
|
||||
document
|
||||
.getElementById('zen-context-menu-new-folder')
|
||||
.addEventListener('command', this.#onNewFolder.bind(this));
|
||||
@@ -210,6 +211,17 @@
|
||||
gBrowser.tabContainer._invalidateCachedTabs();
|
||||
}
|
||||
|
||||
#onTabOpened(event) {
|
||||
const tab = event.target;
|
||||
const group = tab.group;
|
||||
if (!group?.isZenFolder || tab.pinned) return;
|
||||
// Edge case: In occations where we add a tab with an ownerTab
|
||||
// inside a folder, the tab gets added into the folder in an
|
||||
// unpinned state. We need to pin it and re-add it into the folder.
|
||||
gBrowser.pinTab(tab);
|
||||
group.addTabs([tab]);
|
||||
}
|
||||
|
||||
#onTabUngrouped(event) {
|
||||
const tab = event.detail;
|
||||
const group = event.target;
|
||||
|
||||
@@ -2,8 +2,14 @@
|
||||
# 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/.
|
||||
|
||||
[DEFAULT]
|
||||
support-files = [
|
||||
"head.js",
|
||||
]
|
||||
|
||||
["browser_folder_create.js"]
|
||||
["browser_folder_subfolder.js"]
|
||||
["browser_folder_basic_toggle.js"]
|
||||
["browser_folder_owner_tabs.js"]
|
||||
|
||||
["browser_folder_issue_9885.js"]
|
||||
|
||||
@@ -17,7 +17,5 @@ add_task(async function test_Basic_Toggle() {
|
||||
folder.labelElement.click();
|
||||
ok(!folder.collapsed, 'Folder should be expanded after clicking on it again');
|
||||
|
||||
const removeEvent = BrowserTestUtils.waitForEvent(folder, 'TabGroupRemoved');
|
||||
folder.delete();
|
||||
await removeEvent;
|
||||
await removeFolder(folder);
|
||||
});
|
||||
|
||||
@@ -18,9 +18,7 @@ add_task(async function test_Create_Folder() {
|
||||
ok(tab.pinned, 'Tab is pinned after folder creation');
|
||||
Assert.equal(folder.label, 'test', 'Folder label is set correctly');
|
||||
ok(!folder.collapsed, 'Folder is expanded after creation');
|
||||
const removeEvent = BrowserTestUtils.waitForEvent(window, 'TabGroupRemoved');
|
||||
folder.delete();
|
||||
await removeEvent;
|
||||
await removeFolder(folder);
|
||||
Assert.equal(folder.tabs.length, 0, 'Folder is empty after deletion');
|
||||
ok(!folder.parentElement, 'Folder is removed from the DOM');
|
||||
ok(tab.closing, 'Tab is closing after folder deletion');
|
||||
|
||||
@@ -23,7 +23,6 @@ add_task(async function test_Issue_9885() {
|
||||
ok(subfolder.collapsed, 'Subfolder should be collapsed after clicking on it');
|
||||
ok(!parent.collapsed, 'Parent folder should be collapsed after clicking on subfolder');
|
||||
|
||||
const removeEvent = BrowserTestUtils.waitForEvent(parent, 'TabGroupRemoved');
|
||||
parent.delete();
|
||||
await removeEvent;
|
||||
await removeFolder(subfolder);
|
||||
await removeFolder(parent);
|
||||
});
|
||||
|
||||
38
src/zen/tests/folders/browser_folder_owner_tabs.js
Normal file
38
src/zen/tests/folders/browser_folder_owner_tabs.js
Normal file
@@ -0,0 +1,38 @@
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
https://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
'use strict';
|
||||
|
||||
add_task(async function test_Duplicate_Tab_Inside_Folder() {
|
||||
const selectedTab = gBrowser.selectedTab;
|
||||
const tab = BrowserTestUtils.addTab(gBrowser, 'about:blank');
|
||||
const folder = await gZenFolders.createFolder([tab], {
|
||||
renameFolder: false,
|
||||
});
|
||||
gBrowser.selectedTab = tab;
|
||||
const triggeringPrincipal = Services.scriptSecurityManager.getSystemPrincipal();
|
||||
gBrowser.addTab('https://example.com', {
|
||||
tabIndex: undefined,
|
||||
relatedToCurrent: true,
|
||||
ownerTab: tab,
|
||||
triggeringPrincipal,
|
||||
});
|
||||
|
||||
Assert.equal(
|
||||
folder.tabs.length,
|
||||
3,
|
||||
'Folder contains the original tab and the two duplicated tabs'
|
||||
);
|
||||
|
||||
await new Promise((resolve) => setTimeout(resolve, 100));
|
||||
|
||||
for (const t of folder.tabs) {
|
||||
ok(t.pinned, 'All tabs in the folder should be pinned');
|
||||
if (!t.hasAttribute('zen-empty-tab')) {
|
||||
ok(t.hasAttribute('zen-pin-id'), 'All non-empty tabs should have a zen-pinned-id attribute');
|
||||
}
|
||||
}
|
||||
|
||||
gBrowser.selectedTab = selectedTab;
|
||||
await removeFolder(folder);
|
||||
});
|
||||
@@ -23,7 +23,6 @@ add_task(async function test_Create_Folder() {
|
||||
'Subfolder contains the tab and the empty tab created by Zen Folders'
|
||||
);
|
||||
Assert.equal(parent.tabs.length, 4, 'Parent folder contains the subfolder');
|
||||
const removeEvent = BrowserTestUtils.waitForEvent(window, 'TabGroupRemoved');
|
||||
parent.delete();
|
||||
await removeEvent;
|
||||
await removeFolder(subfolder);
|
||||
await removeFolder(parent);
|
||||
});
|
||||
|
||||
11
src/zen/tests/folders/head.js
Normal file
11
src/zen/tests/folders/head.js
Normal file
@@ -0,0 +1,11 @@
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
https://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
'use strict';
|
||||
|
||||
async function removeFolder(folder) {
|
||||
if (!folder) return;
|
||||
const removeEvent = BrowserTestUtils.waitForEvent(folder, 'TabGroupRemoved');
|
||||
folder.delete();
|
||||
await removeEvent;
|
||||
}
|
||||
Reference in New Issue
Block a user