Compare commits

...

75 Commits

Author SHA1 Message Date
mr. m
fb2a859082 gh-14651: Change event listeners to not be inlined (gh-14700) 2026-07-24 19:36:10 +02:00
mr. m
5eea5d65e4 gh-14651: Start uploading windows binaries into release tags (gh-14698) 2026-07-24 14:06:43 +02:00
mr. m
cd6679b1e9 gh-14651: Start using compressed tars for release (gh-14689) 2026-07-23 17:30:56 +02:00
mr. m
1b1f4c62d6 no-bug: Bump version (gh-14688) 2026-07-23 15:34:41 +02:00
mr. m
c5373ee093 Revert "gh-14651: Changed zip builds to use tar" (gh-14681) 2026-07-22 11:25:03 +02:00
mr. m
e5d38f76a6 gh-14651: Properly expand tar files for PGO builds (gh-14677) 2026-07-22 00:59:41 +02:00
mr. m
e6318ef0a3 gh-14651: Changed zip builds to use tar (gh-14675) 2026-07-21 21:19:51 +02:00
mr. m
0ab979246a gh-14651: Fixed build failures due to wrong ZIP names (gh-14673) 2026-07-21 16:58:17 +02:00
mr. m
b4563ae65b gh-14651: Sync upstream Firefox to version 153.0 (gh-14652) 2026-07-21 14:47:07 +02:00
Ashvin Jangid
e21e5ed16d gh-14461: Fix boost size override not persisting (gh-14664) 2026-07-21 01:11:54 +02:00
Andrey Bochkarev
1b41af52d3 gh-14428: Resolve wrong essentials padding when cleanup (gh-14642) 2026-07-19 15:20:20 +02:00
mr. m
55c224bea7 gh-14424: Prevent startup hangs if no sibling exists (gh-14639) 2026-07-18 19:23:15 +02:00
mr. m
323a3ab1ff gh-14600: Fixed external links not being routed properly (gh-14637) 2026-07-18 15:31:46 +02:00
mr. m
278580ea43 gh-14616: Fixed add to essentials being disabled (gh-14631) 2026-07-17 17:08:15 +02:00
mr. m
a791c5dadc gh-14619: Fixed split view drag opening new windows (gh-14621) 2026-07-16 22:32:30 +02:00
mr. m
247cde9c09 gh-14618: Fixed workspaces not being able to be removed (gh-14620) 2026-07-16 22:28:09 +02:00
mr. m
425f0ae1c3 gh-14605: Bump release versions (gh-14608) 2026-07-16 10:02:53 +02:00
Andrey Bochkarev
fcda16bfe6 gh-14511: Refactor windowDragLeave handler and related logic (gh-14566) 2026-07-15 10:52:15 +02:00
mr. m
31357dfe92 gh-14594: Sync upstream Firefox to version 152.0.6 (gh-14585) 2026-07-15 10:31:58 +02:00
Andrey Bochkarev
529755c48a gh-14575: Tab order flips when moving tabs between workspaces (gh-14581) 2026-07-14 19:07:08 +02:00
Andrey Bochkarev
c7e4217204 no-bug: Ignore zen-empty-tab in #isLastTabWindow (gh-14564)
When dragging a tab from the blank window to the main window, the blank
window doesn't close because '#isLastTabWindow' considers
'zen-empty-tab' as a normal tab.
2026-07-13 13:40:43 +02:00
Andrey Bochkarev
e837158e4c gh-14545: Correctly handle dnd moving a tab to an empty space (gh-14562) 2026-07-12 17:29:29 +02:00
Andrey Bochkarev
a1a2268f9b gh-14511: Prevent switching spaces when dragging outside (gh-14515)
fixed: https://github.com/zen-browser/desktop/issues/14511
2026-07-12 12:57:45 +02:00
Nicholas Leigh
274b9f9f83 gh-14495: Fix misaligned symbolic space icons in Space options menu on Linux (gh-14498) 2026-07-11 13:38:05 +02:00
Ashvin Jangid
fe0cf3601a gh-14544: Fix essentials promo ui leaving gap on pressing esc (gh-14547)
Fixes https://github.com/zen-browser/desktop/issues/14544

Also fixes essentials promo having weird ui with container specific
essentials


https://github.com/user-attachments/assets/f6df3e48-5fa2-471e-afbb-2472efa0620b
2026-07-11 12:45:20 +02:00
Kristijan Ribarić
61e0790144 gh-14470: Rename all occurances of Workspaces to Spaces in sync (gh-14528) 2026-07-09 01:37:00 +02:00
Andrey Bochkarev
03f251ff4a gh-13870: Remove two spaces cycling (gh-14529) 2026-07-09 01:36:51 +02:00
mr. m
5e17ef46ca gh-14521: Fixed theme settings group being visible (gh-14524) 2026-07-08 20:59:48 +02:00
Ashvin Jangid
decd9548dd gh-14507: Fix essentials being added to folder without being removed (gh-14508)
Co-authored-by: mr. m <mr.m@tuta.com>
2026-07-07 21:35:23 +02:00
mr. m
27d290c77d gh-14514: Sync upstream Firefox to version 152.0.5 (gh-14513) 2026-07-07 21:31:01 +02:00
mr. m
5ecbc13eb6 gh-14470: Fixed patch export for sync modules (gh-14490) 2026-07-06 09:55:03 +02:00
mr. m
58611690b5 gh-14470: Fixed wrong sync engine name (gh-14486) 2026-07-05 20:32:03 +02:00
Andrey Bochkarev
68c8fe18bc gh-14242: Fix route tab doesn't change container (gh-14482) 2026-07-05 17:01:20 +02:00
Andrey Bochkarev
3a72290f16 gh-13870: Fix essentials overlap and fix two space wrap-around (gh-14476) 2026-07-05 12:45:35 +02:00
Ashvin Jangid
79d3d6a993 gh-14460: prevent nested glance tabs (gh-14480)
Co-authored-by: mr. m <91018726+mr-cheffy@users.noreply.github.com>
Signed-off-by: mr. m <91018726+mr-cheffy@users.noreply.github.com>
2026-07-05 12:45:07 +02:00
InlitX
e9c35b0f92 gh-10749: Localize command palette actions, emoji picker, etc (gh-14473) 2026-07-05 12:19:18 +02:00
mr. m
647e219639 gh-14470: Add space and container sync (gh-14471)
Co-authored-by: Kristijan Ribarić <96492763+kristijanribaric@users.noreply.github.com>
Signed-off-by: mr. m <91018726+mr-cheffy@users.noreply.github.com>
2026-07-04 11:18:08 +02:00
mr. m
a685738db4 gh-14431: Fixed pinned tabs broken on latest twilight (gh-14446) 2026-07-02 11:01:21 +02:00
Ashvin Jangid
70f19e6d3d gh-14431: Do not allow glance tabs to be pinned (gh-14432) 2026-07-01 12:41:31 +02:00
Raghav
312ad69d65 gh-12948: Removed ai related stuff from settings search (gh-14412) 2026-06-30 22:58:34 +02:00
mr. m
5d10922d91 gh-14427: Sync upstream Firefox to version 152.0.4 (gh-14426)
This PR syncs the upstream Firefox to version 152.0.4.
2026-06-30 19:55:10 +02:00
mr. m
44f7616238 Merge commit from fork 2026-06-30 13:01:01 +02:00
mr. m
dc3ff8b1c9 gh-14382: Fixed overflowing addons not having context menus (gh-14423) 2026-06-30 12:28:46 +02:00
Bernhard
06392af296 gh-14390: fix profile picker menu when creating new workspace (gh-14421) 2026-06-30 12:06:49 +02:00
mr. m
87220f71f4 gh-14417: Fixed tab renaming selection range not starting from the start (gh-14418) 2026-06-29 17:10:23 +02:00
Ashvin Jangid
84ba80bc11 no-bug: set last selected workspace tab to background tab (gh-14395) 2026-06-28 10:40:13 +02:00
Bernhard
e59e37fcbb no-bug: Appending ellipsis to menu items triggering further actions (gh-14388) 2026-06-27 21:12:58 +02:00
mr. m
f4781daa49 gh-14367: Sync upstream Firefox to version 152.0.3 (gh-14366)
This PR syncs the upstream Firefox to version 152.0.3.

*  All patches applied cleanly.

---------

Signed-off-by: mr. m <91018726+mr-cheffy@users.noreply.github.com>
2026-06-25 16:36:06 +02:00
mr. m
4e9c958f8d gh-14183: Dont open space routing tabs in background (gh-14360) 2026-06-24 11:25:39 +02:00
fen4flo
54692261f8 no-bug: Move code inside container null check inside ZenSpaceManager (gh-14356) 2026-06-24 11:15:05 +02:00
Andrey Bochkarev
1fdc1d4475 no-bug: Fix glance tab positioning and prevent split-view (gh-14343) 2026-06-24 11:14:45 +02:00
mr. m
9f9ae52c63 gh-14351: Sync upstream Firefox to version 152.0.2 (gh-14350)
This PR syncs the upstream Firefox to version 152.0.2.

*  All patches applied cleanly.
2026-06-23 16:33:12 +02:00
fen4flo
3c3322058e gh-14044: Implement 'Add Route for Domain' in tab context menu (gh-14279)
Signed-off-by: fen4flo <75260616+FlorianButz@users.noreply.github.com>
Co-authored-by: mr. m <91018726+mr-cheffy@users.noreply.github.com>
2026-06-23 16:07:17 +02:00
Bernhard
31bb9d606d gh-12153: edit pinned-page url directly via submenu (gh-14329) 2026-06-23 15:43:57 +02:00
moshyfawn
b6cb8338e3 gh-14341: Fix about dialog footer alignment and restore legal links (gh-14342) 2026-06-23 15:39:29 +02:00
Bernhard
183c583841 gh-14320: fix workspace change icon picker state when opening (gh-14321)
The picker reset its page with a smooth scrollIntoView while the popup
was hiding, and positioned the page before the popup was laid out, so it
could animate/jump on open. Reset instantly on popupshown (after layout)
instead, and drop the on-hide scroll so there's no visible animation.
2026-06-21 21:43:44 +02:00
fen4flo
40080a25dc gh-11245: Fix tab placement with Move Tab / Space Routing (gh-14324)
Fixes #11245
2026-06-21 15:18:02 +02:00
Connor Griffin
733061fbe3 gh-11766: Fixed video fullscreen not working while in glance (gh-14272)
Co-authored-by: mr. m <91018726+mr-cheffy@users.noreply.github.com>
Signed-off-by: mr. m <91018726+mr-cheffy@users.noreply.github.com>
2026-06-21 11:20:37 +02:00
Andrey Bochkarev
61e631902c gh-14131: Prevent sidebar from flickering when moving a tab (gh-14293)
Co-authored-by: mr. m <mr.m@tuta.com>
2026-06-20 17:18:41 +02:00
mr. m
0cd67f882a gh-14266: Sync upstream Firefox to version 152.0.1 (gh-14265)
Signed-off-by: mr. m <91018726+mr-cheffy@users.noreply.github.com>
2026-06-18 10:36:03 +02:00
mr. m
bc6e4676f4 gh-14208: Set default prefs category to tabs&browsing (gh-14264) 2026-06-18 09:15:50 +02:00
mr. m
e331f07265 gh-14259: Fixed transparency not working after update (gh-14262) 2026-06-18 09:04:09 +02:00
mr. m
6e401db8ae gh-14208: Dont hide un-active spaces if swiping (gh-14247) 2026-06-17 10:37:18 +02:00
mr. m
afb4e4ff02 gh-14242: Fixed space routing overriding user set containers (gh-14245) 2026-06-17 10:08:43 +02:00
mr. m
d55c0193c5 gh-14241: Fixed settings page being blank on redesign (gh-14244) 2026-06-17 10:08:30 +02:00
mr. m
1b967a7080 gh-14239: Fixed overflowing addons being moved on space creation (gh-14246) 2026-06-17 10:08:04 +02:00
Ashvin Jangid
535fdce951 gh-14165: fix background tabs focusing on routed tabs (gh-14221)
fixes: #14165

Two things I want to ask:
- This does fix the issue but I wanted to ask if we should maybe change
the background tab toast message to notify user that it was routed to
another space.
- Another thing is that the background tab toast does not appear when
the sidebar is in view which I know is intentional but maybe it should
be shown even then when tabs are being routed.

---------

Signed-off-by: mr. m <91018726+mr-cheffy@users.noreply.github.com>
Co-authored-by: mr. m <91018726+mr-cheffy@users.noreply.github.com>
2026-06-17 01:21:21 +02:00
mr. m
c4cf56ab75 gh-14208: Sync upstream Firefox to version 152.0 (gh-14231)
This PR syncs the upstream Firefox to version 152.0.

*  All patches applied cleanly.

@mr-cheffy please review and merge this PR.

---------

Signed-off-by: mr. m <91018726+mr-cheffy@users.noreply.github.com>
2026-06-16 22:48:39 +02:00
mr. m
22e8ff2425 gh-14208: Only set CXX and CC flags for linux (gh-14225) 2026-06-16 11:09:45 +02:00
mr. m
a2f5c1b4ab gh-14208: Lower rust version to 1.90 (gh-14224) 2026-06-16 10:55:44 +02:00
dependabot[bot]
5cfb9c7d2e no-bug: bump the npm_and_yarn (gh-14223)
Signed-off-by: dependabot[bot] <support@github.com>
2026-06-16 10:55:11 +02:00
mr. m
af6cc694f4 gh-14208: Install LLVM 22 for rust 1.95 (gh-14222) 2026-06-16 10:37:37 +02:00
mr. m
194f05834e gh-14208: Fixed some regression from FF 152.0 (gh-14212) 2026-06-15 22:32:42 +02:00
mr. m
f62c0a27d5 gh-14208: Sync upstream Firefox to version 152.0 (gh-14112) 2026-06-15 18:37:39 +02:00
Bibhav Adhikari
4cb4de2656 gh-8391: Prevent opening glance when selecting text in link (gh-14164) 2026-06-13 14:24:41 +02:00
280 changed files with 6508 additions and 4411 deletions

View File

@@ -500,10 +500,24 @@ jobs:
path: updates-server
token: ${{ secrets.DEPLOY_KEY }}
- name: Download object files
- name: Download signed windows objects
if: ${{ inputs.update_branch == 'release' }}
env:
GH_TOKEN: ${{ secrets.DEPLOY_KEY }}
run: |
git clone https://github.com/zen-browser/windows-binaries.git .github/workflows/object --depth 1
mkdir -p .github/workflows/object
gh release download "windows-signed-${{ github.run_id }}" \
--repo zen-browser/windows-binaries \
--pattern 'windows-x64-signed-*.tar.gz' \
--dir .github/workflows/object
for arch in x86_64 arm64; do
archive=".github/workflows/object/windows-x64-signed-$arch.tar.gz"
dest=".github/workflows/object/windows-x64-signed-$arch"
echo "Expanding $archive"
mkdir -p "$dest"
tar -xvf "$archive" -C "$dest"
done
- name: Sign MAR files
env:
@@ -616,6 +630,17 @@ jobs:
./.github/workflows/object/windows-x64-signed-arm64/zen.installer-arm64.exe
./zen.macos-universal.dmg/*
- name: Clean up signed windows staging release
if: ${{ inputs.update_branch == 'release' }}
env:
GH_TOKEN: ${{ secrets.DEPLOY_KEY }}
run: |
# The per-run staging prerelease on windows-binaries has served its purpose
# now that the signed bundles are published in the real release. Never fail
# the release over this cleanup.
gh release delete "windows-signed-${{ github.run_id }}" \
--repo zen-browser/windows-binaries --cleanup-tag --yes || true
prepare-flatpak:
if: ${{ inputs.create_release && inputs.update_branch == 'release' }}
permissions: write-all

View File

@@ -8,10 +8,28 @@ if command -v apt-get &> /dev/null; then
sudo apt-get install -y xvfb libnvidia-egl-wayland1 mesa-utils libgl1-mesa-dri
fi
if ! test "$ZEN_CROSS_COMPILING" && test "$(uname -s)" = "Linux"; then
if test -d "$HOME/.mozbuild/clang/bin"; then
export CC="$HOME/.mozbuild/clang/bin/clang"
export CXX="$HOME/.mozbuild/clang/bin/clang++"
else
export CC=clang
export CXX=clang++
fi
fi
mkdir -p ~/.zen-keys
echo "$ZEN_SAFEBROWSING_API_KEY" > ~/.zen-keys/safebrowsing.dat
echo "$ZEN_MOZILLA_API_KEY" > ~/.zen-keys/mozilla.dat
echo "$ZEN_GOOGLE_LOCATION_SERVICE_API_KEY" > ~/.zen-keys/google_location_service.dat
if test "$ZEN_SAFEBROWSING_API_KEY"; then
echo "$ZEN_SAFEBROWSING_API_KEY" > ~/.zen-keys/safebrowsing.dat
fi
if test "$ZEN_MOZILLA_API_KEY"; then
echo "$ZEN_MOZILLA_API_KEY" > ~/.zen-keys/mozilla.dat
fi
if test "$ZEN_GOOGLE_LOCATION_SERVICE_API_KEY"; then
echo "$ZEN_GOOGLE_LOCATION_SERVICE_API_KEY" > ~/.zen-keys/google_location_service.dat
fi
. $HOME/.cargo/env

View File

@@ -61,7 +61,6 @@ jobs:
if: ${{ matrix.arch == 'x86_64' }}
run: |
cd C:\artifact
ls
Expand-Archive -Path .\${{ inputs.profile-data-path-archive }} -DestinationPath C:\artifact
ls

View File

@@ -234,7 +234,8 @@ jobs:
ZEN_RELEASE_BRANCH: ${{ inputs.release-branch }}
ZEN_SAFEBROWSING_API_KEY: ${{ secrets.ZEN_SAFEBROWSING_API_KEY }}
ZEN_MOZILLA_API_KEY: ${{ secrets.ZEN_MOZILLA_API_KEY }}
ZEN_GOOGLE_LOCATION_SERVICE_API_KEY: ${{ secrets.ZEN_GOOGLE_LOCATION_SERVICE_API_KEY }}
# Firefox doesn't support location service for Windows
# ZEN_GOOGLE_LOCATION_SERVICE_API_KEY: ${{ secrets.ZEN_GOOGLE_LOCATION_SERVICE_API_KEY }}
run: |
set -x
dos2unix configs/windows/mozconfig
@@ -259,8 +260,8 @@ jobs:
export ZEN_CROSS_COMPILING=1
export ZEN_RELEASE=1
npm run package
mv ./dist/zen-$(npm run --silent surfer -- get version | xargs).en-US.win64${{ matrix.arch == 'aarch64' && '-aarch64' || '' }}.zip zen.win64.zip
ls ./dist
mv ./dist/zen-$(npm run --silent surfer -- get version | xargs).en-US.win64${{ matrix.arch == 'aarch64' && '-aarch64' || '' }}.zip zen.win64.zip
ls .
- name: Move package for PGO upload

View File

@@ -1 +1 @@
1.90
1.94.1

View File

@@ -34,8 +34,8 @@ Zen is a firefox-based browser with the aim of pushing your productivity to a ne
### Firefox Versions
- [`Release`](https://zen-browser.app/download) - Is currently built using Firefox version `151.0.4`! 🚀
- [`Twilight`](https://zen-browser.app/download?twilight) - Is currently built using Firefox version `RC 151.0.4`!
- [`Release`](https://zen-browser.app/download) - Is currently built using Firefox version `153.0`! 🚀
- [`Twilight`](https://zen-browser.app/download?twilight) - Is currently built using Firefox version `RC 153.0`!
### Contributing

View File

@@ -1 +1 @@
9a6aa4c359d1fb6ac60decc82402f82d49a17cea
b1d3fe8f65751e6d695fa9ef94b11ad81e70dac1

View File

@@ -170,14 +170,16 @@ function SignAndPackage($name) {
echo "Packaging $name"
npm run package -- --verbose
# In the release script, we do the following:
# We assemble the signed bundle as a plain folder here (with no top-level
# directory inside it) and compress it into windows-x64-signed-$name.tar.gz
# at the end of the script, once every .exe has been signed. The release
# workflow expands it back with:
# tar -xvf .github/workflows/object/windows-x64-signed-x86_64.tar.gz -C windows-x64-signed-x86_64
# We need to create a tar with the same structure and no top-level directory
# Inside, we need:
# Inside the bundle we need:
# - update_manifest/*
# - windows.mar
# - zen.installer.exe
echo "Creating tar for $name"
echo "Preparing signed bundle for $name"
rm .\windsign-temp\windows-x64-signed-$name -Recurse -ErrorAction SilentlyContinue
mkdir windsign-temp\windows-x64-signed-$name
@@ -200,9 +202,8 @@ function SignAndPackage($name) {
# Move the manifest
mv .\dist\update\. windsign-temp\windows-x64-signed-$name\update_manifest
# note: We need to sign it into a parent folder, called windows-x64-signed-$name
rmdir .\windsign-temp\windows-binaries\windows-x64-signed-$name -Recurse -ErrorAction SilentlyContinue
mv windsign-temp\windows-x64-signed-$name .\windsign-temp\windows-binaries -Force
# The signed bundle stays in windsign-temp\windows-x64-signed-$name; it is
# compressed and uploaded to the staging release once every .exe is signed.
rmdir engine\obj-$objName-pc-windows-msvc\ -Recurse -ErrorAction SilentlyContinue
echo "Finished $name"
@@ -211,16 +212,42 @@ function SignAndPackage($name) {
SignAndPackage arm64
SignAndPackage x86_64
$files = Get-ChildItem .\windsign-temp\windows-binaries -Recurse -Include *.exe
$files = Get-ChildItem .\windsign-temp\windows-x64-signed-x86_64, .\windsign-temp\windows-x64-signed-arm64 -Recurse -Include *.exe
signtool.exe sign /n "$SignIdentity" /t http://time.certum.pl/ /fd sha256 /v $files
echo "All artifacts signed and packaged, ready for release!"
echo "Commiting the changes to the repository"
cd windsign-temp\windows-binaries
git add .
git commit -m "Sign and package windows artifacts"
git push
cd ..\..
# Compress each signed bundle into a single gzip tarball (`-C <dir> .` so it has
# no top-level directory) and upload it as a release asset on the windows-binaries
# repo, keyed to this build's run id. Release assets keep the bundles out of git
# (they were too large to commit) while still living in the windows-binaries repo.
# The gated release job downloads and expands these from that repo's releases.
$binariesRepo = "zen-browser/windows-binaries"
$stagingTag = "windows-signed-$GithubRunId"
echo "Ensuring staging release $stagingTag exists on $binariesRepo"
gh release view $stagingTag --repo $binariesRepo *> $null
if ($LASTEXITCODE -ne 0) {
gh release create $stagingTag --repo $binariesRepo --prerelease --title "Windows signed bundles ($GithubRunId)" --notes "Signed Windows bundles for run $GithubRunId, consumed by the release workflow. Safe to delete."
if ($LASTEXITCODE -ne 0) {
throw "Failed to create staging release $stagingTag on $binariesRepo"
}
}
foreach ($name in @("x86_64", "arm64")) {
$signedDir = ".\windsign-temp\windows-x64-signed-$name"
$archive = ".\windsign-temp\windows-x64-signed-$name.tar.gz"
echo "Creating compressed tar for $name"
Remove-Item $archive -ErrorAction SilentlyContinue
tar -czvf $archive -C $signedDir .
if ($LASTEXITCODE -ne 0) {
throw "Failed to create tar archive for $name"
}
echo "Uploading $archive to $binariesRepo release $stagingTag"
gh release upload $stagingTag $archive --repo $binariesRepo --clobber
if ($LASTEXITCODE -ne 0) {
throw "Failed to upload $archive to release $stagingTag"
}
}
echo "All artifacts signed, packaged, and uploaded to $binariesRepo release $stagingTag!"
# Cleaning up

View File

@@ -2,15 +2,6 @@
# 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/.
# Setting the compiler based on the existence of clang bin directory
if test -d "$HOME/.mozbuild/clang/bin"; then
export CC="$HOME/.mozbuild/clang/bin/clang"
export CXX="$HOME/.mozbuild/clang/bin/clang++"
else
export CC=clang
export CXX=clang++
fi
if test "$ZEN_RELEASE"; then
if test "$SURFER_COMPAT" = "x86_64"; then
ac_add_options --target=x86_64-pc-linux

View File

@@ -10,7 +10,6 @@ if test "$ZEN_CROSS_COMPILING"; then
export WINEDEBUG=-all
export MOZ_STUB_INSTALLER=1
export MOZ_PKG_FORMAT=TAR
export CROSS_BUILD=1
CROSS_COMPILE=1

View File

@@ -24,3 +24,5 @@ files:
translation: browser/browser/zen-boosts.ftl
- source: en-US/browser/browser/zen-space-routing.ftl
translation: browser/browser/zen-space-routing.ftl
- source: en-US/browser/browser/zen-command-palette.ftl
translation: browser/browser/zen-command-palette.ftl

View File

@@ -0,0 +1,36 @@
# 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/.
zen-action-toggle-compact-mode = Toggle Compact Mode
zen-action-open-theme-picker = Open Theme Picker
zen-action-new-split-view = New Split View
zen-action-new-folder = New Folder
zen-action-copy-current-url = Copy Current URL
zen-action-settings = Settings
zen-action-open-private-window = Open Private Window
zen-action-open-new-window = Open New Window
zen-action-new-blank-window = New Blank Window
zen-action-pin-tab = Pin Tab
zen-action-unpin-tab = Unpin Tab
zen-action-open-space-routing = Open Space Routing
zen-action-new-boost = New Boost
zen-action-next-space = Next Space
zen-action-previous-space = Previous Space
zen-action-close-tab = Close Tab
zen-action-reload-tab = Reload Tab
zen-action-reload-tab-without-cache = Reload Tab Without Cache
zen-action-next-tab = Next Tab
zen-action-previous-tab = Previous Tab
zen-action-capture-screenshot = Capture Screenshot
zen-action-toggle-tabs-on-right = Toggle Tabs on right
zen-action-add-to-essentials = Add to Essentials
zen-action-remove-from-essentials = Remove from Essentials
zen-action-find-in-page = Find in Page
zen-action-manage-extensions = Manage Extensions
zen-action-switch-to-automatic-appearance = Switch to Automatic Appearance
zen-action-switch-to-light-mode = Switch to Light Mode
zen-action-switch-to-dark-mode = Switch to Dark Mode
zen-action-print = Print
zen-action-focus-on = Focus on
zen-action-extension = Extension

View File

@@ -6,13 +6,13 @@ zen-folders-search-placeholder =
.placeholder = Search { $folder-name }...
zen-folders-panel-rename-folder =
.label = Rename Folder
.label = Rename Folder
zen-folders-panel-unpack-folder =
.label = Unpack Folder
zen-folders-new-subfolder =
.label = New Subfolder
.label = New Subfolder
zen-folders-panel-delete-folder =
.label = Delete Folder
@@ -21,7 +21,7 @@ zen-folders-panel-convert-folder-to-space =
.label = Convert folder to Space
zen-folders-panel-change-folder-space =
.label = Change Space...
.label = Change Space
zen-folders-unload-all-tooltip =
.tooltiptext = Unload active in this folder

View File

@@ -19,17 +19,23 @@ tab-context-zen-add-essential-badge = { $num } / { $max }
tab-context-zen-remove-essential =
.label = Remove from Essentials
.accesskey = R
tab-context-zen-replace-pinned-url-with-current =
tab-context-zen-edit-pinned-page =
.label =
{ $isEssential ->
[true] Replace Essential URL with Current
*[false] Replace Pinned URL with Current
[true] Edit Essential URL
*[false] Edit Pinned URL
}
.accesskey = P
tab-context-zen-replace-pinned-url-with-current =
.label = Replace with Current URL
.accesskey = C
tab-context-zen-edit-pinned-url =
.label = Edit…
.accesskey = E
tab-context-zen-edit-title =
.label = Change Label...
.label = Change Label
tab-context-zen-edit-icon =
.label = Change Icon...
.label = Change Icon
zen-themes-corrupted = Your { -brand-short-name } mods file is corrupted. They have been reset to the default theme.
zen-shortcuts-corrupted = Your { -brand-short-name } shortcuts file is corrupted. They have been reset to the default shortcuts.
@@ -55,6 +61,10 @@ zen-general-confirm =
.label = Confirm
zen-pinned-tab-replaced = Pinned tab URL has been replaced with the current URL!
zen-pinned-tab-url-edited = Pinned tab URL has been updated!
zen-pinned-tab-url-invalid = That doesn't look like a valid URL.
zen-pinned-tab-edit-url-title = Edit Pinned URL
zen-pinned-tab-edit-url-label = Enter the URL this pinned tab should point to:
zen-tabs-renamed = Tab has been successfully renamed!
zen-background-tab-opened-toast = New background tab opened!
zen-workspace-renamed-toast = Workspace has been successfully renamed!
@@ -77,6 +87,8 @@ zen-icons-picker-emoji =
.label = Emojis
zen-icons-picker-svg =
.label = Icons
zen-emojis-picker-search =
.placeholder = Search emojis
urlbar-search-mode-zen_actions = Actions
zen-site-data-settings = Settings

View File

@@ -22,4 +22,12 @@ zen-space-routing-regex =
.label = RegEx
zen-space-routing-open-in = Open In
zen-space-routing-url = URL
zen-space-routing-url = URL
zen-space-routing-tab-routed-toast = New tab opened in { $targetWorkspace }
tab-context-zen-add-domain-to-sr =
.label =
{ $tabCount ->
[one] Add Route for Domain
*[other] Add Route for Domains
}

View File

@@ -20,7 +20,7 @@ zen-toolbar-context-compact-mode-hide-both =
.accesskey = H
zen-toolbar-context-move-to-folder =
.label = Move to Folder...
.label = Move to Folder
.accesskey = M
zen-toolbar-context-new-folder =
@@ -31,7 +31,7 @@ sidebar-zen-expand =
.label = Expand Sidebar
sidebar-zen-create-new =
.label = Create New...
.label = Create New
tabbrowser-unload-tab-button =
.tooltiptext =

View File

@@ -24,10 +24,10 @@ zen-workspaces-panel-context-delete =
.accesskey = D
zen-workspaces-panel-change-name =
.label = Change Name
.label = Change Name
zen-workspaces-panel-change-icon =
.label = Change Icon
.label = Change Icon
zen-workspaces-panel-context-default-profile =
.label = Set Profile
@@ -42,7 +42,7 @@ zen-workspaces-how-to-reorder-title = How to reorder spaces
zen-workspaces-how-to-reorder-desc = Drag the space icons at the bottom of the sidebar to reorder them
zen-workspaces-change-theme =
.label = Edit Theme
.label = Edit Theme
zen-workspaces-panel-context-open =
.label = Open Workspace
@@ -72,7 +72,7 @@ zen-workspace-creation-name =
.placeholder = Space Name
zen-move-tab-to-workspace-button =
.label = Move To...
.label = Move To
.tooltiptext = Move all tabs in this window to a Space
zen-workspaces-panel-context-reorder =

48
package-lock.json generated
View File

@@ -19,14 +19,6 @@
"typescript": "^5.9.3"
}
},
"engine/tools/lint/eslint/eslint-plugin-spidermonkey-js": {
"extraneous": true,
"license": "MPL-2.0",
"devDependencies": {},
"engines": {
"node": ">=6.9.1"
}
},
"node_modules/@ampproject/remapping": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
@@ -1923,17 +1915,17 @@
}
},
"node_modules/form-data": {
"version": "4.0.5",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz",
"integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==",
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz",
"integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
"es-set-tostringtag": "^2.1.0",
"hasown": "^2.0.2",
"mime-types": "^2.1.12"
"hasown": "^2.0.4",
"mime-types": "^2.1.35"
},
"engines": {
"node": ">= 6"
@@ -2169,9 +2161,9 @@
"license": "ISC"
},
"node_modules/hasown": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz",
"integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2390,10 +2382,20 @@
"license": "MIT"
},
"node_modules/js-yaml": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
"integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.2.0.tgz",
"integrity": "sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==",
"dev": true,
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/puzrin"
},
{
"type": "github",
"url": "https://github.com/sponsors/nodeca"
}
],
"license": "MIT",
"dependencies": {
"argparse": "^2.0.1"
@@ -4223,14 +4225,6 @@
"engines": {
"node": ">=0.8"
}
},
"tools/eslint-plugin-spidermonkey-js": {
"extraneous": true,
"license": "MPL-2.0",
"devDependencies": {},
"engines": {
"node": ">=6.9.1"
}
}
}
}

View File

@@ -23,3 +23,6 @@
- name: browser.ml.linkPreview.enabled
value: false
- name: browser.preferences.aiControls
value: false

12
prefs/zen/sync.yaml Normal file
View File

@@ -0,0 +1,12 @@
# 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/.
- name: services.sync.engine.spaces
value: true
condition: "@IS_TWILIGHT@"
- name: services.sync.engine.spaces
value: false
locked: true
condition: "!@IS_TWILIGHT@"

View File

@@ -7,10 +7,6 @@
value: true
condition: "defined(XP_WIN)"
- name: widget.windows.mica.popups
value: true
condition: "defined(XP_WIN)"
# 1 = DWMSBT_MAINWINDOW
# 2 = DWMSBT_TRANSIENTWINDOW (default, also used for popups)
# 3 = DWMSBT_TABBEDWINDOW

View File

@@ -32,9 +32,6 @@
- name: zen.workspaces.scroll-modifier-key
value: ctrl
- name: services.sync.engine.workspaces
value: false
- name: zen.workspaces.separate-essentials
value: true

View File

@@ -1,8 +1,8 @@
diff --git a/.prettierignore b/.prettierignore
index de2efe413e5696a3b8d0467a3a9e668dfadd8a1a..01c76d8e639d5630fca9cccb55d415fc4e903e91 100644
index 949896ff064ae0b54b6a657ea074bc88e12820f7..5249f420972667bece4d85fe8d35073afaebeb8a 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -1805,3 +1805,12 @@ tools/ts/test/baselines/
@@ -1803,3 +1803,12 @@ tools/ts/test/baselines/
try_task_config.json
xpcom/idl-parser/xpidl/fixtures/xpctest.d.json
**/package-lock.json

View File

@@ -1,5 +1,5 @@
diff --git a/.stylelintrc.js b/.stylelintrc.js
index 3c9fecf731126fdbf900d1bdcd3635dd31ed53ef..c3a210b8153e9699c6cbdc0d568bb72433976b2c 100644
index b484bf6600a7e1b8ad2aed8c8b7fe5e84cc3d023..f89712e2c13dfa0bcb48e55cd3872c67f5c98dad 100644
--- a/.stylelintrc.js
+++ b/.stylelintrc.js
@@ -67,7 +67,7 @@ module.exports = {
@@ -11,9 +11,9 @@ index 3c9fecf731126fdbf900d1bdcd3635dd31ed53ef..c3a210b8153e9699c6cbdc0d568bb724
{
ignore: ["blockless-at-rules"],
},
@@ -274,7 +274,7 @@ module.exports = {
// Remove this line setting `csscontrols/use-logical` to null after implementing fixes
"csstools/use-logical": null,
@@ -280,7 +280,7 @@ module.exports = {
"media-query-no-invalid": null,
"stylelint-plugin-mozilla/media-query-no-invalid": true,
"stylelint-plugin-mozilla/no-base-design-tokens": true,
- "stylelint-plugin-mozilla/use-design-tokens": true,
+ "stylelint-plugin-mozilla/use-design-tokens": false,

View File

@@ -1,5 +1,5 @@
diff --git a/browser/actors/EncryptedMediaParent.sys.mjs b/browser/actors/EncryptedMediaParent.sys.mjs
index 492dce93d3cc7c6ec16db047c9e47b175ef3a0fe..757e5543e0e6900c414db6d7a96d511608c1e50a 100644
index 8bdeba9b8803354e23a3881147fee6a6af94a63b..61c8407df1fbebcc36481ad2169a9c103b4faed5 100644
--- a/browser/actors/EncryptedMediaParent.sys.mjs
+++ b/browser/actors/EncryptedMediaParent.sys.mjs
@@ -199,6 +199,7 @@ export class EncryptedMediaParent extends JSWindowActorParent {

View File

@@ -1,12 +1,12 @@
diff --git a/browser/actors/WebRTCParent.sys.mjs b/browser/actors/WebRTCParent.sys.mjs
index b743bd83529c4cd01a6bc820967186dbe41b6144..e24c48bac0f4ae3d4b26087b7e0cac7910019d0e 100644
index 98b10b1d789c20b3463de4f703af102f6908318b..29534480fbeda6d66cb9dab81afdaed8d8a5c565 100644
--- a/browser/actors/WebRTCParent.sys.mjs
+++ b/browser/actors/WebRTCParent.sys.mjs
@@ -152,6 +152,7 @@ export class WebRTCParent extends JSWindowActorParent {
let tabbrowser = browser.ownerGlobal.gBrowser;
let tabbrowser = browser.documentGlobal.gBrowser;
if (tabbrowser) {
+ browser.ownerGlobal.gZenMediaController.updateMediaSharing(state);
+ browser.documentGlobal.gZenMediaController.updateMediaSharing(state);
tabbrowser.updateBrowserSharing(browser, {
webRTC: state,
});

View File

@@ -0,0 +1,18 @@
diff --git a/browser/base/content/aboutDialog.css b/browser/base/content/aboutDialog.css
index 017125bc2510e5f5e317a5e78c40d6aa9ded76ca..d343d8c62a2251e3c3a33ae8f2ab9c4c68218c22 100644
--- a/browser/base/content/aboutDialog.css
+++ b/browser/base/content/aboutDialog.css
@@ -135,6 +135,13 @@
margin: 0 40px;
}
+#trademark {
+ font-size: xx-small;
+ text-align: center;
+ margin-block: 10px;
+ color: var(--text-color-deemphasized);
+}
+
#currentChannel {
margin: 0;
padding: 0;

View File

@@ -1,5 +1,5 @@
diff --git a/browser/base/content/aboutDialog.xhtml b/browser/base/content/aboutDialog.xhtml
index c64980810570fcea84e33fdc2d66ac42a79f4e46..aa629ebb38a9aa74048fe3fc759f716fad57d6f3 100644
index 3ffd464b960a4299a7dd0cd87e4fc2f781b9d593..7a831c8ee2b73bb89bf8a82ac24958b55c16a5aa 100644
--- a/browser/base/content/aboutDialog.xhtml
+++ b/browser/base/content/aboutDialog.xhtml
@@ -102,10 +102,6 @@
@@ -39,8 +39,8 @@ index c64980810570fcea84e33fdc2d66ac42a79f4e46..aa629ebb38a9aa74048fe3fc759f716f
<label is="text-link" class="bottom-link" useoriginprincipal="true" href="about:license" data-l10n-id="bottomLinks-license"/>
- <label is="text-link" class="bottom-link" href="https://www.mozilla.org/about/legal/terms/firefox/" data-l10n-id="bottom-links-terms"/>
- <label is="text-link" class="bottom-link" href="https://www.mozilla.org/privacy/firefox/?utm_source=firefox-browser&#38;utm_medium=firefox-desktop&#38;utm_campaign=about-dialog" data-l10n-id="bottom-links-privacy"/>
+ <label is="text-link" class="bottom-link" href="about:rights" data-l10n-id="bottomLinks-rights"/>
+ <label is="text-link" class="bottom-link" href="https://www.zen-browser.app/privacy-policy/" data-l10n-id="bottomLinks-privacy"/>
+ <label is="text-link" class="bottom-link" href="about:rights" data-l10n-id="bottom-links-terms"/>
+ <label is="text-link" class="bottom-link" href="https://www.zen-browser.app/privacy-policy/" data-l10n-id="bottom-links-privacy"/>
</hbox>
<description id="trademark" data-l10n-id="trademarkInfo"></description>
</vbox>

View File

@@ -1,5 +1,5 @@
diff --git a/browser/base/content/browser-addons.js b/browser/base/content/browser-addons.js
index 853d3c9dd9dd806d49a3c5a44304dd7370f0c90e..ea927b05213981fbfa5494d8d22bce05f45bce08 100644
index 56acad9b7c21c07842f901d24525a97a0ba20217..829054218dc6fbb14fe034546e8da62b12516eae 100644
--- a/browser/base/content/browser-addons.js
+++ b/browser/base/content/browser-addons.js
@@ -1060,7 +1060,7 @@ var gXPInstallObserver = {
@@ -20,7 +20,7 @@ index 853d3c9dd9dd806d49a3c5a44304dd7370f0c90e..ea927b05213981fbfa5494d8d22bce05
},
};
@@ -2209,7 +2209,7 @@ var gUnifiedExtensions = {
@@ -2214,7 +2214,7 @@ var gUnifiedExtensions = {
// If the new ID is not added in NOTIFICATION_IDS, consider handling the case
// in the "PopupNotificationsBeforeAnchor" handler elsewhere in this file.
getPopupAnchorID(aBrowser, aWindow) {
@@ -29,7 +29,7 @@ index 853d3c9dd9dd806d49a3c5a44304dd7370f0c90e..ea927b05213981fbfa5494d8d22bce05
const attr = anchorID + "popupnotificationanchor";
if (!aBrowser[attr]) {
@@ -2220,7 +2220,7 @@ var gUnifiedExtensions = {
@@ -2225,7 +2225,7 @@ var gUnifiedExtensions = {
anchorID
// Anchor on the toolbar icon to position the popup right below the
// button.
@@ -38,7 +38,7 @@ index 853d3c9dd9dd806d49a3c5a44304dd7370f0c90e..ea927b05213981fbfa5494d8d22bce05
}
return anchorID;
@@ -2545,7 +2545,7 @@ var gUnifiedExtensions = {
@@ -2550,7 +2550,7 @@ var gUnifiedExtensions = {
requestAnimationFrame(() => this.updateAttention());
},
@@ -47,7 +47,7 @@ index 853d3c9dd9dd806d49a3c5a44304dd7370f0c90e..ea927b05213981fbfa5494d8d22bce05
// A list of extension widget IDs (possibly empty).
let widgetIDs;
@@ -2559,7 +2559,7 @@ var gUnifiedExtensions = {
@@ -2564,7 +2564,7 @@ var gUnifiedExtensions = {
}
// The list of overflowed extensions in the extensions panel.
@@ -56,7 +56,7 @@ index 853d3c9dd9dd806d49a3c5a44304dd7370f0c90e..ea927b05213981fbfa5494d8d22bce05
"#overflowed-extensions-list"
);
@@ -2660,37 +2660,41 @@ var gUnifiedExtensions = {
@@ -2665,37 +2665,41 @@ var gUnifiedExtensions = {
);
template.replaceWith(template.content);
this._panel = document.getElementById("unified-extensions-panel");
@@ -123,7 +123,7 @@ index 853d3c9dd9dd806d49a3c5a44304dd7370f0c90e..ea927b05213981fbfa5494d8d22bce05
if (!CustomizationHandler.isCustomizing()) {
if (aEvent) {
if (
@@ -2712,6 +2716,7 @@ var gUnifiedExtensions = {
@@ -2717,6 +2721,7 @@ var gUnifiedExtensions = {
// and no alternative content is available for display in the panel.
const policies = this.getActivePolicies();
if (
@@ -131,7 +131,7 @@ index 853d3c9dd9dd806d49a3c5a44304dd7370f0c90e..ea927b05213981fbfa5494d8d22bce05
policies.length &&
!this.hasExtensionsInPanel(policies) &&
!this.isPrivateWindowMissingExtensionsWithoutPBMAccess() &&
@@ -2727,32 +2732,30 @@ var gUnifiedExtensions = {
@@ -2732,32 +2737,30 @@ var gUnifiedExtensions = {
this.blocklistAttentionInfo =
await AddonManager.getBlocklistAttentionInfo();
@@ -170,7 +170,7 @@ index 853d3c9dd9dd806d49a3c5a44304dd7370f0c90e..ea927b05213981fbfa5494d8d22bce05
triggerEvent: aEvent,
});
}
@@ -2947,18 +2950,20 @@ var gUnifiedExtensions = {
@@ -2952,18 +2955,20 @@ var gUnifiedExtensions = {
this._maybeMoveWidgetNodeBack(widgetId);
}

View File

@@ -1,5 +1,5 @@
diff --git a/browser/base/content/browser-box.inc.xhtml b/browser/base/content/browser-box.inc.xhtml
index d58fcdf99843d110b708f3fbf9fb317787fadfcf..cfc2aad902641609c3804e615c4cb66ce65299b7 100644
index 4a16fe93daeefb88af024c1dac05bc1f518c3fcb..a420768e4047937c8becefb69c1017e13fc12231 100644
--- a/browser/base/content/browser-box.inc.xhtml
+++ b/browser/base/content/browser-box.inc.xhtml
@@ -3,12 +3,22 @@
@@ -10,7 +10,7 @@ index d58fcdf99843d110b708f3fbf9fb317787fadfcf..cfc2aad902641609c3804e615c4cb66c
+ <html:div id="zen-browser-background" class="zen-browser-generic-background">
+ <html:div class="zen-browser-grain" />
+ </html:div>
<box context="sidebar-context-menu" id="sidebar-main" hidden="true">
<box context="sidebar-context-menu" id="sidebar-container" class="chrome-block" hidden="true">
<html:sidebar-main flex="1">
<box id="vertical-tabs" slot="tabstrip" customizable="true" contextmenu="toolbar-context-menu"></box>
</html:sidebar-main>
@@ -22,7 +22,7 @@ index d58fcdf99843d110b708f3fbf9fb317787fadfcf..cfc2aad902641609c3804e615c4cb66c
+ </html:div>
+<hbox id="zen-tabbox-wrapper" flex="1">
+ <tabbox id="tabbrowser-tabbox" flex="1" tabcontainer="tabbrowser-tabs">
<vbox id="sidebar-box" hidden="true" class="chromeclass-extrachrome">
<vbox id="sidebar-box" hidden="true" class="chromeclass-extrachrome chrome-block">
<box id="sidebar-header" align="center">
<toolbarbutton id="sidebar-switcher-target" class="tabbable" aria-expanded="false">
@@ -25,7 +35,7 @@

View File

@@ -1,5 +1,5 @@
diff --git a/browser/base/content/browser-commands.js b/browser/base/content/browser-commands.js
index 2d9f5591c9ffdd5948298555c461850521c0b45f..c46072ca4e96b419987f7e782e26b3de71d7c8e3 100644
index 87148c353ee852248e887e3ae31d46bcbee1cd11..91b1d5a8e0e512dd50139f99ad3e3ba7bade80fb 100644
--- a/browser/base/content/browser-commands.js
+++ b/browser/base/content/browser-commands.js
@@ -13,6 +13,10 @@ var BrowserCommands = {
@@ -13,7 +13,7 @@ index 2d9f5591c9ffdd5948298555c461850521c0b45f..c46072ca4e96b419987f7e782e26b3de
try {
gBrowser.goBack();
} catch (ex) {}
@@ -234,6 +238,10 @@ var BrowserCommands = {
@@ -230,6 +234,10 @@ var BrowserCommands = {
}
}
@@ -24,7 +24,7 @@ index 2d9f5591c9ffdd5948298555c461850521c0b45f..c46072ca4e96b419987f7e782e26b3de
// A notification intended to be useful for modular peformance tracking
// starting as close as is reasonably possible to the time when the user
// expressed the intent to open a new tab. Since there are a lot of
@@ -318,6 +326,14 @@ var BrowserCommands = {
@@ -346,6 +354,14 @@ var BrowserCommands = {
return;
}
@@ -39,7 +39,7 @@ index 2d9f5591c9ffdd5948298555c461850521c0b45f..c46072ca4e96b419987f7e782e26b3de
// Keyboard shortcuts that would close a tab that is pinned select the first
// unpinned tab instead.
if (
@@ -325,8 +341,8 @@ var BrowserCommands = {
@@ -353,8 +369,8 @@ var BrowserCommands = {
(event.ctrlKey || event.metaKey || event.altKey) &&
gBrowser.selectedTab.pinned
) {

View File

@@ -1,12 +1,12 @@
diff --git a/browser/base/content/browser-fullScreenAndPointerLock.js b/browser/base/content/browser-fullScreenAndPointerLock.js
index 1eaf79a4f6788c518a4759bbce81175fd5fba220..6fde5e944ad4a847180ca83a9e6f4fde20aa7b42 100644
index d0d3b6fc57800b073bb1c75f6e55212749815b0a..f3d5790eed58f1cb9a36229582e0fa00f3668962 100644
--- a/browser/base/content/browser-fullScreenAndPointerLock.js
+++ b/browser/base/content/browser-fullScreenAndPointerLock.js
@@ -501,8 +501,6 @@ var FullScreen = {
// don't need that kind of precision in our CSS.
@@ -502,8 +502,6 @@ var FullScreen = {
shiftSize = shiftSize.toFixed(2);
let translate = shiftSize > 0 ? `0 ${shiftSize}px` : "";
- document.body.style.translate = translate;
gNavToolbox.classList.toggle("fullscreen-floating-toolbox", shiftSize > 0);
- gNavToolbox.style.translate = translate;
- gURLBar.style.translate = gURLBar.hasAttribute("breakout") ? translate : "";
let searchbar = document.getElementById("searchbar-new");
if (searchbar) {

View File

@@ -1,5 +1,5 @@
diff --git a/browser/base/content/browser-gestureSupport.js b/browser/base/content/browser-gestureSupport.js
index a28d54bf72c0e6495b9586f220d1859aac794936..411d7255a68c48643617d77cc279a0a831fdf5c9 100644
index f94b39d26a1a9626b3e1f518e2395bc394d1262d..15e198f4bb440cff0bbfb8ccd97c2ce180d5724f 100644
--- a/browser/base/content/browser-gestureSupport.js
+++ b/browser/base/content/browser-gestureSupport.js
@@ -247,6 +247,10 @@ var gGestureSupport = {
@@ -13,7 +13,7 @@ index a28d54bf72c0e6495b9586f220d1859aac794936..411d7255a68c48643617d77cc279a0a8
return canGoBack || canGoForward;
},
@@ -832,7 +836,7 @@ var gHistorySwipeAnimation = {
@@ -848,7 +852,7 @@ var gHistorySwipeAnimation = {
* @return true if there is a previous page in history, false otherwise.
*/
canGoBack: function HSA_canGoBack() {

View File

@@ -1,8 +1,8 @@
diff --git a/browser/base/content/browser-init.js b/browser/base/content/browser-init.js
index d09cf65931eda253b2a71131f42883ccf6eb5724..f617863dac8e07def02d1d4ef7e5ade1caf50df1 100644
index 0aa4baea8e5e6d742fc6cd3333068e7eb64b5bbc..057bb2386420edd31154979338e71d00a51a7266 100644
--- a/browser/base/content/browser-init.js
+++ b/browser/base/content/browser-init.js
@@ -302,6 +302,7 @@ var gBrowserInit = {
@@ -307,6 +307,7 @@ var gBrowserInit = {
},
onLoad() {
@@ -10,7 +10,7 @@ index d09cf65931eda253b2a71131f42883ccf6eb5724..f617863dac8e07def02d1d4ef7e5ade1
gBrowser.addEventListener("DOMUpdateBlockedPopups", e =>
PopupAndRedirectBlockerObserver.handleEvent(e)
);
@@ -496,6 +497,7 @@ var gBrowserInit = {
@@ -501,6 +502,7 @@ var gBrowserInit = {
this._handleURIToLoad();

View File

@@ -1,5 +1,5 @@
diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js
index d1ab42d59f05513ec60a7578b7acab44875c544c..8c3cd75704991b8572d3f13a936fddd2616b2946 100644
index 1026474bb1bc026987be01a8c18fa0927cb911bc..60294e0587147d86ace8e6d6985d8c6eae8248b6 100644
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -34,6 +34,7 @@ ChromeUtils.defineESModuleGetters(this, {
@@ -24,7 +24,7 @@ index d1ab42d59f05513ec60a7578b7acab44875c544c..8c3cd75704991b8572d3f13a936fddd2
if (backDisabled) {
backCommand.removeAttribute("disabled");
} else {
@@ -3715,7 +3721,7 @@ function warnAboutClosingWindow() {
@@ -3719,7 +3725,7 @@ function warnAboutClosingWindow() {
if (!isPBWindow && !toolbar.visible) {
return gBrowser.warnAboutClosingTabs(
@@ -33,7 +33,7 @@ index d1ab42d59f05513ec60a7578b7acab44875c544c..8c3cd75704991b8572d3f13a936fddd2
gBrowser.closingTabsEnum.ALL
);
}
@@ -3755,7 +3761,7 @@ function warnAboutClosingWindow() {
@@ -3759,7 +3765,7 @@ function warnAboutClosingWindow() {
return (
isPBWindow ||
gBrowser.warnAboutClosingTabs(
@@ -42,7 +42,7 @@ index d1ab42d59f05513ec60a7578b7acab44875c544c..8c3cd75704991b8572d3f13a936fddd2
gBrowser.closingTabsEnum.ALL
)
);
@@ -3780,7 +3786,7 @@ function warnAboutClosingWindow() {
@@ -3784,7 +3790,7 @@ function warnAboutClosingWindow() {
AppConstants.platform != "macosx" ||
isPBWindow ||
gBrowser.warnAboutClosingTabs(
@@ -51,13 +51,20 @@ index d1ab42d59f05513ec60a7578b7acab44875c544c..8c3cd75704991b8572d3f13a936fddd2
gBrowser.closingTabsEnum.ALL
)
);
@@ -4720,6 +4726,9 @@ var ConfirmationHint = {
@@ -4744,6 +4750,16 @@ var ConfirmationHint = {
}
document.l10n.setAttributes(this._message, messageId, options.l10nArgs);
document.l10n.setAttributes(this._message, messageId, l10nArgs);
+ if (window.gZenUIManager?.showToast) {
+ return window.gZenUIManager.showToast(messageId, options);
+ return window.gZenUIManager.showToast(messageId, {
+ hideCheckmark,
+ descriptionId,
+ l10nArgs,
+ showDescription,
+ position,
+ event,
+ });
+ }
if (options.descriptionId) {
document.l10n.setAttributes(this._description, options.descriptionId);
if (descriptionId) {
document.l10n.setAttributes(this._description, descriptionId);
this._description.hidden = false;

View File

@@ -1,8 +1,8 @@
diff --git a/browser/base/content/browser-places.js b/browser/base/content/browser-places.js
index e3feaebc551bfe7127b9701a7f76996022516af0..460b39f2a9f1f36d4b821c693951214098b644f7 100644
index b04e9afe4041b9bcd62527a22f468b84bf0de5d9..9e20e5a9d58fb6752037708f3d1404e00c98b132 100644
--- a/browser/base/content/browser-places.js
+++ b/browser/base/content/browser-places.js
@@ -261,6 +261,8 @@ var StarUI = {
@@ -262,6 +262,8 @@ var StarUI = {
});
}
@@ -11,7 +11,7 @@ index e3feaebc551bfe7127b9701a7f76996022516af0..460b39f2a9f1f36d4b821c6939512140
let onPanelReady = fn => {
let target = this.panel;
if (target.parentNode) {
@@ -312,6 +314,21 @@ var StarUI = {
@@ -313,6 +315,21 @@ var StarUI = {
}
},
@@ -33,7 +33,7 @@ index e3feaebc551bfe7127b9701a7f76996022516af0..460b39f2a9f1f36d4b821c6939512140
removeBookmarkButtonCommand: function SU_removeBookmarkButtonCommand() {
this._removeBookmarksOnPopupHidden = true;
this.panel.hidePopup();
@@ -1815,6 +1832,7 @@ var BookmarkingUI = {
@@ -1841,6 +1858,7 @@ var BookmarkingUI = {
document.getElementById("context-bookmarkpage"),
PanelMultiView.getViewNode(document, "panelMenuBookmarkThisPage"),
document.getElementById("pageAction-panel-bookmark"),

View File

@@ -1,5 +1,5 @@
diff --git a/browser/base/content/browser-profiles.js b/browser/base/content/browser-profiles.js
index fb260896c14b90734182d2f232e33350287f0209..9984a2d18dfd33e3606adac0e8c5f80f7e35e682 100644
index 35a5fd0c320cdf3cdf42442881d71e5ee6dc865d..6ef175f27c614f74ad32ecefb2854e3b9fc01d13 100644
--- a/browser/base/content/browser-profiles.js
+++ b/browser/base/content/browser-profiles.js
@@ -70,6 +70,7 @@ var gProfiles = {

View File

@@ -1,8 +1,8 @@
diff --git a/browser/base/content/browser-sets.inc.xhtml b/browser/base/content/browser-sets.inc.xhtml
index 1263856344c4613ea58639a64e747fd0c3f771f7..c83ed7dd6a2482354c5bd37ce2e2cbf88ee6cf60 100644
index 65ee617216d8a69f29b06fb48078f53a42bd9da7..3373d1a44281496555ab5a256020dd16afa4b823 100644
--- a/browser/base/content/browser-sets.inc.xhtml
+++ b/browser/base/content/browser-sets.inc.xhtml
@@ -418,3 +418,4 @@
@@ -420,3 +420,4 @@
internal="true"/>
#endif
</keyset>

View File

@@ -1,5 +1,5 @@
diff --git a/browser/base/content/browser-siteIdentity.js b/browser/base/content/browser-siteIdentity.js
index cff28e1cdb550357662e8a7a41856e80b1de0018..9d569c1a1e6249c58a1e30fbb224c316c52ef204 100644
index c6d060853cd3dab9d5c02bdc8de707b8fbde4b6d..bb3856be183f815f105a1175b71ee9b3a61c2f65 100644
--- a/browser/base/content/browser-siteIdentity.js
+++ b/browser/base/content/browser-siteIdentity.js
@@ -464,11 +464,6 @@ var gIdentityHandler = {
@@ -14,7 +14,7 @@ index cff28e1cdb550357662e8a7a41856e80b1de0018..9d569c1a1e6249c58a1e30fbb224c316
let baseDomain = SiteDataManager.getBaseDomainFromHost(this._uri.host);
if (SiteDataManager.promptSiteDataRemoval(window, [baseDomain])) {
@@ -853,7 +848,7 @@ var gIdentityHandler = {
@@ -860,7 +855,7 @@ var gIdentityHandler = {
// This is a secure internal Firefox page.
this._identityBox.className = "chromeUI";
let brandBundle = document.getElementById("bundle_brand");
@@ -23,7 +23,7 @@ index cff28e1cdb550357662e8a7a41856e80b1de0018..9d569c1a1e6249c58a1e30fbb224c316
} else if (this._pageExtensionPolicy) {
// This is a WebExtension page.
this._identityBox.className = "extensionPage";
@@ -1196,6 +1191,12 @@ var gIdentityHandler = {
@@ -1198,6 +1193,12 @@ var gIdentityHandler = {
}
}

View File

@@ -1,8 +1,8 @@
diff --git a/browser/base/content/main-popupset.inc.xhtml b/browser/base/content/main-popupset.inc.xhtml
index 81b3d0a744b9f40358219696e0e52a8114c53e83..71eb93e50f19af1d8f44fb425970cc87416c84a3 100644
index ded45fd53f0fd7f0a48283d61cffdda20f79137e..7fc34d89146b723cb01a1432bc1d1fe97e5d2eba 100644
--- a/browser/base/content/main-popupset.inc.xhtml
+++ b/browser/base/content/main-popupset.inc.xhtml
@@ -235,6 +235,10 @@
@@ -234,6 +234,10 @@
hidden="true"
tabspecific="true"
aria-labelledby="editBookmarkPanelTitle">
@@ -13,7 +13,7 @@ index 81b3d0a744b9f40358219696e0e52a8114c53e83..71eb93e50f19af1d8f44fb425970cc87
<box class="panel-header">
<html:h1>
<html:span id="editBookmarkPanelTitle"/>
@@ -260,6 +264,7 @@
@@ -259,6 +263,7 @@
class="footer-button"/>
</html:moz-button-group>
</vbox>
@@ -21,7 +21,7 @@ index 81b3d0a744b9f40358219696e0e52a8114c53e83..71eb93e50f19af1d8f44fb425970cc87
</panel>
</html:template>
@@ -699,6 +704,8 @@
@@ -765,6 +770,8 @@
#include popup-notifications.inc.xhtml

View File

@@ -1,13 +1,13 @@
diff --git a/browser/base/content/navigator-toolbox.inc.xhtml b/browser/base/content/navigator-toolbox.inc.xhtml
index b4abfb868fc7c13e789acb57b44e386de6d31bf0..ad917f5362ed4f3ba0149c214fb53d3f087bbfcf 100644
index e7e94e13a990c154fb54bda4a3420ca00bdac009..8253b7d403734973729a5982cceafc12bab24f54 100644
--- a/browser/base/content/navigator-toolbox.inc.xhtml
+++ b/browser/base/content/navigator-toolbox.inc.xhtml
@@ -2,7 +2,7 @@
# 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/.
-<toolbox id="navigator-toolbox">
+<toolbox id="navigator-toolbox" persist="width style">
-<toolbox id="navigator-toolbox" class="chrome-block">
+<toolbox id="navigator-toolbox" class="chrome-block" persist="width style">
<script src="chrome://browser/content/navigator-toolbox.js" />
<!-- Menu -->

View File

@@ -1,5 +1,5 @@
diff --git a/browser/base/content/navigator-toolbox.js b/browser/base/content/navigator-toolbox.js
index 1982ebadbd2df5ea309db487a4f30288f1af43e5..926c681d4733c84768a23407d60ca05859408b6d 100644
index 10faff18ca0c6df472de81b5dbdba83309fa2eb8..b675df9ad22150f5a1060dedbabf6cb27c951619 100644
--- a/browser/base/content/navigator-toolbox.js
+++ b/browser/base/content/navigator-toolbox.js
@@ -10,7 +10,7 @@ ChromeUtils.defineESModuleGetters(this, {
@@ -37,15 +37,15 @@ index 1982ebadbd2df5ea309db487a4f30288f1af43e5..926c681d4733c84768a23407d60ca058
case "back-button":
case "forward-button":
case "reload-button":
@@ -329,6 +341,7 @@ document.addEventListener(
@@ -331,6 +343,7 @@ document.addEventListener(
#downloads-button,
#fxa-toolbar-menu-button,
#unified-extensions-button,
+ #zen-site-data-icon-button,
#library-button,
#ipprotection-button,
#split-view-button,
#smartwindow-ask-button
@@ -413,6 +426,16 @@ document.addEventListener(
@@ -416,6 +429,16 @@ document.addEventListener(
gUnifiedExtensions.togglePanel(event);
break;

View File

@@ -1,8 +1,8 @@
diff --git a/browser/base/content/nsContextMenu.sys.mjs b/browser/base/content/nsContextMenu.sys.mjs
index 97cb36e2ed48d00454e169fb0470b47ac994b883..1811a92885620c8a916937f467ebb7d0eb0d3a0e 100644
index a9173d534626f18adcbfe570cbcdc0cd929cc31d..e09340242048a21ce6b3bd4d26bedc606354235e 100644
--- a/browser/base/content/nsContextMenu.sys.mjs
+++ b/browser/base/content/nsContextMenu.sys.mjs
@@ -369,6 +369,9 @@ export class nsContextMenu {
@@ -373,6 +373,9 @@ export class nsContextMenu {
this.initTextFragmentItems();
this.pdfjsContextMenu.initItems();

View File

@@ -35,6 +35,7 @@
<command id="cmd_zenToggleTabsOnRight" />
<command id="cmd_zenReplacePinnedUrlWithCurrent" />
<command id="cmd_zenEditPinnedUrl" />
<command id="cmd_contextZenAddToEssentials" />
<command id="cmd_contextZenRemoveFromEssentials" />

View File

@@ -14,7 +14,7 @@
<hbox id="PanelUI-zen-emojis-picker-pages">
<vbox emojis="true">
<hbox id="PanelUI-zen-emojis-picker-header">
<html:input type="search" id="PanelUI-zen-emojis-picker-search" placeholder="Search emojis" />
<html:input type="search" id="PanelUI-zen-emojis-picker-search" data-l10n-id="zen-emojis-picker-search" />
</hbox>
<hbox id="PanelUI-zen-emojis-picker-list" />
</vbox>

View File

@@ -3,7 +3,7 @@
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
<panel id="zen-folder-tabs-popup"
nonnativepopover="true"
nonnative=""
type="arrow"
orient="vertical"
side="left"

View File

@@ -1,8 +1,8 @@
diff --git a/browser/base/jar.mn b/browser/base/jar.mn
index 7eaca95f7e876809552da5a3af3449b7e7b1a34d..00f1e3047c59565c8830a40da3a85f3b228f7c93 100644
index dd0f873535224344c8015d00a00d56e0b9392951..fcc013514836f2e26ea5c4cef2aa443f0368a3e6 100644
--- a/browser/base/jar.mn
+++ b/browser/base/jar.mn
@@ -110,3 +110,5 @@ browser.jar:
@@ -108,3 +108,5 @@ browser.jar:
# L10n resources and overrides.
% override chrome://global/locale/appstrings.properties chrome://browser/locale/appstrings.properties

View File

@@ -1,8 +1,8 @@
diff --git a/browser/base/moz.build b/browser/base/moz.build
index 286e17552e2ab2d7e44c6ba99c84630cadd24e94..076f813aea971db1e1c1429fc0b64c1784a22722 100644
index 33b90b64e2773efdb0376779907b6ef7125c0fff..8446118edb56260a59115b048dde087a50805a62 100644
--- a/browser/base/moz.build
+++ b/browser/base/moz.build
@@ -78,3 +78,5 @@ DEFINES["MOZ_APP_VERSION_DISPLAY"] = CONFIG["MOZ_APP_VERSION_DISPLAY"]
@@ -79,3 +79,5 @@ DEFINES["MOZ_APP_VERSION_DISPLAY"] = CONFIG["MOZ_APP_VERSION_DISPLAY"]
DEFINES["APP_LICENSE_BLOCK"] = "%s/content/overrides/app-license.html" % SRCDIR
JAR_MANIFESTS += ["jar.mn"]

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/BrowserContentHandler.sys.mjs b/browser/components/BrowserContentHandler.sys.mjs
index 430c6877c81824d8ab318cacc997d4eda4cb6a11..e8a195e1fe09952b90a0d73d13c6c15da2006bd4 100644
index 4bfb4199dafac004486dfc61db954173742a010a..542c156432b9d7c2190c0d14ce9cfd09814422bf 100644
--- a/browser/components/BrowserContentHandler.sys.mjs
+++ b/browser/components/BrowserContentHandler.sys.mjs
@@ -603,6 +603,28 @@ nsBrowserContentHandler.prototype = {

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/BrowserGlue.sys.mjs b/browser/components/BrowserGlue.sys.mjs
index af635211046f9f1b2d473a14e8170837cd0d93cd..f07514a7e3ab55aa3321f0a7c0c092e91c2961ce 100644
index d07aaa3fbb8ccb02ae00d845649dc9c1d623cba5..68d3a4800f14fef5b5e7df9cd9afe3bc85358bed 100644
--- a/browser/components/BrowserGlue.sys.mjs
+++ b/browser/components/BrowserGlue.sys.mjs
@@ -8,6 +8,7 @@ import { XPCOMUtils } from "resource://gre/modules/XPCOMUtils.sys.mjs";

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/aboutlogins/content/aboutLogins.html b/browser/components/aboutlogins/content/aboutLogins.html
index ca69defe40c57704ab6ec331ce11c95a98b03e8f..bc5be4555adbe3389bceee0f01730ee57f1e69ef 100644
index 9bbf5e69b17139d5063977334a869db090af3de1..9778bf2843afbb60b470ee637534946e6f7917a8 100644
--- a/browser/components/aboutlogins/content/aboutLogins.html
+++ b/browser/components/aboutlogins/content/aboutLogins.html
@@ -6,7 +6,7 @@

View File

@@ -1,20 +1,20 @@
diff --git a/browser/components/aboutwelcome/content/aboutwelcome.css b/browser/components/aboutwelcome/content/aboutwelcome.css
index 98497769b135efd3200607ee2cf50e82d06ed3fd..68e0778cfc4dc70935a3d48e79542b4133b293d2 100644
index 4a568479995c43ec2801c5b2f9452610923233ed..857a4a0ed78f3d374ed45fc4ff73e8e51dfbc2b9 100644
--- a/browser/components/aboutwelcome/content/aboutwelcome.css
+++ b/browser/components/aboutwelcome/content/aboutwelcome.css
@@ -330,6 +330,11 @@ panel#feature-callout {
--panel-shadow-margin: 6px;
--panel-arrow-space: calc(var(--panel-shadow-margin) + var(--arrow-visible-height) - 1.5px);
--panel-margin-offset: calc(-1 * (var(--panel-shadow-margin) + var(--arrow-corner-distance) + (var(--arrow-width) / 2)));
--panel-box-shadow-margin: 6px;
--panel-arrow-space: calc(var(--panel-box-shadow-margin) + var(--arrow-visible-height) - 1.5px);
--panel-margin-offset: calc(-1 * (var(--panel-box-shadow-margin) + var(--arrow-corner-distance) + (var(--arrow-width) / 2)));
+
+ @media -moz-pref("widget.macos.native-popovers") and (-moz-platform: macos) {
+ --panel-shadow-margin: 0;
+ --panel-box-shadow-margin: 0;
+ --panel-arrow-space: 0;
+ }
}
panel#feature-callout::part(content) {
@@ -517,6 +522,12 @@ div#feature-callout.hidden {
@@ -518,6 +523,12 @@ div#feature-callout.hidden {
width: 25em;
gap: 16px;
background: var(--fc-background);
@@ -27,7 +27,7 @@ index 98497769b135efd3200607ee2cf50e82d06ed3fd..68e0778cfc4dc70935a3d48e79542b41
}
#feature-callout .screen[pos=callout] .section-main .main-content .main-content-inner {
gap: 12px;
@@ -933,6 +944,10 @@ panel#feature-callout::part(content) {
@@ -934,6 +945,10 @@ panel#feature-callout::part(content) {
overflow: visible;
transform: rotate(45deg);
transform-style: preserve-3d;

View File

@@ -1,12 +1,12 @@
diff --git a/browser/components/aiwindow/ui/modules/AIWindow.sys.mjs b/browser/components/aiwindow/ui/modules/AIWindow.sys.mjs
index 97710ab0570a1a477ef4ed74a78c16448dfb7674..7d8ba5b1f2f330175fb57b906bb572fd7e1d36c8 100644
index 88c3545431cf1a300d968c296d9b171871b15fe5..754cd644f2e7b82db40d5c06618ac1764424484c 100644
--- a/browser/components/aiwindow/ui/modules/AIWindow.sys.mjs
+++ b/browser/components/aiwindow/ui/modules/AIWindow.sys.mjs
@@ -277,6 +277,7 @@ export const AIWindow = {
@@ -308,6 +308,7 @@ export const AIWindow = {
},
_updateToolbarButtonPositions(win, { isToggling = false } = {}) {
_updateToolbarButtonPositions(win) {
+ return;
const modeSwitcherButton = win.document.getElementById("ai-window-toggle");
const hamburgerMenu = win.document.getElementById("PanelUI-button");
const hamburgerMenuShouldBeAdjacent =

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/asrouter/modules/FeatureCallout.sys.mjs b/browser/components/asrouter/modules/FeatureCallout.sys.mjs
index f176498a3130b61ac5e75fce8208d1b9eaf13f81..d133526ab5bf3db53e459c36d5f9a7ff37ef972f 100644
index c4638d2d557f05fa6638cd379be8e0076336f8dc..2e25f485aa94485d12ca9e98aa4eaf56a06cf1f8 100644
--- a/browser/components/asrouter/modules/FeatureCallout.sys.mjs
+++ b/browser/components/asrouter/modules/FeatureCallout.sys.mjs
@@ -778,6 +778,7 @@ export class FeatureCallout {

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/customizableui/CustomizableUI.sys.mjs b/browser/components/customizableui/CustomizableUI.sys.mjs
index 5905271a3343efa04b45f5d1a63bfca3de342755..37f57de0ad72271d4c6e188ab9841b23b95f08d0 100644
index d5d4596739cde5d3d49d6294867f5da122c526b8..c206cfb374542c496be9bf0305a0a80bbcf503b2 100644
--- a/browser/components/customizableui/CustomizableUI.sys.mjs
+++ b/browser/components/customizableui/CustomizableUI.sys.mjs
@@ -13,6 +13,7 @@ ChromeUtils.defineESModuleGetters(lazy, {
@@ -120,7 +120,7 @@ index 5905271a3343efa04b45f5d1a63bfca3de342755..37f57de0ad72271d4c6e188ab9841b23
* The identifier string of the area that aNode is being inserted into.
*/
insertWidgetBefore(aNode, aNextNode, aContainer, aAreaId) {
+ if (aAreaId === CustomizableUI.AREA_NAVBAR && aNode.ownerGlobal.gZenVerticalTabsManager._hasSetSingleToolbar) {
+ if (aAreaId === CustomizableUI.AREA_NAVBAR && aNode.documentGlobal.gZenVerticalTabsManager._hasSetSingleToolbar) {
+ aContainer = aNode.ownerDocument.getElementById("zen-sidebar-top-buttons-customization-target");
+ aAreaId = "zen-sidebar-top-buttons";
+ }
@@ -139,7 +139,7 @@ index 5905271a3343efa04b45f5d1a63bfca3de342755..37f57de0ad72271d4c6e188ab9841b23
@@ -4573,7 +4571,7 @@ var CustomizableUIInternal = {
if (area.get("type") == CustomizableUI.TYPE_TOOLBAR) {
let defaultCollapsed = area.get("defaultCollapsed");
let win = areaNode.ownerGlobal;
let win = areaNode.documentGlobal;
- if (defaultCollapsed !== null) {
+ if (defaultCollapsed !== null && !zenDontRebuildCollapsed) {
win.setToolbarVisibility(
@@ -186,7 +186,7 @@ index 5905271a3343efa04b45f5d1a63bfca3de342755..37f57de0ad72271d4c6e188ab9841b23
});
lazy.log.debug(
@@ -7930,7 +7931,37 @@ class OverflowableToolbar {
@@ -7930,7 +7931,39 @@ class OverflowableToolbar {
Math.max(targetWidth, targetChildrenWidth)
);
totalAvailWidth = Math.ceil(totalAvailWidth);
@@ -194,6 +194,8 @@ index 5905271a3343efa04b45f5d1a63bfca3de342755..37f57de0ad72271d4c6e188ab9841b23
+ if (this.#target.id == 'nav-bar-customization-target' &&
+ win.gZenVerticalTabsManager._hasSetSingleToolbar &&
+ Services.prefs.getBoolPref("zen.view.overflow-webext-toolbar", true) &&
+ !win.document.documentElement.hasAttribute("zen-creating-workspace") &&
+ !win.document.documentElement.hasAttribute("inDOMFullscreen") &&
+ !win.gURLBar.hasAttribute("breakout-extend")) {
+ const availSelectors = ":is(#page-action-buttons, #zen-copy-url-button, .unified-extensions-item, .urlbar-addon-page-action)";
+ const width = [
@@ -225,7 +227,7 @@ index 5905271a3343efa04b45f5d1a63bfca3de342755..37f57de0ad72271d4c6e188ab9841b23
return { isOverflowing, targetContentWidth, totalAvailWidth };
}
@@ -7991,7 +8022,11 @@ class OverflowableToolbar {
@@ -7991,7 +8024,11 @@ class OverflowableToolbar {
return;
}
}
@@ -238,7 +240,7 @@ index 5905271a3343efa04b45f5d1a63bfca3de342755..37f57de0ad72271d4c6e188ab9841b23
lazy.log.debug(
`Need ${minSize} but width is ${totalAvailWidth} so bailing`
);
@@ -8024,7 +8059,7 @@ class OverflowableToolbar {
@@ -8024,7 +8061,7 @@ class OverflowableToolbar {
}
}
if (!inserted) {
@@ -247,7 +249,7 @@ index 5905271a3343efa04b45f5d1a63bfca3de342755..37f57de0ad72271d4c6e188ab9841b23
}
child.removeAttribute("cui-anchorid");
child.removeAttribute("overflowedItem");
@@ -8150,6 +8185,9 @@ class OverflowableToolbar {
@@ -8150,6 +8187,9 @@ class OverflowableToolbar {
* if no such list exists.
*/
get #webExtList() {
@@ -257,8 +259,8 @@ index 5905271a3343efa04b45f5d1a63bfca3de342755..37f57de0ad72271d4c6e188ab9841b23
if (!this.#webExtListRef) {
let targetID = this.#toolbar.getAttribute("addon-webext-overflowtarget");
if (!targetID) {
@@ -8161,6 +8199,9 @@ class OverflowableToolbar {
let win = this.#toolbar.ownerGlobal;
@@ -8161,6 +8201,9 @@ class OverflowableToolbar {
let win = this.#toolbar.documentGlobal;
let { panel } = win.gUnifiedExtensions;
this.#webExtListRef = panel.querySelector(`#${targetID}`);
+ if (!this.#webExtListRef) {
@@ -267,7 +269,7 @@ index 5905271a3343efa04b45f5d1a63bfca3de342755..37f57de0ad72271d4c6e188ab9841b23
}
return this.#webExtListRef;
}
@@ -8369,7 +8410,7 @@ class OverflowableToolbar {
@@ -8369,7 +8412,7 @@ class OverflowableToolbar {
break;
}
case "mousedown": {

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/customizableui/CustomizeMode.sys.mjs b/browser/components/customizableui/CustomizeMode.sys.mjs
index e72ff7eab14f66ff4454850930a1d7266b3acefa..1a5d9c63b8942e8c20e9f91b82b5b11647b12ecc 100644
index 25eb66b96a30c86e08376577f4636e159a02c76e..9b997ab559ddade67a7390539b3b4f9275c27a20 100644
--- a/browser/components/customizableui/CustomizeMode.sys.mjs
+++ b/browser/components/customizableui/CustomizeMode.sys.mjs
@@ -503,7 +503,7 @@ export class CustomizeMode {

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/customizableui/ToolbarContextMenu.sys.mjs b/browser/components/customizableui/ToolbarContextMenu.sys.mjs
index d5fd707b98e4b163a624c97ff4a8f2574e0b0180..b5d7e84c3567e83b95a6493e8333d3036dc88f36 100644
index c3803a5d759eefb728fc0ec86af282bb5e2d5cc1..e4bc4242e05d28603f324133f338273fd76ee0b3 100644
--- a/browser/components/customizableui/ToolbarContextMenu.sys.mjs
+++ b/browser/components/customizableui/ToolbarContextMenu.sys.mjs
@@ -183,7 +183,7 @@ export var ToolbarContextMenu = {

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/customizableui/content/panelUI.inc.xhtml b/browser/components/customizableui/content/panelUI.inc.xhtml
index 6cb22be6526b17d952a90fd414c49a31e9afde7a..84f8156e88027a79a40f14c77c83d6a2d19c8a72 100644
index 5c248c0d49f3d9378260230c24ab60a4157dc438..1e87a1d040ed82c7edfb31f9e5853a4fb299b503 100644
--- a/browser/components/customizableui/content/panelUI.inc.xhtml
+++ b/browser/components/customizableui/content/panelUI.inc.xhtml
@@ -139,7 +139,7 @@

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/customizableui/content/panelUI.js b/browser/components/customizableui/content/panelUI.js
index 5a469ce153dada011144fb4b66747c41e778ff1e..83bedb74df5b4064e8a0580f8b2ee9c0c27f81a8 100644
index 140ea6eddd0d0c6817bbaabf2dc00083eaa11b13..0fe33867cf64d02b2b6e6db8b6844a4ea044ad33 100644
--- a/browser/components/customizableui/content/panelUI.js
+++ b/browser/components/customizableui/content/panelUI.js
@@ -666,10 +666,12 @@ const PanelUI = {

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/extensions/parent/ext-browser.js b/browser/components/extensions/parent/ext-browser.js
index d1209bc2c828a19ade8cc027cdea6f42007f0de6..0a2def2f3c32618304cd8a263906b0c6e040dcbc 100644
index 91adc6bc3649af47745818e6f9d00cbbdffc35a5..e221b077dbfbe20c8696732f003bd5809d761a02 100644
--- a/browser/components/extensions/parent/ext-browser.js
+++ b/browser/components/extensions/parent/ext-browser.js
@@ -352,6 +352,7 @@ class TabTracker extends TabTrackerBase {
@@ -362,6 +362,7 @@ class TabTracker extends TabTrackerBase {
}
getId(nativeTab) {
@@ -10,15 +10,15 @@ index d1209bc2c828a19ade8cc027cdea6f42007f0de6..0a2def2f3c32618304cd8a263906b0c6
let id = this._tabs.get(nativeTab);
if (id) {
return id;
@@ -386,6 +387,7 @@ class TabTracker extends TabTrackerBase {
if (nativeTab.ownerGlobal.closed) {
@@ -395,6 +396,7 @@ class TabTracker extends TabTrackerBase {
if (nativeTab.documentGlobal.closed) {
throw new Error("Cannot attach ID to a tab in a closed window.");
}
+ if (nativeTab.hasAttribute("zen-empty-tab")) return;
this._tabs.set(nativeTab, id);
if (nativeTab.linkedBrowser) {
@@ -1276,6 +1278,10 @@ class TabManager extends TabManagerBase {
this._tabIds.set(id, nativeTab);
@@ -1262,6 +1264,10 @@ class TabManager extends TabManagerBase {
}
canAccessTab(nativeTab) {
@@ -27,5 +27,5 @@ index d1209bc2c828a19ade8cc027cdea6f42007f0de6..0a2def2f3c32618304cd8a263906b0c6
+ }
+
// Check private browsing access at browser window level.
if (!this.extension.canAccessWindow(nativeTab.ownerGlobal)) {
if (!this.extension.canAccessWindow(nativeTab.documentGlobal)) {
return false;

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/extensions/parent/ext-tabs.js b/browser/components/extensions/parent/ext-tabs.js
index 636e0f8cd1d489658833cf101152576e9fdb52af..e7578a059504b89a852061be037c323a107fe5ce 100644
index f342748d4b680a5de3a8b7c90df79f7c380b9e1c..65091cf370e00a580ae2cb1fad9cde76f10c8bd9 100644
--- a/browser/components/extensions/parent/ext-tabs.js
+++ b/browser/components/extensions/parent/ext-tabs.js
@@ -514,6 +514,7 @@ this.tabs = class extends ExtensionAPIPersistent {
@@ -438,6 +438,7 @@ this.tabs = class extends ExtensionAPIPersistent {
}
let tab = tabManager.getWrapper(updatedTab);
@@ -10,11 +10,11 @@ index 636e0f8cd1d489658833cf101152576e9fdb52af..e7578a059504b89a852061be037c323a
let changeInfo = {};
for (let prop of needed) {
@@ -883,6 +884,7 @@ this.tabs = class extends ExtensionAPIPersistent {
@@ -806,6 +807,7 @@ this.tabs = class extends ExtensionAPIPersistent {
});
}
+ window.gZenCompactModeManager._nextTimeWillBeActive = active;
let nativeTab = window.gBrowser.addTab(url, options);
tabTracker.addTabReadyBlocker(nativeTab);
if (active) {

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/places/PlacesUIUtils.sys.mjs b/browser/components/places/PlacesUIUtils.sys.mjs
index b21f7721dea2d485ccba1fd6fd7e65e17480e3d3..89048d9ea2b4edf2b0cab77f661c07f4d9453c3f 100644
index 7c11a2004c87aa6f0c61cf05ca522c7471c7be71..0f92f9925221cadbd258402f1b6a86a71fdb42e9 100644
--- a/browser/components/places/PlacesUIUtils.sys.mjs
+++ b/browser/components/places/PlacesUIUtils.sys.mjs
@@ -61,6 +61,7 @@ class BookmarkState {
@@ -157,12 +157,3 @@ index b21f7721dea2d485ccba1fd6fd7e65e17480e3d3..89048d9ea2b4edf2b0cab77f661c07f4
/**
* Append transactions to update tags by given information.
*
@@ -915,7 +1024,7 @@ export var PlacesUIUtils = {
aNode,
aWhere,
aWindow,
- { aPrivate = false, userContextId = 0 } = {}
+ { aPrivate = false, userContextId = undefined } = {}
) {
if (
aNode &&

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/places/content/browserPlacesViews.js b/browser/components/places/content/browserPlacesViews.js
index 463913926c58e6c622e0fcc60534921f02814829..0143c48c48e132464226db810f4ea4d2720c3c49 100644
index 229e7960fc461475426b538f3a5fdc134a99ebcf..22b0eb8e23fc56cd4d8892e3ecebe389ea00ce1f 100644
--- a/browser/components/places/content/browserPlacesViews.js
+++ b/browser/components/places/content/browserPlacesViews.js
@@ -328,12 +328,23 @@ class PlacesViewBase {
@@ -343,12 +343,23 @@ class PlacesViewBase {
this._cleanPopup(aPopup);
@@ -29,7 +29,7 @@ index 463913926c58e6c622e0fcc60534921f02814829..0143c48c48e132464226db810f4ea4d2
this._insertNewItemToPopup(child, fragment);
}
aPopup.insertBefore(fragment, aPopup._endMarker);
@@ -391,6 +402,7 @@ class PlacesViewBase {
@@ -406,6 +417,7 @@ class PlacesViewBase {
"scheme",
PlacesUIUtils.guessUrlSchemeForUI(aPlacesNode.uri)
);
@@ -37,7 +37,7 @@ index 463913926c58e6c622e0fcc60534921f02814829..0143c48c48e132464226db810f4ea4d2
} else if (PlacesUtils.containerTypes.includes(type)) {
element = document.createXULElement("menu");
element.setAttribute("container", "true");
@@ -1058,25 +1070,33 @@ class PlacesToolbar extends PlacesViewBase {
@@ -1076,25 +1088,33 @@ class PlacesToolbar extends PlacesViewBase {
this._rootElt.firstChild.remove();
}
@@ -82,7 +82,7 @@ index 463913926c58e6c622e0fcc60534921f02814829..0143c48c48e132464226db810f4ea4d2
);
++startIndex;
if (elt.localName != "toolbarseparator") {
@@ -1084,15 +1104,12 @@ class PlacesToolbar extends PlacesViewBase {
@@ -1102,15 +1122,12 @@ class PlacesToolbar extends PlacesViewBase {
}
}
if (!elt) {
@@ -101,7 +101,7 @@ index 463913926c58e6c622e0fcc60534921f02814829..0143c48c48e132464226db810f4ea4d2
});
});
@@ -1102,7 +1119,7 @@ class PlacesToolbar extends PlacesViewBase {
@@ -1120,7 +1137,7 @@ class PlacesToolbar extends PlacesViewBase {
let fragment = document.createDocumentFragment();
for (let i = startIndex; i < limit; ++i) {
@@ -110,7 +110,7 @@ index 463913926c58e6c622e0fcc60534921f02814829..0143c48c48e132464226db810f4ea4d2
}
await new Promise(resolve => window.requestAnimationFrame(resolve));
if (!this._isAlive) {
@@ -1165,6 +1182,8 @@ class PlacesToolbar extends PlacesViewBase {
@@ -1183,6 +1200,8 @@ class PlacesToolbar extends PlacesViewBase {
"scheme",
PlacesUIUtils.guessUrlSchemeForUI(aChild.uri)
);
@@ -119,7 +119,7 @@ index 463913926c58e6c622e0fcc60534921f02814829..0143c48c48e132464226db810f4ea4d2
}
}
@@ -2359,7 +2378,7 @@ this.PlacesPanelview = class PlacesPanelview extends PlacesViewBase {
@@ -2395,7 +2414,7 @@ this.PlacesPanelview = class PlacesPanelview extends PlacesViewBase {
PlacesUIUtils.guessUrlSchemeForUI(placesNode.uri)
);
element.setAttribute("label", PlacesUIUtils.getBestTitle(placesNode));

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/places/content/editBookmark.js b/browser/components/places/content/editBookmark.js
index 0fb2225d0fadd27e9e7851be77f18afe7d053c80..347203d6ea9cab3cb803f28515613229b6a454b3 100644
index f5df770e7c03446c2d23664b9100e12149ea7a59..398ae5b75a27aec60341f3058310013dcf6138d6 100644
--- a/browser/components/places/content/editBookmark.js
+++ b/browser/components/places/content/editBookmark.js
@@ -387,6 +387,10 @@ var gEditItemOverlay = {
@@ -389,6 +389,10 @@ var gEditItemOverlay = {
this._keywordField.readOnly = this.readOnly;
}
@@ -13,7 +13,7 @@ index 0fb2225d0fadd27e9e7851be77f18afe7d053c80..347203d6ea9cab3cb803f28515613229
// Collapse the tag selector if the item does not accept tags.
if (showOrCollapse("tagsRow", isBookmark || bulkTagging, "tags")) {
this._initTagsField();
@@ -693,6 +697,7 @@ var gEditItemOverlay = {
@@ -702,6 +706,7 @@ var gEditItemOverlay = {
if (this._paneInfo.isBookmark) {
options.tags = this._element("tagsField").value;
options.keyword = this._keyword;
@@ -21,7 +21,7 @@ index 0fb2225d0fadd27e9e7851be77f18afe7d053c80..347203d6ea9cab3cb803f28515613229
}
if (this._paneInfo.bulkTagging) {
@@ -1178,6 +1183,9 @@ var gEditItemOverlay = {
@@ -1190,6 +1195,9 @@ var gEditItemOverlay = {
case "editBMPanel_tagsSelectorExpander":
this.toggleTagsSelector().catch(console.error);
break;
@@ -31,7 +31,7 @@ index 0fb2225d0fadd27e9e7851be77f18afe7d053c80..347203d6ea9cab3cb803f28515613229
}
break;
}
@@ -1256,6 +1264,128 @@ var gEditItemOverlay = {
@@ -1268,6 +1276,128 @@ var gEditItemOverlay = {
get bookmarkState() {
return this._bookmarkState;
},
@@ -160,7 +160,7 @@ index 0fb2225d0fadd27e9e7851be77f18afe7d053c80..347203d6ea9cab3cb803f28515613229
};
ChromeUtils.defineLazyGetter(gEditItemOverlay, "_folderTree", () => {
@@ -1294,6 +1424,9 @@ for (let elt of [
@@ -1306,6 +1436,9 @@ for (let elt of [
"locationField",
"keywordField",
"tagsField",

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/places/content/editBookmarkPanel.inc.xhtml b/browser/components/places/content/editBookmarkPanel.inc.xhtml
index 40366677b60123c66bf0739d1b2374b423d3061c..a2774e99726407d95011126ea2a272f08eaf0961 100644
index eb23018327ff6eef7c28683d695bcf610fcc87d2..6627c4b5594d440527208236f784365b06a79411 100644
--- a/browser/components/places/content/editBookmarkPanel.inc.xhtml
+++ b/browser/components/places/content/editBookmarkPanel.inc.xhtml
@@ -12,14 +12,15 @@
@@ -20,7 +20,7 @@ index 40366677b60123c66bf0739d1b2374b423d3061c..a2774e99726407d95011126ea2a272f0
<label data-l10n-id="bookmark-overlay-location-2"
class="editBMPanel_folderRow hideable"
control="editBMPanel_folderMenuList"/>
@@ -47,7 +48,25 @@
@@ -49,7 +50,25 @@
class="expander-down panel-button"
data-l10n-id="bookmark-overlay-folders-expander2"/>
</hbox>

View File

@@ -0,0 +1,20 @@
diff --git a/browser/components/preferences/config/account-sync.mjs b/browser/components/preferences/config/account-sync.mjs
index b503987a08e2ce64bfc01c4e3a21e5e19ef834f0..b1c03a0b219fd3eddd93c1deaeb18ab79c85f168 100644
--- a/browser/components/preferences/config/account-sync.mjs
+++ b/browser/components/preferences/config/account-sync.mjs
@@ -42,6 +42,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.spaces", type: "bool" },
]);
/**
@@ -546,6 +547,7 @@ const SYNC_ENGINE_SETTINGS = [
type: "payments",
},
{ id: "syncAddons", pref: "services.sync.engine.addons", type: "addons" },
+ { id: "syncSpaces", pref: "services.sync.engine.spaces", type: "workspaces" },
{ id: "syncSettings", pref: "services.sync.engine.prefs", type: "settings" },
];

View File

@@ -6,7 +6,7 @@ index 64aa0d98a0622c01f3dcfff1a04bfcda368354d2..2013e04b0881ad2295d6897b91e1573c
{ id: "services.sync.engine.passwords", type: "bool" },
{ id: "services.sync.engine.addresses", type: "bool" },
{ id: "services.sync.engine.creditcards", type: "bool" },
+ { id: "services.sync.engine.workspaces", type: "bool" },
+ { id: "services.sync.engine.spaces", type: "bool" },
]);
let gSyncChooseWhatToSync = {

View File

@@ -20,7 +20,7 @@ index a893c5ec3d007820d98f5d92dd039640faa2c181..9cbd00102e44ccf98b37845474d92d57
+ <html:div class="sync-engine-workspaces">
+ <checkbox
+ data-l10n-id="sync-engine-workspaces"
+ preference="services.sync.engine.workspaces"
+ preference="services.sync.engine.spaces"
+ />
+ </html:div>
</html:div>

View File

@@ -1,10 +1,12 @@
diff --git a/browser/components/preferences/jar.mn b/browser/components/preferences/jar.mn
index 78e38f98c1f69df31459fd4b6a119c93f6509c02..33abd46566146272da9f561e11ffa290d7000111 100644
index aec7888f59eeb5dbffc62b861fe223159ac42586..a593f3015469c11c762ae01465964251a77ddb45 100644
--- a/browser/components/preferences/jar.mn
+++ b/browser/components/preferences/jar.mn
@@ -54,3 +54,5 @@ browser.jar:
content/browser/preferences/widgets/sync-device-name.mjs (widgets/sync-device-name/sync-device-name.mjs)
content/browser/preferences/widgets/sync-engines-list.mjs (widgets/sync-engine-list/sync-engines-list.mjs)
@@ -69,5 +69,7 @@ browser.jar:
content/browser/preferences/widgets/sync-engines-list.css (widgets/sync-engine-list/sync-engines-list.css)
content/browser/preferences/widgets/update-information.mjs (widgets/update-information/update-information.mjs)
content/browser/preferences/widgets/update-information.css (widgets/update-information/update-information.css)
+
+ content/browser/preferences/zen-settings.js
content/browser/preferences/widgets/update-state.mjs (widgets/update-state/update-state.mjs)
content/browser/preferences/widgets/update-state.css (widgets/update-state/update-state.css)

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/preferences/main.inc.xhtml b/browser/components/preferences/main.inc.xhtml
index 6b96ff01e43087f8c609df17204441616b7013f3..df85ec789c54146b3a702169f33adf36c11b85da 100644
index f6badc31b612c9198c56bb06751e9bbc4a0dd54b..5f9eca1ad0795ac38c02449c91e9f61bf6661252 100644
--- a/browser/components/preferences/main.inc.xhtml
+++ b/browser/components/preferences/main.inc.xhtml
@@ -96,6 +96,7 @@
@@ -98,6 +98,7 @@
languages-customize-add.label,
" />
</hbox>

View File

@@ -1,10 +1,10 @@
diff --git a/browser/components/preferences/main.js b/browser/components/preferences/main.js
index 6f4cb34d1639ac76a6d4ca40f0d33ae6fb6bf565..1f336a09d6f2e367effdf26e8baf58b5686d252d 100644
index fcbd421c99b24e53e46131a1e21ec690814cbf4f..fe3778a57aaeebc53f7f6763ea234cbb41816186 100644
--- a/browser/components/preferences/main.js
+++ b/browser/components/preferences/main.js
@@ -2537,6 +2537,11 @@ function createStartupConfig(hidden = false) {
id: "browserRestoreSession",
l10nId: "startup-restore-windows-and-tabs",
@@ -662,6 +662,11 @@ function createStartupConfig(hidden = false) {
},
],
},
+ {
+ id: "zenWorkspaceContinueWhereLeftOff",
@@ -14,16 +14,16 @@ index 6f4cb34d1639ac76a6d4ca40f0d33ae6fb6bf565..1f336a09d6f2e367effdf26e8baf58b5
{
id: "windowsLaunchOnLogin",
l10nId: "windows-launch-on-login",
@@ -2578,7 +2583,7 @@ function createStartupConfig(hidden = false) {
@@ -709,7 +714,7 @@ function createStartupConfig(hidden = false) {
SettingGroupManager.registerGroups({
defaultBrowser: createDefaultBrowserConfig(),
startup: createStartupConfig(
- Services.prefs.getBoolPref("browser.settings-redesign.enabled", false)
- Services.prefs.getBoolPref("browser-settings-redesign.enabled", false)
+ false
),
zoom: {
l10nId: "preferences-zoom-header2",
@@ -3393,7 +3398,7 @@ function getBundleForLocales(newLocales) {
});
@@ -762,7 +767,7 @@ function getBundleForLocales(newLocales) {
])
);
return new Localization(

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/preferences/preferences.js b/browser/components/preferences/preferences.js
index 9d13733318e7a147adee1e44f96570c94f4948df..fb625d8da021dc0cebd7a14ca47446a0632e8e7a 100644
index c76a0647e14bac806d9428483bb565b3e10c31e7..2188f7808aca090f92574c7f5c55a28a9c5bb3f8 100644
--- a/browser/components/preferences/preferences.js
+++ b/browser/components/preferences/preferences.js
@@ -121,6 +121,7 @@ ChromeUtils.defineLazyGetter(this, "gSubDialog", function () {
@@ -131,6 +131,7 @@ ChromeUtils.defineLazyGetter(this, "gSubDialog", function () {
styleSheets: [
"chrome://browser/skin/preferences/dialog.css",
"chrome://browser/skin/preferences/preferences.css",
@@ -10,14 +10,44 @@ index 9d13733318e7a147adee1e44f96570c94f4948df..fb625d8da021dc0cebd7a14ca47446a0
],
resizeCallback: async ({ title, frame }) => {
// Search within main document and highlight matched keyword.
@@ -398,6 +399,10 @@ function init_all() {
@@ -437,6 +438,8 @@ const CONFIG_PANES = Object.freeze({
tabsBrowsing: {
l10nId: "tabs-browsing-section",
groupIds: [
+ "defaultBrowserHome",
+ "startupHome",
"browserLayout",
"tabs",
"pageNavigation",
@@ -483,7 +486,7 @@ function register_module(categoryName, categoryObject) {
}
this._initted = true;
let template = document.getElementById("template-" + categoryName);
- if (template && !srdSectionPrefs.all) {
+ if (template && (!srdSectionPrefs.all || categoryName.startsWith("paneZen"))) {
// Replace the template element with the nodes inside of it.
template.replaceWith(template.content);
@@ -527,6 +530,10 @@ function init_all() {
register_module("paneHome", gHomePane);
register_module("paneSearch", gSearchPane);
register_module("panePrivacy", gPrivacyPane);
register_module("paneContainers", gContainersPane);
+ register_module("paneZenLooks", gZenLooksAndFeel);
+ register_module("paneZenTabManagement", gZenWorkspacesSettings);
+ register_module("paneZenCKS", gZenCKSSettings);
+ register_module("paneZenMarketplace", gZenMarketplaceManager);
if (ExperimentAPI.labsEnabled) {
// Set hidden based on previous load's hidden value or if Nimbus is
// Restore the cached Firefox Labs nav button visibility so it shows
// immediately when recipes are expected to be available, before
@@ -656,9 +663,9 @@ async function gotoPref(
let redesignEnabled = srdSectionPrefs.all;
let categories = document.getElementById("categories");
const kDefaultCategoryInternalName = redesignEnabled
- ? "paneSync"
+ ? "paneTabsBrowsing"
: "paneGeneral";
- const kDefaultCategory = redesignEnabled ? "sync" : "general";
+ const kDefaultCategory = redesignEnabled ? "tabsBrowsing" : "general";
let hash = document.location.hash;
let category = aCategory || hash.substring(1) || kDefaultCategoryInternalName;

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/preferences/preferences.xhtml b/browser/components/preferences/preferences.xhtml
index 3c4b3225c672bcb172e7f946bc5f98d424e21e84..d10824470c564b6631333f197de897c21ccc19f5 100644
index 1b8c38159314b6edee9e6f455beb2b63db1ad3f0..1308345db640dba6b2848b49ef7c11819f9f5727 100644
--- a/browser/components/preferences/preferences.xhtml
+++ b/browser/components/preferences/preferences.xhtml
@@ -42,6 +42,8 @@
@@ -39,6 +39,8 @@
<link rel="stylesheet" href="chrome://browser/content/preferences/widgets/setting-pane.css" />
<link rel="stylesheet" href="chrome://browser/content/preferences/widgets/setting-control.css" />
@@ -11,7 +11,7 @@ index 3c4b3225c672bcb172e7f946bc5f98d424e21e84..d10824470c564b6631333f197de897c2
<link rel="localization" href="branding/brand.ftl"/>
<link rel="localization" href="browser/browser.ftl"/>
<!-- Used by fontbuilder.js -->
@@ -126,6 +128,26 @@
@@ -118,6 +120,26 @@
iconsrc="chrome://browser/skin/preferences/category-general.svg"
data-l10n-id="pane-general-title">
</html:moz-page-nav-button>
@@ -35,12 +35,12 @@ index 3c4b3225c672bcb172e7f946bc5f98d424e21e84..d10824470c564b6631333f197de897c2
+ iconsrc="chrome://mozapps/skin/extensions/category-themes.svg"
+ data-l10n-id="pane-zen-marketplace-title">
+ </html:moz-page-nav-button>
<html:moz-page-nav-button id="category-home"
view="paneHome"
iconsrc="chrome://browser/skin/home.svg"
@@ -218,6 +240,10 @@
<html:moz-page-nav-button id="category-sync"
hidden="true"
view="paneSync"
@@ -248,6 +270,10 @@
#include privacy.inc.xhtml
#include sync.inc.xhtml
#include experimental.inc.xhtml
#include moreFromMozilla.inc.xhtml
+#include zenLooksAndFeel.inc.xhtml
+#include zenKeyboardShortcuts.inc.xhtml

View File

@@ -6,7 +6,7 @@ index c379e1a5f82692406a92d9fcd3bca2769dfac5b2..af037dd3d995813d966524ac44a3795d
<image class="sync-engine-image sync-engine-prefs" alt=""/>
<label data-l10n-id="sync-currently-syncing-settings"/>
</html:div>
+ <html:div engine_preference="services.sync.engine.workspaces">
+ <html:div engine_preference="services.sync.engine.spaces">
+ <image class="sync-engine-image sync-engine-workspaces" alt=""/>
+ <label data-l10n-id="sync-currently-syncing-workspaces"/>
+ </html:div>

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/search/SearchOneOffs.sys.mjs b/browser/components/search/SearchOneOffs.sys.mjs
index 6317d8e22342bf50c82e5b526253d43406e74428..f233584b4a863309f71806cf7a3ee8e06f043429 100644
index ca79f060e2104a56b42b9d813efb3567e183153e..7936263cc7d2796e1ec20dcfd1f14b2add568a64 100644
--- a/browser/components/search/SearchOneOffs.sys.mjs
+++ b/browser/components/search/SearchOneOffs.sys.mjs
@@ -482,7 +482,7 @@ export class SearchOneOffs {
@@ -481,7 +481,7 @@ export class SearchOneOffs {
// For the search-bar, always show the one-off buttons where there is an
// option to add an engine.
let addEngineNeeded = isSearchBar && addEngines.length;

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/sessionstore/SessionStore.sys.mjs b/browser/components/sessionstore/SessionStore.sys.mjs
index 95f4960c3d8a2a4ca9bce24bcc54971877ee55ca..5bef8eeeb7cc26c930e3884e6eede6ea30f7d70a 100644
index 183543c5f29ff4c879d3058e4c09faf376a69cb7..ab482c32cc697ccef82bf0aeaa0e3a1db40aecce 100644
--- a/browser/components/sessionstore/SessionStore.sys.mjs
+++ b/browser/components/sessionstore/SessionStore.sys.mjs
@@ -129,6 +129,9 @@ const TAB_EVENTS = [
@@ -21,7 +21,7 @@ index 95f4960c3d8a2a4ca9bce24bcc54971877ee55ca..5bef8eeeb7cc26c930e3884e6eede6ea
});
ChromeUtils.defineLazyGetter(lazy, "blankURI", () => {
@@ -1291,10 +1296,7 @@ var SessionStoreInternal = {
@@ -1287,10 +1292,7 @@ var SessionStoreInternal = {
*/
get willAutoRestore() {
return (
@@ -33,7 +33,7 @@ index 95f4960c3d8a2a4ca9bce24bcc54971877ee55ca..5bef8eeeb7cc26c930e3884e6eede6ea
);
},
@@ -1970,6 +1972,9 @@ var SessionStoreInternal = {
@@ -1965,6 +1967,9 @@ var SessionStoreInternal = {
case "TabPinned":
case "TabUnpinned":
case "SwapDocShells":
@@ -43,7 +43,7 @@ index 95f4960c3d8a2a4ca9bce24bcc54971877ee55ca..5bef8eeeb7cc26c930e3884e6eede6ea
this.saveStateDelayed(win);
break;
case "TabGroupCreate":
@@ -2083,6 +2088,10 @@ var SessionStoreInternal = {
@@ -2074,6 +2079,10 @@ var SessionStoreInternal = {
this._windows[aWindow.__SSi].isTaskbarTab = true;
}
@@ -54,7 +54,7 @@ index 95f4960c3d8a2a4ca9bce24bcc54971877ee55ca..5bef8eeeb7cc26c930e3884e6eede6ea
if (lazy.AIWindow.isAIWindowActiveAndEnabled(aWindow)) {
this._windows[aWindow.__SSi].isAIWindow = true;
}
@@ -2119,7 +2128,7 @@ var SessionStoreInternal = {
@@ -2110,7 +2119,7 @@ var SessionStoreInternal = {
let isTaskbarTab = this._windows[aWindow.__SSi].isTaskbarTab;
// A regular window is not a private window, taskbar tab window, or popup window
let isRegularWindow =
@@ -63,7 +63,7 @@ index 95f4960c3d8a2a4ca9bce24bcc54971877ee55ca..5bef8eeeb7cc26c930e3884e6eede6ea
// perform additional initialization when the first window is loading
if (lazy.RunState.isStopped) {
@@ -2131,7 +2140,7 @@ var SessionStoreInternal = {
@@ -2122,7 +2131,7 @@ var SessionStoreInternal = {
// to disk to NOW() to enforce a full interval before the next write.
lazy.SessionSaver.updateLastSaveTime();
@@ -72,7 +72,7 @@ index 95f4960c3d8a2a4ca9bce24bcc54971877ee55ca..5bef8eeeb7cc26c930e3884e6eede6ea
this._log.debug(
"initializeWindow, the window is private or a web app. Saving SessionStartup.state for possibly restoring later"
);
@@ -2173,6 +2182,7 @@ var SessionStoreInternal = {
@@ -2164,6 +2173,7 @@ var SessionStoreInternal = {
null,
"sessionstore-one-or-no-tab-restored"
);
@@ -80,7 +80,7 @@ index 95f4960c3d8a2a4ca9bce24bcc54971877ee55ca..5bef8eeeb7cc26c930e3884e6eede6ea
this._deferredAllWindowsRestored.resolve();
}
// this window was opened by _openWindowWithState
@@ -2222,7 +2232,6 @@ var SessionStoreInternal = {
@@ -2213,7 +2223,6 @@ var SessionStoreInternal = {
if (closedWindowState) {
let newWindowState;
if (
@@ -88,7 +88,7 @@ index 95f4960c3d8a2a4ca9bce24bcc54971877ee55ca..5bef8eeeb7cc26c930e3884e6eede6ea
!lazy.SessionStartup.willRestore()
) {
// We want to split the window up into pinned tabs and unpinned tabs.
@@ -2258,6 +2267,7 @@ var SessionStoreInternal = {
@@ -2249,6 +2258,7 @@ var SessionStoreInternal = {
}
if (newWindowState) {
@@ -96,7 +96,7 @@ index 95f4960c3d8a2a4ca9bce24bcc54971877ee55ca..5bef8eeeb7cc26c930e3884e6eede6ea
// Ensure that the window state isn't hidden
this._restoreCount = 1;
let state = { windows: [newWindowState] };
@@ -2286,6 +2296,15 @@ var SessionStoreInternal = {
@@ -2277,6 +2287,15 @@ var SessionStoreInternal = {
});
this._shouldRestoreLastSession = false;
}
@@ -112,7 +112,7 @@ index 95f4960c3d8a2a4ca9bce24bcc54971877ee55ca..5bef8eeeb7cc26c930e3884e6eede6ea
if (this._restoreLastWindow && aWindow.toolbar.visible) {
// always reset (if not a popup window)
@@ -2436,7 +2455,7 @@ var SessionStoreInternal = {
@@ -2427,7 +2446,7 @@ var SessionStoreInternal = {
var tabbrowser = aWindow.gBrowser;
@@ -121,7 +121,7 @@ index 95f4960c3d8a2a4ca9bce24bcc54971877ee55ca..5bef8eeeb7cc26c930e3884e6eede6ea
TAB_EVENTS.forEach(function (aEvent) {
tabbrowser.tabContainer.removeEventListener(aEvent, this, true);
@@ -2487,7 +2506,7 @@ var SessionStoreInternal = {
@@ -2478,7 +2497,7 @@ var SessionStoreInternal = {
let isLastRegularWindow =
Object.values(this._windows).filter(
@@ -130,7 +130,7 @@ index 95f4960c3d8a2a4ca9bce24bcc54971877ee55ca..5bef8eeeb7cc26c930e3884e6eede6ea
).length == 1;
this._log.debug(
`onClose, closing window isLastRegularWindow? ${isLastRegularWindow}`
@@ -2544,8 +2563,8 @@ var SessionStoreInternal = {
@@ -2535,8 +2554,8 @@ var SessionStoreInternal = {
// 2) Flush the window.
// 3) When the flush is complete, revisit our decision to store the window
// in _closedWindows, and add/remove as necessary.
@@ -141,7 +141,7 @@ index 95f4960c3d8a2a4ca9bce24bcc54971877ee55ca..5bef8eeeb7cc26c930e3884e6eede6ea
}
completionPromise = lazy.TabStateFlusher.flushWindow(aWindow).then(() => {
@@ -2565,8 +2584,9 @@ var SessionStoreInternal = {
@@ -2556,8 +2575,9 @@ var SessionStoreInternal = {
// Save non-private windows if they have at
// least one saveable tab or are the last window.
@@ -153,7 +153,7 @@ index 95f4960c3d8a2a4ca9bce24bcc54971877ee55ca..5bef8eeeb7cc26c930e3884e6eede6ea
if (!isLastWindow && winData.closedId > -1) {
this._addClosedAction(
@@ -2642,7 +2662,7 @@ var SessionStoreInternal = {
@@ -2633,7 +2653,7 @@ var SessionStoreInternal = {
* to call this method again asynchronously (for example, after
* a window flush).
*/
@@ -162,7 +162,7 @@ index 95f4960c3d8a2a4ca9bce24bcc54971877ee55ca..5bef8eeeb7cc26c930e3884e6eede6ea
// Make sure SessionStore is still running, and make sure that we
// haven't chosen to forget this window.
if (
@@ -2659,6 +2679,7 @@ var SessionStoreInternal = {
@@ -2650,6 +2670,7 @@ var SessionStoreInternal = {
// _closedWindows from a previous call to this function.
let winIndex = this._closedWindows.indexOf(winData);
let alreadyStored = winIndex != -1;
@@ -170,7 +170,7 @@ index 95f4960c3d8a2a4ca9bce24bcc54971877ee55ca..5bef8eeeb7cc26c930e3884e6eede6ea
// If sidebar command is truthy, i.e. sidebar is open, store sidebar settings
let shouldStore = hasSaveableTabs || isLastWindow;
@@ -3480,7 +3501,7 @@ var SessionStoreInternal = {
@@ -3467,7 +3488,7 @@ var SessionStoreInternal = {
if (!isPrivateWindow && tabState.isPrivate) {
return;
}
@@ -179,7 +179,7 @@ index 95f4960c3d8a2a4ca9bce24bcc54971877ee55ca..5bef8eeeb7cc26c930e3884e6eede6ea
return;
}
@@ -4220,6 +4241,12 @@ var SessionStoreInternal = {
@@ -4206,6 +4227,12 @@ var SessionStoreInternal = {
Math.min(tabState.index, tabState.entries.length)
);
tabState.pinned = false;
@@ -192,7 +192,7 @@ index 95f4960c3d8a2a4ca9bce24bcc54971877ee55ca..5bef8eeeb7cc26c930e3884e6eede6ea
if (inBackground === false) {
aWindow.gBrowser.selectedTab = newTab;
@@ -4656,6 +4683,8 @@ var SessionStoreInternal = {
@@ -4642,6 +4669,8 @@ var SessionStoreInternal = {
// Append the tab if we're opening into a different window,
tabIndex: aSource == aTargetWindow ? pos : Infinity,
pinned: state.pinned,
@@ -201,7 +201,7 @@ index 95f4960c3d8a2a4ca9bce24bcc54971877ee55ca..5bef8eeeb7cc26c930e3884e6eede6ea
userContextId: state.userContextId,
skipLoad: true,
preferredRemoteType,
@@ -5160,9 +5189,10 @@ var SessionStoreInternal = {
@@ -5146,9 +5175,10 @@ var SessionStoreInternal = {
if (activePageData.title && activePageData.title != activePageData.url) {
win.gBrowser.setInitialTabTitle(tab, activePageData.title, {
isContentTitle: true,
@@ -213,7 +213,7 @@ index 95f4960c3d8a2a4ca9bce24bcc54971877ee55ca..5bef8eeeb7cc26c930e3884e6eede6ea
}
}
@@ -5527,7 +5557,7 @@ var SessionStoreInternal = {
@@ -5513,7 +5543,7 @@ var SessionStoreInternal = {
for (let i = tabbrowser.pinnedTabCount; i < tabbrowser.tabs.length; i++) {
let tab = tabbrowser.tabs[i];
@@ -222,7 +222,7 @@ index 95f4960c3d8a2a4ca9bce24bcc54971877ee55ca..5bef8eeeb7cc26c930e3884e6eede6ea
removableTabs.push(tab);
}
}
@@ -5640,7 +5670,7 @@ var SessionStoreInternal = {
@@ -5626,7 +5656,7 @@ var SessionStoreInternal = {
// collect the data for all windows
for (ix in this._windows) {
@@ -231,7 +231,7 @@ index 95f4960c3d8a2a4ca9bce24bcc54971877ee55ca..5bef8eeeb7cc26c930e3884e6eede6ea
// window data is still in _statesToRestore
continue;
}
@@ -5784,11 +5814,12 @@ var SessionStoreInternal = {
@@ -5770,11 +5800,12 @@ var SessionStoreInternal = {
}
let tabbrowser = aWindow.gBrowser;
@@ -245,7 +245,7 @@ index 95f4960c3d8a2a4ca9bce24bcc54971877ee55ca..5bef8eeeb7cc26c930e3884e6eede6ea
// update the internal state data for this window
for (let tab of tabs) {
if (tab == aWindow.FirefoxViewHandler.tab) {
@@ -5799,6 +5830,9 @@ var SessionStoreInternal = {
@@ -5785,6 +5816,9 @@ var SessionStoreInternal = {
tabsData.push(tabData);
}
@@ -255,7 +255,7 @@ index 95f4960c3d8a2a4ca9bce24bcc54971877ee55ca..5bef8eeeb7cc26c930e3884e6eede6ea
// update tab group state for this window
winData.groups = [];
for (let tabGroup of aWindow.gBrowser.tabGroups) {
@@ -5815,7 +5849,7 @@ var SessionStoreInternal = {
@@ -5801,7 +5835,7 @@ var SessionStoreInternal = {
// a window is closed, point to the first item in the tab strip instead (it will never be the Firefox View tab,
// since it's only inserted into the tab strip after it's selected).
if (aWindow.FirefoxViewHandler.tab?.selected) {
@@ -264,7 +264,7 @@ index 95f4960c3d8a2a4ca9bce24bcc54971877ee55ca..5bef8eeeb7cc26c930e3884e6eede6ea
winData.title = tabbrowser.tabs[0].label;
}
winData.selected = selectedIndex;
@@ -6017,8 +6051,8 @@ var SessionStoreInternal = {
@@ -6003,8 +6037,8 @@ var SessionStoreInternal = {
// selectTab represents.
let selectTab = 0;
if (overwriteTabs) {
@@ -275,7 +275,7 @@ index 95f4960c3d8a2a4ca9bce24bcc54971877ee55ca..5bef8eeeb7cc26c930e3884e6eede6ea
selectTab = Math.min(selectTab, winData.tabs.length);
}
@@ -6040,6 +6074,7 @@ var SessionStoreInternal = {
@@ -6026,6 +6060,7 @@ var SessionStoreInternal = {
if (overwriteTabs) {
for (let i = tabbrowser.browsers.length - 1; i >= 0; i--) {
if (!tabbrowser.tabs[i].selected) {
@@ -283,7 +283,7 @@ index 95f4960c3d8a2a4ca9bce24bcc54971877ee55ca..5bef8eeeb7cc26c930e3884e6eede6ea
tabbrowser.removeTab(tabbrowser.tabs[i]);
}
}
@@ -6074,6 +6109,12 @@ var SessionStoreInternal = {
@@ -6060,6 +6095,12 @@ var SessionStoreInternal = {
savedTabGroup => !openTabGroupIdsInWindow.has(savedTabGroup.id)
);
}
@@ -296,7 +296,7 @@ index 95f4960c3d8a2a4ca9bce24bcc54971877ee55ca..5bef8eeeb7cc26c930e3884e6eede6ea
// Move the originally open tabs to the end.
if (initialTabs) {
@@ -6640,6 +6681,25 @@ var SessionStoreInternal = {
@@ -6626,6 +6667,25 @@ var SessionStoreInternal = {
// Most of tabData has been restored, now continue with restoring
// attributes that may trigger external events.
@@ -322,7 +322,7 @@ index 95f4960c3d8a2a4ca9bce24bcc54971877ee55ca..5bef8eeeb7cc26c930e3884e6eede6ea
if (tabData.pinned) {
tabbrowser.pinTab(tab);
@@ -6807,6 +6867,9 @@ var SessionStoreInternal = {
@@ -6793,6 +6853,9 @@ var SessionStoreInternal = {
aWindow.gURLBar.readOnly = false;
}
}
@@ -332,7 +332,7 @@ index 95f4960c3d8a2a4ca9bce24bcc54971877ee55ca..5bef8eeeb7cc26c930e3884e6eede6ea
let promiseParts = Promise.withResolvers();
aWindow.setTimeout(() => {
@@ -7602,7 +7665,7 @@ var SessionStoreInternal = {
@@ -7588,7 +7651,7 @@ var SessionStoreInternal = {
let groupsToSave = new Map();
for (let tIndex = 0; tIndex < window.tabs.length; ) {
@@ -341,7 +341,7 @@ index 95f4960c3d8a2a4ca9bce24bcc54971877ee55ca..5bef8eeeb7cc26c930e3884e6eede6ea
// Adjust window.selected
if (tIndex + 1 < window.selected) {
window.selected -= 1;
@@ -7617,7 +7680,7 @@ var SessionStoreInternal = {
@@ -7603,7 +7666,7 @@ var SessionStoreInternal = {
);
// We don't want to increment tIndex here.
continue;
@@ -350,7 +350,7 @@ index 95f4960c3d8a2a4ca9bce24bcc54971877ee55ca..5bef8eeeb7cc26c930e3884e6eede6ea
// Convert any open groups into saved groups.
let groupStateToSave = window.groups.find(
groupState => groupState.id == window.tabs[tIndex].groupId
@@ -8076,7 +8139,6 @@ var SessionStoreInternal = {
@@ -8062,7 +8125,6 @@ var SessionStoreInternal = {
timer.initWithCallback(
function () {
if (beats <= 0) {
@@ -358,7 +358,7 @@ index 95f4960c3d8a2a4ca9bce24bcc54971877ee55ca..5bef8eeeb7cc26c930e3884e6eede6ea
Glean.sessionRestore.shutdownFlushAllOutcomes.timed_out.add(1);
deferred.resolve();
}
@@ -8554,6 +8616,7 @@ var SessionStoreInternal = {
@@ -8540,6 +8602,7 @@ var SessionStoreInternal = {
if (
!savedTabGroupState.tabs.length ||
this.getSavedTabGroup(savedTabGroupState.id)

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/sessionstore/TabState.sys.mjs b/browser/components/sessionstore/TabState.sys.mjs
index eb24c3ffdd2cfb33379aca993af5171fdb91ac2c..15d3fbff397df23f112355e22ca5dba5bf29528f 100644
index 4ba4dda363b602cb6f4445ef056f2f9abb1b0e1e..6b4b407e05e26faca69d9d7ac6f31510620898fe 100644
--- a/browser/components/sessionstore/TabState.sys.mjs
+++ b/browser/components/sessionstore/TabState.sys.mjs
@@ -99,7 +99,25 @@ class _TabState {
@@ -99,10 +99,28 @@ class _TabState {
}
}
@@ -21,8 +21,11 @@ index eb24c3ffdd2cfb33379aca993af5171fdb91ac2c..15d3fbff397df23f112355e22ca5dba5
+ tabData._zenIsActiveTab = tab._zenContentsVisible;
+ tabData.zenLiveFolderItemId = tab.getAttribute("zen-live-folder-item-id");
+
tabData.searchMode = tab.ownerGlobal.gURLBar.getSearchMode(browser, true);
+ if (tabData.searchMode?.source === tab.ownerGlobal.UrlbarUtils.RESULT_SOURCE.ZEN_ACTIONS) {
tabData.searchMode = tab.documentGlobal.gURLBar.getSearchMode(
browser,
true
);
+ if (tabData.searchMode?.source === tab.documentGlobal.UrlbarUtils.RESULT_SOURCE.ZEN_ACTIONS) {
+ delete tabData.searchMode;
+ }

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/sidebar/browser-sidebar.js b/browser/components/sidebar/browser-sidebar.js
index 2c13f19ec4f962ce3ecaface0ae5d00c50ca913f..eb696819a1af4cfae6352fc5696fd95590bed342 100644
index ef7b67413392840720c8f09b6f22b0413ccf4435..ebbc15722ffb410050dd1923e8bb49d8cd5b6a9e 100644
--- a/browser/components/sidebar/browser-sidebar.js
+++ b/browser/components/sidebar/browser-sidebar.js
@@ -834,7 +834,7 @@ var SidebarController = {
@@ -850,7 +850,7 @@ var SidebarController = {
setPosition() {
// First reset all ordinals to match DOM ordering.
let contentArea = document.getElementById("tabbrowser-tabbox");

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/tabbrowser/AsyncTabSwitcher.sys.mjs b/browser/components/tabbrowser/AsyncTabSwitcher.sys.mjs
index eebff0f59df42d3ef075f3eea1bd9269c47ba80d..6ab43a810f4cb61eedc02bb42026f6b5e282e785 100644
index 577e27598597de27116153be1ad149facd721e41..eeca455aad8323ef24957af076f131cb70d66e7d 100644
--- a/browser/components/tabbrowser/AsyncTabSwitcher.sys.mjs
+++ b/browser/components/tabbrowser/AsyncTabSwitcher.sys.mjs
@@ -938,6 +938,7 @@ export class AsyncTabSwitcher {

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/tabbrowser/TabsList.sys.mjs b/browser/components/tabbrowser/TabsList.sys.mjs
index 4de5139f404fab227874f626bda27e2a32cf87a0..7574e6db1606c72e8da3141d4a8deec727376af8 100644
index 58f91dd9f80aa34ff8d8095cbaf5ae7a6c8dc1e1..c4c9ad5d93053f5fc726a0b10fa8d56c6bbc4003 100644
--- a/browser/components/tabbrowser/TabsList.sys.mjs
+++ b/browser/components/tabbrowser/TabsList.sys.mjs
@@ -87,7 +87,7 @@ class TabsListBase {

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/tabbrowser/content/drag-and-drop.js b/browser/components/tabbrowser/content/drag-and-drop.js
index ea4f83fad1757f073ea1bbe5c93a4ebe5ecc0abe..904e604e28c96757fabf0dd3a749c85280e74993 100644
index 8bb1219962a1368f50b53c61041f135c68e35f31..8e72441d26883cbef7a352b00c0fe2b15a030046 100644
--- a/browser/components/tabbrowser/content/drag-and-drop.js
+++ b/browser/components/tabbrowser/content/drag-and-drop.js
@@ -35,6 +35,9 @@
@@ -159,7 +159,7 @@ index ea4f83fad1757f073ea1bbe5c93a4ebe5ecc0abe..904e604e28c96757fabf0dd3a749c852
if (
dt.mozUserCancelled ||
dt.dropEffect != "none" ||
@@ -918,11 +938,10 @@
@@ -927,11 +947,10 @@
return this.#getHorizontalScrollboxDragTarget(event, ignoreSides);
}
while (target) {
@@ -175,7 +175,7 @@ index ea4f83fad1757f073ea1bbe5c93a4ebe5ecc0abe..904e604e28c96757fabf0dd3a749c852
break;
}
target = target.parentNode;
@@ -952,6 +971,9 @@
@@ -961,6 +980,9 @@
return null;
}
}
@@ -185,7 +185,7 @@ index ea4f83fad1757f073ea1bbe5c93a4ebe5ecc0abe..904e604e28c96757fabf0dd3a749c852
return target;
}
@@ -1011,7 +1033,8 @@
@@ -1014,7 +1036,8 @@
isTabGroupLabel(draggedTab) &&
draggedTab._dragData?.expandGroupOnDrop
) {
@@ -195,7 +195,7 @@ index ea4f83fad1757f073ea1bbe5c93a4ebe5ecc0abe..904e604e28c96757fabf0dd3a749c852
}
}
@@ -1195,7 +1218,6 @@
@@ -1206,7 +1229,6 @@
// using updateDragImage. On Linux, we can use a panel.
if (platform == "win" || platform == "macosx") {
captureListener = function () {
@@ -203,7 +203,7 @@ index ea4f83fad1757f073ea1bbe5c93a4ebe5ecc0abe..904e604e28c96757fabf0dd3a749c852
};
} else {
// Create a panel to use it in setDragImage
@@ -1233,7 +1255,6 @@
@@ -1244,7 +1266,6 @@
);
dragImageOffset = dragImageOffset * scale;
}
@@ -211,7 +211,7 @@ index ea4f83fad1757f073ea1bbe5c93a4ebe5ecc0abe..904e604e28c96757fabf0dd3a749c852
// _dragData.offsetX/Y give the coordinates that the mouse should be
// positioned relative to the corner of the new window created upon
@@ -1252,7 +1273,7 @@
@@ -1263,7 +1284,7 @@
let dropEffect = this.getDropEffectForTabDrag(event);
let isMovingInTabStrip = !fromTabList && dropEffect == "move";
let collapseTabGroupDuringDrag =
@@ -220,7 +220,7 @@ index ea4f83fad1757f073ea1bbe5c93a4ebe5ecc0abe..904e604e28c96757fabf0dd3a749c852
tab._dragData = {
offsetX: this._tabbrowserTabs.verticalMode
@@ -1262,7 +1283,7 @@
@@ -1273,7 +1294,7 @@
? event.screenY - window.screenY - tabOffset
: event.screenY - window.screenY,
scrollPos:
@@ -229,7 +229,7 @@ index ea4f83fad1757f073ea1bbe5c93a4ebe5ecc0abe..904e604e28c96757fabf0dd3a749c852
? this._tabbrowserTabs.pinnedTabsContainer.scrollPosition
: this._tabbrowserTabs.arrowScrollbox.scrollPosition,
screenX: event.screenX,
@@ -1309,6 +1330,7 @@
@@ -1320,6 +1341,7 @@
if (tabStripItemElement.hasAttribute("dragtarget")) {
return;
}
@@ -237,7 +237,7 @@ index ea4f83fad1757f073ea1bbe5c93a4ebe5ecc0abe..904e604e28c96757fabf0dd3a749c852
let isPinned = tab.pinned;
let dragAndDropElements = this._tabbrowserTabs.dragAndDropElements;
let isGrid = this._tabbrowserTabs.isContainerVerticalPinnedGrid(tab);
@@ -1675,23 +1697,6 @@
@@ -1686,23 +1708,6 @@
// Slide the relevant tabs to their new position.
// non-moving tabs adjust for RTL
@@ -261,7 +261,7 @@ index ea4f83fad1757f073ea1bbe5c93a4ebe5ecc0abe..904e604e28c96757fabf0dd3a749c852
// moving tabs don't adjust for RTL
for (let item of selectedElements) {
if (
@@ -1740,7 +1745,6 @@
@@ -1751,7 +1756,6 @@
for (let item of this._tabbrowserTabs.dragAndDropElements) {
delete item._moveTogetherSelectedTabsData;
item = elementToMove(item);
@@ -269,7 +269,7 @@ index ea4f83fad1757f073ea1bbe5c93a4ebe5ecc0abe..904e604e28c96757fabf0dd3a749c852
item.removeAttribute("multiselected-move-together");
}
}
@@ -2587,7 +2591,6 @@
@@ -2598,7 +2602,6 @@
tab.style.top = "";
tab.style.maxWidth = "";
tab.style.pointerEvents = "";
@@ -277,7 +277,7 @@ index ea4f83fad1757f073ea1bbe5c93a4ebe5ecc0abe..904e604e28c96757fabf0dd3a749c852
tab.removeAttribute("small-stack");
tab.removeAttribute("big-stack");
}
@@ -2596,11 +2599,9 @@
@@ -2607,11 +2610,9 @@
)) {
label.style.width = "";
label.style.maxWidth = "";

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/tabbrowser/content/tab.js b/browser/components/tabbrowser/content/tab.js
index b9381999a77ecacdb95c69494ac8972e9f13d14d..a210b53bb46373f8bab532a00b25301d645641cd 100644
index 8f2ebf3a0bd4e2af01cf41024b16bd491e8ed961..27721e26c3cd8cb066b462dedfa4ce785ca5c2c3 100644
--- a/browser/components/tabbrowser/content/tab.js
+++ b/browser/components/tabbrowser/content/tab.js
@@ -21,6 +21,7 @@
@@ -10,10 +10,10 @@ index b9381999a77ecacdb95c69494ac8972e9f13d14d..a210b53bb46373f8bab532a00b25301d
<stack class="tab-icon-stack">
<hbox class="tab-throbber"/>
<hbox class="tab-icon-pending"/>
@@ -38,9 +39,11 @@
<hbox class="tab-secondary-label">
<label class="tab-icon-sound-label tab-icon-sound-pip-label" data-l10n-id="browser-tab-audio-pip" role="presentation"/>
</hbox>
@@ -35,9 +36,11 @@
pack="center"
flex="1">
<label class="tab-text tab-label" role="presentation"/>
+ <label class="zen-tab-sublabel" data-l10n-id="zen-tab-sublabel" data-l10n-args='{"tabSubtitle": "zen-default-pinned"}' role="presentation"/>
</vbox>
<image class="tab-note-icon" role="presentation"/>
@@ -22,7 +22,7 @@ index b9381999a77ecacdb95c69494ac8972e9f13d14d..a210b53bb46373f8bab532a00b25301d
</hbox>
</stack>
`;
@@ -87,7 +90,7 @@
@@ -84,7 +87,7 @@
".tab-content":
"pinned,selected=visuallyselected,multiselected,titlechanged,attention",
".tab-icon-stack":
@@ -31,7 +31,7 @@ index b9381999a77ecacdb95c69494ac8972e9f13d14d..a210b53bb46373f8bab532a00b25301d
".tab-throbber":
"fadein,pinned,busy,progress,selected=visuallyselected",
".tab-icon-pending":
@@ -96,9 +99,9 @@
@@ -93,9 +96,9 @@
"src=image,requestcontextid,fadein,pinned,selected=visuallyselected,busy,crashed,sharing,pictureinpicture,pending,discarded",
".tab-sharing-icon-overlay": "sharing,selected=visuallyselected,pinned",
".tab-icon-overlay":
@@ -43,7 +43,7 @@ index b9381999a77ecacdb95c69494ac8972e9f13d14d..a210b53bb46373f8bab532a00b25301d
".tab-label-container":
"pinned,selected=visuallyselected,labeldirection",
".tab-label":
@@ -189,7 +192,7 @@
@@ -184,7 +187,7 @@
}
set _visuallySelected(val) {
@@ -52,7 +52,7 @@ index b9381999a77ecacdb95c69494ac8972e9f13d14d..a210b53bb46373f8bab532a00b25301d
return;
}
@@ -225,11 +228,25 @@
@@ -220,11 +223,25 @@
}
get visible() {
@@ -83,7 +83,7 @@ index b9381999a77ecacdb95c69494ac8972e9f13d14d..a210b53bb46373f8bab532a00b25301d
}
get hidden() {
@@ -308,7 +325,7 @@
@@ -303,7 +320,7 @@
return false;
}
@@ -92,7 +92,7 @@ index b9381999a77ecacdb95c69494ac8972e9f13d14d..a210b53bb46373f8bab532a00b25301d
}
get lastAccessed() {
@@ -393,7 +410,18 @@
@@ -388,7 +405,18 @@
}
get group() {
@@ -112,7 +112,7 @@ index b9381999a77ecacdb95c69494ac8972e9f13d14d..a210b53bb46373f8bab532a00b25301d
}
get splitview() {
@@ -475,6 +503,10 @@
@@ -470,6 +498,10 @@
}
}
@@ -123,7 +123,7 @@ index b9381999a77ecacdb95c69494ac8972e9f13d14d..a210b53bb46373f8bab532a00b25301d
// If the previous target wasn't part of this tab then this is a mouseenter event.
if (!this.contains(event.relatedTarget)) {
this._mouseenter();
@@ -504,6 +536,7 @@
@@ -499,6 +531,7 @@
if (!this.contains(event.relatedTarget)) {
this._mouseleave();
}
@@ -131,7 +131,7 @@ index b9381999a77ecacdb95c69494ac8972e9f13d14d..a210b53bb46373f8bab532a00b25301d
}
on_dragstart(event) {
@@ -538,6 +571,8 @@
@@ -533,6 +566,8 @@
this.style.MozUserFocus = "ignore";
} else if (
event.target.classList.contains("tab-close-button") ||
@@ -140,7 +140,7 @@ index b9381999a77ecacdb95c69494ac8972e9f13d14d..a210b53bb46373f8bab532a00b25301d
event.target.classList.contains("tab-icon-overlay") ||
event.target.classList.contains("tab-audio-button")
) {
@@ -572,7 +607,7 @@
@@ -567,7 +602,7 @@
}
} else if (
event.altKey &&
@@ -149,7 +149,7 @@ index b9381999a77ecacdb95c69494ac8972e9f13d14d..a210b53bb46373f8bab532a00b25301d
) {
eventMaySelectTab = false;
} else if (!this.selected && this.multiselected) {
@@ -597,6 +632,10 @@
@@ -592,6 +627,10 @@
this.style.MozUserFocus = "";
}
@@ -160,7 +160,7 @@ index b9381999a77ecacdb95c69494ac8972e9f13d14d..a210b53bb46373f8bab532a00b25301d
on_click(event) {
if (event.button != 0) {
return;
@@ -620,14 +659,31 @@
@@ -615,14 +654,31 @@
trigger: "alt_click",
});
}
@@ -193,7 +193,7 @@ index b9381999a77ecacdb95c69494ac8972e9f13d14d..a210b53bb46373f8bab532a00b25301d
gBrowser.multiSelectedTabsCount > 0 &&
!event.target.classList.contains("tab-close-button") &&
!event.target.classList.contains("tab-icon-overlay") &&
@@ -639,8 +695,9 @@
@@ -634,8 +690,9 @@
}
if (
@@ -205,7 +205,7 @@ index b9381999a77ecacdb95c69494ac8972e9f13d14d..a210b53bb46373f8bab532a00b25301d
) {
if (this.activeMediaBlocked) {
if (this.multiselected) {
@@ -658,7 +715,7 @@
@@ -653,7 +710,7 @@
return;
}
@@ -214,7 +214,7 @@ index b9381999a77ecacdb95c69494ac8972e9f13d14d..a210b53bb46373f8bab532a00b25301d
if (this.multiselected) {
gBrowser.removeMultiSelectedTabs(
lazy.TabMetrics.userTriggeredContext(
@@ -678,6 +735,14 @@
@@ -673,6 +730,14 @@
// (see tabbrowser-tabs 'click' handler).
gBrowser.tabContainer._blockDblClick = true;
}
@@ -229,7 +229,7 @@ index b9381999a77ecacdb95c69494ac8972e9f13d14d..a210b53bb46373f8bab532a00b25301d
}
on_dblclick(event) {
@@ -701,6 +766,8 @@
@@ -696,6 +761,8 @@
animate: true,
triggeringEvent: event,
});

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/tabbrowser/content/tabbrowser.js b/browser/components/tabbrowser/content/tabbrowser.js
index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008ede72076 100644
index c42b1a1a8df6b38886c17f71ea88e5aaa7eebc80..c741404ed973ee3ac246fe246c0f645eb49d12e9 100644
--- a/browser/components/tabbrowser/content/tabbrowser.js
+++ b/browser/components/tabbrowser/content/tabbrowser.js
@@ -502,6 +502,7 @@
@@ -509,6 +509,7 @@
* @type {MozBrowser[]}
*/
get splitViewBrowsers() {
@@ -10,7 +10,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
const browsers = [];
if (this.#activeSplitView) {
for (const tab of this.#activeSplitView.tabs) {
@@ -575,15 +576,66 @@
@@ -578,15 +579,66 @@
return this.tabContainer.visibleTabs;
}
@@ -79,7 +79,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
set selectedTab(val) {
if (
gSharedTabWarning.willShowSharedTabWarning(val) ||
@@ -592,6 +644,9 @@
@@ -595,6 +647,9 @@
) {
return;
}
@@ -89,7 +89,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
// Update the tab
this.tabbox.selectedTab = val;
}
@@ -659,6 +714,10 @@
@@ -662,6 +717,10 @@
userContextId = parseInt(tabArgument.getAttribute("usercontextid"), 10);
}
@@ -97,10 +97,10 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
+ userContextId = window._zenStartupUnsyncedUserContextId;
+ }
+
if (tabArgument && tabArgument.linkedBrowser) {
remoteType = tabArgument.linkedBrowser.remoteType;
initialBrowsingContextGroupId =
@@ -751,6 +810,8 @@
if (openWindowInfo) {
userContextId = openWindowInfo.originAttributes.userContextId;
}
@@ -763,6 +822,8 @@
this.tabpanels.appendChild(panel);
let tab = this.tabs[0];
@@ -109,7 +109,13 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
tab.linkedPanel = uniqueId;
this._selectedTab = tab;
this._selectedBrowser = browser;
@@ -1121,13 +1182,18 @@
@@ -1129,18 +1190,24 @@
aTab,
{ telemetrySource = this.TabMetrics.METRIC_SOURCE.UNKNOWN } = {}
) {
+ aTab = gZenGlanceManager.getTabOrGlanceParent(aTab);
if (aTab.pinned || aTab == FirefoxViewHandler.tab) {
return;
}
this.showTab(aTab);
@@ -129,7 +135,13 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
aTab.setAttribute("pinned", "true");
this._updateTabBarForPinnedTabs();
@@ -1140,11 +1206,19 @@
@@ -1148,16 +1215,25 @@
}
unpinTab(aTab) {
+ aTab = gZenGlanceManager.getTabOrGlanceParent(aTab);
if (!aTab.pinned) {
return;
}
this.#handleTabMove(aTab, () => {
@@ -150,7 +162,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
});
aTab.style.marginInlineStart = "";
@@ -1321,6 +1395,9 @@
@@ -1372,6 +1448,9 @@
let LOCAL_PROTOCOLS = ["chrome:", "about:", "resource:", "data:"];
@@ -160,7 +172,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
if (
aIconURL &&
!LOCAL_PROTOCOLS.some(protocol => aIconURL.startsWith(protocol))
@@ -1330,6 +1407,9 @@
@@ -1381,6 +1460,9 @@
);
return;
}
@@ -170,23 +182,23 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
let browser = this.getBrowserForTab(aTab);
browser.mIconURL = aIconURL;
@@ -1652,7 +1732,6 @@
@@ -1703,7 +1785,6 @@
// Preview mode should not reset the owner
if (!this._previewMode && !oldTab.selected) {
if (!this.#previewMode && !oldTab.selected) {
- oldTab.owner = null;
}
let lastRelatedTab = this._lastRelatedTabMap.get(oldTab);
@@ -1743,6 +1822,7 @@
if (!this._previewMode) {
let lastRelatedTab = this.#lastRelatedTabMap.get(oldTab);
@@ -1794,6 +1875,7 @@
if (!this.#previewMode) {
newTab.recordTimeFromUnloadToReload();
newTab.updateLastAccessed();
+ newTab.removeAttribute("unread");
oldTab.updateLastAccessed();
// if this is the foreground window, update the last-seen timestamps.
if (this.ownerGlobal == BrowserWindowTracker.getTopWindow()) {
@@ -1957,6 +2037,9 @@
if (this.documentGlobal == BrowserWindowTracker.getTopWindow()) {
@@ -2008,6 +2090,9 @@
}
let activeEl = document.activeElement;
@@ -196,7 +208,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
// If focus is on the old tab, move it to the new tab.
if (activeEl == oldTab) {
newTab.focus();
@@ -1995,7 +2078,7 @@
@@ -2046,7 +2131,7 @@
// Focus the location bar if it was previously focused for that tab.
// In full screen mode, only bother making the location bar visible
// if the tab is a blank one.
@@ -205,7 +217,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
let selectURL = () => {
if (this._asyncTabSwitching) {
// Set _awaitingSetURI flag to suppress popup notification
@@ -2283,7 +2366,12 @@
@@ -2334,7 +2419,12 @@
return this._setTabLabel(aTab, aLabel);
}
@@ -219,7 +231,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
if (!aLabel || (isURL && /^about:reader\?url=/.test(aLabel))) {
return false;
}
@@ -2408,7 +2496,7 @@
@@ -2460,7 +2550,7 @@
newIndex = this.selectedTab._tPos + 1;
}
@@ -228,7 +240,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
if (this.isTabGroupLabel(targetTab)) {
throw new Error(
"Replacing a tab group label with a tab is not supported"
@@ -2685,6 +2773,7 @@
@@ -2735,6 +2825,7 @@
uriIsAboutBlank,
userContextId,
skipLoad,
@@ -236,7 +248,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
} = {}) {
let b = document.createXULElement("browser");
// Use the JSM global to create the permanentKey, so that if the
@@ -2758,8 +2847,7 @@
@@ -2808,8 +2899,7 @@
// we use a different attribute name for this?
b.setAttribute("name", name);
}
@@ -246,7 +258,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
b.setAttribute("transparent", "true");
}
@@ -2929,7 +3017,7 @@
@@ -2964,7 +3054,7 @@
let panel = this.getPanel(browser);
let uniqueId = this._generateUniquePanelID();
@@ -255,7 +267,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
aTab.linkedPanel = uniqueId;
// Inject the <browser> into the DOM if necessary.
@@ -2989,8 +3077,8 @@
@@ -3024,8 +3114,8 @@
// If we transitioned from one browser to two browsers, we need to set
// hasSiblings=false on both the existing browser and the new browser.
if (this.tabs.length == 2) {
@@ -266,7 +278,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
} else {
aTab.linkedBrowser.browsingContext.hasSiblings = this.tabs.length > 1;
}
@@ -3175,7 +3263,6 @@
@@ -3210,7 +3300,6 @@
this.selectedTab = this.addTrustedTab(BROWSER_NEW_TAB_URL, {
tabIndex: tab._tPos + 1,
userContextId: tab.userContextId,
@@ -274,7 +286,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
focusUrlBar: true,
});
resolve(this.selectedBrowser);
@@ -3285,6 +3372,10 @@
@@ -3320,6 +3409,10 @@
schemelessInput,
hasValidUserGestureActivation = false,
textDirectiveUserActivation = false,
@@ -285,7 +297,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
} = {}
) {
// all callers of addTab that pass a params object need to pass
@@ -3295,10 +3386,25 @@
@@ -3330,10 +3423,25 @@
);
}
@@ -296,7 +308,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
+
+ let hasZenDefaultUserContextId = false;
+ let zenForcedWorkspaceId = undefined;
+ if (beforeRouteResult.isRouteFound) {
+ if (beforeRouteResult.isRouteFound && (typeof userContextId === "undefined" || fromExternal)) {
+ userContextId = beforeRouteResult.userContextId;
+ hasZenDefaultUserContextId = true;
+ } else if (typeof gZenWorkspaces !== "undefined" && !_forZenEmptyTab) {
@@ -311,7 +323,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
// If we're opening a foreground tab, set the owner by default.
ownerTab ??= inBackground ? null : this.selectedTab;
@@ -3306,6 +3412,7 @@
@@ -3341,6 +3449,7 @@
if (this.selectedTab.owner) {
this.selectedTab.owner = null;
}
@@ -319,7 +331,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
// Find the tab that opened this one, if any. This is used for
// determining positioning, and inherited attributes such as the
@@ -3358,6 +3465,22 @@
@@ -3393,6 +3502,22 @@
noInitialLabel,
skipBackgroundNotify,
});
@@ -342,7 +354,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
if (insertTab) {
// Insert the tab into the tab container in the correct position.
this.#insertTabAtIndex(t, {
@@ -3366,6 +3489,7 @@
@@ -3401,6 +3526,7 @@
ownerTab,
openerTab,
pinned,
@@ -350,7 +362,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
bulkOrderedOpen,
tabGroup: tabGroup ?? openerTab?.group,
});
@@ -3384,6 +3508,7 @@
@@ -3419,6 +3545,7 @@
openWindowInfo,
skipLoad,
triggeringRemoteType,
@@ -358,7 +370,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
}));
if (focusUrlBar) {
@@ -3508,6 +3633,12 @@
@@ -3543,6 +3670,12 @@
}
}
@@ -366,22 +378,28 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
+ gZenVerticalTabsManager.animateItemOpen(t);
+ }
+ if (typeof window.gZenCompactModeManager !== "undefined" && !skipLoad && insertTab) {
+ gZenCompactModeManager._onTabOpen(t, inBackground);
+ gZenCompactModeManager._onTabOpen(t, inBackground, beforeRouteResult);
+ }
// Additionally send pinned tab events
if (pinned) {
this.#notifyPinnedStatus(t);
@@ -3518,6 +3649,9 @@
@@ -3553,6 +3686,15 @@
if (!inBackground) {
this.selectedTab = t;
}
+
+ window.gZenSpaceRoutingManager.onAfterAddTab(uriString, t, { skipRoute: skipRoute || _forZenEmptyTab, fromExternal, pinned, tabGroup }, window, beforeRouteResult);
+ window.gZenSpaceRoutingManager.onAfterAddTab(
+ uriString,
+ t,
+ { skipRoute: skipRoute || _forZenEmptyTab, fromExternal, pinned, tabGroup, inBackground },
+ window,
+ beforeRouteResult,
+ );
+
return t;
}
@@ -3750,6 +3884,7 @@
@@ -3785,6 +3927,7 @@
isAdoptingGroup = false,
isUserTriggered = false,
telemetryUserCreateSource = "unknown",
@@ -389,7 +407,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
} = {}
) {
if (
@@ -3760,9 +3895,6 @@
@@ -3795,9 +3938,6 @@
!this.isSplitViewWrapper(tabOrSplitView)
)
) {
@@ -399,7 +417,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
}
if (!color) {
@@ -3783,9 +3915,14 @@
@@ -3818,9 +3958,14 @@
label,
isAdoptingGroup
);
@@ -416,7 +434,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
);
group.addTabs(tabsAndSplitViews);
@@ -3906,7 +4043,7 @@
@@ -3941,7 +4086,7 @@
}
this.#handleTabMove(tab, () =>
@@ -425,7 +443,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
);
}
@@ -3990,6 +4127,7 @@
@@ -4027,6 +4172,7 @@
color: group.color,
insertBefore: newTabs[0],
isAdoptingGroup: true,
@@ -433,7 +451,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
});
}
@@ -4200,6 +4338,7 @@
@@ -4237,6 +4383,7 @@
openWindowInfo,
skipLoad,
triggeringRemoteType,
@@ -441,7 +459,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
}
) {
// If we don't have a preferred remote type (or it is `NOT_REMOTE`), and
@@ -4269,6 +4408,7 @@
@@ -4297,6 +4444,7 @@
openWindowInfo,
name,
skipLoad,
@@ -449,7 +467,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
});
}
@@ -4482,9 +4622,9 @@
@@ -4510,9 +4658,9 @@
}
// Add a new tab if needed.
@@ -461,7 +479,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
let url = "about:blank";
if (tabData.entries?.length) {
@@ -4521,8 +4661,10 @@
@@ -4545,8 +4693,10 @@
insertTab: false,
skipLoad: true,
preferredRemoteType,
@@ -473,7 +491,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
if (select) {
tabToSelect = tab;
}
@@ -4544,7 +4686,8 @@
@@ -4568,7 +4718,8 @@
this.pinTab(tab);
// Then ensure all the tab open/pinning information is sent.
this._fireTabOpen(tab, {});
@@ -483,7 +501,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
let { groupId } = tabData;
const tabGroup = tabGroupWorkingData.get(groupId);
// if a tab refers to a tab group we don't know, skip any group
@@ -4564,7 +4707,10 @@
@@ -4588,7 +4739,10 @@
tabGroup.stateData.id,
tabGroup.stateData.color,
tabGroup.stateData.collapsed,
@@ -495,7 +513,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
);
tabsFragment.appendChild(tabGroup.node);
}
@@ -4619,9 +4765,21 @@
@@ -4643,9 +4797,21 @@
// to remove the old selected tab.
if (tabToSelect) {
let leftoverTab = this.selectedTab;
@@ -517,12 +535,15 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
if (tabs.length > 1 || !tabs[0].selected) {
this._updateTabsAfterInsert();
@@ -4812,11 +4970,14 @@
@@ -4836,11 +5002,17 @@
if (ownerTab) {
tab.owner = ownerTab;
}
+ if ((!tab.pinned && tabGroup?.isZenFolder && !Services.prefs.getBoolPref('zen.folders.owned-tabs-in-folder')) || (tabGroup && tabGroup.hasAttribute("split-view-group"))) {
+ tabGroup = null;
+ }
+ if (openerTab?.hasAttribute("zen-glance-tab")) {
+ openerTab = gZenGlanceManager.getTabOrGlanceParent(openerTab);
+ }
// Ensure we have an index if one was not provided.
@@ -533,16 +554,16 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
if (
!bulkOrderedOpen &&
((openerTab &&
@@ -4828,7 +4989,7 @@
@@ -4852,7 +5024,7 @@
let lastRelatedTab =
openerTab && this._lastRelatedTabMap.get(openerTab);
openerTab && this.#lastRelatedTabMap.get(openerTab);
let previousTab = lastRelatedTab || openerTab || this.selectedTab;
- if (!tabGroup) {
+ if (!tabGroup && pinned === previousTab.group?.pinned) {
tabGroup = previousTab.group;
}
if (
@@ -4844,7 +5005,7 @@
@@ -4868,7 +5040,7 @@
previousTab.splitview
) + 1;
} else if (previousTab.visible) {
@@ -551,7 +572,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
} else if (previousTab == FirefoxViewHandler.tab) {
elementIndex = 0;
}
@@ -4872,14 +5033,14 @@
@@ -4896,14 +5068,14 @@
}
// Ensure index is within bounds.
if (tab.pinned) {
@@ -570,7 +591,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
if (pinned && !itemAfter?.pinned) {
itemAfter = null;
@@ -4896,7 +5057,7 @@
@@ -4920,7 +5092,7 @@
this.tabContainer._invalidateCachedTabs();
@@ -579,7 +600,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
if (
(this.isTab(itemAfter) && itemAfter.group == tabGroup) ||
this.isSplitViewWrapper(itemAfter)
@@ -4927,7 +5088,11 @@
@@ -4951,7 +5123,11 @@
const tabContainer = pinned
? this.tabContainer.pinnedTabsContainer
: this.tabContainer;
@@ -591,7 +612,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
}
if (tab.group?.collapsed) {
@@ -4942,6 +5107,7 @@
@@ -4966,6 +5142,7 @@
if (pinned) {
this._updateTabBarForPinnedTabs();
}
@@ -599,7 +620,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
TabBarVisibility.update();
}
@@ -5490,6 +5656,7 @@
@@ -5514,6 +5691,7 @@
telemetrySource,
} = {}
) {
@@ -607,7 +628,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
// When 'closeWindowWithLastTab' pref is enabled, closing all tabs
// can be considered equivalent to closing the window.
if (
@@ -5579,6 +5746,7 @@
@@ -5603,6 +5781,7 @@
if (lastToClose) {
this.removeTab(lastToClose, aParams);
}
@@ -615,7 +636,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
} catch (e) {
console.error(e);
}
@@ -5624,6 +5792,14 @@
@@ -5648,6 +5827,14 @@
return;
}
@@ -630,7 +651,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
let isVisibleTab = aTab.visible;
// We have to sample the tab width now, since _beginRemoveTab might
// end up modifying the DOM in such a way that aTab gets a new
@@ -5631,6 +5807,9 @@
@@ -5655,6 +5842,9 @@
// state).
let tabWidth = window.windowUtils.getBoundsWithoutFlushing(aTab).width;
let isLastTab = this.#isLastTabInWindow(aTab);
@@ -640,7 +661,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
if (
!this._beginRemoveTab(aTab, {
closeWindowFastpath: true,
@@ -5642,13 +5821,14 @@
@@ -5666,13 +5856,14 @@
telemetrySource,
})
) {
@@ -656,7 +677,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
let lockTabSizing =
!this.tabContainer.verticalMode &&
!aTab.pinned &&
@@ -5679,7 +5859,13 @@
@@ -5703,7 +5894,13 @@
// We're not animating, so we can cancel the animation stopwatch.
Glean.browserTabclose.timeAnim.cancel(aTab._closeTimeAnimTimerId);
aTab._closeTimeAnimTimerId = null;
@@ -671,7 +692,16 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
return;
}
@@ -5813,7 +5999,7 @@
@@ -5746,7 +5943,7 @@
*/
#isLastTabInWindow(tab) {
for (const otherTab of this.tabs) {
- if (otherTab != tab && otherTab.isOpen && !otherTab.hidden) {
+ if (otherTab != tab && otherTab.isOpen && !otherTab.hidden && !otherTab.hasAttribute("zen-empty-tab")) {
return false;
}
}
@@ -5837,7 +6034,7 @@
closeWindowWithLastTab != null
? closeWindowWithLastTab
: !window.toolbar.visible ||
@@ -680,7 +710,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
if (closeWindow) {
// We've already called beforeunload on all the relevant tabs if we get here,
@@ -5837,6 +6023,7 @@
@@ -5861,6 +6058,7 @@
newTab = true;
}
@@ -688,7 +718,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
aTab._endRemoveArgs = [closeWindow, newTab];
// swapBrowsersAndCloseOther will take care of closing the window without animation.
@@ -5877,13 +6064,7 @@
@@ -5901,13 +6099,7 @@
aTab._mouseleave();
if (newTab) {
@@ -703,15 +733,15 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
} else {
TabBarVisibility.update();
}
@@ -6016,6 +6197,7 @@
@@ -6040,6 +6232,7 @@
this.tabs[i]._tPos = i;
}
+ gZenWorkspaces.updateTabsContainers();
if (!this._windowIsClosing) {
if (!this.#windowIsClosing) {
// update tab close buttons state
this.tabContainer._updateCloseButtons();
@@ -6201,6 +6383,7 @@
@@ -6225,6 +6418,7 @@
memory_after: await getTotalMemoryUsage(),
time_to_unload_in_ms: timeElapsed,
});
@@ -719,7 +749,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
}
/**
@@ -6246,6 +6429,7 @@
@@ -6270,6 +6464,7 @@
}
let excludeTabs = new Set(aExcludeTabs);
@@ -727,7 +757,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
// If this tab has a successor, it should be selectable, since
// hiding or closing a tab removes that tab as a successor.
@@ -6258,15 +6442,22 @@
@@ -6282,15 +6477,22 @@
!excludeTabs.has(aTab.owner) &&
Services.prefs.getBoolPref("browser.tabs.selectOwnerOnClose")
) {
@@ -752,7 +782,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
let tab = this.tabContainer.findNextTab(aTab, {
direction: 1,
filter: _tab => remainingTabs.includes(_tab),
@@ -6280,7 +6471,7 @@
@@ -6304,7 +6506,7 @@
}
if (tab) {
@@ -761,7 +791,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
}
// If no qualifying visible tab was found, see if there is a tab in
@@ -6301,7 +6492,7 @@
@@ -6325,7 +6527,7 @@
});
}
@@ -770,7 +800,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
}
_blurTab(aTab) {
@@ -6312,7 +6503,7 @@
@@ -6336,7 +6538,7 @@
* @returns {boolean}
* False if swapping isn't permitted, true otherwise.
*/
@@ -779,7 +809,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
// Do not allow transfering a private tab to a non-private window
// and vice versa.
if (
@@ -6366,6 +6557,7 @@
@@ -6390,6 +6592,7 @@
// fire the beforeunload event in the process. Close the other
// window if this was its last tab.
if (
@@ -787,22 +817,22 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
!remoteBrowser._beginRemoveTab(aOtherTab, {
adoptedByTab: aOurTab,
closeWindowWithLastTab: true,
@@ -6377,7 +6569,7 @@
@@ -6401,7 +6604,7 @@
// If this is the last tab of the window, hide the window
// immediately without animation before the docshell swap, to avoid
// about:blank being painted.
- let [closeWindow] = aOtherTab._endRemoveArgs;
+ let [closeWindow] = !zenCloseOther ? [false] : aOtherTab._endRemoveArgs;
if (closeWindow) {
let win = aOtherTab.ownerGlobal;
let win = aOtherTab.documentGlobal;
win.windowUtils.suppressAnimation(true);
@@ -6511,11 +6703,13 @@
@@ -6535,11 +6738,13 @@
}
// Finish tearing down the tab that's going away.
+ if (zenCloseOther) {
if (closeWindow) {
aOtherTab.ownerGlobal.close();
aOtherTab.documentGlobal.close();
} else {
remoteBrowser._endRemoveTab(aOtherTab);
}
@@ -810,7 +840,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
this.setTabTitle(aOurTab);
@@ -6717,10 +6911,10 @@
@@ -6759,10 +6964,10 @@
SessionStore.deleteCustomTabValue(aTab, "hiddenBy");
}
@@ -823,7 +853,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
aTab.selected ||
aTab.closing ||
// Tabs that are sharing the screen, microphone or camera cannot be hidden.
@@ -6780,7 +6974,8 @@
@@ -6822,7 +7027,8 @@
* @param {object} [aOptions={}]
* Key-value pairs that will be serialized into the features string.
*/
@@ -833,7 +863,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
if (this.tabs.length == 1) {
return null;
}
@@ -6797,7 +6992,7 @@
@@ -6839,7 +7045,7 @@
// tell a new window to take the "dropped" tab
let args = Cc["@mozilla.org/array;1"].createInstance(Ci.nsIMutableArray);
args.appendElement(aTab.splitview ?? aTab);
@@ -842,7 +872,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
private: PrivateBrowsingUtils.isWindowPrivate(window),
features: Object.entries(aOptions)
.map(([key, value]) => `${key}=${value}`)
@@ -6805,6 +7000,8 @@
@@ -6847,6 +7053,8 @@
openerWindow: window,
args,
});
@@ -851,7 +881,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
}
/**
@@ -6917,7 +7114,7 @@
@@ -6959,7 +7167,7 @@
* `true` if element is a `<tab-group>`
*/
isTabGroup(element) {
@@ -860,7 +890,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
}
/**
@@ -7002,8 +7199,8 @@
@@ -7044,8 +7252,8 @@
}
// Don't allow mixing pinned and unpinned tabs.
@@ -871,7 +901,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
} else {
tabIndex = Math.max(tabIndex, this.pinnedTabCount);
}
@@ -7049,8 +7246,8 @@
@@ -7091,8 +7299,8 @@
this.#handleTabMove(
element,
() => {
@@ -882,7 +912,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
neighbor = neighbor.group;
}
if (neighbor?.splitview) {
@@ -7061,6 +7258,12 @@
@@ -7103,6 +7311,12 @@
return;
}
}
@@ -895,7 +925,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
if (movingForwards && neighbor) {
neighbor.after(element);
@@ -7119,23 +7322,31 @@
@@ -7161,23 +7375,31 @@
#moveTabNextTo(element, targetElement, moveBefore = false, metricsContext) {
if (this.isTabGroupLabel(targetElement)) {
targetElement = targetElement.group;
@@ -933,7 +963,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
} else if (!element.pinned && targetElement && targetElement.pinned) {
// If the caller asks to move an unpinned element next to a pinned
// tab, move the unpinned element to be the first unpinned element
@@ -7148,12 +7359,35 @@
@@ -7190,12 +7412,35 @@
// move the tab group right before the first unpinned tab.
// 4. Moving a tab group and the first unpinned tab is grouped:
// move the tab group right before the first unpinned tab's tab group.
@@ -970,7 +1000,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
// We want to include the splitview wrapper if it's the targetElement, but
// not in the case where we want to reverse tabs within the same splitview.
@@ -7162,6 +7396,7 @@
@@ -7204,6 +7449,7 @@
}
let getContainer = () =>
@@ -978,7 +1008,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
element.pinned
? this.tabContainer.pinnedTabsContainer
: this.tabContainer;
@@ -7170,11 +7405,15 @@
@@ -7212,11 +7458,15 @@
element,
() => {
if (moveBefore) {
@@ -995,7 +1025,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
}
},
metricsContext
@@ -7248,11 +7487,15 @@
@@ -7290,11 +7540,15 @@
* @param {TabMetricsContext} [metricsContext]
*/
moveTabToExistingGroup(aTab, aGroup, metricsContext) {
@@ -1014,7 +1044,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
}
if (aTab.group && aTab.group.id === aGroup.id) {
return;
@@ -7324,6 +7567,7 @@
@@ -7366,6 +7620,7 @@
let state = {
tabIndex: tab._tPos,
@@ -1022,7 +1052,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
};
if (tab.visible) {
state.elementIndex = tab.elementIndex;
@@ -7355,7 +7599,7 @@
@@ -7397,7 +7652,7 @@
let changedSplitView =
previousTabState.splitViewId != currentTabState.splitViewId;
@@ -1031,7 +1061,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
tab.dispatchEvent(
new CustomEvent("TabMove", {
bubbles: true,
@@ -7402,6 +7646,10 @@
@@ -7444,6 +7699,10 @@
moveActionCallback();
@@ -1042,13 +1072,13 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
// Clear tabs cache after moving nodes because the order of tabs may have
// changed.
this.tabContainer._invalidateCachedTabs();
@@ -7452,7 +7700,22 @@
@@ -7494,7 +7753,22 @@
* @returns {object}
* The new tab in the current window, null if the tab couldn't be adopted.
*/
- adoptTab(aTab, { elementIndex, tabIndex, selectTab = false } = {}) {
+ adoptTab(aTab, { elementIndex, tabIndex, selectTab = false, spaceId = null } = {}) {
+ if (window.gZenWorkspaces.currentWindowIsSyncing && aTab.ownerGlobal.gZenWorkspaces?.currentWindowIsSyncing) {
+ if (window.gZenWorkspaces.currentWindowIsSyncing && aTab.documentGlobal.gZenWorkspaces?.currentWindowIsSyncing) {
+ const tabId = aTab.id;
+ const thisTab = window.gZenWindowSync.getItemFromWindow(window, tabId);
+ if (thisTab) {
@@ -1066,7 +1096,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
// Swap the dropped tab with a new one we create and then close
// it in the other window (making it seem to have moved between
// windows). We also ensure that the tab we create to swap into has
@@ -7495,6 +7758,8 @@
@@ -7537,6 +7811,8 @@
}
params.skipLoad = true;
let newTab = this.addWebTab("about:blank", params);
@@ -1075,7 +1105,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
aTab.container.tabDragAndDrop.finishAnimateTabMove();
@@ -8205,7 +8470,7 @@
@@ -8247,7 +8523,7 @@
// preventDefault(). It will still raise the window if appropriate.
return;
}
@@ -1084,7 +1114,7 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
window.focus();
aEvent.preventDefault();
}
@@ -8222,7 +8487,6 @@
@@ -8264,7 +8540,6 @@
on_TabGroupCollapse(aEvent) {
aEvent.target.tabs.forEach(tab => {
@@ -1092,38 +1122,38 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
});
}
@@ -8556,7 +8820,9 @@
@@ -8618,7 +8893,9 @@
let filter = this._tabFilters.get(tab);
let filter = this.#tabFilters.get(tab);
if (filter) {
+ try {
browser.webProgress.removeProgressListener(filter);
+ } catch {}
let listener = this._tabListeners.get(tab);
let listener = this.#tabListeners.get(tab);
if (listener) {
@@ -9359,6 +9625,7 @@
@@ -9423,6 +9700,7 @@
aWebProgress.isTopLevel
) {
this.mTab.setAttribute("busy", "true");
+ if (!this.mTab.selected) this.mTab.setAttribute("unread", "true");
gBrowser._tabAttrModified(this.mTab, ["busy"]);
this.mTab._notselectedsinceload = !this.mTab.selected;
this._tab.setAttribute("busy", "true");
+ if (!this._tab.selected) this._tab.setAttribute("unread", "true");
gBrowser._tabAttrModified(this._tab, ["busy"]);
this._tab._notselectedsinceload = !this._tab.selected;
}
@@ -9439,6 +9706,7 @@
@@ -9503,6 +9781,7 @@
// known defaults. Note we use the original URL since about:newtab
// redirects to a prerendered page.
const shouldRemoveFavicon =
+ !this.mTab.zenStaticIcon &&
!this.mBrowser.mIconURL &&
+ !this._tab.zenStaticIcon &&
!this._browser.mIconURL &&
!ignoreBlank &&
!(originalLocation.spec in FAVICON_DEFAULTS);
@@ -9613,13 +9881,6 @@
this.mBrowser.originalURI = aRequest.originalURI;
@@ -9677,13 +9956,6 @@
this._browser.originalURI = aRequest.originalURI;
}
- if (!gBrowser._allowTransparentBrowser) {
- this.mBrowser.toggleAttribute(
- this._browser.toggleAttribute(
- "transparent",
- AIWindow.isAIWindowActive(window) &&
- AIWindow.isAIWindowContentPage(aLocation)
@@ -1131,8 +1161,8 @@ index 43fb79a3060e20f671ae6ffc26350c7abf497702..68a037d5a0e3416f31ffcb163592f008
- }
}
let userContextId = this.mBrowser.getAttribute("usercontextid") || 0;
@@ -10507,7 +10768,8 @@ var TabContextMenu = {
let userContextId = this._browser.getAttribute("usercontextid") || 0;
@@ -10532,7 +10804,8 @@ var TabContextMenu = {
);
contextUnpinSelectedTabs.hidden =
!this.contextTab.pinned || !this.multiselected;

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/tabbrowser/content/tabgroup.js b/browser/components/tabbrowser/content/tabgroup.js
index d1be14df27d76a191eaff05502c030fd68c46738..e9b5e90e39b594a6119081c8d707fb4a064fea9b 100644
index e78fa0dec83424c0059c081f83fda0d23bdb5a94..a7de584d9029ff9e55d809d50377593e398ee999 100644
--- a/browser/components/tabbrowser/content/tabgroup.js
+++ b/browser/components/tabbrowser/content/tabgroup.js
@@ -14,11 +14,11 @@
@@ -49,7 +49,7 @@ index d1be14df27d76a191eaff05502c030fd68c46738..e9b5e90e39b594a6119081c8d707fb4a
// Similar to above, always set up TabSelect listener, as this gets
// removed in disconnectedCallback
this.ownerGlobal.addEventListener("TabSelect", this);
this.documentGlobal.addEventListener("TabSelect", this);
this.addEventListener("SplitViewTabChange", this);
- if (this._initialized) {
@@ -129,7 +129,7 @@ index d1be14df27d76a191eaff05502c030fd68c46738..e9b5e90e39b594a6119081c8d707fb4a
}
get color() {
@@ -317,6 +348,9 @@
@@ -335,6 +366,9 @@
}
set collapsed(val) {
@@ -139,7 +139,7 @@ index d1be14df27d76a191eaff05502c030fd68c46738..e9b5e90e39b594a6119081c8d707fb4a
if (!!val == this.collapsed) {
return;
}
@@ -403,7 +437,6 @@
@@ -421,7 +455,6 @@
tabGroupName,
})
.then(result => {
@@ -147,7 +147,7 @@ index d1be14df27d76a191eaff05502c030fd68c46738..e9b5e90e39b594a6119081c8d707fb4a
});
}
@@ -478,13 +511,68 @@
@@ -496,13 +529,68 @@
* @returns {MozTabbrowserTab[]}
*/
get tabs() {
@@ -221,15 +221,15 @@ index d1be14df27d76a191eaff05502c030fd68c46738..e9b5e90e39b594a6119081c8d707fb4a
}
/**
@@ -592,7 +680,6 @@
@@ -610,7 +698,6 @@
);
} else {
if (tabOrSplitView.pinned) {
- tabOrSplitView.ownerGlobal.gBrowser.unpinTab(tabOrSplitView);
- tabOrSplitView.documentGlobal.gBrowser.unpinTab(tabOrSplitView);
}
let tabToMove =
this.ownerGlobal === tabOrSplitView.ownerGlobal
@@ -661,7 +748,7 @@
this.documentGlobal === tabOrSplitView.documentGlobal
@@ -679,7 +766,7 @@
*/
on_click(event) {
let isToggleElement =
@@ -238,7 +238,7 @@ index d1be14df27d76a191eaff05502c030fd68c46738..e9b5e90e39b594a6119081c8d707fb4a
event.target === this.#overflowCountLabel;
if (isToggleElement && event.button === 0) {
event.preventDefault();
@@ -740,5 +827,6 @@
@@ -758,5 +845,6 @@
}
}

View File

@@ -1,8 +1,23 @@
diff --git a/browser/components/tabbrowser/content/tabs.js b/browser/components/tabbrowser/content/tabs.js
index a2db42fba8d1f1d9df1dc295adb64be3f5885d50..2dd43fe4898badeaf9bc669502ead2c56982d1aa 100644
index 568f3a7cc7051ff8cb569f6bcb8018a5212f7072..b9a1cfe3a4a5035d9b06b0b3826a97c52cfcb39e 100644
--- a/browser/components/tabbrowser/content/tabs.js
+++ b/browser/components/tabbrowser/content/tabs.js
@@ -230,7 +230,7 @@
@@ -197,8 +197,12 @@
XPCOMUtils.defineLazyPreferenceGetter(
this,
"_sidebarPositionStart",
- "sidebar.position_start",
- true
+ "zen.tabs.vertical.right-side",
+ true,
+ null,
+ newValue => {
+ return !newValue;
+ }
);
if (gMultiProcessBrowser) {
@@ -220,7 +224,7 @@
this.tooltip = "tabbrowser-tab-tooltip";
@@ -11,7 +26,7 @@ index a2db42fba8d1f1d9df1dc295adb64be3f5885d50..2dd43fe4898badeaf9bc669502ead2c5
this.tabDragAndDrop.init();
}
@@ -454,7 +454,7 @@
@@ -444,7 +448,7 @@
// and we're not hitting the scroll buttons.
if (
event.button != 0 ||
@@ -20,7 +35,7 @@ index a2db42fba8d1f1d9df1dc295adb64be3f5885d50..2dd43fe4898badeaf9bc669502ead2c5
event.composedTarget.localName == "toolbarbutton"
) {
return;
@@ -535,7 +535,6 @@
@@ -525,7 +529,6 @@
});
}
} else if (isTabGroupLabel(event.target)) {
@@ -28,7 +43,7 @@ index a2db42fba8d1f1d9df1dc295adb64be3f5885d50..2dd43fe4898badeaf9bc669502ead2c5
} else if (
event.originalTarget.closest("scrollbox") &&
!Services.prefs.getBoolPref(
@@ -571,6 +570,9 @@
@@ -561,6 +564,9 @@
}
on_keydown(event) {
@@ -38,7 +53,7 @@ index a2db42fba8d1f1d9df1dc295adb64be3f5885d50..2dd43fe4898badeaf9bc669502ead2c5
let { altKey, shiftKey } = event;
let [accel, nonAccel] =
AppConstants.platform == "macosx"
@@ -765,7 +767,6 @@
@@ -755,7 +761,6 @@
this._updateCloseButtons();
if (!this.#animatingGroups.size) {
@@ -46,7 +61,7 @@ index a2db42fba8d1f1d9df1dc295adb64be3f5885d50..2dd43fe4898badeaf9bc669502ead2c5
}
document
@@ -832,7 +833,7 @@
@@ -822,7 +827,7 @@
}
get newTabButton() {
@@ -55,7 +70,7 @@ index a2db42fba8d1f1d9df1dc295adb64be3f5885d50..2dd43fe4898badeaf9bc669502ead2c5
}
get verticalMode() {
@@ -848,6 +849,7 @@
@@ -838,6 +843,7 @@
}
get overflowing() {
@@ -63,7 +78,7 @@ index a2db42fba8d1f1d9df1dc295adb64be3f5885d50..2dd43fe4898badeaf9bc669502ead2c5
return this.hasAttribute("overflow");
}
@@ -861,29 +863,56 @@
@@ -851,29 +857,56 @@
if (pinnedChildren?.at(-1)?.id == "pinned-tabs-container-periphery") {
pinnedChildren.pop();
}
@@ -93,7 +108,7 @@ index a2db42fba8d1f1d9df1dc295adb64be3f5885d50..2dd43fe4898badeaf9bc669502ead2c5
+ } else if (!isTab(tab)) {
+ tabs.splice(i, 1);
+ }
}
+ }
+ };
+ expandTabs(pinnedTabs);
+ expandTabs(unpinnedChildren);
@@ -114,7 +129,7 @@ index a2db42fba8d1f1d9df1dc295adb64be3f5885d50..2dd43fe4898badeaf9bc669502ead2c5
+ // remove the separator from the list
+ allTabs.splice(i, 1);
+ i--;
+ }
}
+ i++;
}
-
@@ -130,7 +145,7 @@ index a2db42fba8d1f1d9df1dc295adb64be3f5885d50..2dd43fe4898badeaf9bc669502ead2c5
}
get allSplitViews() {
@@ -968,29 +997,28 @@
@@ -958,29 +991,28 @@
return this.#focusableItems;
}
@@ -170,7 +185,7 @@ index a2db42fba8d1f1d9df1dc295adb64be3f5885d50..2dd43fe4898badeaf9bc669502ead2c5
this.#focusableItems = focusableItems;
return this.#focusableItems;
@@ -1003,6 +1031,7 @@
@@ -993,6 +1025,7 @@
* focusable (ex, we don't want the splitview container to be focusable, only its children).
*/
get dragAndDropElements() {
@@ -178,7 +193,7 @@ index a2db42fba8d1f1d9df1dc295adb64be3f5885d50..2dd43fe4898badeaf9bc669502ead2c5
if (this.#dragAndDropElements) {
return this.#dragAndDropElements;
}
@@ -1073,6 +1102,7 @@
@@ -1063,6 +1096,7 @@
_invalidateCachedTabs() {
this.#allTabs = null;
this._invalidateCachedVisibleTabs();
@@ -186,7 +201,7 @@ index a2db42fba8d1f1d9df1dc295adb64be3f5885d50..2dd43fe4898badeaf9bc669502ead2c5
}
_invalidateCachedVisibleTabs() {
@@ -1092,7 +1122,8 @@
@@ -1082,7 +1116,8 @@
isContainerVerticalPinnedGrid(tab) {
return (
@@ -196,7 +211,7 @@ index a2db42fba8d1f1d9df1dc295adb64be3f5885d50..2dd43fe4898badeaf9bc669502ead2c5
this.verticalMode &&
this.hasAttribute("expanded") &&
!this.expandOnHover
@@ -1186,7 +1217,7 @@
@@ -1176,7 +1211,7 @@
if (node == null) {
// We have a container for non-tab elements at the end of the scrollbox.
@@ -205,7 +220,7 @@ index a2db42fba8d1f1d9df1dc295adb64be3f5885d50..2dd43fe4898badeaf9bc669502ead2c5
}
node.before(tab);
@@ -1281,7 +1312,7 @@
@@ -1271,7 +1306,7 @@
// There are separate "new tab" buttons for horizontal tabs toolbar, vertical tabs and
// for when the tab strip is overflowed (which is shared by vertical and horizontal tabs);
// Attach the long click popup to all of them.
@@ -214,7 +229,7 @@ index a2db42fba8d1f1d9df1dc295adb64be3f5885d50..2dd43fe4898badeaf9bc669502ead2c5
const newTab2 = this.newTabButton;
const newTabVertical = document.getElementById(
"vertical-tabs-newtab-button"
@@ -1386,8 +1417,10 @@
@@ -1376,8 +1411,10 @@
*/
_handleTabSelect(aInstant) {
let selectedTab = this.selectedItem;
@@ -225,7 +240,7 @@ index a2db42fba8d1f1d9df1dc295adb64be3f5885d50..2dd43fe4898badeaf9bc669502ead2c5
selectedTab._notselectedsinceload = false;
}
@@ -1396,7 +1429,7 @@
@@ -1386,7 +1423,7 @@
* @param {boolean} [shouldScrollInstantly=false]
*/
#ensureTabIsVisible(tab, shouldScrollInstantly = false) {
@@ -234,7 +249,7 @@ index a2db42fba8d1f1d9df1dc295adb64be3f5885d50..2dd43fe4898badeaf9bc669502ead2c5
if (arrowScrollbox?.overflowing) {
arrowScrollbox.ensureElementIsVisible(tab, shouldScrollInstantly);
}
@@ -1523,7 +1556,7 @@
@@ -1513,7 +1550,7 @@
}
_notifyBackgroundTab(aTab) {

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/urlbar/UrlbarController.sys.mjs b/browser/components/urlbar/UrlbarController.sys.mjs
index bb0189fbfc91b3fc3b399b077a35f7b60a3f985f..c4dd60c6fb6d7eb2288a033708836f9983530e2c 100644
index a05894d593e4149097c473822a38f87b2220625f..1660106c2a6548920fdffd2656e5a1f12c2d548b 100644
--- a/browser/components/urlbar/UrlbarController.sys.mjs
+++ b/browser/components/urlbar/UrlbarController.sys.mjs
@@ -305,7 +305,6 @@ export class UrlbarController {
@@ -10,7 +10,7 @@ index bb0189fbfc91b3fc3b399b077a35f7b60a3f985f..c4dd60c6fb6d7eb2288a033708836f99
this.view.isOpen &&
event.ctrlKey &&
(event.key == "n" || event.key == "p")
@@ -456,6 +455,8 @@ export class UrlbarController {
@@ -494,6 +493,8 @@ export class UrlbarController {
});
}
event.preventDefault();

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/urlbar/UrlbarProvidersManager.sys.mjs b/browser/components/urlbar/UrlbarProvidersManager.sys.mjs
index d9048a3b8b1f18745c01e40e12f529db3cfaa79e..1ba124a710fcf734ea11f7ccfd4f2f6ebe53e7d2 100644
index d2e2415e6b7c8833617dd1d4d01b16b110afbfa5..4a1e6e0940789b55144afd0566ecb91d88f7d590 100644
--- a/browser/components/urlbar/UrlbarProvidersManager.sys.mjs
+++ b/browser/components/urlbar/UrlbarProvidersManager.sys.mjs
@@ -913,6 +913,7 @@ export class Query {
@@ -914,6 +914,7 @@ export class Query {
if (
result.heuristic &&
this.context.searchMode &&
@@ -10,21 +10,21 @@ index d9048a3b8b1f18745c01e40e12f529db3cfaa79e..1ba124a710fcf734ea11f7ccfd4f2f6e
(!this.context.trimmedSearchString ||
(!this.context.searchMode.engineName && !result.autofill))
) {
@@ -1043,6 +1044,7 @@ function updateSourcesIfEmpty(context) {
lazy.UrlbarTokenizer.TYPE.RESTRICT_TITLE,
lazy.UrlbarTokenizer.TYPE.RESTRICT_URL,
lazy.UrlbarTokenizer.TYPE.RESTRICT_ACTION,
+ lazy.UrlbarTokenizer.TYPE.RESTRICT_WORKSPACE,
@@ -1044,6 +1045,7 @@ function updateSourcesIfEmpty(context) {
lazy.UrlbarShared.TOKEN_TYPE.RESTRICT_TITLE,
lazy.UrlbarShared.TOKEN_TYPE.RESTRICT_URL,
lazy.UrlbarShared.TOKEN_TYPE.RESTRICT_ACTION,
+ lazy.UrlbarShared.TOKEN_TYPE.RESTRICT_WORKSPACE,
].includes(t.type)
);
@@ -1100,6 +1102,14 @@ function updateSourcesIfEmpty(context) {
@@ -1103,6 +1105,14 @@ function updateSourcesIfEmpty(context) {
acceptedSources.push(source);
}
break;
+ case lazy.UrlbarUtils.RESULT_SOURCE.WORKSPACES:
+ if (
+ restrictTokenType === lazy.UrlbarTokenizer.TYPE.RESTRICT_WORKSPACE ||
+ restrictTokenType === lazy.UrlbarShared.TOKEN_TYPE.RESTRICT_WORKSPACE ||
+ !restrictTokenType
+ ) {
+ acceptedSources.push(source);

View File

@@ -1,15 +0,0 @@
diff --git a/browser/components/urlbar/UrlbarResult.sys.mjs b/browser/components/urlbar/UrlbarResult.sys.mjs
index 21f7938f76375e7230f9509e4932cafa4d0e57f2..ab96b160b6c65da3bf267d9fe2f1f35c7507466e 100644
--- a/browser/components/urlbar/UrlbarResult.sys.mjs
+++ b/browser/components/urlbar/UrlbarResult.sys.mjs
@@ -181,6 +181,10 @@ export class UrlbarResult {
return this.#heuristic;
}
+ set heuristic(value) {
+ this.#heuristic = value;
+ }
+
get hideRowLabel() {
return this.#hideRowLabel;
}

View File

@@ -1,28 +0,0 @@
diff --git a/browser/components/urlbar/UrlbarTokenizer.sys.mjs b/browser/components/urlbar/UrlbarTokenizer.sys.mjs
index d4af0ee5138a69139b94d898fb07e2345172f025..f750aae3f9f0a849ca009784510575b2b7119e6d 100644
--- a/browser/components/urlbar/UrlbarTokenizer.sys.mjs
+++ b/browser/components/urlbar/UrlbarTokenizer.sys.mjs
@@ -66,6 +66,7 @@ export var UrlbarTokenizer = {
// `looksLikeOrigin()` returned `LOOKS_LIKE_ORIGIN.OTHER` for this token. It
// may or may not be an origin.
POSSIBLE_ORIGIN_BUT_SEARCH_ALLOWED: 12,
+ RESTRICT_WORKSPACE: 13,
}),
// The special characters below can be typed into the urlbar to restrict
@@ -83,6 +84,7 @@ export var UrlbarTokenizer = {
TITLE: "#",
URL: "$",
ACTION: ">",
+ WORKSPACE: "`",
}),
// The keys of characters in RESTRICT that will enter search mode.
@@ -97,6 +99,7 @@ export var UrlbarTokenizer = {
if (lazy.UrlbarPrefs.get("scotchBonnet.enableOverride")) {
keys.push(this.RESTRICT.ACTION);
}
+ keys.push(this.RESTRICT.WORKSPACE);
return new Set(keys);
},

View File

@@ -1,9 +1,9 @@
diff --git a/browser/components/urlbar/UrlbarUtils.sys.mjs b/browser/components/urlbar/UrlbarUtils.sys.mjs
index 62367c5a77614e5973791abacd068b39e0f3ab34..c930943b5bfa8a2e6dee43f0ec7a10274a7c7638 100644
index aa7c67f2bfaa3f15d592a14b527a8721dfc9bc6f..d2fe012796ea3a5be05090a732011b3cf92b78be 100644
--- a/browser/components/urlbar/UrlbarUtils.sys.mjs
+++ b/browser/components/urlbar/UrlbarUtils.sys.mjs
@@ -109,6 +109,8 @@ export var UrlbarUtils = {
RESTRICT_SEARCH_KEYWORD: "restrictSearchKeyword",
@@ -110,6 +110,8 @@ export var UrlbarUtils = {
SEMANTIC_HISTORY: "semanticHistory",
SUGGESTED_INDEX: "suggestedIndex",
TAIL_SUGGESTION: "tailSuggestion",
+ ZEN_ACTION: "zenAction",
@@ -11,7 +11,7 @@ index 62367c5a77614e5973791abacd068b39e0f3ab34..c930943b5bfa8a2e6dee43f0ec7a1027
}),
// Defines provider types.
@@ -170,6 +172,8 @@ export var UrlbarUtils = {
@@ -171,6 +173,8 @@ export var UrlbarUtils = {
OTHER_NETWORK: 6,
ADDON: 7,
ACTIONS: 8,
@@ -20,13 +20,13 @@ index 62367c5a77614e5973791abacd068b39e0f3ab34..c930943b5bfa8a2e6dee43f0ec7a1027
}),
// Per-result exposure telemetry.
@@ -319,6 +323,14 @@ export var UrlbarUtils = {
@@ -320,6 +324,14 @@ export var UrlbarUtils = {
telemetryLabel: "actions",
uiLabel: "urlbar-searchmode-actions2",
},
+ {
+ source: this.RESULT_SOURCE.WORKSPACES,
+ restrict: lazy.UrlbarTokenizer.RESTRICT.WORKSPACE,
+ restrict: lazy.UrlbarShared.RESTRICT_TOKENS.WORKSPACE,
+ icon: "chrome://browser/skin/zen-icons/selectable/layers.svg",
+ pref: "shortcuts.workspaces",
+ telemetryLabel: "workspaces",
@@ -35,7 +35,7 @@ index 62367c5a77614e5973791abacd068b39e0f3ab34..c930943b5bfa8a2e6dee43f0ec7a1027
]);
},
@@ -611,6 +623,12 @@ export var UrlbarUtils = {
@@ -612,6 +624,12 @@ export var UrlbarUtils = {
return this.RESULT_GROUP.HEURISTIC_FALLBACK;
case "UrlbarProviderHistoryUrlHeuristic":
return this.RESULT_GROUP.HEURISTIC_HISTORY_URL;

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/urlbar/UrlbarValueFormatter.sys.mjs b/browser/components/urlbar/UrlbarValueFormatter.sys.mjs
index 344a9a5b969e679040a650dad311c7413f52bbbd..24111cef5e476253f4e69c4d99f6f220bfd8cd7e 100644
index 7ccffa60be42ba5e554b0e91bc831c56c24dfb42..ca5d6f983490f6cfc392c92f3570a5fb1bb3c43d 100644
--- a/browser/components/urlbar/UrlbarValueFormatter.sys.mjs
+++ b/browser/components/urlbar/UrlbarValueFormatter.sys.mjs
@@ -77,7 +77,7 @@ export class UrlbarValueFormatter {
@@ -11,7 +11,7 @@ index 344a9a5b969e679040a650dad311c7413f52bbbd..24111cef5e476253f4e69c4d99f6f220
});
}
@@ -105,6 +105,18 @@ export class UrlbarValueFormatter {
@@ -126,6 +126,18 @@ export class UrlbarValueFormatter {
}
#ensureFormattedHostVisible(urlMetaData) {
@@ -30,7 +30,7 @@ index 344a9a5b969e679040a650dad311c7413f52bbbd..24111cef5e476253f4e69c4d99f6f220
// Make sure the host is always visible. Since it is aligned on
// the first strong directional character, we set scrollLeft
// appropriately to ensure the domain stays visible in case of an
@@ -371,7 +383,7 @@ export class UrlbarValueFormatter {
@@ -403,7 +415,7 @@ export class UrlbarValueFormatter {
* @returns {boolean}
* True if formatting was applied and false if not.
*/
@@ -39,11 +39,15 @@ index 344a9a5b969e679040a650dad311c7413f52bbbd..24111cef5e476253f4e69c4d99f6f220
let urlMetaData = this.#getUrlMetaData();
if (!urlMetaData) {
return false;
@@ -640,6 +652,7 @@ export class UrlbarValueFormatter {
this.#window.requestAnimationFrame(() => {
if (instance == this.#resizeInstance) {
this.#ensureFormattedHostVisible();
+ this._formatURL();
@@ -688,9 +700,10 @@ export class UrlbarValueFormatter {
) {
// The host range is no longer valid.
this.#removeURLFormat();
- this.#formatURL();
+ this._formatURL();
} else {
this.#ensureFormattedHostVisible();
+ this._formatURL();
}
}
});
}, 100);

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/urlbar/content/UrlbarInput.mjs b/browser/components/urlbar/content/UrlbarInput.mjs
index d6615ec5a29f3e3327ac4171f3fc5d9a69bd09fe..c166b7de23c35716bf8c51b6b9c72f771f0a75a8 100644
index 0b1b4b2f0f8d6b0fb126aa1224409ab6f1ffb8d8..942c6e1e3b6cd9de65df54a1d83884f2633c1284 100644
--- a/browser/components/urlbar/content/UrlbarInput.mjs
+++ b/browser/components/urlbar/content/UrlbarInput.mjs
@@ -98,6 +98,13 @@ const lazy = XPCOMUtils.declareLazy({
@@ -16,7 +16,7 @@ index d6615ec5a29f3e3327ac4171f3fc5d9a69bd09fe..c166b7de23c35716bf8c51b6b9c72f77
const UNLIMITED_MAX_RESULTS = 99;
let getBoundsWithoutFlushing = element =>
@@ -743,7 +750,16 @@ ${
@@ -770,7 +777,16 @@ ${
// See _on_select(). HTMLInputElement.select() dispatches a "select"
// event but does not set the primary selection.
this._suppressPrimaryAdjustment = true;
@@ -27,13 +27,13 @@ index d6615ec5a29f3e3327ac4171f3fc5d9a69bd09fe..c166b7de23c35716bf8c51b6b9c72f77
+ zenToolbox.hasAttribute("zen-user-show")
+ ));
this.inputField.select();
+ this.document.ownerGlobal.setTimeout(() => {
+ this.document.documentGlobal.setTimeout(() => {
+ this.window.document.documentElement.removeAttribute("supress-primary-adjustment");
+ }, 0);
this._suppressPrimaryAdjustment = false;
}
@@ -817,6 +833,10 @@ ${
@@ -844,6 +860,10 @@ ${
hideSearchTerms = false,
isSameDocument = false,
} = {}) {
@@ -44,11 +44,10 @@ index d6615ec5a29f3e3327ac4171f3fc5d9a69bd09fe..c166b7de23c35716bf8c51b6b9c72f77
if (!this.#isAddressbar) {
throw new Error(
"Cannot set URI for UrlbarInput that is not an address bar"
@@ -1106,8 +1126,16 @@ ${
return;
}
@@ -1138,7 +1158,16 @@ ${
this.searchModeSwitcher?.updateSearchIcon();
}
-
+ const zenToolbox = this.document.getElementById("navigator-toolbox");
+ this.window.document.documentElement.setAttribute("supress-primary-adjustment", !(
+ zenToolbox.hasAttribute("zen-has-hover") ||
@@ -56,16 +55,16 @@ index d6615ec5a29f3e3327ac4171f3fc5d9a69bd09fe..c166b7de23c35716bf8c51b6b9c72f77
+ zenToolbox.hasAttribute("zen-user-show")
+ ));
this.handleNavigation({ event });
+ this.document.ownerGlobal.setTimeout(() => {
+ this.document.documentGlobal.setTimeout(() => {
+ this.window.document.documentElement.removeAttribute("supress-primary-adjustment");
+ }, 100);
}
/**
@@ -1551,7 +1579,11 @@ ${
}
@@ -1630,7 +1659,11 @@ ${
openParams.avoidBrowserFocus = keepViewOpen;
if (!this.#providesSearchMode(result)) {
if (!this.#providesSearchMode(result) && !keepViewOpen) {
- this.view.close({ elementPicked: true });
+ if (this._zenHandleUrlbarClose) {
+ this._zenHandleUrlbarClose(true, true);
@@ -75,7 +74,7 @@ index d6615ec5a29f3e3327ac4171f3fc5d9a69bd09fe..c166b7de23c35716bf8c51b6b9c72f77
}
if (isCanonized) {
@@ -2858,6 +2890,42 @@ ${
@@ -2940,6 +2973,42 @@ ${
await this.#updateLayoutBreakoutDimensions();
}
@@ -118,9 +117,9 @@ index d6615ec5a29f3e3327ac4171f3fc5d9a69bd09fe..c166b7de23c35716bf8c51b6b9c72f77
startLayoutExtend() {
if (!this.#allowBreakout || this.hasAttribute("breakout-extend")) {
// Do not expand if the Urlbar does not support being expanded or it is
@@ -2872,6 +2940,13 @@ ${
this.setAttribute("breakout-extend", "true");
@@ -2957,6 +3026,13 @@ ${
this.toggleAttribute("breakout-extend", true);
this.#updateTextboxPosition();
+ this.window.gZenUIManager.onUrlbarOpen();
+ if (this.zenUrlbarBehavior == 'float' || (this.zenUrlbarBehavior == 'floating-on-type' && !this.focusedViaMousedown)) {
@@ -132,7 +131,7 @@ index d6615ec5a29f3e3327ac4171f3fc5d9a69bd09fe..c166b7de23c35716bf8c51b6b9c72f77
// Enable the animation only after the first extend call to ensure it
// doesn't run when opening a new window.
if (!this.hasAttribute("breakout-extend-animate")) {
@@ -2891,6 +2966,29 @@ ${
@@ -2984,6 +3060,29 @@ ${
return;
}
@@ -153,16 +152,16 @@ index d6615ec5a29f3e3327ac4171f3fc5d9a69bd09fe..c166b7de23c35716bf8c51b6b9c72f77
+ zenToolbox.hasAttribute("zen-user-show")
+ ));
+ this.window.gBrowser.selectedBrowser.focus();
+ this.document.ownerGlobal.setTimeout(() => {
+ this.document.documentGlobal.setTimeout(() => {
+ this.window.document.documentElement.removeAttribute("supress-primary-adjustment");
+ }, 100);
+ this.window.gZenUIManager.onUrlbarClose();
+ this.removeAttribute("zen-floating-urlbar");
+
this.removeAttribute("breakout-extend");
this.toggleAttribute("breakout-extend", false);
this.#updateTextboxPosition();
}
@@ -2921,7 +3019,7 @@ ${
@@ -3031,7 +3130,7 @@ ${
forceUnifiedSearchButtonAvailable = false
) {
let prevState = this.getAttribute("pageproxystate");
@@ -171,9 +170,9 @@ index d6615ec5a29f3e3327ac4171f3fc5d9a69bd09fe..c166b7de23c35716bf8c51b6b9c72f77
this.setAttribute("pageproxystate", state);
this._inputContainer.setAttribute("pageproxystate", state);
this._identityBox?.setAttribute("pageproxystate", state);
@@ -3198,10 +3296,12 @@ ${
return;
@@ -3314,10 +3413,12 @@ ${
}
this.style.top = px(
+ this.window.gZenVerticalTabsManager._hasSetSingleToolbar ?
this.parentNode.getBoxQuads({
@@ -184,7 +183,7 @@ index d6615ec5a29f3e3327ac4171f3fc5d9a69bd09fe..c166b7de23c35716bf8c51b6b9c72f77
);
}
@@ -3260,9 +3360,10 @@ ${
@@ -3376,9 +3477,10 @@ ${
return;
}
@@ -196,7 +195,7 @@ index d6615ec5a29f3e3327ac4171f3fc5d9a69bd09fe..c166b7de23c35716bf8c51b6b9c72f77
);
this.style.setProperty(
"--urlbar-height",
@@ -3768,6 +3869,7 @@ ${
@@ -3883,6 +3985,7 @@ ${
}
_toggleActionOverride(event) {
@@ -204,7 +203,7 @@ index d6615ec5a29f3e3327ac4171f3fc5d9a69bd09fe..c166b7de23c35716bf8c51b6b9c72f77
if (
event.keyCode == KeyEvent.DOM_VK_SHIFT ||
event.keyCode == KeyEvent.DOM_VK_ALT ||
@@ -3880,8 +3982,8 @@ ${
@@ -3995,8 +4098,8 @@ ${
if (!this.#isAddressbar) {
return val;
}
@@ -215,15 +214,15 @@ index d6615ec5a29f3e3327ac4171f3fc5d9a69bd09fe..c166b7de23c35716bf8c51b6b9c72f77
: val;
// Only trim value if the directionality doesn't change to RTL and we're not
// showing a strikeout https protocol.
@@ -4180,6 +4282,7 @@ ${
resultDetails = null,
browser = this.window.gBrowser.selectedBrowser
@@ -4298,6 +4401,7 @@ ${
browser = this.window.gBrowser.selectedBrowser,
keepViewOpen = false
) {
+ openUILinkWhere = this.window.gZenUIManager.getOpenUILinkWhere(url, browser, openUILinkWhere);
if (this.#isAddressbar) {
this.#prepareAddressbarLoad(
url,
@@ -4291,6 +4394,10 @@ ${
@@ -4411,6 +4515,10 @@ ${
}
reuseEmpty = true;
}
@@ -234,7 +233,7 @@ index d6615ec5a29f3e3327ac4171f3fc5d9a69bd09fe..c166b7de23c35716bf8c51b6b9c72f77
if (
where == "tab" &&
reuseEmpty &&
@@ -4298,6 +4405,9 @@ ${
@@ -4418,6 +4526,9 @@ ${
) {
where = "current";
}
@@ -244,7 +243,7 @@ index d6615ec5a29f3e3327ac4171f3fc5d9a69bd09fe..c166b7de23c35716bf8c51b6b9c72f77
return where;
}
@@ -4552,6 +4662,7 @@ ${
@@ -4672,6 +4783,7 @@ ${
this.setResultForCurrentValue(null);
this.handleCommand();
this.controller.clearLastQueryContextCache();
@@ -252,7 +251,7 @@ index d6615ec5a29f3e3327ac4171f3fc5d9a69bd09fe..c166b7de23c35716bf8c51b6b9c72f77
this._suppressStartQuery = false;
});
@@ -4559,7 +4670,6 @@ ${
@@ -4679,7 +4791,6 @@ ${
contextMenu.addEventListener("popupshowing", () => {
// Close the results pane when the input field contextual menu is open,
// because paste and go doesn't want a result selection.
@@ -260,7 +259,7 @@ index d6615ec5a29f3e3327ac4171f3fc5d9a69bd09fe..c166b7de23c35716bf8c51b6b9c72f77
let controller =
this.document.commandDispatcher.getControllerForCommand("cmd_paste");
@@ -4715,7 +4825,11 @@ ${
@@ -4842,7 +4953,11 @@ ${
if (!engineName && !source && !this.hasAttribute("searchmode")) {
return;
}
@@ -273,7 +272,7 @@ index d6615ec5a29f3e3327ac4171f3fc5d9a69bd09fe..c166b7de23c35716bf8c51b6b9c72f77
if (this._searchModeIndicatorTitle) {
this._searchModeIndicatorTitle.textContent = "";
this._searchModeIndicatorTitle.removeAttribute("data-l10n-id");
@@ -5031,6 +5145,7 @@ ${
@@ -5159,6 +5274,7 @@ ${
this.document.l10n.setAttributes(
this.inputField,
@@ -281,7 +280,7 @@ index d6615ec5a29f3e3327ac4171f3fc5d9a69bd09fe..c166b7de23c35716bf8c51b6b9c72f77
l10nId,
l10nId == "urlbar-placeholder-with-name"
? { name: engineName }
@@ -5156,6 +5271,11 @@ ${
@@ -5282,6 +5398,11 @@ ${
}
_on_click(event) {
@@ -293,7 +292,7 @@ index d6615ec5a29f3e3327ac4171f3fc5d9a69bd09fe..c166b7de23c35716bf8c51b6b9c72f77
switch (event.target) {
case this.inputField:
case this._inputContainer:
@@ -5242,7 +5362,7 @@ ${
@@ -5374,7 +5495,7 @@ ${
}
}
@@ -302,7 +301,7 @@ index d6615ec5a29f3e3327ac4171f3fc5d9a69bd09fe..c166b7de23c35716bf8c51b6b9c72f77
this.view.autoOpen({ event });
} else {
if (this._untrimOnFocusAfterKeydown) {
@@ -5282,9 +5402,16 @@ ${
@@ -5414,9 +5535,16 @@ ${
}
_on_mousedown(event) {
@@ -320,7 +319,7 @@ index d6615ec5a29f3e3327ac4171f3fc5d9a69bd09fe..c166b7de23c35716bf8c51b6b9c72f77
if (
event.composedTarget != this.inputField &&
event.composedTarget != this._inputContainer
@@ -5294,6 +5421,10 @@ ${
@@ -5426,6 +5554,10 @@ ${
this.focusedViaMousedown = !this.focused;
this.#preventClickSelectsAll = this.focused;
@@ -331,7 +330,7 @@ index d6615ec5a29f3e3327ac4171f3fc5d9a69bd09fe..c166b7de23c35716bf8c51b6b9c72f77
// Keep the focus status, since the attribute may be changed
// upon calling this.focus().
@@ -5329,7 +5460,7 @@ ${
@@ -5461,7 +5593,7 @@ ${
}
// Don't close the view when clicking on a tab; we may want to keep the
// view open on tab switch, and the TabSelect event arrived earlier.
@@ -340,7 +339,7 @@ index d6615ec5a29f3e3327ac4171f3fc5d9a69bd09fe..c166b7de23c35716bf8c51b6b9c72f77
break;
}
@@ -5636,7 +5767,7 @@ ${
@@ -5750,7 +5882,7 @@ ${
// When we are in actions search mode we can show more results so
// increase the limit.
let maxResults =

View File

@@ -0,0 +1,15 @@
diff --git a/browser/components/urlbar/content/UrlbarResult.mjs b/browser/components/urlbar/content/UrlbarResult.mjs
index 30662cbb0551a5efe12926eb1524719ece24ee48..1ed598c8b8c0836759b5af10e6cc9f5e334744ef 100644
--- a/browser/components/urlbar/content/UrlbarResult.mjs
+++ b/browser/components/urlbar/content/UrlbarResult.mjs
@@ -184,6 +184,10 @@ export class UrlbarResult {
return this.#heuristic;
}
+ set heuristic(value) {
+ this.#heuristic = value;
+ }
+
get hideRowLabel() {
return this.#hideRowLabel;
}

View File

@@ -0,0 +1,28 @@
diff --git a/browser/components/urlbar/content/UrlbarShared.mjs b/browser/components/urlbar/content/UrlbarShared.mjs
index 5522d8a8c8d9549453c1700ff6fec40be52747ce..7b8ad33cc337907249749074057254bf7e316994 100644
--- a/browser/components/urlbar/content/UrlbarShared.mjs
+++ b/browser/components/urlbar/content/UrlbarShared.mjs
@@ -32,6 +32,7 @@ export const UrlbarShared = {
// `looksLikeOrigin()` returned `LOOKS_LIKE_ORIGIN.OTHER` for this token.
// It may or may not be an origin.
POSSIBLE_ORIGIN_BUT_SEARCH_ALLOWED: 12,
+ RESTRICT_WORKSPACE: 13,
}),
/**
@@ -52,6 +53,7 @@ export const UrlbarShared = {
TITLE: "#",
URL: "$",
ACTION: ">",
+ WORKSPACE: "`",
}),
/**
@@ -68,6 +70,7 @@ export const UrlbarShared = {
if (lazy.UrlbarPrefs.get("scotchBonnet.enableOverride")) {
keys.push(this.RESTRICT_TOKENS.ACTION);
}
+ keys.push(this.RESTRICT_TOKENS.WORKSPACE);
return new Set(keys);
},
};

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/urlbar/UrlbarView.sys.mjs b/browser/components/urlbar/UrlbarView.sys.mjs
index b665adb1a1ce8bbae8df4cbea6c3248c3e4fb431..1de7f9461b8ccbd4680b917e6dd5ba3c02f69a94 100644
--- a/browser/components/urlbar/UrlbarView.sys.mjs
+++ b/browser/components/urlbar/UrlbarView.sys.mjs
@@ -640,7 +640,7 @@ export class UrlbarView {
diff --git a/browser/components/urlbar/content/UrlbarView.mjs b/browser/components/urlbar/content/UrlbarView.mjs
index 8afb2bf4a757b3ef7902f5a6e6eed6b70ca2845e..440dea1e66540ca1998cb7464b6695ac823fedcb 100644
--- a/browser/components/urlbar/content/UrlbarView.mjs
+++ b/browser/components/urlbar/content/UrlbarView.mjs
@@ -674,7 +674,7 @@ export class UrlbarView {
!this.input.value ||
this.input.getAttribute("pageproxystate") == "valid"
) {
@@ -11,7 +11,7 @@ index b665adb1a1ce8bbae8df4cbea6c3248c3e4fb431..1de7f9461b8ccbd4680b917e6dd5ba3c
// Try to reuse the cached top-sites context. If it's not cached, then
// there will be a gap of time between when the input is focused and
// when the view opens that can be perceived as flicker.
@@ -777,10 +777,6 @@ export class UrlbarView {
@@ -812,10 +812,6 @@ export class UrlbarView {
}
// If search mode isn't active, close the view.
@@ -22,7 +22,7 @@ index b665adb1a1ce8bbae8df4cbea6c3248c3e4fb431..1de7f9461b8ccbd4680b917e6dd5ba3c
// Search mode is active. If the one-offs should be shown, make sure they
// are enabled and show the view.
@@ -2988,6 +2984,8 @@ export class UrlbarView {
@@ -3031,6 +3027,8 @@ export class UrlbarView {
if (row?.hasAttribute("row-selectable")) {
row?.toggleAttribute("selected", true);
}
@@ -31,7 +31,7 @@ index b665adb1a1ce8bbae8df4cbea6c3248c3e4fb431..1de7f9461b8ccbd4680b917e6dd5ba3c
if (element != row) {
row?.toggleAttribute("descendant-selected", true);
}
@@ -3477,7 +3475,7 @@ export class UrlbarView {
@@ -3544,7 +3542,7 @@ export class UrlbarView {
}
#enableOrDisableRowWrap() {

View File

@@ -1,8 +1,8 @@
diff --git a/browser/extensions/newtab/lib/ActivityStream.sys.mjs b/browser/extensions/newtab/lib/ActivityStream.sys.mjs
index edb61ebece92f53d6edc8522c0dfea01159121dc..fd57751828254ebf9b05af13c26afa55ffa7ed00 100644
index d88bc01e9a085f2970f4a80bdce94e06d8dcb693..a3dc7795deda5df2a354803a338c63e85a424bc0 100644
--- a/browser/extensions/newtab/lib/ActivityStream.sys.mjs
+++ b/browser/extensions/newtab/lib/ActivityStream.sys.mjs
@@ -347,7 +347,7 @@ export const PREFS_CONFIG = new Map([
@@ -353,7 +353,7 @@ export const PREFS_CONFIG = new Map([
"showSponsoredTopSites",
{
title: "Show sponsored top sites",

View File

@@ -1,8 +1,8 @@
diff --git a/browser/installer/package-manifest.in b/browser/installer/package-manifest.in
index 36eafe35063f02fe3d4acaab24a08dc1b7b0ae24..b6bf327bf286de5246e5c50d89519d16d5771caf 100644
index 83e52b260c380b8a4fdcb9146c36a048adffba68..f55844c294bc0a0e648fd6fc09f63218c9b71de2 100644
--- a/browser/installer/package-manifest.in
+++ b/browser/installer/package-manifest.in
@@ -386,9 +386,9 @@ bin/libfreebl_64int_3.so
@@ -390,9 +390,9 @@ bin/libfreebl_64int_3.so
;
#ifdef MOZ_CRASHREPORTER
#ifdef XP_MACOSX

View File

@@ -1,5 +1,5 @@
diff --git a/browser/installer/windows/nsis/installer.nsi b/browser/installer/windows/nsis/installer.nsi
index 36fbee18edd138036c23ee77806f47cd10efce55..f70893700c54bdbc6d6fc5b760fd9a3654eb39e7 100755
index 785e5ccfba55a98390652a61be9dbdef1e4815eb..cba2c3bb3b2e5bcbe8ba58a40bc9bc145df81fdd 100755
--- a/browser/installer/windows/nsis/installer.nsi
+++ b/browser/installer/windows/nsis/installer.nsi
@@ -845,7 +845,7 @@ Section "-InstallEndCleanup"

View File

@@ -1,7 +1,7 @@
diff --git a/browser/installer/windows/nsis/uninstaller.nsi b/browser/installer/windows/nsis/uninstaller.nsi
old mode 100755
new mode 100644
index 0e2f7fa874b865b2a354c5ca612c5714f6ac5b69..0b1182279336972705bc3ff47e69353b997eb1bd
index becbb0f70c84eb7f2d9bff5a3aedcbb7a78a61cf..05835d2088ab631316a25a9f0728898bd7998d8d
--- a/browser/installer/windows/nsis/uninstaller.nsi
+++ b/browser/installer/windows/nsis/uninstaller.nsi
@@ -516,6 +516,7 @@ Section "Uninstall"

View File

@@ -1,5 +1,5 @@
diff --git a/browser/modules/BrowserWindowTracker.sys.mjs b/browser/modules/BrowserWindowTracker.sys.mjs
index 9aecab66d8f23fac9f16cea2120a5fe903ae1122..692f2bfe3899a58925789503a6bb2a547cdbf7f3 100644
index 7e2f1d2b9ca10bd48fa1a0cd1f175a99b4169b90..505d6fc5110b99c73a0054abbe098c154227cf50 100644
--- a/browser/modules/BrowserWindowTracker.sys.mjs
+++ b/browser/modules/BrowserWindowTracker.sys.mjs
@@ -330,6 +330,7 @@ export const BrowserWindowTracker = {

Some files were not shown because too many files have changed in this diff Show More