Compare commits
374 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
73dea3ad96 | ||
![]() |
2171635145 | ||
![]() |
935fcd9153 | ||
![]() |
a9bfa4dd26 | ||
![]() |
2dc59efd99 | ||
![]() |
b1a3f97592 | ||
![]() |
3bd2d169b4 | ||
![]() |
fc8a501e73 | ||
![]() |
32a3ad96ee | ||
![]() |
3f684745ee | ||
![]() |
13f1daf465 | ||
![]() |
28c84d971d | ||
![]() |
9251970257 | ||
![]() |
a3fd8d17ba | ||
![]() |
17fea1b017 | ||
![]() |
b11c0d8700 | ||
![]() |
86aca3144f | ||
![]() |
11890a70c0 | ||
![]() |
e9f727ceba | ||
![]() |
5342c408fa | ||
![]() |
b494f661b2 | ||
![]() |
5020640e8e | ||
![]() |
48773b80f4 | ||
![]() |
e3edc10e95 | ||
![]() |
d5a4ce2331 | ||
![]() |
1bd4bcf93f | ||
![]() |
7b7f8a3f13 | ||
![]() |
81df7ea605 | ||
![]() |
2b56b9b97d | ||
![]() |
80027fbe48 | ||
![]() |
bd23758cd0 | ||
![]() |
1e464392c2 | ||
![]() |
96f31e8993 | ||
![]() |
01bdbfca4e | ||
![]() |
cc900885ca | ||
![]() |
a3213e069b | ||
![]() |
711fd0ab8b | ||
![]() |
05a6dcb416 | ||
![]() |
fd7d0bbd50 | ||
![]() |
bf96065340 | ||
![]() |
5985420dbb | ||
![]() |
2dd50cfe9a | ||
![]() |
c3a94c128f | ||
![]() |
b94c6c616a | ||
![]() |
9950ebd99e | ||
![]() |
1c4108d961 | ||
![]() |
1be4bbf08b | ||
![]() |
5ba50f2988 | ||
![]() |
e2618e5681 | ||
![]() |
3304259383 | ||
![]() |
d83df429bc | ||
![]() |
191ffd6efe | ||
![]() |
7e0e3f4145 | ||
![]() |
8b56897a11 | ||
![]() |
6a55fecca6 | ||
![]() |
f80a454261 | ||
![]() |
0f97a1cb4d | ||
![]() |
58e049a76f | ||
![]() |
dfa5013a79 | ||
![]() |
22dfa8daec | ||
![]() |
5c5608938d | ||
![]() |
cfd1ef11aa | ||
![]() |
b82530c890 | ||
![]() |
69e5bb552f | ||
![]() |
915350db3c | ||
![]() |
0dfb198609 | ||
![]() |
f1039324cf | ||
![]() |
3ce4bb8ecf | ||
![]() |
005398a20d | ||
![]() |
f45b1ec317 | ||
![]() |
4714cfcc84 | ||
![]() |
c221c8e242 | ||
![]() |
5464da21c4 | ||
![]() |
f2a783fbce | ||
![]() |
bb3ee371a1 | ||
![]() |
95e053562e | ||
![]() |
e5eba4496f | ||
![]() |
eba7459acf | ||
![]() |
7251dbd013 | ||
![]() |
43ffc452a2 | ||
![]() |
2027487c56 | ||
![]() |
77b96aed0a | ||
![]() |
dc5b9f00dd | ||
![]() |
67d2238660 | ||
![]() |
e018a6154b | ||
![]() |
32837dd742 | ||
![]() |
494c829b53 | ||
![]() |
cffdd29121 | ||
![]() |
17598a2725 | ||
![]() |
1433d594c7 | ||
![]() |
5ca89116e7 | ||
![]() |
67aa0dc732 | ||
![]() |
6f47ee3ffa | ||
![]() |
a54b93318a | ||
![]() |
18b267300c | ||
![]() |
de8e45a38f | ||
![]() |
230bb3da67 | ||
![]() |
825bfd91db | ||
![]() |
f2cab3dddb | ||
![]() |
6209250260 | ||
![]() |
68f9cc7e00 | ||
![]() |
141728ab83 | ||
![]() |
af697f69c8 | ||
![]() |
85b76f525c | ||
![]() |
1bcd4021dd | ||
![]() |
a946f31b50 | ||
![]() |
6e5611d1af | ||
![]() |
b5865dd326 | ||
![]() |
963ac294f4 | ||
![]() |
a7fe238a71 | ||
![]() |
9c6b0912a5 | ||
![]() |
26b633553c | ||
![]() |
51ccbb0c7c | ||
![]() |
93668396da | ||
![]() |
7355138f14 | ||
![]() |
1a761535df | ||
![]() |
2962f0741c | ||
![]() |
8de06906b8 | ||
![]() |
18a21bd85a | ||
![]() |
c630d4e479 | ||
![]() |
ab0ca282ff | ||
![]() |
f7970fb004 | ||
![]() |
5904663634 | ||
![]() |
358818b754 | ||
![]() |
4a287ad2eb | ||
![]() |
ffcf71f25d | ||
![]() |
3cf12e5b70 | ||
![]() |
32ecb73303 | ||
![]() |
24eb4a27cb | ||
![]() |
5a7bd1e868 | ||
![]() |
c6ec84444d | ||
![]() |
3044b44967 | ||
![]() |
2384b32a08 | ||
![]() |
350d72033b | ||
![]() |
5d9b8b7244 | ||
![]() |
006ab63b39 | ||
![]() |
4b54e4cfb5 | ||
![]() |
a6113ed7e8 | ||
![]() |
b8e6c059b0 | ||
![]() |
ac972254ae | ||
![]() |
bc41044103 | ||
![]() |
5d4b34f802 | ||
![]() |
bfff708d0c | ||
![]() |
cf23fba41e | ||
![]() |
2e51a18490 | ||
![]() |
1adc22e44f | ||
![]() |
e4cbfc8e78 | ||
![]() |
02f11033cd | ||
![]() |
e955e871e5 | ||
![]() |
5b1ba8f4e9 | ||
![]() |
c73afb011a | ||
![]() |
2538fa9b0a | ||
![]() |
0fc4e356d7 | ||
![]() |
df7a7916f5 | ||
![]() |
4225302a4b | ||
![]() |
7d978f5f96 | ||
![]() |
d433950935 | ||
![]() |
138ea1cb57 | ||
![]() |
ec9bc6ed92 | ||
![]() |
ccbb80ff4c | ||
![]() |
e16c36ba10 | ||
![]() |
42503c7ccf | ||
![]() |
46b63a777b | ||
![]() |
26b1243cc0 | ||
![]() |
cf116b5ad3 | ||
![]() |
cc36e8a6e0 | ||
![]() |
69c7cc198d | ||
![]() |
96ef22dabc | ||
![]() |
77ee0cc065 | ||
![]() |
e939e32da0 | ||
![]() |
b9e008afbe | ||
![]() |
542d631edd | ||
![]() |
acb1750bba | ||
![]() |
b9b8d161f3 | ||
![]() |
0c0de72a2c | ||
![]() |
0cebb046f8 | ||
![]() |
7eda59fb9c | ||
![]() |
e28661c5d4 | ||
![]() |
e72f2e4245 | ||
![]() |
6dac955cc7 | ||
![]() |
84f9237c91 | ||
![]() |
e2233816dd | ||
![]() |
542de32106 | ||
![]() |
7c99456c00 | ||
![]() |
f69421b7c6 | ||
![]() |
011e503c97 | ||
![]() |
7106409061 | ||
![]() |
49ee736731 | ||
![]() |
766c4e941d | ||
![]() |
b6fa393035 | ||
![]() |
c14191847f | ||
![]() |
c2866e0b26 | ||
![]() |
a8bbc0ade6 | ||
![]() |
4cfd3ba121 | ||
![]() |
ae746fa0af | ||
![]() |
31908c8775 | ||
![]() |
6c34fc6e8d | ||
![]() |
57f8a8fccd | ||
![]() |
3f7e2bf1c7 | ||
![]() |
dcd63d66bc | ||
![]() |
0313f1aa14 | ||
![]() |
e3c465b59a | ||
![]() |
093a9625a7 | ||
![]() |
b04d6fc4f0 | ||
![]() |
57850038fc | ||
![]() |
323c0e51f3 | ||
![]() |
a4a1aa5c43 | ||
![]() |
dddccee707 | ||
![]() |
528e020176 | ||
![]() |
fb8bc5d532 | ||
![]() |
6c3a67aa9a | ||
![]() |
3828f2547e | ||
![]() |
b44d4b4f41 | ||
![]() |
8c1e1bc97d | ||
![]() |
93ba4e0638 | ||
![]() |
16f7b06cec | ||
![]() |
e1e910e339 | ||
![]() |
fb34e6c2fd | ||
![]() |
bcd6116e5c | ||
![]() |
628a0bf269 | ||
![]() |
d3900ca905 | ||
![]() |
851b181ae9 | ||
![]() |
275fe8e837 | ||
![]() |
80f8e829df | ||
![]() |
a0f30e595b | ||
![]() |
43460815ac | ||
![]() |
69e352624e | ||
![]() |
40b652869d | ||
![]() |
ccb5df88b4 | ||
![]() |
4e6418c83e | ||
![]() |
0e17cb9c50 | ||
![]() |
ecf5c6af38 | ||
![]() |
afe8438958 | ||
![]() |
360baa1553 | ||
![]() |
a34675379b | ||
![]() |
215e2f10a9 | ||
![]() |
ca9b6525a2 | ||
![]() |
47cddef5de | ||
![]() |
bbedfd50a5 | ||
![]() |
6f60d2ff48 | ||
![]() |
0f76e65372 | ||
![]() |
d83f189a63 | ||
![]() |
f1d4b27c58 | ||
![]() |
f2ace58825 | ||
![]() |
fe74d96914 | ||
![]() |
379232e94a | ||
![]() |
7e74d75612 | ||
![]() |
ac92f251bc | ||
![]() |
42711a079b | ||
![]() |
373937ea0c | ||
![]() |
285a8de152 | ||
![]() |
11da1bf9ba | ||
![]() |
bcb3a88d16 | ||
![]() |
092fc77fb0 | ||
![]() |
9e2cd65560 | ||
![]() |
f8fbc79f35 | ||
![]() |
577c57ba87 | ||
![]() |
0d28e86fea | ||
![]() |
41862e5d39 | ||
![]() |
5559d1375c | ||
![]() |
9907722feb | ||
![]() |
4b706ff33a | ||
![]() |
52b6eab0d7 | ||
![]() |
8dd9b01048 | ||
![]() |
8521a2d044 | ||
![]() |
7e1c76a1da | ||
![]() |
9a816fe73a | ||
![]() |
b0c036e72b | ||
![]() |
0a34fb4fb0 | ||
![]() |
aa812d1fea | ||
![]() |
c63cfebd4f | ||
![]() |
c76492571b | ||
![]() |
34a40bbf86 | ||
![]() |
1132c70565 | ||
![]() |
515a0d4016 | ||
![]() |
9d6cf0cb6c | ||
![]() |
f585ad045b | ||
![]() |
0b9832dcc2 | ||
![]() |
882a6b87c7 | ||
![]() |
3ff2bcaace | ||
![]() |
bd0cf2ea86 | ||
![]() |
cfee3bf9c3 | ||
![]() |
fc8c0facdd | ||
![]() |
ad79a7e318 | ||
![]() |
9297fe8f9a | ||
![]() |
73b7903839 | ||
![]() |
cef86e1b02 | ||
![]() |
a274035159 | ||
![]() |
c57e93ba7b | ||
![]() |
82327db0d2 | ||
![]() |
51f36685e1 | ||
![]() |
9b64ee08a2 | ||
![]() |
a9f02e6120 | ||
![]() |
99dd17560a | ||
![]() |
97defffac3 | ||
![]() |
323ac423c9 | ||
![]() |
3c603fea40 | ||
![]() |
e1183c0ff4 | ||
![]() |
3db9315f82 | ||
![]() |
9ecd4a418d | ||
![]() |
089ff67a17 | ||
![]() |
c804ef7149 | ||
![]() |
68e990e762 | ||
![]() |
f97103ce8b | ||
![]() |
0cfb6875c5 | ||
![]() |
cdd67cd79e | ||
![]() |
c151b41e56 | ||
![]() |
d72c3eae4b | ||
![]() |
e570ad9b4d | ||
![]() |
f8ad77c903 | ||
![]() |
cc60b06b7f | ||
![]() |
19788deee4 | ||
![]() |
ac5f5e1ad3 | ||
![]() |
d3e1b09b00 | ||
![]() |
7c371d295a | ||
![]() |
fb8ccfed50 | ||
![]() |
b4b7eb554f | ||
![]() |
cad9436029 | ||
![]() |
7f6dbadc9c | ||
![]() |
0579b88dc7 | ||
![]() |
18407288ea | ||
![]() |
42218242e2 | ||
![]() |
7b61419039 | ||
![]() |
97da0b2bf0 | ||
![]() |
d0ea429401 | ||
![]() |
f30c7e33ec | ||
![]() |
b300a95854 | ||
![]() |
c6632e8dc8 | ||
![]() |
3b2ae304d2 | ||
![]() |
a2afe5b93a | ||
![]() |
b59174d47d | ||
![]() |
0449a14c19 | ||
![]() |
29b77b7591 | ||
![]() |
718ee7c51a | ||
![]() |
8a3b30e8a6 | ||
![]() |
023a8e26b9 | ||
![]() |
b092d44a7c | ||
![]() |
79dc54c3f4 | ||
![]() |
ef99073b06 | ||
![]() |
2783fa64d8 | ||
![]() |
4719e0ce31 | ||
![]() |
6b0945663a | ||
![]() |
5cafa401c3 | ||
![]() |
15b134511b | ||
![]() |
4270c571ac | ||
![]() |
f5c9e0d405 | ||
![]() |
ec9f5f4dfa | ||
![]() |
4c6f9ef06c | ||
![]() |
d087a26af2 | ||
![]() |
f32ef38823 | ||
![]() |
cf581654ef | ||
![]() |
62a6573f71 | ||
![]() |
968bd32ae3 | ||
![]() |
bc3a1f329e | ||
![]() |
9fca7074ee | ||
![]() |
eece97990d | ||
![]() |
8acae4deb3 | ||
![]() |
eed3bac755 | ||
![]() |
da89b77e75 | ||
![]() |
a12c433b65 | ||
![]() |
a79197c78d | ||
![]() |
5e8a3df528 | ||
![]() |
6a28d0cee9 | ||
![]() |
a73c7fae9e | ||
![]() |
53a57d8078 | ||
![]() |
a259c40209 | ||
![]() |
428eb56cea | ||
![]() |
27dca1cc6a | ||
![]() |
09d90291bf | ||
![]() |
f9cafd7cc0 | ||
![]() |
df1c6af96a | ||
![]() |
a1dbf8f64a | ||
![]() |
2268515bb1 | ||
![]() |
ecf0164a5a |
2
.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
|
||||
patreon: zen_browser
|
63
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
Normal file
@@ -0,0 +1,63 @@
|
||||
name: Bug Report
|
||||
description: File a bug report
|
||||
labels: [bug]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thank you for filing a bug report.
|
||||
- type: textarea
|
||||
id: what-happened
|
||||
attributes:
|
||||
label: What happened?
|
||||
description: Also tell us, what did you expect to happen?
|
||||
placeholder: Tell us what you see!
|
||||
validations:
|
||||
required: true
|
||||
- type: checkboxes
|
||||
id: firefox
|
||||
attributes:
|
||||
label: Reproducible?
|
||||
description: Is this issue reproducible on Firefox?
|
||||
options:
|
||||
- label: I have checked that this issue cannot be reproduced on Mozilla Firefox.
|
||||
- type: input
|
||||
id: version
|
||||
attributes:
|
||||
label: Version
|
||||
description: What version of our software are you running? Please DO NOT report Classic bugs.
|
||||
placeholder: 1.0.0
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
id: severity
|
||||
attributes:
|
||||
label: Severity impact
|
||||
description: See label descriptions for more information.
|
||||
options:
|
||||
- Low
|
||||
- Medium
|
||||
- High
|
||||
- Critical
|
||||
- Enhancement
|
||||
multiple: true
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: dropdown
|
||||
id: platform
|
||||
attributes:
|
||||
label: What platform are you seeing the problem on?
|
||||
multiple: true
|
||||
options:
|
||||
- Linux
|
||||
- macOS
|
||||
- Windows
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: logs
|
||||
attributes:
|
||||
label: Relevant log output
|
||||
description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks.
|
||||
render: shell
|
1
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
@@ -0,0 +1 @@
|
||||
blank_issues_enabled: true
|
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
title: ''
|
||||
labels: feature_request
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
|
||||
**Describe the solution you'd like**
|
||||
A clear and concise description of what you want to happen.
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
|
||||
**Additional context**
|
||||
Add any other context or screenshots about the feature request here.
|
18
.github/advanced-issue-labeler.yml
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
---
|
||||
# Keep up to date with workflows/issue-create.yml !!!
|
||||
|
||||
policy:
|
||||
- section:
|
||||
- id: [severity]
|
||||
label:
|
||||
- name: 'kind: low severity'
|
||||
keys: ['Low']
|
||||
- name: 'kind: medium severity'
|
||||
keys: ['Medium']
|
||||
- name: 'kind: high severity'
|
||||
keys: ['High']
|
||||
- name: 'kind: critical severity'
|
||||
keys: ['Critical']
|
||||
- name: 'kind: enhancement'
|
||||
keys: ['Enhancement']
|
||||
|
525
.github/workflows/alpha.yml
vendored
@@ -41,37 +41,35 @@ 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
|
||||
if: ${{ github.event.inputs.update_version == 'true' }}
|
||||
run: |
|
||||
pnpm gluon ci --brand alpha --bump prerelease
|
||||
pnpm surfer ci --brand alpha --bump prerelease
|
||||
|
||||
- name: Bump version without new version
|
||||
if: ${{ github.event.inputs.update_version == 'false' }}
|
||||
run: |
|
||||
pnpm surfer ci --brand alpha
|
||||
|
||||
- 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,293 +99,30 @@ 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"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
linux:
|
||||
permissions:
|
||||
contents: write
|
||||
runs-on: ubuntu-latest
|
||||
needs: [build-data, check-release]
|
||||
|
||||
steps:
|
||||
- name: Install Node.js
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 20
|
||||
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
# Give the runner some swap space in an attempt to stop gkrust from crashing the build
|
||||
- name: Set Swap Space
|
||||
uses: pierotofy/set-swap-space@v1.0
|
||||
with:
|
||||
swap-size-gb: 6
|
||||
|
||||
- name: Setup git
|
||||
run: |
|
||||
git config --global user.email "mauro-balades@users.noreply.github.com"
|
||||
git config --global user.name "mauro-balades"
|
||||
|
||||
- name: Install system dependencies
|
||||
run: |
|
||||
sudo apt-get update --fix-missing
|
||||
sudo apt-get update
|
||||
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
|
||||
sudo rm -rf /opt/ghc
|
||||
sudo rm -rf "/usr/local/share/boost"
|
||||
sudo rm -rf "$AGENT_TOOLSDIRECTORY"
|
||||
|
||||
- name: Install sccache
|
||||
env:
|
||||
LINK: https://github.com/mozilla/sccache/releases/download
|
||||
SCCACHE_VERSION: 0.2.13
|
||||
run: |
|
||||
SCCACHE_FILE=sccache-$SCCACHE_VERSION-x86_64-unknown-linux-musl
|
||||
mkdir -p $HOME/.local/bin
|
||||
curl -L "$LINK/$SCCACHE_VERSION/$SCCACHE_FILE.tar.gz" | tar xz
|
||||
mv -f $SCCACHE_FILE/sccache $HOME/.local/bin/sccache
|
||||
echo "$HOME/.local/bin" >> $GITHUB_PATH
|
||||
|
||||
- name: Save sccache
|
||||
uses: actions/cache@v3
|
||||
continue-on-error: false
|
||||
with:
|
||||
path: /home/runner/.cache/sccache
|
||||
key: ${{ runner.os }}-sccache
|
||||
|
||||
- name: Install pnpm
|
||||
run: npm install -g pnpm
|
||||
|
||||
- name: Get pnpm store directory
|
||||
id: pnpm-cache
|
||||
shell: bash
|
||||
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: Download firefox source and dependencies
|
||||
run: pnpm gluon download
|
||||
|
||||
- name: Import
|
||||
run: pnpm gluon import
|
||||
|
||||
- name: Bootstrap
|
||||
run: |
|
||||
cd engine
|
||||
./mach --no-interactive bootstrap --application-choice browser
|
||||
cd ..
|
||||
|
||||
- name: Build
|
||||
run: pnpm build
|
||||
|
||||
- name: Package
|
||||
run: pnpm package
|
||||
|
||||
- name: Rename artifacts
|
||||
run: |
|
||||
mv dist/zen-*.tar.bz2 "zen.linux.tar.bz2"
|
||||
mv dist/output.mar linux.mar
|
||||
|
||||
- name: Upload binary
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: zen.linux.tar.bz2
|
||||
path: ./zen.linux.tar.bz2
|
||||
|
||||
- name: Upload mar
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: linux.mar
|
||||
path: ./linux.mar
|
||||
|
||||
- name: Upload update manifests
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: linux_update_manifest
|
||||
path: ./dist/update
|
||||
|
||||
windows:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [build-data, check-release]
|
||||
|
||||
steps:
|
||||
- name: Install Node.js and pnpm
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 20
|
||||
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
# Give the runner some swap space in an attempt to stop gkrust from crashing the build
|
||||
- name: Set Swap Space
|
||||
uses: pierotofy/set-swap-space@v1.0
|
||||
with:
|
||||
swap-size-gb: 6
|
||||
|
||||
- name: Install pnpm
|
||||
run: npm install -g pnpm
|
||||
|
||||
- name: Setup git
|
||||
run: |
|
||||
git config --global user.email "mauro-balades@users.noreply.github.com"
|
||||
git config --global user.name "mauro-balades"
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
pnpm i
|
||||
|
||||
- name: Load gluon CI setup
|
||||
run: pnpm gluon 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
|
||||
|
||||
- name: Free up space
|
||||
run: |
|
||||
sudo rm -rf /usr/share/dotnet
|
||||
sudo rm -rf /opt/ghc
|
||||
sudo rm -rf "/usr/local/share/boost"
|
||||
sudo rm -rf "$AGENT_TOOLSDIRECTORY"
|
||||
|
||||
- name: Setup For Windows
|
||||
run: |
|
||||
set -x
|
||||
mkdir -p ~/win-cross
|
||||
cd engine/
|
||||
|
||||
echo Setup wine
|
||||
aria2c "https://firefox-ci-tc.services.mozilla.com/api/index/v1/task/gecko.cache.level-1.toolchains.v3.linux64-wine.latest/artifacts/public%2Fbuild%2Fwine.tar.zst" -o wine.tar.zst
|
||||
tar --zstd -xvf wine.tar.zst -C ~/win-cross
|
||||
rm wine.tar.zst
|
||||
|
||||
echo Setup Visual Studio
|
||||
sudo apt install -y msitools python3-pip
|
||||
./mach python --virtualenv build taskcluster/scripts/misc/get_vs.py build/vs/vs2022.yaml ~/win-cross/vs2022
|
||||
|
||||
chmod -R +x "$(echo ~)/win-cross/vs2022" || true
|
||||
|
||||
cat ../.github/workflows/src/windows_mozconfig >> ../configs/common/mozconfig
|
||||
|
||||
cd ..
|
||||
npm install -g pnpm
|
||||
pnpm gluon 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
|
||||
|
||||
- name: setup Rust
|
||||
run: |
|
||||
cd engine/
|
||||
# Install a rust version compatible with 17
|
||||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.76
|
||||
source $HOME/.cargo/env
|
||||
|
||||
rustup target add x86_64-pc-windows-msvc
|
||||
cargo install cargo-download
|
||||
cargo download -x windows=0.52.0
|
||||
#? https://github.com/mozilla/sccache#known-caveats
|
||||
export CARGO_INCREMENTAL=0
|
||||
echo "export MOZ_WINDOWS_RS_DIR=$(pwd)/windows-0.52.0" >> ../configs/common/mozconfig
|
||||
|
||||
- name: Import
|
||||
run: pnpm gluon import --verbose
|
||||
|
||||
- name: Build
|
||||
run: pnpm build
|
||||
|
||||
- name: Package
|
||||
run: |
|
||||
set -x
|
||||
pnpm package
|
||||
mv ./dist/output.mar windows.mar
|
||||
mv ./dist/zen-$(pnpm gluon 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:
|
||||
name: zen.win64.zip
|
||||
path: ./zen.win64.zip
|
||||
|
||||
- name: Upload mar
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: windows.mar
|
||||
path: ./windows.mar
|
||||
|
||||
- name: Upload update manifests
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: windows_update_manifest
|
||||
path: ./dist/update
|
||||
|
||||
source:
|
||||
permissions:
|
||||
@@ -422,14 +157,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: |
|
||||
@@ -439,136 +174,106 @@ jobs:
|
||||
cd ..
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: zen.source.tar.gz
|
||||
path: ./zen.source.tar.gz
|
||||
|
||||
#windows-step-1:
|
||||
# name: Windows build step 1 (PGO build)
|
||||
# uses: ./.github/workflows/windows-alpha-build.yml
|
||||
# needs: [build-data]
|
||||
# permissions:
|
||||
# contents: write
|
||||
# with:
|
||||
# build-version: ${{ needs.build-data.outputs.version }}
|
||||
# generate-gpo: true
|
||||
# profile-data-path-archive: zen-windows-x86_64-profile-data-and-jarlog.zip
|
||||
|
||||
#windows-step-2:
|
||||
# name: Windows build step 2 (Generate profile data)
|
||||
# uses: ./.github/workflows/windows-profile-build.yml
|
||||
# permissions:
|
||||
# contents: write
|
||||
# needs: [windows-step-1, build-data]
|
||||
# with:
|
||||
# build-version: ${{ needs.build-data.outputs.version }}
|
||||
# profile-data-path-archive: zen.win64-pgo-stage-1.zip
|
||||
|
||||
windows-step-3:
|
||||
name: Windows build step 3 (build with profile data)
|
||||
uses: ./.github/workflows/windows-alpha-build.yml
|
||||
permissions:
|
||||
contents: write
|
||||
needs: [build-data]
|
||||
with:
|
||||
build-version: ${{ needs.build-data.outputs.version }}
|
||||
generate-gpo: false
|
||||
|
||||
linux:
|
||||
name: Linux build
|
||||
uses: ./.github/workflows/linux-alpha-build.yml
|
||||
permissions:
|
||||
contents: write
|
||||
needs: [build-data]
|
||||
with:
|
||||
build-version: ${{ needs.build-data.outputs.version }}
|
||||
|
||||
mac:
|
||||
if: false
|
||||
runs-on: macos-13
|
||||
needs: [build-data, check-release]
|
||||
|
||||
steps:
|
||||
- name: Install Node.js
|
||||
uses: actions/setup-node@v3
|
||||
name: macOS build
|
||||
uses: ./.github/workflows/macos-alpha-build.yml
|
||||
permissions:
|
||||
contents: write
|
||||
needs: [build-data]
|
||||
with:
|
||||
node-version: 20
|
||||
|
||||
- uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.11'
|
||||
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Setup git
|
||||
run: |
|
||||
git config --global user.email "mauro-balades@users.noreply.github.com"
|
||||
git config --global user.name "mauro-balades"
|
||||
|
||||
- name: Install system dependencies
|
||||
run: |
|
||||
brew install cairo sccache gnu-tar mercurial
|
||||
sudo pip install setuptools
|
||||
|
||||
- name: Force usage fo gnu-tar
|
||||
run: |
|
||||
echo 'export PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH"' >> ~/.bash_profile
|
||||
echo 'export PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH"' >> ~/.zsh
|
||||
source ~/.bash_profile
|
||||
|
||||
- name: Save sccache
|
||||
uses: actions/cache@v3
|
||||
continue-on-error: false
|
||||
with:
|
||||
path: ~/Library/Caches/Mozilla.sccache
|
||||
key: ${{ runner.os }}-sccache
|
||||
|
||||
- name: Install pnpm
|
||||
run: npm install -g pnpm
|
||||
|
||||
- name: Get pnpm store directory
|
||||
id: pnpm-cache
|
||||
shell: bash
|
||||
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: Download firefox source and dependancies
|
||||
run: pnpm gluon download
|
||||
|
||||
- name: Import
|
||||
run: pnpm gluon import
|
||||
|
||||
- name: Bootstrap
|
||||
run: |
|
||||
cd engine
|
||||
./mach --no-interactive bootstrap --application-choice browser
|
||||
cd ..
|
||||
|
||||
- name: Gluon build
|
||||
run: pnpm build --verbose
|
||||
|
||||
- name: Package
|
||||
run: pnpm package
|
||||
|
||||
- name: Rename artifacts
|
||||
run: |
|
||||
mv ./dist/*.dmg "zen.macos.dmg"
|
||||
mv ./dist/output.mar macos.mar
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: zen.macos.dmg
|
||||
path: ./zen.macos.dmg
|
||||
|
||||
- name: Upload mar
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: macos.mar
|
||||
path: ./macos.mar
|
||||
|
||||
- name: Upload update manifests
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: macos_update_manifest
|
||||
path: ./dist/update
|
||||
build-version: ${{ needs.build-data.outputs.version }}
|
||||
|
||||
release:
|
||||
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-step-3, check-release, mac]
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Update repo
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Git Pull
|
||||
run: git pull
|
||||
|
||||
- uses: actions/download-artifact@v3
|
||||
- uses: actions/download-artifact@v4
|
||||
|
||||
- name: List
|
||||
run: find .
|
||||
|
||||
- name: Clone updates repo
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: zen-browser/updates-server
|
||||
path: updates-server
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
|
||||
- name: Copy update manifests
|
||||
run: |
|
||||
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: 🚀 Update update manifests
|
||||
commit_user_name: Zen Browser Robot
|
||||
commit_user_email: zen-browser-bot@users.noreply.github.com
|
||||
repository: ./updates-server
|
||||
|
||||
- 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 +281,7 @@ jobs:
|
||||
zen.source.tar.gz
|
||||
linux.mar
|
||||
windows.mar
|
||||
|
||||
- name: List
|
||||
run: find .
|
||||
|
||||
- name: Checkout tools 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
|
||||
|
||||
- name: Copy update manifests
|
||||
run: |
|
||||
mkdir -p updates/updates
|
||||
cp -a linux_update_manifest/. updates/updates/
|
||||
cp -a windows_update_manifest/. updates/updates/
|
||||
|
||||
- uses: stefanzweifel/git-auto-commit-action@v4
|
||||
with:
|
||||
commit_message: 🔖 Upload update manifests ${{ needs.build-data.outputs.version }}
|
||||
commit_user_name: Zen Browser Robot
|
||||
commit_user_email: zen-browser-bot@users.noreply.github.com
|
||||
repository: ./updates
|
||||
macos.mar
|
||||
zen.installer.exe
|
||||
zen.installer.pretty.exe
|
||||
zen.macos.dmg
|
||||
|
35
.github/workflows/issue-create.yml
vendored
Normal file
@@ -0,0 +1,35 @@
|
||||
name: Issue labeler
|
||||
on:
|
||||
issues:
|
||||
types: [ opened ]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
label-component:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
permissions:
|
||||
# required for all workflows
|
||||
issues: write
|
||||
|
||||
# only required for workflows in private repositories
|
||||
actions: read
|
||||
contents: read
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Parse issue form
|
||||
uses: stefanbuck/github-issue-parser@v3
|
||||
id: issue-parser
|
||||
with:
|
||||
template-path: .github/ISSUE_TEMPLATE/bug_report.yml
|
||||
|
||||
- name: Set labels based on severity field
|
||||
uses: redhat-plumbers-in-action/advanced-issue-labeler@v3
|
||||
with:
|
||||
issue-form: ${{ steps.issue-parser.outputs.jsonString }}
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
section: severity
|
129
.github/workflows/linux-alpha-build.yml
vendored
Normal file
@@ -0,0 +1,129 @@
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
build-version:
|
||||
description: 'The version to build'
|
||||
required: true
|
||||
type: string
|
||||
|
||||
jobs:
|
||||
build-linux:
|
||||
permissions:
|
||||
contents: write
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Install Node.js
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 20
|
||||
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
# Give the runner some swap space in an attempt to stop gkrust from crashing the build
|
||||
- name: Set Swap Space
|
||||
uses: pierotofy/set-swap-space@v1.0
|
||||
with:
|
||||
swap-size-gb: 6
|
||||
|
||||
- name: Setup git
|
||||
run: |
|
||||
git config --global user.email "mauro-balades@users.noreply.github.com"
|
||||
git config --global user.name "mauro-balades"
|
||||
|
||||
- name: Install system dependencies
|
||||
run: |
|
||||
sudo apt-get update --fix-missing
|
||||
sudo apt-get update
|
||||
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: Free up space
|
||||
run: sh .github/workflows/src/disk-setup-and-swap.sh
|
||||
|
||||
- name: Configure sccache
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
|
||||
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
|
||||
|
||||
- name: Install sccache
|
||||
env:
|
||||
LINK: https://github.com/mozilla/sccache/releases/download
|
||||
SCCACHE_VERSION: 0.2.13
|
||||
run: |
|
||||
SCCACHE_FILE=sccache-$SCCACHE_VERSION-x86_64-unknown-linux-musl
|
||||
mkdir -p $HOME/.local/bin
|
||||
curl -L "$LINK/$SCCACHE_VERSION/$SCCACHE_FILE.tar.gz" | tar xz
|
||||
mv -f $SCCACHE_FILE/sccache $HOME/.local/bin/sccache
|
||||
echo "$HOME/.local/bin" >> $GITHUB_PATH
|
||||
|
||||
- name: Save sccache
|
||||
uses: actions/cache@v3
|
||||
continue-on-error: false
|
||||
with:
|
||||
path: /home/runner/.cache/sccache
|
||||
key: ${{ runner.os }}-sccache
|
||||
|
||||
- name: Install pnpm
|
||||
run: npm install -g pnpm
|
||||
|
||||
- name: Get pnpm store directory
|
||||
id: pnpm-cache
|
||||
shell: bash
|
||||
run: |
|
||||
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Install dependencies
|
||||
run: pnpm install
|
||||
|
||||
- name: Load surfer CI setup
|
||||
run: pnpm surfer ci --brand alpha --display-version ${{ inputs.build-version }}
|
||||
|
||||
- name: Download firefox source and dependencies
|
||||
run: pnpm surfer download
|
||||
|
||||
- name: Import
|
||||
run: pnpm surfer import
|
||||
|
||||
- name: Bootstrap
|
||||
run: |
|
||||
cd engine
|
||||
./mach --no-interactive bootstrap --application-choice browser
|
||||
cd ..
|
||||
|
||||
- name: Build
|
||||
continue-on-error: true
|
||||
run: sh .github/workflows/src/alpha-build.sh
|
||||
|
||||
- name: Build again if it failed
|
||||
if: failure()
|
||||
run: sh .github/workflows/src/alpha-build.sh
|
||||
|
||||
- name: Package
|
||||
run: pnpm package
|
||||
|
||||
- name: Rename artifacts
|
||||
run: |
|
||||
mv dist/zen-*.tar.bz2 "zen.linux.tar.bz2"
|
||||
mv dist/output.mar linux.mar
|
||||
|
||||
- name: Upload binary
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: zen.linux.tar.bz2
|
||||
path: ./zen.linux.tar.bz2
|
||||
|
||||
- name: Upload mar
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: linux.mar
|
||||
path: ./linux.mar
|
||||
|
||||
- name: Upload update manifests
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: linux_update_manifest
|
||||
path: ./dist/update
|
102
.github/workflows/macos-alpha-build.yml
vendored
Normal file
@@ -0,0 +1,102 @@
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
build-version:
|
||||
description: 'The version to build'
|
||||
required: true
|
||||
type: string
|
||||
|
||||
jobs:
|
||||
mac-build:
|
||||
runs-on: macos-14
|
||||
|
||||
steps:
|
||||
- name: Install Node.js
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 20
|
||||
|
||||
- uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.11'
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Setup git
|
||||
run: |
|
||||
git config --global user.email "mauro-balades@users.noreply.github.com"
|
||||
git config --global user.name "mauro-balades"
|
||||
|
||||
- name: Install system dependencies
|
||||
run: |
|
||||
brew install cairo sccache gnu-tar mercurial
|
||||
sudo pip install setuptools
|
||||
|
||||
- name: Free up space
|
||||
run: sh .github/workflows/src/disk-setup-and-swap.sh
|
||||
|
||||
- name: Force usage fo gnu-tar
|
||||
run: |
|
||||
echo 'export PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH"' >> ~/.bash_profile
|
||||
echo 'export PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH"' >> ~/.zsh
|
||||
source ~/.bash_profile
|
||||
|
||||
- name: Install pnpm
|
||||
run: npm install -g pnpm
|
||||
|
||||
- name: Get pnpm store directory
|
||||
id: pnpm-cache
|
||||
shell: bash
|
||||
run: |
|
||||
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Install dependencies
|
||||
run: pnpm install
|
||||
- name: Load surfer CI setup
|
||||
run: pnpm surfer ci --brand alpha --display-version ${{ inputs.build-version }}
|
||||
|
||||
- name: Download firefox source and dependancies
|
||||
run: pnpm surfer download
|
||||
|
||||
- name: Import
|
||||
run: pnpm surfer import
|
||||
|
||||
- name: Bootstrap
|
||||
run: |
|
||||
cd engine
|
||||
./mach --no-interactive bootstrap --application-choice browser
|
||||
cd ..
|
||||
|
||||
- name: build Zen
|
||||
run: sh .github/workflows/src/alpha-build.sh
|
||||
|
||||
- name: Rebuild Zen if failed
|
||||
if: failure()
|
||||
run: sh .github/workflows/src/alpha-build.sh
|
||||
|
||||
- name: Package
|
||||
run: pnpm package
|
||||
|
||||
- name: Rename artifacts
|
||||
run: |
|
||||
mv ./dist/*.dmg "zen.macos.dmg"
|
||||
mv ./dist/output.mar macos.mar
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: zen.macos.dmg
|
||||
path: ./zen.macos.dmg
|
||||
|
||||
- name: Upload mar
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: macos.mar
|
||||
path: ./macos.mar
|
||||
|
||||
- name: Upload update manifests
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: macos_update_manifest
|
||||
path: ./dist/update
|
26
.github/workflows/src/alpha-build.sh
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
set -ex
|
||||
|
||||
if command -v apt-get &> /dev/null
|
||||
then
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y xvfb
|
||||
fi
|
||||
|
||||
ulimit -n 4096
|
||||
|
||||
# Check if xfvb is installed
|
||||
if ! command -v Xvfb &> /dev/null; then
|
||||
if ! test "$ZEN_CROSS_COMPILING"; then
|
||||
Xvfb :2 -screen 0 1024x768x24 &
|
||||
export LLVM_PROFDATA=$HOME/.mozbuild/clang/bin/llvm-profdata
|
||||
export DISPLAY=:2
|
||||
fi
|
||||
export ZEN_RELEASE=1
|
||||
pnpm build
|
||||
else
|
||||
echo "Xvfb could not be found, running without it"
|
||||
echo "ASSUMING YOU ARE RUNNING THIS ON MACOS"
|
||||
set -v
|
||||
export ZEN_RELEASE=1
|
||||
pnpm build
|
||||
fi
|
50
.github/workflows/src/disk-setup-and-swap.sh
vendored
Normal file
@@ -0,0 +1,50 @@
|
||||
|
||||
echo Before:
|
||||
if [ command -v free ]; then
|
||||
free -h
|
||||
fi
|
||||
if [ command -v df ]; then
|
||||
df -h
|
||||
fi
|
||||
|
||||
echo
|
||||
echo
|
||||
|
||||
sudo swapoff /mnt/swapfile
|
||||
sudo rm /mnt/swapfile
|
||||
sudo fallocate -l 10G /mnt/swapfile
|
||||
sudo chmod 600 /mnt/swapfile
|
||||
sudo mkswap /mnt/swapfile
|
||||
sudo swapon /mnt/swapfile
|
||||
sudo apt remove -y '^dotnet-.*' '^llvm-.*' '^php.*' '^mongodb-.*' '^mysql-.*' clang azure-cli google-cloud-sdk google-chrome-stable microsoft-edge firefox powershell mono-devel libgl1-mesa-dri acl aria2 autoconf automake binutils bison brotli bzip2 coreutils
|
||||
sudo apt autoremove -y
|
||||
sudo apt clean
|
||||
sudo rm -rf ./git
|
||||
sudo rm -rf /home/linuxbrew
|
||||
sudo rm -rf /usr/share/dotnet
|
||||
sudo rm -rf /usr/local/lib/android
|
||||
sudo rm -rf /usr/local/graalvm
|
||||
sudo rm -rf /usr/local/share/powershell
|
||||
sudo rm -rf /usr/local/share/chromium
|
||||
sudo rm -rf /opt/ghc
|
||||
sudo rm -rf /usr/local/share/boost
|
||||
sudo rm -rf "$AGENT_TOOLSDIRECTORY"
|
||||
sudo rm -rf /etc/apache2
|
||||
sudo rm -rf /etc/nginx
|
||||
sudo rm -rf /usr/local/share/chrome_driver
|
||||
sudo rm -rf /usr/local/share/edge_driver
|
||||
sudo rm -rf /usr/local/share/gecko_driver
|
||||
sudo rm -rf /usr/share/java
|
||||
sudo rm -rf /usr/share/miniconda
|
||||
sudo rm -rf /usr/local/share/vcpkg
|
||||
|
||||
echo
|
||||
echo
|
||||
|
||||
echo After:
|
||||
if [ command -v free ]; then
|
||||
free -h
|
||||
fi
|
||||
if [ command -v df ]; then
|
||||
df -h
|
||||
fi
|
29
.github/workflows/src/windows_mozconfig
vendored
@@ -10,10 +10,31 @@ 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
|
||||
CROSS_COMPILE=1
|
||||
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 WIN32_REDIST_DIR="$TOOLS"/vs2022/VC/Redist/MSVC/14.34.31931/x64/Microsoft.VC143.CRT
|
||||
#export WIN_UCRT_REDIST_DIR="$TOOLS/vs2022/Windows Kits/10/Redist/10.0.22621.0/ucrt/DLLs/x64"
|
||||
|
||||
ac_add_options --disable-maintenance-service
|
||||
ac_add_options --disable-bits-download
|
||||
|
||||
#if test "$ZEN_GA_GENERATE_PROFILE"; then
|
||||
# mk_add_options "export MOZ_AUTOMATION_PACKAGE_GENERATED_SOURCES=0"
|
||||
# ac_add_options --enable-profile-generate=cross
|
||||
#else
|
||||
# ac_add_options --disable-profiling
|
||||
# ac_add_options --enable-profile-use=cross
|
||||
# ac_add_options --with-pgo-profile-path=$(echo ~)/artifact/merged.profdata
|
||||
# ac_add_options --with-pgo-jarlog=$(echo ~)/artifact/en-US.log
|
||||
#fi
|
||||
|
||||
# ALWAYS MANTAIN ONE LINE BREAK AT THE END OF THIS FILE
|
||||
|
||||
|
199
.github/workflows/windows-alpha-build.yml
vendored
Normal file
@@ -0,0 +1,199 @@
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
generate-gpo:
|
||||
required: true
|
||||
type: boolean
|
||||
default: false
|
||||
build-version:
|
||||
description: 'The version to build'
|
||||
required: true
|
||||
type: string
|
||||
profile-data-path-archive:
|
||||
description: 'The path to the zip archive containing the profile data'
|
||||
type: string
|
||||
|
||||
jobs:
|
||||
windows-build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Install Node.js and pnpm
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 20
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
# Give the runner some swap space in an attempt to stop gkrust from crashing the build
|
||||
- name: Set Swap Space
|
||||
uses: pierotofy/set-swap-space@v1.0
|
||||
with:
|
||||
swap-size-gb: 6
|
||||
|
||||
- name: Install pnpm
|
||||
run: npm install -g pnpm
|
||||
|
||||
- name: Setup git
|
||||
run: |
|
||||
git config --global user.email "mauro-balades@users.noreply.github.com"
|
||||
git config --global user.name "mauro-balades"
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
pnpm i
|
||||
|
||||
- name: Load surfer CI setup
|
||||
run: pnpm surfer ci --brand alpha --display-version ${{ inputs.build-version }}
|
||||
|
||||
- name: Download
|
||||
run: pnpm surfer download
|
||||
|
||||
- name: Free up space
|
||||
run: sh .github/workflows/src/disk-setup-and-swap.sh
|
||||
|
||||
- name: "win-cross Cache"
|
||||
env:
|
||||
SEGMENT_DOWNLOAD_TIMEOUT_MINS: 5
|
||||
id: cache-win-cross
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ${HOME}/win-cross
|
||||
key: win-cross
|
||||
|
||||
- name: Configure sccache
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
|
||||
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
|
||||
|
||||
- name: Setup For Windows
|
||||
if: steps.cache-win-cross.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
set -x
|
||||
mkdir -p ~/win-cross
|
||||
cd engine/
|
||||
|
||||
echo Setup wine
|
||||
aria2c "https://firefox-ci-tc.services.mozilla.com/api/index/v1/task/gecko.cache.level-1.toolchains.v3.linux64-wine.latest/artifacts/public%2Fbuild%2Fwine.tar.zst" -o wine.tar.zst
|
||||
tar --zstd -xvf wine.tar.zst -C ~/win-cross
|
||||
rm wine.tar.zst
|
||||
|
||||
echo Setup Visual Studio
|
||||
sudo apt install -y msitools python3-pip
|
||||
./mach python --virtualenv build taskcluster/scripts/misc/get_vs.py build/vs/vs2022.yaml ~/win-cross/vs2022
|
||||
|
||||
- name: Bootstrap
|
||||
run: |
|
||||
set -x
|
||||
cd engine/
|
||||
|
||||
chmod -R +x "$(echo ~)/win-cross/vs2022" || true
|
||||
|
||||
cat ../.github/workflows/src/windows_mozconfig >> ../configs/common/mozconfig
|
||||
|
||||
cd ..
|
||||
npm install -g pnpm
|
||||
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/wine || true
|
||||
ls ~/win-cross/vs2022 || true
|
||||
|
||||
- name: setup Rust
|
||||
run: |
|
||||
cd engine/
|
||||
# Install a rust version compatible with 17
|
||||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.76
|
||||
source $HOME/.cargo/env
|
||||
|
||||
rustup target add x86_64-pc-windows-msvc
|
||||
cargo install cargo-download
|
||||
cargo download -x windows=0.52.0
|
||||
#? https://github.com/mozilla/sccache#known-caveats
|
||||
export CARGO_INCREMENTAL=0
|
||||
echo "export MOZ_WINDOWS_RS_DIR=$(pwd)/windows-0.52.0" >> ../configs/common/mozconfig
|
||||
|
||||
- uses: actions/download-artifact@v4
|
||||
name: Download artifact if use profdata
|
||||
if: ${{ !inputs.generate-gpo }}
|
||||
with:
|
||||
path: ~/artifact
|
||||
|
||||
- name: Import
|
||||
run: pnpm surfer import --verbose
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
set -x
|
||||
export SURFER_PLATFORM="win32"
|
||||
export ZEN_CROSS_COMPILING=1
|
||||
# if test ${{ inputs.generate-gpo }}; then
|
||||
# export ZEN_GA_GENERATE_PROFILE=1
|
||||
# fi
|
||||
sh .github/workflows/src/alpha-build.sh
|
||||
|
||||
- name: Package
|
||||
run: |
|
||||
set -x
|
||||
export SURFER_PLATFORM="win32"
|
||||
pnpm package
|
||||
mv ./dist/output.mar windows.mar
|
||||
mv ./dist/zen-$(pnpm surfer get version | xargs).en-US.win64.zip zen.win64.zip
|
||||
ls ./dist
|
||||
ls .
|
||||
|
||||
- name: Move package for PGO upload
|
||||
if: ${{ inputs.generate-gpo }}
|
||||
run: |
|
||||
set -x
|
||||
mv ./zen.win64.zip ./zen.win64-pgo-stage-1.zip
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
if: ${{ !inputs.generate-gpo }}
|
||||
with:
|
||||
name: zen.win64.zip
|
||||
path: ./zen.win64.zip
|
||||
|
||||
- name: Upload PGO build
|
||||
uses: actions/upload-artifact@v4
|
||||
if: ${{ inputs.generate-gpo }}
|
||||
with:
|
||||
name: ${{ inputs.profile-data-path-archive }}
|
||||
path: ./zen.win64-pgo-stage-1.zip
|
||||
|
||||
- name: Upload mar
|
||||
uses: actions/upload-artifact@v4
|
||||
if: ${{ !inputs.generate-gpo }}
|
||||
with:
|
||||
name: windows.mar
|
||||
path: ./windows.mar
|
||||
|
||||
- name: Upload installer
|
||||
uses: actions/upload-artifact@v4
|
||||
if: ${{ !inputs.generate-gpo }}
|
||||
with:
|
||||
name: zen.installer.exe
|
||||
path: ./dist/zen.installer.exe
|
||||
|
||||
- name: Upload installer stub
|
||||
uses: actions/upload-artifact@v4
|
||||
if: ${{ !inputs.generate-gpo }}
|
||||
with:
|
||||
name: zen.installer.pretty.exe
|
||||
path: ./dist/zen.installer.pretty.exe
|
||||
|
||||
- name: Upload update manifests
|
||||
uses: actions/upload-artifact@v4
|
||||
if: ${{ !inputs.generate-gpo }}
|
||||
with:
|
||||
name: windows_update_manifest
|
||||
path: ./dist/update
|
91
.github/workflows/windows-profile-build.yml
vendored
Normal file
@@ -0,0 +1,91 @@
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
build-version:
|
||||
description: 'The version to build'
|
||||
required: true
|
||||
type: string
|
||||
profile-data-path-archive:
|
||||
description: 'The path to the zip archive containing the profile data'
|
||||
required: false
|
||||
type: string
|
||||
|
||||
jobs:
|
||||
windows-profile-build:
|
||||
runs-on: windows-latest
|
||||
# Script edited from https://github.com/Floorp-Projects/Floorp/blob/ESR115/.github/workflows/window-generate-profile-data-and-jarlog.yml
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install Node.js and pnpm
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 20
|
||||
|
||||
- name: Setup git
|
||||
run: |
|
||||
git config --global user.email "mauro-balades@users.noreply.github.com"
|
||||
git config --global user.name "mauro-balades"
|
||||
|
||||
- name: Install pnpm
|
||||
run: npm install -g pnpm
|
||||
|
||||
- name: Install Surfer
|
||||
run: |
|
||||
npm i -g @zen-browser/surfer
|
||||
|
||||
- uses: actions/download-artifact@v4
|
||||
name: Download artifact
|
||||
with:
|
||||
path: C:\artifact
|
||||
name: zen-windows-x86_64-profile-data-and-jarlog.zip
|
||||
|
||||
- name: Unpack artifact
|
||||
run: |
|
||||
cd C:\artifact
|
||||
ls
|
||||
7z x ${{ inputs.profile-data-path-archive }}
|
||||
ls
|
||||
|
||||
- name: Setup
|
||||
run: |
|
||||
(New-Object System.Net.WebClient).DownloadFile("https://ftp.mozilla.org/pub/mozilla/libraries/win32/MozillaBuildSetup-Latest.exe","C:\MozillaBuildSetup-Latest.exe")
|
||||
C:\MozillaBuildSetup-Latest.exe /S | out-null
|
||||
|
||||
- name: Download firefox
|
||||
run: |
|
||||
git config --global core.safecrlf false
|
||||
pnpm surfer download
|
||||
|
||||
- name: Generate
|
||||
run: |
|
||||
ls
|
||||
$Env:USE_MINTTY = "0"
|
||||
|
||||
$workspace_dir_current = [regex]::replace($env:GITHUB_WORKSPACE, "^([A-Z]):", { "/" + $args.value.Substring(0, 1).toLower() }) -replace "\\","/"
|
||||
$workspace_dir = $workspace_dir_current + "/engine"
|
||||
echo $workspace_dir
|
||||
|
||||
echo "cd $workspace_dir" '' >> mozilla-build-run.sh
|
||||
echo './mach --no-interactive bootstrap --application-choice browser' '' >> mozilla-build-run.sh
|
||||
echo 'ls /c/Users/runneradmin/.mozbuild/clang/bin' '' >> mozilla-build-run.sh
|
||||
echo 'LLVM_PROFDATA=/c/Users/runneradmin/.mozbuild/clang/bin/llvm-profdata.exe JARLOG_FILE=en-US.log ./mach python build/pgo/profileserver.py --binary /c/artifact/zen/zen.exe' '' >> mozilla-build-run.sh
|
||||
C:\mozilla-build\start-shell.bat $workspace_dir_current\mozilla-build-run.sh
|
||||
|
||||
- name: 🐛 Debug Session
|
||||
if: ${{ failure() }}
|
||||
uses: Warpbuilds/gha-debug@v1.3
|
||||
timeout-minutes: 15
|
||||
|
||||
- name: Publish merged.profdata
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
path: merged.profdata
|
||||
|
||||
- name: Publish en-US.log
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
path: en-US.log
|
||||
|
2
.gitignore
vendored
@@ -3,7 +3,7 @@
|
||||
engine/
|
||||
firefox-*/
|
||||
node_modules/
|
||||
.gluon/
|
||||
.surfer/
|
||||
|
||||
__pycache__/
|
||||
dist/
|
373
LICENSE
Normal 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.
|
12
README.md
@@ -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.3`!
|
||||
|
||||
* 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
|
||||
@@ -48,8 +50,12 @@ See `contributing.md` for ways to get started.
|
||||
|
||||
Please adhere to this project's `code of conduct`.
|
||||
|
||||
## Special Thanks
|
||||
|
||||
- [Erlend](https://havn.blog) (For making the logo)
|
||||
- [ptr1337](https://github.com/ptr1337) (AUR Packages and optimization flags)
|
||||
|
||||
## License
|
||||
|
||||
[MPL LICENSE](https://choosealicense.com/licenses/mit/)
|
||||
[MPL LICENSE](/LICENSE)
|
||||
|
||||
|
@@ -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 |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 483 KiB |
BIN
configs/branding/alpha/logo1024.png
Normal file
After Width: | Height: | Size: 344 KiB |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 501 B After Width: | Height: | Size: 872 B |
Before Width: | Height: | Size: 629 B After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 646 B After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 8.0 KiB After Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 830 B After Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 108 KiB |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 5.5 KiB |
@@ -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: 225 B |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 483 KiB |
BIN
configs/branding/beta/logo1024.png
Normal file
After Width: | Height: | Size: 344 KiB |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 501 B After Width: | Height: | Size: 872 B |
Before Width: | Height: | Size: 629 B After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 646 B After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 8.0 KiB After Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 830 B After Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 108 KiB |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 5.5 KiB |
@@ -1,11 +1,10 @@
|
||||
|
||||
# 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-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
|
||||
@@ -13,20 +12,102 @@ export MOZ_APP_PROFILE=${binName}
|
||||
export MOZ_APP_DISPLAYNAME="${name}"
|
||||
export MOZ_BRANDING_DIRECTORY=${brandingDir}
|
||||
export MOZ_OFFICIAL_BRANDING_DIRECTORY=${brandingDir}
|
||||
export MOZ_MACBUNDLE_ID=${appId}
|
||||
export MOZ_DISTRIBUTION_ID=${appId}
|
||||
|
||||
# Uncomment if builds are too resource hungry
|
||||
# mk_add_options MOZ_MAKE_FLAGS="-j4"
|
||||
#ac_add_options --enable-linker=gold
|
||||
# ac_add_options --enable-linker=gold
|
||||
|
||||
# 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
|
||||
|
||||
# ALWAYS MANTAIN ONE LINE BREAK AT THE END OF THIS FILE
|
||||
ac_add_options --enable-application=browser
|
||||
|
||||
if test "$ZEN_RELEASE"; then
|
||||
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 --disable-jprof
|
||||
|
||||
ac_add_options --enable-rust-simd
|
||||
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-proxy-bypass-protection
|
||||
ac_add_options --enable-hardening
|
||||
ac_add_options --disable-profiling
|
||||
|
||||
ac_add_options --disable-crashreporter
|
||||
ac_add_options --disable-geckodriver
|
||||
ac_add_options --disable-rust-tests
|
||||
ac_add_options --disable-default-browser-agent
|
||||
|
||||
export MOZ_LTO=1
|
||||
ac_add_options MOZ_LTO=1
|
||||
ac_add_options --enable-lto=full,cross
|
||||
|
||||
ac_add_options --enable-jemalloc
|
||||
|
||||
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"
|
||||
|
||||
mk_add_options AUTOCLOBBER=1
|
||||
export AUTOCLOBBER=1
|
||||
|
||||
if ! test "$ZEN_CROSS_COMPILING"; then
|
||||
|
||||
# It causes link errors on windows
|
||||
ac_add_options --disable-dmd
|
||||
fi
|
||||
|
||||
ac_add_options --enable-updater
|
||||
fi
|
||||
|
||||
ac_add_options --enable-unverified-updates
|
||||
|
||||
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 --allow-addon-sideload
|
||||
ac_add_options --with-unsigned-addon-scopes=app,system
|
||||
|
||||
export MOZ_REQUIRE_SIGNING=
|
||||
export MOZ_TELEMETRY_REPORTING=
|
||||
|
||||
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
|
||||
|
||||
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
|
@@ -1,12 +1,44 @@
|
||||
# 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 -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 --disable-elf-hack
|
||||
fi
|
||||
|
||||
if test "$ZEN_RELEASE"; then
|
||||
ac_add_options --enable-strip
|
||||
export STRIP_FLAGS="--strip-debug --strip-unneeded"
|
||||
|
||||
if [ -f /home/runner/.mozbuild/sccache/sccache ]; then
|
||||
mk_add_options 'export RUSTC_WRAPPER=/home/runner/.mozbuild/sccache/sccache'
|
||||
mk_add_options 'export CCACHE_CPP2=yes'
|
||||
ac_add_options --with-ccache=/home/runner/.mozbuild/sccache/sccache
|
||||
mk_add_options 'export SCCACHE_GHA_ENABLED=on'
|
||||
fi
|
||||
|
||||
if ! test "$ZEN_CROSS_COMPILING"; then
|
||||
# WE ARE JUST SUPPORTING PGO FOR LINUX!
|
||||
export MOZ_PGO=1
|
||||
ac_add_options MOZ_PGO=1
|
||||
fi
|
||||
|
||||
export CFLAGS="-O3 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -maes"
|
||||
export CPPFLAGS="-O3 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -maes"
|
||||
export CXXFLAGS="-O3 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -maes"
|
||||
export LDFLAGS="-Wl,-O3 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -maes"
|
||||
export POLLY="-mllvm -polly -mllvm -polly-2nd-level-tiling -mllvm -polly-loopfusion-greedy -mllvm -polly-pattern-matching-based-opts -mllvm -polly-position=before-vectorizer -mllvm -polly-vectorizer=stripmine"
|
||||
export RUSTFLAGS="$RUSTFLAGS -C target-feature=+avx -C codegen-units=1 -Ctarget-cpu=x86-64-v3"
|
||||
fi
|
||||
|
||||
# Disable telemetry and tracking
|
||||
mk_add_options MOZ_TELEMETRY_REPORTING=
|
||||
|
@@ -1,14 +1,12 @@
|
||||
# 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=
|
||||
unset MOZ_STDCXX_COMPAT
|
||||
if test "$ZEN_RELEASE"; then
|
||||
export RUSTFLAGS="$RUSTFLAGS -Ctarget-cpu=apple-m1"
|
||||
fi
|
||||
|
||||
ac_add_options --enable-install-strip
|
||||
ac_add_options --target=aarch64-apple-darwin
|
||||
|
||||
export MOZ_MACBUNDLE_ID=${appId}
|
||||
export MOZ_MACBUNDLE_NAME="Zen Browser.app"
|
||||
|
@@ -1,7 +1,4 @@
|
||||
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=
|
||||
|
13
docs/changes.md
Normal file
@@ -0,0 +1,13 @@
|
||||
|
||||
## Changed things that should be tested each release
|
||||
|
||||
* Workspaces
|
||||
* Sidebar
|
||||
* Split views
|
||||
* Vertical tabs (expanded and not expanded)
|
||||
* Tab groups
|
||||
* Welcome Page
|
||||
* Overall performance
|
||||
* Overall stability
|
||||
* Pinning tabs (Grid layout)
|
||||
* Overall UX
|
5
docs/runners.md
Normal file
@@ -0,0 +1,5 @@
|
||||
|
||||
# Warp Build
|
||||
|
||||
For linux, we are using [warpbuild](https://warpbuild.com/) because github workflows can't handle building firefox :(
|
||||
|
@@ -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
@@ -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
18
package.json
@@ -3,15 +3,17 @@
|
||||
"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-newtab": "python3 update_newtab.py"
|
||||
"update-ff:raw": "surfer update",
|
||||
"update-newtab": "python3 scripts/update_newtab.py"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@@ -25,6 +27,6 @@
|
||||
},
|
||||
"homepage": "https://github.com/zen-browser/core#readme",
|
||||
"dependencies": {
|
||||
"gluon-build": "next"
|
||||
"@zen-browser/surfer": "^1.1.15"
|
||||
}
|
||||
}
|
||||
|
632
pnpm-lock.yaml
generated
@@ -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"]
|
||||
|
||||
|
275
src/browser/app/profile/better-fox.js
Normal file
@@ -0,0 +1,275 @@
|
||||
// Ignore license in this file
|
||||
//
|
||||
// The code in this file was created by @yokoffing and is licensed under the
|
||||
// MIT license:
|
||||
// MIT License
|
||||
//
|
||||
// Copyright (c) 2020 yokoffing
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in all
|
||||
// copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
// SOFTWARE.
|
||||
|
||||
/* You may copy+paste this file and use it as it is.
|
||||
*
|
||||
* If you make changes to your about:config while the program is running, the
|
||||
* changes will be overwritten by the user.js when the application restarts.
|
||||
*
|
||||
* To make lasting changes to preferences, you will have to edit the user.js.
|
||||
*/
|
||||
|
||||
/****************************************************************************
|
||||
* Betterfox *
|
||||
* "Ad meliora" *
|
||||
* version: 121 *
|
||||
* url: https://github.com/yokoffing/Betterfox *
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* SECTION: FASTFOX *
|
||||
****************************************************************************/
|
||||
/** GENERAL ***/
|
||||
pref('content.notify.interval', 100000);
|
||||
|
||||
/** GFX ***/
|
||||
pref('gfx.canvas.accelerated.cache-items', 4096);
|
||||
pref('gfx.canvas.accelerated.cache-size', 512);
|
||||
pref('gfx.content.skia-font-cache-size', 20);
|
||||
|
||||
/** DISK CACHE ***/
|
||||
pref('browser.cache.jsbc_compression_level', 3);
|
||||
|
||||
/** MEDIA CACHE ***/
|
||||
pref('media.memory_cache_max_size', 65536);
|
||||
pref('media.cache_readahead_limit', 7200);
|
||||
pref('media.cache_resume_threshold', 3600);
|
||||
|
||||
/** IMAGE CACHE ***/
|
||||
pref('image.mem.decode_bytes_at_a_time', 32768);
|
||||
|
||||
/** NETWORK ***/
|
||||
pref('network.buffer.cache.size', 262144);
|
||||
pref('network.buffer.cache.count', 128);
|
||||
pref('network.http.max-connections', 1800);
|
||||
pref('network.http.max-persistent-connections-per-server', 10);
|
||||
pref('network.http.max-urgent-start-excessive-connections-per-host', 5);
|
||||
pref('network.http.pacing.requests.enabled', false);
|
||||
pref('network.dnsCacheExpiration', 3600);
|
||||
pref('network.dns.max_high_priority_threads', 8);
|
||||
pref('network.ssl_tokens_cache_capacity', 10240);
|
||||
|
||||
/** SPECULATIVE LOADING ***/
|
||||
pref('network.dns.disablePrefetch', true);
|
||||
pref('network.prefetch-next', false);
|
||||
pref('network.predictor.enabled', false);
|
||||
|
||||
/** EXPERIMENTAL ***/
|
||||
pref('layout.css.grid-template-masonry-value.enabled', true);
|
||||
pref('dom.enable_web_task_scheduling', true);
|
||||
pref('layout.css.has-selector.enabled', true);
|
||||
pref('dom.security.sanitizer.enabled', true);
|
||||
|
||||
/****************************************************************************
|
||||
* SECTION: SECUREFOX *
|
||||
****************************************************************************/
|
||||
/** TRACKING PROTECTION ***/
|
||||
pref('browser.contentblocking.category', 'strict');
|
||||
pref(
|
||||
'urlclassifier.trackingSkipURLs',
|
||||
'*.reddit.com, *.twitter.com, *.twimg.com, *.tiktok.com'
|
||||
);
|
||||
pref(
|
||||
'urlclassifier.features.socialtracking.skipURLs',
|
||||
'*.instagram.com, *.twitter.com, *.twimg.com'
|
||||
);
|
||||
pref('network.cookie.sameSite.noneRequiresSecure', true);
|
||||
pref('browser.download.start_downloads_in_tmp_dir', true);
|
||||
pref('browser.helperApps.deleteTempFileOnExit', true);
|
||||
pref('browser.uitour.enabled', false);
|
||||
pref('privacy.globalprivacycontrol.enabled', true);
|
||||
|
||||
/** OCSP & CERTS / HPKP ***/
|
||||
pref('security.OCSP.enabled', 0);
|
||||
pref('security.remote_settings.crlite_filters.enabled', true);
|
||||
pref('security.pki.crlite_mode', 2);
|
||||
|
||||
/** SSL / TLS ***/
|
||||
pref('security.ssl.treat_unsafe_negotiation_as_broken', true);
|
||||
pref('browser.xul.error_pages.expert_bad_cert', true);
|
||||
pref('security.tls.enable_0rtt_data', false);
|
||||
|
||||
/** DISK AVOIDANCE ***/
|
||||
pref('browser.privatebrowsing.forceMediaMemoryCache', true);
|
||||
pref('browser.sessionstore.interval', 60000);
|
||||
|
||||
/** SHUTDOWN & SANITIZING ***/
|
||||
pref('privacy.history.custom', true);
|
||||
|
||||
/** SEARCH / URL BAR ***/
|
||||
pref('browser.search.separatePrivateDefault.ui.enabled', true);
|
||||
pref('browser.urlbar.update2.engineAliasRefresh', true);
|
||||
pref('browser.search.suggest.enabled', false);
|
||||
pref('browser.urlbar.suggest.quicksuggest.sponsored', false);
|
||||
pref('browser.urlbar.suggest.quicksuggest.nonsponsored', false);
|
||||
pref('security.insecure_connection_text.enabled', true);
|
||||
pref('security.insecure_connection_text.pbmode.enabled', true);
|
||||
pref('network.IDN_show_punycode', true);
|
||||
|
||||
/** HTTPS-FIRST POLICY ***/
|
||||
pref('dom.security.https_first', true);
|
||||
pref('dom.security.https_first_schemeless', true);
|
||||
|
||||
/** PASSWORDS ***/
|
||||
pref('signon.formlessCapture.enabled', false);
|
||||
pref('signon.privateBrowsingCapture.enabled', false);
|
||||
pref('network.auth.subresource-http-auth-allow', 1);
|
||||
pref('editor.truncate_user_pastes', false);
|
||||
|
||||
/** ADDRESS + CREDIT CARD MANAGER ***/
|
||||
pref('extensions.formautofill.creditCards.enabled', false);
|
||||
|
||||
/** MIXED CONTENT + CROSS-SITE ***/
|
||||
pref('security.mixed_content.block_display_content', true);
|
||||
pref('security.mixed_content.upgrade_display_content', true);
|
||||
pref('security.mixed_content.upgrade_display_content.image', true);
|
||||
pref('pdfjs.enableScripting', false);
|
||||
pref('extensions.postDownloadThirdPartyPrompt', false);
|
||||
|
||||
/** HEADERS / REFERERS ***/
|
||||
pref('network.http.referer.XOriginTrimmingPolicy', 2);
|
||||
|
||||
/** CONTAINERS ***/
|
||||
pref('privacy.userContext.ui.enabled', true);
|
||||
|
||||
/** WEBRTC ***/
|
||||
pref('media.peerconnection.ice.proxy_only_if_behind_proxy', true);
|
||||
pref('media.peerconnection.ice.default_address_only', true);
|
||||
|
||||
/** SAFE BROWSING ***/
|
||||
pref('browser.safebrowsing.downloads.remote.enabled', false);
|
||||
|
||||
/** MOZILLA ***/
|
||||
pref('permissions.default.desktop-notification', 2);
|
||||
pref('permissions.default.geo', 2);
|
||||
pref(
|
||||
'geo.provider.network.url',
|
||||
'https://location.services.mozilla.com/v1/geolocate?key=%MOZILLA_API_KEY%'
|
||||
);
|
||||
pref('permissions.manager.defaultsUrl', '');
|
||||
pref('webchannel.allowObject.urlWhitelist', '');
|
||||
|
||||
/** TELEMETRY ***/
|
||||
pref('datareporting.policy.dataSubmissionEnabled', false);
|
||||
pref('datareporting.healthreport.uploadEnabled', false);
|
||||
pref('toolkit.telemetry.unified', false);
|
||||
pref('toolkit.telemetry.enabled', false);
|
||||
pref('toolkit.telemetry.server', 'data:,');
|
||||
pref('toolkit.telemetry.archive.enabled', false);
|
||||
pref('toolkit.telemetry.newProfilePing.enabled', false);
|
||||
pref('toolkit.telemetry.shutdownPingSender.enabled', false);
|
||||
pref('toolkit.telemetry.updatePing.enabled', false);
|
||||
pref('toolkit.telemetry.bhrPing.enabled', false);
|
||||
pref('toolkit.telemetry.firstShutdownPing.enabled', false);
|
||||
pref('toolkit.telemetry.coverage.opt-out', true);
|
||||
pref('toolkit.coverage.opt-out', true);
|
||||
pref('toolkit.coverage.endpoint.base', '');
|
||||
pref('browser.ping-centre.telemetry', false);
|
||||
pref('browser.newtabpage.activity-stream.feeds.telemetry', false);
|
||||
pref('browser.newtabpage.activity-stream.telemetry', false);
|
||||
|
||||
/** EXPERIMENTS ***/
|
||||
pref('app.shield.optoutstudies.enabled', false);
|
||||
pref('app.normandy.enabled', false);
|
||||
pref('app.normandy.api_url', '');
|
||||
|
||||
/** CRASH REPORTS ***/
|
||||
pref('breakpad.reportURL', '');
|
||||
pref('browser.tabs.crashReporting.sendReport', false);
|
||||
pref('browser.crashReports.unsubmittedCheck.autoSubmit2', false);
|
||||
|
||||
/** DETECTION ***/
|
||||
pref('captivedetect.canonicalURL', '');
|
||||
pref('network.captive-portal-service.enabled', false);
|
||||
pref('network.connectivity-service.enabled', false);
|
||||
|
||||
/****************************************************************************
|
||||
* SECTION: PESKYFOX *
|
||||
****************************************************************************/
|
||||
/** MOZILLA UI ***/
|
||||
pref('browser.privatebrowsing.vpnpromourl', '');
|
||||
pref('extensions.getAddons.showPane', false);
|
||||
pref('extensions.htmlaboutaddons.recommendations.enabled', false);
|
||||
pref('browser.discovery.enabled', false);
|
||||
pref('browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons', false);
|
||||
pref(
|
||||
'browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features',
|
||||
false
|
||||
);
|
||||
pref('browser.preferences.moreFromMozilla', false);
|
||||
pref('browser.aboutwelcome.enabled', false);
|
||||
|
||||
/** THEME ADJUSTMENTS ***/
|
||||
pref('toolkit.legacyUserProfileCustomizations.stylesheets', true);
|
||||
pref('browser.compactmode.show', true);
|
||||
pref('layout.css.prefers-color-scheme.content-override', 2);
|
||||
pref('browser.privateWindowSeparation.enabled', false); // WINDOWS
|
||||
|
||||
/** COOKIE BANNER HANDLING ***/
|
||||
pref('cookiebanners.service.mode', 1);
|
||||
pref('cookiebanners.service.mode.privateBrowsing', 1);
|
||||
|
||||
/** URL BAR ***/
|
||||
pref('browser.urlbar.suggest.calculator', true);
|
||||
pref('browser.urlbar.unitConversion.enabled', true);
|
||||
pref('browser.urlbar.trending.featureGate', false);
|
||||
|
||||
/** NEW TAB PAGE ***/
|
||||
pref('browser.newtabpage.activity-stream.feeds.topsites', false);
|
||||
pref('browser.newtabpage.activity-stream.feeds.section.topstories', false);
|
||||
|
||||
/*** POCKET ***/
|
||||
pref('extensions.pocket.enabled', false);
|
||||
|
||||
/** DOWNLOADS ***/
|
||||
pref('browser.download.always_ask_before_handling_new_types', true);
|
||||
pref('browser.download.manager.addToRecentDocs', false);
|
||||
|
||||
/** PDF ***/
|
||||
pref('browser.download.open_pdf_attachments_inline', true);
|
||||
|
||||
/** TAB BEHAVIOR ***/
|
||||
pref('browser.bookmarks.openInTabClosesMenu', false);
|
||||
pref('browser.menu.showViewImageInfo', true);
|
||||
pref('findbar.highlightAll', true);
|
||||
pref('layout.word_select.eat_space_to_next_word', false);
|
||||
|
||||
/****************************************************************************
|
||||
* START: MY OVERRIDES *
|
||||
****************************************************************************/
|
||||
// visit https://github.com/yokoffing/Betterfox/wiki/Common-Overrides
|
||||
// visit https://github.com/yokoffing/Betterfox/wiki/Optional-Hardening
|
||||
// Enter your personal overrides below this line:
|
||||
|
||||
/****************************************************************************
|
||||
* SECTION: SMOOTHFOX *
|
||||
****************************************************************************/
|
||||
// visit https://github.com/yokoffing/Betterfox/blob/main/Smoothfox.js
|
||||
// Enter your scrolling overrides below this line:
|
||||
|
||||
/****************************************************************************
|
||||
* END: BETTERFOX *
|
||||
****************************************************************************/
|
632
src/browser/app/profile/fast-fox.js
Normal file
@@ -0,0 +1,632 @@
|
||||
|
||||
/****************************************************************************
|
||||
* SECTION: GENERAL *
|
||||
****************************************************************************/
|
||||
|
||||
// PREF: initial paint delay
|
||||
// How long FF will wait before rendering the page (in ms)
|
||||
// [NOTE] You may prefer using 250.
|
||||
// [NOTE] Dark Reader users may want to use 1000 [3].
|
||||
// [1] https://bugzilla.mozilla.org/show_bug.cgi?id=1283302
|
||||
// [2] https://docs.google.com/document/d/1BvCoZzk2_rNZx3u9ESPoFjSADRI0zIPeJRXFLwWXx_4/edit#heading=h.28ki6m8dg30z
|
||||
// [3] https://old.reddit.com/r/firefox/comments/o0xl1q/reducing_cpu_usage_of_dark_reader_extension/
|
||||
// [4] https://reddit.com/r/browsers/s/wvNB7UVCpx
|
||||
//pref("nglayout.initialpaint.delay", 5); // DEFAULT; formerly 250
|
||||
//pref("nglayout.initialpaint.delay_in_oopif", 5); // DEFAULT
|
||||
|
||||
// PREF: page reflow timer
|
||||
// Rather than wait until a page has completely downloaded to display it to the user,
|
||||
// web browsers will periodically render what has been received to that point.
|
||||
// Because reflowing the page every time additional data is received slows down
|
||||
// total page load time, a timer was added so that the page would not reflow too often.
|
||||
// This preference specfies whether that timer is active.
|
||||
// [1] https://kb.mozillazine.org/Content.notify.ontimer
|
||||
// true = do not reflow pages at an interval any higher than that specified by content.notify.interval (default)
|
||||
// false = reflow pages whenever new data is received
|
||||
//pref("content.notify.ontimer", true); // DEFAULT
|
||||
|
||||
// PREF: notification interval (in microseconds) to avoid layout thrashing
|
||||
// When Firefox is loading a page, it periodically reformats
|
||||
// or "reflows" the page as it loads. The page displays new elements
|
||||
// every 0.12 seconds by default. These redraws increase the total page load time.
|
||||
// The default value provides good incremental display of content
|
||||
// without causing an increase in page load time.
|
||||
// [NOTE] Lowering the interval will increase responsiveness
|
||||
// but also increase the total load time.
|
||||
// [WARNING] If this value is set below 1/10 of a second, it starts
|
||||
// to impact page load performance.
|
||||
// [EXAMPLE] 100000 = .10s = 100 reflows/second
|
||||
// [1] https://searchfox.org/mozilla-central/rev/c1180ea13e73eb985a49b15c0d90e977a1aa919c/modules/libpref/init/StaticPrefList.yaml#1824-1834
|
||||
// [2] https://dev.opera.com/articles/efficient-javascript/?page=3#reflow
|
||||
// [3] https://dev.opera.com/articles/efficient-javascript/?page=3#smoothspeed
|
||||
pref("content.notify.interval", 100000); // (.10s); default=120000 (.12s)
|
||||
|
||||
// PREF: new tab preload
|
||||
// [WARNING] Disabling this may cause a delay when opening a new tab in Firefox.
|
||||
// [1] https://wiki.mozilla.org/Tiles/Technical_Documentation#Ping
|
||||
// [2] https://github.com/arkenfox/user.js/issues/1556
|
||||
//pref("browser.newtab.preload", true); // DEFAULT
|
||||
|
||||
// PREF: disable EcoQoS [WINDOWS]
|
||||
// Background tab processes use efficiency mode on Windows 11 to limit resource use.
|
||||
// [WARNING] Leave this alone, unless you're on Desktop and you rely on
|
||||
// background tabs to have maximum performance.
|
||||
// [1] https://devblogs.microsoft.com/performance-diagnostics/introducing-ecoqos/
|
||||
// [2] https://bugzilla.mozilla.org/show_bug.cgi?id=1796525
|
||||
// [3] https://bugzilla.mozilla.org/show_bug.cgi?id=1800412
|
||||
// [4] https://reddit.com/r/firefox/comments/107fj69/how_can_i_disable_the_efficiency_mode_on_firefox/
|
||||
pref("dom.ipc.processPriorityManager.backgroundUsesEcoQoS", false);
|
||||
|
||||
// PREF: control how tabs are loaded when a session is restored
|
||||
// true=Tabs are not loaded until they are selected (default)
|
||||
// false=Tabs begin to load immediately.
|
||||
//pref("browser.sessionstore.restore_on_demand", true); // DEFAULT
|
||||
//pref("browser.sessionstore.restore_pinned_tabs_on_demand", true);
|
||||
//pref("browser.sessionstore.restore_tabs_lazily", true); // DEFAULT
|
||||
|
||||
// PREF: disable preSkeletonUI on startup [WINDOWS]
|
||||
pref("browser.startup.preXulSkeletonUI", false);
|
||||
|
||||
// PREF: lazy load iframes
|
||||
//pref("dom.iframe_lazy_loading.enabled", true); // DEFAULT [FF121+]
|
||||
|
||||
/****************************************************************************
|
||||
* SECTION: GFX RENDERING TWEAKS *
|
||||
****************************************************************************/
|
||||
|
||||
// PREF: Webrender tweaks
|
||||
// [1] https://searchfox.org/mozilla-central/rev/6e6332bbd3dd6926acce3ce6d32664eab4f837e5/modules/libpref/init/StaticPrefList.yaml#6202-6219
|
||||
// [2] https://hacks.mozilla.org/2017/10/the-whole-web-at-maximum-fps-how-webrender-gets-rid-of-jank/
|
||||
// [3] https://www.reddit.com/r/firefox/comments/tbphok/is_setting_gfxwebrenderprecacheshaders_to_true/i0bxs2r/
|
||||
// [4] https://www.reddit.com/r/firefox/comments/z5auzi/comment/ixw65gb?context=3
|
||||
// [5] https://gist.github.com/RubenKelevra/fd66c2f856d703260ecdf0379c4f59db?permalink_comment_id=4532937#gistcomment-4532937
|
||||
//pref("gfx.webrender.all", true); // enables WR + additional features
|
||||
//pref("gfx.webrender.precache-shaders", true); // longer initial startup time
|
||||
//pref("gfx.webrender.compositor", true); // DEFAULT WINDOWS macOS
|
||||
//pref("gfx.webrender.compositor.force-enabled", true); // enforce
|
||||
|
||||
// PREF: if your hardware doesn't support Webrender, you can fallback to Webrender's software renderer
|
||||
// [1] https://www.ghacks.net/2020/12/14/how-to-find-out-if-webrender-is-enabled-in-firefox-and-how-to-enable-it-if-it-is-not/
|
||||
//pref("gfx.webrender.software", true); // Software Webrender uses CPU instead of GPU
|
||||
//pref("gfx.webrender.software.opengl", true); // LINUX
|
||||
|
||||
// PREF: GPU-accelerated Canvas2D
|
||||
// Use gpu-canvas instead of to skia-canvas.
|
||||
// [WARNING] May cause issues on some Windows machines using integrated GPUs [2] [3]
|
||||
// Add to your overrides if you have a dedicated GPU.
|
||||
// [NOTE] Higher values will use more memory.
|
||||
// [1] https://bugzilla.mozilla.org/show_bug.cgi?id=1741501
|
||||
// [2] https://github.com/yokoffing/Betterfox/issues/153
|
||||
// [3] https://github.com/yokoffing/Betterfox/issues/198
|
||||
//pref("gfx.canvas.accelerated", true); // DEFAULT macOS LINUX [FF110]; not compatible with WINDOWS integrated GPUs
|
||||
pref("gfx.canvas.accelerated.cache-items", 4096); // default=2048; alt=8192
|
||||
pref("gfx.canvas.accelerated.cache-size", 512); // default=256; alt=1024
|
||||
pref("gfx.content.skia-font-cache-size", 20); // default=5; Chrome=20
|
||||
// [1] https://bugzilla.mozilla.org/show_bug.cgi?id=1239151#c2
|
||||
|
||||
// PREF: prefer GPU over CPU
|
||||
// At best, the prefs do nothing on Linux/macOS.
|
||||
// At worst, it'll result in crashes if the sandboxing is a WIP.
|
||||
// [1] https://firefox-source-docs.mozilla.org/dom/ipc/process_model.html#gpu-process
|
||||
//pref("layers.gpu-process.enabled", true); // DEFAULT WINDOWS
|
||||
//pref("layers.gpu-process.force-enabled", true); // enforce
|
||||
//pref("layers.mlgpu.enabled", true); // LINUX
|
||||
//pref("media.hardware-video-decoding.enabled", true); // DEFAULT WINDOWS macOS
|
||||
//pref("media.hardware-video-decoding.force-enabled", true); // enforce
|
||||
//pref("media.gpu-process-decoder", true); // DEFAULT WINDOWS
|
||||
//pref("media.ffmpeg.vaapi.enabled", true); // LINUX
|
||||
|
||||
// PREF: disable AV1 for hardware decodeable videos
|
||||
// Firefox sometimes uses AV1 video decoding even to GPUs which do not support it.
|
||||
// [1] https://www.reddit.com/r/AV1/comments/s5xyph/youtube_av1_codec_have_worse_quality_than_old_vp9
|
||||
//pref("media.av1.enabled", false);
|
||||
|
||||
// PREF: hardware and software decoded video overlay [FF116+]
|
||||
// [1] https://bugzilla.mozilla.org/show_bug.cgi?id=1829063
|
||||
// [2] https://phabricator.services.mozilla.com/D175993
|
||||
//pref("gfx.webrender.dcomp-video-hw-overlay-win", true); // DEFAULT
|
||||
//pref("gfx.webrender.dcomp-video-hw-overlay-win-force-enabled", true); // enforce
|
||||
//pref("gfx.webrender.dcomp-video-sw-overlay-win", true); // DEFAULT
|
||||
//pref("gfx.webrender.dcomp-video-sw-overlay-win-force-enabled", true); // enforce
|
||||
|
||||
/****************************************************************************
|
||||
* SECTION: DISK CACHE *
|
||||
****************************************************************************/
|
||||
|
||||
// PREF: disk cache
|
||||
// [NOTE] If you think it helps performance, then feel free to override this.
|
||||
// [SETTINGS] See about:cache
|
||||
// More efficient to keep the browser cache instead of having to
|
||||
// re-download objects for the websites you visit frequently.
|
||||
// [1] https://www.janbambas.cz/new-firefox-http-cache-enabled/
|
||||
//pref("browser.cache.disk.enable", true); // DEFAULT
|
||||
|
||||
// PREF: disk cache size
|
||||
// [1] https://bugzilla.mozilla.org/buglist.cgi?bug_id=913808,968106,968101
|
||||
// [2] https://rockridge.hatenablog.com/entry/2014/09/15/165501
|
||||
// [3] https://www.reddit.com/r/firefox/comments/17oqhw3/firefox_and_ssd_disk_consumption/
|
||||
//pref("browser.cache.disk.smart_size.enabled", false); // force a fixed max cache size on disk
|
||||
//pref("browser.cache.disk.capacity", 512000); // default=256000; size of disk cache; 1024000=1GB, 2048000=2GB
|
||||
//pref("browser.cache.disk.max_entry_size", 51200); // DEFAULT (50 MB); maximum size of an object in disk cache
|
||||
|
||||
// PREF: Race Cache With Network (RCWN) [FF59+]
|
||||
// [ABOUT] about:networking#rcwn
|
||||
// Firefox concurrently sends requests for cached resources to both the
|
||||
// local disk cache and the network server. The browser uses whichever
|
||||
// result arrives first and cancels the other request. This approach sometimes
|
||||
// loads pages faster because the network can be quicker than accessing the cache
|
||||
// on a hard drive. When RCWN is enabled, the request might be served from
|
||||
// the server even if you have valid entry in the cache. Set to false if your
|
||||
// intention is to increase cache usage and reduce network usage.
|
||||
// [1] https://slides.com/valentingosu/race-cache-with-network-2017
|
||||
// [2] https://simonhearne.com/2020/network-faster-than-cache/
|
||||
// [3] https://support.mozilla.org/en-US/questions/1267945
|
||||
// [4] https://askubuntu.com/questions/1214862/36-syns-in-a-row-how-to-limit-firefox-connections-to-one-website
|
||||
// [5] https://bugzilla.mozilla.org/show_bug.cgi?id=1622859
|
||||
//pref("network.http.rcwn.enabled", true); // DEFAULT
|
||||
|
||||
// PREF: attempt to RCWN only if a resource is smaller than this size
|
||||
//pref("network.http.rcwn.small_resource_size_kb", 256); // DEFAULT
|
||||
|
||||
// PREF: cache memory pool
|
||||
// Cache v2 provides a memory pool that stores metadata (such as response headers)
|
||||
// for recently read cache entries [1]. It is managed by a cache thread, and caches with
|
||||
// metadata in the pool appear to be reused immediately.
|
||||
// [1] https://bugzilla.mozilla.org/buglist.cgi?bug_id=986179
|
||||
//pref("browser.cache.disk.metadata_memory_limit", 500); // default=250 (0.25 MB); limit of recent metadata we keep in memory for faster access
|
||||
|
||||
// PREF: number of chunks we preload ahead of read
|
||||
// Large content such as images will load faster.
|
||||
// [1] https://bugzilla.mozilla.org/buglist.cgi?bug_id=913819,988318
|
||||
// [2] http://www.janbambas.cz/new-firefox-http-cache-enabled/
|
||||
//pref("browser.cache.disk.preload_chunk_count", 4); // DEFAULT
|
||||
|
||||
// PREF: the time period used to re-compute the frecency value of cache entries
|
||||
// The frequency algorithm is used to select entries, and entries that are recently
|
||||
// saved or frequently reused are retained. The frecency value determines how
|
||||
// frequently a page has been accessed and is used by Firefox's cache algorithm.
|
||||
// The frequency algorithm is used to select entries, and entries that are recently
|
||||
// saved or frequently reused are retained. The frecency value determines how
|
||||
// often a page has been accessed and is used by Firefox's cache algorithm.
|
||||
// When the memory pool becomes full, the oldest data is purged. By default,
|
||||
// data older than 6 hours is treated as old.
|
||||
// [1] https://bugzilla.mozilla.org/buglist.cgi?bug_id=942835,1012327
|
||||
// [2] https://bugzilla.mozilla.org/buglist.cgi?bug_id=913808,968101
|
||||
//pref("browser.cache.frecency_half_life_hours", 6); // DEFAULT
|
||||
|
||||
// PREF: memory limit (in kB) for new cache data not yet written to disk
|
||||
// Writes to the cache are buffered and written to disk on background with low priority.
|
||||
// With a slow persistent storage, these buffers may grow when data is coming
|
||||
// fast from the network. When the amount of unwritten data is exceeded, new
|
||||
// writes will simply fail. We have two buckets, one for important data
|
||||
// (priority) like html, css, fonts and js, and one for other data like images, video, etc.
|
||||
//pref("browser.cache.disk.max_chunks_memory_usage", 40960); // DEFAULT (40 MB)
|
||||
//pref("browser.cache.disk.max_priority_chunks_memory_usage", 40960); // DEFAULT (40 MB)
|
||||
|
||||
// PREF: how often to validate document in cache
|
||||
// [1] https://searchfox.org/mozilla-release/source/modules/libpref/init/StaticPrefList.yaml#1092-1096
|
||||
// 0 = once-per-session
|
||||
// 3 = when-appropriate/automatically (default)
|
||||
//pref("browser.cache.check_doc_frequency", 3); // DEFAULT
|
||||
|
||||
// PREF: enforce free space checks
|
||||
// When smartsizing is disabled, we could potentially fill all disk space by
|
||||
// cache data when the disk capacity is not set correctly. To avoid that, we
|
||||
// check the free space every time we write some data to the cache. The free
|
||||
// space is checked against two limits. Once the soft limit is reached we start
|
||||
// evicting the least useful entries, when we reach the hard limit writing to
|
||||
// the entry fails.
|
||||
//pref("browser.cache.disk.free_space_soft_limit", 10240); // default=5120 (5 MB)
|
||||
//pref("browser.cache.disk.free_space_hard_limit", 2048); // default=1024 (1 MB)
|
||||
|
||||
// PREF: compression level for cached JavaScript bytecode [FF102+]
|
||||
// [1] https://github.com/yokoffing/Betterfox/issues/247
|
||||
// 0 = do not compress (default)
|
||||
// 1 = minimal compression
|
||||
// 9 = maximal compression
|
||||
pref("browser.cache.jsbc_compression_level", 3);
|
||||
|
||||
// PREF: strategy to use for when the bytecode should be encoded and saved [TESTING ONLY]
|
||||
// -1 makes page load times marginally longer when a page is being loaded for the first time.
|
||||
// Subsequent reload of websites will be much much faster.
|
||||
// [1] https://searchfox.org/mozilla-release/source/modules/libpref/init/StaticPrefList.yaml#3461-3488
|
||||
// [2] https://www.reddit.com/r/firefox/comments/12786yv/improving_performance_in_firefox_android_part_ii/
|
||||
// -1 = saved as soon as the script is seen for the first time, independently of the size or last access time
|
||||
// 0 = saved in order to minimize the page-load time (default)
|
||||
//pref("dom.script_loader.bytecode_cache.enabled", true); // DEFAULT
|
||||
//pref("dom.script_loader.bytecode_cache.strategy", 0); // DEFAULT
|
||||
|
||||
/****************************************************************************
|
||||
* SECTION: MEMORY CACHE *
|
||||
****************************************************************************/
|
||||
|
||||
// PREF: memory cache
|
||||
// The "automatic" size selection (default) is based on a decade-old table
|
||||
// that only contains settings for systems at or below 8GB of system memory [1].
|
||||
// Waterfox G6 allows it to go above 8GB machines [3].
|
||||
// Value can be up to the max size of an unsigned 64-bit integer.
|
||||
// -1=Automatically decide the maximum memory to use to cache decoded images,
|
||||
// messages, and chrome based on the total amount of RAM
|
||||
// [1] https://kb.mozillazine.org/Browser.cache.memory.capacity#-1
|
||||
// [2] https://searchfox.org/mozilla-central/source/netwerk/cache2/CacheObserver.cpp#94-125
|
||||
// [3] https://github.com/WaterfoxCo/Waterfox/commit/3fed16932c80a2f6b37d126fe10aed66c7f1c214
|
||||
//pref("browser.cache.memory.capacity", -1); // DEFAULT; 256000=256 MB; 512000=500 MB; 1048576=1GB, 2097152=2GB
|
||||
//pref("browser.cache.memory.max_entry_size", 10240); // (10 MB); default=5120 (5 MB)
|
||||
|
||||
// PREF: amount of Back/Forward cached pages stored in memory for each tab
|
||||
// Pages that were recently visited are stored in memory in such a way
|
||||
// that they don't have to be re-parsed. This improves performance
|
||||
// when pressing Back and Forward. This pref limits the maximum
|
||||
// number of pages stored in memory. If you are not using the Back
|
||||
// and Forward buttons that much, but rather using tabs, then there
|
||||
// is no reason for Firefox to keep memory for this.
|
||||
// -1=determine automatically (8 pages)
|
||||
// [1] https://kb.mozillazine.org/Browser.sessionhistory.max_total_viewers#Possible_values_and_their_effects
|
||||
//pref("browser.sessionhistory.max_total_viewers", 4);
|
||||
|
||||
/****************************************************************************
|
||||
* SECTION: MEDIA CACHE *
|
||||
****************************************************************************/
|
||||
|
||||
// PREF: media disk cache
|
||||
//pref("media.cache_size", 512000); // DEFAULT
|
||||
|
||||
// PREF: media memory cache
|
||||
// [1] https://hg.mozilla.org/mozilla-central/file/tip/modules/libpref/init/StaticPrefList.yaml#l9652
|
||||
// [2] https://github.com/arkenfox/user.js/pull/941
|
||||
pref("media.memory_cache_max_size", 65536); // default=8192; AF=65536; alt=131072
|
||||
//pref("media.memory_caches_combined_limit_kb", 524288); // DEFAULT; alt=1048576
|
||||
//pref("media.memory_caches_combined_limit_pc_sysmem", 5); // DEFAULT; alt=10; the percentage of system memory that Firefox can use for media caches
|
||||
|
||||
// PREF: Media Source Extensions (MSE) web standard
|
||||
// Disabling MSE allows videos to fully buffer, but you're limited to 720p.
|
||||
// [WARNING] Disabling MSE may break certain videos.
|
||||
// false=Firefox plays the old WebM format
|
||||
// true=Firefox plays the new WebM format (default)
|
||||
// [1] https://support.mozilla.org/en-US/questions/1008271
|
||||
//pref("media.mediasource.enabled", true); // DEFAULT
|
||||
|
||||
// PREF: adjust video buffering periods when not using MSE (in seconds)
|
||||
// [NOTE] Does not affect videos over 720p since they use DASH playback [1]
|
||||
// [1] https://lifehacker.com/preload-entire-youtube-videos-by-disabling-dash-playbac-1186454034
|
||||
pref("media.cache_readahead_limit", 7200); // 120 min; default=60; stop reading ahead when our buffered data is this many seconds ahead of the current playback
|
||||
pref("media.cache_resume_threshold", 3600); // 60 min; default=30; when a network connection is suspended, don't resume it until the amount of buffered data falls below this threshold
|
||||
|
||||
/****************************************************************************
|
||||
* SECTION: IMAGE CACHE *
|
||||
****************************************************************************/
|
||||
|
||||
// PREF: image cache
|
||||
//pref("image.cache.size", 5242880); // DEFAULT; in MiB; alt=10485760 (cache images up to 10MiB in size)
|
||||
pref("image.mem.decode_bytes_at_a_time", 32768); // default=16384; alt=65536; chunk size for calls to the image decoders
|
||||
|
||||
// PREF: set minimum timeout to unmap shared surfaces since they have been last used
|
||||
// This is only used on 32-bit builds of Firefox where there is meaningful
|
||||
// virtual address space pressure.
|
||||
// [1] https://phabricator.services.mozilla.com/D109440
|
||||
// [2] https://bugzilla.mozilla.org/show_bug.cgi?id=1699224
|
||||
//pref("image.mem.shared.unmap.min_expiration_ms", 120000); // default=60000; minimum timeout to unmap shared surfaces since they have been last used
|
||||
|
||||
/****************************************************************************
|
||||
* SECTION: NETWORK *
|
||||
****************************************************************************/
|
||||
|
||||
// PREF: use bigger packets
|
||||
// [WARNING] Cannot open HTML files bigger than 4MB if changed [2].
|
||||
// Reduce Firefox's CPU usage by requiring fewer application-to-driver data transfers.
|
||||
// However, it does not affect the actual packet sizes transmitted over the network.
|
||||
// [1] https://www.mail-archive.com/support-seamonkey@lists.mozilla.org/msg74561.html
|
||||
// [2] https://github.com/yokoffing/Betterfox/issues/279
|
||||
//pref("network.buffer.cache.size", 262144); // 256 kb; default=32768 (32 kb)
|
||||
//pref("network.buffer.cache.count", 128); // default=24
|
||||
|
||||
// PREF: increase the absolute number of HTTP connections
|
||||
// [1] https://kb.mozillazine.org/Network.http.max-connections
|
||||
// [2] https://kb.mozillazine.org/Network.http.max-persistent-connections-per-server
|
||||
// [3] https://www.reddit.com/r/firefox/comments/11m2yuh/how_do_i_make_firefox_use_more_of_my_900_megabit/jbfmru6/
|
||||
pref("network.http.max-connections", 1800); // default=900
|
||||
pref("network.http.max-persistent-connections-per-server", 10); // default=6; download connections; anything above 10 is excessive
|
||||
pref("network.http.max-urgent-start-excessive-connections-per-host", 5); // default=3
|
||||
//pref("network.http.max-persistent-connections-per-proxy", 48); // default=32
|
||||
//pref("network.websocket.max-connections", 200); // DEFAULT
|
||||
|
||||
// PREF: pacing requests [FF23+]
|
||||
// Controls how many HTTP requests are sent at a time.
|
||||
// Pacing HTTP requests can have some benefits, such as reducing network congestion,
|
||||
// improving web page loading speed, and avoiding server overload.
|
||||
// Pacing requests adds a slight delay between requests to throttle them.
|
||||
// If you have a fast machine and internet connection, disabling pacing
|
||||
// may provide a small speed boost when loading pages with lots of requests.
|
||||
// false=Firefox will send as many requests as possible without pacing
|
||||
// true=Firefox will pace requests (default)
|
||||
pref("network.http.pacing.requests.enabled", false);
|
||||
//pref("network.http.pacing.requests.min-parallelism", 10); // default=6
|
||||
//pref("network.http.pacing.requests.burst", 14); // default=10
|
||||
|
||||
// PREF: increase DNS cache
|
||||
// [1] https://developer.mozilla.org/en-US/docs/Web/Performance/Understanding_latency
|
||||
//pref("network.dnsCacheEntries", 1000); // default=400
|
||||
|
||||
// PREF: adjust DNS expiration time
|
||||
// [ABOUT] about:networking#dns
|
||||
// [NOTE] These prefs will be ignored by DNS resolver if using DoH/TRR.
|
||||
pref("network.dnsCacheExpiration", 3600); // keep entries for 1 hour
|
||||
//pref("network.dnsCacheExpirationGracePeriod", 240); // default=60; cache DNS entries for 4 minutes after they expire
|
||||
|
||||
// PREF: the number of threads for DNS
|
||||
//pref("network.dns.max_high_priority_threads", 40); // DEFAULT [FF 123?]
|
||||
//pref("network.dns.max_any_priority_threads", 24); // DEFAULT [FF 123?]
|
||||
|
||||
// PREF: increase TLS token caching
|
||||
pref("network.ssl_tokens_cache_capacity", 10240); // default=2048; more TLS token caching (fast reconnects)
|
||||
|
||||
/****************************************************************************
|
||||
* SECTION: SPECULATIVE LOADING *
|
||||
****************************************************************************/
|
||||
|
||||
// These are connections that are not explicitly asked for (e.g., clicked on).
|
||||
// [1] https://developer.mozilla.org/en-US/docs/Web/Performance/Speculative_loading
|
||||
|
||||
// [NOTE] FF85+ partitions (isolates) pooled connections, prefetch connections,
|
||||
// pre-connect connections, speculative connections, TLS session identifiers,
|
||||
// and other connections. We can take advantage of the speed of pre-connections
|
||||
// while preserving privacy. Users may relax hardening to maximize their preference.
|
||||
// For more information, see SecureFox: "PREF: State Paritioning" and "PREF: Network Partitioning".
|
||||
// [NOTE] To activate and increase network predictions, go to settings in uBlock Origin and uncheck:
|
||||
// - "Disable pre-fetching (to prevent any connection for blocked network requests)"
|
||||
// [NOTE] Add prefs to "MY OVERRIDES" section and uncomment to enable them in your user.js.
|
||||
|
||||
// PREF: link-mouseover opening connection to linked server
|
||||
// When accessing content online, devices use sockets as endpoints.
|
||||
// The global limit on half-open sockets controls how many speculative
|
||||
// connection attempts can occur at once when starting new connections [3].
|
||||
// If the user follows through, pages can load faster since some
|
||||
// work was done in advance. Firefox opens predictive connections
|
||||
// to sites when hovering over New Tab thumbnails or starting a
|
||||
// URL Bar search [1] and hyperlinks within a page [2].
|
||||
// [NOTE] DNS (if enabled), TCP, and SSL handshakes are set up in advance,
|
||||
// but page contents are not downloaded until a click on the link is registered.
|
||||
// [1] https://support.mozilla.org/en-US/kb/how-stop-firefox-making-automatic-connections?redirectslug=how-stop-firefox-automatically-making-connections&redirectlocale=en-US#:~:text=Speculative%20pre%2Dconnections
|
||||
// [2] https://news.slashdot.org/story/15/08/14/2321202/how-to-quash-firefoxs-silent-requests
|
||||
// [3] https://searchfox.org/mozilla-central/rev/028c68d5f32df54bca4cf96376f79e48dfafdf08/modules/libpref/init/all.js#1280-1282
|
||||
// [4] https://www.keycdn.com/blog/resource-hints#prefetch
|
||||
// [5] https://3perf.com/blog/link-rels/#prefetch
|
||||
//pref("network.http.speculative-parallel-limit", 20); // DEFAULT (FF127+?)
|
||||
|
||||
// PREF: DNS prefetching for HTMLLinkElement <link rel="dns-prefetch">
|
||||
// Used for cross-origin connections to provide small performance improvements.
|
||||
// You can enable rel=dns-prefetch for the HTTPS document without prefetching
|
||||
// DNS for anchors, whereas the latter makes more specualtive requests [5].
|
||||
// [1] https://bitsup.blogspot.com/2008/11/dns-prefetching-for-firefox.html
|
||||
// [2] https://css-tricks.com/prefetching-preloading-prebrowsing/#dns-prefetching
|
||||
// [3] https://www.keycdn.com/blog/resource-hints#2-dns-prefetching
|
||||
// [4] http://www.mecs-press.org/ijieeb/ijieeb-v7-n5/IJIEEB-V7-N5-2.pdf
|
||||
// [5] https://bugzilla.mozilla.org/show_bug.cgi?id=1596935#c28
|
||||
pref("network.dns.disablePrefetch", true);
|
||||
pref("network.dns.disablePrefetchFromHTTPS", true); // [FF127+ false]
|
||||
|
||||
// PREF: DNS prefetch for HTMLAnchorElement (speculative DNS)
|
||||
// Disable speculative DNS calls to prevent Firefox from resolving
|
||||
// hostnames for other domains linked on a page. This may eliminate
|
||||
// unnecessary DNS lookups, but can increase latency when following external links.
|
||||
// [1] https://bugzilla.mozilla.org/show_bug.cgi?id=1596935#c28
|
||||
// [2] https://github.com/arkenfox/user.js/issues/1870#issuecomment-2220773972
|
||||
//pref("dom.prefetch_dns_for_anchor_http_document", false); // [FF128+]
|
||||
//pref("dom.prefetch_dns_for_anchor_https_document", false); // DEFAULT [FF128+]
|
||||
|
||||
// PREF: enable <link rel="preconnect"> tag and Link: rel=preconnect response header handling
|
||||
//pref("network.preconnect", true); // DEFAULT
|
||||
|
||||
// PREF: preconnect to the autocomplete URL in the address bar
|
||||
// Whether to warm up network connections for autofill or search results.
|
||||
// Firefox preloads URLs that autocomplete when a user types into the address bar.
|
||||
// Connects to destination server ahead of time, to avoid TCP handshake latency.
|
||||
// [NOTE] Firefox will perform DNS lookup (if enabled) and TCP and TLS handshake,
|
||||
// but will not start sending or receiving HTTP data.
|
||||
// [1] https://www.ghacks.net/2017/07/24/disable-preloading-firefox-autocomplete-urls/
|
||||
//pref("browser.urlbar.speculativeConnect.enabled", false);
|
||||
|
||||
// PREF: mousedown speculative connections on bookmarks and history [FF98+]
|
||||
// Whether to warm up network connections for places:menus and places:toolbar.
|
||||
//pref("browser.places.speculativeConnect.enabled", false);
|
||||
|
||||
// PREF: network module preload <link rel="modulepreload"> [FF115+]
|
||||
// High-priority loading of current page JavaScript modules.
|
||||
// Used to preload high-priority JavaScript modules for strategic performance improvements.
|
||||
// Module preloading allows developers to fetch JavaScript modules and dependencies
|
||||
// earlier to accelerate page loads. The browser downloads, parses, and compiles modules
|
||||
// referenced by links with this attribute in parallel with other resources, rather
|
||||
// than sequentially waiting to process each. Preloading reduces overall download times.
|
||||
// Browsers may also automatically preload dependencies without firing extra events.
|
||||
// Unlike other pre-connection tags (except rel=preload), this tag is mandatory for the browser.
|
||||
// [1] https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/rel/modulepreload
|
||||
//pref("network.modulepreload", true); // DEFAULT
|
||||
|
||||
// PREF: link prefetching <link rel="prefetch">
|
||||
// Pre-populates the HTTP cache by prefetching same-site future navigation
|
||||
// resources or subresources used on those pages.
|
||||
// Enabling link prefetching allows Firefox to preload pages tagged as important.
|
||||
// The browser prefetches links with the prefetch-link tag, fetching resources
|
||||
// likely needed for the next navigation at low priority. When clicking a link
|
||||
// or loading a new page, prefetching stops and discards hints. Prefetching
|
||||
// downloads resources without executing them.
|
||||
// [NOTE] Since link prefetch uses the HTTP cache, it has a number of issues
|
||||
// with document prefetches, such as being potentially blocked by Cache-Control headers
|
||||
// (e.g. cache partitioning).
|
||||
// [1] https://developer.mozilla.org/en-US/docs/Glossary/Prefetch
|
||||
// [2] http://www.mecs-press.org/ijieeb/ijieeb-v7-n5/IJIEEB-V7-N5-2.pdf
|
||||
// [3] https://timkadlec.com/remembers/2020-06-17-prefetching-at-this-age/
|
||||
// [4] https://3perf.com/blog/link-rels/#prefetch
|
||||
// [5] https://developer.mozilla.org/docs/Web/HTTP/Link_prefetching_FAQ
|
||||
pref("network.prefetch-next", false);
|
||||
|
||||
// PREF: Fetch Priority API [FF119+]
|
||||
// Indicates whether the `fetchpriority` attribute for elements which support it.
|
||||
// [1] https://web.dev/articles/fetch-priority
|
||||
// [2] https://nitropack.io/blog/post/priority-hints
|
||||
// [2] https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/fetchPriority
|
||||
// [3] https://developer.mozilla.org/en-US/docs/Web/API/HTMLLinkElement/fetchPriority
|
||||
//pref("network.fetchpriority.enabled", true);
|
||||
|
||||
// PREF: early hints [FF120+]
|
||||
// [1] https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/103
|
||||
// [2] https://developer.chrome.com/blog/early-hints/
|
||||
// [3] https://blog.cloudflare.com/early-hints/
|
||||
// [4] https://blog.cloudflare.com/early-hints-performance/
|
||||
//pref("network.early-hints.enabled", true);
|
||||
|
||||
// PREF: `Link: rel=preconnect` in 103 Early Hint response [FF120+]
|
||||
// Used to warm most critical cross-origin connections to provide
|
||||
// performance improvements when connecting to them.
|
||||
// [NOTE] When 0, this is limited by "network.http.speculative-parallel-limit".
|
||||
//pref("network.early-hints.preconnect.enabled", true);
|
||||
//pref("network.early-hints.preconnect.max_connections", 10); // DEFAULT
|
||||
|
||||
// PREF: Network Predictor (NP)
|
||||
// When enabled, it trains and uses Firefox's algorithm to preload page resource
|
||||
// by tracking past page resources. It uses a local file (history) of needed images,
|
||||
// scripts, etc. to request them preemptively when navigating.
|
||||
// [NOTE] By default, it only preconnects, doing DNS, TCP, and SSL handshakes.
|
||||
// No data sends until clicking. With "network.predictor.enable-prefetch" enabled,
|
||||
// it also performs prefetches.
|
||||
// [1] https://wiki.mozilla.org/Privacy/Reviews/Necko
|
||||
// [2] https://www.ghacks.net/2014/05/11/seer-disable-firefox/
|
||||
// [3] https://github.com/dillbyrne/random-agent-spoofer/issues/238#issuecomment-110214518
|
||||
// [4] https://www.igvita.com/posa/high-performance-networking-in-google-chrome/#predictor
|
||||
pref("network.predictor.enabled", false);
|
||||
|
||||
// PREF: Network Predictor fetch for resources ahead of time
|
||||
// Prefetch page resources based on past user behavior.
|
||||
//pref("network.predictor.enable-prefetch", false); // DEFAULT
|
||||
|
||||
// PREF: make Network Predictor active when hovering over links
|
||||
// When hovering over links, Network Predictor uses past resource history to
|
||||
// preemptively request what will likely be needed instead of waiting for the document.
|
||||
// Predictive connections automatically open when hovering over links to speed up
|
||||
// loading, starting some work in advance.
|
||||
//pref("network.predictor.enable-hover-on-ssl", false); // DEFAULT
|
||||
|
||||
// PREF: assign Network Predictor confidence levels
|
||||
// [NOTE] Keep in mind that Network Predictor must LEARN your browsing habits.
|
||||
// Editing these lower will cause more speculative connections to occur,
|
||||
// which reduces accuracy over time and has privacy implications.
|
||||
//pref("network.predictor.preresolve-min-confidence", 60); // DEFAULT
|
||||
//pref("network.predictor.preconnect-min-confidence", 90); // DEFAULT
|
||||
//pref("network.predictor.prefetch-min-confidence", 100); // DEFAULT
|
||||
|
||||
// PREF: other Network Predictor values
|
||||
// [NOTE] Keep in mmind that Network Predictor must LEARN your browsing habits.
|
||||
//pref("network.predictor.prefetch-force-valid-for", 10); // DEFAULT; how long prefetched resources are considered valid and usable (in seconds) for the prediction modeling
|
||||
//pref("network.predictor.prefetch-rolling-load-count", 10); // DEFAULT; the maximum number of resources that Firefox will prefetch in memory at one time based on prediction modeling
|
||||
//pref("network.predictor.max-resources-per-entry", 250); // default=100
|
||||
//pref("network.predictor.max-uri-length", 1000); // default=500
|
||||
|
||||
/****************************************************************************
|
||||
* SECTION: EXPERIMENTAL *
|
||||
****************************************************************************/
|
||||
|
||||
// PREF: CSS Masonry Layout [NIGHTLY]
|
||||
// [1] https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Grid_Layout/Masonry_Layout
|
||||
pref("layout.css.grid-template-masonry-value.enabled", true);
|
||||
|
||||
// PREF: Prioritized Task Scheduling API [NIGHTLY]
|
||||
// [1] https://blog.mozilla.org/performance/2022/06/02/prioritized-task-scheduling-api-is-prototyped-in-nightly/
|
||||
// [2] https://medium.com/airbnb-engineering/building-a-faster-web-experience-with-the-posttask-scheduler-276b83454e91
|
||||
pref("dom.enable_web_task_scheduling", true);
|
||||
|
||||
// PREF: HTML Sanitizer API [NIGHTLY]
|
||||
// [1] https://developer.mozilla.org/en-US/docs/Web/API/Sanitizer
|
||||
// [2] https://caniuse.com/mdn-api_sanitizer
|
||||
pref("dom.security.sanitizer.enabled", true);
|
||||
|
||||
// PREF: WebGPU [HIGHLY EXPERIMENTAL!]
|
||||
// [WARNING] Do not enable unless you are a web developer!
|
||||
// [1] https://bugzilla.mozilla.org/show_bug.cgi?id=1746245
|
||||
// [2] https://developer.chrome.com/docs/web-platform/webgpu/
|
||||
// [3] https://github.com/gpuweb/gpuweb/wiki/Implementation-Status
|
||||
// [4] https://hacks.mozilla.org/2020/04/experimental-webgpu-in-firefox/
|
||||
//pref("dom.webgpu.enabled", true);
|
||||
//pref("gfx.webgpu.force-enabled", true); // enforce
|
||||
// enable WebGPU indirect draws/dispatches:
|
||||
//pref("dom.webgpu.indirect-dispatch.enabled", true);
|
||||
|
||||
/****************************************************************************
|
||||
* SECTION: TAB UNLOAD *
|
||||
****************************************************************************/
|
||||
|
||||
// PREF: unload tabs on low memory
|
||||
// [ABOUT] about:unloads
|
||||
// Firefox will detect if your computer’s memory is running low (less than 200MB)
|
||||
// and suspend tabs that you have not used in awhile.
|
||||
// [1] https://support.mozilla.org/en-US/kb/unload-inactive-tabs-save-system-memory-firefox
|
||||
// [2] https://hacks.mozilla.org/2021/10/tab-unloading-in-firefox-93/
|
||||
//pref("browser.tabs.unloadOnLowMemory", true); // DEFAULT
|
||||
|
||||
// PREF: determine when tabs unload [WINDOWS] [LINUX]
|
||||
// Notify TabUnloader or send the memory pressure if the memory resource
|
||||
// notification is signaled AND the available commit space is lower than
|
||||
// this value.
|
||||
// Set this to some high value, e.g. 2/3 of total memory available in your system:
|
||||
// 4GB=2640, 8GB=5280, 16GB=10560, 32GB=21120, 64GB=42240
|
||||
// [1] https://dev.to/msugakov/taking-firefox-memory-usage-under-control-on-linux-4b02
|
||||
//pref("browser.low_commit_space_threshold_mb", 2640); // default=200; WINDOWS LINUX
|
||||
|
||||
// PREF: determine when tabs unload [LINUX]
|
||||
// On Linux, Firefox checks available memory in comparison to total memory,
|
||||
// and use this percent value (out of 100) to determine if Firefox is in a
|
||||
// low memory scenario.
|
||||
// [1] https://dev.to/msugakov/taking-firefox-memory-usage-under-control-on-linux-4b02
|
||||
//pref("browser.low_commit_space_threshold_percent", 33); // default=5; LINUX
|
||||
|
||||
// PREF: determine how long (in ms) tabs are inactive before they unload
|
||||
// 60000=1min; 300000=5min; 600000=10min (default)
|
||||
//pref("browser.tabs.min_inactive_duration_before_unload", 300000); // 5min; default=600000
|
||||
|
||||
/****************************************************************************
|
||||
* SECTION: PROCESS COUNT *
|
||||
****************************************************************************/
|
||||
|
||||
// PREF: process count
|
||||
// [ABOUT] View in about:processes.
|
||||
// With Firefox Quantum (2017), CPU cores = processCount. However, since the
|
||||
// introduction of Fission [2], the number of website processes is controlled
|
||||
// by processCount.webIsolated. Disabling fission.autostart or changing
|
||||
// fission.webContentIsolationStrategy reverts control back to processCount.
|
||||
// [1] https://www.reddit.com/r/firefox/comments/r69j52/firefox_content_process_limit_is_gone/
|
||||
// [2] https://firefox-source-docs.mozilla.org/dom/ipc/process_model.html#web-content-processes
|
||||
//pref("dom.ipc.processCount", 8); // DEFAULT; Shared Web Content
|
||||
//pref("dom.ipc.processCount.webIsolated", 1); // default=4; Isolated Web Content
|
||||
|
||||
// PREF: use one process for process preallocation cache
|
||||
//pref("dom.ipc.processPrelaunch.fission.number", 1); // default=3; Process Preallocation Cache
|
||||
|
||||
// PREF: configure process isolation
|
||||
// [1] https://hg.mozilla.org/mozilla-central/file/tip/dom/ipc/ProcessIsolation.cpp#l53
|
||||
// [2] https://www.reddit.com/r/firefox/comments/r69j52/firefox_content_process_limit_is_gone/
|
||||
|
||||
// OPTION 1: isolate all websites
|
||||
// Web content is always isolated into its own `webIsolated` content process
|
||||
// based on site-origin, and will only load in a shared `web` content process
|
||||
// if site-origin could not be determined.
|
||||
//pref("fission.webContentIsolationStrategy", 1); // DEFAULT
|
||||
//pref("browser.preferences.defaultPerformanceSettings.enabled", true); // DEFAULT
|
||||
//pref("dom.ipc.processCount.webIsolated", 1); // one process per site origin
|
||||
|
||||
// OPTION 2: isolate only "high value" websites
|
||||
// Only isolates web content loaded by sites which are considered "high
|
||||
// value". A site is considered high value if it has been granted a
|
||||
// `highValue*` permission by the permission manager, which is done in
|
||||
// response to certain actions.
|
||||
//pref("fission.webContentIsolationStrategy", 2);
|
||||
//pref("browser.preferences.defaultPerformanceSettings.enabled", false);
|
||||
//pref("dom.ipc.processCount.webIsolated", 1); // one process per site origin (high value)
|
||||
//pref("dom.ipc.processCount", 8); // determine by number of CPU cores/processors
|
||||
|
||||
// OPTION 3: do not isolate websites
|
||||
// All web content is loaded into a shared `web` content process. This is
|
||||
// similar to the non-Fission behavior; however, remote subframes may still
|
||||
// be used for sites with special isolation behavior, such as extension or
|
||||
// mozillaweb content processes.
|
||||
//pref("fission.webContentIsolationStrategy", 0);
|
||||
//pref("browser.preferences.defaultPerformanceSettings.enabled", false);
|
||||
//pref("dom.ipc.processCount", 8); // determine by number of CPU cores/processors
|
@@ -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
|
||||
|
@@ -2,45 +2,33 @@
|
||||
// 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/.
|
||||
|
||||
pref("browser.tabs.cardPreview.enabled", true);
|
||||
pref("browser.tabs.cardPreview.delayMs", 100);
|
||||
#ifdef XP_UNIX
|
||||
#ifndef XP_MACOSX
|
||||
#define UNIX_BUT_NOT_MAC
|
||||
#endif
|
||||
#endif
|
||||
|
||||
pref("browser.urlbar.suggest.calculator", true);
|
||||
pref("browser.tabs.cardPreview.enabled", true);
|
||||
pref("browser.tabs.hoverPreview.enabled", true);
|
||||
pref("browser.tabs.cardPreview.delayMs", 100);
|
||||
|
||||
#ifdef MOZ_UPDATE_CHANNEL
|
||||
pref("devtools.debugger.prompt-connection", false);
|
||||
#endif
|
||||
|
||||
// Mozilla Services
|
||||
pref('browser.privatebrowsing.vpnpromourl', '');
|
||||
pref("browser.vpn_promo.enabled", false);
|
||||
pref("browser.contentblocking.report.show_mobile_app", false);
|
||||
pref("browser.protections_panel.infoMessage.seen", true);
|
||||
pref('extensions.getAddons.showPane', false);
|
||||
pref('extensions.htmlaboutaddons.recommendations.enabled', false);
|
||||
pref('browser.discovery.enabled', false);
|
||||
pref('browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons', false);
|
||||
pref(
|
||||
'browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features',
|
||||
false
|
||||
);
|
||||
pref('browser.preferences.moreFromMozilla', false);
|
||||
pref('browser.aboutwelcome.enabled', true);
|
||||
pref("browser.aboutwelcome.showModal", false);
|
||||
pref('browser.translations.select.enable', true);
|
||||
|
||||
// Theme
|
||||
pref('toolkit.legacyUserProfileCustomizations.stylesheets', true);
|
||||
pref('browser.compactmode.show', true);
|
||||
pref('browser.display.focus_ring_on_anything', true);
|
||||
pref('browser.display.focus_ring_style', 0);
|
||||
pref('browser.display.focus_ring_width', 0);
|
||||
pref('browser.privateWindowSeparation.enabled', false); // WINDOWS
|
||||
|
||||
// Cookie banner handling (reject by default)
|
||||
pref('browser.newtabpage.activity-stream.newtabWallpapers.enabled', true);
|
||||
pref('browser.newtabpage.activity-stream.newtabWallpapers.v2.enabled', true);
|
||||
pref('browser.translations.newSettingsUI.enable', true);
|
||||
|
||||
pref('cookiebanners.service.mode', 1);
|
||||
pref('cookiebanners.service.mode.privateBrowsing', 1);
|
||||
pref("browser.urlbar.trimHttps", true);
|
||||
pref("browser.urlbar.untrimOnUserInteraction.featureGate", true);
|
||||
|
||||
// Url bar
|
||||
pref('browser.urlbar.unitConversion.enabled', true);
|
||||
@@ -52,52 +40,25 @@ pref('browser.urlbar.clipboard.featureGate', true);
|
||||
// new tab page
|
||||
pref('browser.newtabpage.activity-stream.feeds.topsites', false);
|
||||
pref('browser.newtabpage.activity-stream.feeds.section.topstories', false);
|
||||
pref("browser.topsites.contile.enabled", false);
|
||||
|
||||
// Pocket
|
||||
pref('extensions.pocket.enabled', false);
|
||||
pref("browser.topsites.contile.enabled", true);
|
||||
|
||||
// Pdf
|
||||
pref('browser.download.open_pdf_attachments_inline', true);
|
||||
pref('pdfjs.enableHighlightEditor', true);
|
||||
pref('pdfjs.enableHighlightFloatingButton', true);
|
||||
|
||||
// Tabs
|
||||
pref('browser.bookmarks.openInTabClosesMenu', false);
|
||||
pref('browser.menu.showViewImageInfo', true);
|
||||
pref('findbar.highlightAll', true);
|
||||
pref('layout.word_select.eat_space_to_next_word', false);
|
||||
pref('privacy.userContext.enabled', true);
|
||||
pref('privacy.userContext.ui.enabled', true);
|
||||
|
||||
// UA
|
||||
pref('general.useragent.compatMode.firefox', true);
|
||||
|
||||
|
||||
// Tracking protection
|
||||
|
||||
pref(
|
||||
'urlclassifier.trackingSkipURLs',
|
||||
'*.reddit.com, *.twitter.com, *.twimg.com, *.tiktok.com'
|
||||
);
|
||||
pref(
|
||||
'urlclassifier.features.socialtracking.skipURLs',
|
||||
'*.instagram.com, *.twitter.com, *.twimg.com'
|
||||
);
|
||||
pref('network.cookie.sameSite.noneRequiresSecure', true);
|
||||
pref('browser.download.start_downloads_in_tmp_dir', true);
|
||||
pref('browser.helperApps.deleteTempFileOnExit', true);
|
||||
pref('privacy.globalprivacycontrol.enabled', true);
|
||||
|
||||
pref('gfx.canvas.accelerated.cache-items', 4096);
|
||||
pref('gfx.canvas.accelerated.cache-size', 512);
|
||||
pref('gfx.content.skia-font-cache-size', 20);
|
||||
pref('gfx.webrender.all', true);
|
||||
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);
|
||||
@@ -105,34 +66,11 @@ pref('zen.welcomeScreen.seen', false);
|
||||
pref('zen.tabs.vertical', true);
|
||||
pref('zen.theme.accent-color', "#aac7ff");
|
||||
pref('zen.theme.toolbar-themed', true);
|
||||
pref('zen.theme.pill-button', false);
|
||||
pref('zen.view.compact', false);
|
||||
|
||||
pref('browser.cache.jsbc_compression_level', 3);
|
||||
|
||||
pref('media.memory_cache_max_size', 65536);
|
||||
pref('media.cache_readahead_limit', 7200);
|
||||
pref('media.cache_resume_threshold', 3600);
|
||||
|
||||
pref('image.mem.decode_bytes_at_a_time', 32768);
|
||||
|
||||
pref('network.buffer.cache.size', 262144);
|
||||
pref('network.buffer.cache.count', 128);
|
||||
pref('network.http.max-connections', 1800);
|
||||
pref('network.http.max-persistent-connections-per-server', 10);
|
||||
pref('network.http.max-urgent-start-excessive-connections-per-host', 5);
|
||||
pref('network.http.pacing.requests.enabled', false);
|
||||
pref('network.dnsCacheExpiration', 3600);
|
||||
pref('network.dns.max_high_priority_threads', 8);
|
||||
pref('network.ssl_tokens_cache_capacity', 10240);
|
||||
|
||||
pref('network.dns.disablePrefetch', true);
|
||||
pref('network.prefetch-next', false);
|
||||
pref('network.predictor.enabled', false);
|
||||
|
||||
pref('layout.css.grid-template-masonry-value.enabled', true);
|
||||
pref('dom.enable_web_task_scheduling', true);
|
||||
pref('layout.css.has-selector.enabled', true);
|
||||
pref('dom.security.sanitizer.enabled', true);
|
||||
pref('zen.view.compact.hide-toolbar', false);
|
||||
pref('zen.view.sidebar-expanded', false);
|
||||
pref('zen.view.sidebar-expanded.show-button', true);
|
||||
|
||||
// Pref to enable the new profiles (TODO: Check this out!)
|
||||
//pref("browser.profiles.enabled", true);
|
||||
@@ -146,4 +84,30 @@ pref('zen.sidebar.floating', true);
|
||||
pref('zen.splitView.working', false);
|
||||
|
||||
// Zen Workspaces
|
||||
pref('zen.workspaces.enabled', false);
|
||||
pref('zen.workspaces.enabled', true);
|
||||
|
||||
// Zen Watermark
|
||||
pref('zen.watermark.enabled', true);
|
||||
|
||||
// Smooth scrolling
|
||||
user_pref('apz.overscroll.enabled', true); // not DEFAULT on Linux
|
||||
user_pref('general.smoothScroll', true); // DEFAULT
|
||||
|
||||
// Privacy
|
||||
pref('dom.private-attribution.submission.enabled', false);
|
||||
|
||||
pref('media.eme.enabled', true);
|
||||
pref('webgl.disabled', false);
|
||||
|
||||
pref("app.update.url.manual", "https://get-zen.vercel.app/download");
|
||||
pref("app.update.url.details", "hhttps://get-zen.vercel.app/download");
|
||||
pref("app.releaseNotesURL", "https://get-zen.vercel.app/release-notes");
|
||||
pref("app.releaseNotesURL.aboutDialog", "https://get-zen.vercel.app/release-notes");
|
||||
|
||||
// Enable importers for other browsers
|
||||
pref('browser.migrate.vivaldi.enabled', true);
|
||||
pref('browser.migrate.opera-gx.enabled', true);
|
||||
pref('browser.migrate.opera.enabled', true);
|
||||
|
||||
#include fast-fox.js
|
||||
#include better-fox.js
|
14
src/browser/app/splash-rc.patch
Normal file
@@ -0,0 +1,14 @@
|
||||
diff --git a/browser/app/splash.rc b/browser/app/splash.rc
|
||||
index 259a8068c3aa256b8c50487a04f1844292b90b2e..8b9c792e1484bb801246b06b6ce43fb6d6271ee8 100644
|
||||
--- a/browser/app/splash.rc
|
||||
+++ b/browser/app/splash.rc
|
||||
@@ -6,6 +6,9 @@
|
||||
#include <windows.h>
|
||||
#include "nsNativeAppSupportWin.h"
|
||||
|
||||
+#define MANIFEST_PATH "firefox.exe.manifest"
|
||||
+CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST MANIFEST_PATH
|
||||
+
|
||||
IDI_APPICON ICON FIREFOX_ICO
|
||||
IDI_DOCUMENT ICON DOCUMENT_ICO
|
||||
IDI_APPLICATION ICON FIREFOX_ICO
|
@@ -8,6 +8,7 @@ var gZenBrowserManagerSidebar = {
|
||||
_hasChangedConfig: true,
|
||||
_splitterElement: null,
|
||||
_hSplitterElement: null,
|
||||
_hasRegisteredPinnedClickOutside: false,
|
||||
_isDragging: false,
|
||||
contextTab: null,
|
||||
|
||||
@@ -19,6 +20,7 @@ var gZenBrowserManagerSidebar = {
|
||||
this.update();
|
||||
this.close(); // avoid caching
|
||||
this.listenForPrefChanges();
|
||||
this.insertIntoContextMenu();
|
||||
},
|
||||
|
||||
get sidebarData() {
|
||||
@@ -105,6 +107,16 @@ var gZenBrowserManagerSidebar = {
|
||||
this.update();
|
||||
this._hasChangedConfig = false;
|
||||
|
||||
// https://stackoverflow.com/questions/11565471/removing-event-listener-which-was-added-with-bind
|
||||
var clickOutsideHandler = this._handleClickOutside.bind(this);
|
||||
if (Services.prefs.getBoolPref("zen.sidebar.floating") && !this._hasRegisteredPinnedClickOutside) {
|
||||
document.addEventListener("mouseup", clickOutsideHandler);
|
||||
this._hasRegisteredPinnedClickOutside = true;
|
||||
} else if (!Services.prefs.getBoolPref("zen.sidebar.floating") && this._hasRegisteredPinnedClickOutside) {
|
||||
document.removeEventListener("mouseup", clickOutsideHandler);
|
||||
this._hasRegisteredPinnedClickOutside = false;
|
||||
}
|
||||
|
||||
const button = document.getElementById("zen-sidepanel-button");
|
||||
if (Services.prefs.getBoolPref("zen.sidebar.enabled")) {
|
||||
button.removeAttribute("hidden");
|
||||
@@ -115,20 +127,42 @@ var gZenBrowserManagerSidebar = {
|
||||
}
|
||||
},
|
||||
|
||||
_handleClickOutside(event) {
|
||||
let sidebar = document.getElementById("zen-sidebar-web-panel");
|
||||
if (!sidebar.hasAttribute("pinned") || !this._currentPanel || this._isDragging) {
|
||||
return;
|
||||
}
|
||||
let target = event.target;
|
||||
const closestSelector = [
|
||||
"#zen-sidebar-web-panel",
|
||||
"#zen-sidebar-panels-wrapper",
|
||||
"#zenWebPanelContextMenu",
|
||||
"#zen-sidebar-web-panel-splitter",
|
||||
"#contentAreaContextMenu"
|
||||
].join(", ");
|
||||
if (target.closest(closestSelector)) {
|
||||
return;
|
||||
}
|
||||
this.close();
|
||||
},
|
||||
|
||||
toggle() {
|
||||
if (!this._currentPanel) {
|
||||
this._currentPanel = this._lastOpenedPanel;
|
||||
if (!this._currentPanel) {
|
||||
let data = this.sidebarData;
|
||||
this._currentPanel = data.index[0];
|
||||
}
|
||||
this.update();
|
||||
if (document.getElementById("zen-sidebar-web-panel").hasAttribute("hidden")) {
|
||||
this.open();
|
||||
return;
|
||||
}
|
||||
// already open?
|
||||
this.close();
|
||||
},
|
||||
|
||||
open() {
|
||||
let sidebar = document.getElementById("zen-sidebar-web-panel");
|
||||
sidebar.removeAttribute("hidden");
|
||||
this.update();
|
||||
},
|
||||
|
||||
update() {
|
||||
this._updateWebPanels();
|
||||
this._updateSidebarButton();
|
||||
@@ -138,7 +172,7 @@ var gZenBrowserManagerSidebar = {
|
||||
|
||||
_updateSidebarButton() {
|
||||
let button = document.getElementById("zen-sidepanel-button");
|
||||
if (this._currentPanel) {
|
||||
if (!document.getElementById("zen-sidebar-web-panel").hasAttribute("hidden")) {
|
||||
button.setAttribute("open", "true");
|
||||
} else {
|
||||
button.removeAttribute("open");
|
||||
@@ -205,15 +239,6 @@ var gZenBrowserManagerSidebar = {
|
||||
document.getElementById("zen-sidebar-web-panel-pinned").removeAttribute("pinned");
|
||||
},
|
||||
|
||||
_openAndGetWebPanelWrapper() {
|
||||
let sidebar = document.getElementById("zen-sidebar-web-panel");
|
||||
sidebar.removeAttribute("hidden");
|
||||
if (Services.prefs.getBoolPref("zen.sidebar.floating")) {
|
||||
this._setPinnedToElements();
|
||||
}
|
||||
return sidebar;
|
||||
},
|
||||
|
||||
_closeSidebarPanel() {
|
||||
let sidebar = document.getElementById("zen-sidebar-web-panel");
|
||||
sidebar.setAttribute("hidden", "true");
|
||||
@@ -231,6 +256,19 @@ var gZenBrowserManagerSidebar = {
|
||||
this._updateWebPanel();
|
||||
},
|
||||
|
||||
_createNewPanel(url) {
|
||||
let data = this.sidebarData;
|
||||
let newName = "p" + new Date().getTime();
|
||||
data.index.push(newName);
|
||||
data.data[newName] = {
|
||||
url: url,
|
||||
ua: false,
|
||||
};
|
||||
Services.prefs.setStringPref("zen.sidebar.data", JSON.stringify(data));
|
||||
this._currentPanel = newName;
|
||||
this.open();
|
||||
},
|
||||
|
||||
_updateButtons() {
|
||||
for (let button of this.sidebarElement.querySelectorAll(".zen-sidebar-panel-button")) {
|
||||
if (button.getAttribute("zen-sidebar-id") === this._currentPanel) {
|
||||
@@ -242,21 +280,26 @@ var gZenBrowserManagerSidebar = {
|
||||
},
|
||||
|
||||
_hideAllWebPanels() {
|
||||
let sidebar = this._openAndGetWebPanelWrapper();
|
||||
let sidebar = document.getElementById("zen-sidebar-web-panel");
|
||||
for (let browser of sidebar.querySelectorAll("browser[zen-sidebar-id]")) {
|
||||
browser.setAttribute("hidden", "true");
|
||||
browser.docShellIsActive = false;
|
||||
}
|
||||
},
|
||||
|
||||
get introductionPanel() {
|
||||
return document.getElementById("zen-sidebar-introduction-panel");
|
||||
},
|
||||
|
||||
_updateWebPanel() {
|
||||
this._updateButtons();
|
||||
let sidebar = this._openAndGetWebPanelWrapper();
|
||||
let sidebar = document.getElementById("zen-sidebar-web-panel");
|
||||
this._hideAllWebPanels();
|
||||
if (!this._currentPanel) {
|
||||
sidebar.setAttribute("hidden", "true");
|
||||
this.introductionPanel.removeAttribute("hidden");
|
||||
return;
|
||||
}
|
||||
this.introductionPanel.setAttribute("hidden", "true");
|
||||
let existantWebview = this._getCurrentBrowser();
|
||||
if (existantWebview) {
|
||||
existantWebview.docShellIsActive = true;
|
||||
@@ -438,8 +481,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();
|
||||
},
|
||||
|
||||
@@ -470,6 +512,8 @@ var gZenBrowserManagerSidebar = {
|
||||
browser.remove();
|
||||
}
|
||||
this._closeSidebarPanel();
|
||||
this.close();
|
||||
this._lastOpenedPanel = null;
|
||||
Services.prefs.setStringPref("zen.sidebar.data", JSON.stringify(data));
|
||||
},
|
||||
|
||||
@@ -477,6 +521,23 @@ var gZenBrowserManagerSidebar = {
|
||||
let browser = this._getBrowserById(this.contextTab);
|
||||
browser.remove();
|
||||
this._closeSidebarPanel();
|
||||
this.close();
|
||||
this._lastOpenedPanel = null;
|
||||
},
|
||||
|
||||
insertIntoContextMenu() {
|
||||
const sibling = document.getElementById("context-stripOnShareLink");
|
||||
const menuitem = document.createXULElement("menuitem");
|
||||
menuitem.setAttribute("id", "context-zenAddToWebPanel");
|
||||
menuitem.setAttribute("hidden", "true");
|
||||
menuitem.setAttribute("oncommand", "gZenBrowserManagerSidebar.addPanelFromContextMenu();");
|
||||
menuitem.setAttribute("data-l10n-id", "zen-web-side-panel-context-add-to-panel");
|
||||
sibling.insertAdjacentElement("afterend", menuitem);
|
||||
},
|
||||
|
||||
addPanelFromContextMenu() {
|
||||
const url = gContextMenu.linkURL || gContextMenu.target.ownerDocument.location.href;
|
||||
this._createNewPanel(url);
|
||||
},
|
||||
};
|
||||
|
||||
|
64
src/browser/base/content/ZenUIManager.mjs
Normal file
@@ -0,0 +1,64 @@
|
||||
|
||||
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)
|
||||
);
|
||||
},
|
||||
|
||||
toogleBookmarksSidebar() {
|
||||
const button = document.getElementById('zen-bookmark-button');
|
||||
SidebarController.toggle('viewBookmarksSidebar', button);
|
||||
},
|
||||
};
|
||||
|
||||
var gZenVerticalTabsManager = {
|
||||
init() {
|
||||
//Services.prefs.addObserver('zen.view.compact', this._updateEvent.bind(this));
|
||||
//Services.prefs.addObserver('zen.view.sidebar-expanded', this._updateEvent.bind(this));
|
||||
},
|
||||
|
||||
|
||||
get expanded() {
|
||||
return Services.prefs.getBoolPref('zen.view.sidebar-expanded');
|
||||
},
|
||||
|
||||
get expandButton() {
|
||||
if (this._expandButton) {
|
||||
return this._expandButton;
|
||||
}
|
||||
this._expandButton = document.getElementById('zen-expand-sidebar-button');
|
||||
return this._expandButton;
|
||||
},
|
||||
|
||||
//_updateExpandButton() {
|
||||
// let isCompactMode = Services.prefs.getBoolPref('zen.view.compact');
|
||||
// let button = this.expandButton;
|
||||
// let expanded = this.expanded;
|
||||
// if (expanded && !isCompactMode) {
|
||||
// button.setAttribute('open', 'true');
|
||||
// } else {
|
||||
// button.removeAttribute('open');
|
||||
// }
|
||||
//},
|
||||
|
||||
toggleExpand() {
|
||||
let expanded = !this.expanded;
|
||||
Services.prefs.setBoolPref('zen.view.sidebar-expanded', expanded);
|
||||
|
||||
let toolbox = document.getElementById('navigator-toolbox');
|
||||
toolbox.removeAttribute('width');
|
||||
toolbox.style.removeProperty('width');
|
||||
},
|
||||
};
|
@@ -18,6 +18,7 @@ var gZenViewSplitter = {
|
||||
init() {
|
||||
Services.prefs.setBoolPref("zen.splitView.working", false);
|
||||
window.addEventListener("TabClose", this);
|
||||
this.insertIntoContextMenu();
|
||||
console.log("ZenViewSplitter initialized");
|
||||
},
|
||||
|
||||
@@ -28,6 +29,18 @@ var gZenViewSplitter = {
|
||||
}
|
||||
},
|
||||
|
||||
insertIntoContextMenu() {
|
||||
const sibling = document.getElementById("context-stripOnShareLink");
|
||||
const menuitem = document.createXULElement("menuitem");
|
||||
menuitem.setAttribute("id", "context-zenSplitLink");
|
||||
menuitem.setAttribute("hidden", "true");
|
||||
menuitem.setAttribute("oncommand", "gZenViewSplitter.contextSplitLink();");
|
||||
menuitem.setAttribute("data-l10n-id", "zen-split-link");
|
||||
const separator = document.createXULElement("menuseparator");
|
||||
sibling.insertAdjacentElement("afterend", menuitem);
|
||||
sibling.insertAdjacentElement("afterend", separator);
|
||||
},
|
||||
|
||||
get tabBrowserPanel() {
|
||||
if (!this._tabBrowserPanel) {
|
||||
this._tabBrowserPanel = document.getElementById("tabbrowser-tabpanels");
|
||||
@@ -75,6 +88,13 @@ var gZenViewSplitter = {
|
||||
this._showSplitView(lastTab);
|
||||
},
|
||||
|
||||
contextSplitLink() {
|
||||
const url = gContextMenu.linkURL || gContextMenu.target.ownerDocument.location.href;
|
||||
const tab = gBrowser.selectedTab;
|
||||
const newTab = gZenUIManager.openAndChangeToTab(url);
|
||||
this.splitTabs([tab, newTab]);
|
||||
},
|
||||
|
||||
onLocationChange(browser) {
|
||||
let tab = gBrowser.getTabForBrowser(browser);
|
||||
this.updateSplitViewButton(!(tab && tab._zenSplitted));
|
||||
@@ -89,6 +109,17 @@ var gZenViewSplitter = {
|
||||
if (tabs.length < 2) {
|
||||
return;
|
||||
}
|
||||
// Check if any tab is already split
|
||||
for (const tab of tabs) {
|
||||
if (tab._zenSplitted) {
|
||||
let index = this._data.findIndex((group) => group.tabs.includes(tab));
|
||||
if (index < 0) {
|
||||
return;
|
||||
}
|
||||
this._showSplitView(tab);
|
||||
return;
|
||||
}
|
||||
}
|
||||
this._data.push({
|
||||
tabs,
|
||||
gridType: "grid",
|
||||
|
@@ -1,8 +1,16 @@
|
||||
|
||||
var ZenWorkspaces = {
|
||||
async init() {
|
||||
let docElement = document.documentElement;
|
||||
if (docElement.getAttribute("chromehidden").includes("toolbar")
|
||||
|| docElement.getAttribute("chromehidden").includes("menubar")
|
||||
|| docElement.hasAttribute("privatebrowsingmode")) {
|
||||
console.warn("ZenWorkspaces: !!! ZenWorkspaces is disabled in hidden windows !!!");
|
||||
return; // We are in a hidden window, don't initialize ZenWorkspaces
|
||||
}
|
||||
console.log("ZenWorkspaces: Initializing ZenWorkspaces...");
|
||||
await this.initializeWorkspaces();
|
||||
console.log("ZenWorkspaces initialized");
|
||||
console.log("ZenWorkspaces: ZenWorkspaces initialized");
|
||||
},
|
||||
|
||||
get workspaceEnabled() {
|
||||
@@ -18,46 +26,397 @@ 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();
|
||||
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);
|
||||
}
|
||||
this._initializeWorkspaceIcons();
|
||||
}
|
||||
},
|
||||
|
||||
async saveWorkspace(workspaceData, windowID) {
|
||||
_initializeWorkspaceIcons() {
|
||||
const kIcons = ["🏠", "📄", "💹", "💼", "📧", "✅", "👥"];
|
||||
let container = document.getElementById("PanelUI-zen-workspaces-create-icons-container");
|
||||
for (let icon of kIcons) {
|
||||
let button = document.createXULElement("toolbarbutton");
|
||||
button.className = "toolbarbutton-1";
|
||||
button.setAttribute("label", icon);
|
||||
button.onclick = ((event) => {
|
||||
for (let button of container.children) {
|
||||
button.removeAttribute("selected");
|
||||
}
|
||||
button.setAttribute("selected", "true");
|
||||
}).bind(this, button);
|
||||
container.appendChild(button);
|
||||
}
|
||||
},
|
||||
|
||||
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("ZenWorkspaces: 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();
|
||||
console.log("ZenWorkspaces: Removing workspace", windowID);
|
||||
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();
|
||||
},
|
||||
|
||||
workspaceHasIcon(workspace) {
|
||||
return typeof workspace.icon !== "undefined" && workspace.icon !== "";
|
||||
},
|
||||
|
||||
getWorkspaceIcon(workspace) {
|
||||
if (this.workspaceHasIcon(workspace)) {
|
||||
return workspace.icon;
|
||||
}
|
||||
return workspace.name[0].toUpperCase();
|
||||
},
|
||||
|
||||
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">
|
||||
${this.getWorkspaceIcon(workspace)}
|
||||
</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;
|
||||
this._contextMenuId = button.closest("toolbarbutton[zen-workspace-id]").getAttribute("zen-workspace-id");
|
||||
const popup = button.ownerDocument.getElementById(
|
||||
"zenWorkspaceActionsMenu"
|
||||
);
|
||||
popup.openPopup(button, "after_end");
|
||||
}).bind(this));
|
||||
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.innerHTML = "No workspaces available";
|
||||
workspaceList.setAttribute("empty", "true");
|
||||
} else {
|
||||
workspaceList.removeAttribute("empty");
|
||||
}
|
||||
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 = `
|
||||
<div class="zen-workspace-sidebar-icon">
|
||||
${this.getWorkspaceIcon(activeWorkspace)}
|
||||
</div>
|
||||
<div class="zen-workspace-sidebar-name">
|
||||
${activeWorkspace.name}
|
||||
</div>
|
||||
`;
|
||||
if (!this.workspaceHasIcon(activeWorkspace)) {
|
||||
button.querySelector(".zen-workspace-sidebar-icon").setAttribute("no-icon", "true");
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// 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() {
|
||||
// Go to the next view
|
||||
let parentPanel = document.getElementById("PanelUI-zen-workspaces-multiview");
|
||||
PanelUI.showSubView("PanelUI-zen-workspaces-create-icons", parentPanel);
|
||||
},
|
||||
|
||||
async saveWorkspaceFromIcon() {
|
||||
let workspaceName = this._workspaceInput.value;
|
||||
if (!workspaceName) {
|
||||
return;
|
||||
}
|
||||
this._workspaceInput.value = "";
|
||||
let icon = document.querySelector("#PanelUI-zen-workspaces-create-icons-container [selected]");
|
||||
icon?.removeAttribute("selected");
|
||||
await this.createAndSaveWorkspace(workspaceName, false, icon?.label);
|
||||
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;
|
||||
let workspaces = await this._workspaces();
|
||||
for (let workspace of workspaces.workspaces) {
|
||||
workspace.used = workspace.uuid === window.uuid;
|
||||
}
|
||||
this.unsafeSaveWorkspaces(workspaces);
|
||||
console.log("ZenWorkspaces: Changing workspace to", window.uuid);
|
||||
for (let tab of gBrowser.tabs) {
|
||||
if (tab.getAttribute("zen-workspace-id") === window.uuid && !tab.pinned) {
|
||||
if (!firstTab) {
|
||||
firstTab = tab;
|
||||
gBrowser.selectedTab = firstTab;
|
||||
}
|
||||
gBrowser.showTab(tab);
|
||||
}
|
||||
}
|
||||
if (typeof firstTab === "undefined") {
|
||||
this._createNewTabForWorkspace(window);
|
||||
}
|
||||
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, icon) {
|
||||
let window = {
|
||||
uuid: gZenUIManager.generateUuidv4(),
|
||||
default: isDefault,
|
||||
used: true,
|
||||
icon: icon,
|
||||
name: name,
|
||||
};
|
||||
this._prepareNewWorkspace(window);
|
||||
return window;
|
||||
},
|
||||
|
||||
async createAndSaveWorkspace(name = "New Workspace", isDefault = false, icon = undefined) {
|
||||
if (!this.workspaceEnabled) {
|
||||
return;
|
||||
}
|
||||
let workspaceData = this._createWorkspaceData(name, isDefault, icon);
|
||||
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(_) {
|
||||
console.assert(this._contextMenuId, "No context menu ID set");
|
||||
document.querySelector(`#PanelUI-zen-workspaces [zen-workspace-id="${this._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="${this._contextMenuId}"] .zen-workspace-actions`);
|
||||
if (target) {
|
||||
target.removeAttribute("active");
|
||||
}
|
||||
this._contextMenuId = null;
|
||||
},
|
||||
|
||||
async contextDelete() {
|
||||
await this.removeWorkspace(this._contextMenuId);
|
||||
}
|
||||
};
|
||||
|
||||
ZenWorkspaces.init();
|
||||
|
@@ -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>
|
@@ -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>
|
||||
|
@@ -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;
|
||||
}
|
||||
+
|
||||
+
|
||||
+/**
|
||||
+ *
|
||||
|
@@ -1,33 +1,14 @@
|
||||
diff --git a/browser/base/content/browser-init.js b/browser/base/content/browser-init.js
|
||||
index 0717ce21386b73fc3399c97b34c6892a674cca77..f20e8a43fdd1d885f917948a26f1c3a1bd917707 100644
|
||||
index a79a9734619f89639c15087fe28e9615354a7209..edaef604d33d76b570571e1bbb2ebc590e045d87 100644
|
||||
--- a/browser/base/content/browser-init.js
|
||||
+++ b/browser/base/content/browser-init.js
|
||||
@@ -230,6 +230,12 @@ var gBrowserInit = {
|
||||
gURLBar.readOnly = true;
|
||||
@@ -237,6 +237,9 @@ var gBrowserInit = {
|
||||
gPrivateBrowsingUI.init();
|
||||
BrowserSearch.init();
|
||||
BrowserPageActions.init();
|
||||
+
|
||||
+ Services.scriptloader.loadSubScript("chrome://browser/content/zenThemeModifier.js", window);
|
||||
+
|
||||
if (gToolbarKeyNavEnabled) {
|
||||
ToolbarKeyboardNavigator.init();
|
||||
}
|
||||
|
||||
+ 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})`);
|
||||
+}
|
||||
|
@@ -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;
|
||||
|
||||
|
@@ -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>
|
||||
|
@@ -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 @@
|
||||
|
18
src/browser/base/content/nsContextMenu-js.patch
Normal file
@@ -0,0 +1,18 @@
|
||||
diff --git a/browser/base/content/nsContextMenu.js b/browser/base/content/nsContextMenu.js
|
||||
index b5c8dd44daaab18397cf01d0ef9f5288f5113925..8840b8171d5992da0a2f6216d8da9e1ec6dc1e93 100644
|
||||
--- a/browser/base/content/nsContextMenu.js
|
||||
+++ b/browser/base/content/nsContextMenu.js
|
||||
@@ -1047,6 +1047,13 @@ class nsContextMenu {
|
||||
!this.isSecureAboutPage()
|
||||
);
|
||||
|
||||
+ this.showItem(
|
||||
+ "context-zenAddToWebPanel",
|
||||
+ this.onLink && !this.onMailtoLink && !this.onTelLink
|
||||
+ );
|
||||
+
|
||||
+ this.showItem("context-zenSplitLink", this.onLink && !this.onMailtoLink && !this.onTelLink);
|
||||
+
|
||||
let copyLinkSeparator = document.getElementById("context-sep-copylink");
|
||||
// Show "Copy Link", "Copy" and "Copy Clean Link" with no divider, and "copy link" and "Send link to Device" with no divider between.
|
||||
// Other cases will show a divider.
|
@@ -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) {
|
1
src/browser/base/content/zen-avatars/avatar-0-dark.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#253342"></rect><rect x="10" y="30" width="80" height="10" fill="#232226" transform="translate(6 -6) rotate(236 40 40)"></rect><circle cx="40" cy="40" fill="#DDDDDD" r="16" transform="translate(15 15)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#5E9188" transform="translate(12 -12) rotate(112 40 40)"></line></g></svg>
|
After Width: | Height: | Size: 674 B |
1
src/browser/base/content/zen-avatars/avatar-0-light.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#FFF6C7"></rect><rect x="10" y="30" width="80" height="10" fill="#DCD7C2" transform="translate(6 -6) rotate(236 40 40)"></rect><circle cx="40" cy="40" fill="#9D9382" r="16" transform="translate(15 15)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#FFC1B2" transform="translate(12 -12) rotate(112 40 40)"></line></g></svg>
|
After Width: | Height: | Size: 674 B |
@@ -1 +0,0 @@
|
||||
<svg viewBox="0 0 36 36" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__beam" maskUnits="userSpaceOnUse" x="0" y="0" width="36" height="36"><rect width="36" height="36" rx="72" fill="#FFFFFF"></rect></mask><g mask="url(#mask__beam)"><rect width="36" height="36" fill="#fac89a"></rect><rect x="0" y="0" width="36" height="36" transform="translate(1 1) rotate(43 18 18) scale(1.1)" fill="#e290ff" rx="36"></rect><g transform="translate(-3 -1) rotate(-3 18 18)"><path d="M15 20c2 1 4 1 6 0" stroke="#000000" fill="none" stroke-linecap="round"></path><rect x="11" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect><rect x="23" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect></g></g></svg>
|
Before Width: | Height: | Size: 785 B |
1
src/browser/base/content/zen-avatars/avatar-1-dark.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#5E9188"></rect><rect x="10" y="30" width="80" height="80" fill="#3E5954" transform="translate(-8 -8) rotate(222 40 40)"></rect><circle cx="40" cy="40" fill="#253342" r="16" transform="translate(9 -9)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#232226" transform="translate(-4 4) rotate(84 40 40)"></line></g></svg>
|
After Width: | Height: | Size: 671 B |
1
src/browser/base/content/zen-avatars/avatar-1-light.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#FFC1B2"></rect><rect x="10" y="30" width="80" height="80" fill="#FFDBC8" transform="translate(-8 -8) rotate(222 40 40)"></rect><circle cx="40" cy="40" fill="#FFF6C7" r="16" transform="translate(9 -9)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#DCD7C2" transform="translate(-4 4) rotate(84 40 40)"></line></g></svg>
|
After Width: | Height: | Size: 671 B |
@@ -1 +0,0 @@
|
||||
<svg viewBox="0 0 36 36" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__beam" maskUnits="userSpaceOnUse" x="0" y="0" width="36" height="36"><rect width="36" height="36" rx="72" fill="#FFFFFF"></rect></mask><g mask="url(#mask__beam)"><rect width="36" height="36" fill="#e290ff"></rect><rect x="0" y="0" width="36" height="36" transform="translate(-2 6) rotate(106 18 18) scale(1.1)" fill="#fac89a" rx="36"></rect><g transform="translate(-2 3) rotate(-6 18 18)"><path d="M13,20 a1,0.75 0 0,0 10,0" fill="#000000"></path><rect x="13" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect><rect x="21" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect></g></g></svg>
|
Before Width: | Height: | Size: 756 B |
1
src/browser/base/content/zen-avatars/avatar-10-dark.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#3E5954"></rect><rect x="10" y="30" width="80" height="80" fill="#253342" transform="translate(16 -16) rotate(214 40 40)"></rect><circle cx="40" cy="40" fill="#232226" r="16" transform="translate(-15 -15)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#DDDDDD" transform="translate(-8 8) rotate(68 40 40)"></line></g></svg>
|
After Width: | Height: | Size: 675 B |
1
src/browser/base/content/zen-avatars/avatar-10-light.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#FFDBC8"></rect><rect x="10" y="30" width="80" height="80" fill="#FFF6C7" transform="translate(16 -16) rotate(214 40 40)"></rect><circle cx="40" cy="40" fill="#DCD7C2" r="16" transform="translate(-15 -15)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#9D9382" transform="translate(-8 8) rotate(68 40 40)"></line></g></svg>
|
After Width: | Height: | Size: 675 B |
@@ -1 +0,0 @@
|
||||
<svg viewBox="0 0 36 36" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__beam" maskUnits="userSpaceOnUse" x="0" y="0" width="36" height="36"><rect width="36" height="36" rx="72" fill="#FFFFFF"></rect></mask><g mask="url(#mask__beam)"><rect width="36" height="36" fill="#e290ff"></rect><rect x="0" y="0" width="36" height="36" transform="translate(4 4) rotate(110 18 18) scale(1.2)" fill="#fac89a" rx="6"></rect><g transform="translate(6 -3) rotate(0 18 18)"><path d="M15 21c2 1 4 1 6 0" stroke="#000000" fill="none" stroke-linecap="round"></path><rect x="14" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect><rect x="20" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect></g></g></svg>
|
Before Width: | Height: | Size: 783 B |
1
src/browser/base/content/zen-avatars/avatar-11-dark.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#253342"></rect><rect x="10" y="30" width="80" height="80" fill="#232226" transform="translate(20 20) rotate(276 40 40)"></rect><circle cx="40" cy="40" fill="#DDDDDD" r="16" transform="translate(0 0)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#5E9188" transform="translate(12 12) rotate(192 40 40)"></line></g></svg>
|
After Width: | Height: | Size: 672 B |
1
src/browser/base/content/zen-avatars/avatar-11-light.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#FFF6C7"></rect><rect x="10" y="30" width="80" height="80" fill="#DCD7C2" transform="translate(20 20) rotate(276 40 40)"></rect><circle cx="40" cy="40" fill="#9D9382" r="16" transform="translate(0 0)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#FFC1B2" transform="translate(12 12) rotate(192 40 40)"></line></g></svg>
|
After Width: | Height: | Size: 672 B |
@@ -1 +0,0 @@
|
||||
<svg viewBox="0 0 36 36" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__beam" maskUnits="userSpaceOnUse" x="0" y="0" width="36" height="36"><rect width="36" height="36" rx="72" fill="#FFFFFF"></rect></mask><g mask="url(#mask__beam)"><rect width="36" height="36" fill="#e290ff"></rect><rect x="0" y="0" width="36" height="36" transform="translate(8 8) rotate(178 18 18) scale(1.1)" fill="#fac89a" rx="6"></rect><g transform="translate(4 4) rotate(-8 18 18)"><path d="M13,20 a1,0.75 0 0,0 10,0" fill="#000000"></path><rect x="11" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect><rect x="23" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect></g></g></svg>
|
Before Width: | Height: | Size: 753 B |
1
src/browser/base/content/zen-avatars/avatar-12-dark.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#232226"></rect><rect x="10" y="30" width="80" height="80" fill="#DDDDDD" transform="translate(0 0) rotate(88 40 40)"></rect><circle cx="40" cy="40" fill="#5E9188" r="16" transform="translate(18 -18)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#3E5954" transform="translate(16 -16) rotate(176 40 40)"></line></g></svg>
|
After Width: | Height: | Size: 673 B |
1
src/browser/base/content/zen-avatars/avatar-12-light.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#DCD7C2"></rect><rect x="10" y="30" width="80" height="80" fill="#9D9382" transform="translate(0 0) rotate(88 40 40)"></rect><circle cx="40" cy="40" fill="#FFC1B2" r="16" transform="translate(18 -18)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#FFDBC8" transform="translate(16 -16) rotate(176 40 40)"></line></g></svg>
|
After Width: | Height: | Size: 673 B |
@@ -1 +0,0 @@
|
||||
<svg viewBox="0 0 36 36" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__beam" maskUnits="userSpaceOnUse" x="0" y="0" width="36" height="36"><rect width="36" height="36" rx="72" fill="#FFFFFF"></rect></mask><g mask="url(#mask__beam)"><rect width="36" height="36" fill="#e290ff"></rect><rect x="0" y="0" width="36" height="36" transform="translate(6 2) rotate(52 18 18) scale(1.1)" fill="#fac89a" rx="6"></rect><g transform="translate(4 -1) rotate(-2 18 18)"><path d="M15 20c2 1 4 1 6 0" stroke="#000000" fill="none" stroke-linecap="round"></path><rect x="12" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect><rect x="22" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect></g></g></svg>
|
Before Width: | Height: | Size: 783 B |
1
src/browser/base/content/zen-avatars/avatar-13-dark.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#3E5954"></rect><rect x="10" y="30" width="80" height="10" fill="#253342" transform="translate(-10 10) rotate(64 40 40)"></rect><circle cx="40" cy="40" fill="#232226" r="16" transform="translate(0 0)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#DDDDDD" transform="translate(-8 -8) rotate(128 40 40)"></line></g></svg>
|
After Width: | Height: | Size: 672 B |
1
src/browser/base/content/zen-avatars/avatar-13-light.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#FFDBC8"></rect><rect x="10" y="30" width="80" height="10" fill="#FFF6C7" transform="translate(-10 10) rotate(64 40 40)"></rect><circle cx="40" cy="40" fill="#DCD7C2" r="16" transform="translate(0 0)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#9D9382" transform="translate(-8 -8) rotate(128 40 40)"></line></g></svg>
|
After Width: | Height: | Size: 672 B |
@@ -1 +0,0 @@
|
||||
<svg viewBox="0 0 36 36" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__beam" maskUnits="userSpaceOnUse" x="0" y="0" width="36" height="36"><rect width="36" height="36" rx="72" fill="#FFFFFF"></rect></mask><g mask="url(#mask__beam)"><rect width="36" height="36" fill="#e290ff"></rect><rect x="0" y="0" width="36" height="36" transform="translate(6 -2) rotate(236 18 18) scale(1.2)" fill="#fac89a" rx="6"></rect><g transform="translate(4 -4) rotate(6 18 18)"><path d="M15 21c2 1 4 1 6 0" stroke="#000000" fill="none" stroke-linecap="round"></path><rect x="13" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect><rect x="21" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect></g></g></svg>
|
Before Width: | Height: | Size: 784 B |
1
src/browser/base/content/zen-avatars/avatar-14-dark.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#253342"></rect><rect x="10" y="30" width="80" height="80" fill="#232226" transform="translate(-20 20) rotate(106 40 40)"></rect><circle cx="40" cy="40" fill="#DDDDDD" r="16" transform="translate(9 -9)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#5E9188" transform="translate(12 12) rotate(212 40 40)"></line></g></svg>
|
After Width: | Height: | Size: 674 B |
1
src/browser/base/content/zen-avatars/avatar-14-light.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#FFF6C7"></rect><rect x="10" y="30" width="80" height="80" fill="#DCD7C2" transform="translate(-20 20) rotate(106 40 40)"></rect><circle cx="40" cy="40" fill="#9D9382" r="16" transform="translate(9 -9)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#FFC1B2" transform="translate(12 12) rotate(212 40 40)"></line></g></svg>
|
After Width: | Height: | Size: 674 B |
@@ -1 +0,0 @@
|
||||
<svg viewBox="0 0 36 36" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__beam" maskUnits="userSpaceOnUse" x="0" y="0" width="36" height="36"><rect width="36" height="36" rx="72" fill="#FFFFFF"></rect></mask><g mask="url(#mask__beam)"><rect width="36" height="36" fill="#e290ff"></rect><rect x="0" y="0" width="36" height="36" transform="translate(0 8) rotate(124 18 18) scale(1.1)" fill="#fac89a" rx="36"></rect><g transform="translate(-4 4) rotate(4 18 18)"><path d="M13,20 a1,0.75 0 0,0 10,0" fill="#000000"></path><rect x="10" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect><rect x="24" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect></g></g></svg>
|
Before Width: | Height: | Size: 754 B |
1
src/browser/base/content/zen-avatars/avatar-15-dark.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#232226"></rect><rect x="10" y="30" width="80" height="80" fill="#DDDDDD" transform="translate(0 0) rotate(28 40 40)"></rect><circle cx="40" cy="40" fill="#5E9188" r="16" transform="translate(-12 12)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#3E5954" transform="translate(16 16) rotate(56 40 40)"></line></g></svg>
|
After Width: | Height: | Size: 671 B |
1
src/browser/base/content/zen-avatars/avatar-15-light.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#DCD7C2"></rect><rect x="10" y="30" width="80" height="80" fill="#9D9382" transform="translate(0 0) rotate(28 40 40)"></rect><circle cx="40" cy="40" fill="#FFC1B2" r="16" transform="translate(-12 12)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#FFDBC8" transform="translate(16 16) rotate(56 40 40)"></line></g></svg>
|
After Width: | Height: | Size: 671 B |
@@ -1 +0,0 @@
|
||||
<svg viewBox="0 0 36 36" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__beam" maskUnits="userSpaceOnUse" x="0" y="0" width="36" height="36"><rect width="36" height="36" rx="72" fill="#FFFFFF"></rect></mask><g mask="url(#mask__beam)"><rect width="36" height="36" fill="#e290ff"></rect><rect x="0" y="0" width="36" height="36" transform="translate(6 6) rotate(192 18 18) scale(1)" fill="#fac89a" rx="6"></rect><g transform="translate(0 2) rotate(-2 18 18)"><path d="M13,19 a1,0.75 0 0,0 10,0" fill="#000000"></path><rect x="12" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect><rect x="22" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect></g></g></svg>
|
Before Width: | Height: | Size: 751 B |
1
src/browser/base/content/zen-avatars/avatar-16-dark.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#3E5954"></rect><rect x="10" y="30" width="80" height="10" fill="#253342" transform="translate(-20 20) rotate(184 40 40)"></rect><circle cx="40" cy="40" fill="#232226" r="16" transform="translate(18 18)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#DDDDDD" transform="translate(-8 -8) rotate(8 40 40)"></line></g></svg>
|
After Width: | Height: | Size: 673 B |
1
src/browser/base/content/zen-avatars/avatar-16-light.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#FFDBC8"></rect><rect x="10" y="30" width="80" height="10" fill="#FFF6C7" transform="translate(-20 20) rotate(184 40 40)"></rect><circle cx="40" cy="40" fill="#DCD7C2" r="16" transform="translate(18 18)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#9D9382" transform="translate(-8 -8) rotate(8 40 40)"></line></g></svg>
|
After Width: | Height: | Size: 673 B |
@@ -1 +0,0 @@
|
||||
<svg viewBox="0 0 36 36" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__beam" maskUnits="userSpaceOnUse" x="0" y="0" width="36" height="36"><rect width="36" height="36" rx="72" fill="#FFFFFF"></rect></mask><g mask="url(#mask__beam)"><rect width="36" height="36" fill="#e290ff"></rect><rect x="0" y="0" width="36" height="36" transform="translate(0 8) rotate(164 18 18) scale(1.2)" fill="#fac89a" rx="36"></rect><g transform="translate(-4 4) rotate(4 18 18)"><path d="M13,21 a1,0.75 0 0,0 10,0" fill="#000000"></path><rect x="10" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect><rect x="24" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect></g></g></svg>
|
Before Width: | Height: | Size: 754 B |
1
src/browser/base/content/zen-avatars/avatar-17-dark.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#232226"></rect><rect x="10" y="30" width="80" height="10" fill="#DDDDDD" transform="translate(-14 -14) rotate(68 40 40)"></rect><circle cx="40" cy="40" fill="#5E9188" r="16" transform="translate(-9 9)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#3E5954" transform="translate(16 -16) rotate(136 40 40)"></line></g></svg>
|
After Width: | Height: | Size: 675 B |