Compare commits

...

145 Commits

Author SHA1 Message Date
mauro 🤙
4e6418c83e Actualizar windows_mozconfig 2024-07-16 11:13:25 +02:00
mauro 🤙
0e17cb9c50 Actualizar mozconfig 2024-07-16 11:13:05 +02:00
mauro 🤙
ecf5c6af38 Actualizar mozconfig 2024-07-16 11:12:47 +02:00
mauro 🤙
afe8438958 chore: Remove enable-clang-plugin option from mozconfig 2024-07-16 08:49:37 +00:00
mauro 🤙
360baa1553 Update branding in MacOSInstaller.svg 2024-07-16 08:48:36 +00:00
mauro 🤙
a34675379b chore: Remove linker option from mozconfig 2024-07-16 08:46:28 +00:00
mauro 🤙
215e2f10a9 chore: Remove enable-rust-si option from mozconfig 2024-07-16 08:37:21 +00:00
mauro 🤙
ca9b6525a2 chore: Update mozconfig to fix target option for Windows build 2024-07-16 08:29:25 +00:00
mauro 🤙
47cddef5de chore: Remove disable-maintenance-service option from mozconfig 2024-07-16 08:28:19 +00:00
mauro 🤙
bbedfd50a5 chore: Update mozconfig to enable LTO and remove unused options 2024-07-16 08:18:32 +00:00
mauro 🤙
6f60d2ff48 Merge pull request #63 from thisisarnabdas/patch-1
Fixed the license link
2024-07-16 09:08:10 +02:00
ARNAB DAS
0f76e65372 Update README.md 2024-07-16 01:30:50 +00:00
mauro 🤙
d83f189a63 chore: Update MPL LICENSE link in README.md 2024-07-15 21:57:48 +00:00
Mauro Balades
f1d4b27c58 chore: Update privacy preferences and disable telemetry 2024-07-15 03:25:12 +02:00
Mauro Balades
f2ace58825 chore: Update mozconfig to enable LTO and remove unused options 2024-07-15 03:19:11 +02:00
Mauro Balades
fe74d96914 chore: Enable workspaces by default 2024-07-15 02:57:18 +02:00
Mauro Balades
379232e94a chore: Update mozconfig to enable LTO and remove unused options 2024-07-15 01:59:27 +02:00
Mauro Balades
7e74d75612 chore: Update mozconfig to enable LTO and remove unused options 2024-07-15 01:48:55 +02:00
Mauro Balades
ac92f251bc chore: Enable LTO and remove unused options in mozconfig 2024-07-15 01:29:40 +02:00
Mauro Balades
42711a079b Added test LTO flags 2024-07-15 01:09:25 +02:00
mauro-balades
373937ea0c 🔖 Update version to 1.0.0-a.4 2024-07-14 15:08:34 +00:00
Mauro Balades
285a8de152 Refactor CSS selectors for open elements in navbar and toolbox 2024-07-14 17:07:28 +02:00
mauro-balades
11da1bf9ba 🔖 Update version to 1.0.0-a.4 2024-07-14 14:59:56 +00:00
Mauro Balades
bcb3a88d16 Refactor CSS selectors for open elements in navbar and toolbox 2024-07-14 16:58:30 +02:00
mauro-balades
092fc77fb0 🔖 Update version to 1.0.0-a.4 2024-07-14 14:54:22 +00:00
Mauro Balades
9e2cd65560 Disable workspaces by default for now 2024-07-14 16:53:31 +02:00
Mauro Balades
f8fbc79f35 Add default icon for tabs with no icon 2024-07-14 16:43:20 +02:00
Mauro Balades
577c57ba87 Refactor tab styling and layout for pinned tabs 2024-07-14 16:37:57 +02:00
Mauro Balades
0d28e86fea God, I shoud've had never created compact mode 2024-07-14 15:41:13 +02:00
Mauro Balades
41862e5d39 feat: Add link to latest release notes in README.md 2024-07-14 01:13:35 +02:00
mauro-balades
5559d1375c 🔖 Update version to 1.0.0-a.3 2024-07-13 22:59:04 +00:00
Mauro Balades
9907722feb chore: Enable Zen Workspaces functionality and set default workspace to "Default Workspace" 2024-07-14 00:58:08 +02:00
Mauro Balades
4b706ff33a Fixed subwindows not displaying correctly (closes #54) 2024-07-14 00:48:20 +02:00
Mauro Balades
52b6eab0d7 Refactor ZenWorkspaces to use _createNewTabForWorkspace method for preparing new workspace 2024-07-14 00:32:35 +02:00
Mauro Balades
8dd9b01048 Refactor ZenWorkspaces to use _createNewTabForWorkspace method for preparing new workspace 2024-07-14 00:31:09 +02:00
Mauro Balades
8521a2d044 chore: Update npm init script to use npm run commands for bootstrap and import 2024-07-13 22:29:33 +02:00
Mauro Balades
7e1c76a1da Refactor ZenWorkspaces to use _createNewTabForWorkspace method for preparing new workspace 2024-07-13 22:09:50 +02:00
Mauro Balades
9a816fe73a Refactor ZenWorkspaces to use _createNewTabForWorkspace method for preparing new workspace 2024-07-13 21:32:07 +02:00
Mauro Balades
b0c036e72b chore: Refactor ZenWorkspaces to use _createNewTabForWorkspace method for preparing new workspace 2024-07-13 21:03:14 +02:00
Mauro Balades
0a34fb4fb0 chore: Add onLocationChange method to ZenWorkspaces 2024-07-13 20:53:46 +02:00
Mauro Balades
aa812d1fea feat: Enable Zen Workspaces functionality 2024-07-13 20:39:44 +02:00
Mauro Balades
c63cfebd4f Started working on workspaces 2024-07-13 17:53:22 +02:00
Mauro Balades
c76492571b chore: Update zen-browser-shared.css to hide tab icon overlay 2024-07-13 13:43:40 +02:00
Mauro Balades
34a40bbf86 chore: Update alpha.yml GitHub workflow to use flatpak-github-actions:gnome-44 container 2024-07-13 12:05:06 +02:00
Mauro Balades
1132c70565 chore: Update if condition in alpha.yml GitHub workflow 2024-07-13 11:50:15 +02:00
Mauro Balades
515a0d4016 chore: Build flatpak repos in GitHub workflow 2024-07-13 10:31:04 +02:00
Mauro Balades
9d6cf0cb6c Fixed pinned tabs and welcome page 2024-07-13 10:00:42 +02:00
mauro-balades
f585ad045b 🔖 Update version to 1.0.0-a.2 2024-07-12 23:09:02 +00:00
Mauro Balades
0b9832dcc2 chore: Add macOS update manifest to alpha workflow 2024-07-13 01:08:29 +02:00
mauro-balades
882a6b87c7 🔖 Update version to 1.0.0-a.2 2024-07-12 21:27:13 +00:00
Mauro Balades
3ff2bcaace chore: Update zen-browser-shared.css to hide tab icon overlay (closes #41) 2024-07-12 23:24:22 +02:00
Mauro Balades
bd0cf2ea86 chore: Update zen-browser-shared.css to round the border radius of browserStack > browser 2024-07-12 23:15:24 +02:00
Mauro Balades
cfee3bf9c3 chore: Update branding names for Firefox Screenshots, Firefox Profiler, Firefox Translations, Firefox Suggest, Firefox Home, and Firefox View 2024-07-12 22:51:07 +02:00
Mauro Balades
fc8c0facdd chore: Update pnpm cache setup in GitHub workflow 2024-07-12 22:48:21 +02:00
Mauro Balades
ad79a7e318 chore: Update runs-on to macos-14 for Mac job, add macos.mar to artifact list, and update mozconfig for Linux build 2024-07-12 21:36:05 +02:00
Mauro Balades
9297fe8f9a chore: Update runs-on to macos-14 for Mac job and bump @zen-browser/surfer to version 1.0.14 2024-07-12 19:43:09 +02:00
Mauro Balades
73b7903839 chore: Update runs-on to macos-14 for Mac job 2024-07-12 19:30:21 +02:00
Mauro Balades
cef86e1b02 chore: Update mozconfig for Linux build 2024-07-12 19:05:48 +02:00
Mauro Balades
a274035159 chore: Set ZEN_RELEASE environment variable for surfer build 2024-07-12 18:53:43 +02:00
Mauro Balades
c57e93ba7b let's try build for macos 2024-07-12 18:18:17 +02:00
mauro-balades
82327db0d2 🔖 Update version to 1.0.0-a.1 2024-07-12 14:11:35 +00:00
mauro 🤙
51f36685e1 chore: Update runs-on to ubuntu-latest for Linux job 2024-07-12 14:10:56 +00:00
mauro 🤙
9b64ee08a2 chore: Update version to 1.0.0-a.0 and enable linker option only when not cross compiling 2024-07-12 14:09:30 +00:00
mauro-balades
a9f02e6120 🔖 Update version to 1.0.0-a.1 2024-07-12 13:55:15 +00:00
mauro 🤙
99dd17560a chore: Update runs-on to warp-ubuntu-latest-x64-16x for Linux job 2024-07-12 13:54:29 +00:00
mauro 🤙
97defffac3 chore: Add warpbuild for Linux builds 2024-07-12 12:58:59 +00:00
mauro-balades
323ac423c9 🔖 Update version to 1.0.0-a.1 2024-07-12 12:47:34 +00:00
mauro 🤙
3c603fea40 chore: Update version to 1.0.0-a.0 and enable linker option only when not cross compiling 2024-07-12 12:46:53 +00:00
mauro-balades
e1183c0ff4 🔖 Update version to 1.0.0-a.1 2024-07-12 08:55:47 +00:00
mauro 🤙
3db9315f82 chore: Update version to 1.0.0-a.0 and fix Windows dependencies in windows_mozconfig 2024-07-12 08:55:19 +00:00
mauro-balades
9ecd4a418d 🔖 Update version to 1.0.0-a.1 2024-07-12 08:41:08 +00:00
mauro 🤙
089ff67a17 chore: Update version to 1.0.0-a.0 and enable linker option only when not cross compiling 2024-07-12 08:40:39 +00:00
mauro-balades
c804ef7149 🔖 Update version to 1.0.0-a.1 2024-07-12 08:26:53 +00:00
mauro 🤙
68e990e762 chore: Update version to 1.0.0-a.0 and enable linker option only when not cross compiling 2024-07-12 08:26:18 +00:00
mauro-balades
f97103ce8b 🔖 Update version to 1.0.0-a.1 2024-07-12 08:16:03 +00:00
mauro 🤙
0cfb6875c5 chore: Enable linker option only when not cross compiling 2024-07-12 08:15:17 +00:00
mauro-balades
cdd67cd79e 🔖 Update version to 1.0.0-a.1 2024-07-12 08:02:45 +00:00
mauro 🤙
c151b41e56 chore: Disable maintenance service in windows_mozconfig and common/mozconfig 2024-07-12 08:02:04 +00:00
mauro-balades
d72c3eae4b 🔖 Update version to 1.0.0-a.1 2024-07-12 07:55:06 +00:00
mauro 🤙
e570ad9b4d chore: Update @zen-browser/surfer dependency to version 1.0.13 2024-07-12 07:54:28 +00:00
mauro-balades
f8ad77c903 🔖 Update version to 1.0.0-a.1 2024-07-12 07:40:59 +00:00
mauro 🤙
cc60b06b7f chore: Update @zen-browser/surfer dependency to version 1.0.12 2024-07-12 07:38:44 +00:00
mauro 🤙
19788deee4 Added optimization flags 2024-07-12 07:38:02 +00:00
mauro-balades
ac5f5e1ad3 🔖 Update version to 1.0.0-a.1 2024-07-12 07:10:15 +00:00
mauro 🤙
d3e1b09b00 merge 2024-07-12 07:08:49 +00:00
mauro 🤙
7c371d295a chore: Update surfer.json displayVersion to 1.0.0-a.0 2024-07-12 07:08:21 +00:00
mauro-balades
fb8ccfed50 🔖 Update version to 0.0.0-a.3 2024-07-11 22:55:21 +00:00
mauro 🤙
b4b7eb554f chore: Update @zen-browser/surfer dependency to version 1.0.11 2024-07-11 22:54:33 +00:00
mauro-balades
cad9436029 🔖 Update version to 0.0.0-a.3 2024-07-11 21:02:14 +00:00
Mauro Balades
7f6dbadc9c chore: Update alpha.yml workflow to fix path for update manifests 2024-07-11 23:01:29 +02:00
mauro-balades
0579b88dc7 🔖 Update version to 0.0.0-a.3 2024-07-11 19:27:24 +00:00
Mauro Balades
18407288ea chore: Update alpha.yml workflow to upload installer stub and update manifests 2024-07-11 21:26:53 +02:00
mauro-balades
42218242e2 🔖 Update version to 0.0.0-a.3 2024-07-11 17:57:33 +00:00
Mauro Balades
7b61419039 chore: Update surfer.json displayVersion to 0.0.0-a.2 2024-07-11 19:57:01 +02:00
Mauro Balades
97da0b2bf0 Merge branch 'main' of https://github.com/zen-browser/core 2024-07-11 19:56:49 +02:00
Mauro Balades
d0ea429401 chore: Update alpha.yml workflow to use new deploy key for SSH authentication 2024-07-11 19:56:23 +02:00
mauro-balades
f30c7e33ec 🔖 Update version to 0.0.0-a.3 2024-07-11 17:51:12 +00:00
Mauro Balades
b300a95854 chore: Update alpha.yml workflow to add SSH key setup and commit update manifests 2024-07-11 19:50:08 +02:00
Mauro Balades
c6632e8dc8 chore: Update transition timing in zen-browser-shared.css 2024-07-11 16:14:04 +02:00
Mauro Balades
3b2ae304d2 Added watermark and springs 2024-07-11 16:08:23 +02:00
mauro-balades
a2afe5b93a 🔖 Update version to 0.0.0-a.3 2024-07-11 13:34:38 +00:00
Mauro Balades
b59174d47d chore: Update alpha.yml workflow to set new remote URL for git push 2024-07-11 15:34:09 +02:00
Mauro Balades
0449a14c19 chore: Update alpha.yml workflow to remove unused artifact upload step 2024-07-11 15:33:39 +02:00
mauro-balades
29b77b7591 🔖 Update version to 0.0.0-a.3 2024-07-11 12:02:08 +00:00
Mauro Balades
718ee7c51a new release! 2024-07-11 14:01:31 +02:00
Mauro Balades
8a3b30e8a6 chore: Update alpha.yml workflow to remove unused artifact upload step 2024-07-11 14:01:09 +02:00
mauro-balades
023a8e26b9 🔖 Update version to 0.0.0-a.3 2024-07-11 11:42:30 +00:00
Mauro Balades
b092d44a7c Refactor ZenSidebarManager and ZenUIManager to improve tab handling 2024-07-11 13:11:49 +02:00
Mauro Balades
79dc54c3f4 chore: Update '@zen-browser/surfer' dependency to version 1.0.9 2024-07-11 11:08:51 +02:00
Mauro Balades
ef99073b06 chore: Update welcome.css to improve line height for h1 element 2024-07-11 10:22:05 +02:00
Mauro Balades
2783fa64d8 chore: Refactor ZenSidebarManager and ZenUIManager to improve tab handling 2024-07-11 09:43:48 +02:00
Mauro Balades
4719e0ce31 chore: Update '@zen-browser/surfer' dependency to version 1.0.8 2024-07-11 01:14:50 +02:00
Mauro Balades
6b0945663a chore: Update alpha.yml workflow to unset SURFER_PLATFORM 2024-07-10 23:21:06 +02:00
Mauro Balades
5cafa401c3 test 2024-07-10 23:09:34 +02:00
Mauro Balades
15b134511b chore: Update path in alpha.yml workflow to fix directory listing issue 2024-07-10 22:26:17 +02:00
Mauro Balades
4270c571ac chore: Update path in alpha.yml workflow to fix directory listing issue 2024-07-10 22:15:08 +02:00
Mauro Balades
f5c9e0d405 chore: Update mozconfig options and dependencies 2024-07-10 22:11:16 +02:00
Mauro Balades
ec9f5f4dfa chore: Update mozconfig options and dependencies 2024-07-10 21:55:21 +02:00
Mauro Balades
4c6f9ef06c chore: Disable wasm sandboxing for the sake of my sanity 2024-07-10 21:43:53 +02:00
Mauro Balades
d087a26af2 chore: Update mozconfig options and dependencies 2024-07-10 21:24:01 +02:00
Mauro Balades
f32ef38823 chore: Remove enable-crashreporter option from mozconfig 2024-07-10 21:12:46 +02:00
Mauro Balades
cf581654ef chore: Update '@zen-browser/surfer' dependency to version 1.0.7 2024-07-10 19:42:58 +02:00
Mauro Balades
62a6573f71 chore: Update '@zen-browser/surfer' dependency to version 1.0.7 2024-07-10 19:03:58 +02:00
Mauro Balades
968bd32ae3 chore: Update '@zen-browser/surfer' dependency to version 1.0.6 2024-07-10 18:45:29 +02:00
Mauro Balades
bc3a1f329e chore: Update '@zen-browser/surfer' dependency to version 1.0.5 2024-07-10 18:29:39 +02:00
Mauro Balades
9fca7074ee chore: Update Firefox version to 128.0! 2024-07-10 18:27:52 +02:00
Mauro Balades
eece97990d chore: Update browser preferences and CSS styles 2024-07-09 17:00:50 +02:00
Mauro Balades
8acae4deb3 Fix settings visibility issue 2024-07-09 14:35:30 +02:00
Mauro Balades
eed3bac755 chore: Update CSS selector for identity icon box in urlbar 2024-07-09 14:07:52 +02:00
Mauro Balades
da89b77e75 chore: Add ZenUIManager script to improve browser functionality 2024-07-08 08:02:33 +02:00
Mauro Balades
a12c433b65 chore: Update panel separator color in shared themes 2024-07-08 07:28:29 +02:00
Mauro Balades
a79197c78d Merge 2024-07-07 09:27:56 +02:00
Mauro Balades
5e8a3df528 Fixed updating manifests 2024-07-07 09:26:34 +02:00
mauro-balades
6a28d0cee9 🔖 Update version to 0.0.0-a.2 2024-07-06 22:48:38 +00:00
mauro 🤙
a73c7fae9e chore: Update update manifests for 0.0.0-a.3 2024-07-06 22:47:44 +00:00
mauro-balades
53a57d8078 🔖 Update version to 0.0.0-a.3 2024-07-06 20:45:55 +00:00
Mauro Balades
a259c40209 chore: Update surfer.json file paths in update_ff.py 2024-07-06 22:45:07 +02:00
Mauro Balades
428eb56cea chore: Update package.json dependencies to use @zen-browser/surfer v1.0.4 2024-07-06 21:45:24 +02:00
mauro-balades
27dca1cc6a 🔖 Update version to 0.0.0-a.2 2024-07-06 18:31:16 +00:00
Mauro Balades
09d90291bf Fixed opening extensions (closes #34) 2024-07-06 20:29:08 +02:00
Mauro Balades
f9cafd7cc0 Temporary fix to opening extensions (#34) and added update server support 2024-07-06 18:49:09 +02:00
Mauro Balades
df1c6af96a chore: Fixed flat resolution on extension icons (#34) 2024-07-06 16:03:21 +02:00
Mauro Balades
a1dbf8f64a Merge branch 'main' of https://github.com/zen-browser/core 2024-07-05 10:04:31 +02:00
Mauro Balades
2268515bb1 Update dot size and color in welcome.css and add color preview in welcome.html 2024-07-05 10:04:23 +02:00
mauro-balades
ecf0164a5a 🔖 Update version to 0.0.0-a.1 2024-07-04 23:15:01 +00:00
85 changed files with 1982 additions and 2832 deletions

View File

@@ -41,37 +41,29 @@ jobs:
run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- uses: actions/cache@v3
name: Setup pnpm cache
with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
- name: Install dependencies
run: pnpm install
- name: Setup gluon
- name: Setup Surfer
run: |
npm i -g gluon-build@next
npm i -g @zen-browser/surfer
- name: Bump version
run: |
pnpm gluon ci --brand alpha --bump prerelease
pnpm surfer ci --brand alpha --bump prerelease
- name: Debug
run: |
gluon get version
gluon get version | xargs
echo "$(gluon get version | xargs)"
surfer get version
surfer get version | xargs
echo "$(surfer get version | xargs)"
- name: Export release date
id: data
shell: bash
run: |
echo "builddate=$(date +"%Y-%m-%d")" >> $GITHUB_OUTPUT
echo "version=$(gluon get version | xargs)" >> $GITHUB_OUTPUT
echo "version=$(surfer get version | xargs)" >> $GITHUB_OUTPUT
- uses: stefanzweifel/git-auto-commit-action@v4
if: ${{ github.event.inputs.update_version == 'true' }}
@@ -101,32 +93,24 @@ jobs:
run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- uses: actions/cache@v3
name: Setup pnpm cache
with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
- name: Install dependencies
run: pnpm install
- name: Setup gluon
- name: Setup surfer
run: |
npm i -g gluon-build@next
npm i -g @zen-browser/surfer
- name: Activate gluon CLI
- name: Activate surfer CLI
run: |
echo "There's a bug in the gluon CLI, we run this so that gluon sets everything up correctly"
pnpm gluon ci --brand alpha --display-version ${{ needs.build-data.outputs.version }}
echo "There's a bug in the surfer CLI, we run this so that surfer sets everything up correctly"
pnpm surfer ci --brand alpha --display-version ${{ needs.build-data.outputs.version }}
- name: Check version
run: |
echo "$(pwd)"
ls .
echo "version=$(pnpm gluon get version | xargs)" >> $GITHUB_OUTPUT
if [[ $(pnpm gluon get version | xargs) == ${{ needs.build-data.outputs.version }} ]]; then
echo "version=$(pnpm surfer get version | xargs)" >> $GITHUB_OUTPUT
if [[ $(pnpm surfer get version | xargs) == ${{ needs.build-data.outputs.version }} ]]; then
echo ">>> Version matches"
else
echo ">>> Version mismatch"
@@ -165,10 +149,6 @@ jobs:
sudo apt-get install 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 libdbus-glib-1-dev libgtk-3-dev libpulse-dev libx11-xcb-dev libxt-dev xvfb lld llvm
pip install pycairo testresources
- name: Disable wasm sandboxing for the sake of my sanity
run: |
echo "ac_add_options --without-wasm-sandboxed-libraries" >> mozconfig
- name: Free up space
run: |
sudo rm -rf /usr/share/dotnet
@@ -203,25 +183,17 @@ jobs:
run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- uses: actions/cache@v3
name: Setup pnpm cache
with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
- name: Install dependencies
run: pnpm install
- name: Load gluon CI setup
run: pnpm gluon ci --brand alpha --display-version ${{ needs.build-data.outputs.version }}
- name: Load surfer CI setup
run: pnpm surfer ci --brand alpha --display-version ${{ needs.build-data.outputs.version }}
- name: Download firefox source and dependencies
run: pnpm gluon download
run: pnpm surfer download
- name: Import
run: pnpm gluon import
run: pnpm surfer import
- name: Bootstrap
run: |
@@ -230,7 +202,9 @@ jobs:
cd ..
- name: Build
run: pnpm build
run: |
export ZEN_RELEASE=1
pnpm build
- name: Package
run: pnpm package
@@ -288,16 +262,11 @@ jobs:
run: |
pnpm i
- name: Load gluon CI setup
run: pnpm gluon ci --brand alpha --display-version ${{ needs.build-data.outputs.version }}
- name: Load surfer CI setup
run: pnpm surfer ci --brand alpha --display-version ${{ needs.build-data.outputs.version }}
- name: Download
run: pnpm gluon download
- name: Disable wasm sandboxing for the sake of my sanity
run: |
cd engine/
echo "ac_add_options --without-wasm-sandboxed-libraries" >> mozconfig
run: pnpm surfer download
- name: Free up space
run: |
@@ -327,14 +296,16 @@ jobs:
cd ..
npm install -g pnpm
pnpm gluon bootstrap
export SURFER_PLATFORM="win32"
pnpm surfer bootstrap
cd engine/
ls ~/.mozbuild/clang/lib/clang/
echo "export LIB=\"$(cd ~/.mozbuild/clang/lib/clang/* && cd lib/windows && pwd)\"" >> ../configs/common/mozconfig
cat ../configs/common/mozconfig
ls ~/win-cross/nsis || true
ls ~/win-cross/wine || true
ls ~/win-cross/vs2022 || true
- name: setup Rust
run: |
@@ -351,26 +322,25 @@ jobs:
echo "export MOZ_WINDOWS_RS_DIR=$(pwd)/windows-0.52.0" >> ../configs/common/mozconfig
- name: Import
run: pnpm gluon import --verbose
run: pnpm surfer import --verbose
- name: Build
run: pnpm build
run: |
unset SURFER_PLATFORM
export ZEN_RELEASE=1
export ZEN_CROSS_COMPILING=1
pnpm build
- name: Package
run: |
set -x
export SURFER_PLATFORM="win32"
pnpm package
mv ./dist/output.mar windows.mar
mv ./dist/zen-$(pnpm gluon get version | xargs).en-US.win64.zip zen.win64.zip
mv ./dist/zen-$(pnpm surfer get version | xargs).en-US.win64.zip zen.win64.zip
ls ./dist
ls .
#- name: Upload artifact
# uses: actions/upload-artifact@v3
# with:
# name: zen.installer.exe
# path: ./dist/zen.installer.exe
- name: Upload artifact
uses: actions/upload-artifact@v3
with:
@@ -383,6 +353,18 @@ jobs:
name: windows.mar
path: ./windows.mar
- name: Upload installer
uses: actions/upload-artifact@v3
with:
name: zen.installer.exe
path: ./dist/zen.installer.exe
- name: Upload installer stub
uses: actions/upload-artifact@v3
with:
name: zen.installer.pretty.exe
path: ./dist/zen.installer.pretty.exe
- name: Upload update manifests
uses: actions/upload-artifact@v3
with:
@@ -422,14 +404,14 @@ jobs:
- name: Install dependencies
run: pnpm install
- name: Load gluon CI setup
run: pnpm gluon ci --brand alpha --display-version ${{ needs.build-data.outputs.version }}
- name: Load surfer CI setup
run: pnpm surfer ci --brand alpha --display-version ${{ needs.build-data.outputs.version }}
- name: Download firefox source and dependancies
run: pnpm gluon download --verbose
run: pnpm surfer download --verbose
- name: Import
run: pnpm gluon import --verbose
run: pnpm surfer import --verbose
- name: Compress
run: |
@@ -445,8 +427,7 @@ jobs:
path: ./zen.source.tar.gz
mac:
if: false
runs-on: macos-13
runs-on: macos-14
needs: [build-data, check-release]
steps:
@@ -493,24 +474,16 @@ jobs:
run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- uses: actions/cache@v3
name: Setup pnpm cache
with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
- name: Install dependencies
run: pnpm install
- name: Load gluon CI setup
run: pnpm gluon ci --brand alpha --display-version ${{ needs.build-data.outputs.version }}
- name: Load surfer CI setup
run: pnpm surfer ci --brand alpha --display-version ${{ needs.build-data.outputs.version }}
- name: Download firefox source and dependancies
run: pnpm gluon download
run: pnpm surfer download
- name: Import
run: pnpm gluon import
run: pnpm surfer import
- name: Bootstrap
run: |
@@ -518,8 +491,10 @@ jobs:
./mach --no-interactive bootstrap --application-choice browser
cd ..
- name: Gluon build
run: pnpm build --verbose
- name: surfer build
run: |
export ZEN_RELEASE=1
pnpm build --verbose
- name: Package
run: pnpm package
@@ -551,7 +526,7 @@ jobs:
if: ${{ github.event.inputs.create_release == 'true' }}
permissions: write-all
name: Release
needs: [build-data, linux, source, windows, check-release]
needs: [build-data, linux, source, windows, check-release, mac]
runs-on: ubuntu-latest
steps:
@@ -566,9 +541,8 @@ jobs:
- name: release-github
uses: 'marvinpinto/action-automatic-releases@latest'
with:
repo_token: '${{ secrets.GITHUB_TOKEN }}'
repo_token: '${{ secrets.DEPLOY_KEY }}'
automatic_release_tag: ${{ needs.build-data.outputs.version }}
prerelease: true
title: 'Alpha build - ${{ needs.build-data.outputs.version }} (${{ needs.build-data.outputs.build_date }})'
files: |
zen.linux.tar.bz2
@@ -576,29 +550,66 @@ jobs:
zen.source.tar.gz
linux.mar
windows.mar
macos.mar
zen.installer.exe
zen.installer.pretty.exe
zen.macos.dmg
- name: List
run: find .
- name: Checkout tools repo
- name: Clone updates repo
uses: actions/checkout@v3
with:
repository: zen-browser/desktop
path: updates
token: ${{ secrets.GITHUB_TOKEN }}
- name: Pull tools repo
run: git pull && git checkout main
repository: zen-browser/updates-server
path: updates-server
token: ${{ secrets.DEPLOY_KEY }}
- name: Copy update manifests
run: |
mkdir -p updates/updates
cp -a linux_update_manifest/. updates/updates/
cp -a windows_update_manifest/. updates/updates/
cd updates-server
mkdir -p updates
cp -a ../linux_update_manifest/. updates/
cp -a ../windows_update_manifest/. updates/
cp -a ../macos_update_manifest/. updates/
- uses: stefanzweifel/git-auto-commit-action@v4
with:
commit_message: 🔖 Upload update manifests ${{ needs.build-data.outputs.version }}
commit_message: 🚀 Update update manifests
commit_user_name: Zen Browser Robot
commit_user_email: zen-browser-bot@users.noreply.github.com
repository: ./updates
repository: ./updates-server
distro-flatpak:
name: Build flatpak repos
needs: [release]
runs-on: ubuntu-latest
container:
image: bilelmoussaoui/flatpak-github-actions:gnome-44
options: --privileged
if: ${{ github.event.inputs.create_release == 'true' && false }}
steps:
- uses: actions/checkout@v3
with:
repository: zen-browser/flatpak
token: ${{ secrets.DEPLOY_KEY }}
submodules: recursive
- name: Ensure repo is on main branch
run: |
cd flatpak
git checkout main
git pull
- uses: flatpak/flatpak-github-actions/flatpak-builder@v6
with:
bundle: org.zen.browser.flatpak
manifest-path: flatpak/org.zen.browser.flatpak.json
cache-key: flatpak-builder-${{ github.sha }}
- name: Upload flatpak repo
uses: actions/upload-artifact@v3
with:
name: flatpak-repo
path: flatpak/repo

View File

@@ -10,10 +10,26 @@ export WINEDEBUG=-all
ac_add_options --target=x86_64-pc-windows-msvc
export MOZ_STUB_INSTALLER=1
export MOZ_MAINTENANCE_SERVICE=
export MOZ_PKG_FORMAT=TAR
export MOZ_LTO=cross
export CROSS_BUILD=1
POLLY="-mllvm -polly -mllvm -polly-2nd-level-tiling -mllvm -polly-loopfusion-greedy -mllvm -polly-pattern-matching-based-opts -mllvm -polly-position=before-vectorizer -mllvm -polly-vectorizer=stripmine"
TOOLS=$(echo ~)/win-cross
export MIDL="$TOOLS/wine/bin/widl"
export MOZ_INCLUDE_SOURCE_INFO=1
export MOZ_STUB_INSTALLER=1
export WINEDEBUG=-all
export WINE="$TOOLS/wine/bin/wine64"
export RUSTFLAGS="$RUSTFLAGS -Ctarget-cpu=x86-64"
ac_add_options --enable-default-browser-agent
ac_add_options --enable-install-strip
ac_add_options --enable-jxl
ac_add_options --disable-maintenance-service
ac_add_options --disable-bits-download
# ALWAYS MANTAIN ONE LINE BREAK AT THE END OF THIS FILE

2
.gitignore vendored
View File

@@ -3,7 +3,7 @@
engine/
firefox-*/
node_modules/
.gluon/
.surfer/
__pycache__/
dist/

373
LICENSE Normal file
View File

@@ -0,0 +1,373 @@
Mozilla Public License Version 2.0
==================================
1. Definitions
--------------
1.1. "Contributor"
means each individual or legal entity that creates, contributes to
the creation of, or owns Covered Software.
1.2. "Contributor Version"
means the combination of the Contributions of others (if any) used
by a Contributor and that particular Contributor's Contribution.
1.3. "Contribution"
means Covered Software of a particular Contributor.
1.4. "Covered Software"
means Source Code Form to which the initial Contributor has attached
the notice in Exhibit A, the Executable Form of such Source Code
Form, and Modifications of such Source Code Form, in each case
including portions thereof.
1.5. "Incompatible With Secondary Licenses"
means
(a) that the initial Contributor has attached the notice described
in Exhibit B to the Covered Software; or
(b) that the Covered Software was made available under the terms of
version 1.1 or earlier of the License, but not also under the
terms of a Secondary License.
1.6. "Executable Form"
means any form of the work other than Source Code Form.
1.7. "Larger Work"
means a work that combines Covered Software with other material, in
a separate file or files, that is not Covered Software.
1.8. "License"
means this document.
1.9. "Licensable"
means having the right to grant, to the maximum extent possible,
whether at the time of the initial grant or subsequently, any and
all of the rights conveyed by this License.
1.10. "Modifications"
means any of the following:
(a) any file in Source Code Form that results from an addition to,
deletion from, or modification of the contents of Covered
Software; or
(b) any new file in Source Code Form that contains any Covered
Software.
1.11. "Patent Claims" of a Contributor
means any patent claim(s), including without limitation, method,
process, and apparatus claims, in any patent Licensable by such
Contributor that would be infringed, but for the grant of the
License, by the making, using, selling, offering for sale, having
made, import, or transfer of either its Contributions or its
Contributor Version.
1.12. "Secondary License"
means either the GNU General Public License, Version 2.0, the GNU
Lesser General Public License, Version 2.1, the GNU Affero General
Public License, Version 3.0, or any later versions of those
licenses.
1.13. "Source Code Form"
means the form of the work preferred for making modifications.
1.14. "You" (or "Your")
means an individual or a legal entity exercising rights under this
License. For legal entities, "You" includes any entity that
controls, is controlled by, or is under common control with You. For
purposes of this definition, "control" means (a) the power, direct
or indirect, to cause the direction or management of such entity,
whether by contract or otherwise, or (b) ownership of more than
fifty percent (50%) of the outstanding shares or beneficial
ownership of such entity.
2. License Grants and Conditions
--------------------------------
2.1. Grants
Each Contributor hereby grants You a world-wide, royalty-free,
non-exclusive license:
(a) under intellectual property rights (other than patent or trademark)
Licensable by such Contributor to use, reproduce, make available,
modify, display, perform, distribute, and otherwise exploit its
Contributions, either on an unmodified basis, with Modifications, or
as part of a Larger Work; and
(b) under Patent Claims of such Contributor to make, use, sell, offer
for sale, have made, import, and otherwise transfer either its
Contributions or its Contributor Version.
2.2. Effective Date
The licenses granted in Section 2.1 with respect to any Contribution
become effective for each Contribution on the date the Contributor first
distributes such Contribution.
2.3. Limitations on Grant Scope
The licenses granted in this Section 2 are the only rights granted under
this License. No additional rights or licenses will be implied from the
distribution or licensing of Covered Software under this License.
Notwithstanding Section 2.1(b) above, no patent license is granted by a
Contributor:
(a) for any code that a Contributor has removed from Covered Software;
or
(b) for infringements caused by: (i) Your and any other third party's
modifications of Covered Software, or (ii) the combination of its
Contributions with other software (except as part of its Contributor
Version); or
(c) under Patent Claims infringed by Covered Software in the absence of
its Contributions.
This License does not grant any rights in the trademarks, service marks,
or logos of any Contributor (except as may be necessary to comply with
the notice requirements in Section 3.4).
2.4. Subsequent Licenses
No Contributor makes additional grants as a result of Your choice to
distribute the Covered Software under a subsequent version of this
License (see Section 10.2) or under the terms of a Secondary License (if
permitted under the terms of Section 3.3).
2.5. Representation
Each Contributor represents that the Contributor believes its
Contributions are its original creation(s) or it has sufficient rights
to grant the rights to its Contributions conveyed by this License.
2.6. Fair Use
This License is not intended to limit any rights You have under
applicable copyright doctrines of fair use, fair dealing, or other
equivalents.
2.7. Conditions
Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
in Section 2.1.
3. Responsibilities
-------------------
3.1. Distribution of Source Form
All distribution of Covered Software in Source Code Form, including any
Modifications that You create or to which You contribute, must be under
the terms of this License. You must inform recipients that the Source
Code Form of the Covered Software is governed by the terms of this
License, and how they can obtain a copy of this License. You may not
attempt to alter or restrict the recipients' rights in the Source Code
Form.
3.2. Distribution of Executable Form
If You distribute Covered Software in Executable Form then:
(a) such Covered Software must also be made available in Source Code
Form, as described in Section 3.1, and You must inform recipients of
the Executable Form how they can obtain a copy of such Source Code
Form by reasonable means in a timely manner, at a charge no more
than the cost of distribution to the recipient; and
(b) You may distribute such Executable Form under the terms of this
License, or sublicense it under different terms, provided that the
license for the Executable Form does not attempt to limit or alter
the recipients' rights in the Source Code Form under this License.
3.3. Distribution of a Larger Work
You may create and distribute a Larger Work under terms of Your choice,
provided that You also comply with the requirements of this License for
the Covered Software. If the Larger Work is a combination of Covered
Software with a work governed by one or more Secondary Licenses, and the
Covered Software is not Incompatible With Secondary Licenses, this
License permits You to additionally distribute such Covered Software
under the terms of such Secondary License(s), so that the recipient of
the Larger Work may, at their option, further distribute the Covered
Software under the terms of either this License or such Secondary
License(s).
3.4. Notices
You may not remove or alter the substance of any license notices
(including copyright notices, patent notices, disclaimers of warranty,
or limitations of liability) contained within the Source Code Form of
the Covered Software, except that You may alter any license notices to
the extent required to remedy known factual inaccuracies.
3.5. Application of Additional Terms
You may choose to offer, and to charge a fee for, warranty, support,
indemnity or liability obligations to one or more recipients of Covered
Software. However, You may do so only on Your own behalf, and not on
behalf of any Contributor. You must make it absolutely clear that any
such warranty, support, indemnity, or liability obligation is offered by
You alone, and You hereby agree to indemnify every Contributor for any
liability incurred by such Contributor as a result of warranty, support,
indemnity or liability terms You offer. You may include additional
disclaimers of warranty and limitations of liability specific to any
jurisdiction.
4. Inability to Comply Due to Statute or Regulation
---------------------------------------------------
If it is impossible for You to comply with any of the terms of this
License with respect to some or all of the Covered Software due to
statute, judicial order, or regulation then You must: (a) comply with
the terms of this License to the maximum extent possible; and (b)
describe the limitations and the code they affect. Such description must
be placed in a text file included with all distributions of the Covered
Software under this License. Except to the extent prohibited by statute
or regulation, such description must be sufficiently detailed for a
recipient of ordinary skill to be able to understand it.
5. Termination
--------------
5.1. The rights granted under this License will terminate automatically
if You fail to comply with any of its terms. However, if You become
compliant, then the rights granted under this License from a particular
Contributor are reinstated (a) provisionally, unless and until such
Contributor explicitly and finally terminates Your grants, and (b) on an
ongoing basis, if such Contributor fails to notify You of the
non-compliance by some reasonable means prior to 60 days after You have
come back into compliance. Moreover, Your grants from a particular
Contributor are reinstated on an ongoing basis if such Contributor
notifies You of the non-compliance by some reasonable means, this is the
first time You have received notice of non-compliance with this License
from such Contributor, and You become compliant prior to 30 days after
Your receipt of the notice.
5.2. If You initiate litigation against any entity by asserting a patent
infringement claim (excluding declaratory judgment actions,
counter-claims, and cross-claims) alleging that a Contributor Version
directly or indirectly infringes any patent, then the rights granted to
You by any and all Contributors for the Covered Software under Section
2.1 of this License shall terminate.
5.3. In the event of termination under Sections 5.1 or 5.2 above, all
end user license agreements (excluding distributors and resellers) which
have been validly granted by You or Your distributors under this License
prior to termination shall survive termination.
************************************************************************
* *
* 6. Disclaimer of Warranty *
* ------------------------- *
* *
* Covered Software is provided under this License on an "as is" *
* basis, without warranty of any kind, either expressed, implied, or *
* statutory, including, without limitation, warranties that the *
* Covered Software is free of defects, merchantable, fit for a *
* particular purpose or non-infringing. The entire risk as to the *
* quality and performance of the Covered Software is with You. *
* Should any Covered Software prove defective in any respect, You *
* (not any Contributor) assume the cost of any necessary servicing, *
* repair, or correction. This disclaimer of warranty constitutes an *
* essential part of this License. No use of any Covered Software is *
* authorized under this License except under this disclaimer. *
* *
************************************************************************
************************************************************************
* *
* 7. Limitation of Liability *
* -------------------------- *
* *
* Under no circumstances and under no legal theory, whether tort *
* (including negligence), contract, or otherwise, shall any *
* Contributor, or anyone who distributes Covered Software as *
* permitted above, be liable to You for any direct, indirect, *
* special, incidental, or consequential damages of any character *
* including, without limitation, damages for lost profits, loss of *
* goodwill, work stoppage, computer failure or malfunction, or any *
* and all other commercial damages or losses, even if such party *
* shall have been informed of the possibility of such damages. This *
* limitation of liability shall not apply to liability for death or *
* personal injury resulting from such party's negligence to the *
* extent applicable law prohibits such limitation. Some *
* jurisdictions do not allow the exclusion or limitation of *
* incidental or consequential damages, so this exclusion and *
* limitation may not apply to You. *
* *
************************************************************************
8. Litigation
-------------
Any litigation relating to this License may be brought only in the
courts of a jurisdiction where the defendant maintains its principal
place of business and such litigation shall be governed by laws of that
jurisdiction, without reference to its conflict-of-law provisions.
Nothing in this Section shall prevent a party's ability to bring
cross-claims or counter-claims.
9. Miscellaneous
----------------
This License represents the complete agreement concerning the subject
matter hereof. If any provision of this License is held to be
unenforceable, such provision shall be reformed only to the extent
necessary to make it enforceable. Any law or regulation which provides
that the language of a contract shall be construed against the drafter
shall not be used to construe this License against a Contributor.
10. Versions of the License
---------------------------
10.1. New Versions
Mozilla Foundation is the license steward. Except as provided in Section
10.3, no one other than the license steward has the right to modify or
publish new versions of this License. Each version will be given a
distinguishing version number.
10.2. Effect of New Versions
You may distribute the Covered Software under the terms of the version
of the License under which You originally received the Covered Software,
or under the terms of any subsequent version published by the license
steward.
10.3. Modified Versions
If you create software not governed by this License, and you want to
create a new license for such software, you may create and use a
modified version of this License if you rename the license and remove
any references to the name of the license steward (except to note that
such modified license differs from this License).
10.4. Distributing Source Code Form that is Incompatible With Secondary
Licenses
If You choose to distribute Source Code Form that is Incompatible With
Secondary Licenses under the terms of this version of the License, the
notice described in Exhibit B of this License must be attached.
Exhibit A - Source Code Form License Notice
-------------------------------------------
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
If it is not possible or desirable to put the notice in a particular
file, then You may include the notice in a location (such as a LICENSE
file in a relevant directory) where a recipient would be likely to look
for such a notice.
You may add additional accurate notices of copyright ownership.
Exhibit B - "Incompatible With Secondary Licenses" Notice
---------------------------------------------------------
This Source Code Form is "Incompatible With Secondary Licenses", as
defined by the Mozilla Public License, v. 2.0.

View File

@@ -5,7 +5,9 @@ Experience tranquillity while browsing the web without people tracking you!
# Compatibility
Zen is currently built using firefox version `127.0.2`!
Zen is currently built using firefox version `128.0`!
* Checkout the latest [releases notes](https://get-zen.vercel.app/release-notes)!
## 🚀 Run Locally
@@ -25,7 +27,7 @@ npm i
Download and bootstrap the browser
```
npm run bootstrap
npm run init
```
Start building the browser
@@ -51,5 +53,5 @@ Please adhere to this project's `code of conduct`.
## License
[MPL LICENSE](https://choosealicense.com/licenses/mit/)
[MPL LICENSE](/LICENSE)

View File

@@ -1,4 +1,4 @@
<svg width="320" height="130" xmlns="http://www.w3.org/2000/svg">
  <rect width="300" height="100" x="10" y="10" style="fill:rgb(0,0,255);stroke-width:3;stroke:red" />
<rect width="300" height="100" x="10" y="10" style="fill:rgb(0,0,255);stroke-width:3;stroke:red" />
Sorry, your browser does not support inline SVG.
</svg>

Before

Width:  |  Height:  |  Size: 228 B

After

Width:  |  Height:  |  Size: 226 B

View File

@@ -1,11 +1,13 @@
# Browser branding
ac_add_options --enable-update-channel=release
ac_add_options --with-ccache=sccache
ac_add_options --without-wasm-sandboxed-libraries
# ac_add_options --with-branding=beta
ac_add_options --with-branding=${brandingDir}
ac_add_options --with-app-name=${binName}
ac_add_options --with-app-basename=Zen
export MOZ_USER_DIR="${name}"
export MOZ_APP_VENDOR="${vendor}"
export MOZ_APP_BASENAME=Zen
@@ -15,6 +17,7 @@ export MOZ_BRANDING_DIRECTORY=${brandingDir}
export MOZ_OFFICIAL_BRANDING_DIRECTORY=${brandingDir}
export MOZ_MACBUNDLE_ID=${appId}
export MOZ_DISTRIBUTION_ID=${appId}
export MOZ_MACBUNDLE_NAME="Zen Browser.app"
# Uncomment if builds are too resource hungry
# mk_add_options MOZ_MAKE_FLAGS="-j4"
@@ -22,11 +25,82 @@ export MOZ_DISTRIBUTION_ID=${appId}
# Misc
export MOZ_STUB_INSTALLER=1
export MOZ_INCLUDE_SOURCE_INFO=1
export MOZ_SOURCE_REPO=https://github.com/zen-browser/desktop
export MOZ_SOURCE_CHANGESET=${changeset}
export MOZ_INCLUDE_SOURCE_INFO=1
ac_add_options --enable-bootstrap
ac_add_options --enable-application=browser
if test "$ZEN_RELEASE"; then
ac_add_options --enable-optimize
ac_add_options --enable-release
ac_add_options --disable-debug
ac_add_options --disable-debug-symbols
ac_add_options --disable-debug-js-modules
ac_add_options --disable-tests
ac_add_options --enable-strip
ac_add_options --enable-install-strip
ac_add_options --enable-lto=full
ac_add_options --enable-rust-simd
ac_add_options --disable-parental-controls
ac_add_options --disable-crashreporter
ac_add_options --enable-jemalloc
mk_add_options MOZ_PARALLEL_COMPILE=1
mk_add_options MOZ_CRASHREPORTER=0
mk_add_options MOZ_DATA_REPORTING=0
mk_add_options MOZ_SERVICES_HEALTHREPORT=0
mk_add_options MOZ_TELEMETRY_REPORTING=0
ac_add_options --enable-hardening
ac_add_options --enable-sandbox
ac_add_options --disable-crashreporter
ac_add_options --disable-dmd
ac_add_options --disable-geckodriver
ac_add_options --disable-profiling
ac_add_options --enable-lto
mk_add_options MOZILLA_OFFICIAL=1
MOZILLA_OFFICIAL=1
export MOZILLA_OFFICIAL=1
mk_add_options MOZ_OPTIMIZE=1
MOZ_OPTIMIZE=1
export MOZ_OPTIMIZE=1
export OPT_LEVEL="3"
ac_add_options OPT_LEVEL="3"
export RUSTC_OPT_LEVEL="3"
ac_add_options RUSTC_OPT_LEVEL="3"
export MOZ_LTO=1
ac_add_options MOZ_LTO=1
fi
ac_add_options --enable-unverified-updates
ac_add_options --enable-updater
ac_add_options --enable-raw
ac_add_options --enable-webrtc
ac_add_options --enable-jxl
ac_add_options --enable-av1
ac_add_options --enable-eme=widevine
ac_add_options --without-wasm-sandboxed-libraries
export MOZ_REQUIRE_SIGNING=
export MOZ_TELEMETRY_REPORTING=
if test "$ZEN_CROSS_COMPILING"; then
ac_add_options --target=x86_64-pc-linux-gnu
fi
export MOZ_APP_UA_NAME="Firefox"
# ALWAYS MANTAIN ONE LINE BREAK AT THE END OF THIS FILE

View File

@@ -1,12 +1,29 @@
# Optimise builds
ac_add_options --enable-application=browser
ac_add_options --enable-hardening
ac_add_options --enable-rust-simd
ac_add_options --enable-release
ac_add_options --enable-optimize
ac_add_options --with-ccache=sccache
ac_add_options --disable-debug
ac_add_options --enable-updater
ac_add_options --enable-wasm-avx
# not when cross compiling
if ! test "$ZEN_CROSS_COMPILING"; then
if test "$ZEN_RELEASE"; then
ac_add_options --enable-optimize="-march=x86-64 -msse3 -mtune=haswell -O3 -w"
ac_add_options --enable-release
ac_add_options --enable-rust-simd
ac_add_options --disable-elf-hack
ac_add_options RUSTC_OPT_LEVEL=3
export MOZILLA_OFFICIAL=1
export RUSTFLAGS="$RUSTFLAGS -Ctarget-cpu=x86-64"
fi
if test -d "$HOME/.mozbuild/clang/bin"; then
export CC="$HOME"/.mozbuild/clang/bin/clang
export CXX="$HOME"/.mozbuild/clang/bin/clang++
else
export CC=clang
export CXX=clang++
fi
ac_add_options --enable-linker=lld
ac_add_options --enable-strip
export STRIP_FLAGS="--strip-debug --strip-unneeded"
fi
# Disable telemetry and tracking
mk_add_options MOZ_TELEMETRY_REPORTING=

View File

@@ -1,14 +1,15 @@
# Optimise builds
ac_add_options --enable-application=browser
ac_add_options --enable-hardening
ac_add_options --enable-rust-simd
ac_add_options --enable-release
ac_add_options --enable-optimize
ac_add_options --with-ccache=sccache
ac_add_options --disable-debug
ac_add_options --enable-updater
mk_add_options MOZ_MAKE_FLAGS="-j4"
POLLY="-mllvm -polly -mllvm -polly-2nd-level-tiling -mllvm -polly-loopfusion-greedy -mllvm -polly-pattern-matching-based-opts -mllvm -polly-position=before-vectorizer -mllvm -polly-vectorizer=stripmine"
# Disable telemetry and tracking
mk_add_options MOZ_TELEMETRY_REPORTING=
mk_add_options MOZ_DATA_REPORTING=
if test "$ZEN_RELEASE"; then
ac_add_options --enable-optimize="-mcpu=apple-m1 -O3 -w"
ac_add_options --enable-release
ac_add_options --enable-rust-simd
ac_add_options RUSTC_OPT_LEVEL=3
export MOZILLA_OFFICIAL=1
export RUSTFLAGS="$RUSTFLAGS -Ctarget-cpu=apple-m1"
fi
ac_add_options --enable-install-strip
ac_add_options --target=aarch64-apple-darwin
mk_add_options AUTOCLOBBER=1
export MOZ_INCLUDE_SOURCE_INFO=1

View File

@@ -1,8 +1,6 @@
ac_add_options --target=x86_64-pc-mingw32
ac_add_options --enable-js-shell
ac_add_options --enable-rust-simd
ac_add_options --enable-crashreporter
# Disable telemetry and tracking
mk_add_options MOZ_TELEMETRY_REPORTING=
mk_add_options MOZ_DATA_REPORTING=
mk_add_options MOZ_DATA_REPORTING=

5
docs/runners.md Normal file
View File

@@ -0,0 +1,5 @@
# Warp Build
For linux, we are using [warpbuild](https://warpbuild.com/) because github workflows can't handle building firefox :(

View File

@@ -1,6 +1,6 @@
# Zen Side Panels
The `zen.sizepanels.data` configuration will be a JSON string that follows the following data:
The `zen.sidepanels.data` configuration will be a JSON string that follows the following data:
```json
{

19
docs/workspaces.md Normal file
View File

@@ -0,0 +1,19 @@
# Workspaces Layout
```
{
"workspaces": [
{
"uuid": "uuid1",
"name": "workspace1",
"icon": "icon1",
"default": true
},
...
]
}
```
To save the tabs and identity them, they will contain a `zen-workspace-uuid` attribute with the workspace uuid.
We will make use of firefox's builtin session restore feature to save the tabs and windows after the user closes the browser.

2147
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -3,14 +3,16 @@
"version": "1.0.0",
"description": "",
"scripts": {
"build": "gluon build",
"build": "surfer build",
"build:ui": "surfer build --ui",
"start": "cd engine && ./mach run --noprofile",
"import": "gluon import",
"export": "gluon export",
"bootstrap": "gluon download && gluon bootstrap",
"package": "gluon package",
"import": "surfer import",
"export": "surfer export",
"init": "npm run bootstrap && npm run import",
"bootstrap": "surfer download && surfer bootstrap",
"package": "surfer package",
"update-ff": "python3 scripts/update_ff.py",
"update-ff:raw": "gluon update",
"update-ff:raw": "surfer update",
"update-newtab": "python3 update_newtab.py"
},
"repository": {
@@ -25,6 +27,6 @@
},
"homepage": "https://github.com/zen-browser/core#readme",
"dependencies": {
"gluon-build": "next"
"@zen-browser/surfer": "^1.0.14"
}
}

105
pnpm-lock.yaml generated
View File

@@ -8,9 +8,9 @@ importers:
.:
dependencies:
gluon-build:
specifier: next
version: 1.0.0-rc.5
'@zen-browser/surfer':
specifier: ^1.0.14
version: 1.0.14
packages:
@@ -109,6 +109,10 @@ packages:
'@types/node@17.0.45':
resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==}
'@zen-browser/surfer@1.0.14':
resolution: {integrity: sha512-m7RWU4LqGuC4UvEAkho5H41b8T2zMZhN/dBrm+xugZ+rGRAHcw0NMjE3YDsjDr0/r3ZcKw4INPZGhhgSwIs2TA==}
hasBin: true
ansi-regex@5.0.1:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
@@ -169,8 +173,8 @@ packages:
resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==}
engines: {node: ^12.20.0 || >=14}
core-js-pure@3.37.0:
resolution: {integrity: sha512-d3BrpyFr5eD4KcbRvQ3FTUx/KWmaDesr7+a3+1+P46IUnNoEt+oiLijPINZMEon7w9oGkIINWxrBAU9DEciwFQ==}
core-js-pure@3.37.1:
resolution: {integrity: sha512-J/r5JTHSmzTxbiYYrzXg9w1VpqrYt+gexenBE9pugeyhwPZTAEJddyiReJWsLO6uNQ8xJZFbod6XC7KKwatCiA==}
cross-spawn@7.0.3:
resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
@@ -236,10 +240,6 @@ packages:
globrex@0.1.2:
resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
gluon-build@1.0.0-rc.5:
resolution: {integrity: sha512-TJMv24pMQPo3eXQLacJ9xS1qcwPt/WERw9xTQImbnXWCe9dn6d0nAD9FamVZXZvNU7jzPcObjoPXytwTP1yCWw==}
hasBin: true
graceful-fs@4.2.11:
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
@@ -297,10 +297,6 @@ packages:
resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
engines: {node: '>=6'}
lru-cache@6.0.0:
resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
engines: {node: '>=10'}
merge-stream@2.0.0:
resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
@@ -327,8 +323,8 @@ packages:
napi-build-utils@1.0.2:
resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==}
node-abi@3.62.0:
resolution: {integrity: sha512-CPMcGa+y33xuL1E0TcNIu4YyaZCxnnvkVaEXrsosR3FxN+fV8xvb7Mzpb7IgKler10qeMkE6+Dp8qJhpzdq35g==}
node-abi@3.65.0:
resolution: {integrity: sha512-ThjYBfoDNr08AWx6hGaRbfPwxKV9kVzAzOzlLKbk2CuqXE2xnCh+cbAGnwM3t8Lq4v9rUB7VfondlkBckcJrVA==}
engines: {node: '>=10'}
node-addon-api@5.1.0:
@@ -388,8 +384,8 @@ packages:
safe-buffer@5.2.1:
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
semver@7.6.0:
resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==}
semver@7.6.2:
resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==}
engines: {node: '>=10'}
hasBin: true
@@ -478,9 +474,6 @@ packages:
resolution: {integrity: sha512-WCSfbfZnQDdLQLiMdGUQpMxxckeQ4oZNMNhLVkcekTu7xhD4tuUDyAPoY8CwXvBYE6LwBHd6QW2WZXlOWr1vCw==}
engines: {node: '>=12.0'}
yallist@4.0.0:
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
snapshots:
'@oozcitak/dom@1.15.10':
@@ -553,6 +546,31 @@ snapshots:
'@types/node@17.0.45': {}
'@zen-browser/surfer@1.0.14':
dependencies:
'@resvg/resvg-js': 1.4.0
async-icns: 1.0.2
axios: 0.21.4
chalk: 4.1.2
cli-progress: 3.12.0
commander: 6.2.1
execa: 5.1.1
fs-extra: 10.1.0
ini: 3.0.1
is-apple-silicon: https://codeload.github.com/trickypr/is-apple-silicon/tar.gz/5f75501a1d7566ba9f94174b6825d7bd9d302b6a
kleur: 4.1.5
modern-async: 1.1.4
picomatch: 2.3.1
png-to-ico: 2.1.8
prompts: 2.4.2
rustic: 1.2.2
semver: 7.6.2
sharp: 0.30.7
tiny-glob: 0.2.9
xmlbuilder2: 3.1.1
transitivePeerDependencies:
- debug
ansi-regex@5.0.1: {}
ansi-styles@4.3.0:
@@ -617,7 +635,7 @@ snapshots:
commander@9.5.0: {}
core-js-pure@3.37.0: {}
core-js-pure@3.37.1: {}
cross-spawn@7.0.3:
dependencies:
@@ -673,31 +691,6 @@ snapshots:
globrex@0.1.2: {}
gluon-build@1.0.0-rc.5:
dependencies:
'@resvg/resvg-js': 1.4.0
async-icns: 1.0.2
axios: 0.21.4
chalk: 4.1.2
cli-progress: 3.12.0
commander: 6.2.1
execa: 5.1.1
fs-extra: 10.1.0
ini: 3.0.1
is-apple-silicon: https://codeload.github.com/trickypr/is-apple-silicon/tar.gz/5f75501a1d7566ba9f94174b6825d7bd9d302b6a
kleur: 4.1.5
modern-async: 1.1.4
picomatch: 2.3.1
png-to-ico: 2.1.8
prompts: 2.4.2
rustic: 1.2.2
semver: 7.6.0
sharp: 0.30.7
tiny-glob: 0.2.9
xmlbuilder2: 3.1.1
transitivePeerDependencies:
- debug
graceful-fs@4.2.11: {}
has-flag@4.0.0: {}
@@ -737,10 +730,6 @@ snapshots:
kleur@4.1.5: {}
lru-cache@6.0.0:
dependencies:
yallist: 4.0.0
merge-stream@2.0.0: {}
mimic-fn@2.1.0: {}
@@ -753,16 +742,16 @@ snapshots:
modern-async@1.1.4:
dependencies:
core-js-pure: 3.37.0
core-js-pure: 3.37.1
nanoassert: 2.0.0
nanoassert@2.0.0: {}
napi-build-utils@1.0.2: {}
node-abi@3.62.0:
node-abi@3.65.0:
dependencies:
semver: 7.6.0
semver: 7.6.2
node-addon-api@5.1.0: {}
@@ -798,7 +787,7 @@ snapshots:
minimist: 1.2.8
mkdirp-classic: 0.5.3
napi-build-utils: 1.0.2
node-abi: 3.62.0
node-abi: 3.65.0
pump: 3.0.0
rc: 1.2.8
simple-get: 4.0.1
@@ -832,9 +821,7 @@ snapshots:
safe-buffer@5.2.1: {}
semver@7.6.0:
dependencies:
lru-cache: 6.0.0
semver@7.6.2: {}
sharp@0.30.7:
dependencies:
@@ -842,7 +829,7 @@ snapshots:
detect-libc: 2.0.3
node-addon-api: 5.1.0
prebuild-install: 7.1.2
semver: 7.6.0
semver: 7.6.2
simple-get: 4.0.1
tar-fs: 2.1.1
tunnel-agent: 0.6.0
@@ -933,5 +920,3 @@ snapshots:
'@oozcitak/infra': 1.0.8
'@oozcitak/util': 8.3.8
js-yaml: 3.14.1
yallist@4.0.0: {}

View File

@@ -10,13 +10,13 @@ def update_ff():
def get_version_before():
global last_version
with open("gluon.json", "r") as f:
with open("surfer.json", "r") as f:
data = json.load(f)
last_version = data["version"]["version"]
def get_version_after():
global new_version
with open("gluon.json", "r") as f:
with open("surfer.json", "r") as f:
data = json.load(f)
new_version = data["version"]["version"]

View File

@@ -1,10 +1,10 @@
diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
index 27c2d13fbd8599a131de6b70bba581d435198793..25aa7546d57e206b76838bc23b609f602af43a83 100644
index b8aa71126c2bb4521caf25f9caf845a8a429dc64..59cdc2e9998e802d6c79ff967eaa30088a3b7a21 100644
--- a/browser/app/profile/firefox.js
+++ b/browser/app/profile/firefox.js
@@ -3061,3 +3061,5 @@ pref("startup.homepage_override_nimbus_maxVersion", "");
pref("toolkit.contentRelevancy.enabled", false);
// Pref to enable the ingestion through the Rust component.
@@ -3110,3 +3110,5 @@ pref("toolkit.contentRelevancy.enabled", false);
pref("toolkit.contentRelevancy.ingestEnabled", false);
// Pref to enable extra logging for the content relevancy feature
pref("toolkit.contentRelevancy.log", false);
+
+#include zen-browser.js

View File

@@ -3,6 +3,7 @@
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
pref("browser.tabs.cardPreview.enabled", true);
pref("browser.tabs.hoverPreview.enabled", true);
pref("browser.tabs.cardPreview.delayMs", 100);
pref("browser.urlbar.suggest.calculator", true);
@@ -37,6 +38,12 @@ pref('browser.display.focus_ring_style', 0);
pref('browser.display.focus_ring_width', 0);
pref('browser.privateWindowSeparation.enabled', false); // WINDOWS
pref('browser.newtabpage.activity-stream.newtabWallpapers.enabled', true);
pref('browser.translations.newSettingsUI.enable', true);
pref("browser.urlbar.trimHttps", true);
pref("browser.urlbar.untrimOnUserInteraction.featureGate", true);
// Cookie banner handling (reject by default)
pref('cookiebanners.service.mode', 1);
@@ -98,6 +105,15 @@ pref('layout.css.backdrop-filter.enabled', true);
pref("alerts.showFavicons", true);
pref('browser.toolbars.bookmarks.visibility', 'never');
// Enable Do Not Track and GPC by default.
pref("privacy.donottrackheader.enabled", true);
pref("privacy.globalprivacycontrol.enabled", true);
// Disable more telemetry
pref("toolkit.telemetry.enabled", false);
pref("browser.ping-centre.telemetry", false);
pref("browser.attribution.enabled", false);
pref("toolkit.telemetry.pioneer-new-studies-available", false);
// CUSTOM ZEN PREFS
pref('zen.welcomeScreen.enabled', true);
@@ -134,6 +150,8 @@ pref('dom.enable_web_task_scheduling', true);
pref('layout.css.has-selector.enabled', true);
pref('dom.security.sanitizer.enabled', true);
pref('layers.acceleration.force-enabled', true);
// Pref to enable the new profiles (TODO: Check this out!)
//pref("browser.profiles.enabled", true);
@@ -146,4 +164,4 @@ pref('zen.sidebar.floating', true);
pref('zen.splitView.working', false);
// Zen Workspaces
pref('zen.workspaces.enabled', false);
pref('zen.workspaces.enabled', true);

View File

@@ -438,8 +438,7 @@ var gZenBrowserManagerSidebar = {
let data = this.sidebarData;
let panel = data.data[this.contextTab];
let url = (browser == null) ? panel.url : browser.currentURI.spec;
let tab = gBrowser.addTrustedTab(url);
gBrowser.selectedTab = tab;
gZenUIManager.openAndChangeToTab(url);
this.close();
},

View File

@@ -0,0 +1,19 @@
var gZenUIManager = {
openAndChangeToTab(url, options) {
if (window.ownerGlobal.parent) {
let tab = window.ownerGlobal.parent.gBrowser.addTrustedTab(url, options);
window.ownerGlobal.parent.gBrowser.selectedTab = tab;
return tab;
}
let tab = window.gBrowser.addTrustedTab(url, options);
window.gBrowser.selectedTab = tab;
return tab;
},
generateUuidv4() {
return "10000000-1000-4000-8000-100000000000".replace(/[018]/g, c =>
(+c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> +c / 4).toString(16)
);
},
};

View File

@@ -1,6 +1,13 @@
var ZenWorkspaces = {
async init() {
let docElement = document.documentElement;
if (docElement.getAttribute("chromehidden").includes("toolbar")
|| docElement.getAttribute("chromehidden").includes("menubar")) {
console.log("!!! ZenWorkspaces is disabled in hidden windows !!!");
return; // We are in a hidden window, don't initialize ZenWorkspaces
}
console.log("Initializing ZenWorkspaces...");
await this.initializeWorkspaces();
console.log("ZenWorkspaces initialized");
},
@@ -18,46 +25,356 @@ var ZenWorkspaces = {
);
},
async _workspaces() {
if (!this._workspaceCache) {
this._workspaceCache = await IOUtils.readJSON(this._storeFile);
if (!this._workspaceCache.workspaces) {
this._workspaceCache.workspaces = [];
}
}
return this._workspaceCache;
},
onWorkspacesEnabledChanged() {
if (this.workspaceEnabled) {
this.initializeWorkspaces();
} else {
this._workspaceCache = null;
document.getElementById("zen-workspaces-button")?.remove();
for (let tab of gBrowser.tabs) {
gBrowser.showTab(tab);
}
}
},
async initializeWorkspaces() {
Services.prefs.addObserver("zen.workspaces.enabled", this.onWorkspacesEnabledChanged.bind(this));
this.initializeWorkspacesButton();
let file = new FileUtils.File(this._storeFile);
if (!file.exists()) {
await IOUtils.writeJSON(this._storeFile, {});
}
if (this.workspaceEnabled) {
let workspaces = await this._workspaces();
console.log("Workspaces loaded", workspaces);
if (workspaces.workspaces.length === 0) {
await this.createAndSaveWorkspace("Default Workspace", true);
} else {
let activeWorkspace = workspaces.workspaces.find(workspace => workspace.default);
if (!activeWorkspace) {
activeWorkspace = workspaces.workspaces.find(workspace => workspace.used);
activeWorkspace.used = true;
await this.saveWorkspaces();
}
if (!activeWorkspace) {
activeWorkspace = workspaces.workspaces[0];
activeWorkspace.used = true;
await this.saveWorkspaces();
}
await this.changeWorkspace(activeWorkspace);
}
}
},
async saveWorkspace(workspaceData, windowID) {
async saveWorkspace(workspaceData) {
let json = await IOUtils.readJSON(this._storeFile);
json[windowID] = workspaceData;
if (typeof json.workspaces === "undefined") {
json.workspaces = [];
}
json.workspaces.push(workspaceData);
console.log("Saving workspace", workspaceData);
await IOUtils.writeJSON(this._storeFile, json);
},
async loadWorkspace(windowID) {
let json = await IOUtils.readJSON(this._storeFile);
return json[windowID];
this._workspaceCache = null;
},
async removeWorkspace(windowID) {
let json = await IOUtils.readJSON(this._storeFile);
delete json[windowID];
await IOUtils.writeJSON(this._storeFile, json);
let json = await this._workspaces();
await this.changeWorkspace(json.workspaces.find(workspace => workspace.uuid !== windowID));
this._deleteAllTabsInWorkspace(windowID);
json.workspaces = json.workspaces.filter(workspace => workspace.uuid !== windowID);
await this.unsafeSaveWorkspaces(json);
await this._propagateWorkspaceData();
},
async getWorkspaces() {
let json = await IOUtils.readJSON(this._storeFile);
return json;
async saveWorkspaces() {
await IOUtils.writeJSON(this._storeFile, await this._workspaces());
this._workspaceCache = null;
},
async getWorkspace(windowID) {
let json = await IOUtils.readJSON(this._storeFile);
return json[windowID];
async unsafeSaveWorkspaces(workspaces) {
await IOUtils.writeJSON(this._storeFile, workspaces);
this._workspaceCache = null;
},
// Workspaces dialog UI management
openSaveDialog() {
let parentPanel = document.getElementById("PanelUI-zen-workspaces-multiview");
PanelUI.showSubView("PanelUI-zen-workspaces-create", parentPanel);
},
cancelWorkspaceCreation() {
let parentPanel = document.getElementById("PanelUI-zen-workspaces-multiview");
parentPanel.goBack();
},
async _propagateWorkspaceData() {
let currentContainer = document.getElementById("PanelUI-zen-workspaces-current-info");
let workspaceList = document.getElementById("PanelUI-zen-workspaces-list");
const createWorkspaceElement = (workspace) => {
let element = document.createXULElement("toolbarbutton");
element.className = "subviewbutton";
element.setAttribute("tooltiptext", workspace.name);
element.setAttribute("zen-workspace-id", workspace.uuid);
element.setAttribute("context", "zenWorkspaceActionsMenu");
let childs = window.MozXULElement.parseXULToFragment(`
<div class="zen-workspace-icon">
${workspace.name[0].toUpperCase()}
</div>
<div class="zen-workspace-name">
${workspace.name}
</div>
<toolbarbutton closemenu="none" class="toolbarbutton-1 zen-workspace-actions">
<image class="toolbarbutton-icon" id="zen-workspace-actions-menu-icon"></image>
</toolbarbutton>
`);
childs.querySelector(".zen-workspace-actions").addEventListener("command", (event) => {
let button = event.target;
const popup = button.ownerDocument.getElementById(
"zenWorkspaceActionsMenu"
);
popup.openPopup(button, "after_end");
});
element.appendChild(childs);
element.onclick = (async () => {
if (event.target.closest(".zen-workspace-actions")) {
return; // Ignore clicks on the actions button
}
await this.changeWorkspace(workspace)
let panel = document.getElementById("PanelUI-zen-workspaces");
PanelMultiView.hidePopup(panel);
}).bind(this, workspace);
return element;
}
let workspaces = await this._workspaces();
let activeWorkspace = workspaces.workspaces.find(workspace => workspace.used);
currentContainer.innerHTML = "";
workspaceList.innerHTML = "";
workspaceList.parentNode.style.display = "flex";
if (workspaces.workspaces.length - 1 <= 0) {
workspaceList.parentNode.style.display = "none";
}
if (activeWorkspace) {
let currentWorkspace = createWorkspaceElement(activeWorkspace);
currentContainer.appendChild(currentWorkspace);
}
for (let workspace of workspaces.workspaces) {
if (workspace.used) {
continue;
}
let workspaceElement = createWorkspaceElement(workspace);
workspaceList.appendChild(workspaceElement);
}
},
async openWorkspacesDialog(event) {
if (!this.workspaceEnabled) {
return;
}
let target = event.target;
let panel = document.getElementById("PanelUI-zen-workspaces");
await this._propagateWorkspaceData();
PanelMultiView.openPopup(panel, target, {
position: "bottomright topright",
triggerEvent: event,
}).catch(console.error);
},
initializeWorkspacesButton() {
if (!this.workspaceEnabled) {
return;
} else if (document.getElementById("zen-workspaces-button")) {
let button = document.getElementById("zen-workspaces-button");
button.removeAttribute("hidden");
return;
}
let browserTabs = document.getElementById("tabbrowser-tabs");
let button = document.createElement("toolbarbutton");
button.id = "zen-workspaces-button";
button.className = "toolbarbutton-1 chromeclass-toolbar-additional";
button.setAttribute("label", "Workspaces");
button.setAttribute("tooltiptext", "Workspaces");
button.onclick = this.openWorkspacesDialog.bind(this);
browserTabs.insertAdjacentElement("beforebegin", button);
},
async _updateWorkspacesButton() {
let button = document.getElementById("zen-workspaces-button");
if (!button) {
return;
}
let activeWorkspace = (await this._workspaces()).workspaces.find(workspace => workspace.used);
if (activeWorkspace) {
button.innerHTML = activeWorkspace.name[0].toUpperCase();
}
},
// Workspaces management
async saveCurrentWorkspace(windowID) {
let workspaceData = this._createWorkspaceData(windowID);
await this.saveWorkspace(workspaceData, windowID);
get _workspaceInput() {
return document.getElementById("PanelUI-zen-workspaces-create-input");
},
_deleteAllTabsInWorkspace(workspaceID) {
for (let tab of gBrowser.tabs) {
if (tab.getAttribute("zen-workspace-id") === workspaceID) {
gBrowser.removeTab(tab);
}
}
},
_prepareNewWorkspace(window) {
document.documentElement.setAttribute("zen-workspace-id", window.uuid);
let tabCount = 0;
for (let tab of gBrowser.tabs) {
if (!tab.hasAttribute("zen-workspace-id")) {
tab.setAttribute("zen-workspace-id", window.uuid);
tabCount++;
}
}
if (tabCount === 0) {
this._createNewTabForWorkspace(window);
}
},
_createNewTabForWorkspace(window) {
let tab = gZenUIManager.openAndChangeToTab(Services.prefs.getStringPref("browser.startup.homepage"));
tab.setAttribute("zen-workspace-id", window.uuid);
},
async saveWorkspaceFromInput() {
let workspaceName = this._workspaceInput.value;
if (!workspaceName) {
return;
}
this._workspaceInput.value = "";
await this.createAndSaveWorkspace(workspaceName);
document.getElementById("PanelUI-zen-workspaces").hidePopup(true);
},
onWorkspaceNameChange(event) {
let button = document.getElementById("PanelUI-zen-workspaces-create-save");
if (this._workspaceInput.value === "") {
button.setAttribute("disabled", "true");
return;
}
button.removeAttribute("disabled");
},
async changeWorkspace(window) {
if (!this.workspaceEnabled) {
return;
}
let firstTab = undefined;
// Get the number of tabs that are hidden before we start hiding them
let numHiddenTabs = gBrowser.tabs.reduce((acc, tab) => {
return tab.getAttribute("zen-workspace-id") !== window.uuid ? acc + 1 : acc;
}, 0);
let workspaces = await this._workspaces();
for (let workspace of workspaces.workspaces) {
workspace.used = workspace.uuid === window.uuid;
}
this.unsafeSaveWorkspaces(workspaces);
if (numHiddenTabs === gBrowser.tabs.length) {
// If all tabs are hidden, we need to create a new tab
// to show the workspace
this._createNewTabForWorkspace(window);
}
for (let tab of gBrowser.tabs) {
if (tab.getAttribute("zen-workspace-id") === window.uuid) {
if (!firstTab) {
firstTab = tab;
gBrowser.selectedTab = firstTab;
}
gBrowser.showTab(tab);
}
}
for (let tab of gBrowser.tabs) {
if (tab.getAttribute("zen-workspace-id") !== window.uuid) {
gBrowser.hideTab(tab);
}
}
document.documentElement.setAttribute("zen-workspace-id", window.uuid);
await this.saveWorkspaces();
await this._updateWorkspacesButton();
await this._propagateWorkspaceData();
},
_createWorkspaceData(name, isDefault) {
let window = {
uuid: gZenUIManager.generateUuidv4(),
default: isDefault,
used: true,
icon: "",
name: name,
};
this._prepareNewWorkspace(window);
return window;
},
async createAndSaveWorkspace(name = "New Workspace", isDefault = false) {
if (!this.workspaceEnabled) {
return;
}
let workspaceData = this._createWorkspaceData(name, isDefault);
await this.saveWorkspace(workspaceData);
await this.changeWorkspace(workspaceData);
},
async onLocationChange(browser) {
let tab = gBrowser.getTabForBrowser(browser);
let workspaceID = tab.getAttribute("zen-workspace-id");
if (!workspaceID) {
let workspaces = await this._workspaces();
let activeWorkspace = workspaces.workspaces.find(workspace => workspace.used);
if (!activeWorkspace) {
return;
}
tab.setAttribute("zen-workspace-id", activeWorkspace.uuid);
}
},
// Context menu management
_contextMenuId: null,
async updateContextMenu(event) {
let target = event.target;
let workspace = target.closest("[zen-workspace-id]");
if (!workspace) {
return;
}
_contextMenuId = workspace.getAttribute("zen-workspace-id");
document.querySelector(`#PanelUI-zen-workspaces [zen-workspace-id="${_contextMenuId}"] .zen-workspace-actions`).setAttribute("active", "true");
const workspaces = await this._workspaces();
let deleteMenuItem = document.getElementById("context_zenDeleteWorkspace");
if (workspaces.workspaces.length <= 1) {
deleteMenuItem.setAttribute("disabled", "true");
} else {
deleteMenuItem.removeAttribute("disabled");
}
},
onContextMenuClose() {
let target = document.querySelector(`#PanelUI-zen-workspaces [zen-workspace-id="${_contextMenuId}"] .zen-workspace-actions`);
if (target) {
target.removeAttribute("active");
}
this._contextMenuId = null;
},
async contextDelete() {
await this.removeWorkspace(_contextMenuId);
}
};
ZenWorkspaces.init();

View File

@@ -1,11 +0,0 @@
diff --git a/browser/base/content/appmenu-viewcache.inc.xhtml b/browser/base/content/appmenu-viewcache.inc.xhtml
index 07b1765f18236835363fb74c898d3a690659cc9b..7b58cbb5de147ed29fbc48c0093c731fe5cca90b 100644
--- a/browser/base/content/appmenu-viewcache.inc.xhtml
+++ b/browser/base/content/appmenu-viewcache.inc.xhtml
@@ -765,5 +765,6 @@
</vbox>
</panelview>
+#include zen-panels-ui.inc.xhtml
#include ../../components/reportbrokensite/content/reportBrokenSitePanel.inc.xhtml
</html:template>

View File

@@ -1,12 +1,10 @@
diff --git a/browser/base/content/browser-box.inc.xhtml b/browser/base/content/browser-box.inc.xhtml
index b0308911446dd6fc549401371a85faa6341f8338..3942a0b45308b110685c34e8a9367d7c5d40d8c4 100644
index 16559b2c0e3aef391b43e09281aee24007feb0bd..2579cea92a55fabb73fdd130c3706af08c3fd849 100644
--- a/browser/base/content/browser-box.inc.xhtml
+++ b/browser/base/content/browser-box.inc.xhtml
@@ -18,12 +18,18 @@
<browser id="sidebar" autoscroll="false" disablehistory="true" disablefullscreen="true" tooltip="aHTMLTooltip"/>
@@ -21,11 +21,15 @@
</vbox>
<splitter id="sidebar-splitter" class="chromeclass-extrachrome sidebar-splitter" resizebefore="sibling" resizeafter="none" hidden="true"/>
+ <vbox id="browser">
<vbox id="appcontent" flex="1">
+ <html:div id="zen-appcontent-navbar-container"></html:div>
<!-- gNotificationBox will be added here lazily. -->
@@ -18,6 +16,5 @@ index b0308911446dd6fc549401371a85faa6341f8338..3942a0b45308b110685c34e8a9367d7c
flex="1" selectedIndex="0"/>
</tabbox>
+ </hbox>
+ </vbox>
</vbox>
</hbox>

View File

@@ -1,5 +1,5 @@
diff --git a/browser/base/content/browser.css b/browser/base/content/browser.css
index 6e776a9ce7c525e510b6466065daf755b21567a4..8668b27ec2126ed772a11aa77809b6f22ceab7e2 100644
index cdd08ec8f3d3cd652be9fcf6d4fb5b50dcf270ba..6cb35378aea2e7967dff0c91d09201b053645fbd 100644
--- a/browser/base/content/browser.css
+++ b/browser/base/content/browser.css
@@ -2,6 +2,8 @@
@@ -10,32 +10,8 @@ index 6e776a9ce7c525e510b6466065daf755b21567a4..8668b27ec2126ed772a11aa77809b6f2
+
@namespace html url("http://www.w3.org/1999/xhtml");
:root,
@@ -157,8 +159,6 @@ panelview:not([visible]) {
flex: 100 100;
max-width: 225px;
min-width: var(--tab-min-width);
- transition: min-width 100ms ease-out,
- max-width 100ms ease-out;
}
:root[uidensity=touch] .tabbrowser-tab:not([pinned]) {
@@ -647,12 +647,12 @@ toolbar:not(#TabsToolbar) > #personal-bookmarks {
margin-inline-start: 0;
}
-#urlbar-input-container[pageproxystate=invalid] > #page-action-buttons > .urlbar-page-action,
+#urlbar-input-container[pageproxystate=invalid] > #page-action-buttons > .urlbar-page-action:not(#zen-split-views-box),
#identity-box.chromeUI ~ #page-action-buttons > .urlbar-page-action:not(#star-button-box),
#urlbar[usertyping] > #urlbar-input-container > #page-action-buttons > #urlbar-zoom-button,
#urlbar:not([usertyping]) > #urlbar-input-container > #urlbar-go-button,
#urlbar:not([focused]) > #urlbar-input-container > #urlbar-go-button {
- display: none;
+ display: none !important;
}
#nav-bar:not([keyNav=true]) #identity-box,
@@ -1237,13 +1237,13 @@ printpreview-pagination:focus-within,
panelmultiview {
@@ -566,9 +568,9 @@ printpreview-pagination:focus-within,
#sidebar-box {
@@ -47,15 +23,11 @@ index 6e776a9ce7c525e510b6466065daf755b21567a4..8668b27ec2126ed772a11aa77809b6f2
}
/* WebExtension Sidebars */
-#sidebar-box[sidebarcommand$="-sidebar-action"] > #sidebar-header > #sidebar-switcher-target > #sidebar-icon {
+#sidebar-box[sidebarcommand$="-sidebar-action"] #sidebar-header > #sidebar-switcher-target > #sidebar-icon {
list-style-image: var(--webextension-menuitem-image, inherit);
-moz-context-properties: fill;
fill: currentColor;
@@ -1444,3 +1444,42 @@ toolbar[keyNav=true]:not([collapsed=true], [customizing=true]) toolbartabstop {
/**
* End Dialogs
*/
@@ -583,3 +585,43 @@ printpreview-pagination:focus-within,
toolbar[keyNav=true]:not([collapsed=true], [customizing=true]) toolbartabstop {
-moz-user-focus: normal;
}
+
+
+/**
+ *

View File

@@ -1,33 +1,13 @@
diff --git a/browser/base/content/browser-init.js b/browser/base/content/browser-init.js
index 0717ce21386b73fc3399c97b34c6892a674cca77..f20e8a43fdd1d885f917948a26f1c3a1bd917707 100644
index a79a9734619f89639c15087fe28e9615354a7209..212628c6fb2bed5ba17a3d2908f5d4b2376fa95e 100644
--- a/browser/base/content/browser-init.js
+++ b/browser/base/content/browser-init.js
@@ -230,6 +230,12 @@ var gBrowserInit = {
@@ -230,6 +230,8 @@ var gBrowserInit = {
gURLBar.readOnly = true;
}
+ Services.scriptloader.loadSubScript("chrome://browser/content/zenThemeModifier.js", this);
+
+ // ZEN: Propagate the current profile used to the browser UI, such as
+ // showing the avatar and profile info to the side bar
+ zenUpdateBrowserProfiles();
+
+
// Misc. inits.
gUIDensity.init();
TabletModeUpdater.init();
@@ -1105,3 +1111,15 @@ var gBrowserInit = {
};
gBrowserInit.idleTasksFinishedPromise = gBrowserInit.idleTasksFinished.promise;
+
+function zenUpdateBrowserProfiles() {
+ const mainWindowEl = document.documentElement;
+ // Dont override the sync avatar if it's already set
+ if (mainWindowEl.style.hasOwnProperty("--avatar-image-url")) {
+ return;
+ }
+ let profile = ProfileService.currentProfile;
+ if (!profile || profile.zenAvatarPath == "") return;
+ // TODO: actually use profile data to generate the avatar, instead of just using the name
+ mainWindowEl.style.setProperty("--avatar-image-url", `url(${profile.zenAvatarPath})`);
+}

View File

@@ -1,5 +1,5 @@
diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js
index 5f41ca778131eedfd32043dc27d6528be978c4fb..086b01e8fdf80dd333d80b9eede190cdb5315b70 100644
index b18f371a47fec53882c3dfb68e34d1a474eaf446..2c183d7e7fc65e00403f5e40e7859b915a3ea700 100644
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -630,6 +630,15 @@ XPCOMUtils.defineLazyPreferenceGetter(
@@ -18,16 +18,17 @@ index 5f41ca778131eedfd32043dc27d6528be978c4fb..086b01e8fdf80dd333d80b9eede190cd
customElements.setElementCreationCallback("screenshots-buttons", () => {
Services.scriptloader.loadSubScript(
"chrome://browser/content/screenshots/screenshots-buttons.js",
@@ -3668,6 +3677,8 @@ var XULBrowserWindow = {
@@ -3679,6 +3688,9 @@ var XULBrowserWindow = {
AboutReaderParent.updateReaderButton(gBrowser.selectedBrowser);
TranslationsParent.onLocationChange(gBrowser.selectedBrowser);
+ gZenViewSplitter.onLocationChange(gBrowser.selectedBrowser);
+ ZenWorkspaces.onLocationChange(gBrowser.selectedBrowser);
+
PictureInPicture.updateUrlbarToggle(gBrowser.selectedBrowser);
if (!gMultiProcessBrowser) {
@@ -4982,7 +4993,7 @@ function setToolbarVisibility(
@@ -5001,7 +5013,7 @@ function setToolbarVisibility(
);
}
@@ -36,7 +37,7 @@ index 5f41ca778131eedfd32043dc27d6528be978c4fb..086b01e8fdf80dd333d80b9eede190cd
switch (isVisible) {
case true:
case "always":
@@ -7813,6 +7824,12 @@ var gDialogBox = {
@@ -7832,6 +7844,12 @@ var gDialogBox = {
parentElement.showModal();
this._didOpenHTMLDialog = true;

View File

@@ -1,8 +1,8 @@
diff --git a/browser/base/content/browser.xhtml b/browser/base/content/browser.xhtml
index aec0983a6704f09300da9a3a9ab76e627695b708..4228c96f59d6054c19c95686cafa979594e7da1f 100644
index 3063370347db9e2812ad30205e585c849e44c91e..be74d9e624b8220cb9bd009bae31fb513c4ec73f 100644
--- a/browser/base/content/browser.xhtml
+++ b/browser/base/content/browser.xhtml
@@ -140,6 +140,8 @@
@@ -139,6 +139,8 @@
window.addEventListener("DOMContentLoaded",
gBrowserInit.onDOMContentLoaded.bind(gBrowserInit), { once: true });
</script>
@@ -11,7 +11,7 @@ index aec0983a6704f09300da9a3a9ab76e627695b708..4228c96f59d6054c19c95686cafa9795
</head>
<html:body xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
# All sets except for popupsets (commands, keys, and stringbundles)
@@ -161,9 +163,12 @@
@@ -160,9 +162,12 @@
</vbox>
</html:template>
@@ -27,3 +27,10 @@ index aec0983a6704f09300da9a3a9ab76e627695b708..4228c96f59d6054c19c95686cafa9795
<html:template id="customizationPanel">
<box id="customization-container" flex="1" hidden="true"><![CDATA[
@@ -176,5 +181,6 @@
<!-- Put it at the very end to make sure it's not covered by anything. -->
<html:div id="fullscr-toggler" hidden="hidden"/>
+#include zen-watermark.inc.xhtml
</html:body>
</html>

View File

@@ -1,5 +1,5 @@
diff --git a/browser/base/content/navigator-toolbox.inc.xhtml b/browser/base/content/navigator-toolbox.inc.xhtml
index 0a67afa81ff5e10dcbfb53149f7ed9109de084ac..bdcce262b5fc18767efd1054fd724b97c42471e4 100644
index 390a1300a1213af2b411ba09c67e3c25750ee6c3..7c80c54dd43b5414bf5ea9101d53431c0b4a140b 100644
--- a/browser/base/content/navigator-toolbox.inc.xhtml
+++ b/browser/base/content/navigator-toolbox.inc.xhtml
@@ -32,10 +32,11 @@

View File

@@ -1,16 +0,0 @@
diff --git a/browser/base/content/tabbrowser.js b/browser/base/content/tabbrowser.js
index 3bca0b6d30468dc3a755219723f673ec80dfce6e..200a609ea31a8c904e2d3e39a3a06ff67fb313ed 100644
--- a/browser/base/content/tabbrowser.js
+++ b/browser/base/content/tabbrowser.js
@@ -7623,6 +7623,11 @@ var TabContextMenu = {
this.contextTab.linkedBrowser,
document.getElementById("context_sendTabToDevice")
);
+
+ document
+ .getElementById("context_zenSplitTabs")
+ .setAttribute("data-l10n-args", tabCountInfo);
+ document.getElementById("context_zenSplitTabs").disabled = !gZenViewSplitter.contextCanSplitTabs();
},
handleEvent(aEvent) {

View File

@@ -1 +1,2 @@
<link rel="localization" href="browser/zen-web-side-panels.ftl"/>
<link rel="localization" href="browser/zen-web-side-panels.ftl"/>
<link rel="localization" href="browser/zen-workspaces.ftl"/>

View File

@@ -1,18 +0,0 @@
<panelview id="PanelUI-zen-profiles" position="bottomleft topleft" mainview="true" side="right">
<vbox>
<html:div id="PanelUI-zen-profiles-header">
<html:div id="PanelUI-zen-profiles-user-picture"></html:div>
</html:div>
<vbox id="PanelUI-zen-profiles-current-info">
<label id="PanelUI-zen-profiles-current-name"></label>
<p id="PanelUI-zen-profiles-current-profile-current" data-l10n-id="zen-panel-ui-current-profile-text"></p>
</vbox>
<toolbarbutton id="PanelUI-zen-profiles-managePrfs" oncommand="switchToTabHavingURI('about:profiles', true);" data-l10n-id="appmenu-manage-profiles" class="subviewbutton"></toolbarbutton>
#if 0
<toolbarbutton id="PanelUI-zen-profiles-privateWin" command="Tools:PrivateBrowsing" data-l10n-id="appmenuitem-new-private-window" class="subviewbutton"></toolbarbutton>
<toolbarbutton id="PanelUI-zen-profiles-newProfile" oncommand="ZenProfileDialogUI.createProfileWizard();" data-l10n-id="appmenu-create-profile" class="subviewbutton"></toolbarbutton>
#endif
<vbox id="PanelUI-zen-profiles-list">
</vbox>
</vbox>
</panelview>

View File

@@ -56,3 +56,65 @@
</panelmultiview>
</panel>
</html:template>
<panelview id="PanelUI-zen-profiles" position="bottomleft topleft" mainview="true" side="right">
<vbox>
<html:div id="PanelUI-zen-profiles-header">
<html:div id="PanelUI-zen-profiles-user-picture"></html:div>
</html:div>
<vbox id="PanelUI-zen-profiles-current-info">
<label id="PanelUI-zen-profiles-current-name"></label>
<p id="PanelUI-zen-profiles-current-profile-current" data-l10n-id="zen-panel-ui-current-profile-text"></p>
</vbox>
<hbox id="PanelUI-zen-profiles-actions">
<toolbarbutton id="PanelUI-zen-profiles-managePrfs" oncommand="switchToTabHavingURI('about:profiles', true);" data-l10n-id="appmenu-manage-profiles" class="subviewbutton"></toolbarbutton>
<toolbarbutton id="PanelUI-zen-profiles-privateWin" command="Tools:PrivateBrowsing" data-l10n-id="appmenuitem-new-private-window" class="subviewbutton"></toolbarbutton>
<toolbarbutton id="PanelUI-zen-profiles-newProfile" oncommand="ZenProfileDialogUI.createProfileWizard();" data-l10n-id="appmenu-create-profile" class="subviewbutton"></toolbarbutton>
</hbox>
<vbox id="PanelUI-zen-profiles-list">
</vbox>
</vbox>
</panelview>
<panel type="arrow" orient="vertical" id="PanelUI-zen-workspaces" position="bottomright topright" mainview="true" side="left">
<panelmultiview id="PanelUI-zen-workspaces-multiview" mainViewId="PanelUI-zen-workspaces-view">
<panelview id="PanelUI-zen-workspaces-view" class="PanelUI-subView" role="document" mainview-with-header="true" has-custom-header="true">
<vbox>
<hbox>
<h3 data-l10n-id="zen-panel-ui-current-window-text"></h3>
<hbox class="translations-panel-beta" role="image" aria-label="Beta">
<image class="translations-panel-beta-icon"></image>
</hbox>
<toolbarbutton id="PanelUI-zen-workspaces-new" oncommand="ZenWorkspaces.openSaveDialog();" class="subviewbutton">
<image></image>
</toolbarbutton>
</hbox>
<html:div id="PanelUI-zen-workspaces-current-info">
</html:div>
</vbox>
<vbox>
<h3 data-l10n-id="zen-panel-ui-workspaces-text"></h3>
<html:div id="PanelUI-zen-workspaces-list">
</html:div>
</vbox>
</panelview>
<panelview id="PanelUI-zen-workspaces-create" class="PanelUI-subView" role="document" mainview-with-header="true" has-custom-header="true">
<vbox>
<h1 data-l10n-id="zen-panel-ui-workspaces-create-text"></h1>
<html:input autofocus="true" id="PanelUI-zen-workspaces-create-input" type="text" placeholder="Enter workspace name" oninput="ZenWorkspaces.onWorkspaceNameChange(this);" />
</vbox>
<html:moz-button-group class="panel-footer" id="PanelUI-zen-workspaces-create-footer">
<button disabled="true" default="true" slot="primary" id="PanelUI-zen-workspaces-create-save" oncommand="ZenWorkspaces.saveWorkspaceFromInput();" class="footer-button" data-l10n-id="zen-panel-ui-workspaces-create-save">
</button>
<button id="PanelUI-zen-workspaces-create-cancel" oncommand="ZenWorkspaces.cancelWorkspaceCreation();" class="footer-button" data-l10n-id="zen-panel-ui-workspaces-create-cancel">
</button>
</html:moz-button-group>
</panelview>
</panelmultiview>
</panel>
<menupopup id="zenWorkspaceActionsMenu"
onpopupshowing="ZenWorkspaces.updateContextMenu(event);"
onpopuphidden="ZenWorkspaces.onContextMenuClose();">
<menuitem id="context_zenDeleteWorkspace" oncommand="ZenWorkspaces.contextDelete();" data-l10n-id="zen-workspaces-panel-context-delete"/>
</menupopup>

View File

@@ -1,5 +1,6 @@
<script type="text/javascript">
window.addEventListener("DOMContentLoaded", () => {
Services.scriptloader.loadSubScript("chrome://browser/content/ZenUIManager.mjs");
Services.scriptloader.loadSubScript("chrome://browser/content/ZenWorkspaces.mjs");
Services.scriptloader.loadSubScript("chrome://browser/content/ZenSidebarManager.mjs");
Services.scriptloader.loadSubScript("chrome://browser/content/ZenViewSplitter.mjs");

View File

@@ -1,6 +1,7 @@
content/browser/zen-browser-places.js (content/zen-browser-places.js)
content/browser/zenThemeModifier.js (content/zenThemeModifier.js)
content/browser/ZenSidebarManager.mjs (content/ZenSidebarManager.mjs)
content/browser/ZenUIManager.mjs (content/ZenUIManager.mjs)
content/browser/ZenViewSplitter.mjs (content/ZenViewSplitter.mjs)
content/browser/ZenWorkspaces.mjs (content/ZenWorkspaces.mjs)

View File

@@ -0,0 +1,4 @@
<html:div id="zen-watermark">
<image src="chrome://branding/content/about-logo.png" />
</html:div>

View File

@@ -95,6 +95,8 @@
_zenInitBrowserLayout() {
if (!this._inMainBrowserWindow) return;
this.openWatermark();
console.log("ZenThemeModifier: init browser layout");
const kNavbarItems = [
"nav-bar",
"PersonalToolbar",
@@ -116,7 +118,34 @@
// move the security button to the right
const securityButton = document.getElementById("tracking-protection-icon-container");
document.getElementById("urlbar-input-container").insertBefore(securityButton, document.getElementById("page-action-buttons"));
document.getElementsByClassName("urlbar-input-container")[0].insertBefore(securityButton, document.getElementById("page-action-buttons"));
const mainWindowEl = document.documentElement;
// Dont override the sync avatar if it's already set
if (mainWindowEl.style.hasOwnProperty("--avatar-image-url")) {
return;
}
let profile = ProfileService.currentProfile;
if (!profile || profile.zenAvatarPath == "") return;
// TODO: actually use profile data to generate the avatar, instead of just using the name
console.log("ZenThemeModifier: setting avatar image to", profile.zenAvatarPath);
mainWindowEl.style.setProperty("--zen-avatar-image-url", `url(${profile.zenAvatarPath})`);
mainWindowEl.style.setProperty("--avatar-image-url", `var(--zen-avatar-image-url)`, "important");
this.closeWatermark();
},
openWatermark() {
const watermark = document.getElementById("zen-watermark");
if (watermark) {
watermark.removeAttribute("hidden");
}
},
closeWatermark() {
const watermark = document.getElementById("zen-watermark");
if (watermark) {
watermark.setAttribute("hidden", "true");
}
},
};

View File

@@ -1,22 +0,0 @@
diff --git a/browser/components/controlcenter/content/protectionsPanel.inc.xhtml b/browser/components/controlcenter/content/protectionsPanel.inc.xhtml
index 29927139181e40fa9779038f996a08a2afc6f76b..ddb95da98de6aba014d69f040aabe6b311fb6772 100644
--- a/browser/components/controlcenter/content/protectionsPanel.inc.xhtml
+++ b/browser/components/controlcenter/content/protectionsPanel.inc.xhtml
@@ -8,6 +8,7 @@
type="arrow"
role="alertdialog"
noautofocus="true"
+ infoMessageShowing=""
aria-labelledby="protections-popup-main-header-label"
onpopupshown="gProtectionsHandler.onPopupShown(event);ReportBrokenSite.updateParentMenu(event)"
onpopuphidden="gProtectionsHandler.onPopupHidden(event);"
@@ -28,7 +29,7 @@
<html:span id="protections-popup-mainView-panel-header-span"/>
</html:h1>
<toolbarbutton id="protections-popup-info-button" class="panel-info-button"
- data-l10n-id="protections-panel-etp-more-info">
+ data-l10n-id="protections-panel-etp-more-info" checked="">
<image/>
</toolbarbutton>
<description id="protections-popup-toast-panel-tp-on-desc" data-l10n-id="protections-panel-etp-on-header"></description>

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/customizableui/CustomizableUI.sys.mjs b/browser/components/customizableui/CustomizableUI.sys.mjs
index 5b09402dc1e19e89dcdfc8b5b45a2004c8cec0e6..0f8d774c728087b96242f35fe038e1fef55e58b3 100644
index f466105b8290b13c672351bb68dd92644dd670fe..b195cd59d7ff07ff512e7388c9dc33f3c661d955 100644
--- a/browser/components/customizableui/CustomizableUI.sys.mjs
+++ b/browser/components/customizableui/CustomizableUI.sys.mjs
@@ -25,7 +25,7 @@ ChromeUtils.defineLazyGetter(lazy, "gWidgetsBundle", function () {
@@ -11,23 +11,19 @@ index 5b09402dc1e19e89dcdfc8b5b45a2004c8cec0e6..0f8d774c728087b96242f35fe038e1fe
const kSpecialWidgetPfx = "customizableui-special-";
@@ -249,14 +249,11 @@ var CustomizableUIInternal = {
Services.policies.isAllowed("removeHomeButtonByDefault")
? null
: "home-button",
- "spring",
@@ -253,10 +253,9 @@ var CustomizableUIInternal = {
"spring",
"urlbar-container",
- "spring",
"spring",
- "save-to-pocket-button",
"downloads-button",
AppConstants.MOZ_DEV_EDITION ? "developer-button" : null,
- "fxa-toolbar-menu-button",
lazy.resetPBMToolbarButtonEnabled ? "reset-pbm-toolbar-button" : null,
+ "wrapper-sidebar-button",
lazy.resetPBMToolbarButtonEnabled ? "reset-pbm-toolbar-button" : null,
].filter(name => name);
this.registerArea(
@@ -287,7 +284,7 @@ var CustomizableUIInternal = {
@@ -288,7 +287,7 @@ var CustomizableUIInternal = {
{
type: CustomizableUI.TYPE_TOOLBAR,
defaultPlacements: [

View File

@@ -1,14 +1,12 @@
diff --git a/browser/components/moz.build b/browser/components/moz.build
index 0f91b90fb0ce4eac232d71ad4f9ff82ab7316635..82aa7bb8bd41b061ac861d3fbabbf9f9879a2091 100644
index 6cbb7ce0037c1457eeae5c331a996719691ebd6b..611707852198740c9b4103f5e2a66e8ee4099a21 100644
--- a/browser/components/moz.build
+++ b/browser/components/moz.build
@@ -72,6 +72,9 @@ DIRS += [
"urlbar",
]
+# Zen Components:
+DIRS += ["zen-welcome"]
+
DIRS += ["build"]
@@ -27,6 +27,7 @@ with Files("controlcenter/**"):
DIRS += [
+ "zen-welcome",
"about",
"aboutlogins",
"aboutwelcome",

View File

@@ -1,13 +0,0 @@
diff --git a/browser/components/newtab/content-src/styles/_theme.scss b/browser/components/newtab/content-src/styles/_theme.scss
index 6b097ae93edc046fb82dc843357e4ce8f34aca60..a76a3d8082d611a5169b0e85053aaca05a59ede1 100644
--- a/browser/components/newtab/content-src/styles/_theme.scss
+++ b/browser/components/newtab/content-src/styles/_theme.scss
@@ -25,7 +25,7 @@ $shadow-image-inset: inset 0 0 0 0.5px $black-15;
// Default theme
:root {
// General styles
- --newtab-background-color: #{$in-content-page-background};
+ --newtab-background-color: var(--zen-colors-tertiary);
--newtab-background-color-secondary: #{$newtab-background-secondary};
--newtab-text-primary-color: #{$in-content-page-color};
--newtab-primary-action-background: #{$primary-blue};

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/preferences/jar.mn b/browser/components/preferences/jar.mn
index 3b60d18e483bc3c4e9b4309f0dc1e4231b7116b1..aa30bc3de15b68ac90c12142a8851af99e1209ae 100644
index 3b60d18e483bc3c4e9b4309f0dc1e4231b7116b1..e5b679b25941a7f1ed52db9fa3f7740a7220b9e4 100644
--- a/browser/components/preferences/jar.mn
+++ b/browser/components/preferences/jar.mn
@@ -23,3 +23,5 @@ browser.jar:
@@ -7,4 +7,4 @@ index 3b60d18e483bc3c4e9b4309f0dc1e4231b7116b1..aa30bc3de15b68ac90c12142a8851af9
content/browser/preferences/web-appearance-dark.svg
content/browser/preferences/web-appearance-light.svg
+
+ content/browser/preferences/zen-looks.js
+ content/browser/preferences/zen-settings.js

View File

@@ -1,12 +1,13 @@
diff --git a/browser/components/preferences/preferences.js b/browser/components/preferences/preferences.js
index c30a51c67ce636fa889090419a5c2642d74b4f49..b48ab31c564db4a4911c9fca291b4f09ba1025af 100644
index 7e21bab426b6eb52fe84876d817fddbdb1a35ffc..fe23eb36a28a2baa4facad80a776e739ee6e43b1 100644
--- a/browser/components/preferences/preferences.js
+++ b/browser/components/preferences/preferences.js
@@ -198,6 +198,7 @@ function init_all() {
@@ -196,6 +196,8 @@ function init_all() {
// the entire document.
Preferences.queueUpdateOfAllElements();
Services.telemetry.setEventRecordingEnabled("aboutpreferences", true);
+ register_module("paneZenLooks", gZenLooksAndFeel);
+ register_module("paneZenWorkspaces", gZenWorkspacesSettings);
register_module("paneGeneral", gMainPane);
register_module("paneHome", gHomePane);

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/preferences/preferences.xhtml b/browser/components/preferences/preferences.xhtml
index eee227822a772bec128d6adbe4f6aca90ed810f6..b52ee22054e3b2c80d4b780bc01507478becc583 100644
index 3affb19d1a243da4a5782c9a4a5588d165b4119f..ccb56cc323ff5c3e94013de782af54911fc0c360 100644
--- a/browser/components/preferences/preferences.xhtml
+++ b/browser/components/preferences/preferences.xhtml
@@ -43,6 +43,8 @@
@@ -11,7 +11,7 @@ index eee227822a772bec128d6adbe4f6aca90ed810f6..b52ee22054e3b2c80d4b780bc0150747
<link rel="localization" href="branding/brand.ftl"/>
<link rel="localization" href="browser/browser.ftl"/>
<!-- Used by fontbuilder.js -->
@@ -99,6 +101,12 @@
@@ -97,6 +99,12 @@
<hbox flex="1">
<vbox class="navigation">
@@ -24,7 +24,7 @@ index eee227822a772bec128d6adbe4f6aca90ed810f6..b52ee22054e3b2c80d4b780bc0150747
<!-- category list -->
<richlistbox id="categories" data-l10n-id="category-list" data-l10n-attrs="aria-label">
<richlistitem id="category-general"
@@ -112,6 +120,17 @@
@@ -110,6 +118,28 @@
<label class="category-name" flex="1" data-l10n-id="pane-general-title"></label>
</richlistitem>
@@ -38,11 +38,22 @@ index eee227822a772bec128d6adbe4f6aca90ed810f6..b52ee22054e3b2c80d4b780bc0150747
+ <image class="category-icon"/>
+ <label class="category-name" flex="1" data-l10n-id="pane-zen-looks-title"></label>
+ </richlistitem>
+
+ <richlistitem id="category-zen-workspaces"
+ class="category"
+ value="paneZenWorkspaces"
+ helpTopic="prefs-main"
+ data-l10n-id="category-zen-workspaces"
+ data-l10n-attrs="tooltiptext"
+ align="center">
+ <image class="category-icon"/>
+ <label class="category-name" flex="1" data-l10n-id="pane-zen-workspaces-title"></label>
+ </richlistitem>
+
<richlistitem id="category-home"
class="category"
value="paneHome"
@@ -230,11 +249,13 @@
@@ -228,11 +258,13 @@
<html:a href="about:policies" target="_blank" data-l10n-id="managed-notice"/>
</hbox>
</hbox>
@@ -56,11 +67,12 @@ index eee227822a772bec128d6adbe4f6aca90ed810f6..b52ee22054e3b2c80d4b780bc0150747
</hbox>
</hbox>
<vbox id="mainPrefPane">
@@ -248,6 +269,7 @@
@@ -246,6 +278,8 @@
#include sync.inc.xhtml
#include experimental.inc.xhtml
#include moreFromMozilla.inc.xhtml
+#include zenLooksAndFeel.inc.xhtml
+#include zenWorkspaces.inc.xhtml
</vbox>
</vbox>
</vbox>

View File

@@ -48,6 +48,11 @@ var gZenLooksAndFeel = {
},
};
var gZenWorkspacesSettings = {
init() {
},
};
Preferences.addAll([
{
id: "zen.theme.toolbar-themed",
@@ -64,4 +69,9 @@ Preferences.addAll([
type: "bool",
default: false,
},
{
id: "zen.workspaces.enabled",
type: "bool",
default: true,
}
]);

View File

@@ -1,4 +1,4 @@
<script src="chrome://browser/content/preferences/zen-looks.js"/>
<script src="chrome://browser/content/preferences/zen-settings.js"/>
<html:template id="template-paneZenLooks">
<hbox id="zenLooksCategory"
class="subcategory"

View File

@@ -0,0 +1,25 @@
<html:template id="template-paneZenWorkspaces">
<hbox id="ZenWorkspacesCategory"
class="subcategory"
hidden="true"
data-category="paneZenWorkspaces">
<html:h1 data-l10n-id="pane-workspaces-title"/>
</hbox>
<hbox id="zenSidePanelsCategory"
class="subcategory"
hidden="true"
data-category="paneZenWorkspaces">
<html:h1 data-l10n-id="pane-settings-workspaces-title"/>
</hbox>
<groupbox id="zenSidePanelsGroup" data-category="paneZenWorkspaces" hidden="true" class="highlighting-group">
<label><html:h2 data-l10n-id="zen-settings-workspaces-header"/></label>
<description class="description-deemphasized" data-l10n-id="zen-settings-workspaces-description" />
<checkbox id="zenWorkspacesActivate"
data-l10n-id="zen-settings-workspaces-enabled"
preference="zen.workspaces.enabled"/>
</groupbox>
</html:template>

View File

@@ -0,0 +1,13 @@
diff --git a/browser/components/sessionstore/TabState.sys.mjs b/browser/components/sessionstore/TabState.sys.mjs
index 26f5671c849d9b0a126d79b07bc7d3d7870826ec..decc4c975507c9111df78dbc43434fa46d5f5e82 100644
--- a/browser/components/sessionstore/TabState.sys.mjs
+++ b/browser/components/sessionstore/TabState.sys.mjs
@@ -98,6 +98,8 @@ var TabStateInternal = {
tabData.muteReason = tab.muteReason;
}
+ tabData.zenWorkspace = tab.getAttribute("zen-workspace-id");
+
tabData.searchMode = tab.ownerGlobal.gURLBar.getSearchMode(browser, true);
tabData.userContextId = tab.userContextId || 0;

View File

@@ -0,0 +1,13 @@
diff --git a/browser/components/tabbrowser/content/tab-hover-preview.mjs b/browser/components/tabbrowser/content/tab-hover-preview.mjs
index b07dba3e060dd730e603997b2c374f218a1eb591..412d35a263d1e6a789927206a506c184a5ac0d46 100644
--- a/browser/components/tabbrowser/content/tab-hover-preview.mjs
+++ b/browser/components/tabbrowser/content/tab-hover-preview.mjs
@@ -7,7 +7,7 @@ var { XPCOMUtils } = ChromeUtils.importESModule(
);
const POPUP_OPTIONS = {
- position: "bottomleft topleft",
+ position: "topright topleft",
x: 0,
y: -2,
};

View File

@@ -0,0 +1,39 @@
diff --git a/browser/components/tabbrowser/content/tabbrowser.js b/browser/components/tabbrowser/content/tabbrowser.js
index 2674dc2bebf436529a46d45c52cb56e86b82c03f..960c0039cd511a9d2c78e2a0c8c78080464950ee 100644
--- a/browser/components/tabbrowser/content/tabbrowser.js
+++ b/browser/components/tabbrowser/content/tabbrowser.js
@@ -3208,6 +3208,11 @@
) {
tabWasReused = true;
tab = this.selectedTab;
+
+ if (tabData.zenWorkspace) {
+ tab.setAttribute("zen-workspace-id", tabData.zenWorkspace);
+ }
+
if (!tabData.pinned) {
this.unpinTab(tab);
} else {
@@ -3257,6 +3262,10 @@
preferredRemoteType,
});
+ if (tabData.zenWorkspace) {
+ tab.setAttribute("zen-workspace-id", tabData.zenWorkspace);
+ }
+
if (select) {
tabToSelect = tab;
}
@@ -7878,6 +7887,11 @@ var TabContextMenu = {
this.contextTab.linkedBrowser,
document.getElementById("context_sendTabToDevice")
);
+
+ document
+ .getElementById("context_zenSplitTabs")
+ .setAttribute("data-l10n-args", tabCountInfo);
+ document.getElementById("context_zenSplitTabs").disabled = !gZenViewSplitter.contextCanSplitTabs();
},
handleEvent(aEvent) {

View File

@@ -1,8 +1,8 @@
diff --git a/browser/base/content/tabbrowser-tabs.js b/browser/base/content/tabbrowser-tabs.js
index 4733e6d0b66f254c72a592bf3eabeb1a939e76fa..ab16fe96e1e8036df7e8321c992624170bde0e63 100644
--- a/browser/base/content/tabbrowser-tabs.js
+++ b/browser/base/content/tabbrowser-tabs.js
@@ -538,19 +538,36 @@
diff --git a/browser/components/tabbrowser/content/tabs.js b/browser/components/tabbrowser/content/tabs.js
index 3b97732d8035f07a2308f76f235702c70a5fa388..bed86f3014a239b4e7d50504d4b0bf457da3500c 100644
--- a/browser/components/tabbrowser/content/tabs.js
+++ b/browser/components/tabbrowser/content/tabs.js
@@ -552,19 +552,36 @@
}
dt.setDragImage(toDrag, dragImageOffset, dragImageOffset);
@@ -40,7 +40,7 @@ index 4733e6d0b66f254c72a592bf3eabeb1a939e76fa..ab16fe96e1e8036df7e8321c99262417
movingTabs: (tab.multiselected ? gBrowser.selectedTabs : [tab]).filter(
t => t.pinned == tab.pinned
),
@@ -637,21 +654,30 @@
@@ -651,21 +668,30 @@
}
}
@@ -76,7 +76,7 @@ index 4733e6d0b66f254c72a592bf3eabeb1a939e76fa..ab16fe96e1e8036df7e8321c99262417
];
}
newMargin = pixelsToScroll > 0 ? maxMargin : minMargin;
@@ -661,29 +687,38 @@
@@ -675,29 +701,38 @@
if (newIndex == children.length) {
let tabRect = this._getVisibleTabs().at(-1).getBoundingClientRect();
if (RTL_UI) {
@@ -121,7 +121,7 @@ index 4733e6d0b66f254c72a592bf3eabeb1a939e76fa..ab16fe96e1e8036df7e8321c99262417
var dt = event.dataTransfer;
var dropEffect = dt.dropEffect;
var draggedTab;
@@ -740,7 +775,7 @@
@@ -754,7 +789,7 @@
incrementDropIndex = false;
}
@@ -130,7 +130,7 @@ index 4733e6d0b66f254c72a592bf3eabeb1a939e76fa..ab16fe96e1e8036df7e8321c99262417
for (let tab of movingTabs) {
tab.toggleAttribute("tabdrop-samewindow", true);
tab.style.transform = "translateX(" + newTranslateX + "px)";
@@ -1126,10 +1161,13 @@
@@ -1144,10 +1179,13 @@
}
_initializeArrowScrollbox() {
@@ -144,7 +144,24 @@ index 4733e6d0b66f254c72a592bf3eabeb1a939e76fa..ab16fe96e1e8036df7e8321c99262417
// Ignore underflow events:
// - from nested scrollable elements
// - for vertical orientation
@@ -1492,19 +1530,30 @@
@@ -1471,11 +1509,11 @@
for (let i = numPinned - 1; i >= 0; i--) {
let tab = tabs[i];
width += layoutData.pinnedTabWidth;
- tab.style.setProperty(
- "margin-inline-start",
- -(width + layoutData.scrollStartOffset) + "px",
- "important"
- );
+ //tab.style.setProperty(
+ // "margin-inline-start",
+ // -(width + layoutData.scrollStartOffset) + "px",
+ // "important"
+ //);
tab._pinnedUnscrollable = true;
}
this.style.setProperty(
@@ -1510,19 +1548,30 @@
}
}
@@ -184,7 +201,7 @@ index 4733e6d0b66f254c72a592bf3eabeb1a939e76fa..ab16fe96e1e8036df7e8321c99262417
let pinned = draggedTab.pinned;
let numPinned = gBrowser._numPinnedTabs;
@@ -1513,36 +1562,39 @@
@@ -1531,36 +1580,39 @@
pinned ? numPinned : undefined
);
@@ -235,7 +252,7 @@ index 4733e6d0b66f254c72a592bf3eabeb1a939e76fa..ab16fe96e1e8036df7e8321c99262417
}
draggedTab._dragData.translateX = translateX;
@@ -1575,11 +1627,11 @@
@@ -1593,11 +1645,11 @@
if (tabs[mid] == draggedTab && ++mid > high) {
break;
}
@@ -249,7 +266,7 @@ index 4733e6d0b66f254c72a592bf3eabeb1a939e76fa..ab16fe96e1e8036df7e8321c99262417
tabCenter
) {
low = mid + 1;
@@ -1602,16 +1654,16 @@
@@ -1620,16 +1672,16 @@
for (let tab of tabs) {
if (tab != draggedTab) {
let shift = getTabShift(tab, newIndex);
@@ -269,7 +286,7 @@ index 4733e6d0b66f254c72a592bf3eabeb1a939e76fa..ab16fe96e1e8036df7e8321c99262417
}
return 0;
}
@@ -1683,9 +1735,9 @@
@@ -1701,9 +1753,9 @@
// Slide the relevant tabs to their new position.
for (let t of this._getVisibleTabs()) {

View File

@@ -1,13 +0,0 @@
diff --git a/browser/components/tabpreview/tab-preview-panel.mjs b/browser/components/tabpreview/tab-preview-panel.mjs
index 683b2c17ec893a97680d885c622029591dda7f29..605f8682368d691f7cc18dfb1775fa2622006ebd 100644
--- a/browser/components/tabpreview/tab-preview-panel.mjs
+++ b/browser/components/tabpreview/tab-preview-panel.mjs
@@ -7,7 +7,7 @@ var { XPCOMUtils } = ChromeUtils.importESModule(
);
const POPUP_OPTIONS = {
- position: "bottomleft topleft",
+ position: "topright topleft",
x: 0,
y: -2,
};

View File

@@ -36,10 +36,9 @@ button {
}
.page-split:not([hidden="true"]) {
display: flex;
margin: 12%;
flex-direction: row;
justify-content: space-between;
margin: auto;
justify-content: space-around;
}
#enableFeatures .card {
@@ -51,13 +50,17 @@ button {
text-align: center;
}
#theme .card[disabled="true"] {
opacity: 0.7;
cursor: not-allowed;
}
.cardGroup {
display: flex;
flex-wrap: wrap;
align-items: stretch;
gap: 8px;
margin-bottom: 8px;
justify-content: center;
}
.cardGroup .card {
@@ -84,6 +87,13 @@ h1 {
font-size: 32px;
font-weight: 700;
margin: 16px 0 5px 0;
line-height: 1;
}
.page > div:nth-child(2) h1 {
margin-bottom: 15px;
margin-top: 10px;
font-size: 18px;
}
p {
@@ -134,14 +144,6 @@ input[type='checkbox'] {
margin-top: 20px;
}
#search h1 {
margin-bottom: 25px;
}
#theme h1 {
margin: 25px 0;
}
.page[hidden="true"] {
display: none;
}
@@ -190,16 +192,16 @@ input[type='checkbox'] {
}
.dot {
width: 7px;
height: 7px;
width: 8px;
height: 8px;
border-radius: 50%;
background: var(--in-content-primary-button-background);
transition: all .1s;
background: light-dark(#000, #fff);
cursor: pointer;
}
.dot.active {
background: light-dark(#000, #fff);
background: var(--zen-primary-color);
}
#colorList {
@@ -224,3 +226,14 @@ input[type='checkbox'] {
width: 500px;
height: 20px;
}
#colorPreview {
margin-left: 10px;
border-radius: 5px;
width: 25px;
height: 25px;
position: absolute;
top: 50%;
right: -60px;
transform: translateY(-50%);
}

View File

@@ -8,10 +8,6 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/.
<html lang="en">
<head>
<meta name="color-scheme" content="light dark">
<meta
http-equiv="Content-Security-Policy"
content="default-src chrome:; object-src 'none'"
/>
<meta name="referrer" content="no-referrer" />
<link
@@ -77,6 +73,7 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/.
<div id="colorListWrapper">
<canvas id="colorList" class="cardGroup"></canvas>
<div id="dragBall"></div>
<div id="colorPreview"></div>
</div>
<button
id="themeNext"

View File

@@ -14,9 +14,12 @@ ChromeUtils.defineModuleGetter(
this,
'ExtensionSettingsStore',
'resource://gre/modules/ExtensionSettingsStore.jsm'
)
);
const welcomeSeenPref = 'zen.welcomeScreen.seen'
Services.scriptloader.loadSubScript("chrome://browser/content/ZenUIManager.mjs");
const kWelcomeURL = 'https://get-zen.vercel.app/welcome';
const kWelcomeSeenPref = 'zen.welcomeScreen.seen'
// =============================================================================
// Util stuff copied from browser/components/preferences/search.js
@@ -134,11 +137,18 @@ class Themes extends Page {
container.classList.add('card');
container.classList.add('card-no-hover');
//if (theme.id == "firefox-compact-dream@mozilla.org" || theme.id == "firefox-compact-galaxy@mozilla.org") {
// container.setAttribute('disabled', 'true')
//}
if (theme.isActive) {
container.classList.add('selected')
}
container.addEventListener('click', () => {
if (container.hasAttribute('disabled')) {
return
}
document.body.classList.add('normal-background');
themeElements.forEach((el) => el.classList.remove('selected'))
container.classList.add('selected')
@@ -196,12 +206,15 @@ class Themes extends Page {
x = rect.width - 17 - (17/2);
}
const data = ctx.getImageData(x - 17, 1, 1, 1).data;
Services.prefs.setStringPref('zen.theme.accent-color', `#${data[0].toString(16)}${data[1].toString(16)}${data[2].toString(16)}`);
let color = `#${data[0].toString(16)}${data[1].toString(16)}${data[2].toString(16)}`;
document.getElementById("colorPreview").style.backgroundColor = color;
Services.prefs.setStringPref('zen.theme.accent-color', color);
}
const onMouseUp = () => {
document.removeEventListener('mousemove', onMouseMove);
document.removeEventListener('mouseup', onMouseUp);
document.getElementById("colorPreview").style.backgroundColor = '';
}
document.addEventListener('mousemove', onMouseMove);
@@ -236,8 +249,8 @@ class Search extends Page {
const searchElements = document.getElementById('searchList')
this.store.getEngine().forEach((search) => {
const container = this.loadSpecificSearch(search, defaultEngine)
this.store.getEngine().forEach(async (search) => {
const container = await this.loadSpecificSearch(search, defaultEngine)
searchElements.appendChild(container)
this.searchList.push(container)
@@ -247,7 +260,7 @@ class Search extends Page {
/**
* @returns {HTMLDivElement}
*/
loadSpecificSearch(search, defaultSearch) {
async loadSpecificSearch(search, defaultSearch) {
const container = document.createElement('div');
container.classList.add('card')
container.classList.add('card-no-hover')
@@ -263,7 +276,7 @@ class Search extends Page {
})
const img = document.createElement('img');
img.src = search.originalEngine._iconURI.spec;
img.src = await search.originalEngine.getIconURL();
const name = document.createElement('h3')
name.textContent = search.name
@@ -295,6 +308,7 @@ class Pages {
* @param {Page[]} pages The pages
*/
constructor(pages) {
console.log("Initializing welcome pages...");
this.pages = pages
this.currentPage = 0;
@@ -314,6 +328,7 @@ class Pages {
dots.appendChild(dot);
}
this._displayCurrentPage();
console.log("Welcome pages initialized.")
}
next() {
@@ -323,15 +338,20 @@ class Pages {
// We can use internal js apis to close the window. We also want to set
// the settings api for welcome seen to false to stop it showing again
Services.prefs.setBoolPref(welcomeSeenPref, true)
Services.prefs.setBoolPref(kWelcomeSeenPref, true)
close()
close();
this._openWelcomePage();
return
}
this._displayCurrentPage()
}
_openWelcomePage() {
gZenUIManager.openAndChangeToTab(kWelcomeURL);
}
_displayCurrentPage() {
let dots = document.getElementsByClassName("dot");
for (let i = 0; i < dots.length; i++) {

View File

@@ -19,4 +19,17 @@ zen-side-panels-enabled =
zen-look-and-feel-compact-view-header = Show in compact view
zen-look-and-feel-compact-view-description = Only show the toolbars you use!
zen-look-and-feel-compact-view-enabled =
.label = Enable { -brand-short-name }'s compact mode
.label = Enable { -brand-short-name }'s compact mode
pane-zen-workspaces-title = Workspaces
category-zen-workspaces =
.tooltiptext = { pane-workspaces-title }
pane-settings-workspaces-title = Workspaces
pane-zen-workspaces-header = Workspaces
zen-settings-workspaces-header = General settings for workspaces
zen-settings-workspaces-description = With workspaces, you can have multiple browsing sessions at once!
zen-settings-workspaces-enabled =
.label = Enable Workspaces (Experimental)

View File

@@ -16,8 +16,8 @@ welcome-dialog-theme = 🎨 Choose a theme
welcome-dialog-theme-subtext = Personalize your experience with your favorite look!
welcome-dialog-theme-action = Continue
welcome-dialog-theme-header-1 = 1. Choose A theme
welcome-dialog-theme-header-2 = 2. Find Your Perfect Color
welcome-dialog-theme-header-1 = 1. Choose a theme
welcome-dialog-theme-header-2 = 2. Find your perfect color
welcome-dialog-search = 🔍 Choose a search engine
welcome-dialog-search-subtext = Select your preferred search engine to tailor your browsing experience!

View File

@@ -0,0 +1,17 @@
zen-panel-ui-current-window-text = Current Window
zen-panel-ui-workspaces-text = Other Workspaces
zen-panel-ui-workspaces-create-text = Create Workspace
zen-panel-ui-workspaces-create-save =
.label = Create Workspace
.accesskey = S
zen-panel-ui-workspaces-create-cancel =
.label = Cancel
.accesskey = C
zen-workspaces-panel-context-delete =
.label = Delete Workspace
.accesskey = D

View File

@@ -1,7 +1,7 @@
diff --git a/browser/modules/AsyncTabSwitcher.sys.mjs b/browser/modules/AsyncTabSwitcher.sys.mjs
diff --git a/browser/components/tabbrowser/AsyncTabSwitcher.sys.mjs b/browser/components/tabbrowser/AsyncTabSwitcher.sys.mjs
index 9f4aa535e07adab496788165f4089be6732b1444..7b7955c0d1f2f3277cb750652458649d181e90e5 100644
--- a/browser/modules/AsyncTabSwitcher.sys.mjs
+++ b/browser/modules/AsyncTabSwitcher.sys.mjs
--- a/browser/components/tabbrowser/AsyncTabSwitcher.sys.mjs
+++ b/browser/components/tabbrowser/AsyncTabSwitcher.sys.mjs
@@ -39,6 +39,10 @@ XPCOMUtils.defineLazyPreferenceGetter(
300
);

View File

@@ -1,5 +1,5 @@
diff --git a/browser/themes/addons/dark/manifest.json b/browser/themes/addons/dark/manifest.json
index 544986d5e93c033f944cf301af79e0750864a32c..41b15b8d1e1bb146ef0cf8357ab08d443f88b235 100644
index bfebde683d00b0acf26509139a0f662029d37c72..976b553f49e40b7ed02743d79ccc102fccffcf6f 100644
--- a/browser/themes/addons/dark/manifest.json
+++ b/browser/themes/addons/dark/manifest.json
@@ -7,10 +7,10 @@
@@ -16,32 +16,7 @@ index 544986d5e93c033f944cf301af79e0750864a32c..41b15b8d1e1bb146ef0cf8357ab08d44
"icons": { "32": "icon.svg" },
@@ -38,19 +38,18 @@
"ntp_background": "rgb(43, 42, 51)",
"ntp_card_background": "rgb(66,65,77)",
"ntp_text": "rgb(251, 251, 254)",
- "sidebar": "#38383D",
"sidebar_text": "rgb(249, 249, 250)",
"sidebar_border": "rgba(255, 255, 255, 0.1)",
"button": "rgba(0, 0, 0, .33)",
"button_hover": "rgba(207, 207, 216, .20)",
"button_active": "rgba(207, 207, 216, .40)",
- "button_primary": "rgb(0, 221, 255)",
- "button_primary_hover": "rgb(128, 235, 255)",
- "button_primary_active": "rgb(170, 242, 255)",
- "button_primary_color": "rgb(43, 42, 51)",
+ "button_primary": "#fff",
+ "button_primary_hover": "rgb(207, 207, 216)",
+ "button_primary_active": "rgb(207, 207, 216)",
+ "button_primary_color": "#000",
"input_background": "#42414D",
"input_color": "rgb(251,251,254)",
- "input_border": "#8f8f9d",
+ "input_border": "#fff",
"urlbar_popup_separator": "rgb(82,82,94)",
"appmenu_update_icon_color": "#54FFBD",
"appmenu_info_icon_color": "#80EBFF",
@@ -61,7 +60,8 @@
@@ -58,7 +58,8 @@
"color_scheme": "dark",
"panel_active": "color-mix(in srgb, currentColor 14%, transparent)",
"toolbar_field_icon_opacity": "1",
@@ -51,7 +26,7 @@ index 544986d5e93c033f944cf301af79e0750864a32c..41b15b8d1e1bb146ef0cf8357ab08d44
}
},
@@ -88,7 +88,8 @@
@@ -82,7 +83,8 @@
"properties": {
"panel_active": "--arrowpanel-dimmed-further",
"toolbar_field_icon_opacity": "--urlbar-icon-fill-opacity",

View File

@@ -63,7 +63,7 @@
"toolbar_field_icon_opacity": "0.72",
"input_border_color": "rgba(0, 0, 0, .3)",
"zap_gradient": "linear-gradient(90deg, #9059FF 0%, #FF4AA2 52.08%, #FFBD4F 100%)",
"zen_main_browser_background": "radial-gradient(346.69% 165.29% at 50% 50%, rgba(63, 94, 204, 0.50) 0%, rgba(249, 249, 249, 0.23) 100%), #CBD0DF"
"zen_main_browser_background": "radial-gradient(ellipse, var(--zen-browser-gradient-base, #1B1E27) 20%, rgb(255, 255, 255) 100%)"
}
},

View File

@@ -61,7 +61,7 @@
"panel_active": "color-mix(in srgb, currentColor 14%, transparent)",
"toolbar_field_icon_opacity": "1",
"zap_gradient": "linear-gradient(90deg, #9059FF 0%, #FF4AA2 52.08%, #FFBD4F 100%)",
"zen_main_browser_background": "radial-gradient(236.2% 84.03% at 50% 50%, rgba(68, 0, 255, 0.20) 0%, rgba(63, 0, 0, 0.20) 100%), var(--zen-colors-primary, #1B1E27)"
"zen_main_browser_background": "radial-gradient(ellipse, var(--zen-browser-gradient-base, #1B1E27) 20%, #1b1b1b 100%)"
}
},

View File

@@ -1,5 +1,5 @@
diff --git a/browser/themes/addons/light/manifest.json b/browser/themes/addons/light/manifest.json
index 7385970fa8e3ff9659b72cfb238003958220fb0d..be4d385cf4520a2cad437225e5fb31335bbc3091 100644
index d490f8f08d203ded55b65fe1a19be105b61ee6c0..eb4349e939b979b3a4d7c525ee0c0f9a53079d4a 100644
--- a/browser/themes/addons/light/manifest.json
+++ b/browser/themes/addons/light/manifest.json
@@ -7,10 +7,10 @@
@@ -16,45 +16,20 @@ index 7385970fa8e3ff9659b72cfb238003958220fb0d..be4d385cf4520a2cad437225e5fb3133
"icons": { "32": "icon.svg" },
@@ -42,12 +42,12 @@
"button": "rgba(207,207,216,.33)",
"button_hover": "rgba(207,207,216,.66)",
"button_active": "rgb(207,207,216)",
- "button_primary": "rgb(0, 97, 224)",
- "button_primary_hover": "rgb(2, 80, 187)",
- "button_primary_active": "rgb(5, 62, 148)",
- "button_primary_color": "rgb(251, 251, 254)",
+ "button_primary": "#000",
+ "button_primary_hover": "rgb(31, 31, 31)",
+ "button_primary_active": "rgb(207,207,216)",
+ "button_primary_color": "#fff",
"input_color": "rgb(21,20,26)",
- "input_background": "rgb(255,255,255)",
+ "input_background": "#f0f0f4",
"urlbar_popup_hover": "rgb(240,240,244)",
"urlbar_popup_separator": "rgb(240,240,244)",
"appmenu_update_icon_color": "#2AC3A2",
@@ -57,12 +57,13 @@
},
"properties": {
"color_scheme": "light",
- "panel_hover": "color-mix(in srgb, currentColor 12%, transparent)",
+ "panel_hover": "color-mix(in srgb, currentColor 10%, transparent)",
@@ -59,7 +59,8 @@
"panel_active": "color-mix(in srgb, currentColor 20%, transparent)",
"panel_active_darker": "color-mix(in srgb, currentColor 27%, transparent)",
"toolbar_field_icon_opacity": "0.72",
- "input_border_color": "color-mix(in srgb, currentColor 41%, transparent)",
- "zap_gradient": "linear-gradient(90deg, #9059FF 0%, #FF4AA2 52.08%, #FFBD4F 100%)"
+ "input_border_color": "rgba(0, 0, 0, .3)",
+ "zap_gradient": "linear-gradient(90deg, #9059FF 0%, #FF4AA2 52.08%, #FFBD4F 100%)",
+ "zen_main_browser_background": "var(--zen-themed-toolbar-bg)"
}
},
@@ -93,7 +94,8 @@
@@ -86,7 +87,8 @@
"panel_active": "--arrowpanel-dimmed-further",
"panel_active_darker": "--panel-item-active-bgcolor",
"toolbar_field_icon_opacity": "--urlbar-icon-fill-opacity",
"input_border_color": "--input-border-color",
- "zap_gradient": "--panel-separator-zap-gradient"
+ "zap_gradient": "--panel-separator-zap-gradient",
+ "zen_main_browser_background": "--zen-main-browser-background"

View File

@@ -1,8 +1,8 @@
diff --git a/browser/themes/shared/browser-shared.css b/browser/themes/shared/browser-shared.css
index 9e513830a9d9eeebe55cf6ab565b0575a943b088..05c8b716c0642f0ecebc47fe2759bc43474b6391 100644
index 61119b7564d37e55f49dab7e6e14faafb4baa298..bcaad1a231cc839579ed209307c8e95cfb4c37de 100644
--- a/browser/themes/shared/browser-shared.css
+++ b/browser/themes/shared/browser-shared.css
@@ -25,6 +25,8 @@
@@ -27,6 +27,8 @@
@import url("chrome://browser/skin/UITour.css");
@import url("chrome://browser/skin/formautofill-notification.css");
@@ -10,8 +10,8 @@ index 9e513830a9d9eeebe55cf6ab565b0575a943b088..05c8b716c0642f0ecebc47fe2759bc43
+
@namespace html url("http://www.w3.org/1999/xhtml");
:root {
@@ -49,7 +51,7 @@
:root,
@@ -75,7 +77,7 @@ body {
--short-notification-gradient: #9059FF;
--button-bgcolor: color-mix(in srgb, currentColor 13%, transparent);
@@ -20,23 +20,25 @@ index 9e513830a9d9eeebe55cf6ab565b0575a943b088..05c8b716c0642f0ecebc47fe2759bc43
--button-active-bgcolor: color-mix(in srgb, currentColor 30%, transparent);
--button-color: currentColor;
--button-primary-bgcolor: AccentColor;
@@ -145,9 +147,6 @@
#navigator-toolbox {
@@ -181,7 +183,6 @@ body {
appearance: none;
- /* Toolbar / content area border */
/* Toolbar / content area border */
- border-bottom: 0.01px solid var(--chrome-content-separator-color);
-
background-color: var(--toolbox-non-lwt-bgcolor);
color: var(--toolbox-non-lwt-textcolor);
@@ -155,33 +154,8 @@
@@ -190,37 +191,13 @@ body {
transition: background-color var(--inactive-window-transition);
&:-moz-window-inactive {
- background-color: var(--toolbox-non-lwt-bgcolor-inactive);
color: var(--toolbox-non-lwt-textcolor-inactive);
}
&[fullscreenShouldAnimate] {
transition: 0.8s margin-top ease-out;
}
-
- :root[customizing] & {
- border-bottom-style: none;
@@ -61,6 +63,7 @@ index 9e513830a9d9eeebe55cf6ab565b0575a943b088..05c8b716c0642f0ecebc47fe2759bc43
- background-repeat: no-repeat, var(--lwt-background-tiling);
- background-position: right top, var(--lwt-background-alignment);
- }
+
}
.browser-toolbar {

View File

@@ -1,8 +1,8 @@
diff --git a/browser/themes/shared/customizableui/panelUI-shared.css b/browser/themes/shared/customizableui/panelUI-shared.css
index 4f282b9d5a5a3269268ae22f1702c7a6e8238375..d6e8e6cee7166f0eea99f260cca382eeece6684d 100644
index e4409ac75f6ee794d400559b0b01ae30904d01bc..44d4e648aa5aac17b82e0e1f80c7a953c2923ebc 100644
--- a/browser/themes/shared/customizableui/panelUI-shared.css
+++ b/browser/themes/shared/customizableui/panelUI-shared.css
@@ -717,8 +717,8 @@ toolbarbutton[constrain-size="true"][cui-areatype="panel"] > .toolbarbutton-badg
@@ -720,15 +720,15 @@ toolbarbutton[constrain-size="true"][cui-areatype="panel"] > .toolbarbutton-badg
/* Firefox Account Toolbar Panel */
#fxa-avatar-image {
@@ -13,3 +13,11 @@ index 4f282b9d5a5a3269268ae22f1702c7a6e8238375..d6e8e6cee7166f0eea99f260cca382ee
}
:root {
--avatar-image-url: url(chrome://browser/skin/fxa/avatar.svg);
&[fxastatus="not_configured"] {
- --avatar-image-url: url(chrome://browser/skin/fxa/avatar-empty.svg);
+ --avatar-image-url: var(--zen-avatar-image-url);
}
&:not([fxatoolbarmenu]) #fxa-toolbar-menu-button {

View File

@@ -1,17 +1,29 @@
diff --git a/browser/themes/shared/identity-block/identity-block.css b/browser/themes/shared/identity-block/identity-block.css
index 39cf7c917aa8807d491cc6a3702e398569681022..6e6942d97596540b0823c7934062ad2d63fa415c 100644
index 39ae2b00791a7bfd875961de60736612f08892ae..03fe5e42f34ad985f0e04ef46b834a9d223585ee 100644
--- a/browser/themes/shared/identity-block/identity-block.css
+++ b/browser/themes/shared/identity-block/identity-block.css
@@ -65,10 +65,10 @@
@@ -64,8 +64,9 @@
}
#identity-box[pageproxystate="valid"].notSecureText > .identity-box-button,
-#identity-box[pageproxystate="valid"].chromeUI > .identity-box-button,
#identity-box[pageproxystate="valid"]:is(.notSecureText, .chromeUI, .extensionPage) > .identity-box-button,
+#identity-box[pageproxystate="valid"] > .identity-box-button,
#identity-box[pageproxystate="valid"].extensionPage > .identity-box-button,
#urlbar-label-box {
- background-color: var(--urlbar-box-bgcolor);
+ background-color: light-dark(white, rgb(66, 65, 77));
color: var(--urlbar-box-text-color);
padding-inline: 8px;
border-radius: var(--urlbar-icon-border-radius);
@@ -154,11 +155,11 @@
}
#urlbar:not(.searchButton) > .urlbar-input-container > #identity-box[pageproxystate="invalid"] #identity-icon {
- list-style-image: url(chrome://global/skin/icons/search-glass.svg);
+ list-style-image: url(chrome://global/skin/icons/search-glass.svg) !important;
}
#urlbar[actiontype="extension"] > .urlbar-input-container > #identity-box #identity-icon {
- list-style-image: url(chrome://mozapps/skin/extensions/extension.svg);
+ list-style-image: url(chrome://mozapps/skin/extensions/extension.svg) !important;
}
#identity-box[pageproxystate="valid"].extensionPage #identity-icon {

View File

@@ -185,3 +185,9 @@ groupbox h2 {
position: absolute;
background: var(--zen-colors-tertiary);
}
/* Workspace */
#category-zen-workspaces > .category-icon {
list-style-image: url("chrome://browser/skin/window.svg");
}

View File

@@ -1,9 +1,9 @@
diff --git a/browser/components/tabpreview/tabpreview.css b/browser/components/tabpreview/tabpreview.css
index e978266e5da72f3051d5455d7a3f2867a88648c5..c57e844107ea6e99b406422496e9b41511089594 100644
--- a/browser/components/tabpreview/tabpreview.css
+++ b/browser/components/tabpreview/tabpreview.css
@@ -42,3 +42,24 @@
width: 100%;
diff --git a/browser/themes/shared/tabbrowser/tab-hover-preview.css b/browser/themes/shared/tabbrowser/tab-hover-preview.css
index 5df2561b9f0e5497a596e4e261ceaac30778e754..cbea9912e7ae15f7a277ecbdcd681cc4e7a4da72 100644
--- a/browser/themes/shared/tabbrowser/tab-hover-preview.css
+++ b/browser/themes/shared/tabbrowser/tab-hover-preview.css
@@ -44,3 +44,24 @@
display: block;
}
}
+
@@ -27,4 +27,3 @@ index e978266e5da72f3051d5455d7a3f2867a88648c5..c57e844107ea6e99b406422496e9b415
+.tab-preview-thumbnail-container canvas {
+ border-top: 1px solid var(--zen-border-color);
+}
\ No newline at end of file

View File

@@ -0,0 +1,66 @@
diff --git a/browser/themes/shared/tabbrowser/tabs.css b/browser/themes/shared/tabbrowser/tabs.css
index 9a915ff442cc7f01ddec3fcea931c21e210cac92..19126b25ac7a63fe193628dd11a93507bd4bc63a 100644
--- a/browser/themes/shared/tabbrowser/tabs.css
+++ b/browser/themes/shared/tabbrowser/tabs.css
@@ -39,7 +39,7 @@
#tabbrowser-tabs {
--tab-min-width: 76px;
- --tab-loading-fill: #0A84FF;
+ --tab-loading-fill: var(--zen-primary-color);
--tab-overflow-pinned-tabs-width: 0px;
padding-inline: var(--tab-overflow-pinned-tabs-width) 0;
/* Use a bigger flex value than the searchbar to prevent it from
@@ -103,7 +103,7 @@
* (we only have 2px padding in the inline direction) */
overflow-clip-margin: 2px;
- &:not([pinned]) {
+ & {
flex: 100 100;
max-width: 225px;
min-width: var(--tab-min-width);
@@ -126,7 +126,7 @@
flex-shrink: 0;
#tabbrowser-tabs[positionpinnedtabs] > #tabbrowser-arrowscrollbox > & {
- position: absolute !important;
+ /*position: absolute !important;*/
display: block;
}
}
@@ -360,7 +360,7 @@
&[selected]:not([src], [pinned], [crashed], [pictureinpicture]),
&:not([src], [pinned], [crashed], [sharing], [pictureinpicture]),
&[busy] {
- display: none;
+ /*display: none;*/
}
}
@@ -627,7 +627,7 @@
#tabbrowser-tabs[haspinnedtabs]:not([positionpinnedtabs]) > #tabbrowser-arrowscrollbox > .tabbrowser-tab:nth-child(1 of :not([pinned], [hidden])) {
/* Add a gap between the last pinned tab and the first visible tab */
- margin-inline-start: 12px !important; /* .tabbrowser-tab sets margin: 0 !important; */
+ margin-inline-start: auto !important; /* .tabbrowser-tab sets margin: 0 !important; */
}
.tab-label[attention]:not([selected]) {
@@ -737,6 +737,7 @@
.titlebar-spacer[type="pre-tabs"],
.titlebar-spacer[type="post-tabs"] {
width: 40px;
+ display: none !important;
}
@media (max-width: 500px) {
@@ -752,7 +753,7 @@
toolbarbutton:not(#firefox-view-button),
toolbarpaletteitem:not(#wrapper-firefox-view-button)
) + #tabbrowser-tabs {
- border-inline-start: 1px solid color-mix(in srgb, currentColor 25%, transparent);
+ border-inline-start: transparent;
padding-inline-start: calc(var(--tab-overflow-pinned-tabs-width) + 2px);
margin-inline-start: 2px;
}

View File

@@ -1,30 +0,0 @@
diff --git a/browser/themes/shared/tabs.css b/browser/themes/shared/tabs.css
index eb92f71e5942a19618fd74492354de78ac03bacf..28d23667991c9feff7a379acaa5f7c7928fb14cf 100644
--- a/browser/themes/shared/tabs.css
+++ b/browser/themes/shared/tabs.css
@@ -67,7 +67,7 @@
#tabbrowser-tabs {
--tab-min-width: 76px;
- --tab-loading-fill: #0A84FF;
+ --tab-loading-fill: var(--zen-primary-color);
--tab-overflow-pinned-tabs-width: 0px;
padding-inline: var(--tab-overflow-pinned-tabs-width) 0;
/* Use a bigger flex value than the searchbar to prevent it from
@@ -618,6 +618,7 @@
.titlebar-spacer[type="pre-tabs"],
.titlebar-spacer[type="post-tabs"] {
width: 40px;
+ display: none !important;
}
@media (max-width: 500px) {
@@ -633,7 +634,7 @@
toolbarbutton:not(#firefox-view-button),
toolbarpaletteitem:not(#wrapper-firefox-view-button)
) + #tabbrowser-tabs {
- border-inline-start: 1px solid color-mix(in srgb, currentColor 25%, transparent);
+ border-inline-start: transparent;
padding-inline-start: calc(var(--tab-overflow-pinned-tabs-width) + 2px);
margin-inline-start: 2px;
}

View File

@@ -1,13 +0,0 @@
diff --git a/browser/themes/shared/toolbarbuttons.css b/browser/themes/shared/toolbarbuttons.css
index f535fba9df5e7595c974e45dd95849d05736957f..19437c90e0f438384e2a223feff99bc93a441684 100644
--- a/browser/themes/shared/toolbarbuttons.css
+++ b/browser/themes/shared/toolbarbuttons.css
@@ -47,7 +47,7 @@
> .toolbarbutton-icon,
> .toolbarbutton-badge-stack > .toolbarbutton-icon {
- width: 16px;
+ width: 20px;
}
}

View File

@@ -1,22 +1,12 @@
diff --git a/browser/themes/shared/urlbar-searchbar.css b/browser/themes/shared/urlbar-searchbar.css
index b5684c5f6f4b932070ef2bc53750504791f7f3c3..c3ffdb99adbb4a331967b93181d536dad1a41488 100644
index 41798f42cfb365116926af97a070dce3ebf6e443..75d1cda0c7938ba36f694e0f770db1820acd01ca 100644
--- a/browser/themes/shared/urlbar-searchbar.css
+++ b/browser/themes/shared/urlbar-searchbar.css
@@ -59,7 +59,7 @@
#urlbar-background,
#searchbar {
- background-color: var(--toolbar-field-background-color);
+ background-color: var(--zen-urlbar-background);
background-clip: border-box;
border: 1px solid var(--toolbar-field-border-color);
border-radius: var(--toolbarbutton-border-radius);
@@ -92,7 +92,7 @@
--toolbar-field-focus-border-color is set equal to --focus-outline-color
on :root, but LWT themes can override this value. */
outline-color: var(--toolbar-field-focus-border-color);
- border-color: transparent;
+ /*border-color: transparent;*/
}
#urlbar[focused="true"] > #urlbar-background,
@@ -19,6 +19,7 @@
#urlbar[breakout-extend] > .urlbar-input-container > #urlbar-label-box > #urlbar-label-search-mode,
.urlbar-input-container[pageproxystate=invalid] > #page-action-buttons > .urlbar-page-action,
#identity-box.chromeUI ~ #page-action-buttons > .urlbar-page-action:not(#star-button-box),
+#urlbar-input-container[pageproxystate=invalid] > #page-action-buttons > .urlbar-page-action:not(#zen-split-views-box),
#urlbar[usertyping] > .urlbar-input-container > #page-action-buttons > #urlbar-zoom-button,
#urlbar:not([usertyping]) > .urlbar-input-container > .urlbar-go-button,
#urlbar:not([focused]) > .urlbar-input-container > .urlbar-go-button {

View File

@@ -42,9 +42,11 @@
/* URL and tool bars */
#urlbar {
--toolbarbutton-border-radius: 999px;
border: transparent;
overflow: hidden;
padding: 1px;
border-radius: var(--toolbarbutton-border-radius);
}
#zen-website-and-native-separator {
@@ -80,12 +82,16 @@
outline-color: none !important;
}
#urlbar, #urlbar .urlbar-page-action,
#urlbar .urlbar-page-action,
#urlbar #tracking-protection-icon-container,
#urlbar:not([extend="true"]) #identity-box:not(.chromeUI) #identity-icon-box {
border-radius: 999px;
}
#urlbar[breakout-extend="true"] {
--toolbarbutton-border-radius: 6px;
}
#identity-icon-label {
padding-inline-start: 8px !important;
}
@@ -94,7 +100,7 @@
border-radius: 5px !important;
}
#urlbar:not([focused="true"]) #identity-box.chromeUI #identity-icon-box {
#urlbar:not([breakout-extend="true"]) #identity-box.chromeUI #identity-icon-box {
border-radius: 20px 10px 10px 20px !important;
}
@@ -139,7 +145,7 @@
display: flex !important;
}
toolbar .toolbarbutton-1 {
toolbar .toolbarbutton-1:not(.unified-extensions-item-action-button) {
& > .toolbarbutton-icon,
& > .toolbarbutton-badge-stack {
width: calc(2 * var(--toolbarbutton-inner-padding) + 18px) !important;
@@ -324,15 +330,37 @@ toolbarbutton#scrollbutton-up {
display: none;
}
.tabbrowser-tab[pinned]:last-of-type {
/** Todo: add a separator */
}
.tabbrowser-tab:is([multiselected="true"], [selected]) {
/*border-color: light-dark(var(--zen-colors-border), rgba(255, 255, 255, 0.15));*/
background: var(--toolbarbutton-hover-background);
}
.tabbrowser-tab {
margin-inline-start: 0 !important;
margin: 0 auto !important;
}
.tabbrowser-tab[pinned] {
position: relative !important;
}
.tabbrowser-tab:nth-last-child(1 of [pinned]) {
margin-bottom: 5px !important;
position: relative;
overflow: visible;
&::after {
content: '';
position: absolute;
bottom: -5px;
left: 0;
width: 100%;
height: 1.5px;
border-radius: 1px;
background: var(--zen-colors-border);
}
}
.tab-close-button {
position: absolute;
display: none;
@@ -372,6 +400,7 @@ toolbarbutton#scrollbutton-up {
.tab-icon-overlay {
margin-inline-end: 0 !important;
display: none !important; /* TODO: fix this */
}
/*#tabbrowser-arrowscrollbox {
@@ -397,10 +426,6 @@ toolbarbutton#scrollbutton-up {
--focus-outline-color: var(--zen-primary-btn-color) !important;
}
menuseparator {
--panel-separator-color: var(--zen-colors-secondary) !important;
}
/** Specific dialogs override */
#identity-popup-multiView toolbarseparator,
@@ -448,6 +473,7 @@ panelmultiview {
#tabbrowser-tabbox #tabbrowser-tabpanels .browserStack > browser {
border-radius: var(--zen-browser-border-radius);
clip-path: inset(0px 0px 0px round var(--zen-browser-border-radius) 0) !important;
}
#nav-bar {
@@ -465,53 +491,76 @@ panelmultiview {
@media (-moz-bool-pref: "zen.view.compact") {
#navigator-toolbox,
#zen-appcontent-navbar-container {
position: absolute;
#zen-appcontent-navbar-container #nav-bar {
z-index: 1;
overflow: hidden;
opacity: 0;
transition: .2s;
}
#navigator-toolbox {
width: 1px;
max-width: 1px;
min-width: 0;
height: 100%;
}
#zen-appcontent-navbar-container {
#zen-appcontent-navbar-container #nav-bar {
min-height: 0;
height: 1px;
width: 100%;
}
#navigator-toolbox:hover,
#navigator-toolbox:has([open="true"]) {
width: unset;
overflow: visible;
opacity: 1;
}
#zen-appcontent-navbar-container:hover,
#zen-appcontent-navbar-container:has([open="true"]) {
height: unset;
background: var(--zen-themed-toolbar-bg) !important;
overflow: visible;
border-bottom: var(--zen-appcontent-border) !important;
opacity: 1;
}
#navigator-toolbox:hover #titlebar,
#navigator-toolbox:has([open="true"]) #titlebar {
background: var(--zen-themed-toolbar-bg) !important;
border-right: var(--zen-appcontent-border) !important;
padding: 0 5px;
max-height: 1px;
}
#tabbrowser-tabbox #tabbrowser-tabpanels .browserSidebarContainer {
margin: 10px !important;
margin-right: 0 !important;
margin-top: 0 !important;
width: -moz-available;
}
:root:has(
:is(
#navigator-toolbox:hover,
#navigator-toolbox *[open="true"]:not(tab),
#zen-appcontent-navbar-container:hover,
#zen-appcontent-navbar-container *[open="true"]:not(tab)
)
) {
& #zen-appcontent-navbar-container #nav-bar,
& #navigator-toolbox {
max-width: unset;
max-height: unset;
overflow: visible;
opacity: 1;
background: transparent !important;
}
& #navigator-toolbox {
border-right: var(--zen-appcontent-border) !important;
width: unset;
padding: 5px;
}
& #zen-appcontent-navbar-container #nav-bar {
border-bottom: var(--zen-appcontent-border) !important;
}
& #tabbrowser-tabbox #tabbrowser-tabpanels .browserSidebarContainer {
margin-top: 10px !important;
}
}
}
:root:is([chromehidden~="location"],[chromehidden~="toolbar"]) {
--zen-browser-border-radius: 0 !important;
& #navigator-toolbox {
display: none;
}
& #tabbrowser-tabpanels {
margin: 0 !important;
& .browserSidebarContainer {
margin: 0 !important;
}
}
}
/* Screenshots */
@@ -522,3 +571,31 @@ panelmultiview {
right: 1.5%;
}
/* Watermark */
#zen-watermark {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: var(--zen-main-browser-background);
display: flex;
justify-content: center;
align-items: center;
z-index: 9999;
}
#zen-watermark image {
opacity: .2;
filter: grayscale(100%);
width: 200px;
height: 200px;
}
#zen-watermark[hidden="true"] {
transition: 0.6s;
transition-delay: 1.5s;
opacity: 0;
pointer-events: none;
}

View File

@@ -81,7 +81,8 @@
}
#PanelUI-menu-button,
#appMenu-more-button2 {
#appMenu-more-button2,
#zen-workspace-actions-menu-icon {
list-style-image: url("menu.svg") !important;
}
@@ -153,7 +154,8 @@
#TabsToolbar #new-tab-button,
#appMenu-zoomEnlarge-button2,
#PanelUI-zen-profiles-newProfile,
#zen-sidebar-add-panel-button {
#zen-sidebar-add-panel-button,
#PanelUI-zen-workspaces-new image {
list-style-image: url("plus.svg") !important;
}
@@ -667,7 +669,8 @@ menuitem[id="placesContext_deleteFolder"],
menuitem[id="placesContext_delete"],
menuitem[id="placesContext_delete_history"],
menuitem[id="placesContext_deleteHost"],
#context_zenDeleteWebPanel {
#context_zenDeleteWebPanel,
#context_zenDeleteWorkspace {
--menu-image: url("edit-delete.svg");
}

View File

@@ -122,21 +122,35 @@
}
#PanelUI-zen-profiles-managePrfs {
#PanelUI-zen-profiles-actions {
position: absolute;
top: 10px;
right: 10px;
border-radius: 5px !important;
padding: 5px !important;
border-radius: 10px !important;
padding: 1px 10px !important;
transition: .1s;
color: light-dark(white, black);
background: light-dark(rgba(255, 255, 255, 0.1), rgba(0, 0, 0, 0.1));
}
#PanelUI-zen-profiles-managePrfs:hover {
background: var(--panel-item-hover-bgcolor);
}
#PanelUI-zen-profiles-managePrfs label {
#PanelUI-zen-profiles-actions toolbarbutton {
cursor: pointer;
padding: 0;
}
#PanelUI-zen-profiles-actions toolbarbutton .toolbarbutton-icon {
width: 14px !important;
}
#PanelUI-zen-profiles-actions toolbarbutton:not(:first-child) {
margin-left: 10px;
}
#PanelUI-zen-profiles-actions toolbarbutton label {
display: none !important;
}
@@ -220,3 +234,126 @@
#zenSplitViewModifierViewDefault .zen-split-view-modifier-preview.grid box:nth-child(3) {
grid-area: c;
}
/* Workspaces */
#zen-workspaces-button {
border: 1px solid var(--zen-colors-border);
border-radius: 50px;
height: calc(var(--zen-sidebar-action-button-width) - 10px) !important;
margin-bottom: 5px !important;
justify-content: center;
align-items: center;
display: flex;
font-weight: 600;
}
#PanelUI-zen-workspaces {
--panel-width: 320px;
width: var(--panel-width);
min-height: 200px;
}
#PanelUI-zen-workspaces > panelmultiview {
align-items: flex-start;
}
#PanelUI-zen-workspaces panelmultiview panelview {
position: relative;
width: 100%;
overflow: hidden !important;
}
#PanelUI-zen-workspaces-create-input {
margin-top: 10px;
}
#PanelUI-zen-workspaces-list {
display: flex;
flex-direction: column;
}
#PanelUI-zen-workspaces .panel-viewcontainer,
#PanelUI-zen-workspaces .panel-viewstack {
width: 100%;
}
#PanelUI-zen-workspaces-current-info toolbarbutton:last-child {
margin-bottom: 0 !important;
}
#PanelUI-zen-workspaces-list toolbarbutton,
#PanelUI-zen-workspaces-current-info toolbarbutton {
padding: 5px;
border-radius: 7px;
margin-left: 0 !important;
margin-right: 0 !important;
display: flex;
align-items: center;
&:first-child {
margin-top: 10px;
}
& .zen-workspace-icon {
width: 30px;
height: 30px;
border-radius: 7px;
margin-right: 10px;
border: 1px solid var(--zen-colors-border);
display: flex;
justify-content: center;
align-items: center;
font-weight: 600;
}
& .zen-workspace-name {
font-weight: 600;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
& .zen-workspace-actions {
display: none;
margin: 0;
margin-left: auto !important;
}
&:hover .zen-workspace-actions,
& .zen-workspace-actions[active="true"] {
display: flex;
}
}
#PanelUI-zen-workspaces-current-info toolbarbutton:first-child {
margin-bottom: 10px;
margin-top: 5px;
}
#PanelUI-zen-workspaces-view vbox:nth-child(2) {
margin-top: 10px;
}
#PanelUI-zen-workspaces-new {
margin-left: auto;
min-height: 1px !important;
padding: 3px;
border-radius: 4px;
width: 20px;
height: 20px;
}
#PanelUI-zen-workspaces-create-footer {
padding-bottom: 0 !important;
margin-top: 20px;
margin-left: 0;
margin-bottom: 0 !important;
width: 100%;
}
#PanelUI-zen-workspaces-create-footer button[default="true"] {
width: 100%;
}

View File

@@ -163,7 +163,6 @@
display: flex;
flex-direction: column;
padding: 0 3px;
height: 100%;
position: relative;
background: transparent !important;
align-items: center;

View File

@@ -0,0 +1,11 @@
diff --git a/build/application.ini.in b/build/application.ini.in
index 6df13230a45b2a86356f4e5a7b189c46f53e44cc..47fc729cba7d9cb612bfa0297a24644925ab53af 100644
--- a/build/application.ini.in
+++ b/build/application.ini.in
@@ -52,5 +52,5 @@ ServerURL=@MOZ_CRASHREPORTER_URL@/submit?id=@MOZ_APP_ID@&version=@MOZ_APP_VERSIO
#if MOZ_UPDATER
[AppUpdate]
-URL=https://@MOZ_APPUPDATE_HOST@/update/6/%PRODUCT%/%VERSION%/%BUILD_ID%/%BUILD_TARGET%/%LOCALE%/%CHANNEL%/%OS_VERSION%/%SYSTEM_CAPABILITIES%/%DISTRIBUTION%/%DISTRIBUTION_VERSION%/update.xml
+URL=https://@MOZ_APPUPDATE_HOST@/updates/browser/%BUILD_TARGET%/%CHANNEL%/update.xml
#endif

13
src/build/moz-build.patch Normal file
View File

@@ -0,0 +1,13 @@
diff --git a/build/moz.build b/build/moz.build
index 7bf9c501db06d38f924c26372d4243d448af8d81..6042ccfcbfb838ffefe078a72eee00a83fb252f6 100644
--- a/build/moz.build
+++ b/build/moz.build
@@ -91,7 +91,7 @@ if CONFIG["MOZ_APP_BASENAME"]:
if CONFIG[var]:
appini_defines[var] = True
- appini_defines["MOZ_APPUPDATE_HOST"] = "aus5.mozilla.org"
+ appini_defines["MOZ_APPUPDATE_HOST"] = "zen-updates.vercel.app"
if CONFIG["MOZ_APPUPDATE_HOST"]:
appini_defines["MOZ_APPUPDATE_HOST"] = CONFIG["MOZ_APPUPDATE_HOST"]

View File

@@ -0,0 +1,18 @@
diff --git a/gfx/wr/webrender/src/picture.rs b/gfx/wr/webrender/src/picture.rs
index f22bcadd0624d9a22f5c3fa318d7795e102b890f..68d1eb55abde2a9b5779b1d07c5f111f46f177a8 100644
--- a/gfx/wr/webrender/src/picture.rs
+++ b/gfx/wr/webrender/src/picture.rs
@@ -7449,7 +7449,12 @@ fn get_relative_scale_offset(
CoordinateSpaceMapping::Local => ScaleOffset::identity(),
CoordinateSpaceMapping::ScaleOffset(scale_offset) => scale_offset,
CoordinateSpaceMapping::Transform(m) => {
- ScaleOffset::from_transform(&m).expect("bug: pictures caches don't support complex transforms")
+ // Temporary fix when opening extensions (#34)
+ // TODO: Look more into this
+ ScaleOffset {
+ scale: Vector2D::new(m.m11, m.m22),
+ offset: Vector2D::new(m.m41, m.m42),
+ }
}
};

View File

@@ -13,7 +13,7 @@
toolbox#navigator-toolbox,
#browser {
background: transparent !important;
}
}
#browser {
width: 100%;

View File

@@ -0,0 +1,34 @@
diff --git a/toolkit/locales/en-US/toolkit/branding/brandings.ftl b/toolkit/locales/en-US/toolkit/branding/brandings.ftl
index cc95fbc3b8e1123b6bf3d0fb4cd35a456e413da4..9a090c6a238bdeada9e22514b21bd2b9d39a2b88 100644
--- a/toolkit/locales/en-US/toolkit/branding/brandings.ftl
+++ b/toolkit/locales/en-US/toolkit/branding/brandings.ftl
@@ -20,10 +20,10 @@
-mozmonitor-brand-name = Mozilla Monitor
-pocket-brand-name = Pocket
-send-brand-name = Firefox Send
--screenshots-brand-name = Firefox Screenshots
+-screenshots-brand-name = Zen Screenshots
-mozilla-vpn-brand-name = Mozilla VPN
--profiler-brand-name = Firefox Profiler
--translations-brand-name = Firefox Translations
+-profiler-brand-name = Zen Profiler
+-translations-brand-name = Zen Translations
-focus-brand-name = Firefox Focus
-relay-brand-name = Firefox Relay
-relay-brand-short-name = Relay
@@ -37,12 +37,12 @@
# “Suggest” can be localized, “Firefox” must be treated as a brand
# and kept in English.
--firefox-suggest-brand-name = Firefox Suggest
+-firefox-suggest-brand-name = Zen Suggest
# ”Home" can be localized, “Firefox” must be treated as a brand
# and kept in English.
--firefox-home-brand-name = Firefox Home
+-firefox-home-brand-name = Zen Home
# View" can be localized, “Firefox” must be treated as a brand
# and kept in English.
--firefoxview-brand-name = Firefox View
+-firefoxview-brand-name = Zen View

View File

@@ -1,5 +1,5 @@
diff --git a/toolkit/themes/shared/in-content/common-shared.css b/toolkit/themes/shared/in-content/common-shared.css
index c8f4f3efd231d007e024f039170efd58a8a9de86..f5e3296d20580afc0973cc87685d2ac35b6cfc10 100644
index 542e38159dde876566f520f7d45d5387c1982d34..92705331fa12d88e9091310c1f527562931e7132 100644
--- a/toolkit/themes/shared/in-content/common-shared.css
+++ b/toolkit/themes/shared/in-content/common-shared.css
@@ -5,6 +5,8 @@
@@ -20,3 +20,13 @@ index c8f4f3efd231d007e024f039170efd58a8a9de86..f5e3296d20580afc0973cc87685d2ac3
--dialog-warning-text-color: var(--red-60);
@@ -791,7 +793,8 @@ html|*#categories > html|*.category:dir(rtl) {
@media not (forced-colors) {
#categories > .category[selected],
#categories > .category.selected {
- color: var(--in-content-accent-color);
+ /*color: var(--in-content-accent-color);*/
+ opacity: .7;
}
#categories > .category[selected]:not(:hover) {

View File

@@ -81,6 +81,8 @@
--urlbar-box-bgcolor: light-dark(white, rgb(66, 65, 77)) !important;
--zen-input-border-color: light-dark(rgb(204, 204, 204), rgb(66, 65, 77)) !important;
--zen-browser-gradient-base: color-mix(in srgb, var(--zen-primary-color) 50%, white 50%);
/* TODO: Support dark themes! */
}
@@ -101,7 +103,8 @@
--zen-dialog-background: color-mix(in srgb, var(--zen-primary-color) 10%, black 90%);
--zen-urlbar-background: color-mix(in srgb, var(--zen-primary-color) 8%, black 92%);
--zen-browser-gradient-base: color-mix(in srgb, var(--zen-primary-color) 30%, black 70%);
}
}

View File

@@ -36,8 +36,8 @@
--uc-contextmenu-separator-vertical: calc(4px - var(--uc-contextmenu-menuitem-border-width));
--uc-contextmenu-separator-horizontal: 0;
--panel-separator-color: var(--zen-colors-secondary) !important;
--zen-panel-separator-width: 2px;
--panel-separator-color: var(--zen-colors-border) !important;
--zen-panel-separator-width: 1px;
}
/* app menu */

View File

@@ -5,12 +5,10 @@
"binaryName": "zen",
"version": {
"product": "firefox",
"version": "127.0.2",
"displayVersion": "1.0.0"
"version": "128.0"
},
"buildOptions": {
"generateBranding": true,
"windowsUseSymbolicLinks": false
"generateBranding": true
},
"addons": {},
"brands": {
@@ -29,7 +27,7 @@
"brandShortName": "Zen Browser",
"brandFullName": "Zen Browser",
"release": {
"displayVersion": "0.0.0-a.0",
"displayVersion": "1.0.0-a.4",
"github": {
"repo": "zen-browser/desktop"
},
@@ -46,5 +44,6 @@
".*\\.json"
],
"licenseType": "MPL-2.0"
}
},
"updateHostname": "zen-updates.vercel.app"
}