Merge branch 'zen-browser:dev' into patch-2

This commit is contained in:
Cristian Cezar Moisés
2025-01-11 23:47:07 -03:00
committed by GitHub
57 changed files with 801 additions and 448 deletions

View File

@@ -69,4 +69,12 @@ body:
attributes:
label: Data from about:support if applicable (click on the "Copy text to clipboard" button)
description: Please copy and paste about:support data if you think it might be relevant. This will help us understand your environment.
render: shell
value: |
<details>
<summary>about:support</summary>
<!-- Please leave one blank line below for enabling the code block rendering. -->
```
Select this line and paste your about:support clipboard
```
</details>

View File

@@ -63,9 +63,9 @@ jobs:
with:
submodules: recursive
token: ${{ secrets.DEPLOY_KEY }}
fetch-depth: 0
- name: Check if correct branch
if: ${{ inputs.create_release }}
run: |
echo "Checking if we are on the correct branch"
git branch
@@ -74,6 +74,8 @@ jobs:
branch="${{ inputs.update_branch }}"
if [[ $branch == "twilight" ]]; then
branch="dev"
elif [[ $branch == "release" ]]; then
branch="stable"
fi
if [[ $(git branch --show-current) != $branch ]]; then
echo ">>> Branch mismatch"
@@ -275,15 +277,15 @@ jobs:
- name: Compress
run: |
cd engine
tar --use-compress-program=zstd -hcf ../zen.source.tar.gz *
tar --use-compress-program=zstd -hcf ../zen.source.tar.zst *
cd ..
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
retention-days: 5
name: zen.source.tar.gz
path: ./zen.source.tar.gz
name: zen.source.tar.zst
path: ./zen.source.tar.zst
windows-step-1:
name: Windows build step 1 (PGO build)
@@ -385,7 +387,7 @@ jobs:
if [ "${{ inputs.update_branch }}" = "twilight" ]; then
sed -i -e 's/Name=Zen Browser/Name=Zen Twilight/g' AppDir/zen.desktop
sed -i -e 's/StartupWMClass=zen-release/StartupWMClass=zen-twilight/g' AppDir/zen.desktop
sed -i -e 's/StartupWMClass=zen/StartupWMClass=zen-twilight/g' AppDir/zen.desktop
fi
APPDIR=AppDir
@@ -489,7 +491,7 @@ jobs:
uses: marvinpinto/action-automatic-releases@master
with:
files: |
zen.source.tar.gz
zen.source.tar.zst
zen.linux-x86_64.tar.bz2
zen.linux-aarch64.tar.bz2
zen-x86_64.AppImage
@@ -512,7 +514,7 @@ jobs:
title: 'Twilight build - ${{ needs.build-data.outputs.version }} (${{ needs.build-data.outputs.build_date }} at ${{ needs.build-data.outputs.build_time }})'
draft: false
prerelease: true
repo_token: ${{ github.token }}
repo_token: ${{ secrets.DEPLOY_KEY }}
env:
GITHUB_REPOSITORY: ${{ github.repository }}
@@ -525,7 +527,7 @@ jobs:
prerelease: false
title: 'Release build - ${{ needs.build-data.outputs.version }} (${{ needs.build-data.outputs.build_date }})'
files: |
zen.source.tar.gz
zen.source.tar.zst
zen.linux-x86_64.tar.bz2
zen.linux-aarch64.tar.bz2
zen-x86_64.AppImage

View File

@@ -16,7 +16,8 @@ jobs:
build-linux:
permissions:
contents: write
runs-on: ubuntu-latest
# aarch64 does not need full 16x
runs-on: ${{ (inputs.release-branch == 'release' && matrix.arch == 'x86_64') && 'ubuntu-latest' || 'ubuntu-latest' }}
strategy:
fail-fast: false
matrix:
@@ -125,22 +126,16 @@ jobs:
- name: Build
env:
SURFER_COMPAT: ${{ matrix.arch }}
ZEN_RELEASE_BRANCH: ${{ inputs.release-branch }}
continue-on-error: true
run: |
export SURFER_PLATFORM="linux"
sh .github/workflows/src/release-build.sh
- name: Build again if it failed
if: failure()
env:
SURFER_COMPAT: ${{ matrix.arch }}
run: |
export SURFER_PLATFORM="linux"
sh .github/workflows/src/release-build.sh
bash .github/workflows/src/release-build.sh
- name: Package
env:
SURFER_COMPAT: ${{ matrix.arch }}
ZEN_GA_DISABLE_PGO: true
run: |
export SURFER_PLATFORM="linux"
export ZEN_RELEASE=1

View File

@@ -15,7 +15,7 @@ on:
jobs:
mac-build:
name: Build macOS - ${{ matrix.arch }}
runs-on: macos-14
runs-on: ${{ inputs.release-branch == 'release' && 'macos-14' || 'macos-14' }}
strategy:
fail-fast: false
@@ -115,18 +115,10 @@ jobs:
- name: Build Zen
env:
SURFER_COMPAT: ${{ matrix.arch }}
ZEN_RELEASE_BRANCH: ${{ inputs.release-branch }}
run: |
export SURFER_PLATFORM="darwin"
if test "${{ matrix.arch }}" = "x86_64"; then
export ZEN_DISABLE_LTO=1
fi
sh .github/workflows/src/release-build.sh
- name: Rebuild Zen if failed
if: failure()
run: |
export SURFER_PLATFORM="darwin"
sh .github/workflows/src/release-build.sh
bash .github/workflows/src/release-build.sh
- name: Import APPLE DEVELOPER ID CERTIFICATE for .app
uses: Apple-Actions/import-codesign-certs@v3
@@ -134,9 +126,18 @@ jobs:
p12-file-base64: ${{ secrets.macOS_CERTIFICATES_P12_For_App_BASE64 }}
p12-password: ${{ secrets.macOS_CERTIFICATES_P12_PASSWORD }}
- name: Import provisioning profile for .app
run: |
echo "${{ secrets.macOS_PROVISIONING_PROFILE }}" | base64 --decode > ./engine/Zen_Browser.provisionprofile
ls -la
- name: Package
env:
SURFER_COMPAT: ${{ matrix.arch }}
ZEN_GA_DISABLE_PGO: true
MACOS_APPLE_ACCOUNT_ID: ${{ secrets.macOS_AppleAccountId }}
MACOS_APPLE_DEVELOPER_ID_TEAM_ID: ${{ secrets.macOS_AppleDeveloperIdTeamId }}
MACOS_APPLE_DEVELOPER_ID_PASSWORD: ${{ secrets.macOS_AppleDeveloperIdPassword }}
run: |
export SURFER_PLATFORM="darwin"
export MACOS_APPLE_DEVELOPER_ID="${{ secrets.macOS_AppleDeveloperId }}"
@@ -147,6 +148,10 @@ jobs:
run: |
mv ./dist/output.mar macos-${{ matrix.arch }}.mar
- name: Remove sensitive information
run: |
rm -f ./engine/Zen_Browser.provisionprofile
- name: Sign .dmg
run: |
set -ex
@@ -157,6 +162,8 @@ jobs:
--apple-id "${{ secrets.macOS_AppleAccountId }}" \
--team-id "${{ secrets.macOS_AppleDeveloperIdTeamId }}" \
--password "${{ secrets.macOS_AppleDeveloperIdPassword }}" \
--no-s3-acceleration \
--verbose \
--wait
xcrun stapler staple "zen.macos-${{ matrix.arch }}.dmg"

View File

@@ -1,17 +1,19 @@
#!/bin/bash
set -ex
set -xe
if command -v apt-get &> /dev/null; then
sudo apt-get update
sudo apt-get install -y xvfb
sudo add-apt-repository ppa:kisak/kisak-mesa
sudo apt update
sudo apt upgrade
sudo apt-get install -y xvfb libnvidia-egl-wayland1 mesa-utils libgl1-mesa-dri
fi
ulimit -n 4096
if ! command -v Xvfb &> /dev/null; then
if command -v Xvfb &> /dev/null; then
if ! test "$ZEN_CROSS_COMPILING"; then
Xvfb :2 -screen 0 1024x768x24 &
Xvfb :2 -nolisten tcp -noreset -screen 0 1024x768x24 &
export LLVM_PROFDATA=$HOME/.mozbuild/clang/bin/llvm-profdata
export DISPLAY=:2
fi

View File

@@ -4,6 +4,12 @@ on:
schedule:
- cron: '0 23 * * *'
workflow_dispatch:
inputs:
create_release:
description: 'Whether to do a release'
required: false
type: boolean
default: true
jobs:
twilight-release-schedule:
@@ -12,7 +18,7 @@ jobs:
secrets: inherit
uses: ./.github/workflows/build.yml
with:
create_release: true
create_release: ${{ github.event_name != 'workflow_dispatch' && true || inputs.create_release }}
update_branch: twilight
update_version: false

View File

@@ -25,7 +25,7 @@ jobs:
matrix:
arch: [x86_64, aarch64]
runs-on: windows-latest
runs-on: ${{ inputs.release-branch == 'release' && 'windows-latest' || 'windows-latest' }}
steps:
- name: Checkout repository
@@ -38,8 +38,8 @@ jobs:
- name: Setup Git
run: |
git config --global user.email "mr-cheff@users.noreply.github.com"
git config --global user.name "mr-cheff"
git config --global user.email "mauro-balades@users.noreply.github.com"
git config --global user.name "mauro-balades"
- name: Setup pnpm
run: npm install -g pnpm
@@ -47,6 +47,9 @@ jobs:
- name: Install Surfer
run: npm i -g @zen-browser/surfer
- name: Load Surfer CI setup
run: pnpm surfer ci --brand ${{ inputs.release-branch }} --display-version ${{ inputs.build-version }}
- name: Download artifact
if: ${{ matrix.arch == 'x86_64' }}
uses: actions/download-artifact@v4

View File

@@ -22,7 +22,8 @@ on:
jobs:
windows-build:
name: Build Windows - ${{ matrix.arch }}
runs-on: ubuntu-latest
# aarch64 does not need full 16x, and we also dont use full LTO when generating GPO
runs-on: ${{ (inputs.release-branch == 'release' && !inputs.generate-gpo && matrix.arch == 'x86_64') && 'ubuntu-latest' || 'ubuntu-latest' }}
strategy:
fail-fast: false
@@ -32,6 +33,7 @@ jobs:
steps:
- name: Free Disk Space (Ubuntu)
uses: jlumbroso/free-disk-space@main
if: ${{ !(inputs.generate-gpo && matrix.arch == 'aarch64') }}
with:
tool-cache: false
@@ -62,6 +64,7 @@ jobs:
run: pnpm surfer ci --brand ${{ inputs.release-branch }} --display-version ${{ inputs.build-version }}
- name: Download Firefox and dependencies
if: ${{ !(inputs.generate-gpo && matrix.arch == 'aarch64') }}
run: pnpm surfer download
- name: win-cross Cache
@@ -81,7 +84,7 @@ jobs:
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
- name: Setup for Windows
if: steps.cache-win-cross.outputs.cache-hit != 'true'
if: steps.cache-win-cross.outputs.cache-hit != 'true' && !(inputs.generate-gpo && matrix.arch == 'aarch64')
run: |
set -x
mkdir -p ~/win-cross
@@ -91,10 +94,51 @@ jobs:
tar --zstd -xvf wine.tar.zst -C ~/win-cross
rm wine.tar.zst
echo Setup Visual Studio
sudo apt install -y msitools python3-pip
sudo apt-get update
sudo apt-get install -y python3-pip autoconf \
autoconf2.13 \
automake \
bison \
build-essential \
cabextract \
curl \
cmake \
flex \
gawk \
gcc-multilib \
git \
gnupg \
jq \
libbz2-dev \
libexpat1-dev \
libffi-dev \
libncursesw5-dev \
libsqlite3-dev \
libssl-dev \
libtool \
libucl-dev \
libxml2-dev \
msitools \
ninja-build \
openssh-client \
p7zip-full \
pkg-config \
procps \
python3-requests \
python3-toml \
scons \
subversion \
tar \
unzip \
uuid \
uuid-dev \
wget \
zip \
zlib1g-dev
./mach python --virtualenv build taskcluster/scripts/misc/get_vs.py build/vs/vs2022.yaml ~/win-cross/vs2022
- name: Bootstrap
if: ${{ !(inputs.generate-gpo && matrix.arch == 'aarch64') }}
run: |
set -x
cd engine/
@@ -113,6 +157,7 @@ jobs:
ls ~/win-cross/vs2022 || true
- name: Setup Rust
if: ${{ !(inputs.generate-gpo && matrix.arch == 'aarch64') }}
run: |
cd engine/
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.79
@@ -129,11 +174,13 @@ jobs:
echo "export MOZ_WINDOWS_RS_DIR=$(pwd)/windows-0.58.0" >> ../configs/common/mozconfig
- name: Import
if: ${{ !(inputs.generate-gpo && matrix.arch == 'aarch64') }}
env:
SURFER_COMPAT: ${{ matrix.arch }}
run: pnpm surfer import --verbose
- name: Build language packs
if: ${{ !(inputs.generate-gpo && matrix.arch == 'aarch64') }}
run: sh scripts/download-language-packs.sh
- name: Download artifact (if use profdata)
@@ -156,6 +203,7 @@ jobs:
if: ${{ !(inputs.generate-gpo && matrix.arch == 'aarch64') }}
env:
SURFER_COMPAT: ${{ matrix.arch }}
ZEN_RELEASE_BRANCH: ${{ inputs.release-branch }}
run: |
set -x
dos2unix configs/windows/mozconfig
@@ -164,12 +212,13 @@ jobs:
if test ${{ inputs.generate-gpo }} = true; then
export ZEN_GA_GENERATE_PROFILE=1
fi
sh .github/workflows/src/release-build.sh
bash .github/workflows/src/release-build.sh
- name: Package
if: ${{ !(inputs.generate-gpo && matrix.arch == 'aarch64') }}
env:
SURFER_COMPAT: ${{ matrix.arch }}
ZEN_GA_DISABLE_PGO: true
run: |
set -x
export SURFER_PLATFORM="win32"

View File

@@ -4,6 +4,8 @@ engine/
**/*.xhtml
**/*.inc.xhtml
**/*.bundle.min.js
**/*.min.js
**/*.min.mjs
**/*.svg

View File

@@ -5,7 +5,7 @@ Exec=zen %u
Icon=zen
Type=Application
MimeType=text/html;text/xml;application/xhtml+xml;x-scheme-handler/http;x-scheme-handler/https;application/x-xpinstall;application/pdf;application/json;
StartupWMClass=zen-release
StartupWMClass=zen
Categories=Network;WebBrowser;
StartupNotify=true
Terminal=false

View File

@@ -1 +1 @@
* @mr-cheff
* @mauro-balades

View File

@@ -28,7 +28,7 @@
## 🖥️ Compatibility
Zen is currently built using firefox version `133.0.3`! 🚀
Zen is currently built using firefox version `134.0`! 🚀
- Check out the latest [release notes](https://zen-browser.app/release-notes)!
- Part of our mission is to keep Zen up-to-date with the latest version of Firefox, so you can enjoy the latest features and security updates!

View File

@@ -28,5 +28,12 @@
for native messaging webextension helper applications launched by
Firefox which rely on Apple Events to signal other processes. -->
<key>com.apple.security.automation.apple-events</key><true/>
<!-- For SmartCardServices(7) -->
<key>com.apple.security.smartcard</key><true/>
<!-- Required for com.apple.developer.web-browser.public-key-credential -->
<key>com.apple.application-identifier</key>
<string>H36NPCN86W.app.zen-browser.zen</string>
</dict>
</plist>

View File

@@ -111,6 +111,9 @@ echo "-------------------------------------------------------------------------"
set -x
# move Zen_Browser.provisionprofile to the Contents directory
#cp Zen_Browser.provisionprofile "${BUNDLE}"/Contents/embedded.provisionprofile
# Clear extended attributes which cause codesign to fail
xattr -cr "${BUNDLE}"
@@ -119,8 +122,15 @@ xattr -cr "${BUNDLE}"
codesign --force -o runtime --verbose --sign "$IDENTITY" \
"${BUNDLE}/Contents/Library/LaunchServices/org.mozilla.updater" \
"${BUNDLE}/Contents/MacOS/XUL" \
"${BUNDLE}/Contents/MacOS/pingsender" \
"${BUNDLE}/Contents/MacOS/*.dylib" \
"${BUNDLE}"/Contents/embedded.provisionprofile \
"${BUNDLE}/Contents/MacOS/pingsender"
# Sign every ${BUNDLE}/Contents/MacOS/*.dylib
find "${BUNDLE}"/Contents/MacOS -type f -name "*.dylib" -exec \
codesign --force --verbose --sign "$IDENTITY" {} \;
find "${BUNDLE}"/Contents/MacOS -type f -name "*.dylib" -exec \
codesign -vvv --strict --deep --verbose {} \;
codesign --force -o runtime --verbose --sign "$IDENTITY" --deep \
"${BUNDLE}"/Contents/MacOS/updater.app
@@ -166,4 +176,4 @@ if [ ! -z "${OUTPUT_DMG_FILE}" ]; then
rm ${TEMP_FILE}
rm ${TEMP_DMG}
rm -rf "${DISK_IMAGE_DIR}"
fi
fi

View File

@@ -13,6 +13,8 @@ export MOZ_APP_DISPLAYNAME="${name}"
export MOZ_BRANDING_DIRECTORY=${brandingDir}
export MOZ_OFFICIAL_BRANDING_DIRECTORY=${brandingDir}
ac_add_options --with-distribution-id=app.zen-browser
# Uncomment if builds are too resource hungry
# mk_add_options MOZ_MAKE_FLAGS="-j4"
# ac_add_options --enable-linker=gold
@@ -54,8 +56,15 @@ if test "$ZEN_RELEASE"; then
ac_add_options --disable-default-browser-agent
if ! test "$ZEN_DISABLE_LTO"; then
export MOZ_LTO=cross,thin
ac_add_options --enable-lto=cross,thin
# only enable full LTO when ZEN_RELEASE_BRANCH is 'release'
if test "$ZEN_RELEASE_BRANCH" = "release"; then
# TODO: make it "full" once we have the resources to build it
export MOZ_LTO=cross,thin
ac_add_options --enable-lto=cross,thin
else
export MOZ_LTO=cross,thin
ac_add_options --enable-lto=cross,thin
fi
fi
ac_add_options --enable-jemalloc
@@ -64,10 +73,6 @@ if test "$ZEN_RELEASE"; then
MOZILLA_OFFICIAL=1
export MOZILLA_OFFICIAL=1
mk_add_options MOZ_OPTIMIZE=2
MOZ_OPTIMIZE=2
export MOZ_OPTIMIZE=2
export OPT_LEVEL="3"
ac_add_options OPT_LEVEL="3"

View File

@@ -12,27 +12,32 @@ if test "$SURFER_COMPAT" = "x86_64"; then
ac_add_options --enable-eme=widevine
# Enable Profile Guided Optimization
export MOZ_PGO=1
ac_add_options MOZ_PGO=1
if test "$ZEN_GA_DISABLE_PGO"; then
export ZEN_DUMMY=1
else
export MOZ_PGO=1
ac_add_options MOZ_PGO=1
fi
# Optimization flags for SURFER_COMPAT
ac_add_options --enable-optimize="-O3 -march=x86-64"
ac_add_options --enable-optimize="-O3 -w -ftree-vectorize -Qvec -mfpmath=sse -mprfchw -msse3 -mcx16 -msahf"
export CFLAGS="$CFLAGS -O3 -ffp-contract=fast -march=x86-64"
export CPPFLAGS="$CPPFLAGS -O3 -ffp-contract=fast -march=x86-64"
export CXXFLAGS="$CXXFLAGS -O3 -flto=thin -ffp-contract=fast -march=x86-64"
export LDFLAGS="$LDFLAGS -Wl,-O3 -Wl,-mllvm,-fp-contract=fast -march=x86-64"
export RUSTFLAGS="$RUSTFLAGS -C target-cpu=x86-64 -C codegen-units=1 -Clink-args=--icf=safe"
export LDFLAGS="$LDFLAGS -Wl,-O3"
export RUSTFLAGS="$RUSTFLAGS -Clink-args=--icf=safe"
elif test "$SURFER_COMPAT" = "aarch64"; then
ac_add_options --target=aarch64-linux-gnu
ac_add_options --enable-optimize="-O3"
# override LTO settings
export MOZ_LTO=cross,thin
ac_add_options --enable-lto=cross,thin
export CFLAGS="$CFLAGS -O3"
export CPPFLAGS="$CPPFLAGS -O3"
export CXXFLAGS="$CXXFLAGS -O3"
export LDFLAGS="$LDFLAGS -Wl,-O3"
export RUSTFLAGS="$RUSTFLAGS -C codegen-units=1 -Clink-args=--icf=safe"
export RUSTFLAGS="$RUSTFLAGS -Clink-args=--icf=safe"
fi
export VERBOSE=1

View File

@@ -7,8 +7,12 @@ export MOZ_MACBUNDLE_ID=${appId}
export MOZ_MACBUNDLE_NAME="Zen Browser.app"
if test "$ZEN_RELEASE"; then
export MOZ_PGO=1
ac_add_options MOZ_PGO=1
if test "$ZEN_GA_DISABLE_PGO"; then
export ZEN_DUMMY=1
else
export MOZ_PGO=1
ac_add_options MOZ_PGO=1
fi
fi
if test "$SURFER_COMPAT" = "x86_64"; then
@@ -21,7 +25,7 @@ if test "$SURFER_COMPAT" = "x86_64"; then
export CPPFLAGS="-O3 -march=nehalem"
export CXXFLAGS="-O3 -march=nehalem"
export LDFLAGS="-Wl,-O3 -march=nehalem"
export RUSTFLAGS="-Ctarget-cpu=nehalem -C codegen-units=1"
export RUSTFLAGS="-Ctarget-cpu=nehalem"
else
ac_add_options --target=aarch64-apple-darwin
@@ -34,7 +38,7 @@ else
export CPPFLAGS="-O3 -march=armv8.3-a+simd -mcpu=apple-m1"
export CXXFLAGS="-O3 -march=armv8.3-a+simd -mcpu=apple-m1"
export LDFLAGS="-Wl,-O3 -march=armv8.3-a+simd -mcpu=apple-m1"
export RUSTFLAGS="-C target-feature=+v8.3a -C codegen-units=1 -Ctarget-cpu=apple-m1"
export RUSTFLAGS="-C target-feature=+v8.3a -Ctarget-cpu=apple-m1"
fi
export VERBOSE=1

View File

@@ -32,11 +32,8 @@ if test "$SURFER_COMPAT" = "x86_64"; then
ac_add_options --target=x86_64-pc-windows-msvc
ac_add_options --enable-eme=widevine
ac_add_options --enable-optimize="-O3 -w -ftree-vectorize"
ac_add_options --enable-optimize="-O3 -w -ftree-vectorize -Qvec -mfpmath=sse -mprfchw -msse3 -mcx16 -msahf"
export CFLAGS="-O3 -Qvec -w"
export CPPFLAGS="-O3 -Qvec -w"
export CXXFLAGS="-O3 -Qvec -w"
export LDFLAGS="-Wl,-O3"
export RUSTFLAGS="-Clink-args=--icf=safe"
elif test "$SURFER_COMPAT" = "aarch64"; then
@@ -45,11 +42,15 @@ elif test "$SURFER_COMPAT" = "aarch64"; then
ac_add_options --enable-optimize="-O2 -mtune=cortex-a55 -march=armv8.2-a+simd"
# override LTO settings
export MOZ_LTO=cross,thin
ac_add_options --enable-lto=cross,thin
export CFLAGS="-O2 -march=armv8.2-a+simd -mtune=cortex-a55"
export CPPFLAGS="-O2 -march=armv8.2-a+simd -mtune=cortex-a55"
export CXXFLAGS="-O2 -march=armv8.2-a+simd -mtune=cortex-a55"
export LDFLAGS="-Wl,-O2 -march=armv8.2-a+simd -mtune=cortex-a55"
export RUSTFLAGS="-C target-feature=+v8.2a -C codegen-units=1 -Ctarget-cpu=cortex-a55"
export RUSTFLAGS="-C target-feature=+v8.2a -Ctarget-cpu=cortex-a55"
fi
#export POLLY="-mllvm -polly -mllvm -polly-2nd-level-tiling -mllvm -polly-loopfusion-greedy -mllvm -polly-pattern-matching-based-opts -mllvm -polly-position=before-vectorizer -mllvm -polly-vectorizer=stripmine"
@@ -61,9 +62,13 @@ if test "$ZEN_CROSS_COMPILING"; then
mk_add_options "export MOZ_AUTOMATION_PACKAGE_GENERATED_SOURCES=0"
ac_add_options --enable-profile-generate=cross
elif test "$SURFER_COMPAT" = "x86_64"; then
# Dont use PGO on aarch64 builds
ac_add_options --enable-profile-use=cross
ac_add_options --with-pgo-profile-path=$(echo ~)/artifact/merged.profdata
ac_add_options --with-pgo-jarlog=$(echo ~)/artifact/en-US.log
# Dont use PGO on aarch64 builds and the ZEN_GA_DISABLE_PGO flag is not set
if test "$ZEN_GA_DISABLE_PGO"; then
export ZEN_DUMMY=1
else
ac_add_options --enable-profile-use=cross
ac_add_options --with-pgo-profile-path=$(echo ~)/artifact/merged.profdata
ac_add_options --with-pgo-jarlog=$(echo ~)/artifact/en-US.log
fi
fi
fi

View File

@@ -2,13 +2,13 @@
| Metric | Average | Median | 90th percentile |
| --- | --- | --- | ---: |
| Time to first response | 1 day, 10:53:14 | 5:38:18 | 3 days, 13:56:56 |
| Time to close | 3 days, 13:05:55 | 1 day, 5:00:17 | 10 days, 5:43:20 |
| Time to first response | 2 days, 2:25:52 | 6:06:45 | 4 days, 23:54:11 |
| Time to close | 4 days, 10:13:09 | 1 day, 7:06:20 | 11 days, 18:39:59 |
| Metric | Count |
| --- | ---: |
| Number of items that remain open | 304 |
| Number of items closed | 267 |
| Number of items that remain open | 293 |
| Number of items closed | 278 |
| Total number of items created | 571 |
| Title | URL | Time to first response | Time to close |
@@ -63,7 +63,7 @@
| Some toolbar buttons stay colored after clicking on them but their panels don't open | https://github.com/zen-browser/desktop/issues/4032 | None | None |
| The browser has stopped opening. | https://github.com/zen-browser/desktop/issues/4031 | 2 days, 6:02:42 | 3 days, 20:59:18 |
| Startup error | https://github.com/zen-browser/desktop/issues/4029 | 4 days, 7:59:19 | None |
| Ctrl+Shift+C stopped working | https://github.com/zen-browser/desktop/issues/4028 | 2 days, 4:35:14 | 4 days, 3:39:28 |
| Devtool shortcuts aren't being able to be customized | https://github.com/zen-browser/desktop/issues/4028 | 2 days, 4:35:14 | 6 days, 7:02:43 |
| At start all bookmarks automatically opens | https://github.com/zen-browser/desktop/issues/4026 | None | None |
| Sponsored suggestions are still enabled | https://github.com/zen-browser/desktop/issues/4020 | 14:48:28 | None |
| Windows chrome not looking right | https://github.com/zen-browser/desktop/issues/4017 | 4:53:33 | 5:02:49 |
@@ -76,7 +76,7 @@
| mouse/keyboard click does not work after some tab switch / window minimize | https://github.com/zen-browser/desktop/issues/4008 | None | None |
| Theme resets to default/accent colors on startup | https://github.com/zen-browser/desktop/issues/4007 | 1 day, 16:54:17 | None |
| Remove browser padding mod not working | https://github.com/zen-browser/desktop/issues/4005 | 1 day, 8:07:50 | 1 day, 8:07:50 |
| A bunch of error 0x80040111's when starting zen | https://github.com/zen-browser/desktop/issues/4004 | 1 day, 10:18:21 | None |
| A bunch of error 0x80040111's when starting zen | https://github.com/zen-browser/desktop/issues/4004 | 1 day, 10:18:21 | 9 days, 9:15:34 |
| hover margin on tab bar is too big until you resize it manually | https://github.com/zen-browser/desktop/issues/4002 | 1 day, 16:46:24 | None |
| (UI) Firefox sidebar overlaps with page content | https://github.com/zen-browser/desktop/issues/4001 | None | None |
| Unable to view bookmarks toolbar | https://github.com/zen-browser/desktop/issues/4000 | 5:31:10 | 16:20:24 |
@@ -92,7 +92,7 @@
| Zen doesn't remember entered data on webpages when clicking "go back" button | https://github.com/zen-browser/desktop/issues/3989 | None | None |
| Unexpected text appears when selecting wallpapers and typing. | https://github.com/zen-browser/desktop/issues/3988 | 2 days, 14:37:23 | 2 days, 14:37:23 |
| [BUG] Extension Expands Vertically on Each Usage | https://github.com/zen-browser/desktop/issues/3987 | 0:03:27 | 2 days, 2:35:47 |
| Pinning (or unpinning) extensions cause toolbar to break in compact mode | https://github.com/zen-browser/desktop/issues/3986 | None | None |
| Pinning (or unpinning) extensions cause toolbar to break in compact mode | https://github.com/zen-browser/desktop/issues/3986 | 8 days, 15:29:08 | None |
| Weird behavior on MacOS when Zen is in fullscreen | https://github.com/zen-browser/desktop/issues/3985 | 0:54:00 | None |
| Title bar buttons on Linux | https://github.com/zen-browser/desktop/issues/3984 | None | None |
| Playback Issue After Long Pauses in Videos: Requires Refresh to Fix | https://github.com/zen-browser/desktop/issues/3981 | None | None |
@@ -157,10 +157,10 @@
| Default shortcut for "Copy current URL" overridden by element inspector | https://github.com/zen-browser/desktop/issues/3894 | 0:04:46 | 0:32:12 |
| Default Firefox Window Control buttons used instead of custom Zen icons | https://github.com/zen-browser/desktop/issues/3893 | 0:18:50 | 11 days, 18:08:37 |
| Flightradar24 has botched information when hovering an airport | https://github.com/zen-browser/desktop/issues/3892 | None | 7:23:49 |
| Crash when playing videos | https://github.com/zen-browser/desktop/issues/3891 | None | None |
| Crash when playing videos | https://github.com/zen-browser/desktop/issues/3891 | 16 days, 23:26:14 | None |
| Sidebar goes black | https://github.com/zen-browser/desktop/issues/3890 | 2:18:33 | None |
| Dark theme not respected | https://github.com/zen-browser/desktop/issues/3889 | 10:06:12 | None |
| Mod default preferences not displayed correctly until reopening the settings page or browser restart | https://github.com/zen-browser/desktop/issues/3887 | None | None |
| Mod default preferences not displayed correctly until reopening the settings page or browser restart | https://github.com/zen-browser/desktop/issues/3887 | 15 days, 6:11:30 | 16 days, 2:04:56 |
| Bookmarks stop working. Impossible to add and manage | https://github.com/zen-browser/desktop/issues/3886 | 7:47:27 | 8:06:47 |
| [Bug] Wrong Title For Tab Bar & Top Bar | https://github.com/zen-browser/desktop/issues/3885 | None | 18:00:09 |
| Settings lay-out looks odd on half-screen | https://github.com/zen-browser/desktop/issues/3884 | None | None |
@@ -268,7 +268,7 @@
| Cannot close browser window when Tab bar is on right and minimised state | https://github.com/zen-browser/desktop/issues/3743 | 15:42:59 | None |
| Left bar unnecessary empty space / settings update | https://github.com/zen-browser/desktop/issues/3742 | 1 day, 3:18:43 | None |
| side bar opens up when ctrl + tabbing (compact mode) | https://github.com/zen-browser/desktop/issues/3741 | 1:20:34 | 5:11:01 |
| MacOS traffic lights visual bug in Compact mode | https://github.com/zen-browser/desktop/issues/3740 | None | None |
| MacOS traffic lights visual bug in Compact mode | https://github.com/zen-browser/desktop/issues/3740 | 20 days, 8:33:17 | 20 days, 8:33:17 |
| Hard-coded orange accent colour in many places | https://github.com/zen-browser/desktop/issues/3739 | None | None |
| Popover doesn't automatically close when losing focus (video demo) | https://github.com/zen-browser/desktop/issues/3737 | None | 9:32:27 |
| Isn't userChrome.css supposed to be the last stylesheet loaded? | https://github.com/zen-browser/desktop/issues/3736 | None | None |
@@ -412,11 +412,11 @@
| Mouse back button occasionally fails to go back a page, tries switching workspaces instead | https://github.com/zen-browser/desktop/issues/3564 | None | None |
| Weird Spacing In Sidebar | https://github.com/zen-browser/desktop/issues/3563 | 0:59:49 | None |
| Browser view padding | https://github.com/zen-browser/desktop/issues/3562 | 1:58:05 | None |
| Changing mod string preferences sometimes results in missing characters | https://github.com/zen-browser/desktop/issues/3558 | None | None |
| Changing mod string preferences sometimes results in missing characters | https://github.com/zen-browser/desktop/issues/3558 | None | 24 days, 6:15:07 |
| Rounded corners only showing on overscroll on "release notes" page | https://github.com/zen-browser/desktop/issues/3557 | None | None |
| Missing options in "Show in compact view" in settings. | https://github.com/zen-browser/desktop/issues/3556 | 5:59:42 | 17 days, 15:15:02 |
| Text completely distorted | https://github.com/zen-browser/desktop/issues/3555 | 5:41:26 | None |
| Application freezes when interacting with the address bar | https://github.com/zen-browser/desktop/issues/3552 | None | None |
| Application freezes when interacting with the address bar | https://github.com/zen-browser/desktop/issues/3552 | 22 days, 11:37:39 | None |
| Tab right click stops working after using "Change Tab to Workspace" | https://github.com/zen-browser/desktop/issues/3549 | 7:57:32 | None |
| Need some help! not sure if this is the right place?? | https://github.com/zen-browser/desktop/issues/3548 | None | None |
| Windows "Show accent color on title bars and window borders" option looks broken with new titlebar | https://github.com/zen-browser/desktop/issues/3546 | 0:39:49 | 9 days, 14:07:17 |
@@ -499,7 +499,7 @@
| Bookmarks don't get fully deleted from places.sqlite | https://github.com/zen-browser/desktop/issues/3444 | None | None |
| When Workspaces are enabled browser.tabs.closeWindowWithLastTab set to true does not work (macOS) | https://github.com/zen-browser/desktop/issues/3443 | None | None |
| Logging on Google does not prompt security key popup to login | https://github.com/zen-browser/desktop/issues/3442 | 11:20:10 | 21 days, 12:51:05 |
| Zen breaks when all keybinds are assigned to "not set" | https://github.com/zen-browser/desktop/issues/3441 | 7 days, 8:26:47 | None |
| Zen breaks when all keybinds are assigned to "not set" | https://github.com/zen-browser/desktop/issues/3441 | 7 days, 8:26:47 | 25 days, 14:43:17 |
| After the new twilight update "Toggle Sidebar's Width" hotkey is not there | https://github.com/zen-browser/desktop/issues/3440 | 5 days, 19:37:46 | 6 days, 16:41:34 |
| "Open previous windows and tabs" issue with MacOS Spaces | https://github.com/zen-browser/desktop/issues/3439 | 7 days, 18:19:48 | None |
| "Keyboard shortcuts" page can show an outdated state between restarts | https://github.com/zen-browser/desktop/issues/3438 | None | None |
@@ -521,7 +521,7 @@
| Choose app dialog window not listing any apps except Zen itself | https://github.com/zen-browser/desktop/issues/3418 | None | None |
| No privacy | https://github.com/zen-browser/desktop/issues/3417 | None | None |
| The page goes black, and upon attempting to reload, nothing is displayed | https://github.com/zen-browser/desktop/issues/3413 | None | None |
| Can't move the cursor with arrows from my keyboard when i'm in a field | https://github.com/zen-browser/desktop/issues/3412 | None | None |
| Can't move the cursor with arrows from my keyboard when i'm in a field | https://github.com/zen-browser/desktop/issues/3412 | 27 days, 22:13:16 | 30 days, 20:23:42 |
| Essentials and pinned tabs still don't retain favicons after reset | https://github.com/zen-browser/desktop/issues/3411 | None | 4 days, 6:01:13 |
| Unload tabs can't click and crash the browser | https://github.com/zen-browser/desktop/issues/3410 | None | None |
| Rounded corners & fluorescent RGB-style lighting around the perimeter on full screen Youtube. Goes away in Private window? | https://github.com/zen-browser/desktop/issues/3409 | None | 0:06:16 |
@@ -534,10 +534,10 @@
| `npm run build` failed | https://github.com/zen-browser/desktop/issues/3401 | None | None |
| New URL in sidebar layout makes browser unusable | https://github.com/zen-browser/desktop/issues/3400 | 3 days, 16:54:29 | 4 days, 2:15:00 |
| CSS not loading or something | https://github.com/zen-browser/desktop/issues/3399 | None | None |
| Unnecessary empty space in tab | https://github.com/zen-browser/desktop/issues/3398 | None | None |
| Unnecessary empty space in tab | https://github.com/zen-browser/desktop/issues/3398 | None | 31 days, 12:18:50 |
| The window control buttons are duplicated on top of each other | https://github.com/zen-browser/desktop/issues/3395 | 2:08:07 | 3 days, 20:39:23 |
| Customizing Toolbar | https://github.com/zen-browser/desktop/issues/3394 | None | None |
| Keyboard shortcuts not resetting to default values | https://github.com/zen-browser/desktop/issues/3390 | None | None |
| Customizing Toolbar | https://github.com/zen-browser/desktop/issues/3394 | 28 days, 20:55:35 | 28 days, 20:55:35 |
| Keyboard shortcuts not resetting to default values | https://github.com/zen-browser/desktop/issues/3390 | None | 30 days, 21:31:32 |
| Possible Memory Leak - Zen won't leave the Taskbar after hours of use | https://github.com/zen-browser/desktop/issues/3389 | None | None |
| Can't switch to Tab. Possibly because Tab has a modal dialog. | https://github.com/zen-browser/desktop/issues/3386 | 1 day, 3:55:33 | None |
| The option to hide autofill from the browser does not work with iCloud passwords | https://github.com/zen-browser/desktop/issues/3384 | None | None |
@@ -553,16 +553,16 @@
| Open/close sidebar icon is confusing | https://github.com/zen-browser/desktop/issues/3370 | None | None |
| Tab Management - Workspaces - Display workspaces as an icon strip bug | https://github.com/zen-browser/desktop/issues/3369 | None | None |
| Google meet not loading | https://github.com/zen-browser/desktop/issues/3368 | 16:55:47 | None |
| Workspace icon highlight on hover is uneven | https://github.com/zen-browser/desktop/issues/3367 | None | None |
| Workspace icon highlight on hover is uneven | https://github.com/zen-browser/desktop/issues/3367 | 30 days, 0:55:16 | 30 days, 0:55:16 |
| The main UI's background doesn't follow the theme sometimes | https://github.com/zen-browser/desktop/issues/3366 | None | None |
| Shortcut Settings Typo | https://github.com/zen-browser/desktop/issues/3365 | None | None |
| Video image freezes when we move the progress video bar, and only the audio is playing | https://github.com/zen-browser/desktop/issues/3363 | None | None |
| Video image freezes when we move the progress video bar, and only the audio is playing | https://github.com/zen-browser/desktop/issues/3363 | 31 days, 7:22:57 | None |
| ClickTrades Webpage not loading | https://github.com/zen-browser/desktop/issues/3362 | None | None |
| When switch workspaces, the current-focused tab sometimes also show in the new workspace | https://github.com/zen-browser/desktop/issues/3357 | 3:34:51 | 9 days, 17:41:38 |
| Toggle Floating Sidebar keyboard shortcut not working | https://github.com/zen-browser/desktop/issues/3356 | 6 days, 13:00:18 | None |
| Workspace icon still shows on compact mode even when flag is disabled. | https://github.com/zen-browser/desktop/issues/3355 | 20 days, 3:42:54 | 20 days, 3:42:39 |
| Moving tab across workspace and then right-clicking on it does not render a menu | https://github.com/zen-browser/desktop/issues/3353 | 2 days, 14:33:51 | 18 days, 16:47:56 |
| Glance in compact view opens tabs bar | https://github.com/zen-browser/desktop/issues/3351 | None | None |
| Glance in compact view opens tabs bar | https://github.com/zen-browser/desktop/issues/3351 | 31 days, 13:55:54 | 33 days, 15:15:20 |
| Dev Tools Context Menus Broken | https://github.com/zen-browser/desktop/issues/3350 | None | None |
| Stuck in toolbar customizing mode | https://github.com/zen-browser/desktop/issues/3349 | None | None |
| Top Bar Padding Increasing in Compact Mode (Twilight) | https://github.com/zen-browser/desktop/issues/3348 | 9:32:10 | 6 days, 22:39:00 |

2
l10n

Submodule l10n updated: d444262fdb...1abc46f17d

View File

@@ -36,7 +36,7 @@
},
"homepage": "https://github.com/zen-browser/core#readme",
"dependencies": {
"@zen-browser/surfer": "^1.8.6"
"@zen-browser/surfer": "^1.9.8"
},
"devDependencies": {
"husky": "^9.1.7",

126
pnpm-lock.yaml generated
View File

@@ -9,8 +9,8 @@ importers:
.:
dependencies:
'@zen-browser/surfer':
specifier: ^1.8.6
version: 1.8.6(glob@7.2.3)
specifier: ^1.9.8
version: 1.9.8(glob@7.2.3)
devDependencies:
husky:
specifier: ^9.1.7
@@ -122,8 +122,8 @@ packages:
'@types/node@17.0.45':
resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==}
'@zen-browser/surfer@1.8.6':
resolution: {integrity: sha512-S/zGDRlMROdUqy6i6ZzhB8llMFi08XBJ2ypSQjwDKfiCtCB3oUGMPx7ahzI79cY0mvuTLpr5/NERKlR7Wq9nkA==}
'@zen-browser/surfer@1.9.8':
resolution: {integrity: sha512-dx4ouPDB7bg+eWR+NNuhdroR0JyZ+bWlxpAFskl9TiR3cvr1qtmZG9bYSF27nLNOUSWgKNamjevP785B08Cxjg==}
hasBin: true
ansi-escapes@7.0.0:
@@ -152,8 +152,8 @@ packages:
asap@2.0.6:
resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==}
async-compat@1.5.1:
resolution: {integrity: sha512-itH7HB0C7nzX7ynpIJYEJqpvuXmfWXXbzDrTfJOJJ3fJfgNTGgZUqKVYUT3U17zhceZiTdPdtiUQQns2F3RRCQ==}
async-compat@1.6.1:
resolution: {integrity: sha512-8ggRAJiUews+8pjzG/fQ0O9QOPxHFa3DGvvMoH67rukjIiRL7AVGcaUSkA6ecZYlDvyom7zet7zy1ZFjRliuqw==}
engines: {node: '>=0.8'}
async-icns@1.0.2:
@@ -207,8 +207,8 @@ packages:
buffer@5.7.1:
resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
call-once-fn@1.0.1:
resolution: {integrity: sha512-/MIar5BYO3zAwe0QZCFsr89R6vn6BWiS3BCG2IyCUobkY3rAKK5r+elC3TWdBQW4q6A8aNjS5CDTmtUnAIOa7g==}
call-once-fn@1.0.6:
resolution: {integrity: sha512-zBcRjl/aFJEJqNSNw0gtzi4ZtDLBqPqIbU8qyXv5M2biF2nYHqcpIXOWo6ZhhDAQDkr9WgXQnLLyXQJvWm5AMg==}
engines: {node: '>=0.8'}
chalk@4.1.2:
@@ -270,8 +270,8 @@ packages:
resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
engines: {node: '>= 0.6'}
core-js-pure@3.39.0:
resolution: {integrity: sha512-7fEcWwKI4rJinnK+wLTezeg2smbFFdSBP6E2kQZNbnzM2s1rpKQ6aaRteZSSg7FLU3P0HGGVo/gbpfanU36urg==}
core-js-pure@3.40.0:
resolution: {integrity: sha512-AtDzVIgRrmRKQai62yuSIN5vNiQjcJakJb4fbhVw3ehxx7Lohphvw9SGNWKhLFqSxC4ilD0g/L1huAYFQU3Q6A==}
core-util-is@1.0.3:
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
@@ -337,12 +337,12 @@ packages:
resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==}
engines: {node: '>=6'}
extract-base-iterator@1.2.1:
resolution: {integrity: sha512-6paYzxwwx215Zj29ZhoCw2wnaGnU8kPPIzth0U71JwZCo9oR5sGUBWQd6Da5YIWmUZKsadCULxr2dRAzhTmKIA==}
extract-base-iterator@1.2.10:
resolution: {integrity: sha512-xdSKIpRrB+AqUJByl1pIOAyHs2vUfA4pL05SiB/9ZhC4AYS4G9a5TNmKEfY6KKeoPw5eFLoQ/9hVUUq5BIguFA==}
engines: {node: '>=0.8'}
fast-extract@1.3.1:
resolution: {integrity: sha512-4er0iCszwwY1JX1SfYHQKuoPTmu6ISIG8W4gD8/jHkB7/Ws9i0ZNu+48BpalV+GGsushMvllTFk8txLBGbpYGg==}
fast-extract@1.3.10:
resolution: {integrity: sha512-XrV3AQLlaW4sDMSOwcBRDBMaEdJKgXT2EhtsqTufdZWWNN2b8zmRSGee/VV/vurO0agKoEVCyxja2DmkBzv6lg==}
engines: {node: '>=0.8'}
peerDependencies:
lzma-native: '*'
@@ -369,8 +369,8 @@ packages:
debug:
optional: true
fs-access-compat@1.0.3:
resolution: {integrity: sha512-bIT52oDQuazHSEnu17+MnRGVTTtLpMluu9Zuv25RhJ+iVWrTX95aXK+9yEsQ1ZaIRCWeHjx1IgR38QH/8psWKQ==}
fs-access-compat@1.1.4:
resolution: {integrity: sha512-Qvy38V5JTnQT9pDulL2HBDiuZ1XbA3IHLJrHZpsP2gcBocflwnrbIcRd/dcH+ax55JEqqc8N1ARpaxITlp7hMg==}
engines: {node: '>=0.8'}
fs-constants@1.0.0:
@@ -588,8 +588,8 @@ packages:
mkdirp-classic@0.5.3:
resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==}
mock-require-lazy@1.0.1:
resolution: {integrity: sha512-Sv05IW2MuG7C+gVTHirqF8cbqAM8MeMEIKU3MIQDA1pyXKnv0AGa/3l0iwXk/i+81OoFzt+iU0p8DdphV2Ejww==}
mock-require-lazy@1.0.6:
resolution: {integrity: sha512-+0sOddS06fxFPJEDulH1Qssavf7D8UWa54Z6LQFuKwWwKwXLIU2JHnNt9Qi449LkqrKtNVa0rHhAzoJCZxvTgg==}
engines: {node: '>=0.8'}
modern-async@1.1.5:
@@ -717,8 +717,8 @@ packages:
pumpify@2.0.1:
resolution: {integrity: sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==}
queue-cb@1.4.4:
resolution: {integrity: sha512-WHT/6s0nK/TB6/tlCi30NGNh8mQrCVmQAH5Hq/ZLaYFTjKVfsIKmfftJYAHXfGJ2FlRlVSAJjFBbSvSGJriCAw==}
queue-cb@1.4.10:
resolution: {integrity: sha512-Hi3ZvXvKhrmxJhn6FhwsyW/Dd6OFZy2RWPXrAxQFw0jDnoiOzx2edkarCr5RpR6no7nZ+O4if59M/2HKzFy3hw==}
engines: {node: '>=0.8'}
rc@1.2.8:
@@ -828,8 +828,8 @@ packages:
sprintf-js@1.0.3:
resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
stack-base-iterator@1.1.5:
resolution: {integrity: sha512-wFnKvg6qFFCQBvpBqa4SWnDGIVziYu8A2ATQqcvYwdi774efdRHzXarjW88vaTy2fLbuVVH0g361UfOEJHWmCA==}
stack-base-iterator@1.1.11:
resolution: {integrity: sha512-c9f/rUFy/GJCEn0kx7gqIM/LByOrvOAq4I0cEVeahcmSGFfFa2xAto6/RcjApT0qbz/+IrA0OCM7CHnSiVDrOw==}
engines: {node: '>=0.8'}
stream-shift@1.0.3:
@@ -880,8 +880,8 @@ packages:
tar-fs@2.1.1:
resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==}
tar-iterator@1.2.2:
resolution: {integrity: sha512-cFr12lmqNsIBFT++9QJSPNdOXndBU3XyWOx6UDq+2AipKA865i/RKIc+kbHv1i5Ko60+rYSI+/5PPMCQP3fP+g==}
tar-iterator@1.2.9:
resolution: {integrity: sha512-sHgC+mJjn5n4v1YDQsFyGUg8Up6byOWV8QjQh/ZOYSOVkmg5q9ivpTgIKJrQOUihivsh+4pQlY5gMmXyH4AyOg==}
engines: {node: '>=0.8'}
tar-stream-compat@2.1.5:
@@ -892,8 +892,8 @@ packages:
resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==}
engines: {node: '>=6'}
temp-suffix@0.1.1:
resolution: {integrity: sha512-wcluXJ6A8HhyhEOOTXHPKV9TRTcL7vwmnfrWTZn7c7zrFp16trP1lfpsxaKN52pToFNByQ+y3zsJC8JlDAaKrg==}
temp-suffix@0.1.6:
resolution: {integrity: sha512-oxSvTMUHbFUEbCIQGJa221DvtpA1oNSlthyGjPJ/yiAum8JgE/Nu4jHh7osM7IKHPomRDCmxmYdTuX442EuZKg==}
engines: {node: '>=0.8'}
through2@2.0.5:
@@ -957,8 +957,8 @@ packages:
engines: {node: '>= 14'}
hasBin: true
zip-iterator@1.2.1:
resolution: {integrity: sha512-56+76FbbgsQySl8wAh9W7SCaSyzFQK3xjL1+6tzai5ER+f7mSVpU9wKgPk+N9ZJ/5xTJqg5Z2rUe9d7SxrbgFQ==}
zip-iterator@1.2.7:
resolution: {integrity: sha512-hLYAZigng8q3AWJyNJgiUAokV/NXYBXgLeYt+PnkcXMES9syJwiLCBJ1qvoBEip97E5/H0T5OwpZcCrx91FE8A==}
engines: {node: '>=0.8'}
zip@1.2.0:
@@ -1036,7 +1036,7 @@ snapshots:
'@types/node@17.0.45': {}
'@zen-browser/surfer@1.8.6(glob@7.2.3)':
'@zen-browser/surfer@1.9.8(glob@7.2.3)':
dependencies:
'@resvg/resvg-js': 1.4.0
async-icns: 1.0.2
@@ -1045,7 +1045,7 @@ snapshots:
cli-progress: 3.12.0
commander: 6.2.1
execa: 5.1.1
fast-extract: 1.3.1(glob@7.2.3)
fast-extract: 1.3.10(glob@7.2.3)
fs-extra: 10.1.0
ini: 3.0.1
is-apple-silicon: https://codeload.github.com/trickypr/is-apple-silicon/tar.gz/5f75501a1d7566ba9f94174b6825d7bd9d302b6a
@@ -1085,7 +1085,7 @@ snapshots:
asap@2.0.6: {}
async-compat@1.5.1:
async-compat@1.6.1:
dependencies:
is-error: 2.2.2
is-promise: 4.0.0
@@ -1153,7 +1153,7 @@ snapshots:
base64-js: 1.5.1
ieee754: 1.2.1
call-once-fn@1.0.1: {}
call-once-fn@1.0.6: {}
chalk@4.1.2:
dependencies:
@@ -1208,7 +1208,7 @@ snapshots:
dependencies:
safe-buffer: 5.2.1
core-js-pure@3.39.0: {}
core-js-pure@3.40.0: {}
core-util-is@1.0.3: {}
@@ -1277,43 +1277,43 @@ snapshots:
expand-template@2.0.3: {}
extract-base-iterator@1.2.1(glob@7.2.3):
extract-base-iterator@1.2.10(glob@7.2.3):
dependencies:
fs-access-compat: 1.0.3
fs-access-compat: 1.1.4
graceful-fs: 4.2.11
is-absolute: 1.0.0
lodash.compact: 3.0.1
mkdirp-classic: 0.5.3
object-assign: 4.1.1
queue-cb: 1.4.4
queue-cb: 1.4.10
rimraf2: 2.8.2(glob@7.2.3)
stack-base-iterator: 1.1.5
stack-base-iterator: 1.1.11
transitivePeerDependencies:
- glob
fast-extract@1.3.1(glob@7.2.3):
fast-extract@1.3.10(glob@7.2.3):
dependencies:
bl: 3.0.1
buffer-v6-polyfill: 1.0.5
call-once-fn: 1.0.1
call-once-fn: 1.0.6
content-disposition: 0.5.4
end-of-stream: 1.4.4
flush-write-stream: 2.0.0
lodash.throttle: 4.1.1
mkdirp-classic: 0.5.3
mock-require-lazy: 1.0.1
mock-require-lazy: 1.0.6
next-tick: 1.1.0
progress-stream: 2.0.0
pumpify: 2.0.1
queue-cb: 1.4.4
queue-cb: 1.4.10
readable-stream: 2.3.8
require_optional: 1.0.1
rimraf2: 2.8.2(glob@7.2.3)
signal-exit: 3.0.7
tar-iterator: 1.2.2(glob@7.2.3)
temp-suffix: 0.1.1
tar-iterator: 1.2.9(glob@7.2.3)
temp-suffix: 0.1.6
unbzip2-stream: 1.4.3
zip-iterator: 1.2.1(glob@7.2.3)
zip-iterator: 1.2.7(glob@7.2.3)
transitivePeerDependencies:
- glob
@@ -1330,7 +1330,7 @@ snapshots:
follow-redirects@1.15.9: {}
fs-access-compat@1.0.3: {}
fs-access-compat@1.1.4: {}
fs-constants@1.0.0: {}
@@ -1515,14 +1515,14 @@ snapshots:
mkdirp-classic@0.5.3: {}
mock-require-lazy@1.0.1:
mock-require-lazy@1.0.6:
dependencies:
get-caller-file: 2.0.5
normalize-path: 3.0.0
modern-async@1.1.5:
dependencies:
core-js-pure: 3.39.0
core-js-pure: 3.40.0
nanoassert: 2.0.0
mount-dmg@1.0.1:
@@ -1640,7 +1640,7 @@ snapshots:
inherits: 2.0.4
pump: 3.0.2
queue-cb@1.4.4: {}
queue-cb@1.4.10: {}
rc@1.2.8:
dependencies:
@@ -1752,11 +1752,11 @@ snapshots:
sprintf-js@1.0.3: {}
stack-base-iterator@1.1.5:
stack-base-iterator@1.1.11:
dependencies:
asap: 2.0.6
async-compat: 1.5.1
call-once-fn: 1.0.1
async-compat: 1.6.1
call-once-fn: 1.0.6
fifo: 2.4.1
stream-shift@1.0.3: {}
@@ -1808,16 +1808,16 @@ snapshots:
pump: 3.0.2
tar-stream: 2.2.0
tar-iterator@1.2.2(glob@7.2.3):
tar-iterator@1.2.9(glob@7.2.3):
dependencies:
call-once-fn: 1.0.1
call-once-fn: 1.0.6
end-of-stream: 1.4.4
extract-base-iterator: 1.2.1(glob@7.2.3)
fs-access-compat: 1.0.3
extract-base-iterator: 1.2.10(glob@7.2.3)
fs-access-compat: 1.1.4
lifecycle: 1.0.4
lodash.compact: 3.0.1
mkdirp-classic: 0.5.3
queue-cb: 1.4.4
queue-cb: 1.4.10
rimraf2: 2.8.2(glob@7.2.3)
tar-stream-compat: 2.1.5
transitivePeerDependencies:
@@ -1840,7 +1840,7 @@ snapshots:
inherits: 2.0.4
readable-stream: 3.6.2
temp-suffix@0.1.1:
temp-suffix@0.1.6:
dependencies:
imurmurhash: 0.1.4
@@ -1902,22 +1902,22 @@ snapshots:
yaml@2.6.1: {}
zip-iterator@1.2.1(glob@7.2.3):
zip-iterator@1.2.7(glob@7.2.3):
dependencies:
buffer-v6-polyfill: 1.0.5
call-once-fn: 1.0.1
call-once-fn: 1.0.6
end-of-stream: 1.4.4
extract-base-iterator: 1.2.1(glob@7.2.3)
fs-access-compat: 1.0.3
extract-base-iterator: 1.2.10(glob@7.2.3)
fs-access-compat: 1.1.4
lifecycle: 1.0.4
lodash.compact: 3.0.1
mkdirp-classic: 0.5.3
os-shim: 0.1.3
queue-cb: 1.4.4
queue-cb: 1.4.10
readable-stream: 2.3.8
rimraf2: 2.8.2(glob@7.2.3)
short-hash: 1.0.0
temp-suffix: 0.1.1
temp-suffix: 0.1.6
zip: 1.2.0
transitivePeerDependencies:
- glob

View File

@@ -0,0 +1,13 @@
diff --git a/browser/app/macbuild/Contents/Info.plist.in b/browser/app/macbuild/Contents/Info.plist.in
index 73b400d58fd25ac13132f1a3fe3ea619e4f4e4f9..ee90ce7ac67bd9aa7bbc2a656843875afb985591 100644
--- a/browser/app/macbuild/Contents/Info.plist.in
+++ b/browser/app/macbuild/Contents/Info.plist.in
@@ -191,7 +191,7 @@
<key>CFBundleIconFile</key>
<string>firefox.icns</string>
<key>CFBundleIdentifier</key>
- <string>@MOZ_MACBUNDLE_ID@</string>
+ <string>app.zen-browser.zen</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>

File diff suppressed because one or more lines are too long

View File

@@ -37,10 +37,10 @@
false
);
ZenWorkspaces.init();
gZenUIManager.init();
gZenVerticalTabsManager.init();
gZenCompactModeManager.init();
ZenWorkspaces.init();
gZenVerticalTabsManager.init();
gZenUIManager.init();
document.l10n.setAttributes(document.getElementById('tabs-newtab-button'), 'tabs-toolbar-new-tab');
} catch (e) {

View File

@@ -8,6 +8,10 @@ var gZenUIManager = {
XPCOMUtils.defineLazyPreferenceGetter(this, 'sidebarHeightThrottle', 'zen.view.sidebar-height-throttle', 500);
XPCOMUtils.defineLazyPreferenceGetter(this, 'contentElementSeparation', 'zen.theme.content-element-separation', 0);
ChromeUtils.defineLazyGetter(this, 'motion', () => {
return ChromeUtils.importESModule('chrome://browser/content/zen-vendor/motion.min.mjs', { global: 'current' });
});
new ResizeObserver(gZenCommonActions.throttle(this.updateTabsToolbar.bind(this), this.sidebarHeightThrottle)).observe(
document.getElementById('tabbrowser-tabs')
);
@@ -256,7 +260,9 @@ var gZenVerticalTabsManager = {
try {
this._updateMaxWidth();
window.docShell.treeOwner.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIAppWindow).rollupAllPopups();
if (window.docShell) {
window.docShell.treeOwner.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIAppWindow).rollupAllPopups();
}
const topButtons = document.getElementById('zen-sidebar-top-buttons');
const isCompactMode = this._prefsCompactMode && !forCustomizableMode;

View File

@@ -0,0 +1,9 @@
diff --git a/browser/base/content/browser-sets.inc b/browser/base/content/browser-sets.inc
index 493c593d66883082c2a4df87c4706f919ea675f8..aaaa833b64b0fd890aa2a0794eaeb7e41f002f06 100644
--- a/browser/base/content/browser-sets.inc
+++ b/browser/base/content/browser-sets.inc
@@ -393,3 +393,4 @@
internal="true"/>
#endif
</keyset>
+ <keyset id="zenKeyset"></keyset>

View File

@@ -75,3 +75,4 @@
# JS Vendor
content/browser/zen-vendor/tsparticles.confetti.bundle.min.js (content/zen-vendor/tsparticles.confetti.bundle.min.js)
content/browser/zen-vendor/motion.min.mjs (content/zen-vendor/motion.min.mjs)

View File

@@ -9,7 +9,18 @@
}
60% {
transform: scale3d(1.01, 1.01, 1.01);
transform: scale3d(1.02, 1.02, 1.02);
}
to {
opacity: 1;
transform: scale3d(1, 1, 1);
}
}
@keyframes zen-jello-animation-alt {
0% {
transform: scale3d(0.8, 0.8, 0.8);
}
to {
@@ -89,28 +100,6 @@
}
}
@keyframes zen-slide-in {
from {
transform: translateX(-150%);
opacity: 0;
}
to {
transform: translateX(0);
opacity: 1;
}
}
@keyframes zen-slide-in-reverse {
from {
transform: translateX(150%);
opacity: 0;
}
to {
transform: translateX(0);
opacity: 1;
}
}
@keyframes zen-deck-fadeIn {
0% {
transform: scale(0.9);
@@ -263,38 +252,6 @@
}
}
@keyframes zen-glance-content-animation {
/* make the box appear from initial width/height and x/y coordinates */
0% {
opacity: 0;
top: 50%;
left: 50%;
transform: translate(-50%, -50%) translateZ(0);
width: 0%;
height: 0%;
}
80% {
/* make the box grow to full width/height */
opacity: 1;
transform: translate(-50%, -50%) translateZ(0);
top: 50%;
left: 50%;
width: 87%;
height: 102%;
}
100% {
/* make the box shrink to final width/height and x/y coordinates */
transform: translate(-50%, -50%) translateZ(0);
opacity: 1;
width: 85%;
height: 100%;
top: 50%;
left: 50%;
}
}
@keyframes zen-glance-content-animation-out {
0% {
/* make the box shrink to final width/height and x/y coordinates */

View File

@@ -14,16 +14,15 @@
transform 0.1s ease-in-out,
opacity 0.1s ease-in-out;
box-shadow: 0 0 1px 1px light-dark(rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.5));
overflow: hidden;
margin: 1px;
:root[zen-right-side='true'] & {
margin-left: var(--zen-element-separation);
}
:root[zen-no-padding='true'] &:not([zen-split='true']) {
border-radius: 0 !important;
:root:not([zen-no-padding='true']) & {
margin: 1px;
box-shadow: 0 0 1px 1px light-dark(rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.5));
}
}

View File

@@ -141,7 +141,7 @@
margin-right: 0;
}
&:not([zen-no-padding='true']) #zen-tabbox-wrapper {
&:not([zen-no-padding='true'], [zen-right-side='true']) #zen-tabbox-wrapper {
margin-left: 1px;
}
}

View File

@@ -59,13 +59,13 @@
:root[zen-single-toolbar='true'] & {
top: var(--zen-element-separation);
& #nav-bar {
margin-left: calc(var(--zen-toolbox-padding) / 2) !important;
}
}
}
&:not([zen-right-side='true']) #nav-bar {
margin-left: 0 !important;
}
& #urlbar[open] {
top: 0 !important;
}
@@ -131,9 +131,112 @@
*:is([panelopen='true'], [open='true'], #nav-bar:focus-within):not(tab):not(.zen-compact-mode-ignore)
) {
&:not([animate='true']) {
--zen-compact-mode-func: linear(
0 0%,
0.002958 1%,
0.01137 2%,
0.024581 3%,
0.041981 4%,
0.063001 5%,
0.087118 6%,
0.113846 7.000000000000001%,
0.14274 8%,
0.173391 9%,
0.205425 10%,
0.238504 11%,
0.272318 12%,
0.30659 13%,
0.341071 14.000000000000002%,
0.375535 15%,
0.409787 16%,
0.44365 17%,
0.476971 18%,
0.509618 19%,
0.541476 20%,
0.572448 21%,
0.602453 22%,
0.631425 23%,
0.65931 24%,
0.686067 25%,
0.711668 26%,
0.736092 27%,
0.759328 28.000000000000004%,
0.781375 28.999999999999996%,
0.802235 30%,
0.821921 31%,
0.840449 32%,
0.857841 33%,
0.874121 34%,
0.88932 35%,
0.903469 36%,
0.916603 37%,
0.928759 38%,
0.939975 39%,
0.950291 40%,
0.959747 41%,
0.968385 42%,
0.976244 43%,
0.983366 44%,
0.989792 45%,
0.995562 46%,
1.000716 47%,
1.005292 48%,
1.009328 49%,
1.01286 50%,
1.015925 51%,
1.018556 52%,
1.020787 53%,
1.022648 54%,
1.024172 55.00000000000001%,
1.025385 56.00000000000001%,
1.026316 56.99999999999999%,
1.026991 57.99999999999999%,
1.027434 59%,
1.027669 60%,
1.027717 61%,
1.027599 62%,
1.027334 63%,
1.02694 64%,
1.026433 65%,
1.025829 66%,
1.025143 67%,
1.024388 68%,
1.023575 69%,
1.022715 70%,
1.02182 71%,
1.020898 72%,
1.019957 73%,
1.019005 74%,
1.018048 75%,
1.017094 76%,
1.016146 77%,
1.015211 78%,
1.014291 79%,
1.013391 80%,
1.012513 81%,
1.01166 82%,
1.010835 83%,
1.010039 84%,
1.009273 85%,
1.008538 86%,
1.007836 87%,
1.007166 88%,
1.00653 89%,
1.005926 90%,
1.005355 91%,
1.004817 92%,
1.00431 93%,
1.003835 94%,
1.003391 95%,
1.002976 96%,
1.002591 97%,
1.002233 98%,
1.001902 99%,
1.001597 100%
);
transition:
left 0.25s ease,
right 0.25s ease;
left 0.3125s var(--zen-compact-mode-func),
right 0.3125s var(--zen-compact-mode-func);
opacity: 1;
left: -1px;

View File

@@ -105,7 +105,6 @@
height: 100%;
opacity: 1;
transition: opacity 0.2s ease-in-out;
transition-delay: 0.1s;
}
&[animate-full='true'] {
@@ -118,7 +117,8 @@
}
&[animate='true'] {
animation: zen-glance-content-animation 0.4s ease-in-out forwards;
position: absolute;
transform: translate(-50%, -50%);
&:not([animate-end='true']) {
pointer-events: none;

View File

@@ -5,6 +5,10 @@
*/
panel[type='arrow'][animate][animate='open']::part(content) {
animation: zen-jello-animation 0.35s ease;
@media (-moz-platform: macos) {
animation: zen-jello-animation-alt 0.35s ease;
}
}
panel[type='arrow'][animate]:not([animate='open'])::part(content) {

View File

@@ -223,6 +223,7 @@
#tabbrowser-tabs {
margin-inline-start: 0 !important;
padding-inline-start: 0 !important;
overflow-x: hidden;
--tab-inner-inline-margin: 0;
@@ -242,23 +243,6 @@
& .tabbrowser-tab {
transition: scale 0.07s ease;
#tabbrowser-tabs &:not([zen-essential='true']) {
#tabbrowser-tabs[zen-workspace-animation='previous'] & {
animation: zen-slide-in;
}
#tabbrowser-tabs[zen-workspace-animation='next'] & {
animation: zen-slide-in-reverse;
}
#tabbrowser-tabs[zen-workspace-animation] & {
opacity: 0;
transform: translateX(-100%);
animation-delay: 0.2s;
animation-fill-mode: forwards;
animation-duration: 0.2s;
animation-timing-function: ease;
}
#tabbrowser-tabs[dont-animate-tabs] & {
opacity: 0;
}
@@ -963,6 +947,39 @@
& .tab-icon-overlay {
margin-inline-end: 0 !important;
}
@media (-moz-bool-pref: 'zen.theme.essentials-favicon-bg') {
&[selected] .tab-background {
&::after {
content: "";
inset: -50%;
filter: blur(15px);
position: absolute;
background-size: 100% 100%;
background-clip: padding-box;
background-image: var(--zen-tab-icon);
z-index: -1;
}
background: transparent;
overflow: hidden;
&::before {
background: light-dark(rgba(255, 255, 255, 0.8), rgba(68, 64, 64, 0.80));
margin: 2px;
border-radius: calc(var(--tab-border-radius) - 2px);
position: absolute;
inset: 0;
z-index: 0;
content: "";
transition: background 0.2s ease-in-out;
}
}
&[selected]:hover .tab-background::before {
background: light-dark(rgba(255, 255, 255, 0.8), rgba(68, 64, 64, 0.85));
}
}
}

View File

@@ -103,7 +103,7 @@
--zen-button-border-radius: 5px;
--zen-button-padding: 0.6rem 1.2rem;
--zen-toolbar-element-bg: light-dark(rgba(255, 255, 255, 0.4), rgba(170, 170, 170, 0.2));
--zen-toolbar-element-bg: light-dark(rgba(255, 255, 255, 0.65), rgba(170, 170, 170, 0.2));
/* Toolbar */
--zen-toolbar-height: 38px;

View File

@@ -360,6 +360,7 @@ button.popup-notification-dropmarker {
}
#urlbar[open] {
z-index: 2;
--urlbar-margin-inline: 5px !important;
& #identity-box {

View File

@@ -479,7 +479,7 @@
}
}
@media (not (-moz-bool-pref: 'zen.workspaces.show-workspace-indicator')) or (not (-moz-bool-pref: 'zen.workspaces.enabled')) {
@media not (-moz-bool-pref: 'zen.workspaces.show-workspace-indicator') {
#zen-current-workspace-indicator {
display: none !important;
}

File diff suppressed because one or more lines are too long

View File

@@ -7,6 +7,13 @@ XPCOMUtils.defineLazyPreferenceGetter(
800
);
XPCOMUtils.defineLazyPreferenceGetter(
lazyCompactMode,
'COMPACT_MODE_FLASH_ENABLED',
'zen.view.compact.toolbar-flash-popup',
true
);
var gZenCompactModeManager = {
_flashTimeouts: {},
_evenListeners: [],
@@ -50,6 +57,12 @@ var gZenCompactModeManager = {
return this._sidebar;
},
flashSidebarIfNecessary(aInstant = false) {
if (!aInstant && this.prefefence && lazyCompactMode.COMPACT_MODE_FLASH_ENABLED && !gZenGlanceManager._animating) {
this.flashSidebar();
}
},
addContextMenu() {
const fragment = window.MozXULElement.parseXULToFragment(`
<menu id="zen-context-menu-compact-mode" data-l10n-id="zen-toolbar-context-compact-mode">

View File

@@ -3,7 +3,7 @@
#currentBrowser = null;
#currentTab = null;
#animating = false;
_animating = false;
init() {
document.documentElement.setAttribute('zen-glance-uuid', gZenUIManager.generateUuidv4());
@@ -86,6 +86,8 @@
const currentTab = gBrowser.selectedTab;
this.animatingOpen = true;
this._animating = true;
const browserElement = this.createBrowserElement(url, currentTab);
this.overlay = browserElement.closest('.browserSidebarContainer');
@@ -100,25 +102,41 @@
window.requestAnimationFrame(() => {
this.quickOpenGlance();
this.browserWrapper.style.setProperty('--initial-x', `${initialX}px`);
this.browserWrapper.style.setProperty('--initial-y', `${initialY}px`);
this.browserWrapper.style.setProperty('--initial-width', initialWidth + 'px');
this.browserWrapper.style.setProperty('--initial-height', initialHeight + 'px');
this.overlay.removeAttribute('fade-out');
this.browserWrapper.setAttribute('animate', true);
this.#animating = true;
setTimeout(() => {
this.browserWrapper.setAttribute('animate-end', true);
this.browserWrapper.setAttribute('has-finished-animation', true);
this.#animating = false;
this.animatingOpen = false;
}, 500);
this.browserWrapper.style.top = `${initialY}px`;
this.browserWrapper.style.left = `${initialX}px`;
this.browserWrapper.style.width = `${initialWidth}px`;
this.browserWrapper.style.height = `${initialHeight}px`;
gZenUIManager.motion
.animate(
this.browserWrapper,
{
top: [`${initialY}px`, '50%'],
left: [`${initialX}px`, '50%'],
width: [`${initialWidth}px`, '85%'],
height: [`${initialHeight}px`, '100%'],
opacity: [0.8, 1],
},
{
duration: 0.5,
ease: 'easeIn',
type: 'spring',
bounce: 0.25,
}
)
.then(() => {
this.browserWrapper.removeAttribute('animate');
this.browserWrapper.setAttribute('animate-end', true);
this.browserWrapper.setAttribute('has-finished-animation', true);
this._animating = false;
this.animatingOpen = false;
});
});
}
closeGlance({ noAnimation = false, onTabClose = false } = {}) {
if (this.#animating || !this.#currentBrowser || this.animatingOpen || this._duringOpening) {
if (this._animating || !this.#currentBrowser || this.animatingOpen || this._duringOpening) {
return;
}
@@ -130,6 +148,8 @@
return;
}
this._animating = true;
gBrowser._insertTabAtIndex(this.#currentTab, {
index: this.currentParentTab._tPos + 1,
});
@@ -195,6 +215,8 @@
this.lastCurrentTab = null;
this._duringOpening = false;
this._animating = false;
}, 400);
});
});
@@ -281,6 +303,7 @@
this.animatingFullOpen = true;
this.currentParentTab._visuallySelected = false;
this.browserWrapper.removeAttribute('style');
this.browserWrapper.removeAttribute('has-finished-animation');
this.browserWrapper.setAttribute('animate-full', true);
this.#currentTab.removeAttribute('zen-glance-tab');

View File

@@ -658,7 +658,7 @@
setTimeout(() => {
// Reactivate the transition after the animation
appWrapper.removeAttribute('post-animating');
});
}, 100);
}, 700);
});
}

View File

@@ -995,11 +995,7 @@ var gZenKeyboardShortcutsManager = {
return browser.gZenKeyboardShortcutsManager._zenKeyset;
}
browser.gZenKeyboardShortcutsManager._zenKeyset = browser.document.createXULElement('keyset');
browser.gZenKeyboardShortcutsManager._zenKeyset.id = ZEN_KEYSET_ID;
const mainKeyset = browser.document.getElementById(ZEN_MAIN_KEYSET_ID);
mainKeyset.after(browser.gZenKeyboardShortcutsManager._zenKeyset);
throw new Error('Zen keyset not found');
}
return browser.gZenKeyboardShortcutsManager._zenKeyset;
},

View File

@@ -68,6 +68,13 @@
await this._refreshPinnedTabs(newWorkspace, { init: onInit });
}
onTabIconChanged(tab, url = null) {
const iconUrl = url ?? tab.iconImage.src;
if (tab.hasAttribute('zen-essential')) {
tab.querySelector('.tab-background').style.setProperty('--zen-tab-icon', `url(${iconUrl})`);
}
}
get enabled() {
if (typeof this._enabled === 'undefined') {
this._enabled = !(
@@ -544,6 +551,7 @@
gBrowser.unpinTab(tab);
}
gBrowser.pinTab(tab);
this.onTabIconChanged(tab);
}
}

View File

@@ -309,7 +309,8 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
get workspaceEnabled() {
if (typeof this._workspaceEnabled === 'undefined') {
this._workspaceEnabled = Services.prefs.getBoolPref('zen.workspaces.enabled', false) && this.shouldHaveWorkspaces;
this._workspaceEnabled =
!Services.prefs.getBoolPref('zen.workspaces.disabled_for_testing', false) && this.shouldHaveWorkspaces;
return this._workspaceEnabled;
}
return this._workspaceEnabled;
@@ -368,21 +369,7 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
return this._workspaceCache;
}
async onWorkspacesEnabledChanged() {
if (this.workspaceEnabled) {
throw Error("Shoud've had reloaded the window");
} else {
this._workspaceCache = null;
document.getElementById('zen-workspaces-button')?.remove();
for (let tab of gBrowser.tabs) {
gBrowser.showTab(tab);
}
}
}
async initializeWorkspaces() {
Services.prefs.addObserver('zen.workspaces.enabled', this.onWorkspacesEnabledChanged.bind(this));
await this.initializeWorkspacesButton();
if (this.workspaceEnabled) {
this._initializeWorkspaceCreationIcons();
@@ -404,7 +391,7 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
activeWorkspace = workspaces.workspaces[0];
this.activeWorkspace = activeWorkspace?.uuid;
}
await this.changeWorkspace(activeWorkspace, true);
await this.changeWorkspace(activeWorkspace, { onInit: true });
}
try {
if (activeWorkspace) {
@@ -428,6 +415,10 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
indicator.addEventListener('click', th);
}
shouldCloseWindow() {
return !window.toolbar.visible || Services.prefs.getBoolPref('browser.tabs.closeWindowWithLastTab');
}
handleTabBeforeClose(tab) {
if (!this.workspaceEnabled || this.__contextIsDelete) {
return null;
@@ -438,17 +429,33 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
return null;
}
const shouldOpenNewTabIfLastUnpinnedTabIsClosed = this.shouldOpenNewTabIfLastUnpinnedTabIsClosed;
let tabs = gBrowser.tabs.filter(
(t) =>
t.getAttribute('zen-workspace-id') === workspaceID &&
(!shouldOpenNewTabIfLastUnpinnedTabIsClosed || !t.pinned || t.getAttribute('pending') !== 'true')
);
let tabs = gBrowser.visibleTabs;
let tabsPinned = tabs.filter((t) => !this.shouldOpenNewTabIfLastUnpinnedTabIsClosed || !t.pinned);
const shouldCloseWindow = this.shouldCloseWindow();
if (tabs.length === 1 && tabs[0] === tab) {
let newTab = this._createNewTabForWorkspace({ uuid: workspaceID });
return newTab;
if (shouldCloseWindow) {
// We've already called beforeunload on all the relevant tabs if we get here,
// so avoid calling it again:
window.skipNextCanClose = true;
// Closing the tab and replacing it with a blank one is notably slower
// than closing the window right away. If the caller opts in, take
// the fast path.
if (!gBrowser._removingTabs.size) {
// This call actually closes the window, unless the user
// cancels the operation. We are finished here in both cases.
this._isClosingWindow = true;
// Inside a setTimeout to avoid reentrancy issues.
setTimeout(() => {
document.getElementById('cmd_closeWindow').doCommand();
}, 100);
return this._createNewTabForWorkspace({ uuid: workspaceID });
}
return null;
}
} else if (tabsPinned.length === 1 && tabsPinned[0] === tab) {
return this._createNewTabForWorkspace({ uuid: workspaceID });
}
return null;
@@ -463,10 +470,6 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
return tab;
}
_kIcons = JSON.parse(Services.prefs.getStringPref('zen.workspaces.icons')).map((icon) =>
typeof Intl.Segmenter !== 'undefined' ? new Intl.Segmenter().segment(icon).containing().segment : Array.from(icon)[0]
);
searchIcons(input, icons) {
input = input.toLowerCase();
@@ -543,7 +546,8 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
let container = document.getElementById('PanelUI-zen-workspaces-icon-picker-wrapper');
let searchInput = document.getElementById('PanelUI-zen-workspaces-icon-search-input');
searchInput.value = '';
for (let icon of this._kIcons) {
for (let iconData of this.emojis) {
const icon = iconData[0];
let button = document.createXULElement('toolbarbutton');
button.className = 'toolbarbutton-1 workspace-icon-button';
button.setAttribute('label', icon);
@@ -621,7 +625,7 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
let parentPanel = document.getElementById('PanelUI-zen-workspaces-multiview');
// randomly select an icon
let icon = this._kIcons[Math.floor(Math.random() * this._kIcons.length)];
let icon = this.emojis[Math.floor(Math.random() * (this.emojis.length - 257))][0];
this._workspaceCreateInput.textContent = '';
this._workspaceCreateInput.value = '';
this._workspaceCreateInput.setAttribute('data-initial-value', '');
@@ -1263,7 +1267,7 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
this._changeListeners.push(func);
}
async changeWorkspace(window, onInit = false) {
async changeWorkspace(window, ...args) {
if (!this.workspaceEnabled || this._inChangingWorkspace) {
return;
}
@@ -1271,13 +1275,14 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
await SessionStore.promiseInitialized;
this._inChangingWorkspace = true;
try {
await this._performWorkspaceChange(window, onInit);
await this._performWorkspaceChange(window, ...args);
} finally {
this._inChangingWorkspace = false;
this.tabContainer.removeAttribute('dont-animate-tabs');
}
}
async _performWorkspaceChange(window, onInit) {
async _performWorkspaceChange(window, { onInit = false, explicitAnimationDirection = undefined } = {}) {
const previousWorkspace = await this.getActiveWorkspace();
this.activeWorkspace = window.uuid;
@@ -1287,6 +1292,21 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
// Refresh tab cache
this.tabContainer._invalidateCachedTabs();
let animationDirection;
if (previousWorkspace && !onInit && !this._animatingChange) {
animationDirection =
explicitAnimationDirection ??
(workspaces.workspaces.findIndex((w) => w.uuid === previousWorkspace.uuid) <
workspaces.workspaces.findIndex((w) => w.uuid === window.uuid)
? 'right'
: 'left');
}
if (animationDirection) {
// Animate tabs out of view before changing workspace, therefor we
// need to animate in the opposite direction
await this._animateTabs(animationDirection === 'left' ? 'right' : 'left', true);
}
// First pass: Handle tab visibility and workspace ID assignment
const visibleTabs = this._processTabVisibility(window.uuid, containerId, workspaces);
@@ -1296,22 +1316,47 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
// Update UI and state
await this._updateWorkspaceState(window, onInit);
// Animate acordingly
if (previousWorkspace && !this._animatingChange) {
// we want to know if we are moving forward or backward in sense of animation
let isNextWorkspace =
onInit ||
workspaces.workspaces.findIndex((w) => w.uuid === previousWorkspace.uuid) <
workspaces.workspaces.findIndex((w) => w.uuid === window.uuid);
gBrowser.tabContainer.setAttribute('zen-workspace-animation', isNextWorkspace ? 'next' : 'previous');
this._animatingChange = true;
setTimeout(() => {
this._animatingChange = false;
gBrowser.tabContainer.removeAttribute('zen-workspace-animation');
}, 500);
if (animationDirection) {
await this._animateTabs(animationDirection);
}
}
_animateElement(element, direction, out = false, callback) {
if (out) {
element.animate([{ transform: 'translateX(0)' }, { transform: `translateX(${direction === 'left' ? '-' : ''}100%)` }], {
duration: 100,
easing: 'ease',
fill: 'both',
}).onfinish = callback;
return;
}
element.animate([{ transform: `translateX(${direction === 'left' ? '-' : ''}100%)` }, { transform: 'translateX(0)' }], {
duration: 100,
easing: 'ease',
fill: 'both',
}).onfinish = callback;
}
async _animateTabs(direction, out = false) {
const tabs = gBrowser.visibleTabs.filter((tab) => !tab.hasAttribute('zen-essential'));
return new Promise((resolve) => {
let count = 0;
const onAnimationEnd = () => {
count++;
// +1 for the workspace indicator tab
if (count >= tabs.length + 1) {
resolve();
}
};
this.tabContainer.removeAttribute('dont-animate-tabs');
// Also animate the workspace indicator label
this._animateElement(document.getElementById('zen-current-workspace-indicator'), direction, out, () => onAnimationEnd());
for (const tab of tabs) {
this._animateElement(tab, direction, out, () => onAnimationEnd());
}
});
}
_processTabVisibility(workspaceUuid, containerId, workspaces) {
const visibleTabs = new Set();
const lastSelectedTab = this._lastSelectedWorkspaceTabs[workspaceUuid];
@@ -1339,9 +1384,6 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
gBrowser.hideTab(tab, undefined, true);
}
}
window.requestAnimationFrame(() => {
this.tabContainer.removeAttribute('dont-animate-tabs');
});
return visibleTabs;
}
@@ -1541,7 +1583,7 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
}
async onLocationChange(browser) {
if (!this.workspaceEnabled || this._inChangingWorkspace) {
if (!this.workspaceEnabled || this._inChangingWorkspace || this._isClosingWindow) {
return;
}
@@ -1680,7 +1722,7 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
}
let nextWorkspace = workspaces.workspaces[targetIndex];
await this.changeWorkspace(nextWorkspace);
await this.changeWorkspace(nextWorkspace, { explicitAnimationDirection: offset > 0 ? 'right' : 'left' });
}
_initializeWorkspaceTabContextMenus() {

View File

@@ -167,7 +167,7 @@ var gZenMarketplaceManager = {
const browser = ZenMultiWindowFeature.currentBrowser;
const themeList = document.createElement('div');
for (const theme of Object.values(themes)) {
for (const theme of Object.values(themes).sort((a, b) => a.name.localeCompare(b.name))) {
const sanitizedName = `theme-${theme.name?.replaceAll(/\s/g, '-')?.replaceAll(/[^A-z_-]+/g, '')}`;
const isThemeEnabled = theme.enabled === undefined || theme.enabled;
@@ -672,29 +672,15 @@ var gZenWorkspacesSettings = {
}
},
};
Services.prefs.addObserver('zen.workspaces.enabled', this);
Services.prefs.addObserver('zen.tab-unloader.enabled', tabsUnloaderPrefListener);
Services.prefs.addObserver('zen.glance.enabled', tabsUnloaderPrefListener); // We can use the same listener for both prefs
Services.prefs.addObserver('zen.glance.activation-method', tabsUnloaderPrefListener);
window.addEventListener('unload', () => {
Services.prefs.removeObserver('zen.workspaces.enabled', this);
Services.prefs.removeObserver('zen.tab-unloader.enabled', tabsUnloaderPrefListener);
Services.prefs.removeObserver('zen.glance.enabled', tabsUnloaderPrefListener);
Services.prefs.removeObserver('zen.glance.activation-method', tabsUnloaderPrefListener);
});
},
async observe(subject, topic, data) {
await this.onWorkspaceChange(Services.prefs.getBoolPref('zen.workspaces.enabled'));
},
async onWorkspaceChange(checked) {
let buttonIndex = await confirmRestartPrompt(true, 1, true, false);
if (buttonIndex == CONFIRM_RESTART_PROMPT_RESTART_NOW) {
Services.startup.quit(Ci.nsIAppStartup.eAttemptQuit | Ci.nsIAppStartup.eRestart);
return;
}
},
};
const ZEN_CKS_CLASS_BASE = 'zenCKSOption';
@@ -860,7 +846,7 @@ var gZenCKSSettings = {
if (!target.nextElementSibling) {
target.after(
window.MozXULElement.parseXULToFragment(`
<label class="${ZEN_CKS_CLASS_BASE}-unsafed" data-l10n-id="zen-key-unsafed"></label>
<label class="${ZEN_CKS_CLASS_BASE}-unsafed" data-l10n-id="zen-key-unsaved"></label>
`)
);
target.value = 'Not set';
@@ -1007,11 +993,6 @@ Preferences.addAll([
type: 'bool',
default: true,
},
{
id: 'zen.workspaces.enabled',
type: 'bool',
default: true,
},
{
id: 'zen.theme.pill-button',
type: 'bool',

View File

@@ -17,27 +17,21 @@
<label><html:h2 data-l10n-id="zen-settings-workspaces-header"/></label>
<description class="description-deemphasized" data-l10n-id="zen-settings-workspaces-description" />
<checkbox id="zenWorkspacesActivate"
data-l10n-id="zen-settings-workspaces-enabled"
preference="zen.workspaces.enabled"/>
<vbox class="indent">
<checkbox id="zenWorkspacesHideDefaultContainer"
data-l10n-id="zen-settings-workspaces-hide-default-container-indicator"
preference="zen.workspaces.hide-default-container-indicator"/>
<checkbox id="zenWorkspacesAllowPinnedTabsForDifferentWorkspaces"
data-l10n-id="zen-settings-workspaces-allow-pinned-tabs-for-different-workspaces"
preference="zen.workspaces.individual-pinned-tabs"/>
<checkbox id="zenWorkspacesDisplayAsIconStrip"
data-l10n-id="zen-settings-workspaces-display-as-icon-strip"
preference="zen.workspaces.show-icon-strip"/>
<checkbox id="zenWorkspacesForceContainerTabsToWorkspace"
data-l10n-id="zen-settings-workspaces-force-container-tabs-to-workspace"
preference="zen.workspaces.force-container-workspace"/>
<checkbox id="zenWorkspaceHideDeactivatedWorkspaces"
data-l10n-id="zen-settings-workspaces-hide-deactivated-workspaces"
preference="zen.workspaces.hide-deactivated-workspaces"/>
</vbox>
<checkbox id="zenWorkspacesHideDefaultContainer"
data-l10n-id="zen-settings-workspaces-hide-default-container-indicator"
preference="zen.workspaces.hide-default-container-indicator"/>
<checkbox id="zenWorkspacesAllowPinnedTabsForDifferentWorkspaces"
data-l10n-id="zen-settings-workspaces-allow-pinned-tabs-for-different-workspaces"
preference="zen.workspaces.individual-pinned-tabs"/>
<checkbox id="zenWorkspacesDisplayAsIconStrip"
data-l10n-id="zen-settings-workspaces-display-as-icon-strip"
preference="zen.workspaces.show-icon-strip"/>
<checkbox id="zenWorkspacesForceContainerTabsToWorkspace"
data-l10n-id="zen-settings-workspaces-force-container-tabs-to-workspace"
preference="zen.workspaces.force-container-workspace"/>
<checkbox id="zenWorkspaceHideDeactivatedWorkspaces"
data-l10n-id="zen-settings-workspaces-hide-deactivated-workspaces"
preference="zen.workspaces.hide-deactivated-workspaces"/>
</groupbox>
<hbox id="zenTabsUnloadCategory"

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/tabbrowser/content/tabbrowser.js b/browser/components/tabbrowser/content/tabbrowser.js
index ce68c339f35416574b7bc7ebf8c93378f653242b..46d25e4381eaae71f3aec1025788684c593a60c7 100644
index ce68c339f35416574b7bc7ebf8c93378f653242b..ceb292dd9939bd9db12b00673f0c3d54da793e76 100644
--- a/browser/components/tabbrowser/content/tabbrowser.js
+++ b/browser/components/tabbrowser/content/tabbrowser.js
@@ -409,11 +409,39 @@
@@ -53,15 +53,16 @@ index ce68c339f35416574b7bc7ebf8c93378f653242b..46d25e4381eaae71f3aec1025788684c
);
} else {
this.moveTabTo(aTab, this.pinnedTabCount);
@@ -1052,6 +1080,7 @@
@@ -1052,6 +1080,8 @@
let LOCAL_PROTOCOLS = ["chrome:", "about:", "resource:", "data:"];
+ try {
+ gZenPinnedTabManager.onTabIconChanged(aTab, aIconURL);
if (
aIconURL &&
!aLoadingPrincipal &&
@@ -1062,6 +1091,9 @@
@@ -1062,6 +1092,9 @@
);
return;
}
@@ -71,7 +72,7 @@ index ce68c339f35416574b7bc7ebf8c93378f653242b..46d25e4381eaae71f3aec1025788684c
let browser = this.getBrowserForTab(aTab);
browser.mIconURL = aIconURL;
@@ -1291,6 +1323,7 @@
@@ -1291,6 +1324,7 @@
if (!this._previewMode) {
newTab.recordTimeFromUnloadToReload();
newTab.updateLastAccessed();
@@ -79,7 +80,7 @@ index ce68c339f35416574b7bc7ebf8c93378f653242b..46d25e4381eaae71f3aec1025788684c
oldTab.updateLastAccessed();
// if this is the foreground window, update the last-seen timestamps.
if (this.ownerGlobal == BrowserWindowTracker.getTopWindow()) {
@@ -2374,7 +2407,7 @@
@@ -2374,7 +2408,7 @@
let panel = this.getPanel(browser);
let uniqueId = this._generateUniquePanelID();
@@ -88,7 +89,7 @@ index ce68c339f35416574b7bc7ebf8c93378f653242b..46d25e4381eaae71f3aec1025788684c
aTab.linkedPanel = uniqueId;
// Inject the <browser> into the DOM if necessary.
@@ -2434,7 +2467,7 @@
@@ -2434,7 +2468,7 @@
// hasSiblings=false on both the existing browser and the new browser.
if (this.tabs.length == 2) {
this.tabs[0].linkedBrowser.browsingContext.hasSiblings = true;
@@ -97,7 +98,7 @@ index ce68c339f35416574b7bc7ebf8c93378f653242b..46d25e4381eaae71f3aec1025788684c
} else {
aTab.linkedBrowser.browsingContext.hasSiblings = this.tabs.length > 1;
}
@@ -2666,6 +2699,12 @@
@@ -2666,6 +2700,12 @@
);
}
@@ -110,7 +111,7 @@ index ce68c339f35416574b7bc7ebf8c93378f653242b..46d25e4381eaae71f3aec1025788684c
if (!UserInteraction.running("browser.tabs.opening", window)) {
UserInteraction.start("browser.tabs.opening", "initting", window);
}
@@ -2735,6 +2774,12 @@
@@ -2735,6 +2775,12 @@
noInitialLabel,
skipBackgroundNotify,
});
@@ -123,7 +124,7 @@ index ce68c339f35416574b7bc7ebf8c93378f653242b..46d25e4381eaae71f3aec1025788684c
if (insertTab) {
// insert the tab into the tab container in the correct position
this._insertTabAtIndex(t, {
@@ -2878,6 +2923,13 @@
@@ -2878,6 +2924,13 @@
}
}
@@ -137,7 +138,7 @@ index ce68c339f35416574b7bc7ebf8c93378f653242b..46d25e4381eaae71f3aec1025788684c
// Additionally send pinned tab events
if (pinned) {
this._notifyPinnedStatus(t);
@@ -3389,6 +3441,23 @@
@@ -3389,6 +3442,23 @@
) {
tabWasReused = true;
tab = this.selectedTab;
@@ -161,7 +162,7 @@ index ce68c339f35416574b7bc7ebf8c93378f653242b..46d25e4381eaae71f3aec1025788684c
if (!tabData.pinned) {
this.unpinTab(tab);
} else {
@@ -3402,6 +3471,9 @@
@@ -3402,6 +3472,9 @@
restoreTabsLazily && !select && !tabData.pinned;
let url = "about:blank";
@@ -171,7 +172,7 @@ index ce68c339f35416574b7bc7ebf8c93378f653242b..46d25e4381eaae71f3aec1025788684c
if (tabData.entries?.length) {
let activeIndex = (tabData.index || tabData.entries.length) - 1;
// Ensure the index is in bounds.
@@ -3438,6 +3510,21 @@
@@ -3438,6 +3511,21 @@
preferredRemoteType,
});
@@ -193,7 +194,7 @@ index ce68c339f35416574b7bc7ebf8c93378f653242b..46d25e4381eaae71f3aec1025788684c
if (select) {
tabToSelect = tab;
}
@@ -3491,7 +3578,6 @@
@@ -3491,7 +3579,6 @@
this.tabContainer._invalidateCachedTabs();
}
}
@@ -201,7 +202,7 @@ index ce68c339f35416574b7bc7ebf8c93378f653242b..46d25e4381eaae71f3aec1025788684c
tab.initialize();
}
@@ -4070,6 +4156,10 @@
@@ -4070,6 +4157,10 @@
return;
}
@@ -212,7 +213,7 @@ index ce68c339f35416574b7bc7ebf8c93378f653242b..46d25e4381eaae71f3aec1025788684c
this.removeTabs(selectedTabs);
}
@@ -4389,6 +4479,13 @@
@@ -4389,6 +4480,13 @@
TelemetryStopwatch.start("FX_TAB_CLOSE_TIME_NO_ANIM_MS", aTab);
}
@@ -226,7 +227,7 @@ index ce68c339f35416574b7bc7ebf8c93378f653242b..46d25e4381eaae71f3aec1025788684c
// Handle requests for synchronously removing an already
// asynchronously closing tab.
if (!animate && aTab.closing) {
@@ -4404,6 +4501,10 @@
@@ -4404,6 +4502,10 @@
// state).
let tabWidth = window.windowUtils.getBoundsWithoutFlushing(aTab).width;
@@ -237,7 +238,7 @@ index ce68c339f35416574b7bc7ebf8c93378f653242b..46d25e4381eaae71f3aec1025788684c
if (
!this._beginRemoveTab(aTab, {
closeWindowFastpath: true,
@@ -4556,7 +4657,7 @@
@@ -4556,14 +4658,14 @@
!!this.tabsInCollapsedTabGroups.length;
if (
aTab.visible &&
@@ -246,7 +247,15 @@ index ce68c339f35416574b7bc7ebf8c93378f653242b..46d25e4381eaae71f3aec1025788684c
!anyRemainingTabsInCollapsedTabGroups
) {
closeWindow =
@@ -5411,10 +5512,10 @@
closeWindowWithLastTab != null
? closeWindowWithLastTab
: !window.toolbar.visible ||
- Services.prefs.getBoolPref("browser.tabs.closeWindowWithLastTab");
+ Services.prefs.getBoolPref("browser.tabs.closeWindowWithLastTab") && !ZenWorkspaces._isClosingWindow;
if (closeWindow) {
// We've already called beforeunload on all the relevant tabs if we get here,
@@ -5411,10 +5513,10 @@
SessionStore.deleteCustomTabValue(aTab, "hiddenBy");
}
@@ -259,7 +268,7 @@ index ce68c339f35416574b7bc7ebf8c93378f653242b..46d25e4381eaae71f3aec1025788684c
aTab.selected ||
aTab.closing ||
// Tabs that are sharing the screen, microphone or camera cannot be hidden.
@@ -7384,6 +7485,7 @@
@@ -7384,6 +7486,7 @@
aWebProgress.isTopLevel
) {
this.mTab.setAttribute("busy", "true");
@@ -267,7 +276,7 @@ index ce68c339f35416574b7bc7ebf8c93378f653242b..46d25e4381eaae71f3aec1025788684c
gBrowser._tabAttrModified(this.mTab, ["busy"]);
this.mTab._notselectedsinceload = !this.mTab.selected;
gBrowser.syncThrobberAnimations(this.mTab);
@@ -8344,7 +8446,7 @@ var TabContextMenu = {
@@ -8344,7 +8447,7 @@ var TabContextMenu = {
);
contextUnpinSelectedTabs.hidden =
!this.contextTab.pinned || !multiselectionContext;
@@ -276,7 +285,7 @@ index ce68c339f35416574b7bc7ebf8c93378f653242b..46d25e4381eaae71f3aec1025788684c
// Move Tab items
let contextMoveTabOptions = document.getElementById(
"context_moveTabOptions"
@@ -8378,7 +8480,7 @@ var TabContextMenu = {
@@ -8378,7 +8481,7 @@ var TabContextMenu = {
let contextMoveTabToStart = document.getElementById("context_moveToStart");
let isFirstTab =
tabsToMove[0] == visibleTabs[0] ||
@@ -285,7 +294,7 @@ index ce68c339f35416574b7bc7ebf8c93378f653242b..46d25e4381eaae71f3aec1025788684c
contextMoveTabToStart.disabled = isFirstTab && allSelectedTabsAdjacent;
document.getElementById("context_openTabInWindow").disabled =
@@ -8607,6 +8709,7 @@ var TabContextMenu = {
@@ -8607,6 +8710,7 @@ var TabContextMenu = {
if (this.contextTab.multiselected) {
gBrowser.removeMultiSelectedTabs();
} else {

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/tabbrowser/content/tabs.js b/browser/components/tabbrowser/content/tabs.js
index f7c39fe804182e2bdf53045ba3b6a5ba17079fc3..8b594d9d13b60c51c6f9306e28178e75b5f49782 100644
index f7c39fe804182e2bdf53045ba3b6a5ba17079fc3..f578fe9da3c502289c6a3e3a0ba17de6e747e80f 100644
--- a/browser/components/tabbrowser/content/tabs.js
+++ b/browser/components/tabbrowser/content/tabs.js
@@ -649,7 +649,7 @@
@@ -85,23 +85,15 @@ index f7c39fe804182e2bdf53045ba3b6a5ba17079fc3..8b594d9d13b60c51c6f9306e28178e75
if (tab && rect(tab).width <= this._tabClipWidth) {
this.setAttribute("closebuttons", "activetab");
} else {
@@ -1790,10 +1792,12 @@
@@ -1794,6 +1796,7 @@
this.arrowScrollbox.ensureElementIsVisible(selectedTab, aInstant);
}
_handleTabSelect(aInstant) {
let selectedTab = this.selectedItem;
- if (this.overflowing) {
- this.arrowScrollbox.ensureElementIsVisible(selectedTab, aInstant);
- }
+ this.arrowScrollbox.ensureElementIsVisible(selectedTab, aInstant);
+ if (!aInstant && Services.prefs.getBoolPref('zen.view.compact')
+ && Services.prefs.getBoolPref('zen.view.compact.toolbar-flash-popup')) {
+ gZenCompactModeManager.flashSidebar();
+ }
+ gZenCompactModeManager.flashSidebarIfNecessary(aInstant);
selectedTab._notselectedsinceload = false;
}
@@ -1841,7 +1845,7 @@
@@ -1841,7 +1844,7 @@
if (isEndTab && !this._hasTabTempMaxWidth) {
return;
}
@@ -110,7 +102,7 @@ index f7c39fe804182e2bdf53045ba3b6a5ba17079fc3..8b594d9d13b60c51c6f9306e28178e75
// Force tabs to stay the same width, unless we're closing the last tab,
// which case we need to let them expand just enough so that the overall
// tabbar width is the same.
@@ -1856,7 +1860,7 @@
@@ -1856,7 +1859,7 @@
let tabsToReset = [];
for (let i = numPinned; i < tabs.length; i++) {
let tab = tabs[i];
@@ -119,7 +111,7 @@ index f7c39fe804182e2bdf53045ba3b6a5ba17079fc3..8b594d9d13b60c51c6f9306e28178e75
if (!isEndTab) {
// keep tabs the same width
tab.style.transition = "none";
@@ -1922,13 +1926,13 @@
@@ -1922,13 +1925,13 @@
let verticalTabsContainer = document.getElementById(
"vertical-pinned-tabs-container"
);
@@ -135,7 +127,7 @@ index f7c39fe804182e2bdf53045ba3b6a5ba17079fc3..8b594d9d13b60c51c6f9306e28178e75
}
}
@@ -1952,7 +1956,7 @@
@@ -1952,7 +1955,7 @@
_positionPinnedTabs() {
let tabs = this.visibleTabs;
@@ -144,7 +136,7 @@ index f7c39fe804182e2bdf53045ba3b6a5ba17079fc3..8b594d9d13b60c51c6f9306e28178e75
let absPositionHorizontalTabs =
this.overflowing && tabs.length > numPinned && numPinned > 0;
@@ -2033,7 +2037,7 @@
@@ -2033,7 +2036,7 @@
return;
}
@@ -153,7 +145,7 @@ index f7c39fe804182e2bdf53045ba3b6a5ba17079fc3..8b594d9d13b60c51c6f9306e28178e75
let directionX = screenX > dragData.animLastScreenX;
let directionY = screenY > dragData.animLastScreenY;
@@ -2221,9 +2225,9 @@
@@ -2221,9 +2224,9 @@
}
let pinned = draggedTab.pinned;
@@ -165,7 +157,7 @@ index f7c39fe804182e2bdf53045ba3b6a5ba17079fc3..8b594d9d13b60c51c6f9306e28178e75
pinned ? numPinned : undefined
);
@@ -2456,8 +2460,8 @@
@@ -2456,8 +2459,8 @@
);
}
@@ -176,7 +168,7 @@ index f7c39fe804182e2bdf53045ba3b6a5ba17079fc3..8b594d9d13b60c51c6f9306e28178e75
return;
}
@@ -2622,9 +2626,9 @@
@@ -2622,9 +2625,9 @@
function newIndex(aTab, index) {
// Don't allow mixing pinned and unpinned tabs.
if (aTab.pinned) {
@@ -188,7 +180,7 @@ index f7c39fe804182e2bdf53045ba3b6a5ba17079fc3..8b594d9d13b60c51c6f9306e28178e75
}
}
@@ -2726,12 +2730,14 @@
@@ -2726,12 +2729,14 @@
selectedTab = {
left: selectedTab.left,
right: selectedTab.right,
@@ -204,7 +196,7 @@ index f7c39fe804182e2bdf53045ba3b6a5ba17079fc3..8b594d9d13b60c51c6f9306e28178e75
selectedTab,
];
})
@@ -2748,8 +2754,11 @@
@@ -2748,8 +2753,11 @@
delete this._lastTabToScrollIntoView;
// Is the new tab already completely visible?
if (
@@ -218,7 +210,7 @@ index f7c39fe804182e2bdf53045ba3b6a5ba17079fc3..8b594d9d13b60c51c6f9306e28178e75
) {
return;
}
@@ -2757,21 +2766,29 @@
@@ -2757,21 +2765,29 @@
if (this.arrowScrollbox.smoothScroll) {
// Can we make both the new tab and the selected tab completely visible?
if (
@@ -227,7 +219,7 @@ index f7c39fe804182e2bdf53045ba3b6a5ba17079fc3..8b594d9d13b60c51c6f9306e28178e75
- tabRect.right - selectedRect.left,
- selectedRect.right - tabRect.left
- ) <= scrollRect.width
+ !selectedRect || this.verticalMode
+ !selectedRect || (this.verticalMode
+ ? Math.max(
+ tabRect.bottom - selectedRect.top,
+ selectedRect.bottom - tabRect.top
@@ -235,7 +227,7 @@ index f7c39fe804182e2bdf53045ba3b6a5ba17079fc3..8b594d9d13b60c51c6f9306e28178e75
+ : Math.max(
+ tabRect.right - selectedRect.left,
+ selectedRect.right - tabRect.left
+ ) <= scrollRect.width
+ ) <= scrollRect.width)
) {
this.arrowScrollbox.ensureElementIsVisible(tabToScrollIntoView);
return;

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/urlbar/UrlbarInput.sys.mjs b/browser/components/urlbar/UrlbarInput.sys.mjs
index 3ab07e5864b3bb200608e7f619645f92ade129fe..12fe08c48d5ca9f00253e0aa6ebbc867ff471c83 100644
index 3ab07e5864b3bb200608e7f619645f92ade129fe..31085d82271b0259cd69ec9691ea5f33fe29e19e 100644
--- a/browser/components/urlbar/UrlbarInput.sys.mjs
+++ b/browser/components/urlbar/UrlbarInput.sys.mjs
@@ -67,6 +67,13 @@ XPCOMUtils.defineLazyPreferenceGetter(
@@ -16,21 +16,19 @@ index 3ab07e5864b3bb200608e7f619645f92ade129fe..12fe08c48d5ca9f00253e0aa6ebbc867
const DEFAULT_FORM_HISTORY_NAME = "searchbar-history";
const SEARCH_BUTTON_CLASS = "urlbar-search-button";
@@ -2152,6 +2159,13 @@ export class UrlbarInput {
@@ -2152,6 +2159,11 @@ export class UrlbarInput {
this.setAttribute("breakout-extend", "true");
+ if (lazy.ZEN_URLBAR_BEHAVIOR == 'float' || (lazy.ZEN_URLBAR_BEHAVIOR == 'floating-on-type' && !this.focusedViaMousedown)) {
+ this.setAttribute("zen-floating-urlbar", "true");
+ this.classList.add("zen-floating-urlbar");
+ } else {
+ this.removeAttribute("zen-floating-urlbar");
+ this.classList.remove("zen-floating-urlbar");
+ }
// 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")) {
@@ -3875,6 +3889,11 @@ export class UrlbarInput {
@@ -3875,6 +3887,11 @@ export class UrlbarInput {
}
_on_click(event) {
@@ -42,7 +40,7 @@ index 3ab07e5864b3bb200608e7f619645f92ade129fe..12fe08c48d5ca9f00253e0aa6ebbc867
if (
event.target == this.inputField ||
event.target == this._inputContainer ||
@@ -3986,9 +4005,12 @@ export class UrlbarInput {
@@ -3986,9 +4003,12 @@ export class UrlbarInput {
}
_on_mousedown(event) {
@@ -56,7 +54,7 @@ index 3ab07e5864b3bb200608e7f619645f92ade129fe..12fe08c48d5ca9f00253e0aa6ebbc867
if (
event.target != this.inputField &&
@@ -3998,8 +4020,8 @@ export class UrlbarInput {
@@ -3998,8 +4018,8 @@ export class UrlbarInput {
break;
}

View File

@@ -1117,6 +1117,15 @@ menuitem[id='placesContext_new:separator'] {
menupopup > menuitem:is([type='checkbox']) .menu-iconic-left {
--menu-image: none !important;
margin-inline-start: 4px;
margin-inline-end: 0;
padding-inline-end: 0;
@media not (-moz-platform: windows) {
margin-inline-end: 0;
padding-inline-end: 0;
}
}
@media (-moz-platform: windows) {
menupopup > menuitem[checked='true'] {
padding-inline-start: 6px;
}
}

View File

@@ -0,0 +1,19 @@
diff --git a/build/pgo/profileserver.py b/build/pgo/profileserver.py
index 31556cc9ae1a44a04e300083f7be4dc908cc3794..23ef1d8f5b30068ffdddc3c9cb6cd45e64d93071 100755
--- a/build/pgo/profileserver.py
+++ b/build/pgo/profileserver.py
@@ -18,7 +18,13 @@ from mozprofile import FirefoxProfile, Preferences
from mozprofile.permissions import ServerLocations
from mozrunner import CLI, FirefoxRunner
-PORT = 8888
+import socket
+def find_free_port():
+ with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
+ s.bind(('', 0))
+ return s.getsockname()[1]
+
+PORT = find_free_port()
PATH_MAPPINGS = {
"/webkit/PerformanceTests": "third_party/webkit/PerformanceTests",

View File

@@ -0,0 +1,13 @@
diff --git a/old-configure.in b/old-configure.in
index 036734708f20d658248a8b5b3a6d8adc2530a878..4e1f0d96cd355cc1195b58548b29c1a5d6bedaa8 100644
--- a/old-configure.in
+++ b/old-configure.in
@@ -89,7 +89,7 @@ dnl Mac bundle identifier (based on MOZ_APP_DISPLAYNAME)
if test -z "$MOZ_MACBUNDLE_ID"; then
MOZ_MACBUNDLE_ID=`echo $MOZ_APP_DISPLAYNAME | tr 'A-Z' 'a-z' | tr -dc 'a-z-'`
fi
-MOZ_MACBUNDLE_ID=${MOZ_DISTRIBUTION_ID}.${MOZ_MACBUNDLE_ID}
+MOZ_MACBUNDLE_ID=app.zen-browser.zen
if test "$MOZ_DEBUG"; then
MOZ_MACBUNDLE_ID=${MOZ_MACBUNDLE_ID}debug
fi

View File

@@ -9,7 +9,7 @@ index 19ff7d474f6d22d2d386764e2e6942ce6a324470..40d1906bdebd08510014fd6124be1705
+
+// zen:
+// Disable some of zen's features to better match the default Firefox experience
+user_pref("zen.workspaces.enabled", false);
+user_pref("zen.workspaces.disabled_for_testing", true);
+user_pref("zen.welcome-screen.enabled", false);
+user_pref("zen.tab-unloader.enabled", false);
+user_pref("zen.watermark.enabled", false);

View File

@@ -1,5 +1,5 @@
diff --git a/toolkit/moz.configure b/toolkit/moz.configure
index 9c3bb513537f1efc44788fc3efb9f7561eca9c0e..dcada8742c5ea147d2378357c86c9a8b7dc639db 100644
index 9c3bb513537f1efc44788fc3efb9f7561eca9c0e..b1dd5bd9c28c95c69486b9803c76279af01459bd 100644
--- a/toolkit/moz.configure
+++ b/toolkit/moz.configure
@@ -81,10 +81,13 @@ option(
@@ -39,3 +39,14 @@ index 9c3bb513537f1efc44788fc3efb9f7561eca9c0e..dcada8742c5ea147d2378357c86c9a8b
option(
@@ -3535,8 +3538,8 @@ with only_when(compile_environment):
@depends(target)
def default_user_appdir(target):
if target.kernel in ("WINNT", "Darwin"):
- return "Mozilla"
- return ".mozilla"
+ return "Zen"
+ return ".zen"
option(
"--with-user-appdir",

View File

@@ -1,5 +1,5 @@
diff --git a/toolkit/themes/shared/in-content/common-shared.css b/toolkit/themes/shared/in-content/common-shared.css
index 646a11b699a0b34204cd766836678bfc17e8548e..3fc584bc42d7c3acbd7cb2d86d7fa013c1f2406d 100644
index 38e13e0436ee3a2d722f2fc6e11ecafd122fb4eb..c0f985f7e0e74f7050ef91fb9d460d4880d389e4 100644
--- a/toolkit/themes/shared/in-content/common-shared.css
+++ b/toolkit/themes/shared/in-content/common-shared.css
@@ -5,6 +5,8 @@
@@ -11,7 +11,7 @@ index 646a11b699a0b34204cd766836678bfc17e8548e..3fc584bc42d7c3acbd7cb2d86d7fa013
@namespace html "http://www.w3.org/1999/xhtml";
@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
@@ -54,7 +56,7 @@
@@ -53,7 +55,7 @@
--in-content-table-border-color: var(--in-content-box-border-color);
--in-content-table-header-background: var(--in-content-primary-button-background);
--in-content-table-header-color: var(--in-content-primary-button-text-color);
@@ -20,7 +20,7 @@ index 646a11b699a0b34204cd766836678bfc17e8548e..3fc584bc42d7c3acbd7cb2d86d7fa013
--dialog-warning-text-color: var(--red-60);
@@ -740,7 +742,6 @@ html|*#categories {
@@ -737,7 +739,6 @@ html|*#categories {
color: inherit;
margin-inline-start: 34px;
padding-inline: 10px;
@@ -28,7 +28,15 @@ index 646a11b699a0b34204cd766836678bfc17e8548e..3fc584bc42d7c3acbd7cb2d86d7fa013
}
html|*#categories > html|*.category {
@@ -777,7 +778,8 @@ html|*#categories > html|*.category:dir(rtl) {
@@ -767,14 +768,15 @@ html|*#categories > html|*.category:dir(rtl) {
#categories > .category:hover:active {
background-color: var(--in-content-button-background-active);
- color: var(--in-content-button-text-color-active);
+ color: var(--in-content-button-text-color-active) !important;
border-color: var(--in-content-button-border-color-active);
}
@media not (forced-colors) {
#categories > .category[selected],
#categories > .category.selected {
@@ -38,7 +46,7 @@ index 646a11b699a0b34204cd766836678bfc17e8548e..3fc584bc42d7c3acbd7cb2d86d7fa013
}
#categories > .category[selected]:not(:hover) {
@@ -839,7 +841,7 @@ html|*#categories[last-input-type="mouse"] > html|button.category:focus-visible
@@ -836,7 +838,7 @@ html|*#categories[last-input-type="mouse"] > html|button.category:focus-visible
fill-opacity: 1;
}
@@ -47,7 +55,7 @@ index 646a11b699a0b34204cd766836678bfc17e8548e..3fc584bc42d7c3acbd7cb2d86d7fa013
:root {
--in-content-sidebar-width: 118px;
}
@@ -1219,7 +1221,7 @@ xul|*.sidebar-footer-link {
@@ -1216,7 +1218,7 @@ xul|*.sidebar-footer-link {
user-select: none;
}

View File

@@ -5,7 +5,7 @@
"binaryName": "zen",
"version": {
"product": "firefox",
"version": "133.0.3",
"version": "134.0",
"candidate": "134.0"
},
"buildOptions": {
@@ -39,7 +39,7 @@
"brandShortName": "Zen",
"brandFullName": "Zen Twilight",
"release": {
"displayVersion": "1.6t",
"displayVersion": "1.7t",
"github": {
"repo": "zen-browser/desktop"
}