mirror of
https://github.com/zen-browser/desktop.git
synced 2026-01-03 20:12:43 +00:00
Merge branch 'dev' of https://github.com/zen-browser/desktop into dev
This commit is contained in:
14
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
14
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@@ -64,17 +64,3 @@ body:
|
||||
label: Relevant log output if applicable
|
||||
description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks.
|
||||
render: shell
|
||||
- type: textarea
|
||||
id: support
|
||||
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.
|
||||
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>
|
||||
|
||||
102
.github/workflows/build.yml
vendored
102
.github/workflows/build.yml
vendored
@@ -54,6 +54,30 @@ jobs:
|
||||
echo "GITHUB_REPOSITORY_OWNER: ${{ github.repository_owner }}"
|
||||
echo "GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}"
|
||||
|
||||
start-self-host:
|
||||
runs-on: ubuntu-latest
|
||||
needs: debug-inputs
|
||||
steps:
|
||||
- name: Download aws-cli
|
||||
run: |
|
||||
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
|
||||
unzip awscliv2.zip
|
||||
sudo ./aws/install --update
|
||||
|
||||
- name: Start self-hosted runner
|
||||
if: ${{ inputs.create_release && inputs.update_branch == 'release' }}
|
||||
run: |
|
||||
echo "Starting self-hosted runner"
|
||||
echo "${{ secrets.SELF_HOSTED_RUNNER_START_SCRIPT }}" | base64 -d > start.sh
|
||||
sudo chmod +x start.sh
|
||||
bash ./start.sh
|
||||
|
||||
- name: Remove self-hosted runner script
|
||||
if: always() && ${{ inputs.create_release && inputs.update_branch == 'release' }}
|
||||
run: |
|
||||
echo "Removing self-hosted runner script"
|
||||
rm start.sh || true
|
||||
|
||||
check-build-is-correct:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [debug-inputs]
|
||||
@@ -65,6 +89,7 @@ jobs:
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
|
||||
- name: Check if correct branch
|
||||
if: ${{ inputs.create_release }}
|
||||
run: |
|
||||
echo "Checking if we are on the correct branch"
|
||||
git branch
|
||||
@@ -78,7 +103,7 @@ jobs:
|
||||
fi
|
||||
if [[ $(git branch --show-current) != $branch ]]; then
|
||||
echo ">>> Branch mismatch"
|
||||
exit 1
|
||||
# exit 1
|
||||
else
|
||||
echo ">>> Branch matches"
|
||||
fi
|
||||
@@ -155,29 +180,9 @@ jobs:
|
||||
commit_user_email: zen-browser-auto@users.noreply.github.com
|
||||
|
||||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
uses: ./.github/workflows/code-linter.yml
|
||||
needs: [build-data]
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: '.nvmrc'
|
||||
|
||||
- name: Setup pnpm
|
||||
run: npm install -g pnpm
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
pnpm install
|
||||
|
||||
- name: Lint
|
||||
run: pnpm lint
|
||||
name: Lint
|
||||
|
||||
check-release:
|
||||
runs-on: ubuntu-latest
|
||||
@@ -317,7 +322,7 @@ jobs:
|
||||
permissions:
|
||||
contents: write
|
||||
secrets: inherit
|
||||
needs: [build-data, windows-step-2]
|
||||
needs: [build-data, windows-step-2, start-self-host]
|
||||
with:
|
||||
build-version: ${{ needs.build-data.outputs.version }}
|
||||
generate-gpo: false
|
||||
@@ -329,7 +334,7 @@ jobs:
|
||||
permissions:
|
||||
contents: write
|
||||
secrets: inherit
|
||||
needs: [build-data]
|
||||
needs: [build-data, start-self-host]
|
||||
with:
|
||||
build-version: ${{ needs.build-data.outputs.version }}
|
||||
release-branch: ${{ inputs.update_branch }}
|
||||
@@ -386,7 +391,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
|
||||
@@ -419,11 +424,36 @@ jobs:
|
||||
name: zen-${{ matrix.arch }}.AppImage.zsync
|
||||
path: ./dist/zen-${{ matrix.arch }}.AppImage.zsync
|
||||
|
||||
stop-self-hosted:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [windows-step-3, linux]
|
||||
if: always()
|
||||
steps:
|
||||
- name: Download aws-cli
|
||||
run: |
|
||||
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
|
||||
unzip awscliv2.zip
|
||||
sudo ./aws/install --update
|
||||
|
||||
- name: Stop self-hosted runner
|
||||
if: ${{ inputs.create_release && inputs.update_branch == 'release' }}
|
||||
run: |
|
||||
echo "Stopping self-hosted runner"
|
||||
echo "${{ secrets.SELF_HOSTED_RUNNER_STOP_SCRIPT }}" | base64 -d > stop.sh
|
||||
sudo chmod +x stop.sh
|
||||
bash ./stop.sh > /dev/null 2>&1 &
|
||||
|
||||
- name: Remove self-hosted runner script
|
||||
if: always() && ${{ inputs.create_release && inputs.update_branch == 'release' }}
|
||||
run: |
|
||||
echo "Removing self-hosted runner script"
|
||||
rm stop.sh || true
|
||||
|
||||
release:
|
||||
if: ${{ inputs.create_release || inputs.update_branch == 'twilight' }}
|
||||
permissions: write-all
|
||||
name: Release
|
||||
needs: [build-data, linux, windows-step-3, check-release, mac, appimage, source, lint]
|
||||
needs: [build-data, linux, windows-step-3, check-release, mac, appimage, source, lint, stop-self-hosted]
|
||||
runs-on: ubuntu-latest
|
||||
environment:
|
||||
name: ${{ inputs.update_branch == 'release' && 'Deploy-Release' || 'Deploy-Twilight' }}
|
||||
@@ -590,7 +620,7 @@ jobs:
|
||||
pwd
|
||||
ls .
|
||||
ls ..
|
||||
mv releases.xml ./flatpak/io.github.zen_browser.zen.metainfo.xml
|
||||
mv releases.xml ./flatpak/app.zen_browser.zen.metainfo.xml
|
||||
# output the version to the file
|
||||
echo -n ${{ needs.build-data.outputs.version }} > ./flatpak/version
|
||||
|
||||
@@ -616,7 +646,7 @@ jobs:
|
||||
- name: Checkout Flatpak repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: flathub/io.github.zen_browser.zen
|
||||
repository: flathub/app.zen_browser.zen
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
|
||||
- name: Download Linux x86_64 build
|
||||
@@ -624,6 +654,11 @@ jobs:
|
||||
with:
|
||||
name: zen.linux-x86_64.tar.bz2
|
||||
|
||||
- name: Download Linux aarch64 build
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: zen.linux-aarch64.tar.bz2
|
||||
|
||||
- name: Update repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
@@ -645,12 +680,13 @@ jobs:
|
||||
--flatpak-archive archive.tar \
|
||||
--version ${{ needs.build-data.outputs.version }} \
|
||||
--linux-archive zen.linux-x86_64.tar.bz2 \
|
||||
--output io.github.zen_browser.zen.yml \
|
||||
--linux-aarch64-archive zen.linux-aarch64.tar.bz2 \
|
||||
--output app.zen_browser.zen.yml \
|
||||
--template-root ./zen-browser/flatpak
|
||||
|
||||
- name: Commit changes
|
||||
run: |
|
||||
git add io.github.zen_browser.zen.yml
|
||||
git add app.zen_browser.zen.yml
|
||||
git commit -m "Update to version ${{ needs.build-data.outputs.version }}"
|
||||
|
||||
- name: Clean up
|
||||
@@ -663,8 +699,8 @@ jobs:
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
retention-days: 5
|
||||
name: io.github.zen_browser.zen.yml
|
||||
path: ./io.github.zen_browser.zen.yml
|
||||
name: app.zen_browser.zen.yml
|
||||
path: ./app.zen_browser.zen.yml
|
||||
|
||||
- name: Create pull request
|
||||
uses: peter-evans/create-pull-request@v7
|
||||
|
||||
@@ -13,13 +13,9 @@ jobs:
|
||||
- name: Check out repository
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Fetch JSON Response
|
||||
run: |
|
||||
curl -s "https://hg.mozilla.org/releases/mozilla-release/json-tags" > rc-response.json
|
||||
|
||||
- name: Check for any updates
|
||||
env:
|
||||
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
|
||||
DISCORD_PING_IDS: ${{ secrets.DISCORD_PING_IDS }}
|
||||
run: |
|
||||
python3 scripts/check-rc-response.py || true
|
||||
python3 scripts/check_rc_response.py
|
||||
|
||||
4
.github/workflows/code-linter.yml
vendored
4
.github/workflows/code-linter.yml
vendored
@@ -5,6 +5,7 @@ on:
|
||||
branches:
|
||||
- dev
|
||||
workflow_dispatch:
|
||||
workflow_call:
|
||||
pull_request:
|
||||
branches:
|
||||
- dev
|
||||
@@ -23,6 +24,9 @@ jobs:
|
||||
with:
|
||||
node-version-file: '.nvmrc'
|
||||
|
||||
- name: Setup autopep8
|
||||
run: sudo apt install python3-autopep8
|
||||
|
||||
- name: Setup pnpm
|
||||
run: npm install -g pnpm
|
||||
|
||||
|
||||
4
.github/workflows/linux-release-build.yml
vendored
4
.github/workflows/linux-release-build.yml
vendored
@@ -17,7 +17,7 @@ jobs:
|
||||
permissions:
|
||||
contents: write
|
||||
# aarch64 does not need full 16x
|
||||
runs-on: ${{ (inputs.release-branch == 'release' && matrix.arch == 'x86_64') && 'ubuntu-latest' || 'ubuntu-latest' }}
|
||||
runs-on: ${{ (inputs.release-branch == 'release' && matrix.arch == 'x86_64') && 'self-hosted' || 'ubuntu-latest' }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
@@ -51,7 +51,7 @@ jobs:
|
||||
set -x
|
||||
sudo apt-get update --fix-missing
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y dos2unix yasm nasm build-essential libgtk2.0-dev libpython3-dev m4 uuid libasound2-dev libcurl4-openssl-dev libdbus-1-dev libdrm-dev libdbus-glib-1-dev libgtk-3-dev libpulse-dev libx11-xcb-dev libxt-dev xvfb lld llvm
|
||||
sudo apt-get install -y python3 python3-pip dos2unix yasm nasm build-essential libgtk2.0-dev libpython3-dev m4 uuid libasound2-dev libcurl4-openssl-dev libdbus-1-dev libdrm-dev libdbus-glib-1-dev libgtk-3-dev libpulse-dev libx11-xcb-dev libxt-dev xvfb lld llvm
|
||||
|
||||
- name: Configure sccache
|
||||
uses: actions/github-script@v7
|
||||
|
||||
3
.github/workflows/src/release-build.sh
vendored
3
.github/workflows/src/release-build.sh
vendored
@@ -4,8 +4,7 @@ set -xe
|
||||
|
||||
if command -v apt-get &> /dev/null; then
|
||||
sudo add-apt-repository ppa:kisak/kisak-mesa
|
||||
sudo apt update
|
||||
sudo apt upgrade
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y xvfb libnvidia-egl-wayland1 mesa-utils libgl1-mesa-dri
|
||||
fi
|
||||
|
||||
|
||||
17
.github/workflows/windows-release-build.yml
vendored
17
.github/workflows/windows-release-build.yml
vendored
@@ -23,7 +23,7 @@ jobs:
|
||||
windows-build:
|
||||
name: Build Windows - ${{ matrix.arch }}
|
||||
# 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' }}
|
||||
runs-on: ${{ (inputs.release-branch == 'release' && !inputs.generate-gpo && matrix.arch == 'x86_64') && 'self-hosted' || 'ubuntu-latest' }}
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
@@ -59,6 +59,7 @@ jobs:
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
pnpm install
|
||||
sudo apt-get install -y python3 python3-pip dos2unix yasm nasm build-essential libgtk2.0-dev libpython3-dev m4 uuid libasound2-dev libcurl4-openssl-dev libdbus-1-dev libdrm-dev libdbus-glib-1-dev libgtk-3-dev libpulse-dev libx11-xcb-dev libxt-dev xvfb lld llvm
|
||||
|
||||
- name: Load Surfer CI setup
|
||||
run: pnpm surfer ci --brand ${{ inputs.release-branch }} --display-version ${{ inputs.build-version }}
|
||||
@@ -89,11 +90,7 @@ jobs:
|
||||
set -x
|
||||
mkdir -p ~/win-cross
|
||||
cd engine/
|
||||
echo Setup wine
|
||||
aria2c "https://firefox-ci-tc.services.mozilla.com/api/index/v1/task/gecko.cache.level-1.toolchains.v3.linux64-wine.latest/artifacts/public%2Fbuild%2Fwine.tar.zst" -o wine.tar.zst
|
||||
tar --zstd -xvf wine.tar.zst -C ~/win-cross
|
||||
rm wine.tar.zst
|
||||
echo Setup Visual Studio
|
||||
sudo add-apt-repository ppa:savoury1/backports
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y python3-pip autoconf \
|
||||
autoconf2.13 \
|
||||
@@ -134,7 +131,13 @@ jobs:
|
||||
uuid-dev \
|
||||
wget \
|
||||
zip \
|
||||
zlib1g-dev
|
||||
zlib1g-dev \
|
||||
aria2
|
||||
echo Setup wine
|
||||
aria2c "https://firefox-ci-tc.services.mozilla.com/api/index/v1/task/gecko.cache.level-1.toolchains.v3.linux64-wine.latest/artifacts/public%2Fbuild%2Fwine.tar.zst" -o wine.tar.zst
|
||||
tar --zstd -xvf wine.tar.zst -C ~/win-cross
|
||||
rm wine.tar.zst
|
||||
echo Setup Visual Studio
|
||||
./mach python --virtualenv build taskcluster/scripts/misc/get_vs.py build/vs/vs2022.yaml ~/win-cross/vs2022
|
||||
|
||||
- name: Bootstrap
|
||||
|
||||
@@ -4,9 +4,13 @@ engine/
|
||||
**/*.xhtml
|
||||
**/*.inc.xhtml
|
||||
**/*.bundle.min.js
|
||||
**/*.min.js
|
||||
**/*.min.mjs
|
||||
|
||||
**/*.svg
|
||||
|
||||
surfer.json
|
||||
|
||||
src/browser/app/profile/*.js
|
||||
pnpm-lock.yaml
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -28,8 +28,9 @@
|
||||
|
||||
## 🖥️ Compatibility
|
||||
|
||||
Zen is currently built using firefox version `134.0`! 🚀
|
||||
Zen is currently built using firefox version `134.0.1`! 🚀
|
||||
|
||||
- [`Zen Twilight`](https://zen-browser.app/download?twilight) - Is currently built using firefox version `RC 134.0.1`!
|
||||
- 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!
|
||||
|
||||
@@ -43,7 +44,7 @@ We keep track of how many issues are closed at the end of the month in [docs/iss
|
||||
|
||||
### Versioning
|
||||
|
||||
Zen uses [Semantic Versioning](https://semver.org/) for versioning. Meaning, versions are displayed as `a.b-c.d` where:
|
||||
Zen uses [Semantic Versioning](https://semver.org/) for versioning. Meaning, versions are displayed as `a.bc.d` where:
|
||||
|
||||
- `a` is the major version
|
||||
- `b` is the minor version
|
||||
@@ -131,7 +132,7 @@ Zen couldn't be in its current state without the help of these amazing projects!
|
||||
|
||||
### 🖥️ Comparison with other browsers
|
||||
|
||||
Thanks everyone for making zen stand out amongs these giants!
|
||||
Thanks everyone for making zen stand out among these giants!
|
||||
|
||||
[](https://star-history.com/#zen-browser/desktop&chromium/chromium&brave/brave-browser&Date)
|
||||
|
||||
|
||||
@@ -35,8 +35,5 @@
|
||||
<!-- Required for com.apple.developer.web-browser.public-key-credential -->
|
||||
<key>com.apple.application-identifier</key>
|
||||
<string>H36NPCN86W.app.zen-browser.zen</string>
|
||||
|
||||
<!-- For platform passkey (webauthn) support -->
|
||||
<key>com.apple.developer.web-browser.public-key-credential</key><true/>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
@@ -31,8 +31,6 @@
|
||||
# $ open ~/Nightly.app
|
||||
#
|
||||
|
||||
shopt -s globstar
|
||||
|
||||
usage ()
|
||||
{
|
||||
echo "Usage: $0 "
|
||||
@@ -114,7 +112,7 @@ echo "-------------------------------------------------------------------------"
|
||||
set -x
|
||||
|
||||
# move Zen_Browser.provisionprofile to the Contents directory
|
||||
cp Zen_Browser.provisionprofile "${BUNDLE}"/Contents/embedded.provisionprofile
|
||||
#cp Zen_Browser.provisionprofile "${BUNDLE}"/Contents/embedded.provisionprofile
|
||||
|
||||
# Clear extended attributes which cause codesign to fail
|
||||
xattr -cr "${BUNDLE}"
|
||||
@@ -125,8 +123,14 @@ codesign --force -o runtime --verbose --sign "$IDENTITY" \
|
||||
"${BUNDLE}/Contents/Library/LaunchServices/org.mozilla.updater" \
|
||||
"${BUNDLE}/Contents/MacOS/XUL" \
|
||||
"${BUNDLE}"/Contents/embedded.provisionprofile \
|
||||
"${BUNDLE}/Contents/MacOS/pingsender" \
|
||||
"${BUNDLE}/Contents/MacOS/*.dylib" \
|
||||
"${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
|
||||
@@ -156,17 +160,6 @@ codesign --force -o runtime --verbose --sign "$IDENTITY" --deep \
|
||||
# Validate
|
||||
codesign -vvv --deep --strict "${BUNDLE}"
|
||||
|
||||
# Staple the ticket
|
||||
xcrun notarytool submit "${BUNDLE}" \
|
||||
--apple-id "${MACOS_APPLE_ACCOUNT_ID}" \
|
||||
--team-id "${MACOS_APPLE_DEVELOPER_ID_TEAM_ID}" \
|
||||
--password "${MACOS_APPLE_DEVELOPER_ID_PASSWORD}" \
|
||||
--no-s3-acceleration \
|
||||
--verbose \
|
||||
--wait
|
||||
|
||||
xcrun stapler staple --verbose "${BUNDLE}" || exit 0
|
||||
|
||||
# Create a DMG
|
||||
if [ ! -z "${OUTPUT_DMG_FILE}" ]; then
|
||||
DISK_IMAGE_DIR=`mktemp -d`
|
||||
|
||||
@@ -1,136 +1,119 @@
|
||||
param(
|
||||
[ValidateNotNullOrEmpty()]
|
||||
[string][Parameter(Mandatory=$true)]$SignIdentity,
|
||||
|
||||
[ValidateNotNullOrEmpty()]
|
||||
[string][Parameter(Mandatory=$true)]$GithubRunId
|
||||
)
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
||||
echo "Preparing environment"
|
||||
git pull --recurse-submodules
|
||||
mkdir windsign-temp -ErrorAction SilentlyContinue
|
||||
|
||||
# Download in parallel
|
||||
|
||||
#show output too
|
||||
#Start-Job -Name "DownloadGitObjectsRepo" -ScriptBlock {
|
||||
# param($PWD)
|
||||
# echo "Downloading git objects repo to $PWD\windsign-temp\windows-binaries"
|
||||
# git clone https://github.com/zen-browser/windows-binaries.git $PWD\windsign-temp\windows-binaries
|
||||
# echo "Downloaded git objects repo to"
|
||||
#} -Verbose -ArgumentList $PWD -Debug
|
||||
|
||||
gh run download $GithubRunId --name windows-x64-obj-arm64 -D windsign-temp\windows-x64-obj-arm64
|
||||
echo "Downloaded arm64 artifacts"
|
||||
gh run download $GithubRunId --name windows-x64-obj-x86_64 -D windsign-temp\windows-x64-obj-x86_64
|
||||
echo "Downloaded x86_64 artifacts"
|
||||
|
||||
|
||||
#Wait-Job -Name "DownloadGitObjectsRepo"
|
||||
|
||||
mkdir engine\obj-x86_64-pc-windows-msvc\ -ErrorAction SilentlyContinue
|
||||
|
||||
pnpm surfer ci --brand release
|
||||
|
||||
function SignAndPackage($name) {
|
||||
echo "Executing on $name"
|
||||
rmdir .\dist -Recurse -ErrorAction SilentlyContinue
|
||||
rmdir engine\obj-x86_64-pc-windows-msvc\ -Recurse -ErrorAction SilentlyContinue
|
||||
cp windsign-temp\windows-x64-obj-$name engine\obj-x86_64-pc-windows-msvc\ -Recurse
|
||||
echo "Signing $name"
|
||||
|
||||
# Collect all .exe and .dll files into a list
|
||||
$files = Get-ChildItem engine\obj-x86_64-pc-windows-msvc\ -Recurse -Include *.exe
|
||||
$files += Get-ChildItem engine\obj-x86_64-pc-windows-msvc\ -Recurse -Include *.dll
|
||||
|
||||
signtool.exe sign /n "$SignIdentity" /t http://time.certum.pl/ /fd sha256 /v $files
|
||||
echo "Packaging $name"
|
||||
$env:SURFER_SIGNING_MODE="sign"
|
||||
$env:MAR="$PWD\\build\\winsign\\mar.exe"
|
||||
if ($name -eq "arm64") {
|
||||
$env:SURFER_COMPAT="aarch64"
|
||||
} else {
|
||||
$env:SURFER_COMPAT="x86_64"
|
||||
}
|
||||
|
||||
echo "Compat Mode? $env:SURFER_COMPAT"
|
||||
pnpm surfer package --verbose
|
||||
|
||||
# In the release script, we do the following:
|
||||
# tar -xvf .github/workflows/object/windows-x64-signed-x86_64.tar.gz -C windows-x64-signed-x86_64
|
||||
# We need to create a tar with the same structure and no top-level directory
|
||||
# Inside, we need:
|
||||
# - update_manifest/*
|
||||
# - windows.mar
|
||||
# - zen.installer.exe
|
||||
# - zen.win-x86_64.zip
|
||||
echo "Creating tar for $name"
|
||||
rm .\windsign-temp\windows-x64-signed-$name -Recurse -ErrorAction SilentlyContinue
|
||||
mkdir windsign-temp\windows-x64-signed-$name
|
||||
|
||||
# Move the MAR, add the `-arm64` suffix if needed
|
||||
echo "Moving MAR for $name"
|
||||
if ($name -eq "arm64") {
|
||||
mv .\dist\output.mar windsign-temp\windows-x64-signed-$name\windows-$name.mar
|
||||
} else {
|
||||
mv .\dist\output.mar windsign-temp\windows-x64-signed-$name\windows.mar
|
||||
}
|
||||
|
||||
# Move the installer
|
||||
echo "Moving installer for $name"
|
||||
if ($name -eq "arm64") {
|
||||
mv .\dist\zen.installer.exe windsign-temp\windows-x64-signed-$name\zen.installer-$name.exe
|
||||
} else {
|
||||
mv .\dist\zen.installer.exe windsign-temp\windows-x64-signed-$name\zen.installer.exe
|
||||
}
|
||||
|
||||
# Move the zip
|
||||
echo "Moving zip for $name"
|
||||
if ($name -eq "arm64") {
|
||||
mv (Get-Item .\dist\*.en-US.win64-aarch64.zip) windsign-temp\windows-x64-signed-$name\zen.win-arm64.zip
|
||||
} else {
|
||||
mv (Get-Item .\dist\*.en-US.win64.zip) windsign-temp\windows-x64-signed-$name\zen.win-$name.zip
|
||||
}
|
||||
|
||||
# Extract the zip, sign everything inside, and repackage it
|
||||
Expand-Archive -Path windsign-temp\windows-x64-signed-$name\zen.win-$name.zip -DestinationPath windsign-temp\windows-x64-signed-$name\zen.win-$name
|
||||
rm windsign-temp\windows-x64-signed-$name\zen.win-$name.zip
|
||||
$files = Get-ChildItem windsign-temp\windows-x64-signed-$name\zen.win-$name -Recurse -Include *.exe
|
||||
$files += Get-ChildItem windsign-temp\windows-x64-signed-$name\zen.win-$name -Recurse -Include *.dll
|
||||
signtool.exe sign /n "$SignIdentity" /t http://time.certum.pl/ /fd sha256 /v $files
|
||||
Compress-Archive -Path windsign-temp\windows-x64-signed-$name\zen.win-$name -DestinationPath windsign-temp\windows-x64-signed-$name\zen.win-$name.zip
|
||||
rmdir windsign-temp\windows-x64-signed-$name\zen.win-$name -Recurse -ErrorAction SilentlyContinue
|
||||
|
||||
# Move the manifest
|
||||
mv .\dist\update\. windsign-temp\windows-x64-signed-$name\update_manifest
|
||||
|
||||
echo "Invoking tar for $name"
|
||||
# note: We need to sign it into a parent folder, called windows-x64-signed-$name
|
||||
rmdir .\windsign-temp\windows-binaries\windows-x64-signed-$name -Recurse -ErrorAction SilentlyContinue
|
||||
mv windsign-temp\windows-x64-signed-$name .\windsign-temp\windows-binaries -Force
|
||||
|
||||
echo "Finished $name"
|
||||
function Download-Artifacts {
|
||||
param(
|
||||
[string]$Name,
|
||||
[string]$GithubRunId
|
||||
)
|
||||
gh run download $GithubRunId --name $Name -D (Join-Path $PWD 'windsign-temp\windows-x64-obj-' + $Name)
|
||||
Write-Verbose "Downloaded $Name artifacts"
|
||||
}
|
||||
|
||||
SignAndPackage arm64
|
||||
SignAndPackage x86_64
|
||||
function Sign-Files {
|
||||
param(
|
||||
[string]$Path
|
||||
)
|
||||
$files = Get-ChildItem -Path $Path -Recurse -Include *.exe, *.dll
|
||||
signtool.exe sign /n "$SignIdentity" /t http://time.certum.pl/ /fd sha256 /v $files
|
||||
}
|
||||
|
||||
echo "All artifacts signed and packaged, ready for release!"
|
||||
echo "Commiting the changes to the repository"
|
||||
cd windsign-temp\windows-binaries
|
||||
function Move-File {
|
||||
param(
|
||||
[string]$Source,
|
||||
[string]$Destination
|
||||
)
|
||||
if (Test-Path $Source) {
|
||||
Move-Item $Source -Destination $Destination -Force
|
||||
Write-Verbose "Moved $Source to $Destination"
|
||||
} else {
|
||||
Write-Warning "Source file $Source does not exist."
|
||||
}
|
||||
}
|
||||
|
||||
function Create-Tar {
|
||||
param(
|
||||
[string]$Name
|
||||
)
|
||||
$tarPath = Join-Path $PWD "windsign-temp\windows-x64-signed-$Name"
|
||||
Remove-Item -Path $tarPath -Recurse -ErrorAction SilentlyContinue
|
||||
New-Item -ItemType Directory -Path $tarPath | Out-Null
|
||||
|
||||
Move-File -Source ".\dist\output.mar" -Destination (Join-Path $tarPath ("windows-$Name.mar"))
|
||||
Move-File -Source ".\dist\zen.installer.exe" -Destination (Join-Path $tarPath ("zen.installer$($Name -eq 'arm64' ? '-arm64' : '') .exe"))
|
||||
Move-File -Source (Get-ChildItem ".\dist\*.en-US.win64$($Name -eq 'arm64' ? '-aarch64' : '') .zip" | Select-Object -First 1) -Destination (Join-Path $tarPath ("zen.win-$Name.zip"))
|
||||
}
|
||||
|
||||
function SignAndPackage {
|
||||
param(
|
||||
[string]$Name
|
||||
)
|
||||
|
||||
Write-Verbose "Executing on $Name"
|
||||
Remove-Item -Path ".\dist" -Recurse -ErrorAction SilentlyContinue
|
||||
Remove-Item -Path "engine\obj-x86_64-pc-windows-msvc\" -Recurse -ErrorAction SilentlyContinue
|
||||
Copy-Item -Path (Join-Path $PWD "windsign-temp\windows-x64-obj-$Name") -Destination "engine\obj-x86_64-pc-windows-msvc\" -Recurse
|
||||
Write-Verbose "Signing $Name"
|
||||
|
||||
Sign-Files -Path "engine\obj-x86_64-pc-windows-msvc\"
|
||||
|
||||
$env:SURFER_SIGNING_MODE = "sign"
|
||||
$env:MAR = (Join-Path $PWD "build\winsign\mar.exe")
|
||||
$env:SURFER_COMPAT = if ($Name -eq "arm64") { "aarch64" } else { "x86_64" }
|
||||
Write-Verbose "Compat Mode? $env:SURFER_COMPAT"
|
||||
|
||||
pnpm surfer package --verbose
|
||||
|
||||
Create-Tar -Name $Name
|
||||
|
||||
# Extract and sign the contents of the zip
|
||||
Expand-Archive -Path (Join-Path $tarPath ("zen.win-$Name.zip")) -DestinationPath (Join-Path $tarPath ("zen.win-$Name"))
|
||||
Remove-Item -Path (Join-Path $tarPath ("zen.win-$Name.zip")) -ErrorAction SilentlyContinue
|
||||
|
||||
Sign-Files -Path (Join-Path $tarPath ("zen.win-$Name"))
|
||||
Compress-Archive -Path (Join-Path $tarPath ("zen.win-$Name")) -DestinationPath (Join-Path $tarPath ("zen.win-$Name.zip"))
|
||||
Remove-Item -Path (Join-Path $tarPath ("zen.win-$Name")) -Recurse -ErrorAction SilentlyContinue
|
||||
|
||||
Move-File -Source ".\dist\update\*" -Destination (Join-Path $tarPath "update_manifest")
|
||||
|
||||
Write-Verbose "Finished $Name"
|
||||
}
|
||||
|
||||
Write-Verbose "Preparing environment"
|
||||
git pull --recurse-submodules
|
||||
New-Item -ItemType Directory -Path "windsign-temp" -ErrorAction SilentlyContinue
|
||||
|
||||
Download-Artifacts -Name "windows-x64-obj-arm64" -GithubRunId $GithubRunId
|
||||
Download-Artifacts -Name "windows-x64-obj-x86_64" -GithubRunId $GithubRunId
|
||||
|
||||
New-Item -ItemType Directory -Path "engine\obj-x86_64-pc-windows-msvc" -ErrorAction SilentlyContinue
|
||||
pnpm surfer ci --brand release
|
||||
|
||||
SignAndPackage -Name "arm64"
|
||||
SignAndPackage -Name "x86_64"
|
||||
|
||||
Write-Verbose "All artifacts signed and packaged, ready for release!"
|
||||
Write-Verbose "Committing the changes to the repository"
|
||||
cd (Join-Path $PWD "windsign-temp\windows-binaries")
|
||||
git add .
|
||||
git commit -m "Sign and package windows artifacts"
|
||||
git push
|
||||
cd ..\..
|
||||
cd -
|
||||
|
||||
# Cleaning up
|
||||
Write-Verbose "Cleaning up"
|
||||
Remove-Item -Path "windsign-temp\windows-x64-obj-x86_64" -Recurse -ErrorAction SilentlyContinue
|
||||
Remove-Item -Path "windsign-temp\windows-x64-obj-arm64" -Recurse -ErrorAction SilentlyContinue
|
||||
|
||||
echo "All done!"
|
||||
echo "All the artifacts (x86_64 and arm46) are signed and packaged, get a rest now!"
|
||||
Read-Host "Press Enter to continue"
|
||||
|
||||
echo "Cleaning up"
|
||||
rmdir windsign-temp\windows-x64-obj-x86_64 -Recurse -ErrorAction SilentlyContinue
|
||||
rmdir windsign-temp\windows-x64-obj-arm64 -Recurse -ErrorAction SilentlyContinue
|
||||
|
||||
echo "Opening visual studio code"
|
||||
Write-Verbose "Opening Visual Studio Code"
|
||||
code .
|
||||
Write-Host "All done! Press Enter to continue."
|
||||
Read-Host
|
||||
|
||||
|
||||
@@ -59,8 +59,8 @@ if test "$ZEN_RELEASE"; then
|
||||
# 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
|
||||
export MOZ_LTO=cross,full
|
||||
ac_add_options --enable-lto=cross,full
|
||||
else
|
||||
export MOZ_LTO=cross,thin
|
||||
ac_add_options --enable-lto=cross,thin
|
||||
|
||||
@@ -6,6 +6,11 @@ ac_add_options --enable-eme=widevine
|
||||
export MOZ_MACBUNDLE_ID=${appId}
|
||||
export MOZ_MACBUNDLE_NAME="Zen Browser.app"
|
||||
|
||||
# override LTO settings
|
||||
# TODO: Dont
|
||||
export MOZ_LTO=cross,thin
|
||||
ac_add_options --enable-lto=cross,thin
|
||||
|
||||
if test "$ZEN_RELEASE"; then
|
||||
if test "$ZEN_GA_DISABLE_PGO"; then
|
||||
export ZEN_DUMMY=1
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
|
||||
| Metric | Average | Median | 90th percentile |
|
||||
| --- | --- | --- | ---: |
|
||||
| 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 |
|
||||
| Time to first response | 2 days, 19:29:04 | 6:53:13 | 7 days, 6:58:13 |
|
||||
| Time to close | 8 days, 4:46:39 | 2 days, 12:37:34 | 31 days, 21:13:40 |
|
||||
|
||||
| Metric | Count |
|
||||
| --- | ---: |
|
||||
| Number of items that remain open | 293 |
|
||||
| Number of items closed | 278 |
|
||||
| Number of items that remain open | 251 |
|
||||
| Number of items closed | 320 |
|
||||
| Total number of items created | 571 |
|
||||
|
||||
| Title | URL | Time to first response | Time to close |
|
||||
@@ -92,18 +92,18 @@
|
||||
| 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 | 8 days, 15:29:08 | 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 | 16 days, 11:39:45 |
|
||||
| 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 |
|
||||
| Title bar buttons on Linux | https://github.com/zen-browser/desktop/issues/3984 | 18 days, 10:31:55 | 18 days, 10:31:55 |
|
||||
| Playback Issue After Long Pauses in Videos: Requires Refresh to Fix | https://github.com/zen-browser/desktop/issues/3981 | None | None |
|
||||
| Profile button breaks if pressed fast right after pressing workspace | https://github.com/zen-browser/desktop/issues/3980 | None | None |
|
||||
| Single collapsed toolbar doesn't slide out in fullscreen (on Mac) | https://github.com/zen-browser/desktop/issues/3979 | None | None |
|
||||
| Single collapsed toolbar doesn't slide out in fullscreen (on Mac) | https://github.com/zen-browser/desktop/issues/3979 | None | 18 days, 6:00:53 |
|
||||
| Theme bleeds into websites | https://github.com/zen-browser/desktop/issues/3978 | 0:25:41 | 13:15:26 |
|
||||
| Laggy Scrolling and UI after updating from 1.0.2-b3 to 1.0.2-b4 and b5 | https://github.com/zen-browser/desktop/issues/3975 | None | 0:35:22 |
|
||||
| Clicking on any top application menu bar items triggers vertical tab bar | https://github.com/zen-browser/desktop/issues/3974 | 3 days, 7:31:20 | None |
|
||||
| Toolbar icons not centered properly on macOS | https://github.com/zen-browser/desktop/issues/3973 | 15:40:09 | 6 days, 2:04:51 |
|
||||
| Essentials change container after a restart. | https://github.com/zen-browser/desktop/issues/3972 | None | None |
|
||||
| pinning too many extensions causes toolbar to break | https://github.com/zen-browser/desktop/issues/3971 | None | None |
|
||||
| pinning too many extensions causes toolbar to break | https://github.com/zen-browser/desktop/issues/3971 | 18 days, 23:40:54 | 18 days, 23:40:54 |
|
||||
| New centered omnibox loses focus in the middle of composing characters in Korean IME | https://github.com/zen-browser/desktop/issues/3970 | None | None |
|
||||
| default theme does not apply correctly | https://github.com/zen-browser/desktop/issues/3969 | None | None |
|
||||
| Pick element from page shortcuts not working | https://github.com/zen-browser/desktop/issues/3968 | 2 days, 9:57:49 | 8 days, 1:57:55 |
|
||||
@@ -115,12 +115,12 @@
|
||||
| Compact mode hides the wrong bar | https://github.com/zen-browser/desktop/issues/3957 | None | None |
|
||||
| Sidebar doesn't hide sometimes. | https://github.com/zen-browser/desktop/issues/3956 | 1 day, 17:09:53 | None |
|
||||
| when an extension is used, the shrinked URL bar is inaccessible [new layout issue] | https://github.com/zen-browser/desktop/issues/3954 | None | None |
|
||||
| Error: File browser/extensions/moz.build does not exist | https://github.com/zen-browser/desktop/issues/3951 | 4:03:32 | None |
|
||||
| Error: File browser/extensions/moz.build does not exist | https://github.com/zen-browser/desktop/issues/3951 | 4:03:32 | 20 days, 4:52:42 |
|
||||
| Address Bar is off-center (MacOS) | https://github.com/zen-browser/desktop/issues/3950 | 2:38:16 | 2:56:46 |
|
||||
| Previous setting not retained after clicking on "cancel" button on "Tab unloader" | https://github.com/zen-browser/desktop/issues/3948 | None | None |
|
||||
| Broken design when "Tab unloader" setting is saved | https://github.com/zen-browser/desktop/issues/3947 | None | None |
|
||||
| Zen Browser Udemy Issue | https://github.com/zen-browser/desktop/issues/3942 | 0:38:14 | 19:55:04 |
|
||||
| Zen crashes when try to access chrome://browser/content/browser.xhtml | https://github.com/zen-browser/desktop/issues/3941 | 8:25:55 | None |
|
||||
| Zen crashes when trying to access chrome://browser/content/browser.xhtml | https://github.com/zen-browser/desktop/issues/3941 | 8:25:55 | None |
|
||||
| Move tab to other window when compact mode sidebar | https://github.com/zen-browser/desktop/issues/3940 | 1 day, 20:46:00 | 22:23:33 |
|
||||
| Opening a new instance of Zen changes position of Essentials | https://github.com/zen-browser/desktop/issues/3939 | None | None |
|
||||
| browser scrolling sensitivity unnecessary | https://github.com/zen-browser/desktop/issues/3938 | 23:04:47 | 23:04:47 |
|
||||
@@ -157,7 +157,7 @@
|
||||
| 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 | 16 days, 23:26:14 | None |
|
||||
| Crash when playing videos | https://github.com/zen-browser/desktop/issues/3891 | 16 days, 23:26:14 | 19 days, 2:14:52 |
|
||||
| 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 | 15 days, 6:11:30 | 16 days, 2:04:56 |
|
||||
@@ -170,7 +170,7 @@
|
||||
| Unable to change user profile when compact mode is on | https://github.com/zen-browser/desktop/issues/3879 | 1 day, 5:44:54 | 1 day, 5:44:54 |
|
||||
| profile change error from last update | https://github.com/zen-browser/desktop/issues/3877 | 0:44:21 | None |
|
||||
| Back and Forward buttons are still flipping | https://github.com/zen-browser/desktop/issues/3876 | 6:53:13 | 8 days, 16:43:46 |
|
||||
| Incorrect characters shown for Option+Cmd keyboard shortcuts | https://github.com/zen-browser/desktop/issues/3874 | None | None |
|
||||
| Incorrect characters shown for Option+Cmd keyboard shortcuts | https://github.com/zen-browser/desktop/issues/3874 | 25 days, 11:48:12 | 25 days, 11:48:12 |
|
||||
| YouTube mini player bug. | https://github.com/zen-browser/desktop/issues/3872 | 5:48:23 | 9 days, 22:48:33 |
|
||||
| Even after closing the tabs I heard the audio and I can't able to stop it | https://github.com/zen-browser/desktop/issues/3871 | None | None |
|
||||
| Close pinned tabs using mouse middle-click not working | https://github.com/zen-browser/desktop/issues/3870 | 2 days, 20:03:49 | None |
|
||||
@@ -195,7 +195,7 @@
|
||||
| Udemy stopped working | https://github.com/zen-browser/desktop/issues/3843 | 2:23:45 | 11:49:34 |
|
||||
| URL Bar Overflow | https://github.com/zen-browser/desktop/issues/3842 | 10:58:10 | 19:32:36 |
|
||||
| Moving the sidebar to the right brings back the Top Bar | https://github.com/zen-browser/desktop/issues/3840 | 1 day, 7:39:22 | 4 days, 9:06:05 |
|
||||
| Essential tabs get reset after browser restart | https://github.com/zen-browser/desktop/issues/3839 | None | None |
|
||||
| Essential tabs get reset after browser restart | https://github.com/zen-browser/desktop/issues/3839 | None | 22 days, 14:43:39 |
|
||||
| After removing Zen mods, some settings from the extension remain active in the browser | https://github.com/zen-browser/desktop/issues/3837 | 0:06:12 | 10 days, 23:20:01 |
|
||||
| Cannot run dev build 133.0.3 | https://github.com/zen-browser/desktop/issues/3836 | None | 0:23:06 |
|
||||
| Why Zen creating this folder itself on starting? | https://github.com/zen-browser/desktop/issues/3835 | 0:37:11 | 2:47:03 |
|
||||
@@ -350,7 +350,7 @@
|
||||
| window control buttons (close, minimize, maximize) have been moved to the sidebar | https://github.com/zen-browser/desktop/issues/3640 | None | None |
|
||||
| High frequency of clicking on web links that do not load correctly | https://github.com/zen-browser/desktop/issues/3639 | None | None |
|
||||
| Problems for href, text, and button. | https://github.com/zen-browser/desktop/issues/3638 | None | None |
|
||||
| When you visit light theme website with dark mode its not looking correct | https://github.com/zen-browser/desktop/issues/3637 | 0:34:46 | None |
|
||||
| When you visit light theme website with dark mode its not looking correct | https://github.com/zen-browser/desktop/issues/3637 | 0:34:46 | 31 days, 2:38:59 |
|
||||
| "Remove from history" in URL bar doesn't remove history, unfocuses URL bar | https://github.com/zen-browser/desktop/issues/3635 | None | None |
|
||||
| when sidebar on right and collapsed it blocks close window button on windows | https://github.com/zen-browser/desktop/issues/3634 | None | 0:09:46 |
|
||||
| Bug when searching in Korean. | https://github.com/zen-browser/desktop/issues/3633 | 2:13:54 | None |
|
||||
@@ -365,7 +365,7 @@
|
||||
| PLEASE Respect XDG User Paths | https://github.com/zen-browser/desktop/issues/3619 | 2:06:38 | 2:06:38 |
|
||||
| "do-nothing" links keep opening newtabs | https://github.com/zen-browser/desktop/issues/3618 | None | None |
|
||||
| Url suggestion container is not in right place. | https://github.com/zen-browser/desktop/issues/3617 | 8:00:08 | None |
|
||||
| Zen side panel showing behind the browser | https://github.com/zen-browser/desktop/issues/3616 | None | None |
|
||||
| Zen side panel showing behind the browser | https://github.com/zen-browser/desktop/issues/3616 | None | 27 days, 1:16:57 |
|
||||
| Horrible experience on touchpad when switch workspace using gesture | https://github.com/zen-browser/desktop/issues/3615 | None | None |
|
||||
| The current multi toolbars mode UI on macOS has some serious flaws | https://github.com/zen-browser/desktop/issues/3614 | None | None |
|
||||
| `urlbar-background` alpha is too low | https://github.com/zen-browser/desktop/issues/3613 | 1:47:36 | 16 days, 14:24:53 |
|
||||
@@ -396,7 +396,7 @@
|
||||
| Clicking search results in new floating URL doesn't openlinks | https://github.com/zen-browser/desktop/issues/3581 | 0:05:21 | 5:08:59 |
|
||||
| "Private Browsing" text doesn't fit in collapsed sidebar. Also, it's shown on the window twice. | https://github.com/zen-browser/desktop/issues/3580 | 1:40:14 | 1 day, 4:46:49 |
|
||||
| User Change Error | https://github.com/zen-browser/desktop/issues/3579 | 1:12:55 | 1 day, 23:09:27 |
|
||||
| Linux | Wayland icon instead of normal Zen one on taskbar | https://github.com/zen-browser/desktop/issues/3578 | 3:26:58 | None |
|
||||
| Linux | Wayland icon instead of normal Zen one on taskbar | https://github.com/zen-browser/desktop/issues/3578 | 3:26:58 | 31 days, 22:22:17 |
|
||||
| Browser freezes when playing videos, does not work. Video plays intermittently during video playback. Browser functions do not work. | https://github.com/zen-browser/desktop/issues/3577 | None | None |
|
||||
| Buttons Overlapping one another | https://github.com/zen-browser/desktop/issues/3576 | None | None |
|
||||
| Search Engine Selector has no icon size limit | https://github.com/zen-browser/desktop/issues/3575 | None | 17 days, 4:58:24 |
|
||||
@@ -409,7 +409,7 @@
|
||||
| How to put the search bar in its place? | https://github.com/zen-browser/desktop/issues/3567 | 0:08:37 | 10 days, 10:16:58 |
|
||||
| UI Disappeared - circumnstances unclear | https://github.com/zen-browser/desktop/issues/3566 | 2:24:11 | None |
|
||||
| Pinned side panel and main content area have different borders/box shadows | https://github.com/zen-browser/desktop/issues/3565 | None | None |
|
||||
| Mouse back button occasionally fails to go back a page, tries switching workspaces instead | https://github.com/zen-browser/desktop/issues/3564 | None | None |
|
||||
| Mouse back button occasionally fails to go back a page, tries switching workspaces instead | https://github.com/zen-browser/desktop/issues/3564 | 32 days, 2:15:31 | 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 | 24 days, 6:15:07 |
|
||||
@@ -431,15 +431,15 @@
|
||||
| Font rendering broken when scaling PDFs | https://github.com/zen-browser/desktop/issues/3537 | 1:05:51 | 12:46:07 |
|
||||
| corner rounding around padding doesnt work in maximized window on some websites | https://github.com/zen-browser/desktop/issues/3535 | 0:26:58 | None |
|
||||
| Close, Minimize and Fullscreen buttons not showing up in single titlebar mode | https://github.com/zen-browser/desktop/issues/3534 | 10 days, 9:25:03 | 11 days, 8:37:40 |
|
||||
| Weird Bar in new Tab | https://github.com/zen-browser/desktop/issues/3533 | 3:59:44 | None |
|
||||
| Address bar goes down, cursor gets in the way while typing | https://github.com/zen-browser/desktop/issues/3531 | 2:35:20 | None |
|
||||
| Weird Bar in new Tab | https://github.com/zen-browser/desktop/issues/3533 | 3:59:44 | 31 days, 20:17:31 |
|
||||
| Address bar goes down, cursor gets in the way while typing | https://github.com/zen-browser/desktop/issues/3531 | 2:35:20 | 32 days, 14:13:28 |
|
||||
| Workspace switcher in place of url bar | https://github.com/zen-browser/desktop/issues/3529 | None | None |
|
||||
| Corners appear unrounded when CSS backdrop blur filter used on website | https://github.com/zen-browser/desktop/issues/3528 | None | None |
|
||||
| Transparency only works in troubleshooting mode | https://github.com/zen-browser/desktop/issues/3527 | None | 1:28:25 |
|
||||
| Settings in 'Customize Toolbar' section do not affect Toolbar in 1.0.2b0 | https://github.com/zen-browser/desktop/issues/3526 | None | 1:25:14 |
|
||||
| Bug: Floating URL Bar Disappears When Using Chinese Input Method | https://github.com/zen-browser/desktop/issues/3525 | 8:42:05 | 9:42:10 |
|
||||
| The URL text is not selected when clicked | https://github.com/zen-browser/desktop/issues/3524 | 2:05:53 | None |
|
||||
| Toolbar Customization is broken | https://github.com/zen-browser/desktop/issues/3523 | 6:54:42 | None |
|
||||
| Toolbar Customization is broken | https://github.com/zen-browser/desktop/issues/3523 | 6:54:42 | 32 days, 16:54:39 |
|
||||
| Expandable Vertical Tabs No Longer Available as of 1.0.2-b.0 | https://github.com/zen-browser/desktop/issues/3522 | 1:38:01 | 4 days, 11:05:00 |
|
||||
| When typing on the URL bar the bar itself moves | https://github.com/zen-browser/desktop/issues/3521 | 12:41:11 | None |
|
||||
| App icon on the task bar disappears when personalizing toolbar seting the title bar visible | https://github.com/zen-browser/desktop/issues/3517 | None | None |
|
||||
@@ -497,7 +497,7 @@
|
||||
| Sidebar icons spilling over | https://github.com/zen-browser/desktop/issues/3447 | None | 23:54:49 |
|
||||
| Default Browser issue | https://github.com/zen-browser/desktop/issues/3445 | 4 days, 15:34:03 | None |
|
||||
| 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 |
|
||||
| When Workspaces are enabled browser.tabs.closeWindowWithLastTab set to true does not work (macOS) | https://github.com/zen-browser/desktop/issues/3443 | 32 days, 16:41:09 | 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 | 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 |
|
||||
@@ -517,9 +517,9 @@
|
||||
| The side bar keeps appearing when navigating tabs in split mode in compact mode | https://github.com/zen-browser/desktop/issues/3422 | None | 9 days, 7:10:57 |
|
||||
| Windows 98 titlebar appears sometimes when i try to open a PDF. | https://github.com/zen-browser/desktop/issues/3421 | None | None |
|
||||
| Welcome Page Color Theme Selection Bug: Double-Click Required | https://github.com/zen-browser/desktop/issues/3420 | None | 20 days, 14:37:58 |
|
||||
| Glance does not work with links inside iframes or shadow roots | https://github.com/zen-browser/desktop/issues/3419 | None | None |
|
||||
| Glance does not work with links inside iframes or shadow roots | https://github.com/zen-browser/desktop/issues/3419 | None | 31 days, 21:06:02 |
|
||||
| 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 |
|
||||
| No privacy | https://github.com/zen-browser/desktop/issues/3417 | None | 36 days, 15:12:07 |
|
||||
| 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 | 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 |
|
||||
@@ -527,62 +527,62 @@
|
||||
| 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 |
|
||||
| 1.0.1-a.22 is vunarable to few CVEs from ff 132 | https://github.com/zen-browser/desktop/issues/3408 | 2 days, 5:08:58 | 4 days, 17:50:02 |
|
||||
| search bar 'jump' to sidebar when in compact mode in twilight | https://github.com/zen-browser/desktop/issues/3406 | 0:05:11 | 3 days, 20:58:06 |
|
||||
| When I fast forward or rewind a video, video's sound level changes on YouTube. | https://github.com/zen-browser/desktop/issues/3405 | None | None |
|
||||
| Sidebar section spacing inconsistent | https://github.com/zen-browser/desktop/issues/3404 | None | None |
|
||||
| Essentials not loading pages correctly | https://github.com/zen-browser/desktop/issues/3403 | 1 day, 0:09:34 | None |
|
||||
| When I fast forward or rewind a video, video's sound level changes on YouTube. | https://github.com/zen-browser/desktop/issues/3405 | None | 37 days, 19:38:52 |
|
||||
| Sidebar section spacing inconsistent | https://github.com/zen-browser/desktop/issues/3404 | None | 37 days, 19:54:01 |
|
||||
| Essentials not loading pages correctly | https://github.com/zen-browser/desktop/issues/3403 | 1 day, 0:09:34 | 32 days, 20:29:06 |
|
||||
| Windows Defender positive: Redirector.GPAY!MTB | https://github.com/zen-browser/desktop/issues/3402 | 12 days, 1:10:39 | 12 days, 1:22:56 |
|
||||
| `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 |
|
||||
| CSS not loading or something | https://github.com/zen-browser/desktop/issues/3399 | 32 days, 2:15:05 | 32 days, 2:15:05 |
|
||||
| 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 | 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 |
|
||||
| Per window expansion of sidebar. | https://github.com/zen-browser/desktop/issues/3383 | None | None |
|
||||
| Some extensions do not trigger on webpage load (but do work on FF) | https://github.com/zen-browser/desktop/issues/3382 | None | None |
|
||||
| Possible Memory Leak - Zen won't leave the Taskbar after hours of use | https://github.com/zen-browser/desktop/issues/3389 | None | 37 days, 17:44:30 |
|
||||
| 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 | 35 days, 23:59:29 |
|
||||
| The option to hide autofill from the browser does not work with iCloud passwords | https://github.com/zen-browser/desktop/issues/3384 | None | 37 days, 23:42:50 |
|
||||
| Per window expansion of sidebar. | https://github.com/zen-browser/desktop/issues/3383 | 34 days, 8:07:53 | None |
|
||||
| Some extensions do not trigger on webpage load (but do work on FF) | https://github.com/zen-browser/desktop/issues/3382 | None | 38 days, 0:22:39 |
|
||||
| Scrollwheel not working | https://github.com/zen-browser/desktop/issues/3380 | None | None |
|
||||
| SideBar Compact mode bug | https://github.com/zen-browser/desktop/issues/3379 | None | None |
|
||||
| SideBar Compact mode bug | https://github.com/zen-browser/desktop/issues/3379 | None | 38 days, 2:46:44 |
|
||||
| Joining Microsoft Teams call crashes browser tabs | https://github.com/zen-browser/desktop/issues/3378 | 11 days, 22:11:35 | None |
|
||||
| can not quit browser by ctrl + q | https://github.com/zen-browser/desktop/issues/3377 | 2 days, 8:01:56 | None |
|
||||
| RIME input method cannot input information | https://github.com/zen-browser/desktop/issues/3374 | None | None |
|
||||
| RIME input method cannot input information | https://github.com/zen-browser/desktop/issues/3374 | None | 38 days, 9:36:51 |
|
||||
| Workspace behaves badly when switching between them with touchpad | https://github.com/zen-browser/desktop/issues/3373 | None | None |
|
||||
| the z-index of both compact modes are messed up | https://github.com/zen-browser/desktop/issues/3371 | None | None |
|
||||
| the z-index of both compact modes are messed up | https://github.com/zen-browser/desktop/issues/3371 | None | 37 days, 16:11:05 |
|
||||
| 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 |
|
||||
| Tab Management - Workspaces - Display workspaces as an icon strip bug | https://github.com/zen-browser/desktop/issues/3369 | None | 37 days, 16:55:24 |
|
||||
| Google meet not loading | https://github.com/zen-browser/desktop/issues/3368 | 16:55:47 | 38 days, 16:59:55 |
|
||||
| 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 |
|
||||
| The main UI's background doesn't follow the theme sometimes | https://github.com/zen-browser/desktop/issues/3366 | None | 37 days, 19:55:37 |
|
||||
| Shortcut Settings Typo | https://github.com/zen-browser/desktop/issues/3365 | 34 days, 13:56:04 | 34 days, 16:38:11 |
|
||||
| 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 |
|
||||
| ClickTrades Webpage not loading | https://github.com/zen-browser/desktop/issues/3362 | None | 38 days, 0:31:43 |
|
||||
| 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 | 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 |
|
||||
| Dev Tools Context Menus Broken | https://github.com/zen-browser/desktop/issues/3350 | None | 38 days, 15:57:10 |
|
||||
| Stuck in toolbar customizing mode | https://github.com/zen-browser/desktop/issues/3349 | None | 37 days, 16:08:33 |
|
||||
| Top Bar Padding Increasing in Compact Mode (Twilight) | https://github.com/zen-browser/desktop/issues/3348 | 9:32:10 | 6 days, 22:39:00 |
|
||||
| Not using QUIC/http3 | https://github.com/zen-browser/desktop/issues/3346 | None | None |
|
||||
| Unable to go to zen-browser.app when using zen-browser, i can go to the website using other browsers | https://github.com/zen-browser/desktop/issues/3345 | None | None |
|
||||
| UI Error | https://github.com/zen-browser/desktop/issues/3342 | None | None |
|
||||
| Zen Mod - Sorting issue | https://github.com/zen-browser/desktop/issues/3341 | None | None |
|
||||
| Not using QUIC/http3 | https://github.com/zen-browser/desktop/issues/3346 | None | 37 days, 22:07:48 |
|
||||
| Unable to go to zen-browser.app when using zen-browser, i can go to the website using other browsers | https://github.com/zen-browser/desktop/issues/3345 | None | 39 days, 23:44:19 |
|
||||
| UI Error | https://github.com/zen-browser/desktop/issues/3342 | None | 38 days, 1:42:45 |
|
||||
| Zen Mod - Sorting issue | https://github.com/zen-browser/desktop/issues/3341 | 36 days, 18:11:48 | 36 days, 18:11:48 |
|
||||
| YouTube Viewport Issue | https://github.com/zen-browser/desktop/issues/3340 | None | 19:39:03 |
|
||||
| Discord capcha and Cloudflare turnstile cannot verify human access | https://github.com/zen-browser/desktop/issues/3339 | None | None |
|
||||
| Discord capcha and Cloudflare turnstile cannot verify human access | https://github.com/zen-browser/desktop/issues/3339 | None | 38 days, 13:52:12 |
|
||||
| `null` in toolbar won't disappear | https://github.com/zen-browser/desktop/issues/3337 | 12:31:11 | 10 days, 11:19:00 |
|
||||
| Zen Browser Unusable and Stuck on Zen Logo After Changing Keyboard Shortcuts (Issue Across Multiple Platforms) | https://github.com/zen-browser/desktop/issues/3335 | 31 days, 15:12:01 | None |
|
||||
| Slight translation error for Swedish | https://github.com/zen-browser/desktop/issues/3334 | None | None |
|
||||
| GIVE ME SOMETHING TO GRAB ONTO SO I CAN DRAG WINDOWS AROUND!!! | https://github.com/zen-browser/desktop/issues/3333 | 1:31:36 | None |
|
||||
| GIVE ME SOMETHING TO GRAB ONTO SO I CAN DRAG WINDOWS AROUND!!! | https://github.com/zen-browser/desktop/issues/3333 | 1:31:36 | 41 days, 20:29:07 |
|
||||
| GsConnect Not working | https://github.com/zen-browser/desktop/issues/3332 | 2:36:46 | 4:34:49 |
|
||||
| Fullscreening a tab still has borders on the right and bottom of the browser. | https://github.com/zen-browser/desktop/issues/3331 | None | 1:22:12 |
|
||||
| Drag-and-Drop Feature | https://github.com/zen-browser/desktop/issues/3329 | 3:02:05 | None |
|
||||
| Unresponsive or crashing when different profile is opened | https://github.com/zen-browser/desktop/issues/3327 | None | None |
|
||||
| Unresponsive or crashing when different profile is opened | https://github.com/zen-browser/desktop/issues/3327 | None | 38 days, 11:27:50 |
|
||||
| Some issues with sync between multiple windows | https://github.com/zen-browser/desktop/issues/3326 | None | 32 days, 4:09:34 |
|
||||
| Google Sign in Stuck | https://github.com/zen-browser/desktop/issues/3325 | None | 10 days, 1:50:46 |
|
||||
| SSL reporting as Unknown Issuer when using a valid certificate | https://github.com/zen-browser/desktop/issues/3324 | None | None |
|
||||
| SSL reporting as Unknown Issuer when using a valid certificate | https://github.com/zen-browser/desktop/issues/3324 | None | 38 days, 12:53:11 |
|
||||
| Google Classroom acting funky | https://github.com/zen-browser/desktop/issues/3323 | 13:22:38 | 17:26:18 |
|
||||
|
||||
_This report was generated with the [Issue Metrics Action](https://github.com/github/issue-metrics)_
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
app-id: io.github.zen_browser.zen
|
||||
app-id: app.zen_browser.zen
|
||||
runtime: org.freedesktop.Platform
|
||||
runtime-version: '24.08'
|
||||
sdk: org.freedesktop.Sdk
|
||||
@@ -28,7 +28,7 @@ finish-args:
|
||||
- --system-talk-name=org.freedesktop.NetworkManager
|
||||
- --talk-name=org.a11y.Bus
|
||||
- --env=GTK_PATH=/app/lib/gtkmodules
|
||||
- --env=MESA_SHADER_CACHE_DIR=$XDG_RUNTIME_DIR/app/$FLATPAK_ID/cache/mesa_shader_cache_db
|
||||
- --env=MESA_SHADER_CACHE_DIR=$XDG_RUNTIME_DIR/app/$FLATPAK_ID/cache/mesa_shader_cache_db
|
||||
modules:
|
||||
- name: zen_browser
|
||||
buildsystem: simple
|
||||
@@ -36,20 +36,29 @@ modules:
|
||||
- mv zen /app/
|
||||
- mkdir -p /app/lib/ffmpeg
|
||||
|
||||
- install -Dm0755 metadata/launch-script.sh ${{FLATPAK_DEST}}/bin/launch-script.sh
|
||||
- install -Dm0644 metadata/policies.json ${{FLATPAK_DEST}}/bin/distribution/policies.json
|
||||
- install -Dm0644 metadata/icons/io.github.zen_browser.zen.svg ${{FLATPAK_DEST}}/share/icons/hicolor/scalable/apps/${{FLATPAK_ID}}.svg
|
||||
- install -Dm0644 metadata/io.github.zen_browser.zen.metainfo.xml ${{FLATPAK_DEST}}/share/metainfo/${{FLATPAK_ID}}.metainfo.xml
|
||||
- install -Dm0644 metadata/io.github.zen_browser.zen.desktop ${{FLATPAK_DEST}}/share/applications/${{FLATPAK_ID}}.desktop
|
||||
- install -Dm0755 metadata/launch-script.sh ${FLATPAK_DEST}/bin/launch-script.sh
|
||||
- install -Dm0644 metadata/policies.json ${FLATPAK_DEST}/bin/distribution/policies.json
|
||||
- install -Dm0644 metadata/icons/${FLATPAK_ID}.svg ${FLATPAK_DEST}/share/icons/hicolor/scalable/apps/${FLATPAK_ID}.svg
|
||||
- install -Dm0644 metadata/${FLATPAK_ID}.metainfo.xml ${FLATPAK_DEST}/share/metainfo/${FLATPAK_ID}.metainfo.xml
|
||||
- install -Dm0644 metadata/${FLATPAK_ID}.desktop ${FLATPAK_DEST}/share/applications/${FLATPAK_ID}.desktop
|
||||
|
||||
sources:
|
||||
- type: archive
|
||||
url: https://github.com/zen-browser/desktop/releases/download/{version}/zen.linux-x86_64.tar.bz2
|
||||
url: https://github.com/zen-browser/desktop/releases/download/1.6b/zen.linux-x86_64.tar.bz2
|
||||
sha256: {linux_sha256}
|
||||
strip-components: 0
|
||||
only-arches:
|
||||
- x86_64
|
||||
|
||||
- type: archive
|
||||
url: https://github.com/zen-browser/flatpak/releases/download/{version}/archive.tar
|
||||
url: https://github.com/zen-browser/desktop/releases/download/1.6b/zen.linux-aarch64.tar.bz2
|
||||
sha256: {linux_aarch64_sha256}
|
||||
strip-components: 0
|
||||
only-arches:
|
||||
- aarch64
|
||||
|
||||
- type: archive
|
||||
url: https://github.com/zen-browser/flatpak/releases/download/1.6b/archive.tar
|
||||
sha256: {flatpak_sha256}
|
||||
strip-components: 0
|
||||
dest: metadata
|
||||
13
package.json
13
package.json
@@ -12,14 +12,17 @@
|
||||
"import": "surfer import",
|
||||
"export": "surfer export",
|
||||
"init": "npm run bootstrap && npm run import",
|
||||
"bootstrap": "surfer download && surfer bootstrap",
|
||||
"download": "surfer download",
|
||||
"bootstrap": "surfer bootstrap && surfer bootstrap",
|
||||
"package": "surfer package",
|
||||
"update-ff": "python3 scripts/update_ff.py",
|
||||
"update-ff:raw": "surfer update",
|
||||
"update-newtab": "python3 scripts/update_newtab.py",
|
||||
"pretty": "prettier . --write",
|
||||
"lint": "npx prettier . --check",
|
||||
"prepare": "husky"
|
||||
"update-ff:rc": "python3 scripts/update_ff.py --rc",
|
||||
"pretty": "prettier . --write && autopep8 -r --in-place scripts/ src/",
|
||||
"lint": "npx prettier . --check && autopep8 --diff scripts/ src/",
|
||||
"prepare": "husky",
|
||||
"reset-ff": "surfer reset"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@@ -36,7 +39,7 @@
|
||||
},
|
||||
"homepage": "https://github.com/zen-browser/core#readme",
|
||||
"dependencies": {
|
||||
"@zen-browser/surfer": "^1.9.6"
|
||||
"@zen-browser/surfer": "^1.9.8"
|
||||
},
|
||||
"devDependencies": {
|
||||
"husky": "^9.1.7",
|
||||
|
||||
20
pnpm-lock.yaml
generated
20
pnpm-lock.yaml
generated
@@ -9,8 +9,8 @@ importers:
|
||||
.:
|
||||
dependencies:
|
||||
'@zen-browser/surfer':
|
||||
specifier: ^1.9.6
|
||||
version: 1.9.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.9.6':
|
||||
resolution: {integrity: sha512-UdtxmgQ+ft03cD8YMqRMwrXf3Lj1OUN1vWPcZxJYLnI41N2UXGlpiOg7U/q4pEC/YNRkJnywiqAaCRJ1n1J8ZQ==}
|
||||
'@zen-browser/surfer@1.9.8':
|
||||
resolution: {integrity: sha512-dx4ouPDB7bg+eWR+NNuhdroR0JyZ+bWlxpAFskl9TiR3cvr1qtmZG9bYSF27nLNOUSWgKNamjevP785B08Cxjg==}
|
||||
hasBin: true
|
||||
|
||||
ansi-escapes@7.0.0:
|
||||
@@ -877,8 +877,8 @@ packages:
|
||||
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
|
||||
engines: {node: '>=8'}
|
||||
|
||||
tar-fs@2.1.1:
|
||||
resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==}
|
||||
tar-fs@2.1.2:
|
||||
resolution: {integrity: sha512-EsaAXwxmx8UB7FRKqeozqEPop69DXcmYwTQwXvyAPF352HJsPdkVhvTaDPYqfNgruveJIJy3TA2l+2zj8LJIJA==}
|
||||
|
||||
tar-iterator@1.2.9:
|
||||
resolution: {integrity: sha512-sHgC+mJjn5n4v1YDQsFyGUg8Up6byOWV8QjQh/ZOYSOVkmg5q9ivpTgIKJrQOUihivsh+4pQlY5gMmXyH4AyOg==}
|
||||
@@ -1036,7 +1036,7 @@ snapshots:
|
||||
|
||||
'@types/node@17.0.45': {}
|
||||
|
||||
'@zen-browser/surfer@1.9.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
|
||||
@@ -1606,7 +1606,7 @@ snapshots:
|
||||
pump: 3.0.2
|
||||
rc: 1.2.8
|
||||
simple-get: 4.0.1
|
||||
tar-fs: 2.1.1
|
||||
tar-fs: 2.1.2
|
||||
tunnel-agent: 0.6.0
|
||||
|
||||
prettier-plugin-sh@0.14.0(prettier@3.4.2):
|
||||
@@ -1705,7 +1705,7 @@ snapshots:
|
||||
prebuild-install: 7.1.2
|
||||
semver: 7.6.3
|
||||
simple-get: 4.0.1
|
||||
tar-fs: 2.1.1
|
||||
tar-fs: 2.1.2
|
||||
tunnel-agent: 0.6.0
|
||||
|
||||
shebang-command@2.0.0:
|
||||
@@ -1801,7 +1801,7 @@ snapshots:
|
||||
dependencies:
|
||||
has-flag: 4.0.0
|
||||
|
||||
tar-fs@2.1.1:
|
||||
tar-fs@2.1.2:
|
||||
dependencies:
|
||||
chownr: 1.1.4
|
||||
mkdirp-classic: 0.5.3
|
||||
|
||||
5
pyproject.toml
Normal file
5
pyproject.toml
Normal file
@@ -0,0 +1,5 @@
|
||||
[tool.autopep8]
|
||||
max_line_length = 120
|
||||
recursive = true
|
||||
aggressive = 3
|
||||
indent_size = 2
|
||||
7
requirements.txt
Normal file
7
requirements.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
autopep8==2.3.1
|
||||
click==8.1.8
|
||||
mypy-extensions==1.0.0
|
||||
packaging==24.2
|
||||
pathspec==0.12.1
|
||||
platformdirs==4.3.6
|
||||
pycodestyle==2.12.1
|
||||
@@ -1,63 +0,0 @@
|
||||
import json
|
||||
import sys
|
||||
import os
|
||||
import requests
|
||||
|
||||
RESPONSE = 'rc-response.json'
|
||||
METADATA = 'surfer.json'
|
||||
|
||||
def get_current_version():
|
||||
with open(METADATA) as f:
|
||||
metadata = json.load(f)
|
||||
return metadata['version']['candidate']
|
||||
|
||||
def get_rc_response():
|
||||
with open(RESPONSE) as f:
|
||||
data = json.load(f)
|
||||
for tag_dict in data['tags']:
|
||||
tag = tag_dict['tag']
|
||||
is_valid_tag = (tag.startswith('FIREFOX') and tag.endswith('_BUILD1')
|
||||
and not 'ESR' in tag and not 'b' in tag)
|
||||
if is_valid_tag:
|
||||
return tag.replace('FIREFOX_', '').replace('_BUILD1', '').replace('_', '.')
|
||||
return None
|
||||
|
||||
def get_pings():
|
||||
pings = ""
|
||||
for ping in os.getenv('DISCORD_PING_IDS').split(','):
|
||||
pings += "<@%s> " % ping
|
||||
return pings
|
||||
|
||||
def send_webhook(rc: str):
|
||||
text = "||%s|| New Firefox RC version is available: **%s**" % (get_pings(), rc)
|
||||
webhook_url = os.getenv('DISCORD_WEBHOOK_URL') #os.getenv('DISCORD_WEBHOOK_URL')
|
||||
message = {
|
||||
"content": text,
|
||||
"username": "Firefox RC Checker",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/189789277?v=4",
|
||||
}
|
||||
response = requests.post(webhook_url, json=message)
|
||||
if response.status_code == 204:
|
||||
print("Message sent successfully!")
|
||||
else:
|
||||
print(f"Failed to send message: {response.status_code}")
|
||||
|
||||
def main():
|
||||
current = get_current_version()
|
||||
if not current:
|
||||
print('Could not find current version')
|
||||
return 1
|
||||
rc = get_rc_response()
|
||||
if not rc:
|
||||
print('Could not find RC version')
|
||||
return 1
|
||||
if current != rc:
|
||||
print('Current version is %s, but RC version is %s' % (current, rc))
|
||||
# Here, we should update the current version in surfer.json
|
||||
send_webhook(rc)
|
||||
return 0
|
||||
print('Current version is %s, and RC version is %s' % (current, rc))
|
||||
return 1
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.exit(main())
|
||||
92
scripts/check_rc_response.py
Normal file
92
scripts/check_rc_response.py
Normal file
@@ -0,0 +1,92 @@
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
import requests
|
||||
from typing import Optional
|
||||
|
||||
METADATA_FILENAME = "surfer.json"
|
||||
TAGS_API_URL = "https://hg.mozilla.org/releases/mozilla-release/json-tags"
|
||||
|
||||
|
||||
def get_current_version() -> Optional[str]:
|
||||
"""Retrieve the current version from the metadata file."""
|
||||
try:
|
||||
with open(METADATA_FILENAME) as f:
|
||||
metadata = json.load(f)
|
||||
return metadata["version"]["candidate"]
|
||||
except (FileNotFoundError, json.JSONDecodeError) as e:
|
||||
print(f"Error reading current version: {e}")
|
||||
return None
|
||||
|
||||
|
||||
def get_repo_data() -> Optional[str]:
|
||||
"""Retrieve the repository data from the API."""
|
||||
try:
|
||||
print(f"Retrieving repository data from {TAGS_API_URL}")
|
||||
response = requests.get(TAGS_API_URL)
|
||||
response.raise_for_status() # Raise an error for bad responses
|
||||
return response.json()
|
||||
except requests.RequestException as e:
|
||||
print(f"Error retrieving repository data: {e}")
|
||||
return None
|
||||
|
||||
|
||||
def get_rc_response() -> Optional[str]:
|
||||
"""Get the release candidate response from the response file."""
|
||||
try:
|
||||
data = get_repo_data()
|
||||
for tag_dict in data["tags"]:
|
||||
tag = tag_dict["tag"]
|
||||
if (tag.startswith("FIREFOX") and tag.endswith("_BUILD1")
|
||||
and "ESR" not in tag and "b" not in tag):
|
||||
return (tag.replace("FIREFOX_", "").replace("_BUILD1",
|
||||
"").replace("_", "."))
|
||||
except (FileNotFoundError, json.JSONDecodeError) as e:
|
||||
print(f"Error reading RC response: {e}")
|
||||
return None
|
||||
|
||||
|
||||
def get_pings() -> str:
|
||||
"""Build a string of Discord user IDs for mentions."""
|
||||
ping_ids = os.getenv("DISCORD_PING_IDS", "")
|
||||
return " ".join(f"<@{ping.strip()}>" for ping in ping_ids.split(",")
|
||||
if ping.strip())
|
||||
|
||||
|
||||
def send_webhook(rc: str) -> None:
|
||||
"""Send a message to the Discord webhook."""
|
||||
text = f"||{get_pings()}|| New Firefox RC version is available: **{rc}**"
|
||||
webhook_url = os.getenv("DISCORD_WEBHOOK_URL")
|
||||
|
||||
if webhook_url:
|
||||
message = {
|
||||
"content": text,
|
||||
"username": "Firefox RC Checker",
|
||||
}
|
||||
try:
|
||||
response = requests.post(webhook_url, json=message)
|
||||
response.raise_for_status() # Raise an error for bad responses
|
||||
except requests.RequestException as e:
|
||||
print(f"Error sending webhook: {e}")
|
||||
else:
|
||||
print("Webhook URL not set.")
|
||||
|
||||
|
||||
def rc_should_be_updated(rc_response: str, current_version: str) -> bool:
|
||||
return rc_response and rc_response != current_version
|
||||
|
||||
|
||||
def main() -> int:
|
||||
current_version = get_current_version()
|
||||
rc_response = get_rc_response()
|
||||
|
||||
if rc_should_be_updated(rc_response, current_version):
|
||||
send_webhook(rc_response)
|
||||
return 0
|
||||
|
||||
print(f"Current version: {current_version}, RC version: {rc_response}")
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
@@ -1,18 +0,0 @@
|
||||
browser_locales=engine/browser/locales
|
||||
|
||||
copy_browser_locales() {
|
||||
langId=$1
|
||||
mkdir -p $browser_locales/$langId
|
||||
if [ "$langId" = "en-US" ]; then
|
||||
find $browser_locales/$langId -type f -name "zen*" -delete
|
||||
rsync -av --exclude=.git ./l10n/en-US/browser/ $browser_locales/$langId/
|
||||
return
|
||||
fi
|
||||
rm -rf $browser_locales/$langId/
|
||||
# TODO: Copy the rest of the l10n directories to their respective locations
|
||||
rsync -av --exclude=.git ./l10n/$langId/ $browser_locales/$langId/
|
||||
}
|
||||
|
||||
LANG=$1
|
||||
echo "Copying language pack for $LANG"
|
||||
copy_browser_locales $LANG
|
||||
78
scripts/copy_language_pack.py
Normal file
78
scripts/copy_language_pack.py
Normal file
@@ -0,0 +1,78 @@
|
||||
import os
|
||||
import shutil
|
||||
import sys
|
||||
|
||||
# Define the path for browser locales
|
||||
BROWSER_LOCALES = "engine/browser/locales"
|
||||
|
||||
|
||||
def copy_browser_locales(lang_id: str):
|
||||
"""
|
||||
Copies language pack files to the specified browser locale directory.
|
||||
|
||||
:param lang_id: Language identifier (e.g., 'en-US', 'fr', etc.)
|
||||
"""
|
||||
lang_path = os.path.join(BROWSER_LOCALES, lang_id)
|
||||
|
||||
# Create the directory for the language pack if it doesn't exist
|
||||
os.makedirs(lang_path, exist_ok=True)
|
||||
print(f"Creating directory: {lang_path}")
|
||||
|
||||
# If the language is 'en-US', handle special processing
|
||||
if lang_id == "en-US":
|
||||
# Remove files starting with "zen" in the 'en-US' directory
|
||||
for root, _, files in os.walk(lang_path):
|
||||
for file in files:
|
||||
if file.startswith("zen"):
|
||||
os.remove(os.path.join(root, file))
|
||||
|
||||
# Copy files from the source directory
|
||||
source_path = "./l10n/en-US/browser/"
|
||||
copy_files(source_path, lang_path)
|
||||
return
|
||||
|
||||
# For other languages, delete the existing directory and copy files anew
|
||||
if os.path.exists(lang_path):
|
||||
shutil.rmtree(lang_path) # Remove existing directory
|
||||
|
||||
source_path = f"./l10n/{lang_id}/"
|
||||
copy_files(source_path, lang_path)
|
||||
|
||||
|
||||
def copy_files(source: str, destination: str):
|
||||
"""
|
||||
Copies files and directories from the source to the destination.
|
||||
|
||||
:param source: Source directory path
|
||||
:param destination: Destination directory path
|
||||
"""
|
||||
if not os.path.exists(source):
|
||||
raise FileNotFoundError(f"Source path '{source}' does not exist.")
|
||||
|
||||
# Recursively copy all files and directories
|
||||
for root, dirs, files in os.walk(source):
|
||||
# Determine relative path to preserve directory structure
|
||||
relative_path = os.path.relpath(root, source)
|
||||
destination_root = os.path.join(destination, relative_path)
|
||||
os.makedirs(destination_root, exist_ok=True)
|
||||
|
||||
# Copy files
|
||||
for file in files:
|
||||
src_file = os.path.join(root, file)
|
||||
dest_file = os.path.join(destination_root, file)
|
||||
print(f"\tCopying {src_file} to {dest_file}")
|
||||
shutil.copy2(src_file, dest_file) # Copy file with metadata
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) != 2:
|
||||
print("Usage: python script.py <LANG>")
|
||||
sys.exit(1)
|
||||
|
||||
lang = sys.argv[1]
|
||||
print(f"Copying language pack for {lang}")
|
||||
try:
|
||||
copy_browser_locales(lang)
|
||||
except Exception as e:
|
||||
print(f"Error: {e}")
|
||||
sys.exit(1)
|
||||
@@ -31,9 +31,9 @@ cd $CURRENT_DIR
|
||||
|
||||
# Move all the files to the correct location
|
||||
|
||||
sh scripts/copy-language-pack.sh en-US
|
||||
python3 scripts/copy_language_pack.py en-US
|
||||
for lang in $(cat ./l10n/supported-languages); do
|
||||
sh scripts/copy-language-pack.sh $lang
|
||||
python3 scripts/copy_language_pack.py $lang
|
||||
done
|
||||
|
||||
wait
|
||||
|
||||
@@ -1,52 +1,75 @@
|
||||
import hashlib
|
||||
import argparse
|
||||
import sys
|
||||
import os
|
||||
|
||||
FLATID = "io.github.zen_browser.zen"
|
||||
FLATID = "app.zen_browser.zen"
|
||||
|
||||
def get_sha256sum(filename):
|
||||
"""Calculate the SHA256 checksum of a file."""
|
||||
sha256 = hashlib.sha256()
|
||||
|
||||
def get_sha256sum(filename):
|
||||
"""Calculate the SHA256 checksum of a file."""
|
||||
sha256 = hashlib.sha256()
|
||||
try:
|
||||
with open(filename, "rb") as f:
|
||||
for byte_block in iter(lambda: f.read(4096), b""):
|
||||
sha256.update(byte_block)
|
||||
return sha256.hexdigest()
|
||||
for byte_block in iter(lambda: f.read(4096), b""):
|
||||
sha256.update(byte_block)
|
||||
except FileNotFoundError:
|
||||
print(f"File {filename} not found.")
|
||||
sys.exit(1)
|
||||
return sha256.hexdigest()
|
||||
|
||||
|
||||
def build_template(template, linux_sha256, flatpak_sha256, version, linux_aarch64_sha256):
|
||||
"""Build the template with the provided hashes and version."""
|
||||
print(f"Building template with version {version}")
|
||||
print(f"\tLinux archive sha256: {linux_sha256}")
|
||||
print(f"\tLinux aarch64 archive sha256: {linux_aarch64_sha256}")
|
||||
print(f"\tFlatpak archive sha256: {flatpak_sha256}")
|
||||
return template.format(linux_sha256=linux_sha256,
|
||||
flatpak_sha256=flatpak_sha256,
|
||||
version=version,
|
||||
linux_aarch64_sha256=linux_aarch64_sha256)
|
||||
|
||||
def build_template(template, linux_sha256, flatpak_sha256, version):
|
||||
print(f"Building template with version {version}")
|
||||
print(f"\tLinux archive sha256: {linux_sha256}")
|
||||
print(f"\tFlatpak archive sha256: {flatpak_sha256}")
|
||||
return template.format(linux_sha256=linux_sha256,
|
||||
flatpak_sha256=flatpak_sha256,
|
||||
version=version)
|
||||
|
||||
def get_template(template_root):
|
||||
file = f"{template_root}/{FLATID}.yml.template"
|
||||
print(f"Reading template {file}")
|
||||
try:
|
||||
with open(file, "r") as f:
|
||||
return f.read()
|
||||
except FileNotFoundError:
|
||||
print(f"Template {file} not found")
|
||||
sys.exit(1)
|
||||
"""Get the template content from the specified root directory."""
|
||||
file = os.path.join(template_root, f"{FLATID}.yml.template")
|
||||
print(f"Reading template {file}")
|
||||
try:
|
||||
with open(file, "r") as f:
|
||||
return f.read()
|
||||
except FileNotFoundError:
|
||||
print(f"Template {file} not found.")
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description='Prepare flatpak release')
|
||||
parser.add_argument('--version', help='Version of the release', required=True)
|
||||
parser.add_argument('--linux-archive', help='Linux archive', required=True)
|
||||
parser.add_argument('--flatpak-archive', help='Flatpak archive', required=True)
|
||||
parser.add_argument('--output', help='Output file', default=f"{FLATID}.yml")
|
||||
parser.add_argument('--template-root', help='Template root', default="flatpak")
|
||||
args = parser.parse_args()
|
||||
"""Main function to parse arguments and process files."""
|
||||
parser = argparse.ArgumentParser(description="Prepare flatpak release")
|
||||
parser.add_argument("--version",
|
||||
help="Version of the release",
|
||||
required=True)
|
||||
parser.add_argument("--linux-archive", help="Linux archive", required=True)
|
||||
parser.add_argument("--linux-aarch64-archive", help="Linux aarch64 archive", required=True)
|
||||
parser.add_argument("--flatpak-archive",
|
||||
help="Flatpak archive",
|
||||
required=True)
|
||||
parser.add_argument("--output", help="Output file", default=f"{FLATID}.yml")
|
||||
parser.add_argument("--template-root",
|
||||
help="Template root",
|
||||
default="flatpak")
|
||||
args = parser.parse_args()
|
||||
|
||||
linux_sha256 = get_sha256sum(args.linux_archive)
|
||||
flatpak_sha256 = get_sha256sum(args.flatpak_archive)
|
||||
template = build_template(get_template(args.template_root), linux_sha256, flatpak_sha256, args.version)
|
||||
linux_sha256 = get_sha256sum(args.linux_archive)
|
||||
linux_aarch64_sha256 = get_sha256sum(args.linux_aarch64_archive)
|
||||
flatpak_sha256 = get_sha256sum(args.flatpak_archive)
|
||||
template = build_template(get_template(args.template_root), linux_sha256,
|
||||
flatpak_sha256, args.version, linux_aarch64_sha256)
|
||||
|
||||
print(f"Writing output to {args.output}")
|
||||
with open(args.output, "w") as f:
|
||||
f.write(template)
|
||||
|
||||
print(f"Writing output to {args.output}")
|
||||
with open(args.output, "w") as f:
|
||||
f.write(template)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
main()
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
gh_bulk_delete_workflow_runs() {
|
||||
repo=$1
|
||||
local repo=$1
|
||||
|
||||
# Ensure the repo argument is provided
|
||||
if [[ -z "$repo" ]]; then
|
||||
@@ -7,14 +9,37 @@ gh_bulk_delete_workflow_runs() {
|
||||
return 1
|
||||
fi
|
||||
|
||||
runs=$(gh api repos/$repo/actions/runs --paginate | jq -r '.workflow_runs[] | select(.conclusion == "cancelled" or .conclusion == "failure" or .conclusion == "timed_out") | .id')
|
||||
# Fetch workflow runs that are cancelled, failed, or timed out
|
||||
local runs
|
||||
runs=$(gh api repos/$repo/actions/runs --paginate \
|
||||
| jq -r '.workflow_runs[] |
|
||||
select(.conclusion == "cancelled" or
|
||||
.conclusion == "failure" or
|
||||
.conclusion == "timed_out") |
|
||||
.id')
|
||||
|
||||
if [[ -z "$runs" ]]; then
|
||||
echo "No workflow runs found for $repo with the specified conclusions."
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Loop through each run and delete it
|
||||
while IFS= read -r run; do
|
||||
echo "Deleting run https://github.com/$repo/actions/runs/$run"
|
||||
gh api -X DELETE repos/$repo/actions/runs/$run --silent
|
||||
echo "Attempting to delete run: https://github.com/$repo/actions/runs/$run"
|
||||
|
||||
# Perform the deletion
|
||||
if gh api -X DELETE repos/$repo/actions/runs/$run --silent; then
|
||||
echo "Successfully deleted run: $run"
|
||||
else
|
||||
echo "Error deleting run: $run" >&2
|
||||
fi
|
||||
|
||||
# Optional delay to avoid hitting API rate limits
|
||||
sleep 1
|
||||
done <<< "$runs"
|
||||
|
||||
echo "All workflow runs for $repo have been deleted."
|
||||
echo "Completed deletion process for workflow runs in $repo."
|
||||
}
|
||||
|
||||
gh_bulk_delete_workflow_runs $1
|
||||
# Execute the function with the provided argument
|
||||
gh_bulk_delete_workflow_runs "$1"
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
sh ./scripts/copy-language-pack.sh en-US
|
||||
4
scripts/update_en_US_packs.py
Normal file
4
scripts/update_en_US_packs.py
Normal file
@@ -0,0 +1,4 @@
|
||||
from copy_language_pack import copy_browser_locales
|
||||
|
||||
if __name__ == "__main__":
|
||||
copy_browser_locales("en-US")
|
||||
@@ -1,37 +1,80 @@
|
||||
|
||||
import os
|
||||
import json
|
||||
import argparse
|
||||
import shutil
|
||||
|
||||
last_version = "0.0.0"
|
||||
new_version = "0.0.0"
|
||||
from check_rc_response import get_rc_response, rc_should_be_updated
|
||||
|
||||
def update_ff():
|
||||
os.system("npm run update-ff:raw")
|
||||
|
||||
def get_version_before():
|
||||
global last_version
|
||||
with open("surfer.json", "r") as f:
|
||||
data = json.load(f)
|
||||
last_version = data["version"]["version"]
|
||||
def update_rc(last_version: str):
|
||||
rc_version = get_rc_response()
|
||||
if rc_should_be_updated(rc_version, last_version):
|
||||
print(f"New Firefox RC version is available: {rc_version}")
|
||||
print("Removing engine directory and updating surfer.json.")
|
||||
if os.path.exists("engine"):
|
||||
shutil.rmtree("engine")
|
||||
with open("surfer.json", "r") as f:
|
||||
data = json.load(f)
|
||||
with open("surfer.json", "w") as f:
|
||||
data["version"]["candidate"] = rc_version
|
||||
json.dump(data, f, indent=2)
|
||||
print("Download the new engine by running 'pnpm download'.")
|
||||
os.system("pnpm download")
|
||||
else:
|
||||
print("No new Firefox RC version available.")
|
||||
|
||||
def get_version_after():
|
||||
global new_version
|
||||
with open("surfer.json", "r") as f:
|
||||
data = json.load(f)
|
||||
new_version = data["version"]["version"]
|
||||
|
||||
def update_readme():
|
||||
global last_version
|
||||
global new_version
|
||||
with open("README.md", "r") as f:
|
||||
data = f.read()
|
||||
data = data.replace(last_version, new_version)
|
||||
with open("README.md", "w") as f:
|
||||
f.write(data)
|
||||
def update_ff(is_rc: bool = False, last_version: str = ""):
|
||||
"""Runs the npm command to update the 'ff' component."""
|
||||
if is_rc:
|
||||
return update_rc(last_version)
|
||||
result = os.system("pnpm update-ff:raw")
|
||||
if result != 0:
|
||||
raise RuntimeError("Failed to update 'ff' component.")
|
||||
|
||||
|
||||
def get_version_from_file(filename, is_rc):
|
||||
"""Retrieves the version from the specified JSON file."""
|
||||
try:
|
||||
with open(filename, "r") as f:
|
||||
data = json.load(f)
|
||||
return data["version"]["version"] if not is_rc else data["version"]["candidate"]
|
||||
except (FileNotFoundError, json.JSONDecodeError) as e:
|
||||
raise RuntimeError(f"Error reading version from {filename}: {e}")
|
||||
|
||||
|
||||
def update_readme(last_version, new_version, is_rc=False):
|
||||
"""Updates the README.md file to reflect the new version."""
|
||||
prefix = "RC " if is_rc else "`"
|
||||
try:
|
||||
with open("README.md", "r") as f:
|
||||
data = f.read()
|
||||
updated_data = data.replace(prefix + last_version, prefix + new_version)
|
||||
|
||||
with open("README.md", "w") as f:
|
||||
f.write(updated_data)
|
||||
except FileNotFoundError as e:
|
||||
raise RuntimeError(f"README.md file not found: {e}")
|
||||
|
||||
|
||||
def main():
|
||||
"""Main function to update versions and README."""
|
||||
|
||||
arg_parser = argparse.ArgumentParser()
|
||||
arg_parser.add_argument(
|
||||
"--rc", help="Indicates that this is a release candidate.", default=False, action="store_true")
|
||||
args = arg_parser.parse_args()
|
||||
|
||||
try:
|
||||
last_version = get_version_from_file("surfer.json", args.rc)
|
||||
update_ff(args.rc, last_version)
|
||||
new_version = get_version_from_file("surfer.json", args.rc)
|
||||
update_readme(last_version, new_version, args.rc)
|
||||
print(
|
||||
f"Updated version from {last_version} to {new_version} in README.md.")
|
||||
except Exception as e:
|
||||
print(f"An error occurred: {e}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
get_version_before()
|
||||
update_ff()
|
||||
get_version_after()
|
||||
update_readme()
|
||||
print("Updated from version {} to version {}".format(last_version, new_version))
|
||||
main()
|
||||
|
||||
@@ -1,9 +1,41 @@
|
||||
import os
|
||||
import subprocess
|
||||
import logging
|
||||
|
||||
# Set up logging
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
|
||||
# Constants for paths
|
||||
NEW_TAB_DIR = "./engine/browser/components/newtab"
|
||||
ENGINE_DIR = "./engine"
|
||||
NPM_INSTALL_COMMANDS = ["npm install", "npm install meow@9.0.0"]
|
||||
BUNDLE_COMMAND = "npm run bundle --prefix=browser/components/newtab"
|
||||
|
||||
|
||||
def install_dependencies():
|
||||
"""Install necessary npm packages for the newtab component."""
|
||||
for command in NPM_INSTALL_COMMANDS:
|
||||
logging.info(f"Running command: {command} in {NEW_TAB_DIR}")
|
||||
subprocess.run(command.split(), cwd=NEW_TAB_DIR, check=True)
|
||||
|
||||
|
||||
def bundle_newtab_components():
|
||||
"""Bundle the newtab components."""
|
||||
logging.info(f"Bundling newtab components in {ENGINE_DIR}")
|
||||
subprocess.run(BUNDLE_COMMAND.split(), cwd=ENGINE_DIR, check=True)
|
||||
|
||||
|
||||
def update_newtab(init: bool = True):
|
||||
if init:
|
||||
os.system("(cd ./engine/browser/components/newtab && ../../../mach npm install && ../../../mach npm install meow@9.0.0)")
|
||||
os.system("cd ./engine && ./mach npm run bundle --prefix=browser/components/newtab")
|
||||
"""Update the newtab components, optionally initializing dependencies."""
|
||||
try:
|
||||
if init:
|
||||
install_dependencies()
|
||||
|
||||
bundle_newtab_components()
|
||||
except subprocess.CalledProcessError as e:
|
||||
logging.error(f"An error occurred: {e}")
|
||||
raise
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
update_newtab(False)
|
||||
update_newtab(init=False)
|
||||
|
||||
@@ -85,6 +85,7 @@ pref('zen.theme.accent-color', "#ffb787");
|
||||
pref('zen.theme.content-element-separation', 6); // In pixels
|
||||
pref('zen.theme.pill-button', false);
|
||||
pref('zen.theme.gradient', true);
|
||||
pref('zen.theme.essentials-favicon-bg', true);
|
||||
|
||||
pref('zen.tabs.show-newtab-vertical', true);
|
||||
pref('zen.view.show-newtab-button-border-top', true);
|
||||
@@ -187,7 +188,7 @@ pref('zen.splitView.change-on-hover', false);
|
||||
pref('zen.splitView.rearrange-hover-size', 24);
|
||||
|
||||
// Startup flags
|
||||
pref('zen.startup.smooth-scroll-in-tabs', true);
|
||||
pref('zen.startup.smooth-scroll-in-tabs', false);
|
||||
|
||||
// Zen Workspaces
|
||||
pref('zen.workspaces.disabled_for_testing', false);
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import { AppConstants } from 'resource://gre/modules/AppConstants.sys.mjs';
|
||||
|
||||
export var ZenCustomizableUI = new (class {
|
||||
constructor() {}
|
||||
|
||||
@@ -9,7 +11,7 @@ export var ZenCustomizableUI = new (class {
|
||||
'zen-sidebar-top-buttons',
|
||||
{
|
||||
type: this.TYPE_TOOLBAR,
|
||||
defaultPlacements: ['zen-sidepanel-button'],
|
||||
defaultPlacements: AppConstants.platform === 'macosx' ? [] : ['zen-sidepanel-button'],
|
||||
defaultCollapsed: null,
|
||||
},
|
||||
true
|
||||
|
||||
@@ -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')
|
||||
);
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -9,12 +9,14 @@ JAR_ENTRY_TEMPLATE = "\tcontent/browser/zen-avatars/{0}\t(content/zen-avatars/{0
|
||||
URL = "https://source.boringavatars.com/bauhaus/120/${}?colors={}"
|
||||
|
||||
COLORS = {
|
||||
"dark": ["DDDDDD", "5E9188", "3E5954", "253342", "232226"],
|
||||
"light": ["9D9382", "FFC1B2", "FFDBC8", "FFF6C7", "DCD7C2"]
|
||||
"dark": ["DDDDDD", "5E9188", "3E5954", "253342", "232226"],
|
||||
"light": ["9D9382", "FFC1B2", "FFDBC8", "FFF6C7", "DCD7C2"],
|
||||
}
|
||||
|
||||
|
||||
def random_string(length):
|
||||
return ''.join(random.choices("abcdefghijklmnopqrstuvwxyz", k=length))
|
||||
return "".join(random.choices("abcdefghijklmnopqrstuvwxyz", k=length))
|
||||
|
||||
|
||||
def generate_list_names():
|
||||
names = []
|
||||
@@ -22,9 +24,11 @@ def generate_list_names():
|
||||
names.append(random_string(random.randint(5, 10)))
|
||||
return names
|
||||
|
||||
|
||||
def write_jar_file(jar_file):
|
||||
with open("jar.inc.mn", "w") as f:
|
||||
f.write(jar_file)
|
||||
f.write(jar_file)
|
||||
|
||||
|
||||
def fetch_all_avatars():
|
||||
names = generate_list_names()
|
||||
@@ -36,15 +40,19 @@ def fetch_all_avatars():
|
||||
with open(f"avatar-{i}-{theme}.svg", "w") as f:
|
||||
f.write(response.text)
|
||||
jar_file += JAR_ENTRY_TEMPLATE.format(f"avatar-{i}-{theme}.svg") + "\n"
|
||||
print(f"SUCCESS: Fetched 'avatar-{i}-{theme}.svg' for name '{name}' with theme '{theme}'")
|
||||
print(
|
||||
f"SUCCESS: Fetched 'avatar-{i}-{theme}.svg' for name '{name}' with theme '{theme}'"
|
||||
)
|
||||
write_jar_file(jar_file)
|
||||
|
||||
|
||||
def clear_all_avatars():
|
||||
for file in os.listdir():
|
||||
if file.startswith("avatar-") and file.endswith(".svg"):
|
||||
os.remove(file)
|
||||
print(f"SUCCESS: Removed '{file}'")
|
||||
|
||||
|
||||
def main():
|
||||
if not os.getcwd().endswith("zen-avatars"):
|
||||
print("ERROR: Please run this script from the 'zen-avatars' directory")
|
||||
@@ -52,5 +60,6 @@ def main():
|
||||
clear_all_avatars()
|
||||
fetch_all_avatars()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
@@ -100,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);
|
||||
@@ -274,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 */
|
||||
|
||||
@@ -6,7 +6,15 @@
|
||||
:root:not([inDOMFullscreen='true']):not([chromehidden~='location']):not([chromehidden~='toolbar']) {
|
||||
& #tabbrowser-tabbox #tabbrowser-tabpanels .browserSidebarContainer {
|
||||
width: -moz-available;
|
||||
border-radius: var(--zen-webview-border-radius, var(--zen-border-radius));
|
||||
--zen-native-content-radius: env(-moz-gtk-csd-titlebar-radius, var(--zen-border-radius));
|
||||
border-radius: var(
|
||||
--zen-webview-border-radius,
|
||||
/* Inner radius calculation:
|
||||
* 1. If the native radius - the separation is less than 4px, use 4px.
|
||||
* 2. Otherwise, use the the calculated value (inner radius = outer radius - separation).
|
||||
*/
|
||||
max(4px, calc(var(--zen-native-content-radius) - var(--zen-element-separation)))
|
||||
);
|
||||
position: relative;
|
||||
|
||||
/* For glance */
|
||||
@@ -22,7 +30,7 @@
|
||||
|
||||
: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));
|
||||
box-shadow: 0 0 1px 1px light-dark(rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.3));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -56,20 +56,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
@media (-moz-windows-accent-color-in-titlebar) {
|
||||
background-color: ActiveCaption;
|
||||
color: CaptionText;
|
||||
transition: background-color var(--inactive-window-transition);
|
||||
&:-moz-window-inactive {
|
||||
background-color: InactiveCaption;
|
||||
color: InactiveCaptionText;
|
||||
}
|
||||
&::after {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
@media (not (-moz-windows-accent-color-in-titlebar)) and (not (-moz-windows-mica)) and (-moz-bool-pref: 'zen.view.grey-out-inactive-windows') {
|
||||
@media (not (-moz-windows-mica)) and (-moz-bool-pref: 'zen.view.grey-out-inactive-windows') {
|
||||
transition: color var(--inactive-window-transition);
|
||||
&:-moz-window-inactive {
|
||||
color: var(--toolbox-textcolor-inactive);
|
||||
@@ -111,6 +98,11 @@
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
#nav-bar {
|
||||
/* For some reason, firefox adds a really small border to the top of the nav-bar */
|
||||
border-top: none !important;
|
||||
}
|
||||
|
||||
#zen-main-app-wrapper {
|
||||
background: transparent;
|
||||
overflow: hidden;
|
||||
@@ -118,6 +110,16 @@
|
||||
& > * {
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
@media (-moz-windows-accent-color-in-titlebar) and (-moz-windows-mica) {
|
||||
background-color: ActiveCaption;
|
||||
color: CaptionText;
|
||||
transition: background-color var(--inactive-window-transition);
|
||||
&:-moz-window-inactive {
|
||||
background-color: InactiveCaption;
|
||||
color: InactiveCaptionText;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#zen-appcontent-wrapper {
|
||||
@@ -141,7 +143,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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -65,10 +65,7 @@
|
||||
}
|
||||
|
||||
#browser {
|
||||
--zen-toolbox-padding: calc(var(--zen-element-separation) / 1.5);
|
||||
:root[zen-no-padding='true'] & {
|
||||
--zen-toolbox-padding: 4px;
|
||||
}
|
||||
--zen-toolbox-padding: max(4px, calc(var(--zen-element-separation) / 1.5));
|
||||
}
|
||||
|
||||
:root[zen-single-toolbar='true'] {
|
||||
@@ -223,6 +220,7 @@
|
||||
#tabbrowser-tabs {
|
||||
margin-inline-start: 0 !important;
|
||||
padding-inline-start: 0 !important;
|
||||
overflow-x: hidden;
|
||||
|
||||
--tab-inner-inline-margin: 0;
|
||||
|
||||
@@ -242,23 +240,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;
|
||||
}
|
||||
@@ -460,7 +441,7 @@
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
&:not([zen-right-side='true']):not([zen-user-hover='true']) {
|
||||
&:not([zen-right-side='true']) {
|
||||
padding-right: 0;
|
||||
& #titlebar {
|
||||
padding-left: var(--zen-toolbox-padding);
|
||||
@@ -963,6 +944,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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -360,6 +360,7 @@ button.popup-notification-dropmarker {
|
||||
}
|
||||
|
||||
#urlbar[open] {
|
||||
z-index: 2;
|
||||
--urlbar-margin-inline: 5px !important;
|
||||
|
||||
& #identity-box {
|
||||
|
||||
@@ -474,6 +474,10 @@
|
||||
max-width: calc(100% - var(--zen-toolbox-padding) * 4);
|
||||
}
|
||||
|
||||
& #zen-current-workspace-indicator-icon {
|
||||
min-height: 16px;
|
||||
}
|
||||
|
||||
& #zen-current-workspace-indicator-icon:not([hidden]) + #zen-current-workspace-indicator-name {
|
||||
padding-left: 24px;
|
||||
}
|
||||
|
||||
7
src/browser/base/content/zen-vendor/motion.min.mjs
Normal file
7
src/browser/base/content/zen-vendor/motion.min.mjs
Normal file
File diff suppressed because one or more lines are too long
@@ -274,6 +274,7 @@ var gZenCompactModeManager = {
|
||||
{
|
||||
element: this.sidebar,
|
||||
screenEdge: this.sidebarIsOnRight ? 'right' : 'left',
|
||||
keepHoverDuration: 300,
|
||||
},
|
||||
{
|
||||
element: document.getElementById('zen-appcontent-navbar-container'),
|
||||
@@ -335,7 +336,7 @@ var gZenCompactModeManager = {
|
||||
}
|
||||
|
||||
if (this.hoverableElements[i].keepHoverDuration) {
|
||||
this.flashElement(target, keepHoverDuration, 'has-hover' + target.id, 'zen-has-hover');
|
||||
this.flashElement(target, this.hoverableElements[i].keepHoverDuration, 'has-hover' + target.id, 'zen-has-hover');
|
||||
} else {
|
||||
this._removeHoverFrames[target.id] = window.requestAnimationFrame(() => target.removeAttribute('zen-has-hover'));
|
||||
}
|
||||
|
||||
@@ -102,19 +102,36 @@
|
||||
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);
|
||||
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;
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
@@ -286,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');
|
||||
|
||||
@@ -658,7 +658,7 @@
|
||||
setTimeout(() => {
|
||||
// Reactivate the transition after the animation
|
||||
appWrapper.removeAttribute('post-animating');
|
||||
});
|
||||
}, 100);
|
||||
}, 700);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -315,12 +315,7 @@ class KeyShortcut {
|
||||
static parseFromSaved(json) {
|
||||
let rv = [];
|
||||
for (let key of json) {
|
||||
if (this.#shortcutIsValid(key)) {
|
||||
rv.push(this.#parseFromJSON(key));
|
||||
} else {
|
||||
console.warn('[zen CKS]: Invalid shortcut', key['id']);
|
||||
throw new Error('Invalid shortcut found');
|
||||
}
|
||||
rv.push(this.#parseFromJSON(key));
|
||||
}
|
||||
|
||||
return rv;
|
||||
@@ -338,12 +333,6 @@ class KeyShortcut {
|
||||
return 'other';
|
||||
}
|
||||
|
||||
static #shortcutIsValid(shortcut) {
|
||||
// See https://github.com/zen-browser/desktop/issues/4071, some *old* shortcuts dont have
|
||||
// any of `key`, `keycode`, `l10nId`. This fix also allows us to avoid any future issues
|
||||
return !(shortcut['key'] == '' && shortcut['keycode'] == '' && shortcut['l10nId'] == null);
|
||||
}
|
||||
|
||||
static #parseFromJSON(json) {
|
||||
return new KeyShortcut(
|
||||
json['id'],
|
||||
@@ -1071,7 +1060,7 @@ var gZenKeyboardShortcutsManager = {
|
||||
//}
|
||||
|
||||
for (let key of this._currentShortcutList) {
|
||||
if (key.isEmpty() || key.isInternal() || key.isInvalid()) {
|
||||
if (key.isInternal()) {
|
||||
continue;
|
||||
}
|
||||
let child = key.toXHTMLElement(browser);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -391,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) {
|
||||
@@ -415,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;
|
||||
@@ -425,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;
|
||||
@@ -1247,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;
|
||||
}
|
||||
@@ -1255,14 +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;
|
||||
@@ -1272,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);
|
||||
|
||||
@@ -1281,23 +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.tabContainer.removeAttribute('dont-animate-tabs');
|
||||
this._animatingChange = true;
|
||||
setTimeout(() => {
|
||||
this._animatingChange = false;
|
||||
gBrowser.tabContainer.removeAttribute('zen-workspace-animation');
|
||||
}, 600);
|
||||
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];
|
||||
@@ -1524,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;
|
||||
}
|
||||
|
||||
@@ -1663,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() {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/components/places/content/browserPlacesViews.js b/browser/components/places/content/browserPlacesViews.js
|
||||
index 1bfa0af16178c9b42172bc1b1e0249d28ff8e9e6..417a9dc4e55208bdc9c1422a3bae14361a4964c5 100644
|
||||
index 1bfa0af16178c9b42172bc1b1e0249d28ff8e9e6..cefe17335cb7cc1a22182f2e79c564237b9ae5e8 100644
|
||||
--- a/browser/components/places/content/browserPlacesViews.js
|
||||
+++ b/browser/components/places/content/browserPlacesViews.js
|
||||
@@ -330,12 +330,23 @@ class PlacesViewBase {
|
||||
@@ -13,7 +13,7 @@ index 1bfa0af16178c9b42172bc1b1e0249d28ff8e9e6..417a9dc4e55208bdc9c1422a3bae1436
|
||||
+ let child = resultNode.getChild(i);
|
||||
+ // Skip nodes that don't belong in current workspace
|
||||
+ if (PlacesUtils.nodeIsURI(child) || PlacesUtils.containerTypes.includes(child.type)) {
|
||||
+ if (ZenWorkspaces.isBookmarkInAnotherWorkspace(child)) {
|
||||
+ if (typeof ZenWorkspaces !== 'undefined' && ZenWorkspaces.isBookmarkInAnotherWorkspace(child)) {
|
||||
+ continue;
|
||||
+ }
|
||||
+ }
|
||||
@@ -52,7 +52,7 @@ index 1bfa0af16178c9b42172bc1b1e0249d28ff8e9e6..417a9dc4e55208bdc9c1422a3bae1436
|
||||
+ for (let i = 0; i < cc; i++) {
|
||||
+ let child = this._resultNode.getChild(i);
|
||||
+ if (PlacesUtils.nodeIsURI(child) || PlacesUtils.containerTypes.includes(child.type)) {
|
||||
+ if (!ZenWorkspaces.isBookmarkInAnotherWorkspace(child)) {
|
||||
+ if (!(typeof ZenWorkspaces !== 'undefined' && ZenWorkspaces.isBookmarkInAnotherWorkspace(child))) {
|
||||
+ visibleNodes.push(child);
|
||||
+ }
|
||||
+ } else {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/browser/themes/linux/browser.css b/browser/themes/linux/browser.css
|
||||
index a9276a678f16a67e2a003474203c37cb5c9300ad..892c69950d2a695b890fec9f8ea3f6e64032fe25 100644
|
||||
index a9276a678f16a67e2a003474203c37cb5c9300ad..20cb1b022f7a94ad553f5e6df48014ee646f93ed 100644
|
||||
--- a/browser/themes/linux/browser.css
|
||||
+++ b/browser/themes/linux/browser.css
|
||||
@@ -42,15 +42,17 @@
|
||||
@@ -42,21 +42,25 @@
|
||||
-moz-default-appearance: -moz-window-decorations;
|
||||
appearance: auto;
|
||||
|
||||
@@ -23,3 +23,12 @@ index a9276a678f16a67e2a003474203c37cb5c9300ad..892c69950d2a695b890fec9f8ea3f6e6
|
||||
/* The body clip below covers this. */
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
body,
|
||||
- dialog::backdrop {
|
||||
+ dialog::backdrop,
|
||||
+ #browser::after,
|
||||
+ #browser::before {
|
||||
/* Use an uniform clip to allow WebRender to optimize it better */
|
||||
border-radius: env(-moz-gtk-csd-titlebar-radius);
|
||||
}
|
||||
|
||||
10
surfer.json
10
surfer.json
@@ -5,8 +5,8 @@
|
||||
"binaryName": "zen",
|
||||
"version": {
|
||||
"product": "firefox",
|
||||
"version": "134.0",
|
||||
"candidate": "134.0"
|
||||
"version": "134.0.1",
|
||||
"candidate": "134.0.1"
|
||||
},
|
||||
"buildOptions": {
|
||||
"generateBranding": true
|
||||
@@ -19,7 +19,7 @@
|
||||
"brandShortName": "Zen",
|
||||
"brandFullName": "Zen Browser",
|
||||
"release": {
|
||||
"displayVersion": "1.6b",
|
||||
"displayVersion": "1.7b",
|
||||
"github": {
|
||||
"repo": "zen-browser/desktop"
|
||||
},
|
||||
@@ -47,7 +47,9 @@
|
||||
}
|
||||
},
|
||||
"license": {
|
||||
"ignoredFiles": [".*\\.json"],
|
||||
"ignoredFiles": [
|
||||
".*\\.json"
|
||||
],
|
||||
"licenseType": "MPL-2.0"
|
||||
},
|
||||
"updateHostname": "updates.zen-browser.app"
|
||||
|
||||
Reference in New Issue
Block a user