Compare commits

..
Author SHA1 Message Date
Carmelo Messina 636be81930 v109 2023-01-06 15:35:56 +01:00
Carmelo Messina 0062d6702b fix desktop mode in android 2022-12-21 15:25:06 +01:00
Carmelo Messina fd38a5ab78 removal of the site setting in favour of a feature flag 2022-12-20 13:41:06 +01:00
Carmelo Messina 8e964b2632 v107 2022-11-17 16:14:07 +01:00
Carmelo Messina c4a71872ed v105 ready 2022-09-01 15:26:08 +02:00
Carmelo Messina 395f3238e0 use EnableDeviceEmulation 2022-08-26 16:25:37 +02:00
Carmelo Messina b9fa98cc09 Merge branch 'viewport-protection' of https://github.com/uazo/bromite into viewport-protection 2022-08-26 16:24:33 +02:00
Carmelo Messina d42248c3b2 fix CalculateViewportHeight return value 2022-08-26 16:23:54 +02:00
Carmelo Messina e280a96291 fix readermode detection
fix incorrect site setting value at startup
remove code from visual_viewport
remove devicePixelRatio override
2022-08-26 16:23:54 +02:00
uazoandCarmelo Messina df6fe8e904 fix incorrect factor 2022-08-26 16:23:54 +02:00
Carmelo Messina 04004176d5 final version 2022-08-26 16:23:53 +02:00
Carmelo Messina b62f37b0f7 also overrides the window.visualViewport results 2022-08-26 16:23:53 +02:00
Carmelo Messina ce2d35dfe5 Viewport Protection site setting 2022-08-26 16:23:44 +02:00
Carmelo Messina ac267d9341 fix CalculateViewportHeight return value 2022-07-26 19:46:17 +02:00
Carmelo Messina a8bcfc110b fix readermode detection
fix incorrect site setting value at startup
remove code from visual_viewport
remove devicePixelRatio override
2022-07-25 17:43:42 +02:00
uazoandGitHub 9c711e5672 fix incorrect factor 2022-07-20 18:38:54 +02:00
Carmelo Messina 41c055506a final version 2022-07-20 18:01:36 +02:00
Carmelo Messina c7e04c5642 also overrides the window.visualViewport results 2022-07-09 09:11:04 +02:00
Carmelo Messina fa95631fb2 Viewport Protection site setting 2022-07-06 14:22:41 +02:00
2645 changed files with 82176 additions and 459427 deletions
-5
View File
@@ -1,5 +0,0 @@
[*.{yaml,sh,gn_args}]
tab_width = 2
indent_size = 2
end_of_line = crlf
indent_style = space
-1
View File
@@ -1 +0,0 @@
*.zip binary
+4
View File
@@ -0,0 +1,4 @@
# These are supported funding model platforms
liberapay: csagan5
custom: https://www.bromite.org/#donate
+51 -69
View File
@@ -1,32 +1,32 @@
name: Bug report
description: Create a Cromite bug report
description: Create a Bromite bug report
body:
- type: markdown
attributes:
value: |
Welcome! Thanks for taking the time to submit a bug report.
If this is not a bug about the Cromite browser, or you are looking for a place to ask a question to the community,
then please use the [GitHub Discussions](https://github.com/uazo/cromite/discussions) instead.
If this is not a bug about the Bromite browser, or you are looking for a place to ask a question to the community,
then please use the [GitHub Discussions](https://github.com/bromite/bromite/discussions) instead.
Make sure you have acknowledged and completed this template before submitting your issue.
Please read it carefully: incorrect issues will be automatically closed and ignored.
- type: checkboxes
id: preliminary_checklist
attributes:
label: Preliminary checklist
options:
- label: "I have read the [README](https://github.com/uazo/cromite/blob/master/README.md)."
- label: "I have read the [README](https://github.com/bromite/bromite/blob/master/README.md)."
required: true
- label: "I have searched the existing issues for my problem. This is a new ticket, NOT a duplicate or related to another open issue."
required: true
- label: "I have read the [FAQs](https://github.com/uazo/cromite/blob/master/FAQ.md)."
- label: "I have read the [FAQs](https://github.com/bromite/bromite/blob/master/FAQ.md)."
required: true
- label: "I have updated Cromite to the latest version. The bug is reproducible on this latest version."
- label: "I have updated Bromite to the latest version. The bug is reproducible on this latest version."
required: true
- label: "This is a bug report about the Cromite browser; not the website nor F-Droid nor anything else."
- label: "This is a bug report about the Bromite browser; not the website nor F-Droid nor anything else."
required: true
- type: dropdown
@@ -34,10 +34,10 @@ body:
attributes:
label: Can the bug be reproduced with corresponding Chromium version?
description: |
Please pick the same version of Chromium as Cromite
Please pick the same version of Chromium as Bromite from here: https://github.com/bromite/chromium/releases
If the bug is reproducible then it might be a configuration issue or an upstream bug. Upstream bugs can be reported on the [Chromium issue tracker](https://bugs.chromium.org/p/chromium/issues/list) and
do not forget to read [Chromium project bug reporting guidelines](https://www.chromium.org/for-testers/bug-reporting-guidelines) first.
If the bug is related to functionality that does not exist in Chromium then answer "No".
multiple: false
options:
@@ -46,26 +46,11 @@ body:
validations:
required: true
- type: dropdown
id: is_chromium2
attributes:
label: Are you sure?
description: |
Please check your answer above again, it is important information
If the bug is related to functionality that does not exist in Chromium then answer "No".
multiple: false
options:
- "Yes"
- "No"
validations:
required: true
- type: input
id: cromite_version
id: bromite_version
attributes:
label: Cromite version
description: What version of Cromite are you using? Please specify a single version e.g. `96.0.4664.1` not `latest`. If this is not the latest version then please update and retry before submitting this bug report.
label: Bromite version
description: What version of Bromite are you using? Please specify a single version e.g. `96.0.4664.1` not `latest`. If this is not the latest version then please update and retry before submitting this bug report.
validations:
required: true
@@ -81,59 +66,45 @@ body:
- armeabi-v7a
- x86
- x64
- windows
- all
validations:
required: true
- type: dropdown
id: platform_version
id: android_version
attributes:
label: Platform version
label: Android version
multiple: false
description: What version of Android are you running?
options:
- Android 14
- Android 13
- Android 12.1
- Android 12.0
- Android 11
- Android 10
- Android 9
- Android 8.1
- Android 8.0
- Android 7.1
- Android 7.0
- Android Emulator
- Windows 10
- Windows 11
- I prefer not to write it/No matter
- 12.1
- 12.0
- 11
- 10
- 9
- 8.1
- 8.0
- 7.1
- 7.0
- 6
- 5.1
- 5.0
- 4.4
- 4.3
- 4.2
- 4.1
- 4.0
validations:
required: true
- type: input
id: device_model
attributes:
label: Android Device model
label: Device model
description: What is your device model? This can usually be found in your device's settings in the "About" section.
placeholder: (e.g. `OnePlus 8 (IN2010)`, or `SM-G960UZKABST`, etc.)
validations:
required: true
- type: dropdown
id: is_android_rooted
attributes:
label: Is the device rooted?
description: |
The information is important but not essential; it allows additional checks to be made.
multiple: false
options:
- "Yes"
- "No"
- "I prefer not to write it"
validations:
required: true
- type: textarea
id: changed_flags
attributes:
@@ -141,12 +112,24 @@ body:
description: |
These are the flags changed under `chrome://flags`.
Report all the flags with non-default configuration (they will be blue-highlighted).
If no flags are changed then write 'no flags changed'.
placeholder: show-overdraw-feedback, enable-parallel-downloading
validations:
required: true
- type: dropdown
id: is_system_webview
attributes:
label: Is this bug about the SystemWebView?
description: Please note that no support for System WebView installation is provided.
multiple: false
options:
- "Yes"
- "No"
validations:
required: true
- type: dropdown
id: is_incognito
attributes:
@@ -155,7 +138,6 @@ body:
options:
- "Yes"
- "No"
- "Always Incognito Mode"
validations:
required: true
@@ -180,7 +162,7 @@ body:
2. Yes, I have attached the crash report dump that I downloaded from `chrome://crashes`
3. Yes, I have copy/pasted the crash dump
placeholder: |
Drag the crash report dump here to attach it or paste the logcat dump individuated with `adb logcat | grep -E '( cr_|cromite|chromium)'`.
Drag the crash report dump here to attach it or paste the logcat dump individuated with `adb logcat | grep -E '( cr_|bromite|chromium)'`.
validations:
required: true
@@ -198,7 +180,7 @@ body:
label: Steps to reproduce the bug
description: |
Explain how to cause the bug as clearly as possible. Bugs that are not reproducible cannot be investigated.
Also, do not write "any website": please specify which URLs can be used to reproduce the issue.
placeholder: |
Steps to reproduce the bug (e.g.):
+11 -14
View File
@@ -1,18 +1,18 @@
name: Feature request
description: Create a Cromite feature request
description: Create a Bromite feature request
body:
- type: markdown
attributes:
value: |
Welcome! Thanks for taking time to submit a feature request.
If this is not a feature request about the Cromite browser, or you are looking for a place
to ask a question to the community then please use the [GitHub Discussions](https://github.com/uazo/cromite/discussions) instead.
If this is not a feature request about the Bromite browser, or you are looking for a place
to ask a question to the community then please use the [GitHub Discussions](https://github.com/bromite/bromite/discussions) instead.
Make sure you have acknowledged and completed this template before submitting your issue.
Please read it carefully: incorrect issues will be automatically closed and ignored.
Note:
- Features unrelated to privacy will not be considered.
- Do not ask "I would like feature X which is available in browser Y."
@@ -22,15 +22,13 @@ body:
attributes:
label: Preliminary checklist
options:
- label: "I have read the [README](https://github.com/uazo/cromite/blob/master/README.md)"
- label: "I have read the [README](https://github.com/bromite/bromite/blob/master/README.md)"
required: true
- label: "I have read the [FAQs](https://github.com/uazo/cromite/blob/master/FAQ.md)."
- label: "I have read the [FAQs](https://github.com/bromite/bromite/blob/master/FAQ.md)."
required: true
- label: "I have searched [existing issues](https://github.com/uazo/cromite/issues) for my feature request. This is a new issue (NOT a duplicate) and is not related to another issue."
- label: "I have searched [existing issues](https://github.com/bromite/bromite/issues) for my feature request. This is a new issue (NOT a duplicate) and is not related to another issue."
required: true
- label: "I have searched [wont fix issues](https://github.com/uazo/cromite/issues?q=label%3Awontfix) and this request is not among them"
required: true
- label: "This is a feature request for the Cromite browser; not the website nor F-Droid nor anything else."
- label: "This is a feature request for the Bromite browser; not the website nor F-Droid nor anything else."
required: true
- type: dropdown
@@ -40,7 +38,6 @@ body:
description: Features that are not related to privacy are not considered.
multiple: false
options:
- "<please select>"
- "Yes"
- "No"
validations:
-198
View File
@@ -1,198 +0,0 @@
permissions:
actions: none
checks: none
contents: none
deployments: none
issues: write
packages: none
pull-requests: none
repository-projects: none
security-events: none
statuses: none
on:
workflow_dispatch:
inputs:
version:
description: 'chromium version'
required: false
default: ''
type:
description: 'runner?'
required: false
default: 'ubuntu-latest'
schedule:
- cron: '0 1 * * *'
env:
CHR_VERSION: ${{ github.event.inputs.version }}
NEW_VERSION: ${{ null }}
name: Builds and pushes tagged image to DockerHub
jobs:
generate_build_deps:
name: Generate Build Deps
runs-on: ${{ fromJSON( format('["ubuntu-latest", "{0}"]', github.event.inputs.type) )[github.event.inputs.type != ''] }}
steps:
- name: Reclaiming disk space on / by removing dotnet/android/ghc
#if: ${{ github.event.inputs.type == '' }}
run: |
test -d /usr/share/dotnet && sudo rm -rf /usr/share/dotnet
test -d /usr/local/lib/android && sudo rm -rf /usr/local/lib/android
test -d /opt/ghc && sudo rm -rf /opt/ghc
test -d /opt/hostedtoolcache/CodeQL && sudo rm -rf /opt/hostedtoolcache/CodeQL
sudo apt-get remove google-cloud-cli azure-cli google-chrome-stable \
firefox mysql-server-core-8.0 mono-devel podman \
powershell || true
sudo apt-get autoremove
- name: Enable proxy on container
shell: bash
if: ${{ github.event.inputs.type != 'ubuntu-latest' }}
run: |
if ! [[ -z "${HTTP_PROXY}" ]]; then
PROXY_ADDR=http://$(hostname -I | cut -d' ' -f1 | xargs):8118
echo "PROXY_ADDR=$PROXY_ADDR" >> $GITHUB_ENV
sudo iptables -D INPUT -p tcp -s localhost --dport 8118 -j ACCEPT
sudo iptables -D INPUT -p tcp --dport 8118 -j DROP
fi
- name: Checkout repo
uses: actions/checkout@v2
with:
path: cromite
fetch-depth: 1
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Check versions
shell: bash
run: |
if [ -z $CHR_VERSION ]; then
LATEST_WIN=$(curl -s 'https://versionhistory.googleapis.com/v1/chrome/platforms/win64/channels/stable/versions/all/releases' | jq -rc '.releases[].version' | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n | tail -n 1)
LATEST_ANDROID=$(curl -s 'https://versionhistory.googleapis.com/v1/chrome/platforms/android/channels/stable/versions/all/releases' | jq -rc '.releases[].version' | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n | tail -n 1)
CHR_VERSION=$(echo -e "$LATEST_ANDROID\n$LATEST_WIN" | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n | tail -n 1)
echo "LATEST_WIN=$LATEST_WIN" >> $GITHUB_ENV
echo "LATEST_ANDROID=$LATEST_ANDROID" >> $GITHUB_ENV
echo "CHR_VERSION=$CHR_VERSION" >> $GITHUB_ENV
fi
- name: Building build-deps container ${{ env.VERSION }}
shell: bash
run: |
IS_PRESENT=$(docker inspect --type=image uazo/build-deps:$CHR_VERSION > /dev/null ; echo $?)
if [ $IS_PRESENT -ne "0" ]; then
IS_PRESENT=$(docker manifest inspect uazo/build-deps:$CHR_VERSION > /dev/null ; echo $?)
if [ $IS_PRESENT -ne "0" ]; then
DOCKER_BUILDKIT=1 docker build -t uazo/build-deps:$CHR_VERSION \
--progress plain \
--build-arg VERSION=$CHR_VERSION \
--build-arg HTTP_PROXY="$PROXY_ADDR" \
--no-cache \
cromite/tools/images/build-deps/.
docker push uazo/build-deps:$CHR_VERSION
echo "NEW_VERSION=$CHR_VERSION" >> $GITHUB_ENV
fi
fi
- name: Building chromium container ${{ env.VERSION }}
shell: bash
run: |
IS_PRESENT=$(docker inspect --type=image uazo/chromium:$CHR_VERSION > /dev/null ; echo $?)
if [ $IS_PRESENT -ne "0" ]; then
IS_PRESENT=$(docker manifest inspect uazo/chromium:$CHR_VERSION > /dev/null ; echo $?)
if [ $IS_PRESENT -ne "0" ]; then
DOCKER_BUILDKIT=1 docker build -t uazo/chromium:$CHR_VERSION \
--progress plain \
--build-arg VERSION=$CHR_VERSION \
--build-arg HTTP_PROXY="$PROXY_ADDR" \
cromite/tools/images/chr-source/.
docker push uazo/chromium:$CHR_VERSION
echo "NEW_VERSION=$CHR_VERSION" >> $GITHUB_ENV
fi
fi
- name: Update files under control
shell: bash
run: |
cd cromite
RELEASE=$(cat build/RELEASE | xargs)
cd tools/under-control
DO_UPDATE=0
if [ -n "$NEW_VERSION" ]; then
if [ "$RELEASE" != "$NEW_VERSION" ]; then
DO_UPDATE=1
fi
elif [ "$RELEASE" != "$(cat src/RELEASE | xargs)" ]; then
DO_UPDATE=1
NEW_VERSION=$RELEASE
fi
if [[ DO_UPDATE -eq 1 ]]; then
echo "Found new version $NEW_VERSION"
echo "Under control: $(cat src/RELEASE | xargs)"
echo "Current: $RELEASE"
test -d src && rm -rf src
docker build --progress=plain --build-arg "TAG=$NEW_VERSION" -o . .
echo $NEW_VERSION >src/RELEASE
fi
CHANGES=0 && git diff --quiet || CHANGES=1
echo "CHANGES=$CHANGES" >> $GITHUB_ENV
if [[ CHANGES -eq 1 ]]; then
git add src
git diff --name-only --staged
fi
- name: Create Pull Request
uses: peter-evans/create-pull-request@dcd5fd746d53dd8de555c0f10bca6c35628be47a #v3.12.0
if: env.CHANGES == '1'
with:
token: ${{ secrets.CROMITE_PULLS }}
path: cromite
add-paths: |
tools/under-control/*
commit-message: 'AUTOMATED - new files under control ${{ env.NEW_VERSION }}'
title: New files under control ${{ env.NEW_VERSION }}
body: ${{ env.MESSAGE }}
delete-branch: true
branch-suffix: short-commit-hash
- name: Create issue ${{ env.VERSION }}
if: "${{ env.NEW_VERSION != '' }}"
shell: bash
run: |
GH=../../gh_2.18.1_linux_amd64/bin/gh
wget https://github.com/cli/cli/releases/download/v2.18.1/gh_2.18.1_linux_amd64.tar.gz
tar xfz gh_2.18.1_linux_amd64.tar.gz
cd cromite/tools
echo ${{ secrets.GITHUB_TOKEN }} | $GH auth login --with-token
if [[ "$LATEST_WIN" == "$CHR_VERSION" ]]; then
echo Using Windows Release >>body.txt
echo "\`\`\`" >>body.txt
curl -s 'https://chromiumdash.appspot.com/fetch_releases?channel=Stable&platform=Windows&num=10&offset=0' | \
jq --arg LATEST "$LATEST_WIN" '.[] | select( .version == $LATEST )' >>body.txt
echo "\`\`\`" >>body.txt
fi
if [[ "$LATEST_ANDROID" == "$CHR_VERSION" ]]; then
echo Using Android Release >>body.txt
echo "\`\`\`" >>body.txt
curl -s 'https://chromiumdash.appspot.com/fetch_releases?channel=Stable&platform=Android&num=10&offset=0' | \
jq --arg LATEST "$LATEST_ANDROID" '.[] | select( .version == $LATEST )' >>body.txt
echo "\`\`\`" >>body.txt
fi
$GH issue create -t "$CHR_VERSION: new chromium version" -F body.txt
-46
View File
@@ -1,46 +0,0 @@
name: Build Sysbox
permissions:
contents: write
on:
workflow_dispatch:
inputs:
sha:
description: 'Sysbox SHA'
required: true
default: ''
env:
SYSBOX_SHA: ${{ github.event.inputs.sha }}
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repo
uses: actions/checkout@v2
with:
path: cromite
fetch-depth: 1
- name: Build patched sysbox
run: |
git clone --recursive https://github.com/nestybox/sysbox.git
cd sysbox
git checkout $SYSBOX_SHA
git submodule update --recursive
cd sysbox-runc/
git apply --ignore-whitespace ../../cromite/tools/images/sysbox/add-x86-x32-arch.patch
git status
cd ..
make sysbox-static TARGET_ARCH=x64
zip -r build.zip build
- name: Publish
uses: actions/upload-artifact@v2
with:
name: build.zip
path: sysbox/build.zip
-425
View File
@@ -1,425 +0,0 @@
name: Build Cromite
permissions:
actions: none
checks: none
contents: none
deployments: none
issues: none
packages: none
pull-requests: none
repository-projects: none
security-events: none
statuses: none
on:
workflow_dispatch:
inputs:
sha:
description: 'uazo/cromite SHA'
required: true
default: ''
target_os:
description: 'targetos [android/win/linux/all]'
required: true
default: 'all'
build:
description: 'android arch [arm/arm64/x64/all]'
required: true
default: 'all'
type:
description: 'runner? [dev/ci]'
required: true
default: 'ci'
debug:
description: 'debug? [true/false]'
required: true
default: 'false'
clangd:
description: 'clangd? [true/false]'
required: true
default: 'false'
env:
CROMITE_SHA: ${{ github.event.inputs.sha }}
REMOVEDOCKERSUPPORT: true
USELOCALIMAGE: true
jobs:
check_images:
runs-on: ${{ github.event.inputs.type }}
steps:
- name: Checkout repo
uses: actions/checkout@v2
with:
path: cromite
ref: ${{ github.event.inputs.sha }}
fetch-depth: 1
- name: Enable proxy on container
shell: bash
run: |
if ! [[ -z "${HTTP_PROXY}" ]]; then
PROXY_ADDR=http://$(hostname -I | cut -d' ' -f1 | xargs):8118
echo "PROXY_ADDR=$PROXY_ADDR" >> $GITHUB_ENV
sudo iptables -D INPUT -p tcp -s localhost --dport 8118 -j ACCEPT
sudo iptables -D INPUT -p tcp --dport 8118 -j DROP
fi
- name: Get current chromium version
shell: bash
run: |
export VERSION=$( cat ./cromite/build/RELEASE )
echo Current version is $VERSION
echo "VERSION=$VERSION" >> $GITHUB_ENV
cd cromite/tools
- name: Building build-deps container ${{ env.VERSION }}
shell: bash
run: |
IS_PRESENT=$(docker inspect --type=image uazo/build-deps:$VERSION > /dev/null ; echo $?)
if [ $IS_PRESENT -ne "0" ]; then
IS_PRESENT=$(docker manifest inspect uazo/build-deps:$VERSION > /dev/null ; echo $?)
if [ $IS_PRESENT -ne "0" ]; then
DOCKER_BUILDKIT=1 docker build -t uazo/build-deps:$VERSION \
--progress plain \
--build-arg VERSION=$VERSION \
--build-arg HTTP_PROXY="$PROXY_ADDR" \
--no-cache \
cromite/tools/images/build-deps/.
fi
fi
- name: Building chromium container ${{ env.VERSION }}
shell: bash
run: |
IS_PRESENT=$(docker inspect --type=image uazo/chromium:$VERSION > /dev/null ; echo $?)
if [ $IS_PRESENT -ne "0" ]; then
IS_PRESENT=$(docker manifest inspect uazo/chromium:$VERSION > /dev/null ; echo $?)
if [ $IS_PRESENT -ne "0" ]; then
DOCKER_BUILDKIT=1 docker build -t uazo/chromium:$VERSION \
--progress plain \
--build-arg VERSION=$VERSION \
--build-arg HTTP_PROXY="$PROXY_ADDR" \
cromite/tools/images/chr-source/.
fi
fi
- name: Building cromite container ${{ env.VERSION }}-${{ env.CROMITE_SHA }}
shell: bash
run: |
IS_PRESENT=$(docker inspect --type=image uazo/cromite:$VERSION-$CROMITE_SHA > /dev/null ; echo $?)
if [ $IS_PRESENT -ne "0" ]; then
IS_PRESENT=$(docker manifest inspect uazo/cromite:$VERSION-$CROMITE_SHA > /dev/null ; echo $?)
if [ $IS_PRESENT -ne "0" ]; then
DOCKER_BUILDKIT=1 docker build -t uazo/cromite:$VERSION-$CROMITE_SHA --progress plain \
--build-arg CROMITE_SHA=$CROMITE_SHA \
--build-arg VERSION=$VERSION \
--build-arg HTTP_PROXY="$PROXY_ADDR" \
cromite/tools/images/cromite-source/.
fi
fi
- name: Building cromite-build container ${{ env.VERSION }}-${{ env.CROMITE_SHA }}
shell: bash
run: |
IS_PRESENT=$(docker inspect --type=image uazo/cromite-build:$VERSION-$CROMITE_SHA > /dev/null ; echo $?)
if [ $IS_PRESENT -ne "0" ]; then
IS_PRESENT=$(docker manifest inspect uazo/cromite-build:$VERSION-$CROMITE_SHA > /dev/null ; echo $?)
if [ $IS_PRESENT -ne "0" ]; then
DOCKER_BUILDKIT=1 docker build -t uazo/cromite-build:$VERSION-$CROMITE_SHA --progress plain \
--build-arg CROMITE_SHA=$CROMITE_SHA \
--build-arg VERSION=$VERSION \
--build-arg HTTP_PROXY="$PROXY_ADDR" \
--no-cache \
cromite/tools/images/cromite-build/.
fi
fi
- name: Get uazo/cromite-build from docker hub if present
shell: bash
run: |
IS_PRESENT=$(docker manifest inspect uazo/cromite-build:$VERSION-$CROMITE_SHA > /dev/null ; echo $?)
if [ $IS_PRESENT -eq "0" ]; then
docker pull uazo/cromite-build:$VERSION-$CROMITE_SHA
fi
- name: Mark image to build
shell: bash
run: |
IS_PRESENT=$(docker inspect --type=image uazo/cromite-build:build > /dev/null ; echo $?)
if [ $IS_PRESENT -eq "0" ]; then
docker rmi uazo/cromite-build:build
fi
docker tag uazo/cromite-build:$VERSION-$CROMITE_SHA uazo/cromite-build:build
build:
runs-on: ${{ github.event.inputs.type }}
needs: check_images
if: success()
timeout-minutes: 1440
container:
image: uazo/cromite-build:build
env:
REMOVEDOCKERSUPPORT: true # CUSTOM RUNNER: remove sharing of docker socket
USELOCALIMAGE: true # CUSTOM RUNNER: permit use of local images
USEINTERNALNETWORK: true # CUSTOM RUNNER: create the docker network as internal
WORKSPACE: /home/lg/working_dir
# kythe
KYTHE_CORPUS: chromium.googlesource.com/chromium/src
KYTHE_ROOT_DIRECTORY: /home/lg/working_dir/chromium/src
KYTHE_OUTPUT_DIRECTORY: /home/lg/working_dir/chromium/src/out/arm64/kythe
# cross build
DEPOT_TOOLS_WIN_TOOLCHAIN_BASE_URL: /win_sdk/10.0.22621.0/
WINDOWSSDKDIR: "/win_sdk/10.0.22621.0/Windows Kits/10/"
GYP_MSVS_OVERRIDE_PATH: /win_sdk/10.0.22621.0/
# compile in debug mode
TARGET_ISDEBUG: ${{ github.event.inputs.debug }}
TARGET_OS: ${{ github.event.inputs.target_os }}
USE_KEYSTORE: true
KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
CROMITE_PREF_HASH_SEED_BIN: ${{ secrets.CROMITE_PREF_HASH_SEED_BIN }}
volumes:
- /storage/images/${{ github.event.inputs.sha }}/android/${{ github.event.inputs.debug }}/arm:/home/lg/working_dir/chromium/src/out/arm
- /storage/images/${{ github.event.inputs.sha }}/android/${{ github.event.inputs.debug }}/arm64:/home/lg/working_dir/chromium/src/out/arm64
- /storage/images/${{ github.event.inputs.sha }}/android/${{ github.event.inputs.debug }}/x64:/home/lg/working_dir/chromium/src/out/x64
- /storage/images/${{ github.event.inputs.sha }}/linux/${{ github.event.inputs.debug }}/lin64:/home/lg/working_dir/chromium/src/out/lin64
- /storage/images/${{ github.event.inputs.sha }}/win/x64:/home/lg/working_dir/chromium/src/out/win64
- /tmp/proxy:/tmp/proxy
- /win_sdk:/win_sdk
steps:
- name: Prepare Build Container
shell: bash
run: |
# set workspace paths
PATH=$WORKSPACE/chromium/src/third_party/llvm-build/Release+Asserts/bin:$WORKSPACE/depot_tools/:/usr/local/go/bin:$WORKSPACE/mtool/bin:$PATH
cd $WORKSPACE
# reset proxy env
HTTP_PROXY=
HTTPS_PROXY=
http_proxy=
https_proxy=
# set out folder permissions
test -d chromium/src/out/arm || sudo mkdir -p chromium/src/out/arm && \
sudo chown lg chromium/src/out &&
sudo chown lg chromium/src/out/arm
test -d chromium/src/out/arm64 || sudo mkdir -p chromium/src/out/arm64 && \
sudo chown lg chromium/src/out &&
sudo chown lg chromium/src/out/arm64
test -d chromium/src/out/win64 || sudo mkdir -p chromium/src/out/win64 && \
sudo chown lg chromium/src/out &&
sudo chown lg chromium/src/out/win64
test -d chromium/src/out/x64 || sudo mkdir -p chromium/src/out/x64 && \
sudo chown lg chromium/src/out &&
sudo chown lg chromium/src/out/x64
test -d chromium/src/out/lin64 || sudo mkdir -p chromium/src/out/lin64 && \
sudo chown lg chromium/src/out &&
sudo chown lg chromium/src/out/lin64
# make kythe output directory
test -d $KYTHE_OUTPUT_DIRECTORY || mkdir -p $KYTHE_OUTPUT_DIRECTORY
sudo mkdir -p /run/user/1000/
sudo chown lg /run/user/1000/
sudo chmod g-rxw /run/user/1000/
sudo chmod o-rxw /run/user/1000/
# prepare keystore
echo "::group::-------- prepare keystore"
cd $WORKSPACE
echo "${{ secrets.KEYSTORE }}" > cromite.keystore.asc
gpg --homedir ./ -d --passphrase "${{ secrets.KEYSTORE_PASSPHRASE }}" --batch cromite.keystore.asc > cromite.keystore
echo "::endgroup::"
- name: Build Cromite Android x64
if: ${{ (github.event.inputs.target_os == 'android' || github.event.inputs.target_os == 'all') && (github.event.inputs.build == 'x64' || github.event.inputs.build == 'all') }}
shell: bash
run: |
PATH=$WORKSPACE/chromium/src/third_party/llvm-build/Release+Asserts/bin:$WORKSPACE/depot_tools/:/usr/local/go/bin:$WORKSPACE/mtool/bin:$PATH
cd $WORKSPACE/chromium/src
echo "::group::-------- gn gen"
gn gen --args="target_os = \"android\" $(cat /home/lg/working_dir/cromite/build/cromite.gn_args) target_cpu = \"x64\" " out/x64
echo "::endgroup::"
echo "::group::-------- gn args"
gn args out/x64/ --list --short
gn args out/x64/ --list >out/x64/gn_list
echo "::endgroup::"
ninja -C out/x64 chrome_public_bundle
ninja -C out/x64 chrome_public_apk
cp ../../cromite/build/RELEASE out/x64
- name: Get ninja logs Android x64
if: ${{ (github.event.inputs.target_os == 'android' || github.event.inputs.target_os == 'all') && (github.event.inputs.build == 'x64' || github.event.inputs.build == 'all') }}
shell: bash
run: |
cd $WORKSPACE
$WORKSPACE/ninjatracing/ninjatracing -a $WORKSPACE/chromium/src/out/x64/.ninja_log >$WORKSPACE/chromium/src/out/x64/ninja_log_trace.json
python3 $WORKSPACE/chromium/src/third_party/catapult/tracing/bin/trace2html $WORKSPACE/chromium/src/out/x64/ninja_log_trace.json
- name: Build Cromite Windows x64
if: ${{ github.event.inputs.target_os == 'win' || github.event.inputs.target_os == 'all' }}
shell: bash
run: |
PATH=$WORKSPACE/chromium/src/third_party/llvm-build/Release+Asserts/bin:$WORKSPACE/depot_tools/:/usr/local/go/bin:$WORKSPACE/mtool/bin:$PATH
cd $WORKSPACE/chromium/src
echo "::group::-------- gn gen"
gn gen --args="target_os = \"win\" $(cat /home/lg/working_dir/cromite/build/cromite.gn_args) target_cpu = \"x64\" " out/win64
echo "::endgroup::"
echo "::group::-------- gn args"
gn args out/win64/ --list --short
gn args out/win64/ --list >out/win64/gn_list
echo "::endgroup::"
ninja -C out/win64 chrome
cp ../../cromite/build/RELEASE out/win64
- name: Get ninja logs Windows x64
if: ${{ github.event.inputs.target_os == 'win' || github.event.inputs.target_os == 'all' }}
shell: bash
run: |
cd $WORKSPACE
$WORKSPACE/ninjatracing/ninjatracing -a $WORKSPACE/chromium/src/out/win64/.ninja_log >$WORKSPACE/chromium/src/out/win64/ninja_log_trace.json
python3 $WORKSPACE/chromium/src/third_party/catapult/tracing/bin/trace2html $WORKSPACE/chromium/src/out/win64/ninja_log_trace.json
- name: Build Cromite Android arm64
if: ${{ (github.event.inputs.target_os == 'android' || github.event.inputs.target_os == 'all') && (github.event.inputs.build == 'arm64' || github.event.inputs.build == 'all') }}
shell: bash
run: |
PATH=$WORKSPACE/chromium/src/third_party/llvm-build/Release+Asserts/bin:$WORKSPACE/depot_tools/:/usr/local/go/bin:$WORKSPACE/mtool/bin:$PATH
cd $WORKSPACE/chromium/src
echo "::group::-------- gn gen"
gn gen --args="target_os = \"android\" $(cat /home/lg/working_dir/cromite/build/cromite.gn_args) target_cpu = \"arm64\" " out/arm64
echo "::endgroup::"
echo "::group::-------- gn args"
gn args out/arm64/ --list --short
gn args out/arm64/ --list >out/arm64/gn_list
echo "::endgroup::"
ninja -C out/arm64 chrome_public_bundle
ninja -C out/arm64 chrome_public_apk
cp ../../cromite/build/RELEASE out/arm64
- name: Get ninja logs Android arm64
if: ${{ (github.event.inputs.target_os == 'android' || github.event.inputs.target_os == 'all') && (github.event.inputs.build == 'arm64' || github.event.inputs.build == 'all') }}
shell: bash
run: |
cd $WORKSPACE
$WORKSPACE/ninjatracing/ninjatracing -a $WORKSPACE/chromium/src/out/arm64/.ninja_log >$WORKSPACE/chromium/src/out/arm64/ninja_log_trace.json
python3 $WORKSPACE/chromium/src/third_party/catapult/tracing/bin/trace2html $WORKSPACE/chromium/src/out/arm64/ninja_log_trace.json
- name: Generate breakpad symbols for Android arm64
if: ${{ (github.event.inputs.target_os == 'android' || github.event.inputs.target_os == 'all') && (github.event.inputs.build == 'arm64' || github.event.inputs.build == 'all') }}
shell: bash
run: |
PATH=$WORKSPACE/chromium/src/third_party/llvm-build/Release+Asserts/bin:$WORKSPACE/depot_tools/:/usr/local/go/bin:$WORKSPACE/mtool/bin:$PATH
cd $WORKSPACE/chromium/src
echo "::group::-------- generating breakpad symbols"
ninja -C out/arm64 minidump_stackwalk dump_syms
components/crash/content/tools/generate_breakpad_symbols.py --build-dir=out/arm64 \
--symbols-dir=out/arm64/symbols/ --binary=out/arm64/lib.unstripped/libchrome.so \
--platform=android --clear --verbose
cp out/arm64/lib.unstripped/libchrome.so out/arm64/symbols/libchrome.lib.so
cp out/arm64/minidump_stackwalk out/arm64/symbols
cp out/arm64/dump_syms out/arm64/symbols
echo "::endgroup::"
- name: Generate Supersize data for Android arm64
if: ${{ github.event.inputs.debug == 'false' && (github.event.inputs.target_os == 'android' || github.event.inputs.target_os == 'all') && (github.event.inputs.build == 'arm64' || github.event.inputs.build == 'all') }}
shell: bash
run: |
PATH=$WORKSPACE/chromium/src/third_party/llvm-build/Release+Asserts/bin:$WORKSPACE/depot_tools/:/usr/local/go/bin:$WORKSPACE/mtool/bin:$PATH
cd $WORKSPACE/chromium/src
tools/binary_size/supersize archive out/arm64/chrome.size --apk-file out/arm64/apks/ChromePublic.apk -v
- name: Build Cromite Android arm
if: ${{ (github.event.inputs.target_os == 'android' || github.event.inputs.target_os == 'all') && (github.event.inputs.build == 'arm' || github.event.inputs.build == 'all') }}
shell: bash
run: |
PATH=$WORKSPACE/chromium/src/third_party/llvm-build/Release+Asserts/bin:$WORKSPACE/depot_tools/:/usr/local/go/bin:$WORKSPACE/mtool/bin:$PATH
cd $WORKSPACE/chromium/src
echo "::group::-------- gn gen"
gn gen --args="target_os = \"android\" $(cat /home/lg/working_dir/cromite/build/cromite.gn_args) target_cpu = \"arm\" " out/arm
echo "::endgroup::"
echo "::group::-------- gn args"
gn args out/arm/ --list --short
gn args out/arm/ --list >out/arm/gn_list
echo "::endgroup::"
ninja -C out/arm chrome_public_bundle
ninja -C out/arm chrome_public_apk
cp ../../cromite/build/RELEASE out/arm
- name: Get ninja logs Android arm
if: ${{ (github.event.inputs.target_os == 'android' || github.event.inputs.target_os == 'all') && (github.event.inputs.build == 'arm' || github.event.inputs.build == 'all') }}
shell: bash
run: |
cd $WORKSPACE
$WORKSPACE/ninjatracing/ninjatracing -a $WORKSPACE/chromium/src/out/arm/.ninja_log >$WORKSPACE/chromium/src/out/arm/ninja_log_trace.json
python3 $WORKSPACE/chromium/src/third_party/catapult/tracing/bin/trace2html $WORKSPACE/chromium/src/out/arm/ninja_log_trace.json
- name: Build Cromite Linux 64
if: ${{ (github.event.inputs.target_os == 'linux' || github.event.inputs.target_os == 'all') }}
shell: bash
run: |
PATH=$WORKSPACE/chromium/src/third_party/llvm-build/Release+Asserts/bin:$WORKSPACE/depot_tools/:/usr/local/go/bin:$WORKSPACE/mtool/bin:$PATH
cd $WORKSPACE/chromium/src
echo "::group::-------- gn gen"
gn gen --args="target_os = \"linux\" $(cat /home/lg/working_dir/cromite/build/cromite.gn_args) target_cpu = \"x64\" " out/lin64
echo "::endgroup::"
echo "::group::-------- gn args"
gn args out/lin64/ --list --short
gn args out/lin64/ --list >out/lin64/gn_list
echo "::endgroup::"
ninja -C out/lin64 chrome
cp ../../cromite/build/RELEASE out/lin64
- name: Get ninja logs Linux 64
if: ${{ (github.event.inputs.target_os == 'linux' || github.event.inputs.target_os == 'all') }}
shell: bash
run: |
cd $WORKSPACE
$WORKSPACE/ninjatracing/ninjatracing -a $WORKSPACE/chromium/src/out/lin64/.ninja_log >$WORKSPACE/chromium/src/out/lin64/ninja_log_trace.json
python3 $WORKSPACE/chromium/src/third_party/catapult/tracing/bin/trace2html $WORKSPACE/chromium/src/out/lin64/ninja_log_trace.json
- name: Generate clangd index for Android arm64
if: ${{ github.event.inputs.clangd == 'true' }}
shell: bash
run: |
PATH=$WORKSPACE/chromium/src/third_party/llvm-build/Release+Asserts/bin:$WORKSPACE/depot_tools/:/usr/local/go/bin:$WORKSPACE/mtool/bin:$PATH
cd $WORKSPACE/chromium/src
test -f out/arm64/cromite.idx || \
cp -r out/arm64 out/clangd && \
gn gen --args="import(\"/home/lg/working_dir/cromite/build/cromite.gn_args\") $(cat ../../build_args.gni) skip_clangd_unsupported_options = true" out/clangd && \
$WORKSPACE/ninja/ninja -C $WORKSPACE/chromium/src/out/clangd -a chrome_public_apk \
-t compdb cc cxx objc objcxx >$WORKSPACE/chromium/src/out/clangd/compile_commands.json && \
/home/lg/working_dir/clangd_snapshot_20211205/bin/clangd-indexer --executor=all-TUs out/clangd/compile_commands.json >out/arm64/cromite.idx && \
rm -rf out/clangd
-154
View File
@@ -1,154 +0,0 @@
name: Check git apply
permissions:
# actions: none
# checks: none
# contents: write
# deployments: none
# issues: none
# packages: none
pull-requests: write
# repository-projects: none
# security-events: none
# statuses: none
on:
push:
branches-ignore:
- 'ci'
paths:
- 'build/**'
workflow_dispatch:
inputs:
rtag:
description: 'uazo/cromite TAG or COMMIT'
required: true
default: ''
env:
RTAG: ${{ github.event.inputs.rtag }}
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: "Get value from dispatch"
run: |
if [ -z "${RTAG}" ]; then
echo "RTAG=$GITHUB_SHA" >> $GITHUB_ENV
echo "RTAG=$RTAG"
fi
- name: Prepare container
run: |
sudo apt update
sudo apt install -y wget unzip tar sed dos2unix patchutils wiggle curl
wget https://github.com/uazo/superpatch/releases/latest/download/SuperPatchUtils.tar.gz
tar xfz SuperPatchUtils.tar.gz
rm SuperPatchUtils.tar.gz
wget https://github.com/ericchiang/pup/releases/download/v0.4.0/pup_v0.4.0_linux_amd64.zip
unzip pup_v0.4.0_linux_amd64.zip
rm pup_v0.4.0_linux_amd64.zip
BRANCH=$(curl https://github.com/uazo/cromite/branch_commits/$RTAG | ./pup -p li.branch:last-child a text{})
if [ -z "${BRANCH}" ]; then
BRANCH=$(curl https://github.com/uazo/cromite/branch_commits/$RTAG a | ./pup -p li.branch:first-child a text{})
fi
if [ -z "${BRANCH}" ]; then
echo "Can not recover the base commit"
exit 1
fi
echo "BRANCH=$BRANCH" >> $GITHUB_ENV
- name: Checkout 'uazo/cromite' ${{ env.BRANCH }}
uses: actions/checkout@v2
with:
repository: 'uazo/cromite'
ref: ${{ github.event.inputs.rtag }}
path: 'cromite'
fetch-depth: 1
- name: Check chromium version
run: |
export HOME=$GITHUB_WORKSPACE
VERSION=$(cat ~/cromite/build/RELEASE)
echo "VERSION=$VERSION" >> $GITHUB_ENV
- name: Cache chromium sources
uses: actions/cache@v3
with:
path: chromium-src
key: chrsource-${{ env.VERSION }}
- name: Download chromium ${{ env.VERSION }} sources
run: |
export HOME=$GITHUB_WORKSPACE
./bin/SuperPatchUtils bromite $RTAG ~/chromium-src
mkdir -p ~/chromium/src && cp -rT ~/chromium-src ~/chromium/src
cd ~/chromium/src
git init
git config user.email "you@example.com"
git config user.name "Your Name"
git add .
git commit -m $VERSION
git tag -a $VERSION -m $VERSION
git add -f v8 && git commit -m ":NOEXPORT: v8" || true
- name: Apply patches ${{ github.event.inputs.rtag }}
run: |
export HOME=$GITHUB_WORKSPACE
cd ~/chromium/src
export SILENT=true
export SKIPAUTOGENERATED=true
bash ~/cromite/tools/apply-all-patch.sh || exit 1
rm -rf ~/cromite/build/patches-new/
rm ~/cromite/build/cromite_patches_list_new.txt
- name: Export patches
run: |
export HOME=$GITHUB_WORKSPACE
cd ~/chromium/src
bash ~/cromite/tools/export-all-patch.sh
cd ~/cromite
rm -rf build/patches/*
mv build/patches-new/* build/patches
rm -rf build/patches-new/
- name: Check differences CHANGES=${{ env.CHANGES }}
run: |
export HOME=$GITHUB_WORKSPACE
cd ~/cromite
CHANGES=0 && git diff --quiet || CHANGES=1
echo "CHANGES=$CHANGES" >> $GITHUB_ENV
if [[ CHANGES -eq 1 ]]; then
git add build/patches/*.patch
git diff --name-only --staged
# MESSAGE=$(git diff --name-only --staged)
# echo "MESSAGE='$MESSAGE'" >> $GITHUB_ENV
fi
- name: Create Pull Request
uses: peter-evans/create-pull-request@dcd5fd746d53dd8de555c0f10bca6c35628be47a #v3.12.0
if: env.CHANGES == '1'
with:
token: ${{ secrets.CROMITE_PULLS }}
path: cromite
base: ${{ env.BRANCH }}
#push-to-fork: uazo/cromite
add-paths: |
build/patches/*.patch
commit-message: 'AUTOMATED - git apply results'
title: Git apply result for ${{ env.BRANCH }} branch
body: ${{ env.MESSAGE }}
delete-branch: true
branch-suffix: short-commit-hash
-71
View File
@@ -1,71 +0,0 @@
name: 'Check NIST database'
on:
schedule:
- cron: '30 1 * * *'
workflow_dispatch:
permissions:
issues: write
pull-requests: write
jobs:
check:
runs-on: ubuntu-latest
steps:
- name: Checkout 'uazo/cromite' ${{ env.BRANCH }}
uses: actions/checkout@v2
with:
repository: 'uazo/cromite'
ref: ${{ github.event.inputs.rtag }}
path: 'cromite'
fetch-depth: 1
- name: Get data
run: |
sudo apt update
DEBIAN_FRONTEND=noninteractive sudo apt install -y sed
export HOME=$GITHUB_WORKSPACE
cd ~/cromite/tools
test -d cves || mkdir -p cves
cd cves
CY=$(date +%Y)
for i in $(seq 2020 $CY)
do
echo Asking for $i year
docker run --rm --name tapir stratosphereips/tapir:latest \
bash -c "python3 tapir.py -y $i libjxl -s" >>libjxl.ansi
done
sed -e 's/\x1b\[[0-9;]*m//g' <libjxl.ansi >libjxl.txt
rm libjxl.ansi
- name: Check differences
run: |
export HOME=$GITHUB_WORKSPACE
cd ~/cromite
CHANGES=0 && git diff --quiet || CHANGES=1
echo "CHANGES=$CHANGES" >> $GITHUB_ENV
if [[ CHANGES -eq 1 ]]; then
git add tools/cves/*.txt
git diff --name-only --staged
fi
- name: Create Pull Request
uses: peter-evans/create-pull-request@dcd5fd746d53dd8de555c0f10bca6c35628be47a #v3.12.0
if: env.CHANGES == '1'
with:
token: ${{ secrets.CROMITE_PULLS }}
path: cromite
base: ${{ env.BRANCH }}
#push-to-fork: uazo/cromite
add-paths: |
tools/cves/*.txt
commit-message: 'AUTOMATED - CVE results'
title: New CVE results
delete-branch: true
branch-suffix: short-commit-hash
-130
View File
@@ -1,130 +0,0 @@
name: Execute Tests
permissions:
actions: none
checks: none
contents: none
deployments: none
issues: none
packages: none
pull-requests: none
repository-projects: none
security-events: none
statuses: none
on:
workflow_dispatch:
inputs:
sha:
description: 'uazo/bromite SHA'
required: true
default: 'ce2f07034a3d3b257e9bada65d8293a6786bb95f'
env:
BROMITE_SHA: ${{ github.event.inputs.sha }}
REMOVEDOCKERSUPPORT: true
USELOCALIMAGE: true
jobs:
get_image:
runs-on: self-hosted
steps:
- name: Mark image to test
shell: bash
run: |
docker tag uazo/bromite-build:$BROMITE_SHA uazo/bromite-build:test
exec-test:
runs-on: self-hosted
needs: get_image
if: success()
container:
image: uazo/bromite-build:test
env:
REMOVEDOCKERSUPPORT: true # CUSTOM RUNNER: remove sharing of docker socket
USELOCALIMAGE: true # CUSTOM RUNNER: permit use of local images
USEINTERNALNETWORK: true # CUSTOM RUNNER: create the docker network as internal
WORKSPACE: /home/lg/working_dir
ARTIFACS_DIR: /home/lg/working_dir/artifacs
volumes:
- /storage/images/${{ github.event.inputs.sha }}/out:/home/lg/working_dir/chromium/src/out/bromite:r
- /storage/images/${{ github.event.inputs.sha }}/out/tests:/home/lg/working_dir/chromium/src/out/tests
options: --device=/dev/kvm
steps:
- name: Prepare Test Container
shell: bash
run: |
# set workspace paths
PATH=$WORKSPACE/chromium/src/third_party/llvm-build/Release+Asserts/bin:$WORKSPACE/depot_tools/:/usr/local/go/bin:$WORKSPACE/mtool/bin:$PATH
cd $WORKSPACE
# copy artifacts
#cd chromium/src
#mkdir -p out/bromite
#cp -arp $ARTIFACS_DIR/out/* out/bromite
rm -rf out/tests/*
#mkdir -p out/tests
# reset proxy env
#HTTP_PROXY=
#HTTPS_PROXY=
#http_proxy=
#https_proxy=
# - name: Wait forever
# shell: bash
# run: |
# sleep infinity
- name: Execute chrome junit test
shell: bash
run: |
PATH=$WORKSPACE/chromium/src/third_party/llvm-build/Release+Asserts/bin:$WORKSPACE/depot_tools/:/usr/local/go/bin:$WORKSPACE/mtool/bin:$PATH
cd $WORKSPACE/chromium/src
out/bromite/bin/run_chrome_junit_tests --gtest_filter=*Bromite* || KO=1
- name: Start Android Emulator
shell: bash
run: |
PATH=$WORKSPACE/chromium/src/third_party/llvm-build/Release+Asserts/bin:$WORKSPACE/depot_tools/:/usr/local/go/bin:$WORKSPACE/mtool/bin:$PATH
cd $WORKSPACE/chromium/src
sudo mkdir -p /github/home/.android
sudo chmod 666 /github/home/.android/
tools/android/avd/avd.py install --avd-config ../../generic_android31.textpb -v
tools/android/avd/avd.py start --avd-config ../../generic_android31.textpb -v
- name: Execute unit tests
shell: bash
run: |
PATH=$WORKSPACE/chromium/src/third_party/llvm-build/Release+Asserts/bin:$WORKSPACE/depot_tools/:/usr/local/go/bin:$WORKSPACE/mtool/bin:$PATH
cd $WORKSPACE/chromium/src
out/bromite/unit_tests -v --fast-local-dev --gtest_filter=*Bromite* || KO=1
- name: Restart Android Emulator
shell: bash
run: |
PATH=$WORKSPACE/chromium/src/third_party/llvm-build/Release+Asserts/bin:$WORKSPACE/depot_tools/:/usr/local/go/bin:$WORKSPACE/mtool/bin:$PATH
cd $WORKSPACE/chromium/src
pkill -f qemu-system-x86
tools/android/avd/avd.py start --avd-config ../../generic_android31.textpb -v
- name: Execute instrumentation tests
shell: bash
run: |
PATH=$WORKSPACE/chromium/src/third_party/llvm-build/Release+Asserts/bin:$WORKSPACE/depot_tools/:/usr/local/go/bin:$WORKSPACE/mtool/bin:$PATH
cd $WORKSPACE/chromium/src
out/bromite/bin/run_chrome_public_test_apk -v --num-retries=1 --gtest_filter=*Bromite* || KO=1
#- name: Wait forever
# shell: bash
# run: |
# sleep infinity
- name: Copy results
shell: bash
run: |
sudo cp -r $WORKSPACE/chromium/src/out/bromite/TEST_RESULTS* $WORKSPACE/chromium/src/out/tests/
-212
View File
@@ -1,212 +0,0 @@
name: Release Cromite CI
permissions:
contents: write
on:
workflow_dispatch:
inputs:
sha:
description: 'uazo/cromite SHA'
required: true
default: ''
type:
description: 'runner? [dev/ci]'
required: true
default: 'ci'
draft:
description: 'draft? [true/false]'
required: true
default: 'false'
env:
CROMITE_SHA: ${{ github.event.inputs.sha }}
REMOVEDOCKERSUPPORT: true
USELOCALIMAGE: true
jobs:
release:
runs-on: ${{ github.event.inputs.type }}
env:
IS_DRAFT: ${{ github.event.inputs.draft }}
OUTPUTFILE_ARM: /storage/images/${{ github.event.inputs.sha }}/android/false/arm/
OUTPUTFILE_ARM64: /storage/images/${{ github.event.inputs.sha }}/android/false/arm64/
OUTPUTFILE_X64: /storage/images/${{ github.event.inputs.sha }}/android/false/x64/
OUTPUTFILE_WIN: /storage/images/${{ github.event.inputs.sha }}/win/x64/
OUTPUTFILE_LIN: /storage/images/${{ github.event.inputs.sha }}/linux/false/lin64/
steps:
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Prepare container
run: |
wget https://github.com/ericchiang/pup/releases/download/v0.4.0/pup_v0.4.0_linux_amd64.zip
unzip pup_v0.4.0_linux_amd64.zip && rm pup_v0.4.0_linux_amd64.zip
BRANCH=$(curl https://github.com/uazo/cromite/branch_commits/$CROMITE_SHA | ./pup -p li.branch:last-child a text{} | xargs)
echo "BRANCH=$BRANCH" >> $GITHUB_ENV
wget https://github.com/cli/cli/releases/download/v2.18.1/gh_2.18.1_linux_amd64.tar.gz
tar xfz gh_2.18.1_linux_amd64.tar.gz
- name: Checkout 'uazo/cromite'
uses: actions/checkout@v2
with:
repository: 'uazo/cromite'
path: 'cromite'
fetch-depth: 1
- name: Create release
shell: bash
run: |
VERSION=v$(cat ${{ env.OUTPUTFILE_ARM64 }}/RELEASE)
cd cromite/tools
GH=gh_2.21.1_linux_amd64/bin/gh
wget https://github.com/cli/cli/releases/download/v2.21.1/gh_2.21.1_linux_amd64.tar.gz
tar xfz gh_2.21.1_linux_amd64.tar.gz
echo ${{ secrets.GITHUB_TOKEN }} | $GH auth login --with-token
echo "\`\`\`" >note
# echo "this is not the official release of bromite but a test version." >>note
# echo "you can try it at your own risk." >>note
echo "\`\`\`" >>note
$GH release create $VERSION-$CROMITE_SHA --notes-file note -d
# android arm
echo "::group::-------- android arm"
sudo cp ${{ env.OUTPUTFILE_ARM }}/apks/ChromePublic.apk arm_ChromePublic.apk
sudo chown runner arm_ChromePublic.apk
echo Uploading arm_ChromePublic
$GH release upload $VERSION-$CROMITE_SHA arm_ChromePublic.apk
echo "::endgroup::"
# android arm64
echo "::group::-------- android arm64"
sudo cp ${{ env.OUTPUTFILE_ARM64 }}/apks/ChromePublic.apk arm64_ChromePublic.apk
sudo chown runner arm64_ChromePublic.apk
echo Uploading arm64_ChromePublic
$GH release upload $VERSION-$CROMITE_SHA arm64_ChromePublic.apk
echo "::endgroup::"
# android x64
echo "::group::-------- android x64"
sudo cp ${{ env.OUTPUTFILE_X64 }}/apks/ChromePublic.apk x64_ChromePublic.apk
sudo chown runner x64_ChromePublic.apk
echo Uploading x64_ChromePublic
$GH release upload $VERSION-$CROMITE_SHA x64_ChromePublic.apk
echo "::endgroup::"
echo "::group::-------- chrome.size"
test $VERSION-$CROMITE_SHA $OUTPUTFILE_ARM64/chrome.size && \
$GH release upload $VERSION-$CROMITE_SHA $OUTPUTFILE_ARM64/chrome.size
echo "::endgroup::"
echo "::group::-------- ChromePublic.apk.mapping"
sudo cp ${{ env.OUTPUTFILE_ARM64 }}/apks/ChromePublic.apk.mapping arm64_ChromePublic.apk.mapping
$GH release upload $VERSION-$CROMITE_SHA arm64_ChromePublic.apk.mapping
sudo cp ${{ env.OUTPUTFILE_X64 }}/apks/ChromePublic.apk.mapping x64_ChromePublic.apk.mapping
$GH release upload $VERSION-$CROMITE_SHA x64_ChromePublic.apk.mapping
echo "::endgroup::"
echo "::group::-------- Uploading arm64_ninja_log_trace.html"
test $OUTPUTFILE_ARM64/ninja_log_trace.html && \
cp $OUTPUTFILE_ARM64/ninja_log_trace.html arm64_ninja_log_trace.html && \
$GH release upload $VERSION-$CROMITE_SHA arm64_ninja_log_trace.html
echo "::endgroup::"
# windows x64
echo "::group::-------- windows x64"
mkdir chrome-win/
cp $OUTPUTFILE_WIN/*.manifest chrome-win/
cp $OUTPUTFILE_WIN/chrome.dll chrome-win/
cp $OUTPUTFILE_WIN/chrome.exe chrome-win/
cp $OUTPUTFILE_WIN/chrome_100_percent.pak chrome-win/
cp $OUTPUTFILE_WIN/chrome_200_percent.pak chrome-win/
cp $OUTPUTFILE_WIN/chrome_elf.dll chrome-win/
cp $OUTPUTFILE_WIN/chrome_proxy.exe chrome-win/
cp $OUTPUTFILE_WIN/chrome_pwa_launcher.exe chrome-win/
cp $OUTPUTFILE_WIN/chrome_wer.dll chrome-win/
cp "/win_sdk/10.0.22621.0/Windows Kits/10/Redist/D3D/x64/d3dcompiler_47.dll" chrome-win/
cp $OUTPUTFILE_WIN/elevation_service.exe chrome-win/
cp "$OUTPUTFILE_WIN/First Run" chrome-win/
cp $OUTPUTFILE_WIN/headless_lib_data.pak chrome-win/
cp $OUTPUTFILE_WIN/icudtl.dat chrome-win/
cp $OUTPUTFILE_WIN/libEGL.dll chrome-win/
cp $OUTPUTFILE_WIN/libGLESv2.dll chrome-win/
cp $OUTPUTFILE_WIN/Logo.png chrome-win/
cp $OUTPUTFILE_WIN/mojo_core.dll chrome-win/
cp $OUTPUTFILE_WIN/notification_helper.exe chrome-win/
cp $OUTPUTFILE_WIN/resources.pak chrome-win/
cp $OUTPUTFILE_WIN/SmallLogo.png chrome-win/
cp $OUTPUTFILE_WIN/snapshot_blob.bin chrome-win/
cp $OUTPUTFILE_WIN/VkICD_mock_icd.dll chrome-win/
cp $OUTPUTFILE_WIN/VkLayer_khronos_validation.dll chrome-win/
cp $OUTPUTFILE_WIN/vk_swiftshader.dll chrome-win/
cp $OUTPUTFILE_WIN/vulkan-1.dll chrome-win/
cp -r $OUTPUTFILE_WIN/locales chrome-win/locales
#test chrome-win.zip && rm chrome-win.zip
zip -r chrome-win.zip chrome-win/
echo Uploading chrome-win.zip
$GH release upload $VERSION-$CROMITE_SHA chrome-win.zip
echo "::endgroup::"
## linux
echo "::group::-------- linux x64"
mkdir chrome-lin/
cp $OUTPUTFILE_LIN/chrome chrome-lin/
cp $OUTPUTFILE_LIN/chrome_100_percent.pak chrome-lin/
cp $OUTPUTFILE_LIN/chrome_200_percent.pak chrome-lin/
cp $OUTPUTFILE_LIN/chrome_crashpad_handler chrome-lin/
cp $OUTPUTFILE_LIN/chrome-wrapper chrome-lin/
cp $OUTPUTFILE_LIN/icudtl.dat chrome-lin/
cp $OUTPUTFILE_LIN/libEGL.so chrome-lin/
cp $OUTPUTFILE_LIN/libGLESv2.so chrome-lin/
cp $OUTPUTFILE_LIN/libvulkan.so.1 chrome-lin/
cp $OUTPUTFILE_LIN/libqt5_shim.so chrome-lin/
cp $OUTPUTFILE_LIN/libqt6_shim.so chrome-lin/
cp $OUTPUTFILE_LIN/libvk_swiftshader.so chrome-lin/
cp -r $OUTPUTFILE_LIN/locales/ chrome-lin/locales
cp $OUTPUTFILE_LIN/product_logo_48.png chrome-lin/
cp $OUTPUTFILE_LIN/resources.pak chrome-lin/
cp $OUTPUTFILE_LIN/snapshot_blob.bin chrome-lin/
cp $OUTPUTFILE_LIN/xdg-mime chrome-lin/
cp $OUTPUTFILE_LIN/xdg-settings chrome-lin/
tar -czvf chrome-lin64.tar.gz chrome-lin/
echo Uploading chrome-lin64.tar.gz
$GH release upload $VERSION-$CROMITE_SHA chrome-lin64.tar.gz
echo "::endgroup::"
echo "::group::-------- arm64 symbols"
zip arm64_symbols.zip ${{ env.OUTPUTFILE_ARM64 }}/dump_syms \
${{ env.OUTPUTFILE_ARM64 }}/minidump_stackwalk \
${{ env.OUTPUTFILE_ARM64 }}/libchrome.so
$GH release upload $VERSION-$CROMITE_SHA arm64_symbols.zip
echo "::endgroup::"
# workaround for https://github.com/cli/cli/issues/6599
sleep 30s
TIMESTAMP=$(date +%s -r chrome-win.zip)
echo >updateurl.txt "browser=chromium;os=windows;architecture=64-bit;timestamp=$TIMESTAMP;editor=uazo;channel=stable;repository=https://github.com/uazo/cromite/releases;download=https://github.com/uazo/cromite/releases/latest/download/chrome-win.zip;version=$(cat $OUTPUTFILE_WIN/RELEASE);revision=1;commit=$CROMITE_SHA"
$GH release upload $VERSION-$CROMITE_SHA updateurl.txt
$GH release edit $VERSION-$CROMITE_SHA -t $VERSION-$CROMITE_SHA
if [ $IS_DRAFT == "false" ]; then
$GH release edit $VERSION-$CROMITE_SHA --draft=false
fi
VERSION=$(cat ${{ env.OUTPUTFILE_ARM64 }}/RELEASE)
docker push uazo/cromite:$VERSION-$CROMITE_SHA
docker push uazo/cromite-build:$VERSION-$CROMITE_SHA
-24
View File
@@ -1,24 +0,0 @@
name: 'Close stale issues and PRs'
on:
schedule:
- cron: '30 1 * * *'
workflow_dispatch:
permissions:
issues: write
pull-requests: write
jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v6
with:
exempt-all-milestones: true
any-of-labels: 'awaiting info,wontfix'
days-before-stale: 5
days-before-close: 7
stale-issue-message: "This issue has been automatically marked as stale as there has been no recent activity in response to our request for more information. Please respond so that we can proceed with this issue."
close-issue-message: "This issue has been automatically closed as sufficient information hasn't been provided on the issue for further actions to be taken. Feel free to add more information."
-82
View File
@@ -1,82 +0,0 @@
name: Update patches doc
permissions:
# actions: none
# checks: none
# contents: write
# deployments: none
# issues: none
# packages: none
pull-requests: write
# repository-projects: none
# security-events: none
# statuses: none
on:
push:
branches:
- 'master'
paths:
- 'build/**'
workflow_dispatch:
inputs:
rtag:
description: 'uazo/cromite TAG or COMMIT'
required: true
default: ''
env:
RTAG: ${{ github.event.inputs.rtag }}
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: "Get value from dispatch"
run: |
if [ -z "${RTAG}" ]; then
echo "RTAG=$GITHUB_SHA" >> $GITHUB_ENV
echo "RTAG=$RTAG"
fi
- name: Checkout 'uazo/cromite' ${{ env.BRANCH }}
uses: actions/checkout@v2
with:
repository: 'uazo/cromite'
ref: ${{ github.event.inputs.rtag }}
path: 'cromite'
fetch-depth: 1
- name: Generate patches doc
run: |
export HOME=$GITHUB_WORKSPACE
bash ~/cromite/tools/extract-all-patch-data.sh ~/cromite/build/patches
- name: Check differences CHANGES=${{ env.CHANGES }}
run: |
export HOME=$GITHUB_WORKSPACE
cd ~/cromite
CHANGES=0 && git diff --quiet || CHANGES=1
echo "CHANGES=$CHANGES" >> $GITHUB_ENV
if [[ CHANGES -eq 1 ]]; then
git add docs/*.md
fi
- name: Create Pull Request
uses: peter-evans/create-pull-request@dcd5fd746d53dd8de555c0f10bca6c35628be47a #v3.12.0
if: env.CHANGES == '1'
with:
token: ${{ secrets.CROMITE_PULLS }}
path: cromite
base: ${{ env.BRANCH }}
add-paths: |
build/patches/*.patch
commit-message: 'AUTOMATED - update patch docs'
title: Generate patches doc for ${{ env.BRANCH }} branch
body: ${{ env.MESSAGE }}
delete-branch: true
branch-suffix: short-commit-hash
-66
View File
@@ -1,66 +0,0 @@
name: Update fdroid repo
on:
workflow_dispatch:
env:
REMOVEDOCKERSUPPORT: true
USELOCALIMAGE: true
USEINTERNALNETWORK: true
jobs:
update-fdroid:
runs-on: ci2
container:
image: uazo/fdroidserver:latest
volumes:
- /tmp/forward-proxy:/tmp/forward-proxy
steps:
- name: Update fdroid repo
shell: bash
run: |
export https_proxy=http://127.0.0.1:8118
socat TCP-LISTEN:8118,reuseaddr,fork UNIX-CLIENT:/tmp/forward-proxy/proxy.sock &
socat TCP-LISTEN:1080,reuseaddr,fork UNIX-CLIENT:/tmp/forward-proxy/ftp.sock &
touch /etc/apt/apt.conf.d/proxy.conf
echo "Acquire::http::Proxy \"$https_proxy\";" >/etc/apt/apt.conf.d/proxy.conf
apt update
DEBIAN_FRONTEND=noninteractive apt update && apt install -y wget
wget https://github.com/rclone/rclone/releases/download/v1.64.0/rclone-v1.64.0-linux-amd64.zip
unzip rclone-v1.64.0-linux-amd64.zip
export rclone=rclone-v1.64.0-linux-amd64/rclone
mkdir -p ~/.config/rclone
echo "${{ secrets.RCLONE_CONF }}" > ~/.config/rclone/rclone.conf
$rclone sync ftp:www.cromite.org/fdroid fdroid --log-level INFO --ftp-socks-proxy 127.0.0.1:1080
test -d /usr/share/man/man1 || mkdir -p /usr/share/man/man1
DEBIAN_FRONTEND=noninteractive apt install -y fdroidserver
cd fdroid/repo/
wget https://github.com/uazo/cromite/releases/latest/download/arm_ChromePublic.apk
wget https://github.com/uazo/cromite/releases/latest/download/arm64_ChromePublic.apk
wget https://github.com/uazo/cromite/releases/latest/download/x64_ChromePublic.apk
test arm_ChromePublic.apk.1 && rm arm_ChromePublic.apk && mv arm_ChromePublic.apk.1 arm_ChromePublic.apk
test arm64_ChromePublic.apk.1 && rm arm64_ChromePublic.apk && mv arm64_ChromePublic.apk.1 arm64_ChromePublic.apk
test x64_ChromePublic.apk.1 && rm x64_ChromePublic.apk && mv x64_ChromePublic.apk.1 x64_ChromePublic.apk
cd ..
gpg -d --passphrase "${{ secrets.FDROID_PASSPHRASE }}" --batch config.yml.asc >config.yml
gpg -d --passphrase "${{ secrets.FDROID_PASSPHRASE }}" --batch keystore.p12.asc >keystore.p12
fdroid update -c; fdroid update
rm config.yml keystore.p12
cd ..
test -f fdroid/config.yml && exit 1
test -f fdroid/keystore.p12 && exit 1
$rclone sync fdroid ftp:www.cromite.org/fdroid --log-level INFO --ftp-socks-proxy 127.0.0.1:1080
$rclone sync fdroid ftp:www.cromite.org/fdroid --log-level INFO --ftp-socks-proxy 127.0.0.1:1080
-6
View File
@@ -1,6 +0,0 @@
################################################################################
# This .gitignore file was automatically created by Microsoft(R) Visual Studio.
################################################################################
/.vs
/temp
+1144
View File
File diff suppressed because it is too large Load Diff
+91
View File
@@ -0,0 +1,91 @@
# Frequently Asked Questions
## Does Google Sync/Translate/Data saver work?
No.
This is not a limitation of Bromite but of all Chromium-based projects in general, as general public is not allowed to use Google's APIs for free unless when using Chrome.
Additionally, these features would not be privacy-friendly.
## Does Bromite require root?
No.
## Is Bromite de-googled?
Yes, although this has not been verified (and hardly can be) under all situations; if you were to find connections to cloud-based services please report them via the issue tracker.
Bromite uses [ungoogled-chromium's python script](https://github.com/Eloston/ungoogled-chromium/blob/master/utils/domain_substitution.py) to disable URLs in the codebase since version `78.0.3904.93`.
Projects which follow a strict approach on this are [Iridium](https://iridiumbrowser.de/) and [Inox patchset](https://github.com/gcarq/inox-patchset).
## Does Bromite support DRM media?
Yes, in order to play protected/encrypted media content the browser will use Android's DRM media framework to automatically negotiate access (same as Chromium).
This means for example that requests to Android license servers will be performed (`www.googleapis.com`), see https://w3c.github.io/encrypted-media/#direct-individualization
To disable this functionality you should disable protected content playback from Site settings -> Protected Content.
## What is the SystemWebView?
It is the core component of Android for all web page visualizations. For example when you access a new wifi network and need to activate it, that is using the SystemWebView. If you do not know what it is then you do not need to install it.
See also [the wiki page](https://github.com/bromite/bromite/wiki/Installing-SystemWebView) for community-contributed installation instructions.
Ad-blocking was present and always enabled in the SystemWebView from version `72.0.3626.120` till version `77.0.3865.104`, when it stopped working due to [upstream NetworkService changes](https://docs.google.com/document/d/1TZEuPvr2KAbP4_TZpuuwtEEArQsyAkc2HDu68l66YwU/edit?ts=598244df#heading=h.ougoi5i6508y).
## How to enable DNS-over-HTTPS?
See [this page](https://www.bromite.org/doh).
## Can you add HTTPS everywhere?
No.
We cannot add add-ons to Bromite (merely some features).
## Is Bromite on Play Store?
No, and this is not going to change. Many limitations apply for submissions there, including which ads are allowed to be blocked.
Bromite favors user freedom in software choice: the device is yours so you get to choose which software to run on it, end of the story.
## Is Bromite on F-Droid?
It is not on the official F-Droid repository and there are no (more) plans to submit it.
You can use F-Droid client to install and receive updates via [the official Bromite F-Droid repository](https://www.bromite.org/fdroid).
## Does Bromite support WebRTC?
Partially, see https://github.com/bromite/bromite/wiki/WebRTC
## Using Bromite will favour the monopoly of the Chromium/Blink engine, why do you develop and maintain Bromite?
In short, to show what a Chromium-based engine could do **for the user** if the user experience and needs were the main focus of modern browser design.
For an Android browser using an alternative engine see [Fennec F-Droid](https://f-droid.org/en/packages/org.mozilla.fennec_fdroid/).
## Does Bromite support extensions?
No; Bromite will support extensions only if upstream (Chromium) does, or similarly another project maintains the patch and functionality.
## Why do push notifications not work on this website?
The [Chromium Blink engine](https://www.chromium.org/blink) uses [GCM](https://en.wikipedia.org/wiki/Google_Cloud_Messaging) to deliver messages
when websites use the [Push API](https://w3c.github.io/push-api/); this will not work in Bromite because cloud integrations are disabled (GCM in this case).
[ServiceWorker notifications](https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration/showNotification) do work instead since they use
[android.app.Notification](https://developer.android.com/guide/topics/ui/notifiers/notifications).
## Can PWAs be installed?
PWAs are only supported as home shortcuts; WebAPKs will not work because they are generated server-side on googleapis.com (which is not allowed in Bromite).
## Does Bromite support the Android autofill framework?
Yes, since version 94.0.4606.109 the native Android autofill can be used; this does not require accessibility services as a workaround.
## Does Bromite support casting media content?
No, this would require Play Store binary blobs.
## Can you add this search engine as default?
No.
Bromite does not make any choice related to default search engines, the Chromium default is used.
Various Android browsers get some fee to ship their apps with a specific default search engine, Bromite does not get any fee from anyone.
Changing the default search engine would lead to an endless series of requests to change it based on personal preferences, thus no change is made to the default.
See also: https://github.com/bromite/bromite/wiki/SearchEngines
## Some sites show ads, how can I fix this?
You can compare the blocked URLs with a desktop browser and Bromite (using [remote debugging](https://developer.chrome.com/docs/devtools/remote-debugging/)) and figure out some new filter rules to be added.
If the ads are blocked via cosmetic filtering then blocking them is not possible with Bromite's engine and you might need something like an [user script](https://github.com/bromite/bromite/wiki/UserScripts) instead.
See also: https://github.com/bromite/bromite/wiki/AdBlocking
+210 -78
View File
@@ -1,95 +1,219 @@
<a href="https://github.com/uazo/cromite/releases/latest">
<img src="https://img.shields.io/github/v/release/uazo/cromite" alt="current Cromite release" title="current Cromite release" />
# Bromite - Take back your browser
<a href="https://github.com/bromite/bromite/releases/latest">
<img src="https://www.bromite.org/release.svg" alt="current Bromite release" title="current Bromite release" /> </a>
<a href="https://github.com/bromite/bromite/blob/master/LICENSE">
<img src="https://www.bromite.org/license.svg" alt="GNU GPL v3" title="GNU VPL v3" />
</a> <br>
<a href="https://www.bromite.org">
<img title="Bromite - take back your browser!" src="https://www.bromite.org/android-icon-192x192.png" width="96" alt="Bromite" />
</a>
<br>
[![Build Cromite](https://github.com/uazo/cromite/actions/workflows/build_cromite.yaml/badge.svg)](https://github.com/uazo/cromite/actions/workflows/build_cromite.yaml)
Bromite is a [Chromium](https://www.chromium.org/Home) fork with support for ad blocking and enhanced privacy.
# Cromite (a Bromite fork) - Take back your browser
Bromite is only available for Android Marshmallow (v6.0, API level 23) and above.
<a href="https://www.cromite.org">
<img title="Cromite - take back your browser!" src="https://www.cromite.org/app_icon.png" width="96" alt="Bromite" />
</a>
<br>
<img src="https://fdroid.bromite.org/fdroid/bromite_bromite_gh_downloads.svg" alt="Downloads on Github" title="Downloads on Github" />
Cromite is a [Chromium](https://www.chromium.org/Home) fork based on [Bromite](https://github.com/bromite/bromite) with built-in support for ad blocking and an eye for privacy.
For the Frequently Asked Questions see [F.A.Q.](./FAQ.md).
Cromite is available for Android arm64-v8a, arm32-v7a and x86_64, Nougat and above (Minimum v7.0, API level 24), Windows and Linux 64bit.
For documentation see the [wiki](https://github.com/bromite/bromite/wiki).
# Goals
Cromite's goal is to
- limit the features built into the browser that can be used as a platform for tracking users' habits, and, if it is not technically possible, disable them and leave it up to the user to choose whether to re-enable them
- limit the close integration between the browser and its manufacturer
- not let the excellent research work done by csagan5 with Bromite be lost
Bromite aims at providing a no-clutter browsing experience without privacy-invasive features and with the addition of a fast ad-blocking engine.
Minimal UI changes are applied to help curbing the idea of "browser as an advertisement platform".
In addition, Cromite would like to promote greater integration with other non-profit, open source browsers, encouraging closer collaboration with others, and attempt to integrate them directly into Chromium once they have reached an appropriate level of maturity.
# Donate
Please donate to support development of Bromite and the costs for the build system.
[&rarr; Support development with a donation](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=JP3XTQPVRNET2): [![paypal](https://www.bromite.org/assets/img/btn_donate_LG.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=JP3XTQPVRNET2)
<a href="bitcoin:bc1qlx7h0lj9z88g2xfeuwsrtfs77sxuhrxf2t28sw">BTC donations address</a>: `bc1qlx7h0lj9z88g2xfeuwsrtfs77sxuhrxf2t28sw`
ETH donations address: `0x5d392F8FBf3465afe05B1Adc575e248D33B891F6`
# Features
* customizable adblock filters via user-provided URL (see https://www.bromite.org/custom-filters)
* automatically updated adblock filters
* remove click-tracking and AMP from search results
* DNS-over-HTTPS support with any valid IETF DoH endpoint
* always-incognito mode
* disable all field trials permanently
* disable smart search by default, allow web search from incognito mode
* always-visible cookies, javascript and ads site settings from address bar popup
* remove Play integration binary blobs
* use [CFI](https://en.wikipedia.org/wiki/Control-flow_integrity) on all architectures except x86
* enable trivial auto var init
* disable media router and remoting by default
* disable dynamic module loading
* show warnings for TLSv1.0/TLSv1.1 pages
* enable site-per-process isolation for all devices with memory > 1GB
* completely remove safe browsing and other privacy-unfriendly features
* [proxy configuration page](https://github.com/bromite/bromite/wiki/ProxyConfiguration) with PAC and custom proxy lists support
* settings to disable custom intents and clear session on exit
* flags to toggle anti-fingerprinting mitigations for canvas, audio, client rects, webGL and sensor APIs (see full list below for all the new flags)
* use frozen User-Agent to conceal real model and browser version
* privacy enhancement patches from [Iridium](https://iridiumbrowser.de/), [Inox patchset](https://github.com/gcarq/inox-patchset), [Brave](https://brave.com/) and [ungoogled-chromium](https://github.com/Eloston/ungoogled-chromium) projects
* security enhancement patches from [GrapheneOS](https://github.com/GrapheneOS) project
* disable scroll-to-text-fragment
* reduced referer granularity
* block gateway attacks via websockets (partial fix, see [this upstream issue](https://bugs.chromium.org/p/chromium/issues/detail?id=590714))
* use 64-bit ABI for webview processes
* make all favicon requests on-demand ([supercookie](https://supercookie.me/) mitigation)
* enable all network isolation features (`PartitionConnectionsByNetworkIsolationKey`, `PartitionHttpServerPropertiesByNetworkIsolationKey`, `SplitHostCacheByNetworkIsolationKey`, `AppendFrameOriginToNetworkIsolationKey`, `SplitCacheByNetworkIsolationKey`, `UseRegistrableDomainInNetworkIsolationKey`, `PartitionSSLSessionsByNetworkIsolationKey`, `PartitionExpectCTStateByNetworkIsolationKey`, `PartitionDomainReliabilityByNetworkIsolationKey`)
* ignore enterprise policies that disallow secure DNS
* ask permission to play protected media
* disable the DIAL repeating discovery
* disable RTCGetCurrentBrowsingContextMedia by default
* disable FLoC and privacy sandbox by default
* disable feeds
* disable reporting of certificate errors
* use pre-defined phone model for client hints and Javascript
* allow forcing external links to open in incognito
* disable AGSA by default
* flag to enable Certificate Transparency
* allow adding search engines from incognito mode
* disable predictors
* disable supervised users
* disable safety check
* disable capability to block `view-source:` URLs
* disable `SegmentationPlatformFeature`, `OptimizationHints`, client hint headers
* disable `AsyncDNS` by default
* customize history expiration threshold
* disable idle detection
* HTTPS-only mode enabled by default
* disable TLS resumption by default
* partition DoH requests by top-frame NIK
* add option to use home page as NTP
## Features not related to privacy
* browser automatic updates, enabled by default
* native Android autofill support
* import/export bookmarks
* bookmark all tabs from tabs regroup menu
* allow playing videos in background tabs and disable pause on switching tabs
* all codecs included (proprietary, open H.264 etc.)
* [AV1 codec support](https://github.com/bromite/bromite/wiki/AV1-support)
* [dav1d](https://code.videolan.org/videolan/dav1d) decoder enabled by default
* built with official speed optimizations
* increase number of autocomplete matches from 5 to 10
* allow changing default download storage location
* do not ignore save prompt for users without SD cards
* disable articles and increase number of icons on new tab page
* adding an URL as bookmark will clear its blocked status for the NTP tiles
* history support in incognito mode
* view source of pages
* sticky desktop mode setting
* mobile/desktop user agent customization
* accessibility preference to force tablet UI
* use Alt+D to focus address bar
* allow sharing to Bromite
* UI for crash information collection
* allow OpenSearch search engine detection in incognito
* allow OpenSearch search engine detection with paths
* keyboard dictionary hints in address bar
* always allow `view-source:` URLs
* allow moving navigation bar to bottom
You can inspect all functionality/privacy changes by reading the [patches](https://github.com/bromite/bromite/tree/master/build/patches) and/or the [CHANGELOG](./CHANGELOG.md).
### Flags
Flags which have been retired from upstream Chromium but are still available in Bromite.
* `#pull-to-refresh`
* `#enable-search-ready-omnibox`
* `#darken-websites-checkbox-in-themes-setting`
* `#simplified-ntp`, enabled by default
* `#enable-text-fragment-anchor`, disabled by default
* `#num-raster-threads`
* `#enable-image-reader`, enabled by default
* `#enable-tab-groups` and `#enable-tab-groups-ui-improvements`
* `#offline-indicator-v2`
New flags:
* `#fingerprinting-canvas-image-data-noise`, `#fingerprinting-client-rects-noise` and `#fingerprinting-canvas-measuretext-noise`, enabled by default
* `#incognito-screenshot`, disabled by default
* `#max-connections-per-host`
* `#resume-background-video`
* `#ipv6-probing`
* `#enable-device-motion` and `#enable-device-orientation`
* `#show-legacy-tls-warnings`
* `#save-data-header`, disabled by default
* `#export-bookmarks-use-saf`, disabled by default
* `#allow-user-certificates`, disabled by default
* `#cleartext-permitted`, enabled by default, can be used to disable all cleartext-HTTP traffic
* `#omnibox-autocomplete-filtering`, can be used to restrict omnibox autocomplete results
* `#disable-external-intent-requests`, can be used to disable opening any external app for any URL
* `#enable-userscripts-log`, see https://github.com/bromite/bromite/wiki/UserScripts#flags
* `#certificate-transparency-enabled`, enabled by default; see https://chromium.googlesource.com/chromium/src/+/master/net/docs/certificate-transparency.md
* `#move-top-toolbar-to-bottom`, disabled by default
* `#site-engagement`, enabled by default, can be used to disable the automatically-generated icons for most visited sites on the NTP
### Site settings
* webGL, disabled by default
* images, enabled by default
* Javascript JIT, disabled by default
* timezone customization override
* autoplay, disabled by default
* webRTC, disabled by default
# Privacy limitations
Cromite's privacy features, including anti-fingerprinting mitigations (which are not comprehensive), **are not to be considered useful for journalists and people living in countries with freedom limitations**, please look at [Tor Browser](https://www.torproject.org/download/) in such cases.
Please note that this project is not free of bugs and that changing the behaviour of a browser can be risky and not without problems.
# Docs
- [Privacy Policy](https://github.com/uazo/cromite/blob/master/docs/PRIVACY_POLICY.md)
- [Features](https://github.com/uazo/cromite/blob/master/docs/FEATURES.md)
- [How to build](https://github.com/uazo/cromite/blob/master/docs/HOW_TO_BUILD.md)
- [Patch list](https://github.com/uazo/cromite/blob/master/docs/PATCHES.md)
Bromite's privacy features, including anti-fingerprinting mitigations (which are not comprehensive), **are not to be considered useful for journalists and people living in countries with freedom limitations**, please look at [Tor Browser](https://www.torproject.org/download/) in such cases.
# Releases
All built versions are available as [releases](https://github.com/uazo/cromite/releases).
All built versions are available as [releases](https://github.com/bromite/bromite/releases); the [official website](https://www.bromite.org/) points to those releases and - when browsing via Android - it will automatically highlight the one apt for your device (or none otherwise).
Cromite is currently built for ARM64, x86 (Android SDK version 23+) and Windows x64.
Each tag corresponds to a Chromium Stable release tag.
Bromite is currently built for ARM, ARM64 and x86 and for the Android SDK version 23+; [Bromite SystemWebView](https://www.bromite.org/system_web_view) is provided as well (SDK23+).
For every Bromite build you can always find a matching [vanilla Chromium](https://www.bromite.org/chromium) build which is used for example to verify which issues are specific to Bromite or not.
You will automatically receive notifications about new updates (and be able to install them) via the auto updater functionality (enabled by default), see [related wiki page](https://github.com/bromite/bromite/wiki/AutomaticUpdates).
### F-droid
All official releases are also available through the [official third-party F-Droid repository](https://www.bromite.org/fdroid).
Official F-droid repo url:
https://www.cromite.org/fdroid/repo/?fingerprint=49F37E74DEE483DCA2B991334FB5A0200787430D0B5F9A783DD5F13695E9517B
### Auto-update setup for windows
1. Download https://github.com/henrypp/chrlauncher/releases
2. Create a `chrlauncher.ini`
## Integrity and authenticity
You can verify the integrity of a downloaded APK file from this project with any `sha256sum`-compatible tool by downloading the corresponding `brm_X.Y.Z.sha256.txt` or `chr_X.Y.Z.sha256.txt` file, where X.Y.Z is the release version number. Example:
```
[chrlauncher]
# Custom Chromium update URL (string):
ChromiumUpdateUrl=https://github.com/uazo/cromite/releases/latest/download/updateurl.txt
# Command line for Chromium (string):
# note --user-data-dir= works better if path is absolute
# See here: http://peter.sh/experiments/chromium-command-line-switches/
ChromiumCommandLine=--user-data-dir="C:\Users\<my user>\AppData\Local\Chromium\User Data" --no-default-browser-check
# to enable full logging in c:\temp\log.txt (daily rotate, no automatic deletion)
# ChromiumCommandLine=--enable-logging --v=0 --log-file=C:\temp\log.txt --user-data-dir=".\User Data" --no-default-browser-check
# Chromium executable file name (string):
ChromiumBinary=chrome.exe
# Chromium binaries directory (string):
# Relative (to chrlauncher directory) or full path (env. variables supported).
ChromiumDirectory=.\bin
$ sha256sum --check brm_68.0.3440.54.sha256.txt
arm64_SystemWebView.apk: OK
arm64_ChromePublic.apk: OK
arm64_ChromeModernPublic.apk: OK
```
To prevent deletion by Microsoft Defender each time the browser is updated, check the `user-data-dir` folder by modifying it accordingly.
### Enable network process sandbox in windows
I don't include any setups because I don't like the experience of not knowing what they do, so you must manually run this command on first installation:
You can verify authenticity, e.g. that the author ([csagan5](https://github.com/csagan5)) released the file, by using gpg2:
```
cd <where_is_the_exe>
icacls . /grant "*S-1-15-2-2:(OI)(CI)(RX)"
$ gpg2 --quiet --verify brm_68.0.3440.54.sha256.txt.asc
gpg: assuming signed data in 'brm_68.0.3440.54.sha256.txt'
gpg: Signature made Sun 08 Jul 2018 04:22:52 PM CEST using RSA key ID D85DC0C5
gpg: Good signature from "csagan5 <32685696+csagan5@users.noreply.github.com>"
```
see https://github.com/uazo/bromite-buildtools/issues/51
### Enable AppContainer for renderer process in windows
you can activate the 'RendererAppContainer' flag from the command line with
```
--enable-features=RendererAppContainer
```
You can download csagan5's public GnuPG key from here: [csagan5.asc](./csagan5.asc).
# How to build
The [Bromite main repository](https://github.com/bromite/bromite) contains tags for each corresponding Chromium release (see https://chromium.googlesource.com/chromium/src.git).
Please refer to [official Chromium build documentation](https://www.chromium.org/developers/how-tos/get-the-code) to get started on how to build Chromium; if you can build Chromium for Android, you can build Bromite.
The Chromium version tag used as base for the patches is available here: [RELEASE](./build/RELEASE); this is always corresponding to the git tag for every release.
The GN args used to build Bromite are available here: [bromite.gn_args](./build/bromite.gn_args).
The patches are to be applied second the order specified in the `bromite_patches_list.txt` file (you can use `git am`).
## How to build the filters
See upstream documentation: https://github.com/chromium/chromium/blob/master/components/subresource_filter/FILTER_LIST_GENERATION.md
Bromite uses an unindexed filter file, which is periodically published at https://github.com/bromite/filters
# Contributing
@@ -97,24 +221,32 @@ Please submit issues following the issue template; beware that GitHub does not d
Patches are welcome and accepted if they match the project goals.
If you want to help me, [here](https://github.com/uazo/cromite/blob/master/docs/HELP_ME_PLEASE.md) is the list of things I would need.
For any usage or development discussion please use GitHub Discussions: https://github.com/uazo/cromite/discussions
For any usage or development discussion please use GitHub Discussions: https://github.com/bromite/bromite/discussions
# Credits
* [Chromium project](https://www.chromium.org/Home) and developers
* [Bromite](https://github.com/bromite/bromite)
* [Iridium project](https://github.com/iridium-browser) for some patches
* [ungoogled-chromium](https://github.com/Eloston/ungoogled-chromium) for some patches
* [ungoogled-chromium-android](https://github.com/ungoogled-software/ungoogled-chromium-android) for some patches
* [GrapheneOS](https://github.com/GrapheneOS) for some security patches
* [Inox patchset](https://github.com/gcarq/inox-patchset) for some patches (via ungoogled-chromium)
* [Brave Browser](https://github.com/brave/brave-core) for some patches
* [Iridium project](https://github.com/iridium-browser) for some patches
* [ungoogled-chromium](https://github.com/Eloston/ungoogled-chromium) for some patches
* [ungoogled-chromium-android](https://github.com/ungoogled-software/ungoogled-chromium-android) for some patches
* [GrapheneOS](https://github.com/GrapheneOS) for some security patches
* [Inox patchset](https://github.com/gcarq/inox-patchset) for some patches (via ungoogled-chromium)
* [Brave Browser](https://github.com/brave/brave-core) for some patches
* [Vadim Pleshkov](http://vadimpleshkov.me/) for Bromite's logo
# Filters credits
* [EasyList](https://easylist.to/#easylist)
* [EasyPrivacy](https://easylist.to/#easyprivacy)
* [uBlock Origin](https://github.com/uBlockOrigin)
* [Peter Lowe's Ad and tracking server list](https://pgl.yoyo.org/adservers/)
The URLs of the lists used are available at: https://github.com/bromite/filters/blob/master/lists.txt
# License
Cromite is published under [GNU GPL v3](./LICENSE).
The patches published as part of the Bromite project are released under GNU GPL v3 only.
Cromite specific patches are under the GNU GPL-2+ licence.
Each individual patch contains specific information on the licence used.
The patches published as part of the Bromite project are released under [GNU GPL v3](./LICENSE).
[version-image]: https://img.shields.io/github/release/bromite/bromite.svg?style=flat-square
[version-url]: https://github.com/bromite/bromite/releases/latest
[license-image]: https://img.shields.io/github/license/bromite/bromite.svg
[license-url]: https://github.com/bromite/bromite/blob/master/LICENSE
+1
View File
@@ -0,0 +1 @@
9b6ca38fffca784606bcdd5c501e8fd34f64eb18-
+1 -1
View File
@@ -1 +1 @@
123.0.6312.106
104.0.5112.91
+1
View File
@@ -0,0 +1 @@
c18e6cda9371d1964e751b249a2d70453c88727d
+48
View File
@@ -0,0 +1,48 @@
android_channel="stable"
blink_symbol_level=1
build_contextual_search=false
build_with_tflite_lib=false
chrome_pgo_phase=0
dcheck_always_on=false
debuggable_apks=false
dfmify_dev_ui=false
disable_android_lint=true
disable_autofill_assistant_dfm=true
disable_fieldtrial_testing_config=true
disable_tab_ui_dfm=true
enable_av1_decoder=true
enable_dav1d_decoder=true
enable_gvr_services=false
enable_hangout_services_extension=false
enable_iterator_debugging=false
enable_mdns=false
enable_mse_mpeg2ts_stream_parser=true
enable_nacl=false
enable_platform_dolby_vision=true
enable_platform_hevc=true
enable_remoting=false
enable_reporting=false
enable_supervised_users=false
enable_vr=false
exclude_unwind_tables=false
ffmpeg_branding="Chrome"
icu_use_data_file=true
is_cfi=true
is_component_build=false
is_debug=false
is_official_build=true
proprietary_codecs=true
rtc_build_examples=false
safe_browsing_mode=0
symbol_level=1
system_webview_package_name="org.bromite.webview"
target_os="android"
treat_warnings_as_errors=true
use_cfi_cast=true
use_debug_fission=true
use_errorprone_java_compiler=false
use_gnome_keyring=false
use_official_google_api_keys=false
use_rtti=false
use_sysroot=false
webview_includes_weblayer=false
@@ -1,18 +1,9 @@
bromite-build-utils.patch
Remove-EV-certificates.patch
do-not-hide-.orig-files.patch
Do-not-link-with-libatomic.patch
do-not-add-suffix-to-package-name.patch
exit-on-failure-of-inclusion.patch
Move-some-account-settings-back-to-privacy-settings.patch
kill-Vision.patch
kill-Location-fall-back-to-system.patch
kill-Auth.patch
Remove-binary-blob-integrations.patch
Remove-SMS-integration.patch
Remove-voice-recognition-integration.patch
Do-not-compile-QR-code-sharing.patch
Add-support-for-ISupportHelpAndFeedback.patch
AV1-codec-support.patch
Switch-to-fstack-protector-strong.patch
Enable-fwrapv-in-Clang-for-non-UBSan-builds.patch
Bromite-package-name.patch
@@ -23,6 +14,7 @@ Battery-API-return-nothing.patch
updater-disable-updater-pings.patch
Disable-omission-of-URL-elements-in-Omnibox.patch
Modify-default-preferences.patch
Do-not-hide-component-extensions.patch
Do-not-store-passwords-by-default.patch
Disable-NTP-remote-suggestions-by-default.patch
Disable-references-to-fonts.googleapis.com.patch
@@ -36,9 +28,12 @@ ungoogled-chromium-Disable-intranet-detector.patch
ungoogled-chromium-no-special-hosts-domains.patch
ungoogled-chromium-Disable-Gaia.patch
ungoogled-chromium-Disable-Network-Time-Tracker.patch
Disable-safe-browsing.patch
Disable-all-promo-dialogs.patch
Remove-signin-and-sync-integrations.patch
Disable-update-scheduler.patch
Add-search-engine.patch
Add-English-only-search-engine.patch
Add-DuckDuckGo-Lite-search-engine.patch
openH264-enable-ARM-ARM64-optimizations.patch
build-remove-calling-untrusted-hooks.patch
Inject-scripts-for-AMP-tracking-ads-and-video.patch
@@ -46,6 +41,7 @@ Allow-playing-audio-in-background.patch
Add-flag-to-control-video-playback-resume-feature.patch
Add-exit-menu-item.patch
Remove-help-menu-item.patch
AudioBuffer-AnalyserNode-fp-mitigations.patch
Multiple-fingerprinting-mitigations.patch
Add-flag-to-configure-maximum-connections-per-host.patch
Do-not-ignore-download-location-prompt-setting.patch
@@ -56,6 +52,8 @@ Add-an-always-incognito-mode.patch
Keep-flag-to-allow-screenshots-in-Incognito-mode.patch
Add-option-to-not-persist-tabs-across-sessions.patch
Add-a-proxy-configuration-page.patch
Move-some-account-settings-back-to-privacy-settings.patch
Remove-contextual-search-manager.patch
Add-custom-tab-intents-privacy-option.patch
Disable-FLoC-and-privacy-sandbox.patch
History-number-of-days-privacy-setting.patch
@@ -68,10 +66,20 @@ profile-resetter-disable-send-settings.patch
Do-not-build-API-keys-infobar.patch
autofill-miscellaneous.patch
Enable-native-Android-autofill.patch
first_run-deactivate-autoupdate-globally.patch
translate-disable-fetching-of-languages-from-server.patch
kill-Vision.patch
kill-Location-fall-back-to-system.patch
kill-Auth.patch
Remove-binary-blob-integrations.patch
Remove-SMS-integration.patch
Remove-price-shopping-commerce-integrations.patch
Remove-voice-recognition-integration.patch
Do-not-compile-QR-code-sharing.patch
Offer-builtin-autocomplete-for-chrome-flags.patch
Use-4-tile-rows-never-show-logo.patch
Disable-various-metrics.patch
Enable-SPPI-for-devices-with-enough-memory.patch
Enable-StrictOriginIsolation-and-SitePerProcess.patch
Use-64-bit-WebView-processes.patch
prefs-always-prompt-for-download-directory.patch
@@ -79,8 +87,7 @@ Disable-offline-pages-in-CCT.patch
Disable-media-router-and-remoting-by-default.patch
Restore-Search-Ready-Omnibox-flag.patch
disable-AdsBlockedInfoBar.patch
Bromite-subresource-adblocker.patch
Bromite-auto-updater.patch
Bromite-AdBlockUpdaterService.patch
Replace-DoH-probe-domain-with-RIPE-domain.patch
Increase-number-of-autocomplete-matches-to-10.patch
Disable-requests-for-single-word-Omnibar-searches.patch
@@ -90,9 +97,10 @@ Reduce-HTTP-headers-in-DoH-requests-to-bare-minimum.patch
Revert-flags-remove-disable-pull-to-refresh-effect.patch
Use-dummy-DFM-installer.patch
Disable-feeds-support-by-default.patch
Show-site-settings-for-cookies-javascript-and-ads.patch
Disable-DRM-media-origin-IDs-preprovisioning.patch
Disable-smart-selection-by-default.patch
Guard-for-user-agent-reduction.patch
Enable-user-agent-freeze-by-default.patch
AImageReader-CFI-crash-mitigations.patch
Add-menu-item-to-view-source.patch
Revert-removal-of-execution-context-address-space.patch
@@ -104,8 +112,11 @@ Remove-blocklisted-URLs-upon-bookmark-creation.patch
Disable-the-DIAL-repeating-discovery.patch
Block-qjz9zk-or-trk-requests.patch
Hardening-against-incognito-mode-detection.patch
Remove-weblayer-dependency-on-Play-Services.patch
Timezone-customization.patch
Restore-Simplified-NTP-launch.patch
Add-option-to-use-home-page-as-NTP.patch
Revert-the-removal-of-an-option-to-block-autoplay.patch
Disable-text-fragments-by-default.patch
disable-WebView-variations-support.patch
Enable-network-isolation-features.patch
@@ -113,22 +124,32 @@ Revert-flags-remove-num-raster-threads.patch
webview-Hard-no-to-persistent-histograms.patch
Ignore-enterprise-policies-for-secure-DNS.patch
Add-menu-item-to-bookmark-all-tabs.patch
Re-introduce-modal-dialog-flag-to-close-all-tabs.patch
Ask-user-before-closing-all-tabs.patch
Add-option-to-force-tablet-UI.patch
Make-all-favicon-requests-on-demand.patch
Add-Alt-D-hotkey-to-focus-address-bar.patch
Remove-offline-measurement-background-task.patch
User-agent-customization.patch
Add-AllowUserCertificates-flag.patch
Add-IsCleartextPermitted-flag.patch
Unexpire-tab-groups-flags.patch
Add-flag-for-omnibox-autocomplete-filtering.patch
Revert-Delete-block-external-form-redirects.patch
Enable-IntentBlockExternalFormRedirectsNoGesture.patch
Add-flag-to-disable-external-intent-requests.patch
Enable-share-intent.patch
Logcat-crash-reports-UI.patch
Add-support-for-ISupportHelpAndFeedback.patch
JIT-site-settings.patch
API-level-21-prevent-crash-on-download.patch
Add-flag-to-disable-vibration.patch
mime_util-force-text-x-suse-ymp-to-be-downloaded.patch
Client-hints-overrides.patch
Disable-AGSA-by-default.patch
Allow-building-without-enable_reporting.patch
Disable-lock-icon-in-address-bar-by-default.patch
Enable-share-intent.patch
Site-setting-for-images.patch
Bromite-auto-updater.patch
Experimental-user-scripts-support.patch
Keep-empty-tabs-between-sessions.patch
Disable-third-party-origin-trials.patch
@@ -136,7 +157,7 @@ Never-use-HTTP-probes-for-connection-detection.patch
Disable-Accessibility-service-by-default.patch
Disable-conversion-measurement-api.patch
Restore-offline-indicator-v2-flag.patch
Re-introduce-override_build_timestamp.patch
Reintroduce-override_build_timestamp.patch
enable-ftrivial-auto-var-init-zero.patch
disable-appending-variations-header.patch
Disable-idle-detection.patch
@@ -146,18 +167,23 @@ Revert-Permit-blocking-of-view-source.patch
Disable-safety-check.patch
Disable-all-predictors-code.patch
OpenSearch-miscellaneous.patch
Update-i18n-zh_CN-support.patch
Add-flag-for-save-data-header.patch
Disable-UA-full-version.patch
Dictionary-suggestions-for-the-Omnibox.patch
Disable-AsyncDNS-by-default.patch
Restore-LastTabStandingTracker.patch
Add-lifetime-options-for-permissions.patch
Disable-crash-reporting.patch
Samsung-Note-9-SDK27-crazylinker-workaround.patch
Disable-TLS-resumption.patch
Partition-DNS-requests-by-top-frame-NIK.patch
Remove-mremap-from-seccomp-baseline-policy.patch
Move-navigation-bar-to-bottom.patch
Welcome-screen.patch
Content-settings-infrastructure.patch
Add-webGL-site-setting.patch
Add-site-engagement-flag.patch
Add-webRTC-site-settings.patch
Enable-Certificate-Transparency.patch
Invalidate-components-public-key.patch
Improve-plain-text-rendering-on-mobile.patch
@@ -166,134 +192,9 @@ Follow-only-system-dark-mode.patch
Remove-window-name-on-cross-origin-navigation.patch
Remove-preload-of-com.google.android.gms.fonts.patch
Partition-Blink-memory-cache.patch
Add-gn-flag-for-clangd-builds.patch
Remove-navigator.connection-info.patch
Disable-PrivacyGuide.patch
Re-introduce-modal-dialog-flag-to-close-all-tabs.patch
sharing-hub-always-use-visible-URL.patch
Enable-HEVC-by-default.patch
Partition-blobs-by-top-frame-URL.patch
Override-Navigator-Language.patch
Disable-add-to-home-screen-prompt.patch
Remove-HTTP-referrals-in-cross-origin-navigation.patch
Disable-StartSurface-feature.patch
Enable-PermuteTLSExtensions-by-default.patch
Enable-third-party-storage-partitioning.patch
Restore-adaptive-button-in-top-toolbar-customization.patch
Add-kill-switch-for-unsupported-clangd-flags.patch
WIN-enable-pdf-plugin.patch
WIN-disable-annotate-downloads.patch
WIN-enable-HighEfficiencyMode-by-default.patch
WIN-enable-file-system-access-blocklist.patch
WIN-Disable-TabHoverCard-images.patch
WIN-Fix-log-to-file.patch
WIN-Disable-updater.patch
WIN-Disable-first-run.patch
WIN-Add-some-prefs-to-secure-preferences.patch
WIN-Disable-search-for-image.patch
AudioBuffer-AnalyserNode-fp-mitigations.patch
Disable-Component-Updates.patch
add-browser-policy.patch
Always-open-browser-controls-in-new-tab.patch
Partitioning-all-cookies-by-top-frame-domain.patch
Disable-FedCm.patch
Disable-BackForwardCache.patch
Evict-the-entire-FrameTree-like-desktop.patch
Disable-visited-pseudo-class.patch
Add-setting-to-clear-data-on-exit.patch
WIN-Disable-sharing-hub.patch
Improve-the-browser-sandbox.patch
Disable-csp-reports.patch
Fonts-fingerprinting-mitigation.patch
Keyboard-protection-flag.patch
Disable-privacy-issues-in-password-manager.patch
Partition-HSTS-cache-by-NAK.patch
Warning-message-for-unsupported-hardware-aes.patch
Enable-Document-Open-Inheritance-Removal.patch
Add-setting-to-invert-tap-and-long-tap.patch
Remove-ChromiumNetworkAdapter.patch
Internal-firewall.patch
Disable-devtools-remote-and-custom-protocols.patch
Remove-detection-of-captive-portals.patch
Remove-auth-header-upon-cross-origin-redirect.patch
Clear-CORS-Preflight-Cache-on-clearing-data.patch
Multi-Screen-Window-Placement-API-fix.patch
Add-a-flag-to-disable-GamePad-API.patch
Disable-WebGPU.patch
Disable-FirstPartySets-and-StorageAccessAPI.patch
Disable-GetInstalledRelatedApps-API.patch
Disable-GSA-by-default.patch
Disable-PrivateStateTokens-API.patch
Disallowing-MIDI-permission-by-default.patch
Disable-Compression-Dictionary-Transport.patch
Disallow-Android-App-Scheme-as-referrer.patch
Deprecate-Data-URL-in-SVGUseElement.patch
Content-settings-infrastructure.patch
Add-autoplay-site-setting.patch
Site-setting-for-images.patch
JIT-site-settings.patch
Add-webGL-site-setting.patch
Add-webRTC-site-settings.patch
Show-site-settings-for-cookies-javascript-and-ads.patch
Viewport-Protection-flag.patch
Timezone-customization.patch
Change-popup-site-setting.patch
Disable-speechSynthesis-getVoices-API.patch
Remove-support-for-device-memory-and-cpu-recovery.patch
Log-dangling-attributes-in-some-html-elements.patch
Keep-Side-Panel-Companion-disabled.patch
Lock-Profile-Cookie-Database.patch
Show-warnings-on-downloads-over-HTTP.patch
Compress-libchrome-to-free-up-some-space.patch
Cromite-Branding.patch
Disable-Feeback-Collector.patch
Disable-remote-altsvc-for-h3-connections.patch
do-not-block-build-incompatible-profiles.patch
Allow-DocumentPiP-if-PopupsAndRedirects-are-active.patch
allow-the-download-of-clang-for-windows-crossbuild.patch
Add-option-to-disable-snapshots.patch
Enable-Android-Dynamic-Performance-Framework.patch
Remove-GoogleAccountsPrivateApiHost.patch
Fix-crash-on-customize-profile-ui.patch
Enable-ImprovedBookmarks-by-default.patch
Partition-MediaDeviceId-by-default.patch
Keep-disabled-FetchLaterAPI.patch
Disable-ranker-url-fetcher.patch
Show-full-urls-for-bookmark.patch
Disable-prefers-reduced-transparency-media-query.patch
libjxl-0-8-2.patch
Add-support-to-jxl.patch
Block-Intents-While-Locked.patch
Keep-Manta-Service-Disabled.patch
Disable-Service-and-Shared-workers-on-3P-iframe.patch
Disable-Real-Box.patch
Always-allow-inspect-fallback.patch
Add-cromite-flags-support.patch
Add-PartialLowEndModeOnMidRangeDevices-flag.patch
Use-list-mode-for-tab-switcher.patch
Chrome-web-store-protection.patch
Enable-search-engine-settings-desktop-ui.patch
Disable-Android-AppRestrictions.patch
Customize-selection-popup.patch
Enables-deactivation-of-the-js-debugger-statement.patch
Enable-gwp-asan-on-Android.patch
Disable-Read-Aloud-by-default.patch
Disable-Compose-feature.patch
Disable-offline-autofetch-flag.patch
Enable-percent-based-scrolling-on-Windows.patch
Show-NTP-at-startup.patch
Enable-platform-aac-audio-and-h264-video.patch
Disable-Paint-Preview-by-default.patch
Temp-PerformanceNavigationTiming-privacy-fix.patch
Temp-disable-predictive-back-gesture.patch
TEMP-Add-a-log-to-track-strange-behavior.patch
Temp-guard-FileSystemAccessPersistentPermissions.patch
Fix-chromium-build-bugs.patch
eyeo-beta-118.0.5993.48-base.patch
eyeo-beta-118.0.5993.48-chrome_integration.patch
eyeo-beta-118.0.5993.48-android_api.patch
eyeo-beta-118.0.5993.48-android_settings.patch
eyeo-beta-118.0.5993.48-extension_api.patch
Eyeo-Adblock-Remove-Privacy-Issues.patch
Automated-domain-substitution.patch
+48
View File
@@ -0,0 +1,48 @@
android_channel="stable"
blink_symbol_level=1
build_contextual_search=false
build_with_tflite_lib=false
chrome_pgo_phase=0
dcheck_always_on=false
debuggable_apks=false
dfmify_dev_ui=false
disable_android_lint=true
disable_autofill_assistant_dfm=true
disable_fieldtrial_testing_config=true
disable_tab_ui_dfm=true
enable_av1_decoder=true
enable_dav1d_decoder=true
enable_gvr_services=false
enable_hangout_services_extension=false
enable_iterator_debugging=false
enable_mdns=false
enable_mse_mpeg2ts_stream_parser=true
enable_nacl=false
enable_platform_dolby_vision=true
enable_platform_hevc=true
enable_remoting=false
enable_reporting=true
enable_supervised_users=false
enable_vr=false
exclude_unwind_tables=false
ffmpeg_branding="Chrome"
icu_use_data_file=true
is_cfi=true
is_component_build=false
is_debug=false
is_official_build=true
proprietary_codecs=true
rtc_build_examples=false
safe_browsing_mode=2
symbol_level=1
system_webview_package_name="com.android.webview"
target_os="android"
treat_warnings_as_errors=true
use_cfi_cast=true
use_debug_fission=true
use_errorprone_java_compiler=false
use_gnome_keyring=false
use_official_google_api_keys=false
use_rtti=false
use_sysroot=false
webview_includes_weblayer=false
+11
View File
@@ -0,0 +1,11 @@
AV1-codec-support.patch
exit-on-failure-of-inclusion.patch
Reintroduce-override_build_timestamp.patch
do-not-hide-.orig-files.patch
Do-not-link-with-libatomic.patch
do-not-add-suffix-to-package-name.patch
Switch-to-fstack-protector-strong.patch
Enable-fwrapv-in-Clang-for-non-UBSan-builds.patch
enable-ftrivial-auto-var-init-zero.patch
Disable-feeds-support-by-default.patch
Chromium-package-name.patch
-170
View File
@@ -1,170 +0,0 @@
android_channel="stable"
blink_symbol_level=1
build_contextual_search=false
build_with_tflite_lib=false
chrome_pgo_phase=0
dcheck_always_on=false
debuggable_apks=false
dfmify_dev_ui=false
disable_android_lint=true
disable_fieldtrial_testing_config=true
enable_gvr_services=false
enable_hangout_services_extension=false
enable_iterator_debugging=false
enable_mdns=false
enable_nacl=false
enable_remoting=false
enable_reporting=false
enable_vr=false
exclude_unwind_tables=false
icu_use_data_file=true
is_component_build=false
is_debug=false
is_official_build=true
rtc_build_examples=false
symbol_level=1
treat_warnings_as_errors=true
use_debug_fission=true
use_errorprone_java_compiler=false
use_official_google_api_keys=false
use_rtti=false
use_sysroot=false
webview_includes_weblayer=false
enable_arcore=false
enable_openxr=false
enable_gvr_services=false
enable_feed_v2=false
enable_cardboard=false
is_high_end_android=true
# media section
proprietary_codecs=true
ffmpeg_branding="Chrome"
enable_av1_decoder=true
enable_dav1d_decoder=true
# disable cisco OpenH264
media_use_openh264 = false
# decoder flags
if (target_os == "android" || target_os == "win") {
# codec supported by default
# android: https://developer.android.com/media/platform/supported-formats
# windows: https://learn.microsoft.com/en-us/windows/win32/medfound/codecobjects
# enable aac and h264 hw decoder only
enable_platform_aac_audio = true
enable_platform_h264_video = true
# enable hw decoder for h265 (hevc)
enable_platform_hevc = true
# disable dolby vision
enable_platform_dolby_vision = false
enable_platform_encrypted_dolby_vision = false
if (target_os == "win") {
# enable ac3/eac codec
enable_platform_ac3_eac3_audio = true
}
}
# disable passthrough audio codecs
enable_platform_dts_audio = false
enable_passthrough_audio_codecs = false
# Do not compile libmonochrome.so with RELR relocations
# since supported only on API 28+
use_relr_relocations=false
# disabled the use of the context snapshot
# see https://github.com/uazo/cromite/pull/317 for context
use_v8_context_snapshot = false
# enable libjxl support by default
enable_jxl_decoder = true
# disable minikin engine
# see https://github.com/uazo/cromite/issues/697
use_minikin_hyphenation = false
# disable automatic update of sync-related cookies
# initial commit: https://source.chromium.org/chromium/chromium/src/+/fd9a841f7a63b9f5510f6b713d9c833d259c63ad
enable_bound_session_credentials = false
declare_args() {
_is_debug_build = ""
build_webview = false
}
not_needed(["_target_build", "_is_debug_build"])
if (getenv("TARGET_CPU") != "") {
target_cpu = getenv("TARGET_CPU")
}
if (target_os == "android") {
target_os = "android" # fix traffic annotation auditor
#enable_kythe_annotations = true
chrome_public_manifest_package = "org.cromite.cromite"
system_webview_package_name="org.cromite.webview" #"com.android.webview"
system_webview_shell_package_name="org.cromite.webview_shell"
if (getenv("USE_KEYSTORE") != "") {
android_keystore_path = "/home/lg/working_dir/cromite.keystore"
android_keystore_name = "cromite"
android_keystore_password = getenv("KEYSTORE_PASSWORD")
}
cromite_pref_hash_seed_bin = getenv("CROMITE_PREF_HASH_SEED_BIN")
_is_debug_build = getenv("TARGET_ISDEBUG")
if(_is_debug_build == "true") {
# print("Debug build on")
is_debug = true
is_official_build = false
dcheck_always_on = true
symbol_level = 1
strip_debug_info = false
generate_linker_map = false
} else {
generate_linker_map = true
}
if (build_webview) {
# only 64bit
skip_secondary_abi_for_cq = true
}
}
if (target_os == "win") {
target_os = "win" # fix traffic annotation auditor
target_cpu = "x64"
symbol_level = 0
use_large_pdbs = true
enable_pdf = true
pdf_is_complete_lib = true
enable_plugins = true
enable_ppapi = false
chrome_pgo_phase = 2 # enable pgo
is_cfi = false # disable it
use_cfi_cast = false # disable it
}
if (target_os == "linux") {
target_os = "linux" # fix traffic annotation auditor
target_cpu = "x64"
symbol_level = 0
enable_pdf = true
pdf_is_complete_lib = true
enable_plugins = true
enable_ppapi = false
use_sysroot = true
chrome_pgo_phase = 2 # enable pgo
}
-1
View File
@@ -1 +0,0 @@
zz-patch-list.txt
@@ -20,109 +20,88 @@ See discussions at:
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
base/android/android_image_reader_compat.cc | 16 ++++++++++++++++
base/android/android_image_reader_compat.h | 14 ++++++++++++++
chrome/browser/flag-metadata.json | 6 +++---
.../AImageReader-CFI-crash-mitigations.inc | 4 ++++
.../AImageReader-CFI-crash-mitigations.inc | 1 +
gpu/config/gpu_driver_bug_list.json | 16 ++++++++++++++++
gpu/config/gpu_finch_features.cc | 5 +++++
gpu/config/gpu_finch_features.h | 1 +
gpu/config/gpu_util.cc | 8 ++++++++
gpu/config/gpu_workaround_list.txt | 1 +
gpu/ipc/service/gpu_init.cc | 8 ++++++++
gpu/ipc/service/stream_texture_android.cc | 11 ++++++++++-
12 files changed, 87 insertions(+), 4 deletions(-)
create mode 100644 cromite_flags/media/base/media_switches_cc/AImageReader-CFI-crash-mitigations.inc
create mode 100644 cromite_flags/media/base/media_switches_h/AImageReader-CFI-crash-mitigations.inc
base/android/android_image_reader_compat.cc | 8 +++++++-
base/android/android_image_reader_compat.h | 4 ++++
chrome/browser/flag-metadata.json | 6 +++---
gpu/config/gpu_driver_bug_list.json | 16 ++++++++++++++++
gpu/config/gpu_finch_features.cc | 5 +++++
gpu/config/gpu_finch_features.h | 1 +
gpu/config/gpu_util.cc | 8 ++++++++
gpu/config/gpu_workaround_list.txt | 1 +
gpu/ipc/service/gpu_init.cc | 5 +++++
gpu/ipc/service/stream_texture_android.cc | 11 ++++++++++-
media/base/media_switches.cc | 4 ++++
media/base/media_switches.h | 1 +
12 files changed, 65 insertions(+), 5 deletions(-)
diff --git a/base/android/android_image_reader_compat.cc b/base/android/android_image_reader_compat.cc
--- a/base/android/android_image_reader_compat.cc
+++ b/base/android/android_image_reader_compat.cc
@@ -7,7 +7,23 @@
@@ -23,6 +23,8 @@
namespace base {
namespace android {
+AndroidImageReader& AndroidImageReader::GetInstance() {
+ // C++11 static local variable initialization is
+ // thread-safe.
+ static AndroidImageReader instance;
+ return instance;
+}
+bool AndroidImageReader::disable_support_ = false;
+
AndroidImageReader& AndroidImageReader::GetInstance() {
// C++11 static local variable initialization is
// thread-safe.
@@ -30,8 +32,12 @@ AndroidImageReader& AndroidImageReader::GetInstance() {
return instance;
}
+void AndroidImageReader::DisableSupport() {
+ disable_support_ = true;
+}
+
+bool AndroidImageReader::IsSupported() {
+ return !disable_support_;
+}
+
bool EnableAndroidImageReader() {
+ if (!AndroidImageReader::GetInstance().IsSupported()) return false;
// Currently we want to enable AImageReader only for android P+ devices.
if (__builtin_available(android 28, *)) {
return true;
bool AndroidImageReader::IsSupported() {
- return is_supported_;
+ return !disable_support_ && is_supported_;
}
AndroidImageReader::AndroidImageReader() : is_supported_(LoadFunctions()) {}
diff --git a/base/android/android_image_reader_compat.h b/base/android/android_image_reader_compat.h
--- a/base/android/android_image_reader_compat.h
+++ b/base/android/android_image_reader_compat.h
@@ -10,6 +10,20 @@
namespace base {
namespace android {
@@ -24,6 +24,9 @@ class BASE_EXPORT AndroidImageReader {
AndroidImageReader(const AndroidImageReader&) = delete;
AndroidImageReader& operator=(const AndroidImageReader&) = delete;
+class BASE_EXPORT AndroidImageReader {
+ public:
+ // Thread safe GetInstance.
+ static AndroidImageReader& GetInstance();
+
+ bool IsSupported();
+
+ // Disable image reader support.
+ void DisableSupport();
+ static void DisableSupport();
+
+ private:
+ bool disable_support_ = false;
+};
+
// Check if the image reader usage is supported.
BASE_EXPORT bool EnableAndroidImageReader();
// Check if the image reader usage is supported. This function returns TRUE
// if android version is >=OREO, image reader support is not disabled and all
// the required functions are loaded.
@@ -61,6 +64,7 @@ class BASE_EXPORT AndroidImageReader {
jobject ANativeWindow_toSurface(JNIEnv* env, ANativeWindow* window);
private:
+ static bool disable_support_;
friend class base::NoDestructor<AndroidImageReader>;
AndroidImageReader();
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -3046,9 +3046,9 @@
"expiry_milestone": 125
@@ -2278,9 +2278,9 @@
"expiry_milestone": 106
},
{
- "name": "enable-image-reader",
- "owners": [ "vikassoni@chromium.org", "liberato@chromium.org" ],
- "expiry_milestone": 125
- "owners": [ "vikassoni", "liberato" ],
- "expiry_milestone": 115
+ "name": "enable-image-reader", // Bromite: do not expire
+ "owners": [ "vikassoni@chromium.org", "liberato@chromium.org" ], // flag
+ "owners": [ "vikassoni", "liberato" ], // flag
+ "expiry_milestone": -1
},
{
"name": "enable-immersive-fullscreen-toolbar",
diff --git a/cromite_flags/media/base/media_switches_cc/AImageReader-CFI-crash-mitigations.inc b/cromite_flags/media/base/media_switches_cc/AImageReader-CFI-crash-mitigations.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/media/base/media_switches_cc/AImageReader-CFI-crash-mitigations.inc
@@ -0,0 +1,4 @@
+// Enables the Android Image Reader path for Video decoding(for AVDA and MCVD)
+CROMITE_FEATURE(kAImageReaderVideoOutput,
+ "AImageReaderVideoOutput",
+ base::FEATURE_ENABLED_BY_DEFAULT);
diff --git a/cromite_flags/media/base/media_switches_h/AImageReader-CFI-crash-mitigations.inc b/cromite_flags/media/base/media_switches_h/AImageReader-CFI-crash-mitigations.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/media/base/media_switches_h/AImageReader-CFI-crash-mitigations.inc
@@ -0,0 +1 @@
+MEDIA_EXPORT BASE_DECLARE_FEATURE(kAImageReaderVideoOutput);
diff --git a/gpu/config/gpu_driver_bug_list.json b/gpu/config/gpu_driver_bug_list.json
--- a/gpu/config/gpu_driver_bug_list.json
+++ b/gpu/config/gpu_driver_bug_list.json
@@ -2689,6 +2689,22 @@
"no_downscaled_overlay_promotion"
@@ -3199,6 +3199,22 @@
"dont_delete_source_texture_for_egl_image"
]
},
+ {
@@ -142,34 +121,34 @@ diff --git a/gpu/config/gpu_driver_bug_list.json b/gpu/config/gpu_driver_bug_lis
+ ]
+ },
{
"id": 381,
"cr_bugs": [
"id": 336,
"cr_bugs": [625785],
diff --git a/gpu/config/gpu_finch_features.cc b/gpu/config/gpu_finch_features.cc
--- a/gpu/config/gpu_finch_features.cc
+++ b/gpu/config/gpu_finch_features.cc
@@ -65,6 +65,11 @@ BASE_FEATURE(kUseGles2ForOopR,
base::FEATURE_DISABLED_BY_DEFAULT);
@@ -63,6 +63,11 @@ const base::Feature kUseGles2ForOopR {
#endif
};
#if BUILDFLAG(IS_ANDROID)
+// Use android AImageReader when playing videos with MediaPlayer.
+CROMITE_FEATURE(kAImageReaderMediaPlayer,
+ "AImageReaderMediaPlayer",
+ base::FEATURE_ENABLED_BY_DEFAULT);
+
+// Use android AImageReader when playing videos with MediaPlayer.
+const base::Feature kAImageReaderMediaPlayer{"AImageReaderMediaPlayer",
+ base::FEATURE_ENABLED_BY_DEFAULT};
+
#if BUILDFLAG(IS_ANDROID)
// Use android SurfaceControl API for managing display compositor's buffer queue
// and using overlays on Android. Also used by webview to disable surface
// SurfaceControl.
diff --git a/gpu/config/gpu_finch_features.h b/gpu/config/gpu_finch_features.h
--- a/gpu/config/gpu_finch_features.h
+++ b/gpu/config/gpu_finch_features.h
@@ -24,6 +24,7 @@ GPU_EXPORT BASE_DECLARE_FEATURE(kUseGles2ForOopR);
@@ -17,6 +17,7 @@ namespace features {
GPU_EXPORT extern const base::Feature kUseGles2ForOopR;
// All features in alphabetical order. The features should be documented
+GPU_EXPORT extern const base::Feature kAImageReaderMediaPlayer;
// alongside the definition of their values in the .cc file.
#if BUILDFLAG(IS_ANDROID)
+GPU_EXPORT BASE_DECLARE_FEATURE(kAImageReaderMediaPlayer);
GPU_EXPORT BASE_DECLARE_FEATURE(kAndroidSurfaceControl);
GPU_EXPORT BASE_DECLARE_FEATURE(kWebViewSurfaceControl);
GPU_EXPORT BASE_DECLARE_FEATURE(kAImageReader);
GPU_EXPORT extern const base::Feature kAndroidSurfaceControl;
diff --git a/gpu/config/gpu_util.cc b/gpu/config/gpu_util.cc
--- a/gpu/config/gpu_util.cc
+++ b/gpu/config/gpu_util.cc
@@ -183,7 +162,7 @@ diff --git a/gpu/config/gpu_util.cc b/gpu/config/gpu_util.cc
if (!gpu_preferences.enable_android_surface_control)
return kGpuFeatureStatusDisabled;
@@ -368,6 +371,11 @@ void AdjustGpuFeatureStatusToWorkarounds(GpuFeatureInfo* gpu_feature_info) {
@@ -345,6 +348,11 @@ void AdjustGpuFeatureStatusToWorkarounds(GpuFeatureInfo* gpu_feature_info) {
gpu_feature_info->status_values[GPU_FEATURE_TYPE_CANVAS_OOP_RASTERIZATION] =
kGpuFeatureStatusBlocklisted;
}
@@ -198,35 +177,25 @@ diff --git a/gpu/config/gpu_util.cc b/gpu/config/gpu_util.cc
diff --git a/gpu/config/gpu_workaround_list.txt b/gpu/config/gpu_workaround_list.txt
--- a/gpu/config/gpu_workaround_list.txt
+++ b/gpu/config/gpu_workaround_list.txt
@@ -11,6 +11,7 @@ clamp_texture_base_level_and_max_level
clear_pixel_unpack_buffer_before_copyteximage
@@ -14,6 +14,7 @@ decode_encode_srgb_for_generatemipmap
depth_stencil_renderbuffer_resize_emulation
disable_2d_canvas_auto_flush
disable_accelerated_av1_decode
+disable_aimagereader
disable_accelerated_av1_encode
disable_accelerated_h264_decode
disable_accelerated_h264_encode
disable_accelerated_hevc_decode
disable_accelerated_vp8_decode
diff --git a/gpu/ipc/service/gpu_init.cc b/gpu/ipc/service/gpu_init.cc
--- a/gpu/ipc/service/gpu_init.cc
+++ b/gpu/ipc/service/gpu_init.cc
@@ -65,6 +65,7 @@
#if BUILDFLAG(IS_ANDROID)
#include "ui/gfx/android/android_surface_control_compat.h"
+#include "base/android/android_image_reader_compat.h"
#endif
#if BUILDFLAG(ENABLE_VULKAN)
@@ -662,6 +663,13 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandLine* command_line,
@@ -589,6 +589,11 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandLine* command_line,
}
#endif // BUILDFLAG(IS_WIN)
+#if BUILDFLAG(IS_ANDROID)
+ // Disable AImageReader if the workaround is enabled.
+ if (gpu_feature_info_.IsWorkaroundEnabled(DISABLE_AIMAGEREADER)) {
+ base::android::AndroidImageReader::GetInstance().DisableSupport();
+ base::android::AndroidImageReader::DisableSupport();
+ }
+#endif
+
if (gpu_feature_info_.status_values[GPU_FEATURE_TYPE_VULKAN] !=
kGpuFeatureStatusEnabled ||
@@ -240,9 +209,9 @@ diff --git a/gpu/ipc/service/stream_texture_android.cc b/gpu/ipc/service/stream_
+#include "base/android/android_image_reader_compat.h"
#include "base/android/scoped_hardware_buffer_fence_sync.h"
#include "base/bind.h"
#include "base/feature_list.h"
#include "base/functional/bind.h"
@@ -50,7 +51,15 @@ std::unique_ptr<ui::ScopedMakeCurrent> MakeCurrent(
@@ -51,7 +52,15 @@ std::unique_ptr<ui::ScopedMakeCurrent> MakeCurrent(
}
TextureOwner::Mode GetTextureOwnerMode() {
@@ -259,4 +228,30 @@ diff --git a/gpu/ipc/service/stream_texture_android.cc b/gpu/ipc/service/stream_
? TextureOwner::Mode::kAImageReaderInsecure
: TextureOwner::Mode::kSurfaceTextureInsecure;
}
diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc
--- a/media/base/media_switches.cc
+++ b/media/base/media_switches.cc
@@ -746,6 +746,10 @@ const base::Feature kMediaDrmPreprovisioning{"MediaDrmPreprovisioning",
// Note: Has no effect if kMediaDrmPreprovisioning feature is disabled.
const base::Feature kMediaDrmPreprovisioningAtStartup{
"MediaDrmPreprovisioningAtStartup", base::FEATURE_ENABLED_BY_DEFAULT};
+// Enables the Android Image Reader path for Video decoding(for AVDA and MCVD)
+const base::Feature kAImageReaderVideoOutput{"AImageReaderVideoOutput",
+ base::FEATURE_ENABLED_BY_DEFAULT};
+
// Enable picture in picture web api for android.
const base::Feature kPictureInPictureAPI{"PictureInPictureAPI",
diff --git a/media/base/media_switches.h b/media/base/media_switches.h
--- a/media/base/media_switches.h
+++ b/media/base/media_switches.h
@@ -228,6 +228,7 @@ MEDIA_EXPORT extern const base::Feature kForceHardwareAudioDecoders;
MEDIA_EXPORT extern const base::Feature kAllowNonSecureOverlays;
MEDIA_EXPORT extern const base::Feature kMediaControlsExpandGesture;
MEDIA_EXPORT extern const base::Feature kMediaDrmPersistentLicense;
+MEDIA_EXPORT extern const base::Feature kAImageReaderVideoOutput;
MEDIA_EXPORT extern const base::Feature kMediaDrmPreprovisioning;
MEDIA_EXPORT extern const base::Feature kMediaDrmPreprovisioningAtStartup;
MEDIA_EXPORT extern const base::Feature kCanPlayHls;
--
2.25.1
@@ -0,0 +1,47 @@
From: csagan5 <32685696+csagan5@users.noreply.github.com>
Date: Sun, 27 Jun 2021 16:53:48 +0200
Subject: API level 21: prevent crash on download
On Lollipop 5.0.x it is not possible to use the system persistent bundle.
This patch ignores boolean settings for them and prevents the crash.
See also: https://github.com/bromite/bromite/issues/1184
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
.../BundleToPersistableBundleConverter.java | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/components/background_task_scheduler/internal/android/java/src/org/chromium/components/background_task_scheduler/internal/BundleToPersistableBundleConverter.java b/components/background_task_scheduler/internal/android/java/src/org/chromium/components/background_task_scheduler/internal/BundleToPersistableBundleConverter.java
--- a/components/background_task_scheduler/internal/android/java/src/org/chromium/components/background_task_scheduler/internal/BundleToPersistableBundleConverter.java
+++ b/components/background_task_scheduler/internal/android/java/src/org/chromium/components/background_task_scheduler/internal/BundleToPersistableBundleConverter.java
@@ -4,6 +4,7 @@
package org.chromium.components.background_task_scheduler.internal;
+import android.os.Build;
import android.os.Bundle;
import android.os.PersistableBundle;
@@ -82,9 +83,17 @@ class BundleToPersistableBundleConverter {
if (obj == null) {
persistableBundle.putString(key, null);
} else if (obj instanceof Boolean) {
- persistableBundle.putBoolean(key, (Boolean) obj);
+ if (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP) {
+ failedKeys.add(key);
+ } else {
+ persistableBundle.putBoolean(key, (Boolean) obj);
+ }
} else if (obj instanceof boolean[]) {
- persistableBundle.putBooleanArray(key, (boolean[]) obj);
+ if (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP) {
+ failedKeys.add(key);
+ } else {
+ persistableBundle.putBooleanArray(key, (boolean[]) obj);
+ }
} else if (obj instanceof Double) {
persistableBundle.putDouble(key, (Double) obj);
} else if (obj instanceof double[]) {
--
2.25.1
+216
View File
@@ -0,0 +1,216 @@
From: csagan5 <32685696+csagan5@users.noreply.github.com>
Date: Sun, 16 Dec 2018 15:24:19 +0100
Subject: AV1 codec support
libaom build fixes (requires -fPIC)
Report AV1 as playable on Android
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
third_party/libaom/BUILD.gn | 6 ++++--
third_party/libaom/libaom_srcs.gni | 5 +++++
.../config/linux/arm-neon-cpu-detect/config/aom_config.asm | 2 +-
.../config/linux/arm-neon-cpu-detect/config/aom_config.h | 2 +-
.../source/config/linux/arm-neon/config/aom_config.asm | 2 +-
.../libaom/source/config/linux/arm-neon/config/aom_config.h | 2 +-
.../libaom/source/config/linux/arm/config/aom_config.asm | 2 +-
.../libaom/source/config/linux/arm/config/aom_config.h | 2 +-
.../libaom/source/config/linux/arm64/config/aom_config.asm | 2 +-
.../libaom/source/config/linux/arm64/config/aom_config.h | 2 +-
.../source/config/linux/generic/config/aom_config.asm | 2 +-
.../libaom/source/config/linux/generic/config/aom_config.h | 2 +-
.../libaom/source/config/linux/x64/config/aom_config.asm | 2 +-
.../libaom/source/config/linux/x64/config/aom_config.h | 2 +-
14 files changed, 21 insertions(+), 14 deletions(-)
diff --git a/third_party/libaom/BUILD.gn b/third_party/libaom/BUILD.gn
--- a/third_party/libaom/BUILD.gn
+++ b/third_party/libaom/BUILD.gn
@@ -81,7 +81,7 @@ if (current_cpu == "x86" || (current_cpu == "x64" && !is_msan)) {
sources += aom_dsp_encoder_asm_sse2_x86_64
sources += aom_dsp_encoder_asm_ssse3_x86_64
}
- defines = [ "CHROMIUM" ]
+ defines = [ "CHROMIUM", "PIC" ]
include_dirs = libaom_include_dirs
}
@@ -193,7 +193,7 @@ if (current_cpu == "arm64" || cpu_arch_full == "arm-neon" ||
configs += [ "//build/config/compiler:no_chromium_code" ]
if (current_cpu == "arm") {
configs -= [ "//build/config/compiler:compiler_arm_fpu" ]
- cflags = [ "-mfpu=neon" ]
+ cflags = [ "-mfpu=neon", "-fPIC" ]
}
configs += [ ":libaom_config" ]
@@ -255,6 +255,8 @@ static_library("libaom") {
if (current_cpu == "arm64" || cpu_arch_full == "arm-neon" ||
cpu_arch_full == "arm-neon-cpu-detect") {
deps += [ ":libaom_intrinsics_neon" ]
+ # will detect CPU
+ sources += aom_ports_arm_sources
}
if (is_android) {
deps += [ "//third_party/android_ndk:cpu_features" ]
diff --git a/third_party/libaom/libaom_srcs.gni b/third_party/libaom/libaom_srcs.gni
--- a/third_party/libaom/libaom_srcs.gni
+++ b/third_party/libaom/libaom_srcs.gni
@@ -665,6 +665,11 @@ aom_rc_interface_sources = [
"//third_party/libaom/source/libaom/test/yuv_video_source.h",
]
+aom_ports_arm_sources = [
+ "//third_party/libaom/source/libaom/aom_ports/arm_cpudetect.c",
+ "//third_party/libaom/source/libaom/aom_ports/arm.h",
+ ]
+
aom_rtcd_sources = [
"//third_party/libaom/source/libaom/aom_dsp/aom_dsp_rtcd.c",
"//third_party/libaom/source/libaom/aom_scale/aom_scale_rtcd.c",
diff --git a/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_config.asm b/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_config.asm
--- a/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_config.asm
+++ b/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_config.asm
@@ -50,7 +50,7 @@ CONFIG_NORMAL_TILE_MODE equ 1
CONFIG_OPTICAL_FLOW_API equ 0
CONFIG_OS_SUPPORT equ 1
CONFIG_PARTITION_SEARCH_ORDER equ 0
-CONFIG_PIC equ 0
+CONFIG_PIC equ 1
CONFIG_RATECTRL_LOG equ 0
CONFIG_RD_COMMAND equ 0
CONFIG_RD_DEBUG equ 0
diff --git a/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_config.h b/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_config.h
--- a/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_config.h
+++ b/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_config.h
@@ -52,7 +52,7 @@
#define CONFIG_OPTICAL_FLOW_API 0
#define CONFIG_OS_SUPPORT 1
#define CONFIG_PARTITION_SEARCH_ORDER 0
-#define CONFIG_PIC 0
+#define CONFIG_PIC 1
#define CONFIG_RATECTRL_LOG 0
#define CONFIG_RD_COMMAND 0
#define CONFIG_RD_DEBUG 0
diff --git a/third_party/libaom/source/config/linux/arm-neon/config/aom_config.asm b/third_party/libaom/source/config/linux/arm-neon/config/aom_config.asm
--- a/third_party/libaom/source/config/linux/arm-neon/config/aom_config.asm
+++ b/third_party/libaom/source/config/linux/arm-neon/config/aom_config.asm
@@ -50,7 +50,7 @@ CONFIG_NORMAL_TILE_MODE equ 1
CONFIG_OPTICAL_FLOW_API equ 0
CONFIG_OS_SUPPORT equ 1
CONFIG_PARTITION_SEARCH_ORDER equ 0
-CONFIG_PIC equ 0
+CONFIG_PIC equ 1
CONFIG_RATECTRL_LOG equ 0
CONFIG_RD_COMMAND equ 0
CONFIG_RD_DEBUG equ 0
diff --git a/third_party/libaom/source/config/linux/arm-neon/config/aom_config.h b/third_party/libaom/source/config/linux/arm-neon/config/aom_config.h
--- a/third_party/libaom/source/config/linux/arm-neon/config/aom_config.h
+++ b/third_party/libaom/source/config/linux/arm-neon/config/aom_config.h
@@ -52,7 +52,7 @@
#define CONFIG_OPTICAL_FLOW_API 0
#define CONFIG_OS_SUPPORT 1
#define CONFIG_PARTITION_SEARCH_ORDER 0
-#define CONFIG_PIC 0
+#define CONFIG_PIC 1
#define CONFIG_RATECTRL_LOG 0
#define CONFIG_RD_COMMAND 0
#define CONFIG_RD_DEBUG 0
diff --git a/third_party/libaom/source/config/linux/arm/config/aom_config.asm b/third_party/libaom/source/config/linux/arm/config/aom_config.asm
--- a/third_party/libaom/source/config/linux/arm/config/aom_config.asm
+++ b/third_party/libaom/source/config/linux/arm/config/aom_config.asm
@@ -50,7 +50,7 @@ CONFIG_NORMAL_TILE_MODE equ 1
CONFIG_OPTICAL_FLOW_API equ 0
CONFIG_OS_SUPPORT equ 1
CONFIG_PARTITION_SEARCH_ORDER equ 0
-CONFIG_PIC equ 0
+CONFIG_PIC equ 1
CONFIG_RATECTRL_LOG equ 0
CONFIG_RD_COMMAND equ 0
CONFIG_RD_DEBUG equ 0
diff --git a/third_party/libaom/source/config/linux/arm/config/aom_config.h b/third_party/libaom/source/config/linux/arm/config/aom_config.h
--- a/third_party/libaom/source/config/linux/arm/config/aom_config.h
+++ b/third_party/libaom/source/config/linux/arm/config/aom_config.h
@@ -52,7 +52,7 @@
#define CONFIG_OPTICAL_FLOW_API 0
#define CONFIG_OS_SUPPORT 1
#define CONFIG_PARTITION_SEARCH_ORDER 0
-#define CONFIG_PIC 0
+#define CONFIG_PIC 1
#define CONFIG_RATECTRL_LOG 0
#define CONFIG_RD_COMMAND 0
#define CONFIG_RD_DEBUG 0
diff --git a/third_party/libaom/source/config/linux/arm64/config/aom_config.asm b/third_party/libaom/source/config/linux/arm64/config/aom_config.asm
--- a/third_party/libaom/source/config/linux/arm64/config/aom_config.asm
+++ b/third_party/libaom/source/config/linux/arm64/config/aom_config.asm
@@ -50,7 +50,7 @@ CONFIG_NORMAL_TILE_MODE equ 1
CONFIG_OPTICAL_FLOW_API equ 0
CONFIG_OS_SUPPORT equ 1
CONFIG_PARTITION_SEARCH_ORDER equ 0
-CONFIG_PIC equ 0
+CONFIG_PIC equ 1
CONFIG_RATECTRL_LOG equ 0
CONFIG_RD_COMMAND equ 0
CONFIG_RD_DEBUG equ 0
diff --git a/third_party/libaom/source/config/linux/arm64/config/aom_config.h b/third_party/libaom/source/config/linux/arm64/config/aom_config.h
--- a/third_party/libaom/source/config/linux/arm64/config/aom_config.h
+++ b/third_party/libaom/source/config/linux/arm64/config/aom_config.h
@@ -52,7 +52,7 @@
#define CONFIG_OPTICAL_FLOW_API 0
#define CONFIG_OS_SUPPORT 1
#define CONFIG_PARTITION_SEARCH_ORDER 0
-#define CONFIG_PIC 0
+#define CONFIG_PIC 1
#define CONFIG_RATECTRL_LOG 0
#define CONFIG_RD_COMMAND 0
#define CONFIG_RD_DEBUG 0
diff --git a/third_party/libaom/source/config/linux/generic/config/aom_config.asm b/third_party/libaom/source/config/linux/generic/config/aom_config.asm
--- a/third_party/libaom/source/config/linux/generic/config/aom_config.asm
+++ b/third_party/libaom/source/config/linux/generic/config/aom_config.asm
@@ -50,7 +50,7 @@ CONFIG_NORMAL_TILE_MODE equ 1
CONFIG_OPTICAL_FLOW_API equ 0
CONFIG_OS_SUPPORT equ 1
CONFIG_PARTITION_SEARCH_ORDER equ 0
-CONFIG_PIC equ 0
+CONFIG_PIC equ 1
CONFIG_RATECTRL_LOG equ 0
CONFIG_RD_COMMAND equ 0
CONFIG_RD_DEBUG equ 0
diff --git a/third_party/libaom/source/config/linux/generic/config/aom_config.h b/third_party/libaom/source/config/linux/generic/config/aom_config.h
--- a/third_party/libaom/source/config/linux/generic/config/aom_config.h
+++ b/third_party/libaom/source/config/linux/generic/config/aom_config.h
@@ -52,7 +52,7 @@
#define CONFIG_OPTICAL_FLOW_API 0
#define CONFIG_OS_SUPPORT 1
#define CONFIG_PARTITION_SEARCH_ORDER 0
-#define CONFIG_PIC 0
+#define CONFIG_PIC 1
#define CONFIG_RATECTRL_LOG 0
#define CONFIG_RD_COMMAND 0
#define CONFIG_RD_DEBUG 0
diff --git a/third_party/libaom/source/config/linux/x64/config/aom_config.asm b/third_party/libaom/source/config/linux/x64/config/aom_config.asm
--- a/third_party/libaom/source/config/linux/x64/config/aom_config.asm
+++ b/third_party/libaom/source/config/linux/x64/config/aom_config.asm
@@ -40,7 +40,7 @@
%define CONFIG_OPTICAL_FLOW_API 0
%define CONFIG_OS_SUPPORT 1
%define CONFIG_PARTITION_SEARCH_ORDER 0
-%define CONFIG_PIC 0
+%define CONFIG_PIC 1
%define CONFIG_RATECTRL_LOG 0
%define CONFIG_RD_COMMAND 0
%define CONFIG_RD_DEBUG 0
diff --git a/third_party/libaom/source/config/linux/x64/config/aom_config.h b/third_party/libaom/source/config/linux/x64/config/aom_config.h
--- a/third_party/libaom/source/config/linux/x64/config/aom_config.h
+++ b/third_party/libaom/source/config/linux/x64/config/aom_config.h
@@ -52,7 +52,7 @@
#define CONFIG_OPTICAL_FLOW_API 0
#define CONFIG_OS_SUPPORT 1
#define CONFIG_PARTITION_SEARCH_ORDER 0
-#define CONFIG_PIC 0
+#define CONFIG_PIC 1
#define CONFIG_RATECTRL_LOG 0
#define CONFIG_RD_COMMAND 0
#define CONFIG_RD_DEBUG 0
--
2.25.1
@@ -5,22 +5,22 @@ Subject: Add AllowUserCertificates flag
Original License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
.../chromium/chrome/browser/app/ChromeActivity.java | 3 +++
chrome/browser/flags/android/chrome_feature_list.cc | 1 +
.../chrome/browser/flags/ChromeFeatureList.java | 4 ++++
.../Add-AllowUserCertificates-flag.inc | 13 +++++++++++++
.../Add-AllowUserCertificates-flag.inc | 3 +++
.../Add-AllowUserCertificates-flag.inc | 1 +
net/android/java/src/org/chromium/net/X509Util.java | 5 +++++
7 files changed, 30 insertions(+)
create mode 100644 cromite_flags/chrome/browser/about_flags_cc/Add-AllowUserCertificates-flag.inc
create mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/Add-AllowUserCertificates-flag.inc
create mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_h/Add-AllowUserCertificates-flag.inc
.../src/org/chromium/chrome/browser/app/ChromeActivity.java | 3 +++
.../chrome/browser/app/flags/ChromeCachedFlags.java | 1 +
chrome/browser/about_flags.cc | 6 +++++-
chrome/browser/flag_descriptions.cc | 5 +++++
chrome/browser/flag_descriptions.h | 3 +++
chrome/browser/flags/android/chrome_feature_list.cc | 4 ++++
chrome/browser/flags/android/chrome_feature_list.h | 1 +
.../chromium/chrome/browser/flags/CachedFeatureFlags.java | 1 +
.../chromium/chrome/browser/flags/ChromeFeatureList.java | 1 +
net/android/java/src/org/chromium/net/X509Util.java | 5 +++++
10 files changed, 29 insertions(+), 1 deletion(-)
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
@@ -230,6 +230,7 @@ import org.chromium.content_public.browser.ScreenOrientationProvider;
@@ -220,6 +220,7 @@ import org.chromium.content_public.browser.ScreenOrientationProvider;
import org.chromium.content_public.browser.SelectionPopupController;
import org.chromium.content_public.browser.WebContents;
import org.chromium.content_public.common.ContentSwitches;
@@ -28,106 +28,145 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv
import org.chromium.printing.PrintManagerDelegateImpl;
import org.chromium.printing.PrintingController;
import org.chromium.printing.PrintingControllerImpl;
@@ -1064,6 +1065,8 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
super.onStartWithNative();
@@ -932,6 +933,8 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
UpdateMenuItemHelper.getInstance().onStart();
ChromeActivitySessionTracker.getInstance().onStartWithNative();
ChromeCachedFlags.getInstance().cacheNativeFlags();
+ X509Util.AllowUserCertificates = ChromeFeatureList.isEnabled(
+ ChromeFeatureList.ALLOW_USER_CERTIFICATES);
OfflineIndicatorController.initialize();
// postDeferredStartupIfNeeded() is called in TabModelSelectorTabObsever#onLoadStopped(),
// #onPageLoadFinished() and #onCrash(). If we are not actively loading a tab (e.g.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/flags/ChromeCachedFlags.java b/chrome/android/java/src/org/chromium/chrome/browser/app/flags/ChromeCachedFlags.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/app/flags/ChromeCachedFlags.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/app/flags/ChromeCachedFlags.java
@@ -94,6 +94,7 @@ public class ChromeCachedFlags {
add(ChromeFeatureList.FEED_LOADING_PLACEHOLDER);
add(ChromeFeatureList.GRID_TAB_SWITCHER_FOR_TABLETS);
add(ChromeFeatureList.IMMERSIVE_UI_MODE);
+ add(ChromeFeatureList.ALLOW_USER_CERTIFICATES);
add(ChromeFeatureList.INSTANT_START);
add(ChromeFeatureList.INSTANCE_SWITCHER);
add(ChromeFeatureList.INTEREST_FEED_V2);
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -3381,7 +3381,11 @@ const FeatureEntry kFeatureEntries[] = {
{"enable-container-queries", flag_descriptions::kCSSContainerQueriesName,
flag_descriptions::kCSSContainerQueriesDescription, kOsAll,
FEATURE_VALUE_TYPE(blink::features::kCSSContainerQueries)},
-#if BUILDFLAG(IS_ANDROID)
+#if BUILDFLAG(IS_ANDROID) // Bromite allow user certificates
+ {"allow-user-certificates",
+ flag_descriptions::kAllowUserCertificatesName,
+ flag_descriptions::kAllowUserCertificatesDescription, kOsAndroid,
+ FEATURE_VALUE_TYPE(chrome::android::kAllowUserCertificates)},
{"explore-sites", flag_descriptions::kExploreSitesName,
flag_descriptions::kExploreSitesDescription, kOsAndroid,
FEATURE_WITH_PARAMS_VALUE_TYPE(chrome::android::kExploreSites,
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -13,6 +13,11 @@
namespace flag_descriptions {
+const char kAllowUserCertificatesName[] = "Allow user certificates";
+const char kAllowUserCertificatesDescription[] =
+ "Allow user CA certificates during "
+ "validation of the certificate chain";
+
const char kAccelerated2dCanvasName[] = "Accelerated 2D canvas";
const char kAccelerated2dCanvasDescription[] =
"Enables the use of the GPU to perform 2d canvas rendering instead of "
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -39,6 +39,9 @@ namespace flag_descriptions {
// Cross-platform -------------------------------------------------------------
+extern const char kAllowUserCertificatesName[];
+extern const char kAllowUserCertificatesDescription[];
+
extern const char kAccelerated2dCanvasName[];
extern const char kAccelerated2dCanvasDescription[];
diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc
--- a/chrome/browser/flags/android/chrome_feature_list.cc
+++ b/chrome/browser/flags/android/chrome_feature_list.cc
@@ -136,6 +136,7 @@ const base::Feature* const kFeaturesExposedToJava[] = {
&feed::kFeedShowSignInCommand,
&feed::kFeedSignedOutViewDemotion,
&feed::kFeedUserInteractionReliabilityReport,
@@ -145,6 +145,7 @@ const base::Feature* const kFeaturesExposedToJava[] = {
&feed::kFeedLoadingPlaceholder,
&feed::kInterestFeedContentSuggestions,
&feed::kInterestFeedSpinnerAlwaysAnimate,
+ &kAllowUserCertificates,
&feed::kInterestFeedV1ClicksAndViewsConditionalUpload,
&feed::kInterestFeedV2,
&feed::kInterestFeedV2Hearts,
&feed::kWebFeed,
&feed::kInterestFeedV2Autoplay,
@@ -425,6 +426,9 @@ const base::Feature kAdaptiveButtonInTopToolbarCustomizationV2{
"AdaptiveButtonInTopToolbarCustomizationV2",
base::FEATURE_DISABLED_BY_DEFAULT};
+const base::Feature kAllowUserCertificates = {
+ "AllowUserCertificates", base::FEATURE_DISABLED_BY_DEFAULT};
+
const base::Feature kAddToHomescreenIPH{"AddToHomescreenIPH",
base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/chrome/browser/flags/android/chrome_feature_list.h b/chrome/browser/flags/android/chrome_feature_list.h
--- a/chrome/browser/flags/android/chrome_feature_list.h
+++ b/chrome/browser/flags/android/chrome_feature_list.h
@@ -12,6 +12,7 @@
namespace chrome {
namespace android {
+extern const base::Feature kAllowUserCertificates;
// Alphabetical:
extern const base::Feature kAdaptiveButtonInTopToolbar;
extern const base::Feature kAdaptiveButtonInTopToolbarCustomizationV2;
diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java
--- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java
+++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java
@@ -50,6 +50,7 @@ public class CachedFeatureFlags {
ImmutableMap.<String, Boolean>builder()
.put(ChromeFeatureList.ANONYMOUS_UPDATE_CHECKS, true)
.put(ChromeFeatureList.CONDITIONAL_TAB_STRIP_ANDROID, false)
+ .put(ChromeFeatureList.ALLOW_USER_CERTIFICATES, false)
.put(ChromeFeatureList.LENS_CAMERA_ASSISTED_SEARCH, false)
.put(ChromeFeatureList.COMMAND_LINE_ON_NON_ROOTED, false)
.put(ChromeFeatureList.DOWNLOADS_AUTO_RESUMPTION_NATIVE, true)
diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
--- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
+++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
@@ -141,6 +141,7 @@ public abstract class ChromeFeatureList {
return ChromeFeatureMap.getInstance().mutableFlagWithSafeDefault(featureName, defaultValue);
@@ -193,6 +193,7 @@ public abstract class ChromeFeatureList {
}
/* Alphabetical: */
+ public static final String ALLOW_USER_CERTIFICATES = "AllowUserCertificates";
public static final String ADAPTIVE_BUTTON_IN_TOP_TOOLBAR_TRANSLATE =
"AdaptiveButtonInTopToolbarTranslate";
public static final String ADAPTIVE_BUTTON_IN_TOP_TOOLBAR_ADD_TO_BOOKMARKS =
@@ -533,6 +534,8 @@ public abstract class ChromeFeatureList {
public static final CachedFlag sAndroidHub = newCachedFlag(ANDROID_HUB, false);
public static final CachedFlag sAndroidTabGroupStableIds =
newCachedFlag(ANDROID_TAB_GROUP_STABLE_IDS, false);
+ public static final CachedFlag sAllowUserCertificates =
+ newCachedFlag(ALLOW_USER_CERTIFICATES, false);
public static final CachedFlag sArchiveTabService = newCachedFlag(ARCHIVE_TAB_SERVICE, false);
public static final CachedFlag sBackGestureActivityTabProvider =
newCachedFlag(BACK_GESTURE_ACTIVITY_TAB_PROVIDER, false);
@@ -679,6 +682,7 @@ public abstract class ChromeFeatureList {
public static final List<CachedFlag> sFlagsCachedFullBrowser =
List.of(
+ sAllowUserCertificates,
sAndroidAppIntegration,
sAndroidElegantTextHeight,
sAndroidHub,
diff --git a/cromite_flags/chrome/browser/about_flags_cc/Add-AllowUserCertificates-flag.inc b/cromite_flags/chrome/browser/about_flags_cc/Add-AllowUserCertificates-flag.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/chrome/browser/about_flags_cc/Add-AllowUserCertificates-flag.inc
@@ -0,0 +1,13 @@
+#ifdef FLAG_SECTION
+
+#if BUILDFLAG(IS_ANDROID)
+
+ {"allow-user-certificates",
+ "Allow user certificates",
+ "Allow user CA certificates during "
+ "validation of the certificate chain", kOsAndroid,
+ FEATURE_VALUE_TYPE(chrome::android::kAllowUserCertificates)},
+
+#endif
+
+#endif
diff --git a/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/Add-AllowUserCertificates-flag.inc b/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/Add-AllowUserCertificates-flag.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/Add-AllowUserCertificates-flag.inc
@@ -0,0 +1,3 @@
+CROMITE_FEATURE(kAllowUserCertificates,
+ "AllowUserCertificates",
+ base::FEATURE_DISABLED_BY_DEFAULT);
diff --git a/cromite_flags/chrome/browser/flags/android/chrome_feature_list_h/Add-AllowUserCertificates-flag.inc b/cromite_flags/chrome/browser/flags/android/chrome_feature_list_h/Add-AllowUserCertificates-flag.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/chrome/browser/flags/android/chrome_feature_list_h/Add-AllowUserCertificates-flag.inc
@@ -0,0 +1 @@
+BASE_DECLARE_FEATURE(kAllowUserCertificates);
public static final String ABOUT_THIS_SITE_BANNER = "AboutThisSiteBanner";
public static final String ADAPTIVE_BUTTON_IN_TOP_TOOLBAR = "AdaptiveButtonInTopToolbar";
public static final String ADAPTIVE_BUTTON_IN_TOP_TOOLBAR_CUSTOMIZATION_V2 =
diff --git a/net/android/java/src/org/chromium/net/X509Util.java b/net/android/java/src/org/chromium/net/X509Util.java
--- a/net/android/java/src/org/chromium/net/X509Util.java
+++ b/net/android/java/src/org/chromium/net/X509Util.java
@@ -525,6 +525,8 @@ public class X509Util {
return userRootBytes.toArray(new byte[0][]);
@@ -437,6 +437,8 @@ public class X509Util {
return false;
}
+ public static boolean AllowUserCertificates = false;
+
public static AndroidCertVerifyResult verifyServerCertificates(
byte[][] certChain, String authType, String host)
throws KeyStoreException, NoSuchAlgorithmException {
@@ -613,6 +615,9 @@ public class X509Util {
public static AndroidCertVerifyResult verifyServerCertificates(byte[][] certChain,
String authType,
String host)
@@ -517,6 +519,9 @@ public class X509Util {
isIssuedByKnownRoot = isKnownRoot(root);
}
+ if (AllowUserCertificates == false && isIssuedByKnownRoot == false)
+ return new AndroidCertVerifyResult(CertVerifyStatusAndroid.NO_TRUSTED_ROOT);
+
return new AndroidCertVerifyResult(
CertVerifyStatusAndroid.OK, isIssuedByKnownRoot, verifiedChain);
return new AndroidCertVerifyResult(CertVerifyStatusAndroid.OK,
isIssuedByKnownRoot, verifiedChain);
}
--
2.25.1
@@ -10,13 +10,14 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/KeyboardShortcuts.java b/chrome/android/java/src/org/chromium/chrome/browser/KeyboardShortcuts.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/KeyboardShortcuts.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/KeyboardShortcuts.java
@@ -204,6 +204,8 @@ public class KeyboardShortcuts {
R.string.keyboard_shortcut_address_bar,
KeyEvent.KEYCODE_L,
KeyEvent.META_CTRL_ON);
@@ -155,6 +155,8 @@ public class KeyboardShortcuts {
KeyEvent.KEYCODE_F, KeyEvent.META_CTRL_ON);
addShortcut(context, chromeFeatureShortcutGroup, R.string.keyboard_shortcut_address_bar,
KeyEvent.KEYCODE_L, KeyEvent.META_CTRL_ON);
+ addShortcut(context, chromeFeatureShortcutGroup, R.string.keyboard_shortcut_address_bar,
+ KeyEvent.KEYCODE_D, KeyEvent.META_ALT_ON);
shortcutGroups.add(chromeFeatureShortcutGroup);
KeyboardShortcutGroup webpageShortcutGroup =
KeyboardShortcutGroup webpageShortcutGroup = new KeyboardShortcutGroup(
--
2.25.1
@@ -0,0 +1,954 @@
From: csagan5 <32685696+csagan5@users.noreply.github.com>
Date: Thu, 12 Oct 2017 11:06:18 +0200
Subject: Add DuckDuckGo Lite search engine
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
.../search_engines/prepopulated_engines.json | 10 +
.../search_engines/search_engine_type.h | 1 +
.../template_url_prepopulate_data.cc | 202 +++++++++---------
3 files changed, 112 insertions(+), 101 deletions(-)
diff --git a/components/search_engines/prepopulated_engines.json b/components/search_engines/prepopulated_engines.json
--- a/components/search_engines/prepopulated_engines.json
+++ b/components/search_engines/prepopulated_engines.json
@@ -102,6 +102,16 @@
"id": 92
},
+ "duckduckgo_light": {
+ "name": "DuckDuckGo Light",
+ "keyword": "duckduckgo.com/lite",
+ "favicon_url": "https://duckduckgo.com/favicon.ico",
+ "search_url": "https://duckduckgo.com/lite/?q={searchTerms}",
+ "suggest_url": "https://duckduckgo.com/ac/?q={searchTerms}&type=list",
+ "type": "SEARCH_ENGINE_DUCKDUCKGOLIGHT",
+ "id": 12
+ },
+
"ecosia": {
"name": "Ecosia",
"keyword": "ecosia.org",
diff --git a/components/search_engines/search_engine_type.h b/components/search_engines/search_engine_type.h
--- a/components/search_engines/search_engine_type.h
+++ b/components/search_engines/search_engine_type.h
@@ -78,6 +78,7 @@ enum SearchEngineType {
SEARCH_ENGINE_STARTER_PACK_BOOKMARKS = 61,
SEARCH_ENGINE_STARTER_PACK_HISTORY = 62,
SEARCH_ENGINE_GOOGLE_EN = 63,
+ SEARCH_ENGINE_DUCKDUCKGOLIGHT = 64,
SEARCH_ENGINE_STARTER_PACK_TABS = 63,
SEARCH_ENGINE_MAX // Bounding value needed for UMA histogram macro.
diff --git a/components/search_engines/template_url_prepopulate_data.cc b/components/search_engines/template_url_prepopulate_data.cc
--- a/components/search_engines/template_url_prepopulate_data.cc
+++ b/components/search_engines/template_url_prepopulate_data.cc
@@ -41,7 +41,7 @@ const PrepopulatedEngine* const engines_AE[] = {
&googleen, &google,
&bing,
&yahoo,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&ecosia,
};
@@ -50,7 +50,7 @@ const PrepopulatedEngine* const engines_AL[] = {
&googleen, &google,
&bing,
&yahoo,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&yandex_com,
};
@@ -59,7 +59,7 @@ const PrepopulatedEngine* const engines_AR[] = {
&googleen, &google,
&bing,
&yahoo_ar,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&ecosia,
};
@@ -67,7 +67,7 @@ const PrepopulatedEngine* const engines_AR[] = {
const PrepopulatedEngine* const engines_AT[] = {
&googleen, &google,
&bing,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&yahoo_at,
&ecosia,
};
@@ -77,7 +77,7 @@ const PrepopulatedEngine* const engines_AU[] = {
&googleen, &google,
&bing,
&yahoo_au,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&ecosia,
};
@@ -86,7 +86,7 @@ const PrepopulatedEngine* const engines_BA[] = {
&googleen, &google,
&bing,
&yahoo,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&yandex_com,
};
@@ -96,7 +96,7 @@ const PrepopulatedEngine* const engines_BE[] = {
&bing,
&yahoo,
&ecosia,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
};
// Bulgaria
@@ -104,7 +104,7 @@ const PrepopulatedEngine* const engines_BG[] = {
&googleen, &google,
&bing,
&yahoo,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&yandex_ru,
};
@@ -113,7 +113,7 @@ const PrepopulatedEngine* const engines_BH[] = {
&googleen, &google,
&bing,
&yahoo,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&yandex_com,
};
@@ -122,7 +122,7 @@ const PrepopulatedEngine* const engines_BI[] = {
&googleen, &google,
&bing,
&yahoo,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&yandex_ru,
};
@@ -131,7 +131,7 @@ const PrepopulatedEngine* const engines_BN[] = {
&googleen, &google,
&bing,
&yahoo,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&ecosia,
};
@@ -140,7 +140,7 @@ const PrepopulatedEngine* const engines_BO[] = {
&googleen, &google,
&bing,
&yahoo,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&ecosia,
};
@@ -149,7 +149,7 @@ const PrepopulatedEngine* const engines_BR[] = {
&googleen, &google,
&bing,
&yahoo_br,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&ecosia,
};
@@ -159,7 +159,7 @@ const PrepopulatedEngine* const engines_BY[] = {
&yandex_by,
&mail_ru,
&bing,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
};
// Belize
@@ -167,7 +167,7 @@ const PrepopulatedEngine* const engines_BZ[] = {
&googleen, &google,
&bing,
&yahoo,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&ecosia,
};
@@ -176,7 +176,7 @@ const PrepopulatedEngine* const engines_CA[] = {
&googleen, &google,
&bing,
&yahoo_ca,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&ecosia,
};
@@ -184,7 +184,7 @@ const PrepopulatedEngine* const engines_CA[] = {
const PrepopulatedEngine* const engines_CH[] = {
&googleen, &google,
&bing,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&ecosia,
&yahoo_ch,
};
@@ -194,7 +194,7 @@ const PrepopulatedEngine* const engines_CL[] = {
&googleen, &google,
&bing,
&yahoo_cl,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&ecosia,
};
@@ -213,7 +213,7 @@ const PrepopulatedEngine* const engines_CO[] = {
&bing,
&yahoo_co,
&ecosia,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
};
// Costa Rica
@@ -221,7 +221,7 @@ const PrepopulatedEngine* const engines_CR[] = {
&googleen, &google,
&bing,
&yahoo,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&ecosia,
};
@@ -231,7 +231,7 @@ const PrepopulatedEngine* const engines_CZ[] = {
&seznam_cz,
&bing,
&yahoo,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
};
// Germany
@@ -239,7 +239,7 @@ const PrepopulatedEngine* const engines_DE[] = {
&googleen, &google,
&bing,
&ecosia,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&yahoo_de,
};
@@ -248,7 +248,7 @@ const PrepopulatedEngine* const engines_DK[] = {
&googleen, &google,
&bing,
&yahoo_dk,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&ecosia,
};
@@ -257,7 +257,7 @@ const PrepopulatedEngine* const engines_DO[] = {
&googleen, &google,
&bing,
&yahoo,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&ecosia,
};
@@ -267,7 +267,7 @@ const PrepopulatedEngine* const engines_DZ[] = {
&bing,
&yahoo_fr,
&yandex_com,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
};
// Ecuador
@@ -276,7 +276,7 @@ const PrepopulatedEngine* const engines_EC[] = {
&bing,
&yahoo,
&ecosia,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
};
// Estonia
@@ -284,7 +284,7 @@ const PrepopulatedEngine* const engines_EE[] = {
&googleen, &google,
&bing,
&yandex_ru,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&yahoo,
};
@@ -294,7 +294,7 @@ const PrepopulatedEngine* const engines_EG[] = {
&bing,
&yahoo,
&yandex_com,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
};
// Spain
@@ -302,7 +302,7 @@ const PrepopulatedEngine* const engines_ES[] = {
&googleen, &google,
&bing,
&yahoo_es,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&ecosia,
};
@@ -311,7 +311,7 @@ const PrepopulatedEngine* const engines_FI[] = {
&googleen, &google,
&bing,
&yahoo_fi,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&yandex_ru,
};
@@ -320,7 +320,7 @@ const PrepopulatedEngine* const engines_FO[] = {
&googleen, &google,
&bing,
&yahoo_dk,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&ecosia,
};
@@ -338,7 +338,7 @@ const PrepopulatedEngine* const engines_GB[] = {
&googleen, &google,
&bing,
&yahoo_uk,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&ecosia,
};
@@ -347,7 +347,7 @@ const PrepopulatedEngine* const engines_GR[] = {
&googleen, &google,
&bing,
&yahoo,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&yandex_ru,
};
@@ -356,7 +356,7 @@ const PrepopulatedEngine* const engines_GT[] = {
&googleen, &google,
&bing,
&yahoo,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&ecosia,
};
@@ -366,7 +366,7 @@ const PrepopulatedEngine* const engines_HK[] = {
&yahoo_hk,
&bing,
&baidu,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
};
// Honduras
@@ -374,7 +374,7 @@ const PrepopulatedEngine* const engines_HN[] = {
&googleen, &google,
&bing,
&yahoo,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&ecosia,
};
@@ -383,7 +383,7 @@ const PrepopulatedEngine* const engines_HR[] = {
&googleen, &google,
&bing,
&yahoo,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&ecosia,
};
@@ -392,7 +392,7 @@ const PrepopulatedEngine* const engines_HU[] = {
&googleen, &google,
&bing,
&yahoo,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&yandex_com,
};
@@ -402,7 +402,7 @@ const PrepopulatedEngine* const engines_ID[] = {
&yahoo_id,
&bing,
&yandex_com,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
};
// Ireland
@@ -410,7 +410,7 @@ const PrepopulatedEngine* const engines_IE[] = {
&googleen, &google,
&bing,
&yahoo_uk,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&ecosia,
};
@@ -420,7 +420,7 @@ const PrepopulatedEngine* const engines_IL[] = {
&bing,
&yandex_ru,
&yahoo,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
};
// India
@@ -428,7 +428,7 @@ const PrepopulatedEngine* const engines_IN[] = {
&googleen, &google,
&bing,
&yahoo_in,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&info_com,
};
@@ -438,7 +438,7 @@ const PrepopulatedEngine* const engines_IQ[] = {
&bing,
&yahoo,
&yandex_tr,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
};
// Iran
@@ -447,14 +447,14 @@ const PrepopulatedEngine* const engines_IR[] = {
&bing,
&yahoo,
&ask,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
};
// Iceland
const PrepopulatedEngine* const engines_IS[] = {
&googleen, &google,
&bing,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&yahoo,
&ecosia,
};
@@ -464,7 +464,7 @@ const PrepopulatedEngine* const engines_IT[] = {
&googleen, &google,
&bing,
&yahoo,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&ecosia,
};
@@ -473,7 +473,7 @@ const PrepopulatedEngine* const engines_JM[] = {
&googleen, &google,
&bing,
&yahoo,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&ecosia,
};
@@ -482,7 +482,7 @@ const PrepopulatedEngine* const engines_JO[] = {
&googleen, &google,
&bing,
&yahoo,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&yandex_com,
};
@@ -491,7 +491,7 @@ const PrepopulatedEngine* const engines_JP[] = {
&googleen, &google,
&yahoo_jp,
&bing,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&baidu,
};
@@ -500,7 +500,7 @@ const PrepopulatedEngine* const engines_KE[] = {
&googleen, &google,
&bing,
&yahoo,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&ecosia,
};
@@ -518,7 +518,7 @@ const PrepopulatedEngine* const engines_KW[] = {
&googleen, &google,
&bing,
&yahoo,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&yandex_com,
};
@@ -528,7 +528,7 @@ const PrepopulatedEngine* const engines_KZ[] = {
&yandex_kz,
&mail_ru,
&bing,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
};
// Lebanon
@@ -536,7 +536,7 @@ const PrepopulatedEngine* const engines_LB[] = {
&googleen, &google,
&bing,
&yahoo,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&ecosia,
};
@@ -544,7 +544,7 @@ const PrepopulatedEngine* const engines_LB[] = {
const PrepopulatedEngine* const engines_LI[] = {
&googleen, &google,
&bing,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&yahoo,
&ecosia,
};
@@ -554,7 +554,7 @@ const PrepopulatedEngine* const engines_LT[] = {
&googleen, &google,
&bing,
&yahoo,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&yandex_ru,
};
@@ -562,7 +562,7 @@ const PrepopulatedEngine* const engines_LT[] = {
const PrepopulatedEngine* const engines_LU[] = {
&googleen, &google,
&bing,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&yahoo,
&ecosia,
};
@@ -573,7 +573,7 @@ const PrepopulatedEngine* const engines_LV[] = {
&bing,
&yandex_ru,
&yahoo,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
};
// Libya
@@ -582,7 +582,7 @@ const PrepopulatedEngine* const engines_LY[] = {
&bing,
&yahoo,
&yandex_com,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
};
// Morocco
@@ -591,14 +591,14 @@ const PrepopulatedEngine* const engines_MA[] = {
&bing,
&yahoo_fr,
&yandex_com,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
};
// Monaco
const PrepopulatedEngine* const engines_MC[] = {
&googleen, &google,
&bing,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&yahoo_fr,
&ecosia,
};
@@ -618,7 +618,7 @@ const PrepopulatedEngine* const engines_ME[] = {
&bing,
&yahoo,
&yandex_ru,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
};
// Macedonia
@@ -626,7 +626,7 @@ const PrepopulatedEngine* const engines_MK[] = {
&googleen, &google,
&bing,
&yahoo,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&yandex_ru,
};
@@ -635,7 +635,7 @@ const PrepopulatedEngine* const engines_MX[] = {
&googleen, &google,
&bing,
&yahoo_mx,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&ecosia,
};
@@ -644,7 +644,7 @@ const PrepopulatedEngine* const engines_MY[] = {
&googleen, &google,
&bing,
&yahoo_my,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&ecosia,
};
@@ -653,7 +653,7 @@ const PrepopulatedEngine* const engines_NI[] = {
&googleen, &google,
&bing,
&yahoo,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&ecosia,
};
@@ -662,7 +662,7 @@ const PrepopulatedEngine* const engines_NL[] = {
&googleen, &google,
&bing,
&yahoo_nl,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&ecosia,
};
@@ -671,7 +671,7 @@ const PrepopulatedEngine* const engines_NO[] = {
&googleen, &google,
&bing,
&yahoo,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&ecosia,
};
@@ -680,7 +680,7 @@ const PrepopulatedEngine* const engines_NZ[] = {
&googleen, &google,
&bing,
&yahoo_nz,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&ecosia,
};
@@ -689,7 +689,7 @@ const PrepopulatedEngine* const engines_OM[] = {
&googleen, &google,
&bing,
&yahoo,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&petal_search,
};
@@ -698,7 +698,7 @@ const PrepopulatedEngine* const engines_PA[] = {
&googleen, &google,
&bing,
&yahoo_es,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&ecosia,
};
@@ -708,7 +708,7 @@ const PrepopulatedEngine* const engines_PE[] = {
&bing,
&yahoo_pe,
&ecosia,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
};
// Philippines
@@ -717,7 +717,7 @@ const PrepopulatedEngine* const engines_PH[] = {
&bing,
&yahoo,
&ecosia,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
};
// Pakistan
@@ -725,7 +725,7 @@ const PrepopulatedEngine* const engines_PK[] = {
&googleen, &google,
&bing,
&yahoo,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&yandex_com,
};
@@ -734,7 +734,7 @@ const PrepopulatedEngine* const engines_PL[] = {
&googleen, &google,
&bing,
&yahoo,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&yandex_ru,
};
@@ -743,7 +743,7 @@ const PrepopulatedEngine* const engines_PR[] = {
&googleen, &google,
&bing,
&yahoo,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&ecosia,
};
@@ -752,7 +752,7 @@ const PrepopulatedEngine* const engines_PT[] = {
&googleen, &google,
&bing,
&yahoo,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&ecosia,
};
@@ -761,7 +761,7 @@ const PrepopulatedEngine* const engines_PY[] = {
&googleen, &google,
&bing,
&yahoo_es,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&ecosia,
};
@@ -770,7 +770,7 @@ const PrepopulatedEngine* const engines_QA[] = {
&googleen, &google,
&bing,
&yahoo,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&yandex_tr,
};
@@ -779,7 +779,7 @@ const PrepopulatedEngine* const engines_RO[] = {
&googleen, &google,
&bing,
&yahoo,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&yandex_tr,
};
@@ -788,7 +788,7 @@ const PrepopulatedEngine* const engines_RS[] = {
&googleen, &google,
&bing,
&yahoo,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&yandex_ru,
};
@@ -798,7 +798,7 @@ const PrepopulatedEngine* const engines_RU[] = {
&yandex_ru,
&mail_ru,
&bing,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
};
// Rwanda
@@ -806,7 +806,7 @@ const PrepopulatedEngine* const engines_RW[] = {
&googleen, &google,
&bing,
&yahoo,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&ecosia,
};
@@ -816,7 +816,7 @@ const PrepopulatedEngine* const engines_SA[] = {
&bing,
&yahoo,
&yandex_com,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
};
// Sweden
@@ -824,7 +824,7 @@ const PrepopulatedEngine* const engines_SE[] = {
&googleen, &google,
&bing,
&yahoo_se,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&ecosia,
};
@@ -833,7 +833,7 @@ const PrepopulatedEngine* const engines_SG[] = {
&googleen, &google,
&bing,
&yahoo_sg,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&baidu,
};
@@ -841,7 +841,7 @@ const PrepopulatedEngine* const engines_SG[] = {
const PrepopulatedEngine* const engines_SI[] = {
&googleen, &google,
&bing,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&yahoo,
&yandex_com,
};
@@ -850,7 +850,7 @@ const PrepopulatedEngine* const engines_SI[] = {
const PrepopulatedEngine* const engines_SK[] = {
&googleen, &google,
&bing,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&yahoo,
&yandex_com,
};
@@ -860,7 +860,7 @@ const PrepopulatedEngine* const engines_SV[] = {
&googleen, &google,
&bing,
&yahoo_es,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&ecosia,
};
@@ -870,7 +870,7 @@ const PrepopulatedEngine* const engines_SY[] = {
&bing,
&yahoo,
&yandex_com,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
};
// Thailand
@@ -887,7 +887,7 @@ const PrepopulatedEngine* const engines_TN[] = {
&googleen, &google,
&bing,
&yahoo_fr,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&yandex_com,
};
@@ -897,7 +897,7 @@ const PrepopulatedEngine* const engines_TR[] = {
&yandex_tr,
&yahoo_tr,
&bing,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
};
// Trinidad and Tobago
@@ -905,7 +905,7 @@ const PrepopulatedEngine* const engines_TT[] = {
&googleen, &google,
&bing,
&yahoo,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&ecosia,
};
@@ -915,7 +915,7 @@ const PrepopulatedEngine* const engines_TW[] = {
&yahoo_tw,
&bing,
&baidu,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
};
// Tanzania
@@ -923,7 +923,7 @@ const PrepopulatedEngine* const engines_TZ[] = {
&googleen, &google,
&bing,
&yahoo,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&baidu,
};
@@ -932,7 +932,7 @@ const PrepopulatedEngine* const engines_UA[] = {
&googleen, &google,
&yandex_ua,
&bing,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&yahoo,
};
@@ -941,7 +941,7 @@ const PrepopulatedEngine* const engines_US[] = {
&googleen, &google,
&bing,
&yahoo,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&ecosia,
};
@@ -950,7 +950,7 @@ const PrepopulatedEngine* const engines_UY[] = {
&googleen, &google,
&bing,
&yahoo_es,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&ecosia,
};
@@ -959,7 +959,7 @@ const PrepopulatedEngine* const engines_VE[] = {
&googleen, &google,
&bing,
&yahoo_es,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&ecosia,
};
@@ -978,7 +978,7 @@ const PrepopulatedEngine* const engines_YE[] = {
&bing,
&yahoo,
&yandex_com,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
};
// South Africa
@@ -986,7 +986,7 @@ const PrepopulatedEngine* const engines_ZA[] = {
&googleen, &google,
&bing,
&yahoo,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&ecosia,
};
@@ -995,7 +995,7 @@ const PrepopulatedEngine* const engines_ZW[] = {
&googleen, &google,
&bing,
&yahoo,
- &duckduckgo,
+ &duckduckgo, &duckduckgo_light,
&ecosia,
};
--
2.25.1
File diff suppressed because it is too large Load Diff
@@ -5,55 +5,93 @@ Subject: Add IsCleartextPermitted flag
Original License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
.../about_flags_cc/Add-IsCleartextPermitted-flag.inc | 8 ++++++++
.../base/features_cc/Add-IsCleartextPermitted-flag.inc | 3 +++
.../net/base/features_h/Add-IsCleartextPermitted-flag.inc | 1 +
net/url_request/url_request_http_job.cc | 5 +++++
4 files changed, 17 insertions(+)
create mode 100644 cromite_flags/chrome/browser/about_flags_cc/Add-IsCleartextPermitted-flag.inc
create mode 100644 cromite_flags/net/base/features_cc/Add-IsCleartextPermitted-flag.inc
create mode 100644 cromite_flags/net/base/features_h/Add-IsCleartextPermitted-flag.inc
chrome/browser/about_flags.cc | 4 ++++
chrome/browser/flag_descriptions.cc | 4 ++++
chrome/browser/flag_descriptions.h | 3 +++
net/base/features.cc | 3 +++
net/base/features.h | 2 ++
net/url_request/url_request_http_job.cc | 4 ++++
6 files changed, 20 insertions(+)
diff --git a/cromite_flags/chrome/browser/about_flags_cc/Add-IsCleartextPermitted-flag.inc b/cromite_flags/chrome/browser/about_flags_cc/Add-IsCleartextPermitted-flag.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/chrome/browser/about_flags_cc/Add-IsCleartextPermitted-flag.inc
@@ -0,0 +1,8 @@
+#ifdef FLAG_SECTION
+
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -8466,6 +8466,10 @@ const FeatureEntry kFeatureEntries[] = {
flag_descriptions::kRequestDesktopSiteExceptionsName,
flag_descriptions::kRequestDesktopSiteExceptionsDescription, kOsAndroid,
FEATURE_VALUE_TYPE(features::kRequestDesktopSiteExceptions)},
+ {"cleartext-permitted",
+ "Allow cleartext traffic",
+ "Allow insecure connections over HTTP", kOsAll,
+ flag_descriptions::kIsCleartextPermittedName,
+ flag_descriptions::kIsCleartextPermittedDescription, kOsAndroid,
+ FEATURE_VALUE_TYPE(net::features::kIsCleartextPermitted)},
#endif
{"export-bookmarks-use-saf",
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -1533,6 +1533,10 @@ const char kHttpsOnlyModeDescription[] =
"Adds a setting under chrome://settings/security to opt-in to HTTPS-First "
"Mode.";
+const char kIsCleartextPermittedName[] = "Allow cleartext traffic";
+const char kIsCleartextPermittedDescription[] =
+ "Allow insecure connections over HTTP";
+
+#endif
diff --git a/cromite_flags/net/base/features_cc/Add-IsCleartextPermitted-flag.inc b/cromite_flags/net/base/features_cc/Add-IsCleartextPermitted-flag.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/net/base/features_cc/Add-IsCleartextPermitted-flag.inc
@@ -0,0 +1,3 @@
+CROMITE_FEATURE(kIsCleartextPermitted,
+ "IsCleartextPermitted",
+ base::FEATURE_ENABLED_BY_DEFAULT);
diff --git a/cromite_flags/net/base/features_h/Add-IsCleartextPermitted-flag.inc b/cromite_flags/net/base/features_h/Add-IsCleartextPermitted-flag.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/net/base/features_h/Add-IsCleartextPermitted-flag.inc
@@ -0,0 +1 @@
+NET_EXPORT BASE_DECLARE_FEATURE(kIsCleartextPermitted);
const char kIgnoreGpuBlocklistName[] = "Override software rendering list";
const char kIgnoreGpuBlocklistDescription[] =
"Overrides the built-in software rendering list and enables "
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -863,6 +863,9 @@ extern const char kHideShelfControlsInTabletModeDescription[];
extern const char kHttpsOnlyModeName[];
extern const char kHttpsOnlyModeDescription[];
+extern const char kIsCleartextPermittedName[];
+extern const char kIsCleartextPermittedDescription[];
+
extern const char kIgnoreGpuBlocklistName[];
extern const char kIgnoreGpuBlocklistDescription[];
diff --git a/net/base/features.cc b/net/base/features.cc
--- a/net/base/features.cc
+++ b/net/base/features.cc
@@ -115,6 +115,9 @@ const base::Feature kEnableTLS13EarlyData{"EnableTLS13EarlyData",
const base::Feature kEncryptedClientHello{"EncryptedClientHello",
base::FEATURE_DISABLED_BY_DEFAULT};
+const base::Feature kIsCleartextPermitted{"IsCleartextPermitted",
+ base::FEATURE_ENABLED_BY_DEFAULT};
+
const base::Feature kNetworkQualityEstimator{"NetworkQualityEstimator",
base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/net/base/features.h b/net/base/features.h
--- a/net/base/features.h
+++ b/net/base/features.h
@@ -37,6 +37,8 @@ NET_EXPORT extern const base::Feature kCapReferrerToOriginOnCrossOrigin;
// Enables the ParsedCookie domain attribute to be the empty string.
NET_EXPORT extern const base::Feature kCookieDomainAttributeEmptyString;
+NET_EXPORT extern const base::Feature kIsCleartextPermitted;
+
// Support for altering the parameters used for DNS transaction timeout. See
// ResolveContext::SecureTransactionTimeout().
NET_EXPORT extern const base::Feature kDnsTransactionDynamicTimeouts;
diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_request_http_job.cc
--- a/net/url_request/url_request_http_job.cc
+++ b/net/url_request/url_request_http_job.cc
@@ -300,6 +300,11 @@ std::unique_ptr<URLRequestJob> URLRequestHttpJob::Create(URLRequest* request) {
}
@@ -211,6 +211,10 @@ std::unique_ptr<URLRequestJob> URLRequestHttpJob::Create(URLRequest* request) {
}
#if BUILDFLAG(IS_ANDROID)
+ if (base::FeatureList::IsEnabled(net::features::kIsCleartextPermitted) == false) {
+ return std::make_unique<URLRequestErrorJob>(request,
+ ERR_CLEARTEXT_NOT_PERMITTED);
+ }
+
#if BUILDFLAG(IS_ANDROID)
// Check whether the app allows cleartext traffic to this host, and return
// ERR_CLEARTEXT_NOT_PERMITTED if not.
if (request->context()->check_cleartext_permitted() &&
--
2.25.1
@@ -1,54 +0,0 @@
From: uazo <uazo@users.noreply.github.com>
Date: Wed, 6 Dec 2023 10:21:45 +0000
Subject: Add PartialLowEndModeOnMidRangeDevices flag
adds a new flag in chrome://flags to re-enable the experiment
License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
---
base/features.cc | 3 +++
chrome/browser/about_flags.cc | 1 +
.../Add-PartialLowEndModeOnMidRangeDevices-flag.inc | 12 ++++++++++++
3 files changed, 16 insertions(+)
create mode 100644 cromite_flags/chrome/browser/about_flags_cc/Add-PartialLowEndModeOnMidRangeDevices-flag.inc
diff --git a/base/features.cc b/base/features.cc
--- a/base/features.cc
+++ b/base/features.cc
@@ -67,4 +67,7 @@ BASE_FEATURE(kCollectAndroidFrameTimelineMetrics,
base::FEATURE_DISABLED_BY_DEFAULT);
#endif // BUILDFLAG(IS_ANDROID)
+#if BUILDFLAG(IS_ANDROID)
+SET_CROMITE_FEATURE_DISABLED(kPartialLowEndModeOnMidRangeDevices);
+#endif
} // namespace base::features
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -16,6 +16,7 @@
#include "base/base_switches.h"
#include "base/command_line.h"
#include "base/feature_list.h"
+#include "base/features.h"
#include "base/functional/bind.h"
#include "base/functional/callback.h"
#include "base/i18n/base_i18n_switches.h"
diff --git a/cromite_flags/chrome/browser/about_flags_cc/Add-PartialLowEndModeOnMidRangeDevices-flag.inc b/cromite_flags/chrome/browser/about_flags_cc/Add-PartialLowEndModeOnMidRangeDevices-flag.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/chrome/browser/about_flags_cc/Add-PartialLowEndModeOnMidRangeDevices-flag.inc
@@ -0,0 +1,12 @@
+#if BUILDFLAG(IS_ANDROID)
+
+#ifdef FLAG_SECTION
+
+ {"partial-lowendmode-on-midrange-devices",
+ "Partial Low End Mode On Mid Range Devices",
+ "Enables the LowEndDeviceMode experiment in devices with 4-6 gb of ram.",
+ kOsAndroid, FEATURE_VALUE_TYPE(base::features::kPartialLowEndModeOnMidRangeDevices)},
+
+#endif
+
+#endif
--
@@ -1,73 +0,0 @@
From: uazo <uazo@users.noreply.github.com>
Date: Fri, 21 Apr 2023 13:10:20 +0000
Subject: Add a flag to disable GamePad API
Adds restrict-gamepad-access flag (default active) to disable GamePad API.
License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
---
chrome/browser/flag-metadata.json | 4 ++--
chrome/browser/flag_descriptions.cc | 2 +-
device/gamepad/public/cpp/gamepad_features.cc | 1 +
.../blink/renderer/modules/gamepad/navigator_gamepad.cc | 6 ++++++
4 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -7195,9 +7195,9 @@
"expiry_milestone": 125
},
{
- "name": "restrict-gamepad-access",
+ "name": "restrict-gamepad-access", // restrict-gamepad-access"
"owners": [ "//device/gamepad/OWNERS", "jameshollyer@chromium.org" ],
- "expiry_milestone": 96
+ "expiry_milestone": -1
},
{
"name": "revamp-page-info-ios",
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -3089,7 +3089,7 @@ const char kResetShortcutCustomizationsDescription[] =
const char kRestrictGamepadAccessName[] = "Restrict gamepad access";
const char kRestrictGamepadAccessDescription[] =
- "Enables Permissions Policy and Secure Context restrictions on the Gamepad "
+ "Disable the Gamepad "
"API";
const char kRoundedDisplay[] = "Rounded display";
diff --git a/device/gamepad/public/cpp/gamepad_features.cc b/device/gamepad/public/cpp/gamepad_features.cc
--- a/device/gamepad/public/cpp/gamepad_features.cc
+++ b/device/gamepad/public/cpp/gamepad_features.cc
@@ -65,4 +65,5 @@ bool IsGamepadMultitouchEnabled() {
return false;
}
+SET_CROMITE_FEATURE_ENABLED(kRestrictGamepadAccess);
} // namespace features
diff --git a/third_party/blink/renderer/modules/gamepad/navigator_gamepad.cc b/third_party/blink/renderer/modules/gamepad/navigator_gamepad.cc
--- a/third_party/blink/renderer/modules/gamepad/navigator_gamepad.cc
+++ b/third_party/blink/renderer/modules/gamepad/navigator_gamepad.cc
@@ -113,6 +113,10 @@ void RecordGamepadsForIdentifiabilityStudy(
HeapVector<Member<Gamepad>> NavigatorGamepad::getGamepads(
Navigator& navigator,
ExceptionState& exception_state) {
+ if (base::FeatureList::IsEnabled(::features::kRestrictGamepadAccess)) {
+ exception_state.ThrowSecurityError("Access to the feature \"gamepad\" is denied");
+ return HeapVector<Member<Gamepad>>();
+ }
if (!navigator.DomWindow()) {
// Using an existing NavigatorGamepad if one exists, but don't create one
// for a detached window, as its subclasses depend on a non-null window.
@@ -435,6 +439,8 @@ void NavigatorGamepad::SampleAndCompareGamepadState() {
void NavigatorGamepad::DispatchGamepadEvent(const AtomicString& event_name,
Gamepad* gamepad) {
+ if (base::FeatureList::IsEnabled(::features::kRestrictGamepadAccess))
+ return;
// Ensure that we're blocking re-entrancy.
DCHECK(processing_events_);
DCHECK(has_connection_event_listener_);
--
+225 -241
View File
@@ -3,15 +3,11 @@ Date: Thu, 29 Mar 2018 00:43:32 +0200
Subject: Add a proxy configuration page
Accessible from proxy settings and chrome://proxy
Allows to use a PAC script URL, automatic configuration and explicit proxy settings.
Allows to use a PAC script URL, automatic configuration and explicit proxy
settings.
Offer auto-complete for the proxy page URL.
Store proxy settings in LocalState instead of Profile, so that proxy is used for SimpleURLLoaders as well;
this implementation is the same as the one in ChromeOS which gets proxy information from the LocalState
for the system network context; this is strictly not correct on Android because the network context is
never connected to any user profile and only gets proxy information from the system.
Existing settings on Profile are migrated to LocalState on startup.
Credits to @uazo for the LocalState integration.
Store proxy settings in LocalState instead of Profile, so that proxy is used
for SimpleURLLoaders as well.
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
@@ -19,28 +15,27 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
.../java/res/xml/privacy_preferences.xml | 4 +
.../privacy/settings/PrivacySettings.java | 1 +
.../chrome_autocomplete_provider_client.cc | 2 +
chrome/browser/browser_resources.grd | 3 +
.../extensions/api/proxy/proxy_api_helpers.cc | 2 +-
chrome/browser/browser_resources.grd | 6 +
chrome/browser/net/proxy_service_factory.cc | 24 +-
chrome/browser/net/proxy_service_factory.h | 3 +
chrome/browser/prefs/browser_prefs.cc | 4 +
.../prefs/chrome_command_line_pref_store.cc | 2 +-
chrome/browser/resources/proxy_config.css | 61 +++
chrome/browser/resources/proxy_config.html | 77 ++++
chrome/browser/resources/proxy_config.js | 278 +++++++++++++
chrome/browser/resources/proxy_config.html | 79 ++++
chrome/browser/resources/proxy_config.js | 266 +++++++++++
chrome/browser/ui/BUILD.gn | 2 +
.../webui/chrome_web_ui_controller_factory.cc | 3 +
chrome/browser/ui/webui/proxy_config_ui.cc | 393 ++++++++++++++++++
chrome/browser/ui/webui/proxy_config_ui.cc | 418 ++++++++++++++++++
chrome/browser/ui/webui/proxy_config_ui.h | 31 ++
chrome/common/webui_url_constants.cc | 4 +
chrome/common/webui_url_constants.h | 2 +
.../pref_proxy_config_tracker_impl.cc | 5 +-
.../pref_proxy_config_tracker_impl.cc | 1 +
.../proxy_config/proxy_config_dictionary.cc | 30 +-
.../proxy_config/proxy_config_dictionary.h | 7 +-
.../proxy_config/proxy_policy_handler.cc | 2 +-
net/proxy_resolution/proxy_config.cc | 52 ++-
net/proxy_resolution/proxy_config.h | 3 +
25 files changed, 981 insertions(+), 17 deletions(-)
24 files changed, 996 insertions(+), 14 deletions(-)
create mode 100644 chrome/browser/resources/proxy_config.css
create mode 100644 chrome/browser/resources/proxy_config.html
create mode 100644 chrome/browser/resources/proxy_config.js
@@ -50,7 +45,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
diff --git a/chrome/android/java/res/values/values.xml b/chrome/android/java/res/values/values.xml
--- a/chrome/android/java/res/values/values.xml
+++ b/chrome/android/java/res/values/values.xml
@@ -25,6 +25,9 @@ found in the LICENSE file.
@@ -25,6 +25,9 @@
<!-- Compositor Tab Title Text -->
<bool name="compositor_tab_title_fake_bold_text">true</bool>
@@ -63,10 +58,10 @@ diff --git a/chrome/android/java/res/values/values.xml b/chrome/android/java/res
diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/android/java/res/xml/privacy_preferences.xml
--- a/chrome/android/java/res/xml/privacy_preferences.xml
+++ b/chrome/android/java/res/xml/privacy_preferences.xml
@@ -10,6 +10,10 @@ found in the LICENSE file.
<PreferenceCategory
android:key="privacy_section"
android:title="@string/privacy_section_title" />
@@ -6,6 +6,10 @@
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
+ <org.chromium.chrome.browser.about_settings.HyperlinkPreference
+ android:key="proxy"
+ android:title="@string/proxy_title"
@@ -77,18 +72,18 @@ diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/androi
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java
@@ -76,6 +76,7 @@ public class PrivacySettings extends ChromeBaseSettingsFragment
private static final String PREF_SAFE_BROWSING = "safe_browsing";
private static final String PREF_SYNC_AND_SERVICES_LINK = "sync_and_services_link";
@@ -57,6 +57,7 @@ public class PrivacySettings
private static final String PREF_DO_NOT_TRACK = "do_not_track";
private static final String PREF_CLEAR_BROWSING_DATA = "clear_browsing_data";
private static final String PREF_PRIVACY_SANDBOX = "privacy_sandbox";
+ private static final String PREF_PROXY_OPTIONS = "proxy";
private static final String PREF_PRIVACY_GUIDE = "privacy_guide";
private static final String PREF_PRIVACY_REVIEW = "privacy_review";
private static final String PREF_INCOGNITO_LOCK = "incognito_lock";
private static final String PREF_THIRD_PARTY_COOKIES = "third_party_cookies";
diff --git a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc b/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc
--- a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc
+++ b/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc
@@ -308,6 +308,8 @@ ChromeAutocompleteProviderClient::GetBuiltinsToProvideAsUserTypes() {
@@ -267,6 +267,8 @@ ChromeAutocompleteProviderClient::GetBuiltinsToProvideAsUserTypes() {
builtins_to_provide.push_back(
base::ASCIIToUTF16(chrome::kChromeUISettingsURL));
#endif
@@ -100,28 +95,19 @@ diff --git a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc
diff --git a/chrome/browser/browser_resources.grd b/chrome/browser/browser_resources.grd
--- a/chrome/browser/browser_resources.grd
+++ b/chrome/browser/browser_resources.grd
@@ -237,6 +237,9 @@
<include name="IDR_PREF_HASH_SEED_BIN" file="resources\settings\internal\pref_hash_seed.bin" type="BINDATA" />
<include name="IDR_ADDITIONAL_MODULE_IDS" file="${additional_modules_list_file}" use_base_dir="false" type="BINDATA" />
@@ -80,6 +80,12 @@
<include name="IDR_CONTACT_CENTER_INSIGHTS_MANIFEST" file="resources\chromeos\contact_center_insights\manifest.json" type="BINDATA" />
</if>
+ <!-- Bromite Proxy Configuration UI -->
+ <include name="IDR_PROXY_CONFIG_HTML" file="resources\proxy_config.html" flattenhtml="true" type="BINDATA" compress="gzip" />
+ <include name="IDR_PROXY_CONFIG_JS" file="resources\proxy_config.js" type="BINDATA" compress="gzip" />
+ <if expr="is_android">
+ <include name="IDR_PROXY_CONFIG_HTML" file="resources\proxy_config.html" flattenhtml="true" type="BINDATA" compress="gzip" />
+ <include name="IDR_PROXY_CONFIG_JS" file="resources\proxy_config.js" type="BINDATA" compress="gzip" />
+ </if>
+
<if expr="not is_android">
<!-- Page not available for guest. -->
<include name="IDR_PAGE_NOT_AVAILABLE_FOR_GUEST_APP_HTML" file="resources\page_not_available_for_guest\app.html" type="BINDATA" />
diff --git a/chrome/browser/extensions/api/proxy/proxy_api_helpers.cc b/chrome/browser/extensions/api/proxy/proxy_api_helpers.cc
--- a/chrome/browser/extensions/api/proxy/proxy_api_helpers.cc
+++ b/chrome/browser/extensions/api/proxy/proxy_api_helpers.cc
@@ -387,7 +387,7 @@ std::optional<base::Value::Dict> CreateProxyConfigDict(
return std::nullopt;
}
return ProxyConfigDictionary::CreateFixedServers(proxy_rules_string,
- bypass_list);
+ bypass_list, /*reverse_bypass*/false);
}
case ProxyPrefs::MODE_SYSTEM:
return ProxyConfigDictionary::CreateSystem();
diff --git a/chrome/browser/net/proxy_service_factory.cc b/chrome/browser/net/proxy_service_factory.cc
--- a/chrome/browser/net/proxy_service_factory.cc
+++ b/chrome/browser/net/proxy_service_factory.cc
@@ -130,12 +116,12 @@ diff --git a/chrome/browser/net/proxy_service_factory.cc b/chrome/browser/net/pr
#include <utility>
+#include "base/logging.h"
#include "base/task/single_thread_task_runner.h"
#include "base/threading/thread_task_runner_handle.h"
#include "build/build_config.h"
#include "build/chromeos_buildflags.h"
@@ -13,6 +14,9 @@
#include "content/public/browser/browser_task_traits.h"
@@ -14,6 +15,9 @@
#include "content/public/browser/browser_thread.h"
#include "net/proxy_resolution/configured_proxy_resolution_service.h"
#include "net/proxy_resolution/proxy_config_service.h"
+#include "components/proxy_config/proxy_config_pref_names.h"
+#include "components/prefs/pref_service.h"
@@ -143,19 +129,19 @@ diff --git a/chrome/browser/net/proxy_service_factory.cc b/chrome/browser/net/pr
#if BUILDFLAG(IS_CHROMEOS_ASH)
#include "chromeos/ash/components/network/proxy/proxy_config_service_impl.h"
@@ -70,7 +74,20 @@ ProxyServiceFactory::CreatePrefProxyConfigTrackerOfProfile(
return std::make_unique<ash::ProxyConfigServiceImpl>(
@@ -72,7 +76,20 @@ ProxyServiceFactory::CreatePrefProxyConfigTrackerOfProfile(
return std::make_unique<chromeos::ProxyConfigServiceImpl>(
profile_prefs, local_state_prefs, nullptr);
#else
- return std::make_unique<PrefProxyConfigTrackerImpl>(profile_prefs, nullptr);
+ // Migrate from profile_prefs to local_state_prefs
+ if (local_state_prefs->GetBoolean("proxy_migrated") == false) {
+ const base::Value::Dict& dict =
+ profile_prefs->GetDict(proxy_config::prefs::kProxy);
+ const base::Value* dict =
+ profile_prefs->GetDictionary(proxy_config::prefs::kProxy);
+
+ LOG(INFO) << "CreatePrefProxyConfigTrackerOfProfile: Migration from profile to local state";
+
+ const base::Value /*ProxyConfigDictionary*/ proxy_dict(dict.Clone());
+ const base::Value /*ProxyConfigDictionary*/ proxy_dict(dict->Clone());
+ local_state_prefs->Set(proxy_config::prefs::kProxy, proxy_dict);
+
+ local_state_prefs->SetBoolean("proxy_migrated", true);
@@ -165,7 +151,7 @@ diff --git a/chrome/browser/net/proxy_service_factory.cc b/chrome/browser/net/pr
#endif // BUILDFLAG(IS_CHROMEOS_ASH)
}
@@ -86,3 +103,8 @@ ProxyServiceFactory::CreatePrefProxyConfigTrackerOfLocalState(
@@ -88,3 +105,8 @@ ProxyServiceFactory::CreatePrefProxyConfigTrackerOfLocalState(
nullptr);
#endif // BUILDFLAG(IS_CHROMEOS_ASH)
}
@@ -197,7 +183,7 @@ diff --git a/chrome/browser/net/proxy_service_factory.h b/chrome/browser/net/pro
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc
--- a/chrome/browser/prefs/browser_prefs.cc
+++ b/chrome/browser/prefs/browser_prefs.cc
@@ -191,6 +191,8 @@
@@ -161,6 +161,8 @@
#include "printing/buildflags/buildflags.h"
#include "rlz/buildflags/buildflags.h"
@@ -206,9 +192,9 @@ diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browse
#if BUILDFLAG(ENABLE_BACKGROUND_MODE)
#include "chrome/browser/background/background_mode_manager.h"
#endif
@@ -1447,6 +1449,8 @@ void RegisterLocalState(PrefRegistrySimple* registry) {
@@ -1025,6 +1027,8 @@ void RegisterLocalState(PrefRegistrySimple* registry) {
chrome::enterprise_util::RegisterLocalStatePrefs(registry);
component_updater::RegisterPrefs(registry);
domain_reliability::RegisterPrefs(registry);
embedder_support::OriginTrialPrefs::RegisterPrefs(registry);
+ ProxyServiceFactory::RegisterPrefs(registry);
+
@@ -218,13 +204,13 @@ diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browse
diff --git a/chrome/browser/prefs/chrome_command_line_pref_store.cc b/chrome/browser/prefs/chrome_command_line_pref_store.cc
--- a/chrome/browser/prefs/chrome_command_line_pref_store.cc
+++ b/chrome/browser/prefs/chrome_command_line_pref_store.cc
@@ -156,7 +156,7 @@ void ChromeCommandLinePrefStore::ApplyProxyMode() {
command_line()->GetSwitchValueASCII(switches::kProxyBypassList);
SetValue(proxy_config::prefs::kProxy,
base::Value(ProxyConfigDictionary::CreateFixedServers(
- proxy_server, bypass_list)),
+ proxy_server, bypass_list, false)),
WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS);
@@ -157,7 +157,7 @@ void ChromeCommandLinePrefStore::ApplyProxyMode() {
SetValue(
proxy_config::prefs::kProxy,
std::make_unique<base::Value>(ProxyConfigDictionary::CreateFixedServers(
- proxy_server, bypass_list)),
+ proxy_server, bypass_list, false)),
WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS);
}
}
diff --git a/chrome/browser/resources/proxy_config.css b/chrome/browser/resources/proxy_config.css
@@ -297,7 +283,7 @@ diff --git a/chrome/browser/resources/proxy_config.html b/chrome/browser/resourc
new file mode 100644
--- /dev/null
+++ b/chrome/browser/resources/proxy_config.html
@@ -0,0 +1,77 @@
@@ -0,0 +1,79 @@
+<!doctype html>
+<html>
+<head>
@@ -311,6 +297,8 @@ new file mode 100644
+<script src="chrome://resources/js/ios/web_ui.js"></script>
+</if>
+
+<script src="chrome://resources/js/assert.js"></script>
+<script src="chrome://resources/js/util.js"></script>
+<script type="module" src="chrome://proxy/proxy_config.js"></script>
+<link rel="stylesheet" href="chrome://resources/css/text_defaults.css">
+<link rel="stylesheet" href="proxy_config.css">
@@ -379,7 +367,7 @@ diff --git a/chrome/browser/resources/proxy_config.js b/chrome/browser/resources
new file mode 100644
--- /dev/null
+++ b/chrome/browser/resources/proxy_config.js
@@ -0,0 +1,278 @@
@@ -0,0 +1,266 @@
+/*
+ This file is part of Bromite.
+
@@ -397,7 +385,7 @@ new file mode 100644
+ along with Bromite. If not, see <https://www.gnu.org/licenses/>.
+*/
+
+import {$} from 'chrome://resources/js/util.js';
+import {addSingletonGetter} from 'chrome://resources/js/cr.m.js';
+
+/**
+ * Main entry point called once the page has loaded.
@@ -442,18 +430,6 @@ new file mode 100644
+ var kIdFallbackProxies = 'fallback-proxies';
+
+ /**
+ * Adds a {@code getInstance} static method that always return the same
+ * instance object.
+ * @param {!Function} ctor The constructor for the class to add the static
+ * method to.
+ */
+ function addSingletonGetter(ctor) {
+ ctor.getInstance = function() {
+ return ctor.instance_ || (ctor.instance_ = new ctor());
+ };
+ }
+
+ /**
+ * @constructor
+ */
+ function ProxyConfigView() {
@@ -661,8 +637,8 @@ new file mode 100644
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -301,6 +301,8 @@ static_library("ui") {
"webui/metrics_internals/metrics_internals_ui.h",
@@ -288,6 +288,8 @@ static_library("ui") {
"webui/metrics_handler.h",
"webui/net_export_ui.cc",
"webui/net_export_ui.h",
+ "webui/proxy_config_ui.cc",
@@ -673,16 +649,16 @@ diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
--- a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
+++ b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
@@ -52,6 +52,7 @@
@@ -57,6 +57,7 @@
#include "chrome/browser/ui/webui/ntp_tiles_internals_ui.h"
#include "chrome/browser/ui/webui/omnibox/omnibox_ui.h"
#include "chrome/browser/ui/webui/policy/policy_ui.h"
+#include "chrome/browser/ui/webui/proxy_config_ui.h"
#include "chrome/browser/ui/webui/predictors/predictors_ui.h"
#include "chrome/browser/ui/webui/privacy_sandbox/privacy_sandbox_internals_ui.h"
#include "chrome/browser/ui/webui/segmentation_internals/segmentation_internals_ui.h"
@@ -469,6 +470,8 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui,
return &NewWebUI<MetricsInternalsUI>;
#include "chrome/browser/ui/webui/signin_internals_ui.h"
@@ -778,6 +779,8 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui,
return &NewWebUI<MemoryInternalsUI>;
if (url.host_piece() == chrome::kChromeUINetExportHost)
return &NewWebUI<NetExportUI>;
+ if (url.host_piece() == chrome::kChromeUIProxyConfigHost)
@@ -694,7 +670,7 @@ diff --git a/chrome/browser/ui/webui/proxy_config_ui.cc b/chrome/browser/ui/webu
new file mode 100644
--- /dev/null
+++ b/chrome/browser/ui/webui/proxy_config_ui.cc
@@ -0,0 +1,393 @@
@@ -0,0 +1,418 @@
+/*
+ This file is part of Bromite.
+
@@ -720,6 +696,7 @@ new file mode 100644
+#include <string>
+#include <vector>
+
+#include "base/bind.h"
+#include "base/command_line.h"
+#include "base/lazy_instance.h"
+#include "base/memory/ref_counted.h"
@@ -751,6 +728,16 @@ new file mode 100644
+
+namespace {
+
+content::WebUIDataSource* CreateProxyConfigHTMLSource() {
+ content::WebUIDataSource* source =
+ content::WebUIDataSource::Create(chrome::kChromeUIProxyConfigHost);
+
+ source->UseStringsJs();
+ source->AddResourcePath("proxy_config.js", IDR_PROXY_CONFIG_JS);
+ source->SetDefaultResource(IDR_PROXY_CONFIG_HTML);
+ return source;
+}
+
+// This class receives javascript messages from the renderer.
+// Note that the WebUI infrastructure runs on the UI thread, therefore all of
+// this class's public methods are expected to run on the UI thread.
@@ -784,13 +771,13 @@ new file mode 100644
+
+ private:
+ // Not owned.
+ raw_ptr<PrefService> pref_service_;
+ PrefService *pref_service_;
+ std::unique_ptr<net::ProxyConfigService> proxy_config_service_;
+ // Monitors global and Profile prefs related to proxy configuration.
+ std::unique_ptr<PrefProxyConfigTracker> pref_proxy_config_tracker_;
+ bool is_observing_;
+
+ void encodeConfig(const net::ProxyConfig& config, base::Value::Dict& state);
+ void encodeConfig(const net::ProxyConfig& config, base::DictionaryValue& state);
+
+ void apply(const net::ProxyConfig& config);
+
@@ -832,25 +819,25 @@ new file mode 100644
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI) ||
+ !BrowserThread::IsThreadInitialized(BrowserThread::UI));
+
+ base::Value::Dict state;
+ base::DictionaryValue state;
+ bool pending = false;
+ switch (availability) {
+ case net::ProxyConfigService::CONFIG_VALID:
+ encodeConfig(config.value(), state);
+ break;
+ case net::ProxyConfigService::CONFIG_UNSET:
+ state.SetByDottedPath("config.rules.type", base::Value("none"));
+ state.SetPath({"config", "rules", "type"}, base::Value("none"));
+ break;
+ case net::ProxyConfigService::CONFIG_PENDING:
+ //NOTE: this can only happen when triggered manually first time
+ pending = true;
+ break;
+ }
+ state.Set("pending", base::Value(pending));
+ state.SetKey("pending", base::Value(pending));
+
+ // call Javascript function
+ web_ui()->CallJavascriptFunctionUnsafe("ProxyConfigView.getInstance().onProxyConfigChanged",
+ state.Clone());
+ *state.CreateDeepCopy());
+}
+
+const std::string omitDirect(const std::string pacString) {
@@ -860,19 +847,19 @@ new file mode 100644
+ return pacString;
+}
+
+void ProxyConfigMessageHandler::encodeConfig(const net::ProxyConfig& config, base::Value::Dict& state) {
+void ProxyConfigMessageHandler::encodeConfig(const net::ProxyConfig& config, base::DictionaryValue& state) {
+ // when automatic settings are enabled they take precedence over manual settings
+ // automatic settings are either the "auto-detect" flag or the existance of a PAC URL
+
+ state.SetByDottedPath("config.auto_detect", base::Value(config.auto_detect()));
+ state.SetPath({"config", "auto_detect"}, base::Value(config.auto_detect()));
+
+ auto rules = config.proxy_rules();
+ if (config.has_pac_url()) {
+ state.SetByDottedPath("config.pac_url", base::Value(config.pac_url().spec()));
+ state.SetByDottedPath("config.pac_mandatory", base::Value(config.pac_mandatory()));
+ state.SetByDottedPath("config.rules.type", base::Value("none"));
+ state.SetByDottedPath("config.rules.bypass_rules", base::Value(rules.bypass_rules.ToString()));
+ state.SetByDottedPath("config.rules.reverse_bypass", base::Value(rules.reverse_bypass));
+ state.SetPath({"config", "pac_url"}, base::Value(config.pac_url().spec()));
+ state.SetPath({"config", "pac_mandatory"}, base::Value(config.pac_mandatory()));
+ state.SetPath({"config", "rules", "type"}, base::Value("none"));
+ state.SetPath({"config", "rules", "bypass_rules"}, base::Value(rules.bypass_rules.ToString()));
+ state.SetPath({"config", "rules", "reverse_bypass"}, base::Value(rules.reverse_bypass));
+ return;
+ }
+
@@ -884,23 +871,23 @@ new file mode 100644
+ case net::ProxyConfig::ProxyRules::Type::PROXY_LIST:
+ type = "list";
+
+ state.SetByDottedPath("config.rules.single_proxies", base::Value(omitDirect(rules.single_proxies.ToPacString())));
+ state.SetPath({"config", "rules", "single_proxies"}, base::Value(omitDirect(rules.single_proxies.ToPacString())));
+ break;
+ case net::ProxyConfig::ProxyRules::Type::PROXY_LIST_PER_SCHEME:
+ type = "list_per_scheme";
+
+ state.SetByDottedPath("config.rules.proxies_for_http", base::Value(omitDirect(rules.proxies_for_http.ToPacString())));
+ state.SetByDottedPath("config.rules.proxies_for_https", base::Value(omitDirect(rules.proxies_for_https.ToPacString())));
+ state.SetByDottedPath("config.rules.proxies_for_ftp", base::Value(omitDirect(rules.proxies_for_ftp.ToPacString())));
+ state.SetByDottedPath("config.rules.fallback_proxies", base::Value(omitDirect(rules.fallback_proxies.ToPacString())));
+ state.SetPath({"config", "rules", "proxies_for_http"}, base::Value(omitDirect(rules.proxies_for_http.ToPacString())));
+ state.SetPath({"config", "rules", "proxies_for_https"}, base::Value(omitDirect(rules.proxies_for_https.ToPacString())));
+ state.SetPath({"config", "rules", "proxies_for_ftp"}, base::Value(omitDirect(rules.proxies_for_ftp.ToPacString())));
+ state.SetPath({"config", "rules", "fallback_proxies"}, base::Value(omitDirect(rules.fallback_proxies.ToPacString())));
+ break;
+ default:
+ NOTREACHED();
+ break;
+ }
+ state.SetByDottedPath("config.rules.type", base::Value(type));
+ state.SetByDottedPath("config.rules.bypass_rules", base::Value(rules.bypass_rules.ToString()));
+ state.SetByDottedPath("config.rules.reverse_bypass", base::Value(rules.reverse_bypass));
+ state.SetPath({"config", "rules", "type"}, base::Value(type));
+ state.SetPath({"config", "rules", "bypass_rules"}, base::Value(rules.bypass_rules.ToString()));
+ state.SetPath({"config", "rules", "reverse_bypass"}, base::Value(rules.reverse_bypass));
+}
+
+ProxyConfigMessageHandler::~ProxyConfigMessageHandler() {
@@ -943,9 +930,9 @@ new file mode 100644
+ net::ProxyConfigWithAnnotation config;
+ auto availability = proxy_config_service_->GetLatestProxyConfig(&config);
+
+ const PrefService::Preference* const pref =
+ pref_service_->FindPreference(proxy_config::prefs::kProxy);
+ ProxyConfigDictionary proxy_dict(pref->GetValue()->GetDict().Clone());
+ const base::Value* dict =
+ pref_service_->GetDictionary(proxy_config::prefs::kProxy);
+ ProxyConfigDictionary proxy_dict(dict->Clone());
+ ProxyPrefs::ProxyMode mode;
+ if (!proxy_dict.GetMode(&mode) || mode == ProxyPrefs::MODE_SYSTEM) {
+ availability = net::ProxyConfigService::CONFIG_UNSET;
@@ -957,8 +944,8 @@ new file mode 100644
+void ProxyConfigMessageHandler::OnClear(const base::Value::List& list) {
+ DCHECK_CURRENTLY_ON(BrowserThread::UI);
+
+ const base::Value::Dict cfg = ProxyConfigDictionary::CreateSystem();
+ pref_service_->SetDict(proxy_config::prefs::kProxy, cfg.Clone());
+ const base::Value cfg = ProxyConfigDictionary::CreateSystem();
+ pref_service_->Set(proxy_config::prefs::kProxy, cfg);
+ pref_service_->CommitPendingWrite();
+ OnEnableNotifyUIWithState(list);
+}
@@ -970,59 +957,77 @@ new file mode 100644
+ return;
+ }
+
+ const base::Value::Dict& config = list[0].GetDict();
+ const base::DictionaryValue* config = nullptr;
+ if (!list[0].GetAsDictionary(&config))
+ return;
+
+ if (config.FindBool("auto_detect").value_or(false)) {
+ const base::Value *autoDetect = config->FindKeyOfType("auto_detect", base::Value::Type::BOOLEAN);
+ if (autoDetect == nullptr)
+ return;
+
+ if (autoDetect->GetBool()) {
+ apply(net::ProxyConfig::CreateAutoDetect());
+ return;
+ }
+
+ if (const std::string* pacURL = config.FindString("pac_url")) {
+ absl::optional<bool> pacMandatory = config.FindBool("pac_mandatory");
+ auto proxyConfig = net::ProxyConfig::CreateFromCustomPacURL(
+ GURL(*pacURL));
+ proxyConfig.set_pac_mandatory(pacMandatory.value_or(false));
+ const base::Value *pacURL = config->FindKeyOfType("pac_url", base::Value::Type::STRING);
+ if (pacURL != nullptr) {
+ const base::Value *pacMandatory = config->FindKeyOfType("pac_mandatory", base::Value::Type::BOOLEAN);
+ if (pacMandatory == nullptr)
+ return;
+ auto proxyConfig = net::ProxyConfig::CreateFromCustomPacURL(GURL(pacURL->GetString()));
+ proxyConfig.set_pac_mandatory(pacMandatory->GetBool());
+
+ apply(proxyConfig);
+ return;
+ }
+
+ const base::Value::Dict* rules = config.FindDict("rules");
+ const base::Value *rules = config->FindKeyOfType("rules", base::Value::Type::DICTIONARY);
+ if (rules == nullptr)
+ return;
+
+ net::ProxyConfig proxyConfig;
+ bool readBypass = false;
+
+ const std::string* type = rules->FindString("type");
+ const base::Value *type = rules->FindKeyOfType("type", base::Value::Type::STRING);
+ if (type == nullptr)
+ return;
+
+ if (*type == "list") {
+ const std::string* single_proxies = rules->FindString("single_proxies");
+ net::ProxyConfig proxyConfig;
+
+ bool readBypass = false;
+
+ auto t = type->GetString();
+ if (t == "list") {
+ const base::Value *single_proxies = rules->FindKeyOfType("single_proxies", base::Value::Type::STRING);
+ if (single_proxies == nullptr)
+ return;
+ proxyConfig.proxy_rules().type = net::ProxyConfig::ProxyRules::Type::PROXY_LIST;
+ proxyConfig.proxy_rules().single_proxies.SetFromPacString(*single_proxies);
+ proxyConfig.proxy_rules().single_proxies.SetFromPacString(single_proxies->GetString());
+ readBypass = true;
+ } else if (*type == "list_per_scheme") {
+ const std::string* http = rules->FindString("proxies_for_http");
+ const std::string* https = rules->FindString("proxies_for_https");
+ const std::string* ftp = rules->FindString("proxies_for_ftp");
+ const std::string* fallback = rules->FindString("fallback_proxies");
+ } else if (t == "list_per_scheme") {
+ const base::Value *http = rules->FindKeyOfType("proxies_for_http", base::Value::Type::STRING);
+ if (http == nullptr)
+ return;
+
+ const base::Value *https = rules->FindKeyOfType("proxies_for_https", base::Value::Type::STRING);
+ if (https == nullptr)
+ return;
+
+ const base::Value *ftp = rules->FindKeyOfType("proxies_for_ftp", base::Value::Type::STRING);
+ if (ftp == nullptr)
+ return;
+
+ const base::Value *fallback = rules->FindKeyOfType("fallback_proxies", base::Value::Type::STRING);
+ if (fallback == nullptr)
+ return;
+
+ proxyConfig.proxy_rules().type = net::ProxyConfig::ProxyRules::Type::PROXY_LIST_PER_SCHEME;
+ if (http)
+ proxyConfig.proxy_rules().proxies_for_http.SetFromPacString(*http);
+ if (https)
+ proxyConfig.proxy_rules().proxies_for_https.SetFromPacString(*https);
+ if (ftp)
+ proxyConfig.proxy_rules().proxies_for_ftp.SetFromPacString(*ftp);
+ if (fallback)
+ proxyConfig.proxy_rules().fallback_proxies.SetFromPacString(*fallback);
+ proxyConfig.proxy_rules().proxies_for_http.SetFromPacString(http->GetString());
+ proxyConfig.proxy_rules().proxies_for_https.SetFromPacString(https->GetString());
+ proxyConfig.proxy_rules().proxies_for_ftp.SetFromPacString(ftp->GetString());
+ proxyConfig.proxy_rules().fallback_proxies.SetFromPacString(fallback->GetString());
+ readBypass = true;
+ } else if (*type == "direct") {
+ } else if (t == "direct") {
+ proxyConfig.proxy_rules().type = net::ProxyConfig::ProxyRules::Type::EMPTY;
+ } else if (*type == "none") {
+ } else if (t == "none") {
+ base::Value::List empty;
+ OnClear(empty);
+ return;
@@ -1034,14 +1039,16 @@ new file mode 100644
+
+ // bypass rules and reverse flag are common to both list types of proxy rules
+ if (readBypass) {
+ const std::string* bypass_rules = rules->FindString("bypass_rules");
+ const base::Value *bypass_rules = rules->FindKeyOfType("bypass_rules", base::Value::Type::STRING);
+ if (bypass_rules == nullptr)
+ return;
+
+ absl::optional<bool> reverse_bypass = rules->FindBool("reverse_bypass");
+ const base::Value *reverse_bypass = rules->FindKeyOfType("reverse_bypass", base::Value::Type::BOOLEAN);
+ if (reverse_bypass == nullptr)
+ return;
+
+ proxyConfig.proxy_rules().bypass_rules.ParseFromString(*bypass_rules);
+ proxyConfig.proxy_rules().reverse_bypass = reverse_bypass.value_or(false);
+ proxyConfig.proxy_rules().bypass_rules.ParseFromString(bypass_rules->GetString());
+ proxyConfig.proxy_rules().reverse_bypass = reverse_bypass->GetBool();
+ }
+
+ apply(proxyConfig);
@@ -1049,22 +1056,22 @@ new file mode 100644
+
+void ProxyConfigMessageHandler::apply(const net::ProxyConfig& proxyConfig) {
+ if (proxyConfig.auto_detect()) {
+ const base::Value::Dict cfg = ProxyConfigDictionary::CreateAutoDetect();
+ pref_service_->SetDict(proxy_config::prefs::kProxy, cfg.Clone());
+ const base::Value cfg = ProxyConfigDictionary::CreateAutoDetect();
+ pref_service_->Set(proxy_config::prefs::kProxy, cfg);
+ } else if (proxyConfig.has_pac_url()) {
+ const base::Value::Dict cfg = ProxyConfigDictionary::CreatePacScript(proxyConfig.pac_url().spec(), proxyConfig.pac_mandatory());
+ pref_service_->SetDict(proxy_config::prefs::kProxy, cfg.Clone());
+ const base::Value cfg = ProxyConfigDictionary::CreatePacScript(proxyConfig.pac_url().spec(), proxyConfig.pac_mandatory());
+ pref_service_->Set(proxy_config::prefs::kProxy, cfg);
+ } else if (proxyConfig.proxy_rules().type == net::ProxyConfig::ProxyRules::Type::EMPTY) {
+ const base::Value::Dict cfg = ProxyConfigDictionary::CreateDirect();
+ pref_service_->SetDict(proxy_config::prefs::kProxy, cfg.Clone());
+ const base::Value cfg = ProxyConfigDictionary::CreateDirect();
+ pref_service_->Set(proxy_config::prefs::kProxy, cfg);
+ } else {
+ auto proxyRulesAsString = proxyConfig.proxy_rules().ToString();
+ auto bypassRulesAsString = proxyConfig.proxy_rules().bypass_rules.ToString();
+
+ // fixed servers
+ const base::Value::Dict cfg = ProxyConfigDictionary::CreateFixedServers(proxyRulesAsString,
+ const base::Value cfg = ProxyConfigDictionary::CreateFixedServers(proxyRulesAsString,
+ bypassRulesAsString, proxyConfig.proxy_rules().reverse_bypass);
+ pref_service_->SetDict(proxy_config::prefs::kProxy, cfg.Clone());
+ pref_service_->Set(proxy_config::prefs::kProxy, cfg);
+ }
+ pref_service_->CommitPendingWrite();
+
@@ -1080,13 +1087,7 @@ new file mode 100644
+ web_ui->AddMessageHandler(std::make_unique<ProxyConfigMessageHandler>(profile));
+
+ // Set up the chrome://proxy/ source.
+ content::WebUIDataSource* source =
+ content::WebUIDataSource::CreateAndAdd(web_ui->GetWebContents()->GetBrowserContext(),
+ chrome::kChromeUIProxyConfigHost);
+
+ source->UseStringsJs();
+ source->AddResourcePath("proxy_config.js", IDR_PROXY_CONFIG_JS);
+ source->SetDefaultResource(IDR_PROXY_CONFIG_HTML);
+ content::WebUIDataSource::Add(profile, CreateProxyConfigHTMLSource());
+}
diff --git a/chrome/browser/ui/webui/proxy_config_ui.h b/chrome/browser/ui/webui/proxy_config_ui.h
new file mode 100644
@@ -1127,7 +1128,7 @@ new file mode 100644
diff --git a/chrome/common/webui_url_constants.cc b/chrome/common/webui_url_constants.cc
--- a/chrome/common/webui_url_constants.cc
+++ b/chrome/common/webui_url_constants.cc
@@ -49,6 +49,8 @@ const char kChromeUICertificateViewerHost[] = "view-cert";
@@ -45,6 +45,8 @@ const char kChromeUICertificateViewerHost[] = "view-cert";
const char kChromeUICertificateViewerURL[] = "chrome://view-cert/";
const char kChromeUIChromeSigninHost[] = "chrome-signin";
const char kChromeUIChromeSigninURL[] = "chrome://chrome-signin/";
@@ -1136,17 +1137,17 @@ diff --git a/chrome/common/webui_url_constants.cc b/chrome/common/webui_url_cons
const char kChromeUIChromeURLsHost[] = "chrome-urls";
const char kChromeUIChromeURLsURL[] = "chrome://chrome-urls/";
const char kChromeUIComponentsHost[] = "components";
@@ -460,6 +462,7 @@ bool IsSystemWebUIHost(base::StringPiece host) {
kChromeUILockScreenNetworkHost,
kChromeUILockScreenStartReauthHost,
kChromeUIMobileSetupHost,
+ kChromeUIProxyConfigHost,
kChromeUIMultiDeviceSetupHost,
kChromeUINetworkHost,
kChromeUINotificationTesterHost,
@@ -760,6 +763,7 @@ const char* const kChromeHostURLs[] = {
@@ -419,6 +421,7 @@ bool IsSystemWebUIHost(base::StringPiece host) {
kChromeUILockScreenNetworkHost,
kChromeUILockScreenStartReauthHost,
kChromeUIMobileSetupHost,
+ kChromeUIProxyConfigHost,
kChromeUIMultiDeviceSetupHost,
kChromeUINetworkHost,
kChromeUINotificationTesterHost,
@@ -674,6 +677,7 @@ const char* const kChromeHostURLs[] = {
#if !BUILDFLAG(IS_ANDROID)
#if !BUILDFLAG(IS_CHROMEOS)
#if !BUILDFLAG(IS_CHROMEOS_ASH)
kChromeUIAppLauncherPageHost,
+ kChromeUIProxyConfigHost,
#endif
@@ -1155,10 +1156,10 @@ diff --git a/chrome/common/webui_url_constants.cc b/chrome/common/webui_url_cons
diff --git a/chrome/common/webui_url_constants.h b/chrome/common/webui_url_constants.h
--- a/chrome/common/webui_url_constants.h
+++ b/chrome/common/webui_url_constants.h
@@ -134,6 +134,8 @@ extern const char kChromeUINTPTilesInternalsHost[];
@@ -133,6 +133,8 @@ extern const char kChromeUIMemoryInternalsHost[];
extern const char kChromeUINTPTilesInternalsHost[];
extern const char kChromeUINaClHost[];
extern const char kChromeUINetExportHost[];
extern const char kChromeUINetExportURL[];
+extern const char kChromeUIProxyConfigHost[];
+extern const char kChromeUIProxyConfigURL[];
extern const char kChromeUINetInternalsHost[];
@@ -1167,24 +1168,7 @@ diff --git a/chrome/common/webui_url_constants.h b/chrome/common/webui_url_const
diff --git a/components/proxy_config/pref_proxy_config_tracker_impl.cc b/components/proxy_config/pref_proxy_config_tracker_impl.cc
--- a/components/proxy_config/pref_proxy_config_tracker_impl.cc
+++ b/components/proxy_config/pref_proxy_config_tracker_impl.cc
@@ -244,14 +244,14 @@ PrefProxyConfigTrackerImpl::GetEffectiveProxyConfig(
// static
void PrefProxyConfigTrackerImpl::RegisterPrefs(PrefRegistrySimple* registry) {
registry->RegisterDictionaryPref(proxy_config::prefs::kProxy,
- ProxyConfigDictionary::CreateSystem());
+ ProxyConfigDictionary::CreateDirect());
}
// static
void PrefProxyConfigTrackerImpl::RegisterProfilePrefs(
PrefRegistrySimple* registry) {
registry->RegisterDictionaryPref(proxy_config::prefs::kProxy,
- ProxyConfigDictionary::CreateSystem());
+ ProxyConfigDictionary::CreateDirect());
registry->RegisterBooleanPref(proxy_config::prefs::kUseSharedProxies, false);
}
@@ -388,6 +388,7 @@ bool PrefProxyConfigTrackerImpl::PrefConfigToNetConfig(
@@ -381,6 +381,7 @@ bool PrefProxyConfigTrackerImpl::PrefConfigToNetConfig(
if (proxy_dict.GetBypassList(&proxy_bypass)) {
proxy_config.proxy_rules().bypass_rules.ParseFromString(proxy_bypass);
}
@@ -1204,47 +1188,46 @@ diff --git a/components/proxy_config/proxy_config_dictionary.cc b/components/pro
} // namespace
@@ -76,6 +78,14 @@ bool ProxyConfigDictionary::HasBypassList() const {
return dict_.Find(kProxyBypassList);
@@ -78,6 +80,14 @@ bool ProxyConfigDictionary::HasBypassList() const {
return dict_.FindKey(kProxyBypassList);
}
+bool ProxyConfigDictionary::HasReverseBypass() const {
+ const base::Value* value = dict_.Find(kProxyReverseBypass);
+ const base::Value* value = dict_.FindKey(kProxyReverseBypass);
+ if (!value || !value->is_bool()) {
+ return false;
+ }
+ return value->GetBool();
+}
+
const base::Value::Dict& ProxyConfigDictionary::GetDictionary() const {
const base::Value& ProxyConfigDictionary::GetDictionary() const {
return dict_;
}
@@ -83,13 +93,13 @@ const base::Value::Dict& ProxyConfigDictionary::GetDictionary() const {
@@ -85,29 +95,30 @@ const base::Value& ProxyConfigDictionary::GetDictionary() const {
// static
base::Value::Dict ProxyConfigDictionary::CreateDirect() {
base::Value ProxyConfigDictionary::CreateDirect() {
return CreateDictionary(ProxyPrefs::MODE_DIRECT, std::string(), false,
- std::string(), std::string());
+ std::string(), std::string(), false);
}
// static
base::Value::Dict ProxyConfigDictionary::CreateAutoDetect() {
base::Value ProxyConfigDictionary::CreateAutoDetect() {
return CreateDictionary(ProxyPrefs::MODE_AUTO_DETECT, std::string(), false,
- std::string(), std::string());
+ std::string(), std::string(), false);
}
// static
@@ -97,16 +107,17 @@ base::Value::Dict ProxyConfigDictionary::CreatePacScript(
const std::string& pac_url,
bool pac_mandatory) {
base::Value ProxyConfigDictionary::CreatePacScript(const std::string& pac_url,
bool pac_mandatory) {
return CreateDictionary(ProxyPrefs::MODE_PAC_SCRIPT, pac_url, pac_mandatory,
- std::string(), std::string());
+ std::string(), std::string(), false);
}
// static
base::Value::Dict ProxyConfigDictionary::CreateFixedServers(
base::Value ProxyConfigDictionary::CreateFixedServers(
const std::string& proxy_server,
- const std::string& bypass_list) {
+ const std::string& bypass_list,
@@ -1256,33 +1239,33 @@ diff --git a/components/proxy_config/proxy_config_dictionary.cc b/components/pro
} else {
return CreateDirect();
}
@@ -115,7 +126,7 @@ base::Value::Dict ProxyConfigDictionary::CreateFixedServers(
@@ -116,7 +127,7 @@ base::Value ProxyConfigDictionary::CreateFixedServers(
// static
base::Value::Dict ProxyConfigDictionary::CreateSystem() {
base::Value ProxyConfigDictionary::CreateSystem() {
return CreateDictionary(ProxyPrefs::MODE_SYSTEM, std::string(), false,
- std::string(), std::string());
+ std::string(), std::string(), false);
}
// static
@@ -124,7 +135,8 @@ base::Value::Dict ProxyConfigDictionary::CreateDictionary(
@@ -125,7 +136,8 @@ base::Value ProxyConfigDictionary::CreateDictionary(
const std::string& pac_url,
bool pac_mandatory,
const std::string& proxy_server,
- const std::string& bypass_list) {
+ const std::string& bypass_list,
+ bool reverse_bypass) {
base::Value::Dict dict;
dict.Set(kProxyMode, base::Value(ProxyModeToString(mode)));
base::Value dict(base::Value::Type::DICTIONARY);
dict.SetKey(kProxyMode, base::Value(ProxyModeToString(mode)));
if (!pac_url.empty()) {
@@ -133,8 +145,10 @@ base::Value::Dict ProxyConfigDictionary::CreateDictionary(
@@ -134,8 +146,10 @@ base::Value ProxyConfigDictionary::CreateDictionary(
}
if (!proxy_server.empty())
dict.Set(kProxyServer, base::Value(proxy_server));
dict.SetKey(kProxyServer, base::Value(proxy_server));
- if (!bypass_list.empty())
+ if (!bypass_list.empty()) {
dict.Set(kProxyBypassList, base::Value(bypass_list));
+ dict.Set(kProxyReverseBypass, base::Value(reverse_bypass));
dict.SetKey(kProxyBypassList, base::Value(bypass_list));
+ dict.SetKey(kProxyReverseBypass, base::Value(reverse_bypass));
+ }
return dict;
}
@@ -1296,37 +1279,37 @@ diff --git a/components/proxy_config/proxy_config_dictionary.h b/components/prox
bool HasBypassList() const;
+ bool HasReverseBypass() const;
const base::Value::Dict& GetDictionary() const;
const base::Value& GetDictionary() const;
@@ -50,7 +51,8 @@ class PROXY_CONFIG_EXPORT ProxyConfigDictionary {
static base::Value::Dict CreatePacScript(const std::string& pac_url,
bool pac_mandatory);
static base::Value::Dict CreateFixedServers(const std::string& proxy_server,
- const std::string& bypass_list);
+ const std::string& bypass_list,
+ bool reverse_bypass);
static base::Value::Dict CreateSystem();
static base::Value CreatePacScript(const std::string& pac_url,
bool pac_mandatory);
static base::Value CreateFixedServers(const std::string& proxy_server,
- const std::string& bypass_list);
+ const std::string& bypass_list,
+ bool reverse_bypass);
static base::Value CreateSystem();
// Encodes the proxy server as "<url-scheme>=<proxy-scheme>://<proxy>".
@@ -66,7 +68,8 @@ class PROXY_CONFIG_EXPORT ProxyConfigDictionary {
const std::string& pac_url,
bool pac_mandatory,
const std::string& proxy_server,
- const std::string& bypass_list);
+ const std::string& bypass_list,
+ bool reverse_bypass);
const std::string& pac_url,
bool pac_mandatory,
const std::string& proxy_server,
- const std::string& bypass_list);
+ const std::string& bypass_list,
+ bool reverse_bypass);
base::Value::Dict dict_;
base::Value dict_;
};
diff --git a/components/proxy_config/proxy_policy_handler.cc b/components/proxy_config/proxy_policy_handler.cc
--- a/components/proxy_config/proxy_policy_handler.cc
+++ b/components/proxy_config/proxy_policy_handler.cc
@@ -376,7 +376,7 @@ void ProxyPolicyHandler::ApplyPolicySettings(const PolicyMap& policies,
set_proxy_pref_value(ProxyConfigDictionary::CreateFixedServers(
server->GetString(), bypass_list && bypass_list->is_string()
? bypass_list->GetString()
- : std::string()));
+ : std::string(), false));
@@ -260,7 +260,7 @@ void ProxyPolicyHandler::ApplyPolicySettings(const PolicyMap& policies,
ProxyConfigDictionary::CreateFixedServers(
server->GetString(), bypass_list && bypass_list->is_string()
? bypass_list->GetString()
- : std::string()));
+ : std::string(), false));
}
break;
}
@@ -1354,8 +1337,8 @@ diff --git a/net/proxy_resolution/proxy_config.cc b/net/proxy_resolution/proxy_c
+ // special case: a single proxy servers list specified
+ if (type == Type::PROXY_LIST) {
+ std::string proxy_list;
+ for (const auto& proxy_chain : single_proxies.AllChains()) {
+ net::ProxyServer proxy_server = proxy_chain.GetProxyServer(/*chain_index=*/0);
+ for (const ProxyServer& proxy_server :
+ single_proxies.GetAll()) {
+ proxy_list += ProxyServerToProxyUri(proxy_server) + ";";
+ }
+ // remove last semicolon
@@ -1373,20 +1356,20 @@ diff --git a/net/proxy_resolution/proxy_config.cc b/net/proxy_resolution/proxy_c
+
+ // start to build a per-scheme list
+ std::string list;
+ for (const auto& proxy_chain : proxies_for_http.AllChains()) {
+ net::ProxyServer proxy_server = proxy_chain.GetProxyServer(/*chain_index=*/0);
+ for (const ProxyServer& proxy_server :
+ proxies_for_http.GetAll()) {
+ list += "http=" + ProxyServerToProxyUri(proxy_server) + ";";
+ }
+ for (const auto& proxy_chain : proxies_for_https.AllChains()) {
+ net::ProxyServer proxy_server = proxy_chain.GetProxyServer(/*chain_index=*/0);
+ for (const ProxyServer& proxy_server :
+ proxies_for_https.GetAll()) {
+ list += "https=" + ProxyServerToProxyUri(proxy_server) + ";";
+ }
+ for (const auto& proxy_chain : proxies_for_ftp.AllChains()) {
+ net::ProxyServer proxy_server = proxy_chain.GetProxyServer(/*chain_index=*/0);
+ for (const ProxyServer& proxy_server :
+ proxies_for_ftp.GetAll()) {
+ list += "ftp=" + ProxyServerToProxyUri(proxy_server) + ";";
+ }
+ for (const auto& proxy_chain : fallback_proxies.AllChains()) {
+ net::ProxyServer proxy_server = proxy_chain.GetProxyServer(/*chain_index=*/0);
+ for (const ProxyServer& proxy_server :
+ fallback_proxies.GetAll()) {
+ list += "socks=" + ProxyServerToProxyUri(proxy_server) + ";";
+ }
+ if (list.length() != 0 ) {
@@ -1413,3 +1396,4 @@ diff --git a/net/proxy_resolution/proxy_config.h b/net/proxy_resolution/proxy_co
// Returns one of {&proxies_for_http, &proxies_for_https, &proxies_for_ftp,
// &fallback_proxies}, or NULL if there is no proxy to use.
--
2.25.1
File diff suppressed because it is too large Load Diff
@@ -1,343 +0,0 @@
From: uazo <uazo@users.noreply.github.com>
Date: Sat, 7 Nov 2020 21:59:18 +0000
Subject: Add autoplay site setting
Original License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
Require: Content-settings-infrastructure.patch
---
.../res/drawable-hdpi/settings_autoplay.png | Bin 0 -> 456 bytes
.../res/drawable-mdpi/settings_autoplay.png | Bin 0 -> 296 bytes
.../res/drawable-xhdpi/settings_autoplay.png | Bin 0 -> 551 bytes
.../res/drawable-xxhdpi/settings_autoplay.png | Bin 0 -> 792 bytes
.../drawable-xxxhdpi/settings_autoplay.png | Bin 0 -> 1064 bytes
.../impl/BromiteAutoplayContentSetting.java | 93 ++++++++++++++++++
.../bromite_content_settings/autoplay.grdp | 21 ++++
.../bromite_content_settings/autoplay.inc | 12 +++
.../core/browser/content_settings_registry.cc | 2 +-
.../core/html/media/autoplay_policy.cc | 14 +++
.../core/html/media/autoplay_policy.h | 4 +
11 files changed, 145 insertions(+), 1 deletion(-)
create mode 100644 components/browser_ui/site_settings/android/java/res/drawable-hdpi/settings_autoplay.png
create mode 100644 components/browser_ui/site_settings/android/java/res/drawable-mdpi/settings_autoplay.png
create mode 100644 components/browser_ui/site_settings/android/java/res/drawable-xhdpi/settings_autoplay.png
create mode 100644 components/browser_ui/site_settings/android/java/res/drawable-xxhdpi/settings_autoplay.png
create mode 100644 components/browser_ui/site_settings/android/java/res/drawable-xxxhdpi/settings_autoplay.png
create mode 100644 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromiteAutoplayContentSetting.java
create mode 100644 components/browser_ui/strings/bromite_content_settings/autoplay.grdp
create mode 100644 components/content_settings/core/browser/bromite_content_settings/autoplay.inc
diff --git a/components/browser_ui/site_settings/android/java/res/drawable-hdpi/settings_autoplay.png b/components/browser_ui/site_settings/android/java/res/drawable-hdpi/settings_autoplay.png
new file mode 100644
index 0000000000000000000000000000000000000000..a8a9265f14cd8445ad1f55845099e60dc3c4edf1
GIT binary patch
literal 456
zcmV;(0XP1MP)<h;3K|Lk000e1NJLTq001Na001Ni1ONa4O9@aD0004xNkl<Zcmd^>
zv2MaJ5QYmZs7m@68Tt%)0T}7#GcJmh4B69}fh}W`x!sUhd4N1chpY%8u@-es;cQTy
zGbWY1VQ**q%l&uuT^{am%=;qbIaI7>hvTfF;<*Ut{eMAbL!QB&HFUzBXR~2P41Zx8
z)>!6-O>RP(9xN_j-$FSZiy-wPUj)-Jl(4<5Et;Mc!<K5}jwP!>dwn%v3G5VXX+fR6
zfpz3x+Y|Y)K6`aNHVw{qdv4}^DAdl0F;g<cu%;M_QeJHg8RVIajV_AK%qV!0vEmv1
z#vVbjZa-Q+lSd;emiMaVzX)Z*+nGY^7d%tYY9KFz2z6mO9x2+}RepX<5}`zKxo)iR
zz{m)~NhMClXs`4GHM$vG2T_S4KzpqpIGl{BX8{q3sfX5s0TlVSK=Ataj-&0{v9#{N
z{;&j_q`#yfB8jBm<%OhAge7edm84b@`b2QRo9WRKN#xNwD<h5zoBL8ri$BDs;tw$`
y{$1Kp0i#npN<C~x1#L&}8>IV|-Tf!x{>CqV{oZM{Igf1s0000<MNUMnLSTY>m&@A#
literal 0
HcmV?d00001
diff --git a/components/browser_ui/site_settings/android/java/res/drawable-mdpi/settings_autoplay.png b/components/browser_ui/site_settings/android/java/res/drawable-mdpi/settings_autoplay.png
new file mode 100644
index 0000000000000000000000000000000000000000..49fa10d44f4007532d0d03d15fdcb1a715857e96
GIT binary patch
literal 296
zcmV+@0oVSCP)<h;3K|Lk000e1NJLTq000;O000;W1ONa4N`Cco0002*Nkl<Zc-p;F
zu?>ST5R5=Hk+X;yg9#|y{3AI^L4jN_0yR^lp<y0UAY}`bhK9U}6x+c{;s$?XpYHT`
z_WQ8+DiaXc!3Y!8NIOv`U+9>_9hQ%}W9}t45w<H~z#4hQDkf8`VbB=1O|%hcI?jda
zV;k+`LgB0>TQfw*%xg4TCAk}wycg<C;jW}mI*Sz_g!XRC-~-OCu{Db@O*?8?8^Rj&
zS{^N1H6fiLjCAC#fRLNPkP|W*!URjjT!AiQtzvYZ{t%#iA(xXD1Xz-(u@oBGf2}Be
u*BbnAfuj*Re80yVxjo)NA1L&T?!2C$I@?4>V>|Ky0000<MNUMnLSTX*1bI&Y
literal 0
HcmV?d00001
diff --git a/components/browser_ui/site_settings/android/java/res/drawable-xhdpi/settings_autoplay.png b/components/browser_ui/site_settings/android/java/res/drawable-xhdpi/settings_autoplay.png
new file mode 100644
index 0000000000000000000000000000000000000000..5a4128a5e02949de754f9cab2635824eda8c539c
GIT binary patch
literal 551
zcmV+?0@(eDP)<h;3K|Lk000e1NJLTq001xm001xu1ONa4{R=S+0005*Nkl<Zc-rk(
zy>fy;5RRo0wX?Hwh9Zw(#Vgp}9uO@kj!GT?W_XdLp-A4qiidDg@B~=L$xN`2Fo6Ry
zoC`9!!WnNX*>%6WZ+~v@;l6HTnG5Pb03nIUF_Q>F2&iK&{=v0ABR=d&Dwa&+>$CpO
zN8o1rO<Uv$u0HDF9##;Ow3|Q-tE-%+18~W?=HLW7u&HLKOxcVLm1<yTUrsfUGq~xX
zqx<cUyx0DE0A@`^cGeUaIn=iCwjFlbea(GBJf>jQOd%dgDu@oJ0JqvZU3NJ!T~_A+
zw>7k!d)Tk%U1PSM!@i8g3Qx?K@4o3Chv27xSRb|1lL*LZCn{;7NuQNv<q5!Ftw$V!
zc)av3R5$TCJ)+DZDSW^ao>676eW3vl6flwYSMx=l(G+1kL4+N%tlEhfAQy}(nDFWr
zbXw{Z4tCiO1OTTBcDW68nyP>kgahDIfn8VxO;uQ6Yd8Q-71auD*mMx(DnrEqaH<To
z&_)dhyat$p1K?CKh1bGGfX(<C05JbrZN`P>Q#wV`gM2wnZ5*JY22WGzg(js{SktOi
z^lWxu_H1_Y+jaYe^U~wOk$z>$zx3sgE%FC1e02PlFgl8cUvcTd1Q~vNjPEQT-<g7p
p?=l}ClAlmgAAvHTvG;Wo>j%AMEx!+_@2>y=002ovPDHLkV1fY;_gnw~
literal 0
HcmV?d00001
diff --git a/components/browser_ui/site_settings/android/java/res/drawable-xxhdpi/settings_autoplay.png b/components/browser_ui/site_settings/android/java/res/drawable-xxhdpi/settings_autoplay.png
new file mode 100644
index 0000000000000000000000000000000000000000..7fceb8c2b546970a3720e8ab225799aa03895b7f
GIT binary patch
literal 792
zcmV+z1LypSP)<h;3K|Lk000e1NJLTq002k;002k`1ONa4|Kxkj0008tNkl<ZcmeHN
zv2Nl_5Kd(&P^2J2k<wEAFOV*wK{6%nd}~AH7AGB@E1m)cC{TL;PY?@4L47q{DkQ2)
zgu;oFPN%!E!Ny}lw9<LD9oFB@H#0js!$l#56r!s*CDlL=Bg|=u6>VsP6)iEx2tCzs
zN?!=Ys;Vvm+R!dxZSbnPR`u*)=$?G~q+QDONj}}54UDQIpq+dnupUkhrgMXd90~(9
z>D-*sHYV1z%eSyr=BeO3;m5&Ge2@<pO;xiip5YmGMb*%ROFljhg4(L5++aL|o)4Xt
z#%NjP*f=bsMdO23efEqzx#k+Py)EC-cdk<X`U-t|-#g6Ixz21IO!tgFux}-M*tcpx
z+bE=rR*I5^H|s7_BE7>~l(<Z;9NA<MwvEhAv<UAec5h`y4E^$WnI||NFX<&hz9~zC
z>oA;)6G#{m)`C=tNtmpB)?rp!gtK?*J1gwU@xCMXrLcRedOG_Aoa>~>!hiCJ<GzU?
zU4g;RFi3>{ojT&^9q|2A6eswfXXRwNew}jUlw`DpvbTS<8sy~{`pMeAwZ6%yL!Xy$
zN2*G=JTQ;lS${M|)Hzo?si<yxhaM+sazIk*Xq?iqof0qI(UJg?P=^+O4kR2zHF)`D
zl|_IA)LCU-!l_0)@}9u|IUq50<g;J&;sK4Ankxn*pe__Vqj<GBGo&d7B%n^2OnV;x
zfh7Y}69W=Zr)o@h8E>K0Up2cT1|*=)t}wk-{0CUjdxjX0fI83Mf&Ybo(3S(znzB<m
z^)SCv%fntq6%#ah*z2DdwY@s>U#@89zg#sfKk^r7!;A&m>sd-zwDXs+niu)Z|Ao(>
z;TfMn@`obY`5%hfKBYBiHdqh(w`25gSn1i))3E8OQ(Krf&Sz(7oX<QX`)FaR!DvC-
z;R|!`ZTxsjnS4B@Ou=|cg8`miBTkKmz^eW)jLCUb2{*+b2?DrQRj0pNXexyiQpitx
WnED%yq_MdG0000<MNUMnLSTZmtagO}
literal 0
HcmV?d00001
diff --git a/components/browser_ui/site_settings/android/java/res/drawable-xxxhdpi/settings_autoplay.png b/components/browser_ui/site_settings/android/java/res/drawable-xxxhdpi/settings_autoplay.png
new file mode 100644
index 0000000000000000000000000000000000000000..92a315bb00ac1f4dc675e894bf4af3ba7c68bf39
GIT binary patch
literal 1064
zcmV+@1lRkCP)<h;3K|Lk000e1NJLTq003YB003YJ1ONa4NRhv@000B;Nkl<Zc-rk-
zF-Rjp6x}q5UMCS0#3Pl(5mH&l%1Q;{uKI6w6G2RqfI_g2*e8Om;Gwl(ZGDB6<Z@mY
z41!h)DtJW--GhTGoY}a$GqZ^U^QZnZ|INPr^Z%bejuk6btXQ$4Pc|mmBCFCqouNZL
z+*6<WxThXEbVmEE$`&^!KcwMX<5*@*wCR=nknxH(Yhrn8{DYY8r>Mvd@I-#RfhTrA
zML#uC<7*jKp)UCfqsuC_%t(wck71K;$=5J$u~{A)viWQYSLEv(xME8~Gk$Frr{wD&
zI9;0^#@?^uf&63!9@uK4#y8Tm7iz{GPOt-V=gT=S+ekOkUbdWb=Rw%P3EhS2?={j1
znNJh=@$S+WRQC#g>V2o{6{t=Z?|z3LG~wtMZ-y=hF8Pd>n~yV_n@0=J13_GRGrG;6
z!}Wm09<l3XrRL0HmmUXf$+b79b@vCEkE8V|m6_M4a5NCYj5h8ElLt5Mf{yv!1>6J^
zi6*pop5R{>=jCZ_r}{L`gMViY9x2#y;<%R48&%;r*r_TXTLH$uVB1MRu#FdSHKn7?
z`-}(CeD>8zNbpUBfCq&DBPizKc3=Bf2#S%UBhDc1I|)nBzrdE{;{7Yp^VBj!$TQBx
zU|S+zz^3T;B^;-eQx(qzY{qtLVzw3S*uwXXPwGdTn6<_H_N*cX4be2o$8UU5g&+nP
ztP-!%(B(t6s4>q!uz#qm24H<k2=lrzDi~B0_J233?tcwcDq&ZkQ87A!4)}QA%f<zu
zN+mDL=L_s0dX?>oQ*Am<Tmb4+LW?hjMXctzD}w*YO8`)&lA9OoSdl_b7mgzXK%Gi_
z?u=G6wV#{`bvXd)RH8aJPdie9oUbr@1vvofRPqXZWjjJ~o-Oiq9zP`qK%Gi{imxNF
z#ZV>GxMfcqM;3rOm2koVsD>M`&n>zm4?vwt*x~f|!wop&79@E9>Qn-8+GpV^zc}AJ
zFAqSSO71+T*$FqG_g1BxlLw$qrE-qb>xHV|o^zsEc>wBE^0J)HeYgSrw<?XaJOFhn
zHPW0;|APTQNjCuVDP;an+!=-&MJXXSYW_iHekj4JNd|K$X%6Ph52wvfXhcC<e@cl`
zVkxC4tod=0da3dbmbI2u4)v8)uq;{FLQA%=g_7RFmf@vE<BPjPEU%+9qVl@=7aZzW
zOoyYnVlw}dPjsfExn`|pg0EQ(zvwo+)xh{>55wDS3~zX{EoY-``m=49hBUsaw;r=*
z+}2~(e82VBHh+(@{oX!+2n#ThdxByg0maD|^ghF~58(`dil|N~cLlAek3rFLSGLCO
ib6hJ{tXQ#P#rX?0El=KlH_u1_0000<MNUMnLSTX(y!wd%
literal 0
HcmV?d00001
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromiteAutoplayContentSetting.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromiteAutoplayContentSetting.java
new file mode 100644
--- /dev/null
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromiteAutoplayContentSetting.java
@@ -0,0 +1,93 @@
+/*
+ This file is part of Bromite.
+
+ Bromite is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Bromite is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Bromite. If not, see <https://www.gnu.org/licenses/>.
+*/
+
+package org.chromium.components.browser_ui.site_settings.impl;
+
+import org.chromium.components.browser_ui.site_settings.R;
+
+import org.chromium.components.browser_ui.site_settings.BromiteCustomContentSetting;
+import org.chromium.components.browser_ui.site_settings.ContentSettingsResources;
+import org.chromium.components.browser_ui.site_settings.SiteSettingsCategory;
+import org.chromium.components.content_settings.ContentSettingValues;
+import org.chromium.components.content_settings.ContentSettingsType;
+import org.chromium.content_public.browser.BrowserContextHandle;
+
+import androidx.annotation.Nullable;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
+
+import java.util.ArrayList;
+
+public class BromiteAutoplayContentSetting extends BromiteCustomContentSetting {
+ public BromiteAutoplayContentSetting() {
+ super(/*contentSettingsType*/ ContentSettingsType.AUTOPLAY,
+ /*defaultEnabledValue*/ ContentSettingValues.ALLOW,
+ /*defaultDisabledValue*/ ContentSettingValues.BLOCK,
+ /*allowException*/ true,
+ /*preferenceKey*/ "autoplay",
+ /*profilePrefKey*/ "autoplay");
+ }
+
+ @Override
+ public ContentSettingsResources.ResourceItem getResourceItem() {
+ return new ContentSettingsResources.ResourceItem(
+ /*icon*/ R.drawable.settings_autoplay,
+ /*title*/ R.string.autoplay_permission_title,
+ /*defaultEnabledValue*/ getDefaultEnabledValue(),
+ /*defaultDisabledValue*/ getDefaultDisabledValue(),
+ /*enabledSummary*/ R.string.website_settings_category_autoplay_enabled,
+ /*disabledSummary*/ R.string.website_settings_category_autoplay_disabled,
+ /*summaryOverrideForScreenReader*/ 0);
+ }
+
+ @Override
+ public int getCategorySummary(@Nullable @ContentSettingValues int value) {
+ switch (value) {
+ case ContentSettingValues.ALLOW:
+ return R.string.website_settings_category_autoplay_enabled;
+ case ContentSettingValues.BLOCK:
+ return R.string.website_settings_category_autoplay_disabled;
+ default:
+ return 0;
+ }
+ }
+
+ @Override
+ public int getCategoryDescription() {
+ return R.string.website_settings_add_site_description_autoplay;
+ }
+
+ @Override
+ public boolean requiresTriStateContentSetting() {
+ return false;
+ }
+
+ @Override
+ public boolean showOnlyDescriptions() {
+ return true;
+ }
+
+ @Override
+ public int getAddExceptionDialogMessage() {
+ return R.string.website_settings_category_autoplay_enabled;
+ }
+
+ @Override
+ public @Nullable Boolean considerException(SiteSettingsCategory category, @ContentSettingValues int value) {
+ return value != ContentSettingValues.BLOCK;
+ }
+}
diff --git a/components/browser_ui/strings/bromite_content_settings/autoplay.grdp b/components/browser_ui/strings/bromite_content_settings/autoplay.grdp
new file mode 100644
--- /dev/null
+++ b/components/browser_ui/strings/bromite_content_settings/autoplay.grdp
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<grit-part>
+ <message name="IDS_AUTOPLAY_PERMISSION_TITLE" desc='Title for the Autoplay settings screen [CHAR-LIMIT=32]' formatter_data="android_java">
+ Autoplay
+ </message>
+ <message name="IDS_WEBSITE_SETTINGS_ADD_SITE_DESCRIPTION_AUTOPLAY" desc="The description for the allow autoplay of muted videos for website dialog." formatter_data="android_java">
+ Allow autoplay for a specific site.
+ </message>
+ <message name="IDS_WEBSITE_SETTINGS_CATEGORY_AUTOPLAY_ENABLED" desc="Summary text explaining that sites are allowed to compile JavaScript in JIT mode." formatter_data="android_java">
+ Allow sites to automatically play muted videos
+ </message>
+ <message name="IDS_WEBSITE_SETTINGS_CATEGORY_AUTOPLAY_DISABLED" desc="Summary text explaining that sites are running JavaScript in JITless mode." formatter_data="android_java">
+ Autoplay disabled
+ </message>
+ <message name="IDS_SETTINGS_SITE_SETTINGS_AUTOPLAY_ALLOWED_EXCEPTIONS" desc="Label for the allowed exceptions site list of the autoplay setting.">
+ Allowed to autoplay
+ </message>
+ <message name="IDS_SETTINGS_SITE_SETTINGS_AUTOPLAY_BLOCKED_EXCEPTIONS" desc="Label for the blocked exceptions site list of the autoplay setting.">
+ Not allowed to autoplay
+ </message>
+</grit-part>
diff --git a/components/content_settings/core/browser/bromite_content_settings/autoplay.inc b/components/content_settings/core/browser/bromite_content_settings/autoplay.inc
new file mode 100644
--- /dev/null
+++ b/components/content_settings/core/browser/bromite_content_settings/autoplay.inc
@@ -0,0 +1,12 @@
+ content_settings::WebsiteSettingsRegistry::GetInstance()
+ ->GetMutable(ContentSettingsType::AUTOPLAY)
+ ->set_show_into_info_page()
+ .set_desktop_ui()
+ .set_is_renderer_content_setting()
+ .set_title_ui(IDS_AUTOPLAY_PERMISSION_TITLE)
+ .set_description_ui(IDS_WEBSITE_SETTINGS_ADD_SITE_DESCRIPTION_AUTOPLAY)
+ .set_allowed_ui(IDS_WEBSITE_SETTINGS_CATEGORY_AUTOPLAY_ENABLED)
+ .set_blocked_ui(IDS_WEBSITE_SETTINGS_CATEGORY_AUTOPLAY_DISABLED)
+ .set_allowed_exceptions_ui(IDS_SETTINGS_SITE_SETTINGS_AUTOPLAY_ALLOWED_EXCEPTIONS)
+ .set_blocked_exceptions_ui(IDS_SETTINGS_SITE_SETTINGS_AUTOPLAY_BLOCKED_EXCEPTIONS)
+ .set_mid_sentence_ui(IDS_AUTOPLAY_PERMISSION_TITLE);
diff --git a/components/content_settings/core/browser/content_settings_registry.cc b/components/content_settings/core/browser/content_settings_registry.cc
--- a/components/content_settings/core/browser/content_settings_registry.cc
+++ b/components/content_settings/core/browser/content_settings_registry.cc
@@ -255,7 +255,7 @@ void ContentSettingsRegistry::Init() {
ContentSettingsInfo::INHERIT_IN_INCOGNITO,
ContentSettingsInfo::EXCEPTIONS_ON_SECURE_ORIGINS_ONLY);
- Register(ContentSettingsType::AUTOPLAY, "autoplay", CONTENT_SETTING_ALLOW,
+ Register(ContentSettingsType::AUTOPLAY, "autoplay", CONTENT_SETTING_BLOCK,
WebsiteSettingsInfo::UNSYNCABLE, /*allowlisted_primary_schemes=*/{},
/*valid_settings=*/{CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK},
WebsiteSettingsInfo::TOP_ORIGIN_ONLY_SCOPE,
diff --git a/third_party/blink/renderer/core/html/media/autoplay_policy.cc b/third_party/blink/renderer/core/html/media/autoplay_policy.cc
--- a/third_party/blink/renderer/core/html/media/autoplay_policy.cc
+++ b/third_party/blink/renderer/core/html/media/autoplay_policy.cc
@@ -8,6 +8,7 @@
#include "third_party/blink/public/mojom/autoplay/autoplay.mojom-blink.h"
#include "third_party/blink/public/mojom/permissions_policy/permissions_policy.mojom-blink.h"
#include "third_party/blink/public/mojom/webpreferences/web_preferences.mojom-blink.h"
+#include "third_party/blink/public/platform/web_content_settings_client.h"
#include "third_party/blink/public/platform/web_media_player.h"
#include "third_party/blink/public/web/web_local_frame.h"
#include "third_party/blink/public/web/web_local_frame_client.h"
@@ -330,6 +331,8 @@ void AutoplayPolicy::TryUnlockingUserGesture() {
}
bool AutoplayPolicy::IsGestureNeededForPlayback() const {
+ if (!IsAutoplayAllowedPerSettings())
+ return true;
if (!IsLockedPendingUserGesture())
return false;
@@ -428,6 +431,17 @@ void AutoplayPolicy::MaybeSetAutoplayInitiated() {
}
}
+bool AutoplayPolicy::IsAutoplayAllowedPerSettings() const {
+ LocalFrame* frame = element_->GetDocument().GetFrame();
+ if (!frame)
+ return false;
+ if (auto* settings_client = frame->GetContentSettingsClient()) {
+ return settings_client->AllowContentSetting(
+ ContentSettingsType::AUTOPLAY, /*default_value*/ false);
+ }
+ return true;
+}
+
bool AutoplayPolicy::ShouldAutoplay() {
if (!element_->GetExecutionContext() ||
element_->GetExecutionContext()->IsSandboxed(
diff --git a/third_party/blink/renderer/core/html/media/autoplay_policy.h b/third_party/blink/renderer/core/html/media/autoplay_policy.h
--- a/third_party/blink/renderer/core/html/media/autoplay_policy.h
+++ b/third_party/blink/renderer/core/html/media/autoplay_policy.h
@@ -138,6 +138,10 @@ class CORE_EXPORT AutoplayPolicy final
// should use, if checking to see if an action is allowed.
bool IsLockedPendingUserGesture() const;
+ // Return true if and only if the settings allow autoplay of media on this
+ // frame.
+ bool IsAutoplayAllowedPerSettings() const;
+
bool IsAutoplayingMutedInternal(bool muted) const;
bool IsOrWillBeAutoplayingMutedInternal(bool muted) const;
--
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -12,24 +12,20 @@ See also: https://github.com/bromite/bromite/issues/1474
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
.../java/res/xml/privacy_preferences.xml | 10 ++++++++
.../browser/LaunchIntentDispatcher.java | 21 ++++++++++++++++
.../customtabs/CustomTabsConnection.java | 1 +
.../browser/LaunchIntentDispatcher.java | 22 +++++++++++++++++
.../IncognitoCustomTabIntentDataProvider.java | 6 +++++
.../privacy/settings/PrivacySettings.java | 24 +++++++++++++++++++
.../chrome/browser/tab/TabAssociatedApp.java | 6 ++++-
.../strings/android_chrome_strings.grd | 14 +++++++++++
.../core/common/language_experiments.cc | 1 +
.../add-custom-tab-intents-privacy-option.inc | 1 +
9 files changed, 83 insertions(+), 1 deletion(-)
create mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/add-custom-tab-intents-privacy-option.inc
.../strings/android_chrome_strings.grd | 15 ++++++++++++
6 files changed, 82 insertions(+), 1 deletion(-)
diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/android/java/res/xml/privacy_preferences.xml
--- a/chrome/android/java/res/xml/privacy_preferences.xml
+++ b/chrome/android/java/res/xml/privacy_preferences.xml
@@ -43,6 +43,16 @@ found in the LICENSE file.
@@ -55,6 +55,16 @@
android:fragment="org.chromium.chrome.browser.privacy.settings.DoNotTrackSettings"
android:key="do_not_track"
android:title="@string/do_not_track_title"
android:fragment="org.chromium.chrome.browser.privacy.settings.DoNotTrackSettings" />
android:title="@string/do_not_track_title"/>
+ <org.chromium.components.browser_ui.settings.ChromeSwitchPreference
+ android:key="allow_custom_tab_intents"
+ android:title="@string/allow_custom_tab_intents_title"
@@ -41,32 +37,39 @@ diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/androi
+ android:summary="@string/open_external_links_incognito_summary"
+ android:defaultValue="false" />
<Preference
android:key="preload_pages"
android:title="@string/preload_pages_title"
android:key="privacy_sandbox"
android:title="@string/prefs_privacy_sandbox"
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java b/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java
@@ -55,6 +55,9 @@ import java.lang.annotation.Retention;
@@ -44,6 +44,7 @@ import org.chromium.chrome.browser.notifications.NotificationPlatformBridge;
import org.chromium.chrome.browser.partnercustomizations.PartnerBrowserCustomizations;
import org.chromium.chrome.browser.searchwidget.SearchActivity;
import org.chromium.chrome.browser.tab.Tab;
+import org.chromium.chrome.browser.tab.TabLaunchType;
import org.chromium.chrome.browser.translate.TranslateIntentHandler;
import org.chromium.chrome.browser.util.AndroidTaskUtils;
import org.chromium.chrome.browser.vr.VrModuleProvider;
@@ -57,6 +58,8 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.Set;
+import org.chromium.chrome.browser.privacy.settings.PrivacySettings;
+import org.chromium.chrome.browser.tab.TabLaunchType;
+
/**
* Dispatches incoming intents to the appropriate activity based on the current configuration and
* Intent fired.
@@ -244,6 +247,9 @@ public class LaunchIntentDispatcher {
@@ -273,6 +276,9 @@ public class LaunchIntentDispatcher implements IntentHandler.IntentHandlerDelega
*/
public static boolean isCustomTabIntent(Intent intent) {
if (intent == null) return false;
+ if (!ContextUtils.getAppSharedPreferences()
+ .getBoolean(PrivacySettings.PREF_ALLOW_CUSTOM_TAB_INTENTS, false))
+ return false;
Log.w(
TAG,
"CustomTabsIntent#shouldAlwaysUseBrowserUI() = "
@@ -265,6 +271,10 @@ public class LaunchIntentDispatcher {
if (CustomTabsIntent.shouldAlwaysUseBrowserUI(intent)
|| !intent.hasExtra(CustomTabsIntent.EXTRA_SESSION)) {
return false;
@@ -292,6 +298,10 @@ public class LaunchIntentDispatcher implements IntentHandler.IntentHandlerDelega
newIntent.setData(uri);
newIntent.setClassName(context, CustomTabActivity.class.getName());
@@ -77,7 +80,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDis
// Since configureIntentForResizableCustomTab() might change the componenet/class
// associated with the passed intent, it needs to be called after #setClassName(context,
// CustomTabActivity.class.getName());
@@ -410,6 +420,17 @@ public class LaunchIntentDispatcher {
@@ -415,6 +425,18 @@ public class LaunchIntentDispatcher implements IntentHandler.IntentHandlerDelega
if (Intent.ACTION_VIEW.equals(newIntent.getAction())
&& !IntentHandler.wasIntentSenderChrome(newIntent)) {
@@ -92,24 +95,14 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDis
+ IntentHandler.setTabLaunchType(newIntent, TabLaunchType.FROM_EXTERNAL_APP);
+ newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ }
+
long time = SystemClock.elapsedRealtime();
if (!chromeTabbedTaskExists()) {
newIntent.putExtra(IntentHandler.EXTRA_STARTED_TABBED_CHROME_TASK, true);
}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java
@@ -850,6 +850,7 @@ public class CustomTabsConnection {
PostTask.postTask(
TaskTraits.UI_DEFAULT,
() -> {
+ if ((true)) return; // Disable CCTPostMessageAPI
// Attempt to verify origin synchronously. If successful directly initialize
// postMessage channel for session.
Uri verifiedOrigin = verifyOriginForSession(session, uid, postMessageOrigin);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/IncognitoCustomTabIntentDataProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/IncognitoCustomTabIntentDataProvider.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/IncognitoCustomTabIntentDataProvider.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/IncognitoCustomTabIntentDataProvider.java
@@ -38,6 +38,9 @@ import org.chromium.components.browser_ui.widget.TintedDrawable;
@@ -36,6 +36,9 @@ import org.chromium.components.browser_ui.widget.TintedDrawable;
import java.util.ArrayList;
import java.util.List;
@@ -119,31 +112,31 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Inco
/**
* A model class that parses the incoming intent for incognito Custom Tabs specific customization
* data.
@@ -115,6 +118,9 @@ public class IncognitoCustomTabIntentDataProvider extends BrowserServicesIntentD
@@ -109,6 +112,9 @@ public class IncognitoCustomTabIntentDataProvider extends BrowserServicesIntentD
}
private static boolean isIntentFromThirdPartyAllowed() {
+ if (ContextUtils.getAppSharedPreferences()
+ .getBoolean(PrivacySettings.PREF_OPEN_EXTERNAL_LINKS_INCOGNITO, false))
+ return true;
return ChromeFeatureList.sCctIncognitoAvailableToThirdParty.isEnabled();
return CachedFeatureFlags.isEnabled(
ChromeFeatureList.CCT_INCOGNITO_AVAILABLE_TO_THIRD_PARTY);
}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java
@@ -96,6 +96,9 @@ public class PrivacySettings extends ChromeBaseSettingsFragment
private ManagedPreferenceDelegate mManagedPreferenceDelegate;
private IncognitoLockSettings mIncognitoLockSettings;
@@ -81,6 +81,9 @@ public class PrivacySettings
private ViewGroup mDialogContainer;
private BottomSheetController mBottomSheetController;
+ private ChromeSwitchPreference allowCustomTabIntentsPref;
+ private ChromeSwitchPreference openExternalLinksPref;
+
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
getActivity().setTitle(R.string.prefs_privacy_security);
@@ -274,6 +277,9 @@ public class PrivacySettings extends ChromeBaseSettingsFragment
new SpanApplier.SpanInfo("<link2>", "</link2>", servicesLink));
PrivacyPreferencesManagerImpl privacyPrefManager =
@@ -148,6 +151,9 @@ public class PrivacySettings
updatePreferences();
}
+ public static final String PREF_ALLOW_CUSTOM_TAB_INTENTS = "allow_custom_tab_intents";
@@ -152,9 +145,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
String key = preference.getKey();
@@ -290,6 +296,14 @@ public class PrivacySettings extends ChromeBaseSettingsFragment
@@ -164,6 +170,14 @@ public class PrivacySettings
} else if (PREF_SEARCH_SUGGESTIONS.equals(key)) {
UserPrefs.get(getProfile())
UserPrefs.get(Profile.getLastUsedRegularProfile())
.setBoolean(Pref.SEARCH_SUGGEST_ENABLED, (boolean) newValue);
+ } else if (PREF_ALLOW_CUSTOM_TAB_INTENTS.equals(key)) {
+ SharedPreferences.Editor sharedPreferencesEditor = ContextUtils.getAppSharedPreferences().edit();
@@ -167,8 +160,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
}
return true;
}
@@ -312,6 +326,16 @@ public class PrivacySettings extends ChromeBaseSettingsFragment
UserPrefs.get(getProfile()).getBoolean(Pref.CAN_MAKE_PAYMENT_ENABLED));
@@ -186,6 +200,16 @@ public class PrivacySettings
canMakePaymentPref.setChecked(prefService.getBoolean(Pref.CAN_MAKE_PAYMENT_ENABLED));
}
+ allowCustomTabIntentsPref =
@@ -183,11 +176,11 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
+
Preference doNotTrackPref = findPreference(PREF_DO_NOT_TRACK);
if (doNotTrackPref != null) {
doNotTrackPref.setSummary(
doNotTrackPref.setSummary(prefService.getBoolean(Pref.ENABLE_DO_NOT_TRACK)
diff --git a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/TabAssociatedApp.java b/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/TabAssociatedApp.java
--- a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/TabAssociatedApp.java
+++ b/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/TabAssociatedApp.java
@@ -87,7 +87,11 @@ public final class TabAssociatedApp extends TabWebContentsUserData implements Im
@@ -84,7 +84,11 @@ public final class TabAssociatedApp extends TabWebContentsUserData implements Im
public static boolean isOpenedFromExternalApp(Tab tab) {
TabAssociatedApp app = get(tab);
if (app == null) return false;
@@ -203,9 +196,9 @@ diff --git a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/TabAsso
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd
--- a/chrome/browser/ui/android/strings/android_chrome_strings.grd
+++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
@@ -5152,6 +5152,20 @@ To change this setting, <ph name="BEGIN_LINK">BEGIN_LINK</ph>clear the Chrome da
<message name="IDS_NEAR_OOM_INTERVENTION_DECLINE" desc="The text of the button letting the user decline the browser's intervention, so that the page can resume what it was doing.">
Resume
@@ -4702,6 +4702,21 @@ To change this setting, <ph name="BEGIN_LINK">&lt;resetlink&gt;</ph>reset sync<p
<message name="IDS_NEAR_OOM_REDUCTION_DECLINE" desc="The text of the button letting the user decline the browser's intervention, so that the page can be reloaded.">
Show original
</message>
+ <!-- Allow custom tab intents -->
+ <message name="IDS_ALLOW_CUSTOM_TAB_INTENTS_TITLE" desc="Text for 'Allow custom tab intents' settings-privacy option.">
@@ -214,6 +207,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro
+ <message name="IDS_ALLOW_CUSTOM_TAB_INTENTS_SUMMARY" desc="Summary text for 'Allow custom tab intents' settings-privacy option.">
+ Allow applications to open custom tab intents, similar to webview.
+ </message>
+
+ <!-- Open External Links in Incognito -->
+ <message name="IDS_OPEN_EXTERNAL_LINKS_INCOGNITO_TITLE" desc="Text for 'Open external links in incognito' settings-privacy option.">
+ Open external links in incognito
@@ -221,22 +215,8 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro
+ <message name="IDS_OPEN_EXTERNAL_LINKS_INCOGNITO_SUMMARY" desc="Summary text for 'Open external links in incognito' settings-privacy option.">
+ Force the opening of all external links in incognito mode
+ </message>
<!-- Usage Stats strings -->
<message name="IDS_USAGE_STATS_CONSENT_TITLE" desc="Title for activity authorizing Digital Wellbeing to access Chrome usage data">
Show your Chrome activity in Digital Wellbeing?
diff --git a/components/language/core/common/language_experiments.cc b/components/language/core/common/language_experiments.cc
--- a/components/language/core/common/language_experiments.cc
+++ b/components/language/core/common/language_experiments.cc
@@ -24,4 +24,5 @@ BASE_FEATURE(kCctAutoTranslate,
// Params:
const char kContentLanguagesDisableObserversParam[] = "disable_observers";
+SET_CROMITE_FEATURE_DISABLED(kCctAutoTranslate);
} // namespace language
diff --git a/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/add-custom-tab-intents-privacy-option.inc b/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/add-custom-tab-intents-privacy-option.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/add-custom-tab-intents-privacy-option.inc
@@ -0,0 +1 @@
+SET_CROMITE_FEATURE_DISABLED(kCCTIntentFeatureOverrides);
<!-- Autofill Assistant preferences -->
<!-- TODO(b/168178344): Move to Assistant settings strings section below. -->
--
2.25.1
+21 -20
View File
@@ -17,7 +17,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/res/menu/main_menu.xml
--- a/chrome/android/java/res/menu/main_menu.xml
+++ b/chrome/android/java/res/menu/main_menu.xml
@@ -166,6 +166,9 @@ found in the LICENSE file.
@@ -159,6 +159,9 @@
<item android:id="@+id/managed_by_menu_id"
android:title="@string/managed_browser"
android:icon="@drawable/ic_business" />
@@ -27,7 +27,7 @@ diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/re
</group>
<!-- Items shown only in the tab switcher -->
@@ -192,6 +195,9 @@ found in the LICENSE file.
@@ -185,6 +188,9 @@
<item android:id="@id/preferences_id"
android:title="@string/menu_settings"
android:icon="@drawable/settings_cog" />
@@ -40,15 +40,15 @@ diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/re
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ApplicationLifetime.java b/chrome/android/java/src/org/chromium/chrome/browser/ApplicationLifetime.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/ApplicationLifetime.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ApplicationLifetime.java
@@ -7,6 +7,7 @@ package org.chromium.chrome.browser;
import org.jni_zero.CalledByNative;
@@ -6,6 +6,7 @@ package org.chromium.chrome.browser;
import org.chromium.base.ObserverList;
import org.chromium.base.annotations.CalledByNative;
+import org.chromium.chrome.browser.incognito.IncognitoNotificationManager;
/** Watches for when Chrome is told to restart itself. */
public class ApplicationLifetime {
@@ -39,6 +40,7 @@ public class ApplicationLifetime {
/**
* Watches for when Chrome is told to restart itself.
@@ -42,6 +43,7 @@ public class ApplicationLifetime {
@CalledByNative
public static void terminate(boolean restart) {
@@ -59,16 +59,16 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ApplicationLife
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
@@ -267,6 +267,8 @@ import java.util.concurrent.atomic.AtomicBoolean;
import java.util.function.BooleanSupplier;
import java.util.function.DoubleConsumer;
@@ -220,6 +220,8 @@ import java.util.HashSet;
import java.util.List;
import java.util.Locale;
+import org.chromium.chrome.browser.ApplicationLifetime;
+
/**
* This is the main activity for ChromeMobile when not running in document mode. All the tabs are
* accessible via a chrome specific tab switching UI.
@@ -2925,6 +2927,8 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
* This is the main activity for ChromeMobile when not running in document mode. All the tabs
* are accessible via a chrome specific tab switching UI.
@@ -2126,6 +2128,8 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
} else if (id == R.id.close_tab) {
getCurrentTabModel().closeTab(currentTab, true, false, true);
RecordUserAction.record("MobileTabClosed");
@@ -76,11 +76,11 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct
+ ApplicationLifetime.terminate(false);
} else if (id == R.id.close_all_tabs_menu_id) {
// Close both incognito and normal tabs.
CloseAllTabsDialog.show(
CloseAllTabsDialog.show(this, getModalDialogManagerSupplier(),
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
@@ -62,6 +62,7 @@ import org.chromium.chrome.R;
@@ -61,6 +61,7 @@ import org.chromium.chrome.R;
import org.chromium.chrome.browser.ActivityTabProvider;
import org.chromium.chrome.browser.ActivityUtils;
import org.chromium.chrome.browser.AppHooks;
@@ -88,7 +88,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv
import org.chromium.chrome.browser.ChromeActivitySessionTracker;
import org.chromium.chrome.browser.ChromeApplicationImpl;
import org.chromium.chrome.browser.ChromeKeyboardVisibilityDelegate;
@@ -2576,6 +2577,11 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
@@ -2313,6 +2314,11 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
return true;
}
@@ -98,12 +98,12 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv
+ }
+
if (id == R.id.update_menu_id) {
UpdateMenuItemHelper.getInstance(
getProfileProviderSupplier().get().getOriginalProfile())
UpdateMenuItemHelper.getInstance().onMenuItemClicked(this);
return true;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeLifetimeController.java b/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeLifetimeController.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeLifetimeController.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeLifetimeController.java
@@ -81,7 +81,11 @@ class ChromeLifetimeController
@@ -82,7 +82,11 @@ class ChromeLifetimeController implements ApplicationLifetime.Observer,
// Kick off a timer to kill the process after a delay, which fires only if the Activities
// take too long to be finished.
@@ -119,7 +119,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeLife
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd
--- a/chrome/browser/ui/android/strings/android_chrome_strings.grd
+++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
@@ -3745,6 +3745,9 @@ To change this setting, <ph name="BEGIN_LINK">BEGIN_LINK</ph>clear the Chrome da
@@ -3443,6 +3443,9 @@ To change this setting, <ph name="BEGIN_LINK">&lt;resetlink&gt;</ph>reset sync<p
<message name="IDS_MENU_AUTO_DARK_WEB_CONTENTS" desc="Menu item in Chrome's overflow/options menu. When Chrome's browser UI is set to dark theme and this option is checked, sites will have a dark theme automatically applied as well. [CHAR_LIMIT=24]">
Dark theme
</message>
@@ -130,3 +130,4 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro
Appearance
</message>
--
2.25.1
@@ -7,105 +7,20 @@ and internal chrome:// pages will be used for the autocomplete results.
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
.../browser/autocomplete_controller.cc | 10 ++++++
.../omnibox/browser/history_url_provider.cc | 3 ++
components/omnibox/browser/search_provider.cc | 4 +++
components/url_formatter/url_fixer.cc | 4 +++
...lag-for-omnibox-autocomplete-filtering.inc | 32 +++++++++++++++++++
5 files changed, 53 insertions(+)
create mode 100644 cromite_flags/chrome/browser/about_flags_cc/Add-flag-for-omnibox-autocomplete-filtering.inc
chrome/browser/about_flags.cc | 22 ++++++++++++++++++-
.../browser/autocomplete_controller.cc | 11 ++++++++++
.../omnibox/browser/history_url_provider.cc | 3 +++
components/omnibox/browser/search_provider.cc | 4 ++++
components/url_formatter/url_fixer.cc | 4 ++++
5 files changed, 43 insertions(+), 1 deletion(-)
diff --git a/components/omnibox/browser/autocomplete_controller.cc b/components/omnibox/browser/autocomplete_controller.cc
--- a/components/omnibox/browser/autocomplete_controller.cc
+++ b/components/omnibox/browser/autocomplete_controller.cc
@@ -22,6 +22,7 @@
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -469,6 +469,22 @@ const FeatureEntry::FeatureVariation kReaderModeDiscoverabilityVariations[] = {
#endif // BUILDFLAG(IS_ANDROID)
#include "base/check_op.h"
#include "base/containers/contains.h"
+#include "base/command_line.h"
#include "base/feature_list.h"
#include "base/format_macros.h"
#include "base/functional/bind.h"
@@ -392,6 +393,15 @@ AutocompleteController::AutocompleteController(
provider_client_->GetOmniboxTriggeredFeatureService()),
steady_state_omnibox_position_(
metrics::OmniboxEventProto::UNKNOWN_POSITION) {
+ if (base::CommandLine::ForCurrentProcess()->HasSwitch("omnibox-autocomplete-filtering")) {
+ const std::string flag_value = base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII("omnibox-autocomplete-filtering");
+ provider_types &= AutocompleteProvider::TYPE_KEYWORD | AutocompleteProvider::TYPE_SEARCH |
+ AutocompleteProvider::TYPE_HISTORY_URL | AutocompleteProvider::TYPE_BOOKMARK | AutocompleteProvider::TYPE_BUILTIN;
+ if (!base::Contains(flag_value, "bookmarks"))
+ provider_types &= ~AutocompleteProvider::TYPE_BOOKMARK;
+ if (!base::Contains(flag_value, "chrome"))
+ provider_types &= ~AutocompleteProvider::TYPE_BUILTIN;
+ }
provider_types &= ~OmniboxFieldTrial::GetDisabledProviderTypes();
// Providers run in the order they're added. Async providers should run first
diff --git a/components/omnibox/browser/history_url_provider.cc b/components/omnibox/browser/history_url_provider.cc
--- a/components/omnibox/browser/history_url_provider.cc
+++ b/components/omnibox/browser/history_url_provider.cc
@@ -479,6 +479,9 @@ void HistoryURLProvider::Start(const AutocompleteInput& input,
if (fixed_up_input.type() != metrics::OmniboxInputType::QUERY)
matches_.push_back(what_you_typed_match);
+ if (base::CommandLine::ForCurrentProcess()->HasSwitch("omnibox-autocomplete-filtering"))
+ return;
+
// We'll need the history service to run both passes, so try to obtain it.
history::HistoryService* const history_service =
client()->GetHistoryService();
diff --git a/components/omnibox/browser/search_provider.cc b/components/omnibox/browser/search_provider.cc
--- a/components/omnibox/browser/search_provider.cc
+++ b/components/omnibox/browser/search_provider.cc
@@ -14,6 +14,7 @@
#include "base/base64.h"
#include "base/feature_list.h"
#include "base/functional/bind.h"
+#include "base/command_line.h"
#include "base/functional/callback.h"
#include "base/i18n/break_iterator.h"
#include "base/i18n/case_conversion.h"
@@ -644,6 +645,9 @@ void SearchProvider::Run(bool query_is_private) {
}
void SearchProvider::DoHistoryQuery(bool minimal_changes) {
+ if (base::CommandLine::ForCurrentProcess()->HasSwitch("omnibox-autocomplete-filtering"))
+ return;
+
// The history query results are synchronous, so if minimal_changes is true,
// we still have the last results and don't need to do anything.
if (minimal_changes)
diff --git a/components/url_formatter/url_fixer.cc b/components/url_formatter/url_fixer.cc
--- a/components/url_formatter/url_fixer.cc
+++ b/components/url_formatter/url_fixer.cc
@@ -7,6 +7,8 @@
#include <stddef.h>
#include "base/check_op.h"
+#include "base/containers/contains.h"
+#include "base/command_line.h"
#include "base/files/file_path.h"
#include "base/files/file_util.h"
#include "base/i18n/char_iterator.h"
@@ -621,6 +623,8 @@ GURL FixupURLInternal(const std::string& text,
FixupHost(trimmed, parts.host, parts.scheme.is_valid(), desired_tld, &url);
if (chrome_url && !parts.host.is_valid())
+ if (!base::CommandLine::ForCurrentProcess()->HasSwitch("omnibox-autocomplete-filtering") ||
+ base::Contains(base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII("omnibox-autocomplete-filtering"), "chrome"))
url.append(kChromeUIDefaultHost);
FixupPort(trimmed, parts.port, &url);
FixupPath(trimmed, parts.path, &url);
diff --git a/cromite_flags/chrome/browser/about_flags_cc/Add-flag-for-omnibox-autocomplete-filtering.inc b/cromite_flags/chrome/browser/about_flags_cc/Add-flag-for-omnibox-autocomplete-filtering.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/chrome/browser/about_flags_cc/Add-flag-for-omnibox-autocomplete-filtering.inc
@@ -0,0 +1,32 @@
+#if BUILDFLAG(IS_ANDROID)
+
+#ifdef FEATURE_PARAM_SECTION
+
#if BUILDFLAG(IS_ANDROID)
+const FeatureEntry::Choice kOmniboxAutocompleteFiltering[] = {
+ {flags_ui::kGenericExperimentChoiceDefault, "", ""},
+ {"Search suggestions only",
@@ -122,16 +37,104 @@ new file mode 100644
+ "search-bookmarks-chrome"},
+};
+
+#endif
+
+#ifdef FLAG_SECTION
+
const FeatureEntry::FeatureParam kAdaptiveButton_AlwaysNone[] = {
{"mode", "always-none"}};
const FeatureEntry::FeatureParam kAdaptiveButton_AlwaysNewTab[] = {
@@ -4058,7 +4074,11 @@ const FeatureEntry kFeatureEntries[] = {
kOsMac | kOsLinux | kOsLacros | kOsWin,
FEATURE_VALUE_TYPE(features::kSystemNotifications)},
#endif // BUILDFLAG(ENABLE_SYSTEM_NOTIFICATIONS) && !BUILDFLAG(IS_CHROMEOS_ASH)
-#if BUILDFLAG(IS_ANDROID)
+#if BUILDFLAG(IS_ANDROID) // Bromite autocomplete filtering
+ {"omnibox-autocomplete-filtering",
+ "Omnibox Autocomplete Filtering",
+ "Restrict omnibox autocomplete results to a combination of search suggestions (if enabled), bookmarks, and internal chrome pages.",
+ kOsAll, MULTI_VALUE_TYPE(kOmniboxAutocompleteFiltering)},
{"adaptive-button-in-top-toolbar",
flag_descriptions::kAdaptiveButtonInTopToolbarName,
flag_descriptions::kAdaptiveButtonInTopToolbarDescription, kOsAndroid,
diff --git a/components/omnibox/browser/autocomplete_controller.cc b/components/omnibox/browser/autocomplete_controller.cc
--- a/components/omnibox/browser/autocomplete_controller.cc
+++ b/components/omnibox/browser/autocomplete_controller.cc
@@ -15,6 +15,8 @@
#include "base/bind.h"
#include "base/check_op.h"
+#include "base/containers/contains.h"
+#include "base/command_line.h"
#include "base/feature_list.h"
#include "base/format_macros.h"
#include "base/metrics/histogram.h"
@@ -295,6 +297,15 @@ AutocompleteController::AutocompleteController(
search_service_worker_signal_sent_(false),
template_url_service_(provider_client_->GetTemplateURLService()) {
provider_types &= ~OmniboxFieldTrial::GetDisabledProviderTypes();
+ if (base::CommandLine::ForCurrentProcess()->HasSwitch("omnibox-autocomplete-filtering")) {
+ const std::string flag_value = base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII("omnibox-autocomplete-filtering");
+ provider_types &= AutocompleteProvider::TYPE_KEYWORD | AutocompleteProvider::TYPE_SEARCH |
+ AutocompleteProvider::TYPE_HISTORY_URL | AutocompleteProvider::TYPE_BOOKMARK | AutocompleteProvider::TYPE_BUILTIN;
+ if (!base::Contains(flag_value, "bookmarks"))
+ provider_types &= ~AutocompleteProvider::TYPE_BOOKMARK;
+ if (!base::Contains(flag_value, "chrome"))
+ provider_types &= ~AutocompleteProvider::TYPE_BUILTIN;
+ }
if (provider_types & AutocompleteProvider::TYPE_BOOKMARK) {
bookmark_provider_ = new BookmarkProvider(provider_client_.get());
providers_.push_back(bookmark_provider_.get());
diff --git a/components/omnibox/browser/history_url_provider.cc b/components/omnibox/browser/history_url_provider.cc
--- a/components/omnibox/browser/history_url_provider.cc
+++ b/components/omnibox/browser/history_url_provider.cc
@@ -480,6 +480,9 @@ void HistoryURLProvider::Start(const AutocompleteInput& input,
if (fixed_up_input.type() != metrics::OmniboxInputType::QUERY)
matches_.push_back(what_you_typed_match);
+ if (base::CommandLine::ForCurrentProcess()->HasSwitch("omnibox-autocomplete-filtering"))
+ return;
+
+#endif
// We'll need the history service to run both passes, so try to obtain it.
history::HistoryService* const history_service =
client()->GetHistoryService();
diff --git a/components/omnibox/browser/search_provider.cc b/components/omnibox/browser/search_provider.cc
--- a/components/omnibox/browser/search_provider.cc
+++ b/components/omnibox/browser/search_provider.cc
@@ -12,6 +12,7 @@
#include "base/base64.h"
#include "base/bind.h"
#include "base/callback.h"
+#include "base/command_line.h"
#include "base/feature_list.h"
#include "base/i18n/break_iterator.h"
#include "base/i18n/case_conversion.h"
@@ -652,6 +653,9 @@ void SearchProvider::Run(bool query_is_private) {
}
void SearchProvider::DoHistoryQuery(bool minimal_changes) {
+ if (base::CommandLine::ForCurrentProcess()->HasSwitch("omnibox-autocomplete-filtering"))
+ return;
+
+#endif
// The history query results are synchronous, so if minimal_changes is true,
// we still have the last results and don't need to do anything.
if (minimal_changes)
diff --git a/components/url_formatter/url_fixer.cc b/components/url_formatter/url_fixer.cc
--- a/components/url_formatter/url_fixer.cc
+++ b/components/url_formatter/url_fixer.cc
@@ -9,6 +9,8 @@
#include <algorithm>
#include "base/check_op.h"
+#include "base/containers/contains.h"
+#include "base/command_line.h"
#include "base/files/file_path.h"
#include "base/files/file_util.h"
#include "base/ranges/algorithm.h"
@@ -607,6 +609,8 @@ GURL FixupURL(const std::string& text, const std::string& desired_tld) {
FixupHost(trimmed, parts.host, parts.scheme.is_valid(), desired_tld, &url);
if (chrome_url && !parts.host.is_valid())
+ if (!base::CommandLine::ForCurrentProcess()->HasSwitch("omnibox-autocomplete-filtering") ||
+ base::Contains(base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII("omnibox-autocomplete-filtering"), "chrome"))
url.append(kChromeUIDefaultHost);
FixupPort(trimmed, parts.port, &url);
FixupPath(trimmed, parts.path, &url);
--
2.25.1
@@ -4,15 +4,56 @@ Subject: Add flag for save-data-header
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
.../loader/browser_initiated_resource_request.cc | 8 ++++++++
.../about_flags_cc/Add-flag-for-save-data-header.inc | 10 ++++++++++
.../cpp/features_cc/Add-flag-for-save-data-header.inc | 4 ++++
.../cpp/features_h/Add-flag-for-save-data-header.inc | 1 +
4 files changed, 23 insertions(+)
create mode 100644 cromite_flags/chrome/browser/about_flags_cc/Add-flag-for-save-data-header.inc
create mode 100644 cromite_flags/services/network/public/cpp/features_cc/Add-flag-for-save-data-header.inc
create mode 100644 cromite_flags/services/network/public/cpp/features_h/Add-flag-for-save-data-header.inc
chrome/browser/about_flags.cc | 5 ++++-
chrome/browser/flag_descriptions.cc | 4 ++++
chrome/browser/flag_descriptions.h | 3 +++
.../browser/loader/browser_initiated_resource_request.cc | 8 ++++++++
services/network/public/cpp/features.cc | 5 +++++
services/network/public/cpp/features.h | 3 ++-
6 files changed, 26 insertions(+), 2 deletions(-)
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -4638,7 +4638,10 @@ const FeatureEntry kFeatureEntries[] = {
{"force-text-direction", flag_descriptions::kForceTextDirectionName,
flag_descriptions::kForceTextDirectionDescription, kOsAll,
MULTI_VALUE_TYPE(kForceTextDirectionChoices)},
-#if BUILDFLAG(IS_ANDROID)
+#if BUILDFLAG(IS_ANDROID) // Bromite save data header
+ {"enable-save-data-header", flag_descriptions::kEnableSaveDataHeaderName,
+ flag_descriptions::kEnableSaveDataHeaderDescription, kOsAndroid,
+ FEATURE_VALUE_TYPE(network::features::kEnableSaveDataHeader)},
{"force-update-menu-type", flag_descriptions::kUpdateMenuTypeName,
flag_descriptions::kUpdateMenuTypeDescription, kOsAndroid,
MULTI_VALUE_TYPE(kForceUpdateMenuTypeChoices)},
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -1145,6 +1145,10 @@ const char kDeprecateAltBasedSixPackDescription[] =
"Show deprecation notifications and disable functionality for Alt based "
"six pack deprecations. The Search based versions continue to work.";
+const char kEnableSaveDataHeaderName[] = "Enable save-data header";
+const char kEnableSaveDataHeaderDescription[] =
+ "Enable save-data header without enabling Data Saver.";
+
const char kExperimentalAccessibilityLanguageDetectionName[] =
"Experimental accessibility language detection";
const char kExperimentalAccessibilityLanguageDetectionDescription[] =
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -606,6 +606,9 @@ extern const char kDeprecateAltClickDescription[];
extern const char kDeprecateAltBasedSixPackName[];
extern const char kDeprecateAltBasedSixPackDescription[];
+extern const char kEnableSaveDataHeaderName[];
+extern const char kEnableSaveDataHeaderDescription[];
+
extern const char kMemlogName[];
extern const char kMemlogDescription[];
extern const char kMemlogModeMinimal[];
diff --git a/content/browser/loader/browser_initiated_resource_request.cc b/content/browser/loader/browser_initiated_resource_request.cc
--- a/content/browser/loader/browser_initiated_resource_request.cc
+++ b/content/browser/loader/browser_initiated_resource_request.cc
@@ -40,34 +81,33 @@ diff --git a/content/browser/loader/browser_initiated_resource_request.cc b/cont
if (should_update_existing_headers) {
headers->RemoveHeader("Save-Data");
}
diff --git a/cromite_flags/chrome/browser/about_flags_cc/Add-flag-for-save-data-header.inc b/cromite_flags/chrome/browser/about_flags_cc/Add-flag-for-save-data-header.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/chrome/browser/about_flags_cc/Add-flag-for-save-data-header.inc
@@ -0,0 +1,10 @@
diff --git a/services/network/public/cpp/features.cc b/services/network/public/cpp/features.cc
--- a/services/network/public/cpp/features.cc
+++ b/services/network/public/cpp/features.cc
@@ -20,6 +20,11 @@ namespace features {
const base::Feature kExpectCTReporting{"ExpectCTReporting",
base::FEATURE_ENABLED_BY_DEFAULT};
+
+#ifdef FLAG_SECTION
+
+ // Bromite save data header
+ {"enable-save-data-header",
+ "Enable save-data header",
+ "Enable save-data header without enabling Data Saver.", kOsAll,
+ FEATURE_VALUE_TYPE(network::features::kEnableSaveDataHeader)},
+
+#endif
diff --git a/cromite_flags/services/network/public/cpp/features_cc/Add-flag-for-save-data-header.inc b/cromite_flags/services/network/public/cpp/features_cc/Add-flag-for-save-data-header.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/services/network/public/cpp/features_cc/Add-flag-for-save-data-header.inc
@@ -0,0 +1,4 @@
+// Enable save-data header separately (without enabled data reduction service).
+CROMITE_FEATURE(kEnableSaveDataHeader,
+ "EnableSaveDataHeader",
+ base::FEATURE_DISABLED_BY_DEFAULT);
diff --git a/cromite_flags/services/network/public/cpp/features_h/Add-flag-for-save-data-header.inc b/cromite_flags/services/network/public/cpp/features_h/Add-flag-for-save-data-header.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/services/network/public/cpp/features_h/Add-flag-for-save-data-header.inc
@@ -0,0 +1 @@
+COMPONENT_EXPORT(NETWORK_CPP) BASE_DECLARE_FEATURE(kEnableSaveDataHeader);
+const base::Feature kEnableSaveDataHeader{"EnableSaveDataHeader",
+ base::FEATURE_DISABLED_BY_DEFAULT};
+
const base::Feature kNetworkErrorLogging{"NetworkErrorLogging",
base::FEATURE_ENABLED_BY_DEFAULT};
diff --git a/services/network/public/cpp/features.h b/services/network/public/cpp/features.h
--- a/services/network/public/cpp/features.h
+++ b/services/network/public/cpp/features.h
@@ -45,7 +45,8 @@ COMPONENT_EXPORT(NETWORK_CPP)
extern const base::Feature kMdnsResponderGeneratedNameListing;
COMPONENT_EXPORT(NETWORK_CPP)
extern const base::Feature kOpaqueResponseBlockingV01;
-
+COMPONENT_EXPORT(NETWORK_CPP)
+extern const base::Feature kEnableSaveDataHeader;
COMPONENT_EXPORT(NETWORK_CPP)
extern const base::Feature kTrustTokens;
--
2.25.1
@@ -8,15 +8,68 @@ with limited CPU/memory resources and it is disabled by default.
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
chrome/browser/about_flags.cc | 8 ++++++++
chrome/browser/flag_descriptions.cc | 4 ++++
chrome/browser/flag_descriptions.h | 3 +++
.../common/network_features.cc | 3 +++
.../common/network_features.h | 4 ++++
.../common/network_switch_list.h | 4 ++++
.../spoof_checks/top_domains/BUILD.gn | 1 +
...o-configure-maximum-connections-per-host.inc | 17 +++++++++++++++++
net/socket/client_socket_pool_manager.cc | 17 +++++++++++++++++
6 files changed, 46 insertions(+)
create mode 100644 cromite_flags/chrome/browser/about_flags_cc/add-flag-to-configure-maximum-connections-per-host.inc
8 files changed, 44 insertions(+)
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -901,6 +901,11 @@ const FeatureEntry::Choice kForceColorProfileChoices[] = {
switches::kForceDisplayColorProfile, "hdr10"},
};
+const FeatureEntry::Choice kMaxConnectionsPerHostChoices[] = {
+ {features::kMaxConnectionsPerHostChoiceDefault, "", ""},
+ {features::kMaxConnectionsPerHostChoice15, switches::kMaxConnectionsPerHost, "15"},
+};
+
const FeatureEntry::Choice kMemlogModeChoices[] = {
{flags_ui::kGenericExperimentChoiceDisabled, "", ""},
{flag_descriptions::kMemlogModeMinimal, heap_profiling::kMemlogMode,
@@ -4594,6 +4599,9 @@ const FeatureEntry kFeatureEntries[] = {
flag_descriptions::kAndroidPictureInPictureAPIName,
flag_descriptions::kAndroidPictureInPictureAPIDescription, kOsAndroid,
FEATURE_VALUE_TYPE(media::kPictureInPictureAPI)},
+ {"max-connections-per-host", flag_descriptions::kMaxConnectionsPerHostName,
+ flag_descriptions::kMaxConnectionsPerHostDescription, kOsAll,
+ MULTI_VALUE_TYPE(kMaxConnectionsPerHostChoices)},
{"reengagement-notification",
flag_descriptions::kReengagementNotificationName,
flag_descriptions::kReengagementNotificationDescription, kOsAndroid,
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -1672,6 +1672,10 @@ const char kUnthrottledNestedTimeoutDescription[] =
"websites abusing the API will still eventually have their setTimeouts "
"clamped.";
+const char kMaxConnectionsPerHostName[] = "Maximum connections per host";
+const char kMaxConnectionsPerHostDescription[] =
+ "Customize maximum allowed connections per host.";
+
const char kMediaRouterCastAllowAllIPsName[] =
"Connect to Cast devices on all IP addresses";
const char kMediaRouterCastAllowAllIPsDescription[] =
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -941,6 +941,9 @@ extern const char kLogJsConsoleMessagesDescription[];
extern const char kUnthrottledNestedTimeoutName[];
extern const char kUnthrottledNestedTimeoutDescription[];
+extern const char kMaxConnectionsPerHostName[];
+extern const char kMaxConnectionsPerHostDescription[];
+
extern const char kMediaRouterCastAllowAllIPsName[];
extern const char kMediaRouterCastAllowAllIPsDescription[];
diff --git a/components/network_session_configurator/common/network_features.cc b/components/network_session_configurator/common/network_features.cc
--- a/components/network_session_configurator/common/network_features.cc
+++ b/components/network_session_configurator/common/network_features.cc
@@ -67,32 +120,10 @@ diff --git a/components/url_formatter/spoof_checks/top_domains/BUILD.gn b/compon
]
if (is_ios) {
frameworks = [ "UIKit.framework" ]
diff --git a/cromite_flags/chrome/browser/about_flags_cc/add-flag-to-configure-maximum-connections-per-host.inc b/cromite_flags/chrome/browser/about_flags_cc/add-flag-to-configure-maximum-connections-per-host.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/chrome/browser/about_flags_cc/add-flag-to-configure-maximum-connections-per-host.inc
@@ -0,0 +1,17 @@
+#ifdef FEATURE_PARAM_SECTION
+
+const FeatureEntry::Choice kMaxConnectionsPerHostChoices[] = {
+ {features::kMaxConnectionsPerHostChoiceDefault, "", ""},
+ {features::kMaxConnectionsPerHostChoice15, switches::kMaxConnectionsPerHost, "15"},
+};
+
+#endif
+
+#ifdef FLAG_SECTION
+
+ {"max-connections-per-host",
+ "Maximum connections per host",
+ "Customize maximum allowed connections per host.", kOsAll,
+ MULTI_VALUE_TYPE(kMaxConnectionsPerHostChoices)},
+
+#endif
diff --git a/net/socket/client_socket_pool_manager.cc b/net/socket/client_socket_pool_manager.cc
--- a/net/socket/client_socket_pool_manager.cc
+++ b/net/socket/client_socket_pool_manager.cc
@@ -22,6 +22,10 @@
@@ -19,6 +19,10 @@
#include "net/socket/client_socket_handle.h"
#include "net/socket/client_socket_pool.h"
#include "net/socket/connect_job.h"
@@ -101,9 +132,9 @@ diff --git a/net/socket/client_socket_pool_manager.cc b/net/socket/client_socket
+#include "base/command_line.h"
+#include "base/strings/string_number_conversions.h"
#include "net/ssl/ssl_config.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
#include "url/gurl.h"
#include "url/scheme_host_port.h"
@@ -168,6 +172,19 @@ void ClientSocketPoolManager::set_max_sockets_per_pool(
@@ -172,6 +176,19 @@ void ClientSocketPoolManager::set_max_sockets_per_pool(
int ClientSocketPoolManager::max_sockets_per_group(
HttpNetworkSession::SocketPoolType pool_type) {
DCHECK_LT(pool_type, HttpNetworkSession::NUM_SOCKET_POOL_TYPES);
@@ -124,3 +155,4 @@ diff --git a/net/socket/client_socket_pool_manager.cc b/net/socket/client_socket
}
--
2.25.1
@@ -6,34 +6,68 @@ Disable it by default on Android as it is everywhere else
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
...lag-to-control-video-playback-resume-feature.inc | 13 +++++++++++++
...lag-to-control-video-playback-resume-feature.inc | 1 +
2 files changed, 14 insertions(+)
create mode 100644 cromite_flags/chrome/browser/about_flags_cc/add-flag-to-control-video-playback-resume-feature.inc
create mode 100644 cromite_flags/media/base/media_switches_cc/add-flag-to-control-video-playback-resume-feature.inc
chrome/browser/about_flags.cc | 4 ++++
chrome/browser/flag_descriptions.cc | 5 +++++
chrome/browser/flag_descriptions.h | 3 +++
media/base/media_switches.cc | 4 ----
4 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/cromite_flags/chrome/browser/about_flags_cc/add-flag-to-control-video-playback-resume-feature.inc b/cromite_flags/chrome/browser/about_flags_cc/add-flag-to-control-video-playback-resume-feature.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/chrome/browser/about_flags_cc/add-flag-to-control-video-playback-resume-feature.inc
@@ -0,0 +1,13 @@
+#ifdef FLAG_SECTION
+
+#if BUILDFLAG(IS_ANDROID)
+
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -3329,6 +3329,10 @@ const FeatureEntry kFeatureEntries[] = {
flag_descriptions::kWebRtcRemoteEventLogName,
flag_descriptions::kWebRtcRemoteEventLogDescription, kOsDesktop,
FEATURE_VALUE_TYPE(features::kWebRtcRemoteEventLog)},
+ {"resume-background-video",
+ "Resume background video.",
+ "Resume background video playback when tab re-gains focus; additionally, "
+ "it will pause video playback every single time you switch tabs.", kOsAll,
+ flag_descriptions::kResumeBackgroundVideoName,
+ flag_descriptions::kResumeBackgroundVideoDescription, kOsAll,
+ FEATURE_VALUE_TYPE(media::kResumeBackgroundVideo)},
#endif
{"enable-webrtc-srtp-aes-gcm", flag_descriptions::kWebrtcSrtpAesGcmName,
flag_descriptions::kWebrtcSrtpAesGcmDescription, kOsAll,
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -1236,6 +1236,11 @@ const char kEnablePenetratingImageSelectionDescription[] =
"Enables image options to be surfaced in the context menu for nodes "
"covered by transparent overlays.";
+const char kResumeBackgroundVideoName[] = "Resume background video.";
+const char kResumeBackgroundVideoDescription[] =
+ "Resume background video playback when tab re-gains focus; additionally, "
+ "it will pause video playback every single time you switch tabs.";
+
+#endif // BUILDFLAG(IS_ANDROID)
const char kEnablePixelCanvasRecordingName[] = "Enable pixel canvas recording";
const char kEnablePixelCanvasRecordingDescription[] =
"Pixel canvas recording allows the compositor to raster contents aligned "
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -676,6 +676,9 @@ extern const char kEnablePortalsDescription[];
extern const char kEnablePortalsCrossOriginName[];
extern const char kEnablePortalsCrossOriginDescription[];
+extern const char kResumeBackgroundVideoName[];
+extern const char kResumeBackgroundVideoDescription[];
+
+#endif // ifdef FLAG_SECTION
diff --git a/cromite_flags/media/base/media_switches_cc/add-flag-to-control-video-playback-resume-feature.inc b/cromite_flags/media/base/media_switches_cc/add-flag-to-control-video-playback-resume-feature.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/media/base/media_switches_cc/add-flag-to-control-video-playback-resume-feature.inc
@@ -0,0 +1 @@
+SET_CROMITE_FEATURE_DISABLED(kResumeBackgroundVideo);
extern const char kEnablePixelCanvasRecordingName[];
extern const char kEnablePixelCanvasRecordingDescription[];
diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc
--- a/media/base/media_switches.cc
+++ b/media/base/media_switches.cc
@@ -282,11 +282,7 @@ const base::Feature kPreloadMetadataLazyLoad{"PreloadMetadataLazyLoad",
// when in background.
const base::Feature kResumeBackgroundVideo {
"resume-background-video",
-#if BUILDFLAG(IS_ANDROID)
- base::FEATURE_ENABLED_BY_DEFAULT
-#else
base::FEATURE_DISABLED_BY_DEFAULT
-#endif
};
// When enabled, MediaCapabilities will check with GPU Video Accelerator
--
2.25.1
@@ -4,78 +4,152 @@ Subject: Add flag to disable IPv6 probes
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
.../about_flags_cc/add-flag-to-disable-IPv6-probes.inc | 8 ++++++++
.../base/features_cc/add-flag-to-disable-IPv6-probes.inc | 3 +++
.../base/features_h/add-flag-to-disable-IPv6-probes.inc | 2 ++
net/BUILD.gn | 1 +
net/dns/host_resolver_manager.cc | 8 ++++++++
5 files changed, 22 insertions(+)
create mode 100644 cromite_flags/chrome/browser/about_flags_cc/add-flag-to-disable-IPv6-probes.inc
create mode 100644 cromite_flags/net/base/features_cc/add-flag-to-disable-IPv6-probes.inc
create mode 100644 cromite_flags/net/base/features_h/add-flag-to-disable-IPv6-probes.inc
chrome/browser/about_flags.cc | 4 ++++
chrome/browser/flag_descriptions.cc | 4 ++++
chrome/browser/flag_descriptions.h | 3 +++
components/subresource_filter/tools/BUILD.gn | 6 ++++++
.../url_formatter/spoof_checks/top_domains/BUILD.gn | 3 ++-
net/dns/host_resolver_manager.cc | 9 ++++++++-
services/network/public/cpp/features.cc | 4 ++++
services/network/public/cpp/features.h | 2 ++
8 files changed, 33 insertions(+), 2 deletions(-)
diff --git a/cromite_flags/chrome/browser/about_flags_cc/add-flag-to-disable-IPv6-probes.inc b/cromite_flags/chrome/browser/about_flags_cc/add-flag-to-disable-IPv6-probes.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/chrome/browser/about_flags_cc/add-flag-to-disable-IPv6-probes.inc
@@ -0,0 +1,8 @@
+#ifdef FLAG_SECTION
+
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -5536,6 +5536,10 @@ const FeatureEntry kFeatureEntries[] = {
{"enable-reader-mode-in-cct", flag_descriptions::kReaderModeInCCTName,
flag_descriptions::kReaderModeInCCTDescription, kOsAndroid,
FEATURE_VALUE_TYPE(chrome::android::kReaderModeInCCT)},
+ {"ipv6-probing",
+ "Enable IPv6 probing.",
+ "Send IPv6 probes to a RIPE DNS address to verify IPv6 connectivity.", kOsAll,
+ FEATURE_VALUE_TYPE(net::features::kIPv6Probing)},
+
+#endif // ifdef FLAG_SECTION
diff --git a/cromite_flags/net/base/features_cc/add-flag-to-disable-IPv6-probes.inc b/cromite_flags/net/base/features_cc/add-flag-to-disable-IPv6-probes.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/net/base/features_cc/add-flag-to-disable-IPv6-probes.inc
@@ -0,0 +1,3 @@
+CROMITE_FEATURE(kIPv6Probing,
+ "IPv6Probing",
+ base::FEATURE_ENABLED_BY_DEFAULT);
diff --git a/cromite_flags/net/base/features_h/add-flag-to-disable-IPv6-probes.inc b/cromite_flags/net/base/features_h/add-flag-to-disable-IPv6-probes.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/net/base/features_h/add-flag-to-disable-IPv6-probes.inc
@@ -0,0 +1,2 @@
+// Enable IPv6 ping probes to RIPE DNS.
+NET_EXPORT BASE_DECLARE_FEATURE(kIPv6Probing);
diff --git a/net/BUILD.gn b/net/BUILD.gn
--- a/net/BUILD.gn
+++ b/net/BUILD.gn
@@ -1030,6 +1030,7 @@ component("net") {
"//build:chromeos_buildflags",
"//components/miracle_parameter/common",
"//net/http:transport_security_state_generated_files",
+ "//components/network_session_configurator/common"
]
+ flag_descriptions::kIPv6ProbingName,
+ flag_descriptions::kIPv6ProbingDescription, kOsAll,
+ FEATURE_VALUE_TYPE(network::features::kIPv6Probing)},
#endif // BUILDFLAG(IS_ANDROID)
public_deps = [
#if !BUILDFLAG(IS_ANDROID)
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -3150,6 +3150,10 @@ const char kCCTResizableForThirdPartiesName[] =
const char kCCTResizableForThirdPartiesDescription[] =
"Enable bottom sheet Custom Tabs for third party apps.";
+const char kIPv6ProbingName[] = "Enable IPv6 probing.";
+const char kIPv6ProbingDescription[] =
+ "Send IPv6 probes to a RIPE DNS address to verify IPv6 connectivity.";
+
const char kChimeAlwaysShowNotificationDescription[] =
"A debug flag to always show Chime notification after receiving a payload.";
const char kChimeAlwaysShowNotificationName[] =
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -742,6 +742,9 @@ extern const char kEnableWasmLazyCompilationName[];
extern const char kEnableWasmLazyCompilationDescription[];
extern const char kEnableWasmTieringName[];
+extern const char kIPv6ProbingName[];
+extern const char kIPv6ProbingDescription[];
+
extern const char kEnableWasmTieringDescription[];
extern const char kEvDetailsInPageInfoName[];
diff --git a/components/subresource_filter/tools/BUILD.gn b/components/subresource_filter/tools/BUILD.gn
--- a/components/subresource_filter/tools/BUILD.gn
+++ b/components/subresource_filter/tools/BUILD.gn
@@ -50,6 +50,8 @@ if (!is_ios) {
deps = [
":tools_lib",
"//base",
+ "//components/network_session_configurator/common",
+ "//services/network/public/cpp"
]
}
@@ -61,6 +63,8 @@ if (!is_ios) {
":tools_lib",
"../core/common",
"//base",
+ "//components/network_session_configurator/common",
+ "//services/network/public/cpp",
]
}
@@ -70,6 +74,8 @@ if (!is_ios) {
"ruleset_converter:support",
"//base",
"//third_party/protobuf:protobuf_lite",
+ "//components/network_session_configurator/common",
+ "//services/network/public/cpp"
]
}
diff --git a/components/url_formatter/spoof_checks/top_domains/BUILD.gn b/components/url_formatter/spoof_checks/top_domains/BUILD.gn
--- a/components/url_formatter/spoof_checks/top_domains/BUILD.gn
+++ b/components/url_formatter/spoof_checks/top_domains/BUILD.gn
@@ -89,7 +89,8 @@ executable("make_top_domain_list_variables") {
"//base:i18n",
"//components/url_formatter/spoof_checks/common_words:common",
"//third_party/icu",
- "//components/network_session_configurator/common"
+ "//components/network_session_configurator/common",
+ "//services/network/public/cpp",
]
if (is_ios) {
frameworks = [ "UIKit.framework" ]
diff --git a/net/dns/host_resolver_manager.cc b/net/dns/host_resolver_manager.cc
--- a/net/dns/host_resolver_manager.cc
+++ b/net/dns/host_resolver_manager.cc
@@ -113,6 +113,7 @@
@@ -104,6 +104,7 @@
#include "net/log/net_log_event_type.h"
#include "net/log/net_log_source.h"
#include "net/log/net_log_source_type.h"
+#include "services/network/public/cpp/features.h"
#include "net/log/net_log_with_source.h"
#include "net/socket/client_socket_factory.h"
#include "net/url_request/url_request_context.h"
@@ -1373,6 +1374,13 @@ int HostResolverManager::StartIPv6ReachabilityCheck(
return OK;
}
+ if (!base::FeatureList::IsEnabled(net::features::kIPv6Probing)) {
+ probing_ipv6_ = false;
+ last_ipv6_probe_result_ = false;
+ last_ipv6_probe_time_ = base::TimeTicks();
+ return OK;
+ }
#include "net/socket/datagram_client_socket.h"
@@ -4092,8 +4093,14 @@ bool HostResolverManager::IsIPv6Reachable(const NetLogWithSource& net_log) {
if (last_ipv6_probe_time_.is_null() ||
(tick_clock_->NowTicks() - last_ipv6_probe_time_).InMilliseconds() >
kIPv6ProbePeriodMs) {
- SetLastIPv6ProbeResult(
+
if (probing_ipv6_) {
ipv6_request_callbacks_.push_back(std::move(callback));
return ERR_IO_PENDING;
+ if (!base::FeatureList::IsEnabled(network::features::kIPv6Probing)) {
+ // pretend IPv6 connectivy probe is successful when probing is disabled
+ SetLastIPv6ProbeResult(true);
+ } else {
+ SetLastIPv6ProbeResult(
IsGloballyReachable(IPAddress(kIPv6ProbeAddress), net_log));
+ }
cached = false;
}
net_log.AddEvent(
diff --git a/services/network/public/cpp/features.cc b/services/network/public/cpp/features.cc
--- a/services/network/public/cpp/features.cc
+++ b/services/network/public/cpp/features.cc
@@ -36,6 +36,10 @@ const base::Feature kReporting{"Reporting", base::FEATURE_ENABLED_BY_DEFAULT};
const base::Feature kThrottleDelayable{"ThrottleDelayable",
base::FEATURE_ENABLED_BY_DEFAULT};
+// Enable IPv6 ping probes to RIPE DNS.
+const base::Feature kIPv6Probing{"IPv6Probing",
+ base::FEATURE_ENABLED_BY_DEFAULT};
+
// When kPriorityRequestsDelayableOnSlowConnections is enabled, HTTP
// requests fetched from a SPDY/QUIC/H2 proxies can be delayed by the
// ResourceScheduler just as HTTP/1.1 resources are. However, requests from such
diff --git a/services/network/public/cpp/features.h b/services/network/public/cpp/features.h
--- a/services/network/public/cpp/features.h
+++ b/services/network/public/cpp/features.h
@@ -18,6 +18,8 @@ extern const base::Feature kExpectCTReporting;
COMPONENT_EXPORT(NETWORK_CPP)
extern const base::Feature kNetworkErrorLogging;
COMPONENT_EXPORT(NETWORK_CPP)
+extern const base::Feature kIPv6Probing;
+COMPONENT_EXPORT(NETWORK_CPP)
extern const base::Feature kReporting;
COMPONENT_EXPORT(NETWORK_CPP)
extern const base::Feature kThrottleDelayable;
--
2.25.1
@@ -7,26 +7,52 @@ when flag is disabled no external intent will ever be allowed, for any URL.
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
...Add-flag-to-disable-external-intent-requests.inc | 13 +++++++++++++
1 file changed, 13 insertions(+)
create mode 100644 cromite_flags/chrome/browser/about_flags_cc/Add-flag-to-disable-external-intent-requests.inc
chrome/browser/about_flags.cc | 3 +++
chrome/browser/flag_descriptions.cc | 6 ++++++
chrome/browser/flag_descriptions.h | 3 +++
3 files changed, 12 insertions(+)
diff --git a/cromite_flags/chrome/browser/about_flags_cc/Add-flag-to-disable-external-intent-requests.inc b/cromite_flags/chrome/browser/about_flags_cc/Add-flag-to-disable-external-intent-requests.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/chrome/browser/about_flags_cc/Add-flag-to-disable-external-intent-requests.inc
@@ -0,0 +1,13 @@
+#if BUILDFLAG(IS_ANDROID)
+
+#ifdef FLAG_SECTION
+
+ {"allow-external-intent-requests",
+ "Allow forward URL requests to external intents",
+ "If disabled, URL requests will never"
+ "allow for redirecting to an external intent.", kOsAndroid,
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -3310,6 +3310,9 @@ const FeatureEntry kFeatureEntries[] = {
{"ui-disable-partial-swap", flag_descriptions::kUiPartialSwapName,
flag_descriptions::kUiPartialSwapDescription, kOsAll,
SINGLE_DISABLE_VALUE_TYPE(switches::kUIDisablePartialSwap)},
+ {"disable-external-intent-requests", flag_descriptions::kDisableExternalIntentRequestsName,
+ flag_descriptions::kDisableExternalIntentRequestsDescription, kOsAll,
+ SINGLE_DISABLE_VALUE_TYPE("disable-external-intent-requests")},
{"disable-webrtc-hw-decoding", flag_descriptions::kWebrtcHwDecodingName,
flag_descriptions::kWebrtcHwDecodingDescription, kOsAndroid | kOsCrOS,
SINGLE_DISABLE_VALUE_TYPE(switches::kDisableWebRtcHWDecoding)},
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -3522,6 +3522,12 @@ const char kPhotoPickerVideoSupportName[] = "Photo Picker Video Support";
const char kPhotoPickerVideoSupportDescription[] =
"Enables video files to be shown in the Photo Picker dialog";
+const char kDisableExternalIntentRequestsName[] =
+ "Never forward URL requests to external intents";
+const char kDisableExternalIntentRequestsDescription[] =
+ "URL requests will never"
+ "allow for redirecting to an external intent.";
+
+#endif
const char kQueryTilesName[] = "Show query tiles";
const char kQueryTilesDescription[] = "Shows query tiles in Chrome";
const char kQueryTilesNTPName[] = "Show query tiles in NTP";
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -2018,6 +2018,9 @@ extern const char kQueryTilesDescription[];
extern const char kQueryTilesNTPName[];
extern const char kQueryTilesNTPDescription[];
extern const char kQueryTilesSingleTierName[];
+extern const char kDisableExternalIntentRequestsName[];
+extern const char kDisableExternalIntentRequestsDescription[];
+
+#endif
extern const char kQueryTilesSingleTierDescription[];
extern const char kQueryTilesEnableQueryEditingName[];
extern const char kQueryTilesEnableQueryEditingDescription[];
--
2.25.1
@@ -4,81 +4,117 @@ Subject: Add flag to disable vibration
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
content/child/runtime_features.cc | 1 +
.../about_flags_cc/Add-flag-to-disable-vibration.inc | 8 ++++++++
.../content_features_cc/Add-flag-to-disable-vibration.inc | 4 ++++
.../content_features_h/Add-flag-to-disable-vibration.inc | 1 +
third_party/blink/public/platform/web_runtime_features.h | 1 +
.../renderer/modules/vibration/vibration_controller.cc | 3 +++
.../renderer/platform/exported/web_runtime_features.cc | 4 ++++
.../renderer/platform/runtime_enabled_features.json5 | 4 ++++
8 files changed, 26 insertions(+)
create mode 100644 cromite_flags/chrome/browser/about_flags_cc/Add-flag-to-disable-vibration.inc
create mode 100644 cromite_flags/content/public/common/content_features_cc/Add-flag-to-disable-vibration.inc
create mode 100644 cromite_flags/content/public/common/content_features_h/Add-flag-to-disable-vibration.inc
chrome/browser/about_flags.cc | 4 ++++
chrome/browser/flag_descriptions.cc | 3 +++
chrome/browser/flag_descriptions.h | 2 ++
content/child/runtime_features.cc | 1 +
content/public/common/content_features.cc | 4 ++++
content/public/common/content_features.h | 2 ++
third_party/blink/public/platform/web_runtime_features.h | 1 +
.../blink/renderer/modules/vibration/vibration_controller.cc | 3 +++
.../blink/renderer/platform/exported/web_runtime_features.cc | 4 ++++
.../blink/renderer/platform/runtime_enabled_features.json5 | 4 ++++
10 files changed, 28 insertions(+)
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -6874,6 +6874,10 @@ const FeatureEntry kFeatureEntries[] = {
FEATURE_VALUE_TYPE(features::kNewMacNotificationAPI)},
#endif
+ {"enable-vibration", flag_descriptions::kEnableVibrationName,
+ flag_descriptions::kEnableVibrationDescription, kOsAll,
+ FEATURE_VALUE_TYPE(features::kVibration)},
+
#if BUILDFLAG(IS_CHROMEOS_ASH)
{"exo-gamepad-vibration", flag_descriptions::kExoGamepadVibrationName,
flag_descriptions::kExoGamepadVibrationDescription, kOsCrOS,
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -5769,6 +5769,9 @@ extern const char kLacrosScreenCoordinatesDescription[];
#endif // #if BUILDFLAG(IS_CHROMEOS_LACROS)
+const char kEnableVibrationName[] = "Vibration";
+const char kEnableVibrationDescription[] = "Enable vibration API; an user gesture will still be needed.";
+
#if BUILDFLAG(IS_CHROMEOS)
const char kAllowDefaultWebAppMigrationForChromeOsManagedUsersName[] =
"Allow default web app migration for ChromeOS managed users";
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -3515,6 +3515,8 @@ extern const char kWebUITabStripTabDragIntegrationName[];
extern const char kWebUITabStripTabDragIntegrationDescription[];
#endif // BUILDFLAG(ENABLE_WEBUI_TAB_STRIP) && BUILDFLAG(IS_CHROMEOS_ASH)
+extern const char kEnableVibrationName[];
+extern const char kEnableVibrationDescription[];
#if defined(TOOLKIT_VIEWS) || BUILDFLAG(IS_ANDROID)
extern const char kAutofillCreditCardUploadName[];
diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc
--- a/content/child/runtime_features.cc
+++ b/content/child/runtime_features.cc
@@ -103,6 +103,7 @@ void SetRuntimeFeatureDefaultsForPlatform(
if (command_line.HasSwitch(switches::kDisableMediaSessionAPI)) {
@@ -100,6 +100,7 @@ void SetRuntimeFeatureDefaultsForPlatform(
#if BUILDFLAG(IS_ANDROID)
if (command_line.HasSwitch(switches::kDisableMediaSessionAPI))
WebRuntimeFeatures::EnableMediaSession(false);
}
+ WebRuntimeFeatures::EnableVibration(base::FeatureList::IsEnabled(features::kVibration));
#endif
#if BUILDFLAG(IS_ANDROID)
diff --git a/cromite_flags/chrome/browser/about_flags_cc/Add-flag-to-disable-vibration.inc b/cromite_flags/chrome/browser/about_flags_cc/Add-flag-to-disable-vibration.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/chrome/browser/about_flags_cc/Add-flag-to-disable-vibration.inc
@@ -0,0 +1,8 @@
+#ifdef FLAG_SECTION
+
+ {"enable-vibration",
+ "Vibration",
+ "Enable vibration API; an user gesture will still be needed.", kOsAll,
+ FEATURE_VALUE_TYPE(features::kVibration)},
+
+#endif
diff --git a/cromite_flags/content/public/common/content_features_cc/Add-flag-to-disable-vibration.inc b/cromite_flags/content/public/common/content_features_cc/Add-flag-to-disable-vibration.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/content/public/common/content_features_cc/Add-flag-to-disable-vibration.inc
@@ -0,0 +1,4 @@
diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc
--- a/content/public/common/content_features.cc
+++ b/content/public/common/content_features.cc
@@ -121,6 +121,10 @@ const base::Feature kBackForwardCacheMemoryControls {
#endif
};
+// Enables vibration; an user gesture will still be required if enabled.
+CROMITE_FEATURE(kVibration,
+ "VibrationEnabled",
+ base::FEATURE_DISABLED_BY_DEFAULT);
diff --git a/cromite_flags/content/public/common/content_features_h/Add-flag-to-disable-vibration.inc b/cromite_flags/content/public/common/content_features_h/Add-flag-to-disable-vibration.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/content/public/common/content_features_h/Add-flag-to-disable-vibration.inc
@@ -0,0 +1 @@
+CONTENT_EXPORT BASE_DECLARE_FEATURE(kVibration);
+const base::Feature kVibration{"Vibration",
+ base::FEATURE_DISABLED_BY_DEFAULT};
+
// When this feature is enabled, private network requests initiated from
// non-secure contexts in the `public` address space are blocked.
//
diff --git a/content/public/common/content_features.h b/content/public/common/content_features.h
--- a/content/public/common/content_features.h
+++ b/content/public/common/content_features.h
@@ -308,6 +308,8 @@ CONTENT_EXPORT extern const base::FeatureParam<base::TimeDelta>
kCompositorLockTimeout;
#endif // BUILDFLAG(IS_ANDROID)
+CONTENT_EXPORT extern const base::Feature kVibration;
+
#if BUILDFLAG(IS_MAC)
CONTENT_EXPORT extern const base::Feature kDeviceMonitorMac;
diff --git a/third_party/blink/public/platform/web_runtime_features.h b/third_party/blink/public/platform/web_runtime_features.h
--- a/third_party/blink/public/platform/web_runtime_features.h
+++ b/third_party/blink/public/platform/web_runtime_features.h
@@ -71,6 +71,7 @@ class BLINK_PLATFORM_EXPORT WebRuntimeFeatures : public WebRuntimeFeaturesBase {
static void EnableFingerprintingCanvasImageDataNoise(bool);
static void EnableFluentScrollbars(bool);
static void EnableFluentOverlayScrollbars(bool);
+ static void EnableVibration(bool);
WebRuntimeFeatures() = delete;
};
@@ -87,6 +87,7 @@ class WebRuntimeFeatures {
BLINK_PLATFORM_EXPORT static void EnableBlockingFocusWithoutUserActivation(
bool);
BLINK_PLATFORM_EXPORT static void EnableClickPointerEvent(bool enable);
+ BLINK_PLATFORM_EXPORT static void EnableVibration(bool);
BLINK_PLATFORM_EXPORT static void EnableCompositeBGColorAnimation(
bool enable);
BLINK_PLATFORM_EXPORT static void EnableCanvas2dImageChromium(bool);
diff --git a/third_party/blink/renderer/modules/vibration/vibration_controller.cc b/third_party/blink/renderer/modules/vibration/vibration_controller.cc
--- a/third_party/blink/renderer/modules/vibration/vibration_controller.cc
+++ b/third_party/blink/renderer/modules/vibration/vibration_controller.cc
@@ -28,6 +28,7 @@
#include "third_party/blink/renderer/core/frame/local_frame.h"
@@ -30,6 +30,7 @@
#include "third_party/blink/renderer/core/frame/navigator.h"
#include "third_party/blink/renderer/core/page/page.h"
#include "third_party/blink/renderer/platform/mojo/mojo_helper.h"
+#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
// Maximum number of entries in a vibration pattern.
const unsigned kVibrationPatternLengthMax = 99;
@@ -109,6 +110,8 @@ bool VibrationController::vibrate(Navigator& navigator,
@@ -153,6 +154,8 @@ bool VibrationController::vibrate(Navigator& navigator,
// reference to |window| or |navigator| was retained in another window.
if (!navigator.DomWindow())
return false;
@@ -90,29 +126,30 @@ diff --git a/third_party/blink/renderer/modules/vibration/vibration_controller.c
diff --git a/third_party/blink/renderer/platform/exported/web_runtime_features.cc b/third_party/blink/renderer/platform/exported/web_runtime_features.cc
--- a/third_party/blink/renderer/platform/exported/web_runtime_features.cc
+++ b/third_party/blink/renderer/platform/exported/web_runtime_features.cc
@@ -52,6 +52,10 @@ void WebRuntimeFeatures::EnableTestOnlyFeatures(bool enable) {
RuntimeEnabledFeatures::SetTestFeaturesEnabled(enable);
@@ -156,6 +156,10 @@ void WebRuntimeFeatures::EnableScrollTopLeftInterop(bool enable) {
RuntimeEnabledFeatures::SetScrollTopLeftInteropEnabled(enable);
}
+void WebRuntimeFeatures::EnableVibration(bool enable) {
+ RuntimeEnabledFeatures::SetVibrationEnabled(enable);
+}
+
void WebRuntimeFeatures::EnableOriginTrialControlledFeatures(bool enable) {
RuntimeEnabledFeatures::SetOriginTrialControlledFeaturesEnabled(enable);
void WebRuntimeFeatures::EnableKeyboardAccessibleTooltip(bool enable) {
RuntimeEnabledFeatures::SetKeyboardAccessibleTooltipEnabled(enable);
}
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5
--- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
+++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -635,6 +635,10 @@
@@ -1653,6 +1653,10 @@
name: "OrientationEvent",
status: {"Android": "stable"},
base_feature: "none",
},
+ {
+ name: "Vibration",
+ status: "stable",
+ },
{
name: "CompositionForegroundMarkers",
status: {
name: "OriginIsolationHeader",
status: "stable",
--
2.25.1
@@ -0,0 +1,56 @@
From: uazo <uazo@users.noreply.github.com>
Date: Wed, 13 Jul 2022 09:45:07 +0000
Subject: Add gn flag for clangd builds
Allows clangd builds by suppressing unsupported parameters.
Chromium is currently using an outdated clang version and as soon
as that is upgraded this patch will become redundant.
Original License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
build/config/compiler/BUILD.gn | 8 ++++++--
build_overrides/build.gni | 3 +++
2 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
--- a/build/config/compiler/BUILD.gn
+++ b/build/config/compiler/BUILD.gn
@@ -1537,7 +1537,7 @@ config("default_warnings") {
"-Wno-ignored-pragma-optimize",
]
- if (!is_nacl) {
+ if (!is_nacl && !skip_clangd_unsupported_options) {
# TODO(https://crbug.com/1300731) Clean up and enable.
cflags += [ "-Wno-unqualified-std-cast-call" ]
}
@@ -1547,8 +1547,12 @@ config("default_warnings") {
# TODO(https://crbug.com/1322823): Remove flags once potential miscompile is investigated.
cflags += [
"-Xclang",
- "-no-opaque-pointers",
]
+ if (!skip_clangd_unsupported_options) {
+ cflags += [
+ "-no-opaque-pointers",
+ ]
+ }
}
if (is_fuchsia) {
diff --git a/build_overrides/build.gni b/build_overrides/build.gni
--- a/build_overrides/build.gni
+++ b/build_overrides/build.gni
@@ -42,6 +42,9 @@ declare_args() {
# Allows googletest to pretty-print various absl types. Disabled for nacl due
# to lack of toolchain support.
gtest_enable_absl_printers = !is_nacl
+
+ # Allows clangd builds by suppressing unsupported parameters
+ skip_clangd_unsupported_options = false
}
# Allows different projects to specify their own suppression/ignore lists for
--
2.25.1
@@ -1,53 +0,0 @@
From: uazo <uazo@users.noreply.github.com>
Date: Thu, 20 Oct 2022 09:34:48 +0000
Subject: Add kill switch for unsupported clangd flags
Allows build with clangd by suppressing unsupported parameters
Original License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
build/config/compiler/BUILD.gn | 10 +++++++++-
build_overrides/build.gni | 3 +++
2 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
--- a/build/config/compiler/BUILD.gn
+++ b/build/config/compiler/BUILD.gn
@@ -1889,13 +1889,21 @@ config("default_warnings") {
# TODO(https://crbug.com/1490607): Fix and re-enable.
"-Wno-thread-safety-reference-return",
]
-
if (!is_nacl) {
cflags_cc += [
# TODO(https://crbug.com/1513724): Fix and re-enable.
"-Wno-c++11-narrowing-const-reference",
]
}
+ if (skip_clangd_unsupported_options) {
+ cflags -= [
+ "-Wno-deprecated-builtins",
+ "-Wno-thread-safety-reference-return",
+ ]
+ cflags_cc -= [
+ "-Wno-c++11-narrowing-const-reference",
+ ]
+ }
}
# Some builders, such as Cronet, use a different version of Clang than
diff --git a/build_overrides/build.gni b/build_overrides/build.gni
--- a/build_overrides/build.gni
+++ b/build_overrides/build.gni
@@ -62,6 +62,9 @@ declare_args() {
# to lack of toolchain support.
gtest_enable_absl_printers = !is_nacl
+ # Allows clangd builds by suppressing unsupported parameters
+ skip_clangd_unsupported_options = false
+
# Allow projects that wish to stay on C++17 to override Chromium's default.
# TODO(crbug.com/1402249): evaluate removing this end of 2023
use_cxx17 = false
--
File diff suppressed because it is too large Load Diff
@@ -4,34 +4,33 @@ Subject: Add menu item to bookmark all tabs
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
chrome/android/java/res/menu/main_menu.xml | 7 ++
.../chrome/browser/ChromeTabbedActivity.java | 24 +++++++
.../browser/bookmarks/BookmarkBridge.java | 67 +++++++++++++++++++
.../bookmarks/android/bookmark_bridge.cc | 44 ++++++++++++
.../bookmarks/android/bookmark_bridge.h | 8 +++
.../browser/bookmarks/bookmark_html_writer.cc | 11 ++-
chrome/android/java/res/menu/main_menu.xml | 7 +++
.../chrome/browser/ChromeTabbedActivity.java | 26 ++++++++
.../browser/bookmarks/BookmarkBridge.java | 60 +++++++++++++++++++
.../browser/bookmarks/BookmarkUtils.java | 4 ++
.../bookmarks/android/bookmark_bridge.cc | 17 ++++++
.../bookmarks/android/bookmark_bridge.h | 4 ++
.../browser/bookmarks/bookmark_html_writer.cc | 8 ++-
.../bookmarks/chrome_bookmark_client.cc | 2 +
.../dialogs/DownloadLocationCustomView.java | 4 +-
.../strings/android_chrome_strings.grd | 3 +
components/bookmark_bar_strings.grdp | 6 ++
.../bookmarks/browser/bookmark_codec.cc | 20 +++++-
components/bookmarks/browser/bookmark_codec.h | 7 +-
.../browser/bookmark_load_details.cc | 8 ++-
.../bookmarks/browser/bookmark_codec.cc | 24 ++++++--
components/bookmarks/browser/bookmark_codec.h | 7 ++-
.../browser/bookmark_load_details.cc | 4 ++
.../bookmarks/browser/bookmark_load_details.h | 2 +
.../bookmarks/browser/bookmark_model.cc | 3 +-
components/bookmarks/browser/bookmark_model.h | 7 ++
components/bookmarks/browser/bookmark_node.cc | 11 +++
components/bookmarks/browser/bookmark_node.h | 3 +
.../bookmarks/browser/bookmark_storage.cc | 2 +
.../bookmarks/browser/bookmark_uuids.cc | 3 +
components/bookmarks/browser/bookmark_uuids.h | 1 +
components/bookmarks/browser/model_loader.cc | 8 ++-
components/bookmarks/browser/bookmark_model.h | 7 +++
components/bookmarks/browser/bookmark_node.cc | 15 +++++
components/bookmarks/browser/bookmark_node.h | 5 ++
components/bookmarks/browser/model_loader.cc | 3 +-
.../bookmark_specifics_conversions.cc | 1 +
22 files changed, 236 insertions(+), 14 deletions(-)
21 files changed, 202 insertions(+), 10 deletions(-)
diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/res/menu/main_menu.xml
--- a/chrome/android/java/res/menu/main_menu.xml
+++ b/chrome/android/java/res/menu/main_menu.xml
@@ -71,6 +71,10 @@ found in the LICENSE file.
@@ -64,6 +64,10 @@
<item android:id="@+id/all_bookmarks_menu_id"
android:title="@string/menu_bookmarks"
android:icon="@drawable/btn_star_filled" />
@@ -42,38 +41,39 @@ diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/re
<item android:id="@+id/recent_tabs_menu_id"
android:title="@string/menu_recent_tabs"
android:icon="@drawable/devices_black_24dp" />
@@ -186,6 +190,9 @@ found in the LICENSE file.
<item android:id="@+id/close_all_incognito_tabs_menu_id"
android:title="@string/menu_close_all_incognito_tabs"
android:icon="@drawable/btn_close_white" />
@@ -182,6 +186,9 @@
<item android:id="@+id/menu_group_tabs"
android:title="@string/menu_group_tabs"
android:icon="@drawable/ic_widgets" />
+ <item android:id="@+id/bookmark_all_tabs_menu_id"
+ android:title="@string/menu_bookmark_all_tabs"
+ android:icon="@drawable/ic_folder_blue_24dp" />
<item android:id="@+id/menu_select_tabs"
android:title="@string/menu_select_tabs"
android:icon="@drawable/ic_select_tabs" />
<item android:id="@+id/track_prices_row_menu_id"
android:title="@string/menu_track_prices"
android:icon="@drawable/ic_trending_down_black" />
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
@@ -89,6 +89,7 @@ import org.chromium.chrome.browser.base.ColdStartTracker;
@@ -73,6 +73,8 @@ import org.chromium.chrome.browser.back_press.MinimizeAppAndCloseTabBackPressHan
import org.chromium.chrome.browser.bookmarks.BookmarkUtils;
import org.chromium.chrome.browser.browserservices.intents.WebappConstants;
import org.chromium.chrome.browser.compositor.CompositorViewHolder;
+import org.chromium.chrome.browser.bookmarks.BookmarkBridge;
+import org.chromium.chrome.browser.bookmarks.BookmarkModel;
import org.chromium.chrome.browser.compositor.layouts.Layout;
import org.chromium.chrome.browser.compositor.layouts.LayoutManagerChrome;
import org.chromium.chrome.browser.compositor.layouts.LayoutManagerChromePhone;
@@ -2950,6 +2951,8 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
getTabModelSelectorSupplier().get(),
() -> getTabModelSelector().closeAllTabs());
@@ -2140,6 +2142,8 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
CloseAllTabsDialog.show(this, getModalDialogManagerSupplier(),
() -> getTabModelSelector().closeAllTabs(), /*isIncognito=*/false);
RecordUserAction.record("MobileMenuCloseAllTabs");
+ } else if (id == R.id.bookmark_all_tabs_menu_id) {
+ bookmarkAllTabs();
} else if (id == R.id.close_all_incognito_tabs_menu_id) {
// Close only incognito tabs
CloseAllTabsDialog.show(
@@ -3021,6 +3024,27 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
getTabModalLifetimeHandler().onOmniboxFocusChanged(hasFocus);
CloseAllTabsDialog.show(this, getModalDialogManagerSupplier(),
@@ -2192,6 +2196,28 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
mTabModalHandler.onOmniboxFocusChanged(hasFocus);
}
+ private void bookmarkAllTabs() {
@@ -84,16 +84,17 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct
+ return;
+ }
+
+ final BookmarkModel bookmarkModel = mBookmarkModelSupplier.get();
+ final BookmarkBridge bridge = mBookmarkBridgeSupplier.get();
+ final BookmarkModel bookmarkModel = new BookmarkModel();
+ bookmarkModel.finishLoadingBookmarkModel(() -> {
+ for (int i = 0; i < tabModel.getCount(); i++) {
+ Tab tab = tabModel.getTabAt(i);
+ if (tab.isNativePage()) {
+ continue;
+ }
+ bookmarkModel.addToTabsCollection(this, tab);
+ bridge.addToTabsCollection(this, tab);
+ }
+ bookmarkModel.finishedAddingToTabsCollection(this, getSnackbarManager());
+ bridge.finishedAddingToTabsCollection(this, getSnackbarManager());
+ });
+ }
+
@@ -103,35 +104,35 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java
@@ -18,11 +18,17 @@ import org.jni_zero.NativeMethods;
@@ -29,6 +29,7 @@ import com.google.common.primitives.UnsignedLongs;
import com.google.protobuf.InvalidProtocolBufferException;
import org.chromium.base.Callback;
import org.chromium.base.ContextUtils;
+import org.chromium.base.Log;
import org.chromium.base.ObserverList;
import org.chromium.base.ThreadUtils;
import org.chromium.base.metrics.RecordUserAction;
import org.chromium.chrome.browser.partnerbookmarks.PartnerBookmarksShim;
import org.chromium.base.annotations.CalledByNative;
@@ -42,6 +43,10 @@ import org.chromium.chrome.browser.power_bookmarks.ShoppingSpecifics;
import org.chromium.chrome.browser.profiles.Profile;
+import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.read_later.ReadingListUtils;
import org.chromium.chrome.browser.tab.Tab;
+import org.chromium.chrome.browser.ui.messages.snackbar.Snackbar;
+import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager;
+import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager.SnackbarController;
+import org.chromium.chrome.R;
import org.chromium.components.bookmarks.BookmarkId;
import org.chromium.components.bookmarks.BookmarkItem;
import org.chromium.components.bookmarks.BookmarkType;
@@ -82,6 +88,8 @@ import org.chromium.ui.modaldialog.DialogDismissalCause;
class BookmarkBridge {
private final ObserverList<BookmarkModelObserver> mObservers = new ObserverList<>();
import org.chromium.components.commerce.PriceTracking.ProductPrice;
@@ -86,6 +91,7 @@ import java.io.File;
* bookmark model stored in native.
*/
public class BookmarkBridge {
+ private static final String TAG = "BookmarkBridge";
+
private long mNativeBookmarkBridge;
private final Profile mProfile;
private boolean mIsDestroyed;
private boolean mIsDoingExtensiveChanges;
@@ -402,6 +410,16 @@ class BookmarkBridge {
return mMobileFolderId;
@@ -603,6 +609,16 @@ public class BookmarkBridge {
mNativeBookmarkBridge, BookmarkBridge.this);
}
+ /**
@@ -144,18 +145,17 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
+ mNativeBookmarkBridge, BookmarkBridge.this);
+ }
+
/** Returns Id representing the special "other" folder from bookmark model. */
public BookmarkId getOtherFolderId() {
ThreadUtils.assertOnUiThread();
@@ -1092,6 +1110,50 @@ class BookmarkBridge {
.addToReadingList(mNativeBookmarkBridge, parentId, title, url);
/**
* @return Id representing the special "other" folder from bookmark model.
*/
@@ -1273,6 +1289,49 @@ public class BookmarkBridge {
mNativeBookmarkBridge, BookmarkBridge.this, title, url);
}
+ // Used to bookmark all tabs in a specific folder, created if not existing
+ public BookmarkId addToTabsCollection(Context context, Tab tab) {
+ BookmarkId parent = getTabsCollectionFolderId();
+ BookmarkId existingId = BookmarkBridgeJni.get().getBookmarkIdForTabsCollection(
+ mNativeBookmarkBridge, tab.getOriginalUrl());
+ BookmarkId existingId = getUserBookmarkIdForTab(tab);
+ if (existingId != null && existingId.getId() != BookmarkId.INVALID_ID) {
+ BookmarkId existingBookmarkId = new BookmarkId(existingId.getId(), BookmarkType.NORMAL);
+ BookmarkItem existingBookmark = getBookmarkById(existingBookmarkId);
@@ -165,7 +165,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
+ }
+ }
+ BookmarkId bookmarkId =
+ addBookmark(parent, getChildCount(parent), tab.getTitle(), tab.getUrl());
+ addBookmark(parent, getChildCount(parent), tab.getTitle(), tab.getUrl().getSpec());
+
+ if (bookmarkId == null) {
+ Log.e(TAG,
@@ -196,65 +196,53 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
+ }
+
/**
* Helper method to mark an item as read.
*
@@ -1334,6 +1396,9 @@ class BookmarkBridge {
BookmarkId getMostRecentlyAddedUserBookmarkIdForUrl(long nativeBookmarkBridge, GURL url);
+ BookmarkId getBookmarkIdForTabsCollection(
+ long nativeBookmarkBridge, GURL url);
+
BookmarkItem getBookmarkById(long nativeBookmarkBridge, long id, int type);
void getTopLevelFolderIds(
@@ -1353,6 +1418,8 @@ class BookmarkBridge {
BookmarkId getRootFolderId(long nativeBookmarkBridge);
* @param url The URL of the reading list item.
* @return The reading list item with the URL, or null if no such reading list item.
@@ -1570,6 +1629,7 @@ public class BookmarkBridge {
void getAllFoldersWithDepths(long nativeBookmarkBridge, BookmarkBridge caller,
List<BookmarkId> folderList, List<Integer> depthList);
BookmarkId getRootFolderId(long nativeBookmarkBridge, BookmarkBridge caller);
+ BookmarkId getTabsCollectionFolderId(long nativeBookmarkBridge, BookmarkBridge caller);
+
BookmarkId getMobileFolderId(long nativeBookmarkBridge);
BookmarkId getMobileFolderId(long nativeBookmarkBridge, BookmarkBridge caller);
BookmarkId getOtherFolderId(long nativeBookmarkBridge, BookmarkBridge caller);
BookmarkId getDesktopFolderId(long nativeBookmarkBridge, BookmarkBridge caller);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java
@@ -610,6 +610,7 @@ public class BookmarkUtils {
List<BookmarkId> topLevelFolders = new ArrayList<>();
BookmarkId desktopNodeId = bookmarkModel.getDesktopFolderId();
BookmarkId mobileNodeId = bookmarkModel.getMobileFolderId();
+ BookmarkId tabsCollectionNodeId = bookmarkModel.getTabsCollectionFolderId();
BookmarkId othersNodeId = bookmarkModel.getOtherFolderId();
BookmarkId getOtherFolderId(long nativeBookmarkBridge);
List<BookmarkId> specialFoldersIds =
@@ -635,6 +636,9 @@ public class BookmarkUtils {
if (bookmarkModel.isFolderVisible(mobileNodeId)) {
topLevelFolders.add(mobileNodeId);
}
+ if (bookmarkModel.isFolderVisible(tabsCollectionNodeId)) {
+ topLevelFolders.add(tabsCollectionNodeId);
+ }
if (bookmarkModel.isFolderVisible(desktopNodeId)) {
topLevelFolders.add(desktopNodeId);
}
diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browser/bookmarks/android/bookmark_bridge.cc
--- a/chrome/browser/bookmarks/android/bookmark_bridge.cc
+++ b/chrome/browser/bookmarks/android/bookmark_bridge.cc
@@ -367,6 +367,33 @@ void BookmarkBridge::GetImageUrlForBookmark(
base::BindOnce(&HandleImageUrlResponse, callback));
}
@@ -432,6 +432,11 @@ void BookmarkBridge::GetTopLevelFolderIDs(
top_level_folders.push_back(node.get());
}
+base::android::ScopedJavaLocalRef<jobject>
+BookmarkBridge::GetBookmarkIdForTabsCollection(
+ JNIEnv* env,
+ const JavaParamRef<jobject>& url) {
+ DCHECK_CURRENTLY_ON(BrowserThread::UI);
+
+ GURL gurl = *url::GURLAndroid::ToNativeGURL(env, url);
+
+ bookmarks::BookmarkModel* model =
+ BookmarkModelFactory::GetForBrowserContext(profile_);
+
+ std::vector<raw_ptr<const bookmarks::BookmarkNode, VectorExperimental>> nodes =
+ model->GetNodesByURL(gurl);
+ std::sort(nodes.begin(), nodes.end(), &bookmarks::MoreRecentlyAdded);
+
+ for (const BookmarkNode* node : nodes) {
+ for (const auto& child : model->tabs_collection_node()->children()) {
+ if (node->id() == child->id()) {
+ return JavaBookmarkIdCreateBookmarkId(env, node->id(),
+ GetBookmarkType(node));
+ }
+ for (const auto& node : bookmark_model_->tabs_collection_node()->children()) {
+ if (node->is_folder())
+ top_level_folders.push_back(node.get());
+ }
+ }
+
+ return nullptr;
+}
+
base::android::ScopedJavaLocalRef<jobject>
BookmarkBridge::GetMostRecentlyAddedUserBookmarkIdForUrl(
JNIEnv* env,
@@ -482,6 +509,7 @@ void BookmarkBridge::GetAllFoldersWithDepths(
for (const auto& node : bookmark_model_->bookmark_bar_node()->children()) {
if (node->is_folder())
top_level_folders.push_back(node.get());
@@ -479,6 +484,7 @@ void BookmarkBridge::GetAllFoldersWithDepths(
// Vector to temporarily contain all child bookmarks at same level for sorting
std::vector<const BookmarkNode*> bookmarks = {
bookmark_model_->mobile_node(),
@@ -262,20 +250,8 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse
bookmark_model_->bookmark_bar_node(),
bookmark_model_->other_node(),
};
@@ -539,6 +567,11 @@ std::vector<const BookmarkNode*> BookmarkBridge::GetTopLevelFolderIdsImpl(
top_level_folders.push_back(root_child.get());
}
+ for (const auto& node : bookmark_model_->tabs_collection_node()->children()) {
+ if (node->is_folder())
+ top_level_folders.push_back(node.get());
+ }
+
if (account_reading_list_manager_ &&
account_reading_list_manager_->GetRoot()) {
top_level_folders.push_back(account_reading_list_manager_->GetRoot());
@@ -1176,6 +1209,17 @@ void BookmarkBridge::GetBookmarksOfType(
AddBookmarkNodesToBookmarkIdList(env, j_list, results);
@@ -531,6 +537,17 @@ ScopedJavaLocalRef<jobject> BookmarkBridge::GetMobileFolderId(
return folder_id_obj;
}
+ScopedJavaLocalRef<jobject> BookmarkBridge::GetTabsCollectionFolderId(
@@ -289,69 +265,47 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse
+ return folder_id_obj;
+}
+
ScopedJavaLocalRef<jobject> BookmarkBridge::AddFolder(
ScopedJavaLocalRef<jobject> BookmarkBridge::GetOtherFolderId(
JNIEnv* env,
const JavaParamRef<jobject>& j_parent_id_obj,
const JavaParamRef<jobject>& obj) {
diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser/bookmarks/android/bookmark_bridge.h
--- a/chrome/browser/bookmarks/android/bookmark_bridge.h
+++ b/chrome/browser/bookmarks/android/bookmark_bridge.h
@@ -77,6 +77,10 @@ class BookmarkBridge : public ProfileObserver,
const base::android::JavaParamRef<jobject>& j_url,
const base::android::JavaParamRef<jobject>& j_callback);
+ base::android::ScopedJavaLocalRef<jobject> GetBookmarkIdForTabsCollection(
+ JNIEnv* env,
+ const base::android::JavaParamRef<jobject>& url);
+
base::android::ScopedJavaLocalRef<jobject>
GetMostRecentlyAddedUserBookmarkIdForUrl(
@@ -121,6 +121,10 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver,
JNIEnv* env,
@@ -227,6 +231,10 @@ class BookmarkBridge : public ProfileObserver,
const base::android::JavaParamRef<jobject>& j_list,
jint type);
const base::android::JavaParamRef<jobject>& obj);
+ base::android::ScopedJavaLocalRef<jobject> GetTabsCollectionFolderId(
+ JNIEnv* env,
+ const base::android::JavaParamRef<jobject>& obj);
+
base::android::ScopedJavaLocalRef<jobject> AddFolder(
base::android::ScopedJavaLocalRef<jobject> GetOtherFolderId(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& j_parent_id_obj,
const base::android::JavaParamRef<jobject>& obj);
diff --git a/chrome/browser/bookmarks/bookmark_html_writer.cc b/chrome/browser/bookmarks/bookmark_html_writer.cc
--- a/chrome/browser/bookmarks/bookmark_html_writer.cc
+++ b/chrome/browser/bookmarks/bookmark_html_writer.cc
@@ -168,7 +168,8 @@ class Writer : public base::RefCountedThreadSafe<Writer> {
BookmarkCodec codec;
bookmarks_ =
codec.Encode(model->bookmark_bar_node(), model->other_node(),
- model->mobile_node(), /*sync_metadata_str=*/std::string());
+ model->mobile_node(), model->tabs_collection_node(),
+ /*sync_metadata_str=*/std::string());
}
Writer(const Writer&) = delete;
@@ -195,15 +196,19 @@ class Writer : public base::RefCountedThreadSafe<Writer> {
roots->FindDict(BookmarkCodec::kOtherBookmarkFolderNameKey);
base::Value::Dict* mobile_folder_value =
roots->FindDict(BookmarkCodec::kMobileBookmarkFolderNameKey);
+ base::Value::Dict* tabs_collection_value =
+ roots->FindDict(BookmarkCodec::kTabsBookmarkFolderNameKey);
@@ -190,6 +190,8 @@ class Writer : public base::RefCountedThreadSafe<Writer> {
roots->FindDictKey(BookmarkCodec::kOtherBookmarkFolderNameKey);
base::Value* mobile_folder_value =
roots->FindDictKey(BookmarkCodec::kMobileBookmarkFolderNameKey);
+ base::Value* tabs_collection_value =
+ roots->FindDictKey(BookmarkCodec::kTabsBookmarkFolderNameKey);
DCHECK(root_folder_value);
DCHECK(other_folder_value);
DCHECK(mobile_folder_value);
+ DCHECK(tabs_collection_value);
IncrementIndent();
if (!WriteNode(*root_folder_value, BookmarkNode::BOOKMARK_BAR) ||
!WriteNode(*other_folder_value, BookmarkNode::OTHER_NODE) ||
- !WriteNode(*mobile_folder_value, BookmarkNode::MOBILE)) {
+ !WriteNode(*mobile_folder_value, BookmarkNode::MOBILE) ||
+ !WriteNode(*tabs_collection_value, BookmarkNode::TABS_COLLECTION)) {
@@ -201,7 +203,9 @@ class Writer : public base::RefCountedThreadSafe<Writer> {
!WriteNode(*static_cast<base::DictionaryValue*>(other_folder_value),
BookmarkNode::OTHER_NODE) ||
!WriteNode(*static_cast<base::DictionaryValue*>(mobile_folder_value),
- BookmarkNode::MOBILE)) {
+ BookmarkNode::MOBILE) ||
+ !WriteNode(*static_cast<base::DictionaryValue*>(tabs_collection_value),
+ BookmarkNode::TABS_COLLECTION)) {
NotifyOnFinish(BookmarksExportObserver::Result::kCouldNotWriteNodes);
return;
}
@@ -467,6 +472,8 @@ void BookmarkFaviconFetcher::ExportBookmarks() {
@@ -466,6 +470,8 @@ void BookmarkFaviconFetcher::ExportBookmarks() {
BookmarkModelFactory::GetForBrowserContext(profile_)->other_node());
ExtractUrls(
BookmarkModelFactory::GetForBrowserContext(profile_)->mobile_node());
@@ -360,10 +314,22 @@ diff --git a/chrome/browser/bookmarks/bookmark_html_writer.cc b/chrome/browser/b
if (!bookmark_urls_.empty())
FetchNextFavicon();
else
diff --git a/chrome/browser/bookmarks/chrome_bookmark_client.cc b/chrome/browser/bookmarks/chrome_bookmark_client.cc
--- a/chrome/browser/bookmarks/chrome_bookmark_client.cc
+++ b/chrome/browser/bookmarks/chrome_bookmark_client.cc
@@ -117,6 +117,8 @@ bool ChromeBookmarkClient::IsPermanentNodeVisibleWhenEmpty(
return !is_mobile;
case bookmarks::BookmarkNode::MOBILE:
return is_mobile;
+ case bookmarks::BookmarkNode::TABS_COLLECTION:
+ return is_mobile;
}
return false;
diff --git a/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationCustomView.java b/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationCustomView.java
--- a/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationCustomView.java
+++ b/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationCustomView.java
@@ -85,7 +85,7 @@ public class DownloadLocationCustomView extends ScrollView
@@ -79,7 +79,7 @@ public class DownloadLocationCustomView
mDirectoryAdapter.update();
}
@@ -372,7 +338,7 @@ diff --git a/chrome/browser/download/android/java/src/org/chromium/chrome/browse
mTitle.setText(title);
}
@@ -93,7 +93,7 @@ public class DownloadLocationCustomView extends ScrollView
@@ -87,7 +87,7 @@ public class DownloadLocationCustomView
mSubtitleView.setText(subtitle);
}
@@ -384,9 +350,9 @@ diff --git a/chrome/browser/download/android/java/src/org/chromium/chrome/browse
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd
--- a/chrome/browser/ui/android/strings/android_chrome_strings.grd
+++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
@@ -3875,6 +3875,9 @@ To change this setting, <ph name="BEGIN_LINK">BEGIN_LINK</ph>clear the Chrome da
<message name="IDS_MENU_SELECT_TABS" desc="Menu item for bulk editing tabs. [CHAR_LIMIT=27]">
Select tabs
@@ -3516,6 +3516,9 @@ To change this setting, <ph name="BEGIN_LINK">&lt;resetlink&gt;</ph>reset sync<p
<message name="IDS_MENU_TRACK_PRICES" desc="Menu item for tracking prices on tabs. [CHAR_LIMIT=27]">
Track prices
</message>
+ <message name="IDS_MENU_BOOKMARK_ALL_TABS" desc="Menu item to bookmark all tabs. [CHAR-LIMIT=27]">
+ Bookmark all tabs
@@ -420,7 +386,7 @@ diff --git a/components/bookmark_bar_strings.grdp b/components/bookmark_bar_stri
diff --git a/components/bookmarks/browser/bookmark_codec.cc b/components/bookmarks/browser/bookmark_codec.cc
--- a/components/bookmarks/browser/bookmark_codec.cc
+++ b/components/bookmarks/browser/bookmark_codec.cc
@@ -35,6 +35,7 @@ const char BookmarkCodec::kBookmarkBarFolderNameKey[] = "bookmark_bar";
@@ -34,6 +34,7 @@ const char BookmarkCodec::kBookmarkBarFolderNameKey[] = "bookmark_bar";
const char BookmarkCodec::kOtherBookmarkFolderNameKey[] = "other";
// The value is left as 'synced' for historical reasons.
const char BookmarkCodec::kMobileBookmarkFolderNameKey[] = "synced";
@@ -428,42 +394,51 @@ diff --git a/components/bookmarks/browser/bookmark_codec.cc b/components/bookmar
const char BookmarkCodec::kVersionKey[] = "version";
const char BookmarkCodec::kChecksumKey[] = "checksum";
const char BookmarkCodec::kIdKey[] = "id";
@@ -72,6 +73,7 @@ base::Value::Dict BookmarkCodec::Encode(
@@ -75,7 +76,8 @@ BookmarkCodec::~BookmarkCodec() = default;
base::Value BookmarkCodec::Encode(BookmarkModel* model,
std::string sync_metadata_str) {
return Encode(model->bookmark_bar_node(), model->other_node(),
- model->mobile_node(), model->root_node()->GetMetaInfoMap(),
+ model->mobile_node(), model->tabs_collection_node(),
+ model->root_node()->GetMetaInfoMap(),
std::move(sync_metadata_str));
}
@@ -83,6 +85,7 @@ base::Value BookmarkCodec::Encode(
const BookmarkNode* bookmark_bar_node,
const BookmarkNode* other_folder_node,
const BookmarkNode* mobile_folder_node,
+ const BookmarkNode* tabs_folder_node,
const BookmarkNode::MetaInfoMap* model_meta_info_map,
std::string sync_metadata_str) {
ids_reassigned_ = false;
uuids_reassigned_ = false;
@@ -91,6 +93,8 @@ base::Value::Dict BookmarkCodec::Encode(
roots.Set(kBookmarkBarFolderNameKey, EncodeNode(bookmark_bar_node));
roots.Set(kOtherBookmarkFolderNameKey, EncodeNode(other_folder_node));
roots.Set(kMobileBookmarkFolderNameKey, EncodeNode(mobile_folder_node));
+ if (tabs_folder_node)
+ roots.Set(kTabsBookmarkFolderNameKey, EncodeNode(tabs_folder_node));
@@ -104,6 +107,7 @@ base::Value BookmarkCodec::Encode(
roots.SetKey(kBookmarkBarFolderNameKey, EncodeNode(bookmark_bar_node));
roots.SetKey(kOtherBookmarkFolderNameKey, EncodeNode(other_folder_node));
roots.SetKey(kMobileBookmarkFolderNameKey, EncodeNode(mobile_folder_node));
+ roots.SetKey(kTabsBookmarkFolderNameKey, EncodeNode(tabs_folder_node));
if (model_meta_info_map)
roots.SetKey(kMetaInfo, EncodeMetaInfo(*model_meta_info_map));
FinalizeChecksum();
// We are going to store the computed checksum. So set stored checksum to be
@@ -107,6 +111,7 @@ bool BookmarkCodec::Decode(const base::Value::Dict& value,
@@ -120,6 +124,7 @@ bool BookmarkCodec::Decode(const base::Value& value,
BookmarkNode* bb_node,
BookmarkNode* other_folder_node,
BookmarkNode* mobile_folder_node,
+ BookmarkNode* tabs_folder_node,
int64_t* max_id,
std::string* sync_metadata_str) {
const int64_t max_already_assigned_id =
@@ -117,7 +122,8 @@ bool BookmarkCodec::Decode(const base::Value::Dict& value,
base::Uuid::ParseLowercase(kBookmarkBarNodeUuid),
base::Uuid::ParseLowercase(kOtherBookmarksNodeUuid),
base::Uuid::ParseLowercase(kMobileBookmarksNodeUuid),
- base::Uuid::ParseLowercase(kManagedNodeUuid)};
+ base::Uuid::ParseLowercase(kManagedNodeUuid),
+ base::Uuid::ParseLowercase(kTabsCollectionBookmarksNodeUuid)};
ids_.clear();
@@ -127,7 +132,8 @@ bool BookmarkCodec::Decode(const base::Value& value,
base::GUID::ParseLowercase(BookmarkNode::kBookmarkBarNodeGuid),
base::GUID::ParseLowercase(BookmarkNode::kOtherBookmarksNodeGuid),
base::GUID::ParseLowercase(BookmarkNode::kMobileBookmarksNodeGuid),
- base::GUID::ParseLowercase(BookmarkNode::kManagedNodeGuid)};
+ base::GUID::ParseLowercase(BookmarkNode::kManagedNodeGuid),
+ base::GUID::ParseLowercase(BookmarkNode::kTabsCollectionBookmarksNodeGuid)};
ids_reassigned_ = false;
uuids_reassigned_ = false;
guids_reassigned_ = false;
ids_valid_ = true;
@@ -125,13 +131,14 @@ bool BookmarkCodec::Decode(const base::Value::Dict& value,
@@ -135,12 +141,13 @@ bool BookmarkCodec::Decode(const base::Value& value,
stored_checksum_.clear();
InitializeChecksum();
bool success = DecodeHelper(bb_node, other_folder_node, mobile_folder_node,
@@ -472,47 +447,41 @@ diff --git a/components/bookmarks/browser/bookmark_codec.cc b/components/bookmar
FinalizeChecksum();
// If either the checksums differ or some IDs were missing/not unique,
// reassign IDs.
if (!ids_valid_ || computed_checksum_ != stored_checksum_) {
maximum_id_ = max_already_assigned_id;
if (!ids_valid_ || computed_checksum() != stored_checksum())
- ReassignIDs(bb_node, other_folder_node, mobile_folder_node);
+ ReassignIDs(bb_node, other_folder_node, mobile_folder_node, tabs_folder_node);
}
*max_id = maximum_id_ + 1;
return success;
@@ -189,6 +196,7 @@ base::Value::Dict BookmarkCodec::EncodeMetaInfo(
}
@@ -190,6 +197,7 @@ base::Value BookmarkCodec::EncodeMetaInfo(
bool BookmarkCodec::DecodeHelper(BookmarkNode* bb_node,
BookmarkNode* other_folder_node,
BookmarkNode* mobile_folder_node,
+ BookmarkNode* tabs_folder_node,
const base::Value::Dict& value,
const base::Value& value,
std::string* sync_metadata_str) {
std::optional<int> version = value.FindInt(kVersionKey);
@@ -213,6 +221,8 @@ bool BookmarkCodec::DecodeHelper(BookmarkNode* bb_node,
roots->FindDict(kOtherBookmarkFolderNameKey);
const base::Value::Dict* mobile_folder_value =
roots->FindDict(kMobileBookmarkFolderNameKey);
+ const base::Value::Dict* tabs_folder_value =
+ roots->FindDict(kTabsBookmarkFolderNameKey);
if (!bb_value || !other_folder_value || !mobile_folder_value)
if (!value.is_dict())
@@ -221,6 +229,12 @@ bool BookmarkCodec::DecodeHelper(BookmarkNode* bb_node,
return false;
@@ -220,6 +230,8 @@ bool BookmarkCodec::DecodeHelper(BookmarkNode* bb_node,
DecodeNode(*bb_value, nullptr, bb_node);
+ const base::DictionaryValue* tabs_folder_d_value = nullptr;
+ const base::Value* tabs_folder_value =
+ roots->FindDictKey(kTabsBookmarkFolderNameKey);
+ if (tabs_folder_value && tabs_folder_value->GetAsDictionary(&tabs_folder_d_value))
+ DecodeNode(*tabs_folder_d_value, nullptr, tabs_folder_node);
+
DecodeNode(*other_folder_value, nullptr, other_folder_node);
DecodeNode(*mobile_folder_value, nullptr, mobile_folder_node);
+ if (tabs_folder_value)
+ DecodeNode(*tabs_folder_value, nullptr, tabs_folder_node);
if (sync_metadata_str) {
const std::string* sync_metadata_str_base64 =
@@ -459,11 +471,13 @@ void BookmarkCodec::DecodeMetaInfoHelper(
@@ -456,11 +470,13 @@ void BookmarkCodec::DecodeMetaInfoHelper(
void BookmarkCodec::ReassignIDs(BookmarkNode* bb_node,
BookmarkNode* other_node,
- BookmarkNode* mobile_node) {
+ BookmarkNode* mobile_node,
+ BookmarkNode* tabs_folder_node) {
ids_.clear();
maximum_id_ = 0;
ReassignIDsHelper(bb_node);
ReassignIDsHelper(other_node);
ReassignIDsHelper(mobile_node);
@@ -523,15 +492,15 @@ diff --git a/components/bookmarks/browser/bookmark_codec.cc b/components/bookmar
diff --git a/components/bookmarks/browser/bookmark_codec.h b/components/bookmarks/browser/bookmark_codec.h
--- a/components/bookmarks/browser/bookmark_codec.h
+++ b/components/bookmarks/browser/bookmark_codec.h
@@ -39,6 +39,7 @@ class BookmarkCodec {
const BookmarkNode* bookmark_bar_node,
const BookmarkNode* other_folder_node,
const BookmarkNode* mobile_folder_node,
+ const BookmarkNode* tabs_folder_node,
std::string sync_metadata_str);
@@ -48,6 +48,7 @@ class BookmarkCodec {
base::Value Encode(const BookmarkNode* bookmark_bar_node,
const BookmarkNode* other_folder_node,
const BookmarkNode* mobile_folder_node,
+ const BookmarkNode* tabs_folder_node,
const BookmarkNode::MetaInfoMap* model_meta_info_map,
std::string sync_metadata_str);
// Decodes the previously encoded value to the specified nodes as well as
@@ -57,6 +58,7 @@ class BookmarkCodec {
@@ -60,6 +61,7 @@ class BookmarkCodec {
BookmarkNode* bb_node,
BookmarkNode* other_folder_node,
BookmarkNode* mobile_folder_node,
@@ -539,23 +508,23 @@ diff --git a/components/bookmarks/browser/bookmark_codec.h b/components/bookmark
int64_t* max_node_id,
std::string* sync_metadata_str);
@@ -82,6 +84,7 @@ class BookmarkCodec {
static const char kBookmarkBarFolderNameKey[];
static const char kOtherBookmarkFolderNameKey[];
static const char kMobileBookmarkFolderNameKey[];
@@ -105,6 +107,7 @@ class BookmarkCodec {
// Allows the BookmarkClient to read and a write a string blob from the JSON
// file. That string captures the bookmarks sync metadata.
static const char kSyncMetadata[];
+ static const char kTabsBookmarkFolderNameKey[];
static const char kVersionKey[];
static const char kChecksumKey[];
static const char kIdKey[];
@@ -114,6 +117,7 @@ class BookmarkCodec {
// Possible values for kTypeKey.
static const char kTypeURL[];
@@ -121,6 +124,7 @@ class BookmarkCodec {
bool DecodeHelper(BookmarkNode* bb_node,
BookmarkNode* other_folder_node,
BookmarkNode* mobile_folder_node,
+ BookmarkNode* tabs_folder_node,
const base::Value::Dict& value,
const base::Value& value,
std::string* sync_metadata_str);
@@ -124,7 +128,8 @@ class BookmarkCodec {
@@ -132,7 +136,8 @@ class BookmarkCodec {
// Reassigns bookmark IDs for all nodes.
void ReassignIDs(BookmarkNode* bb_node,
BookmarkNode* other_node,
@@ -568,80 +537,62 @@ diff --git a/components/bookmarks/browser/bookmark_codec.h b/components/bookmark
diff --git a/components/bookmarks/browser/bookmark_load_details.cc b/components/bookmarks/browser/bookmark_load_details.cc
--- a/components/bookmarks/browser/bookmark_load_details.cc
+++ b/components/bookmarks/browser/bookmark_load_details.cc
@@ -15,7 +15,7 @@ namespace {
// Number of top-level permanent folders excluding the managed node and account
// bookmarks.
-constexpr size_t kNumDefaultTopLevelPermanentFolders = 3u;
+constexpr size_t kNumDefaultTopLevelPermanentFolders = 4u;
} // namespace
@@ -40,6 +40,8 @@ BookmarkLoadDetails::BookmarkLoadDetails()
root_node_->Add(BookmarkPermanentNode::CreateOtherBookmarks(/*id=*/0)));
mobile_folder_node_ = static_cast<BookmarkPermanentNode*>(
root_node_->Add(BookmarkPermanentNode::CreateMobileBookmarks(/*id=*/0)));
@@ -37,6 +37,10 @@ BookmarkLoadDetails::BookmarkLoadDetails(BookmarkClient* client)
root_node_->Add(BookmarkPermanentNode::CreateMobileBookmarks(
max_id_++,
client->IsPermanentNodeVisibleWhenEmpty(BookmarkNode::MOBILE))));
+ tabs_collection_folder_node_ = static_cast<BookmarkPermanentNode*>(
+ root_node_->Add(BookmarkPermanentNode::CreateTabsCollectionBookmarks(/*id=*/0)));
CHECK_EQ(kNumDefaultTopLevelPermanentFolders, root_node_->children().size());
+ root_node_->Add(BookmarkPermanentNode::CreateTabsCollectionBookmarks(
+ max_id_++,
+ client->IsPermanentNodeVisibleWhenEmpty(BookmarkNode::TABS_COLLECTION))));
}
@@ -105,8 +107,8 @@ void BookmarkLoadDetails::AddManagedNode(
void BookmarkLoadDetails::CreateIndices() {
local_or_syncable_uuid_index_.insert(root_node_.get());
- static_assert(kNumDefaultTopLevelPermanentFolders == 3u,
- "The code below assumes three permanent nodes");
+ static_assert(kNumDefaultTopLevelPermanentFolders == 4u,
+ "The code below assumes 4 permanent nodes");
for (const auto& child : root_node_->children()) {
if (child.get() == account_bb_node_ ||
child.get() == account_other_folder_node_ ||
BookmarkLoadDetails::~BookmarkLoadDetails() = default;
diff --git a/components/bookmarks/browser/bookmark_load_details.h b/components/bookmarks/browser/bookmark_load_details.h
--- a/components/bookmarks/browser/bookmark_load_details.h
+++ b/components/bookmarks/browser/bookmark_load_details.h
@@ -39,6 +39,7 @@ class BookmarkLoadDetails {
@@ -47,6 +47,7 @@ class BookmarkLoadDetails {
BookmarkPermanentNode* bb_node() { return bb_node_; }
BookmarkPermanentNode* mobile_folder_node() { return mobile_folder_node_; }
BookmarkPermanentNode* other_folder_node() { return other_folder_node_; }
+ BookmarkPermanentNode* tabs_collection_folder_node() { return tabs_collection_folder_node_; }
// Account permanent nodes (null unless `AddAccountPermanentNodes()` is
// called).
@@ -138,6 +139,7 @@ class BookmarkLoadDetails {
raw_ptr<BookmarkPermanentNode> bb_node_;
raw_ptr<BookmarkPermanentNode> other_folder_node_;
raw_ptr<BookmarkPermanentNode> mobile_folder_node_;
+ raw_ptr<BookmarkPermanentNode> tabs_collection_folder_node_;
raw_ptr<BookmarkPermanentNode> account_bb_node_;
raw_ptr<BookmarkPermanentNode> account_other_folder_node_;
raw_ptr<BookmarkPermanentNode> account_mobile_folder_node_;
TitledUrlIndex* index() { return index_.get(); }
std::unique_ptr<TitledUrlIndex> owned_index() { return std::move(index_); }
@@ -103,6 +104,7 @@ class BookmarkLoadDetails {
raw_ptr<BookmarkPermanentNode> bb_node_ = nullptr;
raw_ptr<BookmarkPermanentNode> other_folder_node_ = nullptr;
raw_ptr<BookmarkPermanentNode> mobile_folder_node_ = nullptr;
+ BookmarkPermanentNode* tabs_collection_folder_node_ = nullptr;
LoadManagedNodeCallback load_managed_node_callback_;
std::unique_ptr<TitledUrlIndex> index_;
BookmarkNode::MetaInfoMap model_meta_info_map_;
diff --git a/components/bookmarks/browser/bookmark_model.cc b/components/bookmarks/browser/bookmark_model.cc
--- a/components/bookmarks/browser/bookmark_model.cc
+++ b/components/bookmarks/browser/bookmark_model.cc
@@ -846,7 +846,7 @@ bool BookmarkModel::HasBookmarks() const {
bool BookmarkModel::HasNoUserCreatedBookmarksOrFolders() const {
@@ -566,7 +566,7 @@ bool BookmarkModel::HasBookmarks() {
bool BookmarkModel::HasNoUserCreatedBookmarksOrFolders() {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
return bookmark_bar_node_->children().empty() &&
- other_node_->children().empty() && mobile_node_->children().empty();
+ other_node_->children().empty() && mobile_node_->children().empty() && tabs_collection_node_->children().empty();
}
bool BookmarkModel::IsBookmarked(const GURL& url) const {
@@ -1191,6 +1191,7 @@ void BookmarkModel::DoneLoading(std::unique_ptr<BookmarkLoadDetails> details) {
bool BookmarkModel::IsBookmarked(const GURL& url) {
@@ -808,6 +808,7 @@ void BookmarkModel::DoneLoading(std::unique_ptr<BookmarkLoadDetails> details) {
bookmark_bar_node_ = details->bb_node();
other_node_ = details->other_folder_node();
mobile_node_ = details->mobile_folder_node();
+ tabs_collection_node_ = details->tabs_collection_folder_node();
account_bookmark_bar_node_ = details->account_bb_node();
account_other_node_ = details->account_other_folder_node();
titled_url_index_->SetNodeSorter(
std::make_unique<TypedCountSorter>(client_.get()));
diff --git a/components/bookmarks/browser/bookmark_model.h b/components/bookmarks/browser/bookmark_model.h
--- a/components/bookmarks/browser/bookmark_model.h
+++ b/components/bookmarks/browser/bookmark_model.h
@@ -159,6 +159,12 @@ class BookmarkModel final : public BookmarkUndoProvider,
// bookmarks in the account storage).
const BookmarkNode* account_mobile_node() const;
@@ -121,6 +121,12 @@ class BookmarkModel : public BookmarkUndoProvider,
return mobile_node_;
}
+ // Returns the 'mobile' node. This is NULL until loaded.
+ const BookmarkNode* tabs_collection_node() const {
@@ -652,10 +603,10 @@ diff --git a/components/bookmarks/browser/bookmark_model.h b/components/bookmark
bool is_root_node(const BookmarkNode* node) const {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
return node == root_;
@@ -619,6 +625,7 @@ class BookmarkModel final : public BookmarkUndoProvider,
raw_ptr<BookmarkPermanentNode> account_bookmark_bar_node_ = nullptr;
raw_ptr<BookmarkPermanentNode> account_other_node_ = nullptr;
raw_ptr<BookmarkPermanentNode> account_mobile_node_ = nullptr;
@@ -396,6 +402,7 @@ class BookmarkModel : public BookmarkUndoProvider,
raw_ptr<BookmarkPermanentNode> bookmark_bar_node_ = nullptr;
raw_ptr<BookmarkPermanentNode> other_node_ = nullptr;
raw_ptr<BookmarkPermanentNode> mobile_node_ = nullptr;
+ raw_ptr<BookmarkPermanentNode> tabs_collection_node_ = nullptr;
// The maximum ID assigned to the bookmark nodes in the model.
@@ -663,31 +614,35 @@ diff --git a/components/bookmarks/browser/bookmark_model.h b/components/bookmark
diff --git a/components/bookmarks/browser/bookmark_node.cc b/components/bookmarks/browser/bookmark_node.cc
--- a/components/bookmarks/browser/bookmark_node.cc
+++ b/components/bookmarks/browser/bookmark_node.cc
@@ -161,6 +161,8 @@ bool BookmarkPermanentNode::IsTypeVisibleWhenEmpty(Type type) {
#endif
@@ -60,6 +60,10 @@ const char BookmarkNode::kOtherBookmarksNodeGuid[] =
const char BookmarkNode::kMobileBookmarksNodeGuid[] =
"4cf2e351-0e85-532b-bb37-df045d8f8d0f";
switch (type) {
+ case bookmarks::BookmarkNode::TABS_COLLECTION:
+ return !is_desktop;
case BookmarkNode::URL:
NOTREACHED_NORETURN();
case BookmarkNode::FOLDER:
@@ -211,6 +213,15 @@ BookmarkPermanentNode::CreateMobileBookmarks(int64_t id) {
l10n_util::GetStringUTF16(IDS_BOOKMARK_BAR_MOBILE_FOLDER_NAME)));
+// static
+const char BookmarkNode::kTabsCollectionBookmarksNodeGuid[] =
+ "00000000-0000-4000-a000-000000000006";
+
// static
const char BookmarkNode::kManagedNodeGuid[] =
"323123f4-9381-5aee-80e6-ea5fca2f7672";
@@ -225,6 +229,17 @@ BookmarkPermanentNode::CreateMobileBookmarks(int64_t id,
visible_when_empty));
}
+// static
+std::unique_ptr<BookmarkPermanentNode>
+BookmarkPermanentNode::CreateTabsCollectionBookmarks(int64_t id) {
+BookmarkPermanentNode::CreateTabsCollectionBookmarks(int64_t id,
+ bool visible_when_empty) {
+ // base::WrapUnique() used because the constructor is private.
+ return base::WrapUnique(new BookmarkPermanentNode(
+ id, TABS_COLLECTION, base::Uuid::ParseLowercase(kTabsCollectionBookmarksNodeUuid),
+ l10n_util::GetStringUTF16(IDS_BOOKMARK_BAR_TABS_COLLECTION_FOLDER_NAME)));
+ id, TABS_COLLECTION, base::GUID::ParseLowercase(kTabsCollectionBookmarksNodeGuid),
+ l10n_util::GetStringUTF16(IDS_BOOKMARK_BAR_TABS_COLLECTION_FOLDER_NAME),
+ visible_when_empty));
+}
+
BookmarkPermanentNode::BookmarkPermanentNode(int64_t id,
Type type,
const base::Uuid& uuid,
const base::GUID& guid,
diff --git a/components/bookmarks/browser/bookmark_node.h b/components/bookmarks/browser/bookmark_node.h
--- a/components/bookmarks/browser/bookmark_node.h
+++ b/components/bookmarks/browser/bookmark_node.h
@@ -699,94 +654,41 @@ diff --git a/components/bookmarks/browser/bookmark_node.h b/components/bookmarks
MOBILE
};
@@ -231,6 +232,8 @@ class BookmarkPermanentNode : public BookmarkNode {
int64_t id);
@@ -52,6 +53,7 @@ class BookmarkNode : public ui::TreeNode<BookmarkNode>, public TitledUrlNode {
static const char kBookmarkBarNodeGuid[];
static const char kOtherBookmarksNodeGuid[];
static const char kMobileBookmarksNodeGuid[];
+ static const char kTabsCollectionBookmarksNodeGuid[];
static const char kManagedNodeGuid[];
// A bug in sync caused some problematic GUIDs to be produced.
@@ -250,6 +252,9 @@ class BookmarkPermanentNode : public BookmarkNode {
static std::unique_ptr<BookmarkPermanentNode> CreateMobileBookmarks(
int64_t id);
int64_t id,
bool visible_when_empty);
+ static std::unique_ptr<BookmarkPermanentNode> CreateTabsCollectionBookmarks(
+ int64_t id);
+ int64_t id,
+ bool visible_when_empty);
// Returns whether the permanent node of type `type` should be visible even
// when it is empty (i.e. no children).
diff --git a/components/bookmarks/browser/bookmark_storage.cc b/components/bookmarks/browser/bookmark_storage.cc
--- a/components/bookmarks/browser/bookmark_storage.cc
+++ b/components/bookmarks/browser/bookmark_storage.cc
@@ -45,6 +45,7 @@ base::Value::Dict EncodeModelToDict(
case BookmarkStorage::kSelectLocalOrSyncableNodes:
return codec.Encode(
model->bookmark_bar_node(), model->other_node(), model->mobile_node(),
+ model->tabs_collection_node(),
model->client()->EncodeLocalOrSyncableBookmarkSyncMetadata());
case BookmarkStorage::kSelectAccountNodes:
if (!model->account_bookmark_bar_node()) {
@@ -59,6 +60,7 @@ base::Value::Dict EncodeModelToDict(
return codec.Encode(model->account_bookmark_bar_node(),
model->account_other_node(),
model->account_mobile_node(),
+ nullptr,
model->client()->EncodeAccountBookmarkSyncMetadata());
}
diff --git a/components/bookmarks/browser/bookmark_uuids.cc b/components/bookmarks/browser/bookmark_uuids.cc
--- a/components/bookmarks/browser/bookmark_uuids.cc
+++ b/components/bookmarks/browser/bookmark_uuids.cc
@@ -35,6 +35,9 @@ const char kManagedNodeUuid[] = "323123f4-9381-5aee-80e6-ea5fca2f7672";
// see https://crbug.com/1484372 for details.
const char kShoppingCollectionUuid[] = "89fc5b66-beb6-56c1-a99b-70635d7df201";
+const char kTabsCollectionBookmarksNodeUuid[] =
+ "00000000-0000-4000-a000-000000000006";
+
// This value is the result of exercising sync's function
// syncer::InferGuidForLegacyBookmark() with an empty input.
const char kBannedUuidDueToPastSyncBug[] =
diff --git a/components/bookmarks/browser/bookmark_uuids.h b/components/bookmarks/browser/bookmark_uuids.h
--- a/components/bookmarks/browser/bookmark_uuids.h
+++ b/components/bookmarks/browser/bookmark_uuids.h
@@ -14,6 +14,7 @@ extern const char kBookmarkBarNodeUuid[];
extern const char kOtherBookmarksNodeUuid[];
extern const char kMobileBookmarksNodeUuid[];
extern const char kManagedNodeUuid[];
+extern const char kTabsCollectionBookmarksNodeUuid[];
extern const char kShoppingCollectionUuid[];
// A bug in sync caused some problematic UUIDs to be produced.
// Constructor is private to disallow the construction of permanent nodes
// other than the well-known ones, see factory methods.
diff --git a/components/bookmarks/browser/model_loader.cc b/components/bookmarks/browser/model_loader.cc
--- a/components/bookmarks/browser/model_loader.cc
+++ b/components/bookmarks/browser/model_loader.cc
@@ -71,6 +71,8 @@ std::unique_ptr<BookmarkLoadDetails> LoadBookmarks(
BookmarkPermanentNode::CreateOtherBookmarks(0);
std::unique_ptr<BookmarkPermanentNode> account_mobile_folder_node =
BookmarkPermanentNode::CreateMobileBookmarks(0);
+ std::unique_ptr<BookmarkPermanentNode> tabs_collection_folder_node =
+ BookmarkPermanentNode::CreateTabsCollectionBookmarks(0);
std::optional<base::Value::Dict> root_dict =
LoadFileToDict(account_file_path);
@@ -78,7 +80,8 @@ std::unique_ptr<BookmarkLoadDetails> LoadBookmarks(
if (root_dict.has_value() &&
codec.Decode(*root_dict, /*already_assigned_ids=*/{},
account_bb_node.get(), account_other_folder_node.get(),
- account_mobile_folder_node.get(), &max_node_id,
+ account_mobile_folder_node.get(),
+ tabs_collection_folder_node.get(), &max_node_id,
&sync_metadata_str)) {
ids_assigned_to_account_nodes = codec.release_assigned_ids();
@@ -110,7 +113,8 @@ std::unique_ptr<BookmarkLoadDetails> LoadBookmarks(
if (root_dict.has_value() &&
codec.Decode(*root_dict, std::move(ids_assigned_to_account_nodes),
details->bb_node(), details->other_folder_node(),
- details->mobile_folder_node(), &max_node_id,
+ details->mobile_folder_node(),
+ details->tabs_collection_folder_node(), &max_node_id,
&sync_metadata_str)) {
details->set_local_or_syncable_sync_metadata_str(
std::move(sync_metadata_str));
@@ -57,7 +57,8 @@ void LoadBookmarks(const base::FilePath& path,
std::string sync_metadata_str;
BookmarkCodec codec;
codec.Decode(*root, details->bb_node(), details->other_folder_node(),
- details->mobile_folder_node(), &max_node_id,
+ details->mobile_folder_node(),
+ details->tabs_collection_folder_node(), &max_node_id,
&sync_metadata_str);
details->set_sync_metadata_str(std::move(sync_metadata_str));
details->set_max_id(std::max(max_node_id, details->max_id()));
diff --git a/components/sync_bookmarks/bookmark_specifics_conversions.cc b/components/sync_bookmarks/bookmark_specifics_conversions.cc
--- a/components/sync_bookmarks/bookmark_specifics_conversions.cc
+++ b/components/sync_bookmarks/bookmark_specifics_conversions.cc
@@ -445,6 +445,7 @@ sync_pb::BookmarkSpecifics::Type GetProtoTypeFromBookmarkNode(
@@ -419,6 +419,7 @@ sync_pb::BookmarkSpecifics::Type GetProtoTypeFromBookmarkNode(
case bookmarks::BookmarkNode::BOOKMARK_BAR:
case bookmarks::BookmarkNode::OTHER_NODE:
case bookmarks::BookmarkNode::MOBILE:
@@ -795,3 +697,4 @@ diff --git a/components/sync_bookmarks/bookmark_specifics_conversions.cc b/compo
return sync_pb::BookmarkSpecifics::FOLDER;
}
--
2.25.1
@@ -4,45 +4,45 @@ Subject: Add menu item to view source
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
.../android/java/res/menu/custom_tabs_menu.xml | 3 +++
chrome/android/java/res/menu/main_menu.xml | 3 +++
.../chrome/browser/ChromeTabbedActivity.java | 2 ++
.../chrome/browser/app/ChromeActivity.java | 5 +++++
.../appmenu/AppMenuPropertiesDelegateImpl.java | 18 ++++++++++++++++++
.../CustomTabAppMenuPropertiesDelegate.java | 1 +
.../android/strings/android_chrome_strings.grd | 4 ++++
7 files changed, 36 insertions(+)
chrome/android/java/res/menu/custom_tabs_menu.xml | 3 +++
chrome/android/java/res/menu/main_menu.xml | 3 +++
.../chrome/browser/ChromeTabbedActivity.java | 2 ++
.../chrome/browser/app/ChromeActivity.java | 5 +++++
.../app/appmenu/AppMenuPropertiesDelegateImpl.java | 14 ++++++++++++++
.../CustomTabAppMenuPropertiesDelegate.java | 1 +
.../ui/android/strings/android_chrome_strings.grd | 4 ++++
7 files changed, 32 insertions(+)
diff --git a/chrome/android/java/res/menu/custom_tabs_menu.xml b/chrome/android/java/res/menu/custom_tabs_menu.xml
--- a/chrome/android/java/res/menu/custom_tabs_menu.xml
+++ b/chrome/android/java/res/menu/custom_tabs_menu.xml
@@ -62,6 +62,9 @@ found in the LICENSE file.
@@ -46,6 +46,9 @@
<item android:id="@+id/add_to_homescreen_id"
android:title="@string/menu_add_to_homescreen"
android:orderInCategory="2" />
+ <item android:id="@+id/view_source_id"
+ android:title="@string/view_source"
+ android:orderInCategory="2" />
<item android:id="@+id/install_webapp_id"
android:title="@string/menu_install_webapp"
<item android:id="@+id/open_webapk_id"
android:title="@string/menu_open_webapk"
android:orderInCategory="2" />
diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/res/menu/main_menu.xml
--- a/chrome/android/java/res/menu/main_menu.xml
+++ b/chrome/android/java/res/menu/main_menu.xml
@@ -113,6 +113,9 @@ found in the LICENSE file.
@@ -106,6 +106,9 @@
<item android:id="@+id/add_to_homescreen_id"
android:title="@string/menu_add_to_homescreen"
android:icon="@drawable/ic_add_to_home_screen" />
+ <item android:id="@+id/view_source_id"
+ android:title="@string/view_source"
+ android:icon="@drawable/ic_drive_document_24dp" />
<item android:id="@+id/install_webapp_id"
android:title="@string/menu_install_webapp"
android:icon="@drawable/ic_install_webapp" />
<item android:id="@+id/open_webapk_id"
android:title="@string/menu_open_webapk"
android:icon="@drawable/ic_add_to_home_screen" />
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
@@ -2976,6 +2976,8 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
@@ -2166,6 +2166,8 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
NewTabPageUma.recordAction(NewTabPageUma.ACTION_OPENED_DOWNLOADS_MANAGER);
}
RecordUserAction.record("MobileMenuDownloadManager");
@@ -54,8 +54,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
@@ -2729,6 +2729,11 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
return doOpenWebApk(currentTab);
@@ -2419,6 +2419,11 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
return true;
}
+ if (id == R.id.view_source_id) {
@@ -69,7 +69,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java
@@ -585,6 +585,7 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate
@@ -527,6 +527,7 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate
isChromeScheme, isFileScheme, isContentScheme, isIncognito, url));
updateRequestDesktopSiteMenuItem(menu, currentTab, true /* can show */, isChromeScheme);
@@ -77,8 +77,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/App
updateAutoDarkMenuItem(menu, currentTab, isChromeScheme);
@@ -1236,6 +1237,23 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate
}
@@ -1152,6 +1153,19 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate
stopPriceTrackingMenuItem.setVisible(false);
}
+ /**
@@ -90,12 +90,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/App
+ protected void updateViewSourceMenuItem(
+ Menu menu, Tab currentTab) {
+ MenuItem viewSourceMenuItem = menu.findItem(R.id.view_source_id);
+ boolean visible = false;
+ if (currentTab != null) {
+ String url = currentTab.getUrl().getSpec();
+ visible = !url.isEmpty() && !url.startsWith("view-source:");
+ }
+ viewSourceMenuItem.setVisible(visible);
+ String url = currentTab.getUrl().getSpec();
+ viewSourceMenuItem.setVisible(!url.isEmpty() && !url.startsWith("view-source:"));
+ }
+
/**
@@ -104,7 +100,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/App
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java
@@ -295,6 +295,7 @@ public class CustomTabAppMenuPropertiesDelegate extends AppMenuPropertiesDelegat
@@ -219,6 +219,7 @@ public class CustomTabAppMenuPropertiesDelegate extends AppMenuPropertiesDelegat
updateRequestDesktopSiteMenuItem(
menu, currentTab, requestDesktopSiteVisible, isChromeScheme);
@@ -115,7 +111,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd
--- a/chrome/browser/ui/android/strings/android_chrome_strings.grd
+++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
@@ -317,6 +317,10 @@ CHAR_LIMIT guidelines:
@@ -312,6 +312,10 @@ CHAR_LIMIT guidelines:
USB
</message>
@@ -123,7 +119,8 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro
+ View source
+ </message>
+
<!-- Sign-in, sync and personalization preferences -->
<message name="IDS_PREFS_SECTION_ACCOUNT_AND_GOOGLE_SERVICES" desc="Title for the group of account-related entries and google services in Settings. [CHAR_LIMIT=32]">
You and Google
<message name="IDS_UNSUPPORTED" desc="Message displayed to the user when an attempted action is not supported.">
Unsupported
</message>
--
2.25.1
@@ -1,230 +0,0 @@
From: uazo <uazo@users.noreply.github.com>
Date: Mon, 21 Aug 2023 14:03:25 +0000
Subject: Add option to disable snapshots
License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
---
.../tab_management/TabGridViewBinder.java | 10 +++--
.../tasks/tab_management/TabProperties.java | 5 +++
.../java/res/xml/privacy_preferences.xml | 5 +++
.../chrome/browser/app/ChromeActivity.java | 3 +-
.../layouts/content/TabContentManager.java | 7 +++-
.../privacy/settings/PrivacySettings.java | 42 ++++++++++++++++++-
.../strings/android_chrome_strings.grd | 8 ++++
7 files changed, 73 insertions(+), 7 deletions(-)
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridViewBinder.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridViewBinder.java
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridViewBinder.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridViewBinder.java
@@ -327,9 +327,12 @@ class TabGridViewBinder {
// Adjust bitmap to thumbnail.
TabUtils.setBitmapAndUpdateImageMatrix(thumbnail, result, thumbnailSize);
} else if (isMostRecentRequest) {
- // If the most recent request is a null bitmap ensure a placeholder is
- // visible.
- thumbnail.setImageDrawable(null);
+ TabListFaviconProvider.TabFavicon tabFavicon = model.get(TabProperties.FAVICON);
+ if (tabFavicon != null) {
+ thumbnail.setScaleType(ImageView.ScaleType.CENTER);
+ thumbnail.setImageDrawable(
+ isSelected ? tabFavicon.getSelectedDrawable() : tabFavicon.getDefaultDrawable());
+ }
}
};
if (sThumbnailFetcherForTesting != null) {
@@ -368,6 +371,7 @@ class TabGridViewBinder {
ViewLookupCachingFrameLayout rootView,
PropertyModel model,
TabListFaviconProvider.TabFavicon favicon) {
+ model.set(TabProperties.FAVICON, favicon);
ImageView faviconView = (ImageView) rootView.fastFindViewById(R.id.tab_favicon);
if (favicon == null) {
faviconView.setImageDrawable(null);
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabProperties.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabProperties.java
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabProperties.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabProperties.java
@@ -63,6 +63,9 @@ public class TabProperties {
public static final WritableBooleanPropertyKey FAVICON_FETCHED =
new WritableBooleanPropertyKey();
+ public static final WritableObjectPropertyKey<TabListFaviconProvider.TabFavicon> FAVICON =
+ new WritableObjectPropertyKey<>();
+
/** Property for lazily fetching favicons when required by an item in a UI. */
public static final WritableObjectPropertyKey<TabListFaviconProvider.TabFaviconFetcher>
FAVICON_FETCHER = new WritableObjectPropertyKey<>();
@@ -160,6 +163,7 @@ public class TabProperties {
CARD_TYPE,
CONTENT_DESCRIPTION_STRING,
CLOSE_BUTTON_DESCRIPTION_STRING,
+ FAVICON,
SHOPPING_PERSISTED_TAB_DATA_FETCHER,
SHOULD_SHOW_PRICE_DROP_TOOLTIP,
QUICK_DELETE_ANIMATION_STATUS
@@ -172,6 +176,7 @@ public class TabProperties {
TAB_CLOSED_LISTENER,
FAVICON_FETCHED,
FAVICON_FETCHER,
+ FAVICON,
IS_SELECTED,
TITLE,
TABSTRIP_FAVICON_BACKGROUND_COLOR_ID,
diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/android/java/res/xml/privacy_preferences.xml
--- a/chrome/android/java/res/xml/privacy_preferences.xml
+++ b/chrome/android/java/res/xml/privacy_preferences.xml
@@ -54,6 +54,11 @@ found in the LICENSE file.
android:title="@string/open_external_links_incognito_title"
android:summary="@string/open_external_links_incognito_summary"
android:defaultValue="false" />
+ <org.chromium.components.browser_ui.settings.ChromeSwitchPreference
+ android:key="tabgrid_use_icons"
+ android:title="@string/tabgrid_use_icons_title"
+ android:summary="@string/tabgrid_use_icons_summary"
+ android:defaultValue="false" />
<Preference
android:key="preload_pages"
android:title="@string/preload_pages_title"
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
@@ -145,6 +145,7 @@ import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
import org.chromium.chrome.browser.preferences.ChromeSharedPreferences;
import org.chromium.chrome.browser.preferences.Pref;
import org.chromium.chrome.browser.printing.TabPrinter;
+import org.chromium.chrome.browser.privacy.settings.PrivacySettings;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.readaloud.ReadAloudController;
import org.chromium.chrome.browser.selection.SelectionPopupBackPressHandler;
@@ -704,7 +705,7 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
new TabContentManager(
this,
mBrowserControlsManagerSupplier.get(),
- !SysUtils.isLowEndDevice(),
+ !ContextUtils.getAppSharedPreferences().getBoolean(PrivacySettings.PREF_TABGRID_USE_ICONS, false),
tabModelSelector != null ? tabModelSelector::getTabById : null));
getBrowserControlsManager()
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/content/TabContentManager.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/content/TabContentManager.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/content/TabContentManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/content/TabContentManager.java
@@ -326,11 +326,14 @@ public class TabContentManager {
*/
public void getTabThumbnailWithCallback(
@NonNull int tabId,
- @NonNull Size thumbnailSize,
+ @NonNull Size thumbnailSize, //
@NonNull Callback<Bitmap> callback,
boolean forceUpdate,
boolean writeBack) {
- if (!mSnapshotsEnabled) return;
+ if (!mSnapshotsEnabled) {
+ callback.onResult(null);
+ return;
+ }
// TODO(crbug/1444782): Remove forceUpdate and writeBack params once the following features
// launch:
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java
@@ -66,12 +66,25 @@ import org.chromium.chrome.browser.preferences.ChromeSharedPreferences;
import org.chromium.components.browser_ui.settings.ChromeSwitchPreference;
import org.chromium.components.browser_ui.settings.ManagedPreferenceDelegate;
+import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager;
+import org.chromium.chrome.browser.ui.messages.snackbar.INeedSnackbarManager;
+import org.chromium.chrome.browser.ui.messages.snackbar.Snackbar;
+import org.chromium.chrome.browser.ApplicationLifetime;
+
import java.util.ArrayList;
import java.util.List;
/** Fragment to keep track of the all the privacy related preferences. */
public class PrivacySettings extends ChromeBaseSettingsFragment
- implements Preference.OnPreferenceChangeListener {
+ implements Preference.OnPreferenceChangeListener, INeedSnackbarManager {
+ private SnackbarManager mSnackbarManager;
+ private Snackbar mSnackbar;
+
+ @Override
+ public void setSnackbarManager(SnackbarManager manager) {
+ mSnackbarManager = manager;
+ }
+
private static final String PREF_CAN_MAKE_PAYMENT = "can_make_payment";
private static final String PREF_PRELOAD_PAGES = "preload_pages";
private static final String PREF_HTTPS_FIRST_MODE = "https_first_mode";
@@ -140,6 +153,21 @@ public class PrivacySettings extends ChromeBaseSettingsFragment
}
}
+ mSnackbar = Snackbar.make(getActivity().getString(R.string.ui_relaunch_notice),
+ new SnackbarManager.SnackbarController() {
+ @Override
+ public void onDismissNoAction(Object actionData) { }
+
+ @Override
+ public void onAction(Object actionData) {
+ ApplicationLifetime.terminate(true);
+ }
+ }, Snackbar.TYPE_NOTIFICATION, Snackbar.UMA_UNKNOWN)
+ .setSingleLine(false)
+ .setAction(getActivity().getString(R.string.relaunch),
+ /*actionData*/null)
+ .setDuration(/*durationMs*/70000);
+
Preference privacyGuidePreference = findPreference(PREF_PRIVACY_GUIDE);
// Record the launch of PG from the S&P link-row entry point
privacyGuidePreference.setOnPreferenceClickListener(
@@ -321,6 +349,7 @@ public class PrivacySettings extends ChromeBaseSettingsFragment
public static final String PREF_ALLOW_CUSTOM_TAB_INTENTS = "allow_custom_tab_intents";
public static final String PREF_OPEN_EXTERNAL_LINKS_INCOGNITO = "open_external_links_incognito";
+ public static final String PREF_TABGRID_USE_ICONS = "tabgrid_use_icons";
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
@@ -346,6 +375,13 @@ public class PrivacySettings extends ChromeBaseSettingsFragment
SharedPreferences.Editor sharedPreferencesEditor = ContextUtils.getAppSharedPreferences().edit();
sharedPreferencesEditor.putBoolean(PREF_OPEN_EXTERNAL_LINKS_INCOGNITO, (boolean)newValue);
sharedPreferencesEditor.apply();
+ } else if (PREF_TABGRID_USE_ICONS.equals(key)) {
+ SharedPreferences.Editor sharedPreferencesEditor = ContextUtils.getAppSharedPreferences().edit();
+ sharedPreferencesEditor.putBoolean(PREF_TABGRID_USE_ICONS, (boolean)newValue);
+ sharedPreferencesEditor.apply();
+ if (!mSnackbarManager.isShowing()) {
+ mSnackbarManager.showSnackbar(mSnackbar);
+ }
}
return true;
}
@@ -386,6 +422,10 @@ public class PrivacySettings extends ChromeBaseSettingsFragment
: R.string.text_off);
}
+ Preference tabGridUseIcons =
+ (ChromeSwitchPreference) findPreference(PREF_TABGRID_USE_ICONS);
+ tabGridUseIcons.setOnPreferenceChangeListener(this);
+
Preference refererPolicyPref = findPreference(PREF_REFERER_POLICY);
refererPolicyPref.setSummary(
RefererSettingsFragment.getRefererSummaryString(getContext()));
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd
--- a/chrome/browser/ui/android/strings/android_chrome_strings.grd
+++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
@@ -5371,6 +5371,14 @@ To change this setting, <ph name="BEGIN_LINK">BEGIN_LINK</ph>clear the Chrome da
Your <ph name="FQDN">%1$s<ex>www.amazon.com</ex></ph> timer ran out. It'll start again tomorrow.
</message>
+ <!-- Tab Broup Disable Thumbnail -->
+ <message name="IDS_TABGRID_USE_ICONS_TITLE" desc="Text for 'Use icons in the tab grid' settings-privacy option.">
+ Use only icons in the tab grid
+ </message>
+ <message name="IDS_TABGRID_USE_ICONS_SUMMARY" desc="Summary text for 'Use icons in the tab grid' settings-privacy option.">
+ Disable the saving of snapshots to disk
+ </message>
+
<!-- Tab Group Tab Switcher strings -->
<message name="IDS_TAB_MANAGEMENT_MODULE_TITLE" desc="Text shown when the Tab Management module is referenced in install start, success, failure UI (e.g. in IDS_MODULE_INSTALL_START_TEXT, which will expand to 'Installing Tab management for Chrome…').">
Tab management
--
+95 -132
View File
@@ -5,38 +5,36 @@ Subject: Add option to force tablet UI
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
.../ChromeAccessibilitySettingsDelegate.java | 19 +++++++++++++++++++
.../browser/tasks/ReturnToChromeUtil.java | 4 +++-
.../chrome/browser/ui/RootUiCoordinator.java | 5 ++++-
chrome/browser/preferences/BUILD.gn | 1 +
.../preferences/ChromePreferenceKeys.java | 1 +
.../preferences/ChromeSharedPreferences.java | 8 ++++++++
.../LegacyChromePreferenceKeys.java | 1 +
.../omnibox/LocationBarCoordinator.java | 2 +-
.../strings/android_chrome_strings.grd | 7 +++++++
.../strings/android_chrome_strings.grd | 6 ++++++
.../toolbar/top/ToolbarControlContainer.java | 16 ----------------
components/BUILD.gn | 6 +++---
.../res/xml/accessibility_preferences.xml | 5 +++++
.../accessibility/AccessibilitySettings.java | 10 ++++++++++
.../AccessibilitySettingsDelegate.java | 2 ++
.../chromium/ui/base/DeviceFormFactor.java | 6 ++++++
14 files changed, 71 insertions(+), 6 deletions(-)
ui/android/BUILD.gn | 2 ++
.../chromium/ui/base/DeviceFormFactor.java | 5 +++++
12 files changed, 55 insertions(+), 20 deletions(-)
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java
@@ -94,6 +94,25 @@ public class ChromeAccessibilitySettingsDelegate implements AccessibilitySetting
return new TextSizeContrastAccessibilityDelegate(getBrowserContextHandle());
@@ -68,6 +68,25 @@ public class ChromeAccessibilitySettingsDelegate implements AccessibilitySetting
return new ReaderForAccessibilityDelegate();
}
+ private static class ForceTabletUIDelegate implements BooleanPreferenceDelegate {
+ @Override
+ public boolean isEnabled() {
+ return ChromeSharedPreferences.getInstance().readBoolean(
+ return SharedPreferencesManager.getInstance().readBoolean(
+ ChromePreferenceKeys.FLAGS_FORCE_TABLET_UI_ENABLED, false);
+ }
+
+ @Override
+ public void setEnabled(boolean value) {
+ ChromeSharedPreferences.getInstance().writeBoolean(
+ SharedPreferencesManager.getInstance().writeBoolean(
+ ChromePreferenceKeys.FLAGS_FORCE_TABLET_UI_ENABLED, value);
+ }
+ }
@@ -49,133 +47,86 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/s
@Override
public void addExtraPreferences(PreferenceFragmentCompat fragment) {
if (ImageDescriptionsController.getInstance().shouldShowImageDescriptionsMenuItem()) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtil.java b/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtil.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtil.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtil.java
@@ -979,7 +979,9 @@ public final class ReturnToChromeUtil {
public static boolean isScrollableMvtEnabled(Context context) {
boolean isSurfacePolishEnabled = ChromeFeatureList.sSurfacePolish.isEnabled();
- if (!DeviceFormFactor.isNonMultiDisplayContextOnTablet(context)) {
+ if (!DeviceFormFactor.isNonMultiDisplayContextOnTablet(context) ||
+ ChromeSharedPreferences.getInstance().readBoolean(
+ ChromePreferenceKeys.FLAGS_FORCE_TABLET_UI_ENABLED, false)) {
// On phones, parameter SURFACE_POLISH_SCROLLABLE_MVT is checked when feature flag
// surface polish is enabled; otherwise, feature flag
// SHOW_SCROLLABLE_MVT_ON_NTP_PHONE_ANDROID is checked.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java
@@ -98,6 +98,7 @@ import org.chromium.chrome.browser.paint_preview.DemoPaintPreview;
import org.chromium.chrome.browser.password_manager.ManagePasswordsReferrer;
import org.chromium.chrome.browser.password_manager.PasswordManagerLauncher;
import org.chromium.chrome.browser.preferences.ChromeSharedPreferences;
+import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
import org.chromium.chrome.browser.price_tracking.PriceTrackingButtonController;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.profiles.ProfileManager;
@@ -1595,7 +1596,9 @@ public class RootUiCoordinator
if (!mSupportsFindInPageSupplier.getAsBoolean()) return;
int stubId = R.id.find_toolbar_stub;
- if (DeviceFormFactor.isNonMultiDisplayContextOnTablet(mActivity)) {
+ if (DeviceFormFactor.isNonMultiDisplayContextOnTablet(mActivity) &&
+ !ChromeSharedPreferences.getInstance().readBoolean(
+ ChromePreferenceKeys.FLAGS_FORCE_TABLET_UI_ENABLED, false)) {
stubId = R.id.find_toolbar_tablet_stub;
}
mFindToolbarManager =
diff --git a/chrome/browser/preferences/BUILD.gn b/chrome/browser/preferences/BUILD.gn
--- a/chrome/browser/preferences/BUILD.gn
+++ b/chrome/browser/preferences/BUILD.gn
@@ -26,6 +26,7 @@ android_library("java") {
"//components/browser_ui/site_settings/android:constants_java",
"//third_party/androidx:androidx_annotation_annotation_java",
"//third_party/jni_zero:jni_zero_java",
+ "//ui/android:ui_java",
]
srcjar_deps = [
diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java
--- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java
+++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java
@@ -270,6 +270,7 @@ public final class ChromePreferenceKeys {
@@ -367,6 +367,7 @@ public final class ChromePreferenceKeys {
AccessibilityConstants.FONT_USER_SET_FORCE_ENABLE_ZOOM;
public static final String HISTORY_SHOW_HISTORY_INFO = "history_home_show_info";
+ public static final String FLAGS_FORCE_TABLET_UI_ENABLED = "force_tablet_ui_enabled";
/** Keys used to save settings related to homepage. */
public static final String DEPRECATED_HOMEPAGE_CUSTOM_URI = "homepage_custom_uri";
diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromeSharedPreferences.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromeSharedPreferences.java
--- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromeSharedPreferences.java
+++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromeSharedPreferences.java
@@ -11,6 +11,8 @@ import org.chromium.base.shared_preferences.PreferenceKeyRegistry;
import org.chromium.base.shared_preferences.SharedPreferencesManager;
import org.chromium.build.BuildConfig;
+import org.chromium.ui.base.DeviceFormFactor;
+
@JNINamespace("android::shared_preferences")
public class ChromeSharedPreferences {
public static final PreferenceKeyRegistry REGISTRY =
@@ -22,6 +24,12 @@ public class ChromeSharedPreferences {
LegacyChromePreferenceKeys.getPrefixesInUse())
: null);
+ static {
+ DeviceFormFactor.setForceTabletUI(
+ ChromeSharedPreferences.getInstance().readBoolean(
+ ChromePreferenceKeys.FLAGS_FORCE_TABLET_UI_ENABLED, false));
+ }
+
/**
* @return The //base SharedPreferencesManager singleton.
*/
public static final String HOMEPAGE_CUSTOM_URI = "homepage_custom_uri";
diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java
--- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java
+++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java
@@ -58,6 +58,7 @@ public class LegacyChromePreferenceKeys {
ChromePreferenceKeys.FIRST_RUN_LIGHTWEIGHT_FLOW_COMPLETE,
ChromePreferenceKeys.FIRST_RUN_SKIP_WELCOME_PAGE,
@@ -66,6 +66,7 @@ public class LegacyChromePreferenceKeys {
ChromePreferenceKeys.FLAGS_CACHED_SWAP_PIXEL_FORMAT_TO_FIX_CONVERT_FROM_TRANSLUCENT,
ChromePreferenceKeys.FLAGS_CACHED_TAB_GROUPS_ANDROID_ENABLED,
ChromePreferenceKeys.FONT_USER_FONT_SCALE_FACTOR,
+ ChromePreferenceKeys.FLAGS_FORCE_TABLET_UI_ENABLED,
ChromePreferenceKeys.FONT_USER_SET_FORCE_ENABLE_ZOOM,
ChromePreferenceKeys.HISTORY_SHOW_HISTORY_INFO,
ChromePreferenceKeys.HOMEPAGE_ENABLED,
ChromePreferenceKeys.HOMEPAGE_CUSTOM_URI,
diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java
--- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java
+++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java
@@ -771,7 +771,7 @@ public class LocationBarCoordinator
}
private boolean isTabletWindow() {
@@ -352,7 +352,7 @@ public final class LocationBarCoordinator implements LocationBar, NativeInitObse
// OmniboxSuggestionsDropdownEmbedder implementation
@Override
public boolean isTablet() {
- return DeviceFormFactor.isWindowOnTablet(mWindowAndroid);
+ return DeviceFormFactor.isWindowOnTablet(mWindowAndroid) || isTabletLayout();
}
/* package */ LocationBarMediator getMediatorForTesting() {
@Override
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd
--- a/chrome/browser/ui/android/strings/android_chrome_strings.grd
+++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
@@ -1564,6 +1564,13 @@ Your Google account may have other forms of browsing history like searches and a
Manage third-party cookies and tracking protections
@@ -1392,6 +1392,12 @@ Your Google account may have other forms of browsing history like searches and a
<message name="IDS_PRIVACY_REVIEW_SB_ENHANCED_ITEM_SEVEN" desc="Seventh bullet point that describes the details of the Safe Browsing control.">
Temporarily links this data to your Google Account when youre signed in, to protect you across Google apps
</message>
+ <message name="IDS_FORCE_TABLET_UI_SUMMARY" desc="Summary of the preference that allows the user to force chromium to use tablet UI.">
+ Open chromium in Tablet Mode
+ </message>
+ <message name="IDS_FORCE_TABLET_UI_TITLE" desc="Title of the preference that allows the user to update force tablet UI settings.">
+ Force Tablet Mode
+ </message>
+
<!-- Safety check -->
<message name="IDS_PREFS_SAFETY_CHECK" desc="Title of the Safety check element in settings, allowing the user to check multiple areas of browser safety. [CHAR_LIMIT=32]">
Safety check
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java
@@ -110,22 +110,6 @@ public class ToolbarControlContainer extends OptimizedFrameLayout implements Con
public void setToolbar(Toolbar toolbar, boolean isIncognito) {
mToolbar = toolbar;
mToolbarContainer.setToolbar(mToolbar);
-
- View toolbarView = findViewById(R.id.toolbar);
- assert toolbarView != null;
-
- if (toolbarView instanceof ToolbarTablet) {
- // On tablet, draw a fake tab strip and toolbar until the compositor is
- // ready to draw the real tab strip. (On phone, the toolbar is made entirely
- // of Android views, which are already initialized.)
- final Drawable backgroundDrawable =
- AppCompatResources.getDrawable(getContext(), R.drawable.toolbar_background)
- .mutate();
- backgroundDrawable.setTint(
- ChromeColors.getDefaultThemeColor(getContext(), isIncognito));
- backgroundDrawable.setTintMode(PorterDuff.Mode.MULTIPLY);
- setBackground(backgroundDrawable);
- }
}
@Override
diff --git a/components/BUILD.gn b/components/BUILD.gn
--- a/components/BUILD.gn
+++ b/components/BUILD.gn
@@ -69,7 +69,7 @@ if (is_ios) {
@@ -45,7 +45,7 @@ if (is_ios) {
# Omit Lacros because it allows //components to depend on //chrome, which in
# turn depends on //extensions.
@@ -184,7 +135,7 @@ diff --git a/components/BUILD.gn b/components/BUILD.gn
disallowed_extension_deps_ = [
# Components should largely not depend on //extensions. Since // extensions
# is not a component target and is linked with //chrome, depending on most
@@ -831,7 +831,7 @@ test("components_unittests") {
@@ -655,7 +655,7 @@ test("components_unittests") {
# On other platforms, no components should depend on Chrome.
# Since //chrome depends on //extensions, we also only assert_no_deps on
# extensions targets for non-lacros builds.
@@ -193,7 +144,7 @@ diff --git a/components/BUILD.gn b/components/BUILD.gn
assert_no_deps = [ "//chrome/*" ]
assert_no_deps += disallowed_extension_deps_
}
@@ -1113,7 +1113,7 @@ if (use_blink) {
@@ -939,7 +939,7 @@ if (!is_ios) {
# dependency. On other platforms, no components should depend on Chrome.
# Since //chrome depends on //extensions, we also only assert_no_deps on
# extensions targets for non-lacros builds.
@@ -205,11 +156,11 @@ diff --git a/components/BUILD.gn b/components/BUILD.gn
diff --git a/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml b/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml
--- a/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml
+++ b/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml
@@ -40,6 +40,11 @@ found in the LICENSE file.
android:summary="@string/reader_for_accessibility_summary"
android:title="@string/reader_for_accessibility_title" />
@@ -34,6 +34,11 @@
android:summary="@string/accessibility_tab_switcher_summary"
android:title="@string/accessibility_tab_switcher_title" />
+ <org.chromium.components.browser_ui.settings.ChromeSwitchPreference
+ <org.chromium.components.browser_ui.settings.ChromeBaseCheckBoxPreference
+ android:key="force_tablet_ui"
+ android:summary="@string/force_tablet_ui_summary"
+ android:title="@string/force_tablet_ui_title" />
@@ -220,29 +171,29 @@ diff --git a/components/browser_ui/accessibility/android/java/res/xml/accessibil
diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java
--- a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java
+++ b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java
@@ -32,6 +32,8 @@ public class AccessibilitySettings extends PreferenceFragmentCompat
@@ -30,6 +30,8 @@ public class AccessibilitySettings
public static final String PREF_READER_FOR_ACCESSIBILITY = "reader_for_accessibility";
public static final String PREF_CAPTIONS = "captions";
public static final String PREF_ZOOM_INFO = "zoom_info";
+ private BooleanPreferenceDelegate mForceTabletUIDelegate;
+ static final String PREF_FORCE_TABLET_UI = "force_tablet_ui";
private TextScalePreference mTextScalePref;
private PageZoomPreference mPageZoomDefaultZoomPref;
private ChromeSwitchPreference mPageZoomIncludeOSAdjustment;
@@ -129,6 +131,12 @@ public class AccessibilitySettings extends PreferenceFragmentCompat
private ChromeSwitchPreference mPageZoomAlwaysShowPref;
@@ -105,6 +107,12 @@ public class AccessibilitySettings
getPreferenceScreen().removePreference(readerForAccessibilityPref);
}
+ ChromeSwitchPreference forceTabletUiPref =
+ (ChromeSwitchPreference) findPreference(PREF_FORCE_TABLET_UI);
+ ChromeBaseCheckBoxPreference forceTabletUiPref =
+ (ChromeBaseCheckBoxPreference) findPreference(PREF_FORCE_TABLET_UI);
+ mForceTabletUIDelegate = mDelegate.getForceTabletUIDelegate();
+ forceTabletUiPref.setChecked(mForceTabletUIDelegate.isEnabled());
+ forceTabletUiPref.setOnPreferenceChangeListener(this);
+
Preference captions = findPreference(PREF_CAPTIONS);
captions.setOnPreferenceClickListener(
preference -> {
@@ -190,6 +198,8 @@ public class AccessibilitySettings extends PreferenceFragmentCompat
ChromeBaseCheckBoxPreference accessibilityTabSwitcherPref =
(ChromeBaseCheckBoxPreference) findPreference(
AccessibilityConstants.ACCESSIBILITY_TAB_SWITCHER);
@@ -153,6 +161,8 @@ public class AccessibilitySettings
mFontSizePrefs.setUserFontScaleFactor((Float) newValue);
} else if (PREF_FORCE_ENABLE_ZOOM.equals(preference.getKey())) {
mFontSizePrefs.setForceEnableZoomFromUser((Boolean) newValue);
@@ -254,36 +205,48 @@ diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/c
diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettingsDelegate.java b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettingsDelegate.java
--- a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettingsDelegate.java
+++ b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettingsDelegate.java
@@ -52,6 +52,8 @@ public interface AccessibilitySettingsDelegate {
@@ -44,6 +44,8 @@ public interface AccessibilitySettingsDelegate {
*/
IntegerPreferenceDelegate getTextSizeContrastAccessibilityDelegate();
BooleanPreferenceDelegate getReaderForAccessibilityDelegate();
+ BooleanPreferenceDelegate getForceTabletUIDelegate();
+
/**
* Allows the embedder to add more preferences to the preference screen.
*
diff --git a/ui/android/BUILD.gn b/ui/android/BUILD.gn
--- a/ui/android/BUILD.gn
+++ b/ui/android/BUILD.gn
@@ -363,6 +363,8 @@ android_library("ui_no_recycler_view_java") {
deps = [
":ui_java_resources",
":ui_utils_java",
+ # dependency for ui_no_recycler_view_java
+ "//chrome/browser/preferences:java",
"//base:base_java",
"//base:jni_java",
"//build/android:build_java",
diff --git a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java b/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java
--- a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java
+++ b/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java
@@ -31,6 +31,11 @@ public class DeviceFormFactor {
/** Matches the value set in res/values-sw720dp/values.xml */
private static final int SCREEN_BUCKET_LARGET_TABLET = 3;
+ private static boolean mForceTabletUI;
+ public static void setForceTabletUI(boolean forceTabletUI) {
+ mForceTabletUI = forceTabletUI;
+ }
+
/**
* Each activity could be on a different display, and this will just tell you whether the
* display associated with the application context is "tablet sized".
@@ -56,6 +61,7 @@ public class DeviceFormFactor {
@@ -11,6 +11,8 @@ import androidx.annotation.UiThread;
import org.chromium.base.ContextUtils;
import org.chromium.base.ThreadUtils;
import org.chromium.base.annotations.CalledByNative;
+import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
+import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
import org.chromium.ui.R;
import org.chromium.ui.display.DisplayAndroid;
import org.chromium.ui.display.DisplayUtil;
@@ -60,6 +62,9 @@ public class DeviceFormFactor {
* E.g. http://developer.samsung.com/samsung-dex/testing
*/
public static boolean isNonMultiDisplayContextOnTablet(Context context) {
+ if (mForceTabletUI) return true;
+ if (SharedPreferencesManager.getInstance().readBoolean(
+ ChromePreferenceKeys.FLAGS_FORCE_TABLET_UI_ENABLED, false))
+ return true;
return detectScreenWidthBucket(context) >= SCREEN_BUCKET_TABLET;
}
--
2.25.1
@@ -13,7 +13,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/android/java/res/xml/privacy_preferences.xml
--- a/chrome/android/java/res/xml/privacy_preferences.xml
+++ b/chrome/android/java/res/xml/privacy_preferences.xml
@@ -71,6 +71,11 @@ found in the LICENSE file.
@@ -42,6 +42,11 @@
android:title="@string/incognito_settings_title"
android:summary="@string/incognito_settings_summary"
android:fragment="org.chromium.chrome.browser.privacy.settings.IncognitoSettings"/>
@@ -22,21 +22,21 @@ diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/androi
+ android:title="@string/close_tabs_on_exit_title"
+ android:summary="@string/close_tabs_on_exit_summary"
+ android:defaultValue="false" />
<PreferenceCategory
android:key="services_category"
android:title="@string/services_category_title">
<Preference
android:fragment="org.chromium.chrome.browser.privacy.settings.DoNotTrackSettings"
android:key="do_not_track"
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
@@ -41,6 +41,7 @@ import org.chromium.base.BuildInfo;
import org.chromium.base.Callback;
@@ -36,6 +36,7 @@ import androidx.lifecycle.LifecycleRegistry;
import org.chromium.base.CallbackController;
import org.chromium.base.CommandLine;
+import org.chromium.base.ContextUtils;
import org.chromium.base.IntentUtils;
import org.chromium.base.Log;
import org.chromium.base.MemoryPressureListener;
@@ -1614,8 +1615,10 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
@@ -1264,8 +1265,10 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
boolean hadCipherData =
CipherFactory.getInstance().restoreFromBundle(getSavedInstanceState());
@@ -45,39 +45,39 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct
- CommandLine.getInstance().hasSwitch(ChromeSwitches.NO_RESTORE_STATE);
+ CommandLine.getInstance().hasSwitch(ChromeSwitches.NO_RESTORE_STATE) ||
+ ContextUtils.getAppSharedPreferences().getBoolean(PREF_CLOSE_TABS_ON_EXIT, false);
boolean shouldShowNtpAsHomeSurfaceAtStartup = false;
final AtomicBoolean isActiveUrlNtp = new AtomicBoolean(false);
if (noRestoreState) {
// Clear the state files because they are inconsistent and useless from now on.
mTabModelOrchestrator.clearState();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java
@@ -7,6 +7,7 @@ package org.chromium.chrome.browser.privacy.settings;
import static org.chromium.components.content_settings.PrefNames.COOKIE_CONTROLS_MODE;
@@ -5,6 +5,7 @@
package org.chromium.chrome.browser.privacy.settings;
import android.os.Build;
+import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.SpannableString;
import android.text.style.ForegroundColorSpan;
@@ -20,6 +21,8 @@ import androidx.preference.Preference;
import android.view.Menu;
@@ -16,6 +17,8 @@ import androidx.preference.Preference;
import androidx.preference.PreferenceFragmentCompat;
import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat;
import org.chromium.base.metrics.RecordHistogram;
import org.chromium.base.metrics.RecordUserAction;
+import org.chromium.base.ContextUtils;
+import org.chromium.base.BuildInfo;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.enterprise.util.ManagedBrowserUtils;
import org.chromium.chrome.browser.feedback.HelpAndFeedbackLauncherImpl;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
@@ -87,6 +90,8 @@ public class PrivacySettings extends ChromeBaseSettingsFragment
private final SharedPreferencesManager mSharedPreferencesManager =
ChromeSharedPreferences.getInstance();
@@ -57,6 +60,8 @@ public class PrivacySettings
private static final String PREF_PRIVACY_REVIEW = "privacy_review";
private static final String PREF_INCOGNITO_LOCK = "incognito_lock";
+ private static final String PREF_CLOSE_TABS_ON_EXIT = "close_tabs_on_exit";
+
private ManagedPreferenceDelegate mManagedPreferenceDelegate;
private IncognitoLockSettings mIncognitoLockSettings;
@@ -271,7 +276,11 @@ public class PrivacySettings extends ChromeBaseSettingsFragment
private ViewGroup mDialogContainer;
@@ -128,7 +133,11 @@ public class PrivacySettings
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
String key = preference.getKey();
@@ -87,10 +87,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
+ sharedPreferencesEditor.putBoolean(PREF_CLOSE_TABS_ON_EXIT, (boolean)newValue);
+ sharedPreferencesEditor.apply();
+ } else if (PREF_CAN_MAKE_PAYMENT.equals(key)) {
UserPrefs.get(getProfile())
UserPrefs.get(Profile.getLastUsedRegularProfile())
.setBoolean(Pref.CAN_MAKE_PAYMENT_ENABLED, (boolean) newValue);
} else if (PREF_HTTPS_FIRST_MODE.equals(key)) {
@@ -316,6 +325,11 @@ public class PrivacySettings extends ChromeBaseSettingsFragment
@@ -169,6 +178,11 @@ public class PrivacySettings
PreloadPagesSettingsFragment.getPreloadPagesSummaryString(getContext()));
}
@@ -105,7 +105,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd
--- a/chrome/browser/ui/android/strings/android_chrome_strings.grd
+++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
@@ -4805,6 +4805,12 @@ To change this setting, <ph name="BEGIN_LINK">BEGIN_LINK</ph>clear the Chrome da
@@ -4390,6 +4390,12 @@ To change this setting, <ph name="BEGIN_LINK">&lt;resetlink&gt;</ph>reset sync<p
<message name="IDS_CONTEXTMENU_IMAGE_TITLE" desc="The title of a context menu tab when the item pressed contains more than one type. This indicates that all the actions are related to the image.">
IMAGE
</message>
@@ -119,3 +119,4 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro
LINK
</message>
--
2.25.1
@@ -6,89 +6,23 @@ And allow use about:blank as default homepage
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
.../tab_management/TabGridDialogMediator.java | 9 ++++++++-
.../tasks/tab_management/TabGroupUiMediator.java | 8 +++++++-
.../java/res/xml/homepage_preferences.xml | 5 +++++
.../chrome/browser/homepage/HomepageManager.java | 16 ++++++++++++++++
.../homepage/settings/HomepageSettings.java | 12 ++++++++++++
.../chrome/browser/metrics/LaunchMetrics.java | 1 -
.../browser/tabmodel/ChromeTabCreator.java | 8 ++++++++
.../browser/tabmodel/ChromeTabCreator.java | 7 +++++++
.../preferences/ChromePreferenceKeys.java | 1 +
.../preferences/LegacyChromePreferenceKeys.java | 1 +
.../android/strings/android_chrome_strings.grd | 3 +++
chrome/browser/ui/browser_ui_prefs.cc | 2 ++
chrome/common/pref_names.h | 4 ++++
12 files changed, 67 insertions(+), 3 deletions(-)
chrome/common/pref_names.cc | 4 ++++
chrome/common/pref_names.h | 1 +
11 files changed, 52 insertions(+), 1 deletion(-)
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogMediator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogMediator.java
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogMediator.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogMediator.java
@@ -22,6 +22,7 @@ import org.chromium.base.supplier.ObservableSupplier;
import org.chromium.base.supplier.Supplier;
import org.chromium.base.task.PostTask;
import org.chromium.base.task.TaskTraits;
+import org.chromium.chrome.browser.homepage.HomepageManager;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabCreationState;
import org.chromium.chrome.browser.tab.TabLaunchType;
@@ -47,6 +48,7 @@ import org.chromium.ui.KeyboardVisibilityDelegate;
import org.chromium.ui.base.DeviceFormFactor;
import org.chromium.ui.modelutil.PropertyModel;
import org.chromium.ui.text.EmptyTextWatcher;
+import org.chromium.url.GURL;
import java.util.ArrayList;
import java.util.List;
@@ -636,11 +638,16 @@ public class TabGridDialogMediator
assert relatedTabs.size() > 0;
+ String url = UrlConstants.NTP_URL;
+ if (HomepageManager.getInstance().getPrefNTPIsHomepageEnabled()) {
+ GURL gurl = HomepageManager.getInstance().getHomepageGurl();
+ url = gurl != null ? gurl.getSpec() : url;
+ }
Tab parentTabToAttach = relatedTabs.get(relatedTabs.size() - 1);
mTabCreatorManager
.getTabCreator(currentTab.isIncognito())
.createNewTab(
- new LoadUrlParams(UrlConstants.NTP_URL),
+ new LoadUrlParams(url),
TabLaunchType.FROM_TAB_GROUP_UI,
parentTabToAttach);
RecordUserAction.record("MobileNewTabOpened." + mComponentName);
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java
@@ -18,6 +18,7 @@ import org.chromium.base.supplier.LazyOneshotSupplier;
import org.chromium.base.supplier.ObservableSupplier;
import org.chromium.base.supplier.ObservableSupplierImpl;
import org.chromium.base.supplier.OneshotSupplier;
+import org.chromium.chrome.browser.homepage.HomepageManager;
import org.chromium.chrome.browser.layouts.LayoutStateProvider;
import org.chromium.chrome.browser.layouts.LayoutStateProvider.LayoutStateObserver;
import org.chromium.chrome.browser.layouts.LayoutType;
@@ -375,10 +376,15 @@ public class TabGroupUiMediator implements BackPressHandler {
assert relatedTabs.size() > 0;
parentTabToAttach = relatedTabs.get(relatedTabs.size() - 1);
+ String url = UrlConstants.NTP_URL;
+ if (HomepageManager.getInstance().getPrefNTPIsHomepageEnabled()) {
+ GURL gurl = HomepageManager.getInstance().getHomepageGurl();
+ url = gurl != null ? gurl.getSpec() : url;
+ }
mTabCreatorManager
.getTabCreator(currentTab.isIncognito())
.createNewTab(
- new LoadUrlParams(UrlConstants.NTP_URL),
+ new LoadUrlParams(url),
TabLaunchType.FROM_TAB_GROUP_UI,
parentTabToAttach);
RecordUserAction.record(
diff --git a/chrome/android/java/res/xml/homepage_preferences.xml b/chrome/android/java/res/xml/homepage_preferences.xml
--- a/chrome/android/java/res/xml/homepage_preferences.xml
+++ b/chrome/android/java/res/xml/homepage_preferences.xml
@@ -14,6 +14,11 @@ found in the LICENSE file.
@@ -12,6 +12,11 @@
android:summaryOn="@string/text_on"
android:summaryOff="@string/text_off" />
@@ -103,7 +37,7 @@ diff --git a/chrome/android/java/res/xml/homepage_preferences.xml b/chrome/andro
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java b/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java
@@ -233,6 +233,22 @@ public class HomepageManager
@@ -223,6 +223,22 @@ public class HomepageManager implements HomepagePolicyManager.HomepagePolicyStat
notifyHomepageUpdated();
}
@@ -124,30 +58,30 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/homepage/Homepa
+ }
+
/**
* @return User specified homepage custom GURL.
* @return User specified homepage custom URI string.
*/
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/homepage/settings/HomepageSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/homepage/settings/HomepageSettings.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/homepage/settings/HomepageSettings.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/homepage/settings/HomepageSettings.java
@@ -22,6 +22,7 @@ import org.chromium.components.browser_ui.settings.SettingsUtils;
@@ -22,6 +22,7 @@ import org.chromium.components.browser_ui.settings.ChromeSwitchPreference;
import org.chromium.components.browser_ui.settings.SettingsUtils;
import org.chromium.components.embedder_support.util.UrlUtilities;
import org.chromium.components.url_formatter.UrlFormatter;
import org.chromium.url.GURL;
+import org.chromium.components.embedder_support.util.UrlConstants;
/** Fragment that allows the user to configure homepage related preferences. */
public class HomepageSettings extends ChromeBaseSettingsFragment {
@@ -30,6 +31,8 @@ public class HomepageSettings extends ChromeBaseSettingsFragment {
/**
* Fragment that allows the user to configure homepage related preferences.
@@ -32,6 +33,8 @@ public class HomepageSettings extends PreferenceFragmentCompat {
@VisibleForTesting
public static final String PREF_HOMEPAGE_RADIO_GROUP = "homepage_radio_group";
+ private static final String PREF_NTP_HOMEPAGE_SWITCH = "ntp_is_homepage_switch";
+
private HomepageManager mHomepageManager;
private RadioButtonGroupHomepagePreference mRadioButtons;
@@ -64,6 +67,15 @@ public class HomepageSettings extends ChromeBaseSettingsFragment {
});
/**
* Delegate used to mark that the homepage is being managed.
* Created for {@link org.chromium.chrome.browser.settings.HomepagePreferences}
@@ -72,6 +75,15 @@ public class HomepageSettings extends PreferenceFragmentCompat {
});
mRadioButtons.setupPreferenceValues(createPreferenceValuesForRadioGroup());
+ ChromeSwitchPreference mNTPIsHomepageSwitch =
@@ -165,33 +99,32 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/homepage/settin
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/metrics/LaunchMetrics.java b/chrome/android/java/src/org/chromium/chrome/browser/metrics/LaunchMetrics.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/metrics/LaunchMetrics.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/metrics/LaunchMetrics.java
@@ -112,7 +112,6 @@ public class LaunchMetrics {
public static void recordHomePageLaunchMetrics(
boolean showHomeButton, boolean homepageIsNtp, GURL homepageGurl) {
if (homepageGurl.isEmpty()) {
- assert !showHomeButton : "Homepage should be disabled for an empty GURL";
@@ -103,7 +103,6 @@ public class LaunchMetrics {
boolean showHomeButton, boolean homepageIsNtp, String homepageUrl) {
if (homepageUrl == null) {
homepageUrl = "";
- assert !showHomeButton : "Homepage should be disabled for a null URL";
}
LaunchMetricsJni.get()
.recordHomePageLaunchMetrics(showHomeButton, homepageIsNtp, homepageGurl);
LaunchMetricsJni.get().recordHomePageLaunchMetrics(
showHomeButton, homepageIsNtp, homepageUrl);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java
@@ -24,6 +24,7 @@ import org.chromium.chrome.browser.app.tab_activity_glue.ReparentingTask;
@@ -20,6 +20,7 @@ import org.chromium.chrome.browser.ServiceTabLauncher;
import org.chromium.chrome.browser.app.tab_activity_glue.ReparentingDelegateFactory;
import org.chromium.chrome.browser.app.tab_activity_glue.ReparentingTask;
import org.chromium.chrome.browser.compositor.CompositorViewHolder;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.new_tab_url.DseNewTabUrlManager;
+import org.chromium.chrome.browser.homepage.HomepageManager;
import org.chromium.chrome.browser.ntp.NewTabPageLaunchOrigin;
import org.chromium.chrome.browser.ntp.NewTabPageUtils;
import org.chromium.chrome.browser.prefetch.settings.PreloadPagesSettingsBridge;
@@ -484,6 +485,13 @@ public class ChromeTabCreator extends TabCreator {
import org.chromium.chrome.browser.tab.RedirectHandlerTabHelper;
@@ -312,6 +313,12 @@ public class ChromeTabCreator extends TabCreator {
* @return the created tab.
*/
public Tab launchUrl(String url, @TabLaunchType int type, Intent intent, long intentTimestamp) {
+ if (!mIncognito && url.equals(UrlConstants.NTP_URL)) {
+ if (HomepageManager.getInstance().getPrefNTPIsHomepageEnabled()) {
+ GURL gurl = HomepageManager.getInstance().getHomepageGurl();
+ url = gurl != null ? gurl.getSpec() : url;
+ url = HomepageManager.getInstance().getHomepageUri();
+ }
+ }
+
@@ -201,19 +134,19 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome
diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java
--- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java
+++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java
@@ -283,6 +283,7 @@ public final class ChromePreferenceKeys {
public static final String HOMEPAGE_USE_CHROME_NTP = "Chrome.Homepage.UseNTP";
public static final String HOMEPAGE_USE_DEFAULT_URI = "homepage_partner_enabled";
@@ -378,6 +378,7 @@ public final class ChromePreferenceKeys {
public static final String HOMEPAGE_PARTNER_CUSTOMIZED_DEFAULT_GURL =
"Chrome.Homepage.PartnerCustomizedDefaultGurl";
+ public static final String HOMEPAGE_NTP_IS_HOMEPAGE = "newtabpage_is_homepage";
/** Key used to save homepage location set by enterprise policy */
public static final String DEPRECATED_HOMEPAGE_LOCATION_POLICY =
"Chrome.Policy.HomepageLocation";
/**
* Key used to save homepage location set by enterprise policy
*/
diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java
--- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java
+++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java
@@ -62,6 +62,7 @@ public class LegacyChromePreferenceKeys {
ChromePreferenceKeys.HISTORY_SHOW_HISTORY_INFO,
@@ -71,6 +71,7 @@ public class LegacyChromePreferenceKeys {
ChromePreferenceKeys.HOMEPAGE_CUSTOM_URI,
ChromePreferenceKeys.HOMEPAGE_ENABLED,
ChromePreferenceKeys.HOMEPAGE_USE_DEFAULT_URI,
+ ChromePreferenceKeys.HOMEPAGE_NTP_IS_HOMEPAGE,
@@ -223,7 +156,7 @@ diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/bro
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd
--- a/chrome/browser/ui/android/strings/android_chrome_strings.grd
+++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
@@ -1337,6 +1337,9 @@ Your Google account may have other forms of browsing history like searches and a
@@ -1207,6 +1207,9 @@ Your Google account may have other forms of browsing history like searches and a
<message name="IDS_CLEAR_BROWSING_DATA_TAB_PERIOD_HOUR" desc="The option to delete browsing data from the last hour.">
Last hour
</message>
@@ -236,27 +169,39 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro
diff --git a/chrome/browser/ui/browser_ui_prefs.cc b/chrome/browser/ui/browser_ui_prefs.cc
--- a/chrome/browser/ui/browser_ui_prefs.cc
+++ b/chrome/browser/ui/browser_ui_prefs.cc
@@ -73,6 +73,8 @@ void RegisterBrowserUserPrefs(user_prefs::PrefRegistrySyncable* registry) {
@@ -65,6 +65,8 @@ void RegisterBrowserUserPrefs(user_prefs::PrefRegistrySyncable* registry) {
GetHomeButtonAndHomePageIsNewTabPageFlags());
registry->RegisterBooleanPref(prefs::kShowHomeButton, false,
GetHomeButtonAndHomePageIsNewTabPageFlags());
+ registry->RegisterBooleanPref(prefs::kNewTabPageIsHomePage, false,
+ PrefRegistry::NO_REGISTRATION_FLAGS);
+ GetHomeButtonAndHomePageIsNewTabPageFlags());
registry->RegisterInt64Pref(prefs::kDefaultBrowserLastDeclined, 0);
bool reset_check_default = false;
diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h
--- a/chrome/common/pref_names.h
+++ b/chrome/common/pref_names.h
@@ -1285,6 +1285,10 @@ inline constexpr char kUsedPolicyCertificates[] =
// visible on the toolbar.
inline constexpr char kShowHomeButton[] = "browser.show_home_button";
diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc
--- a/chrome/common/pref_names.cc
+++ b/chrome/common/pref_names.cc
@@ -60,6 +60,10 @@ const char kForceEphemeralProfiles[] = "profile.ephemeral_mode";
// A boolean specifying whether the New Tab page is the home page or not.
const char kHomePageIsNewTabPage[] = "homepage_is_newtabpage";
+// A boolean specifying whether opening a new tab should open the Home page
+// instead of the New Tab page.
+inline constexpr char kNewTabPageIsHomePage[] = "newtabpage_is_homepage";
+const char kNewTabPageIsHomePage[] = "newtabpage_is_homepage";
+
// Boolean pref to define the default setting for "block offensive words".
// The old key value is kept to avoid unnecessary migration code.
inline constexpr char kSpeechRecognitionFilterProfanities[] =
// This is the URL of the page to load when opening new tabs.
const char kHomePage[] = "homepage";
diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h
--- a/chrome/common/pref_names.h
+++ b/chrome/common/pref_names.h
@@ -373,6 +373,7 @@ extern const char kSettingsShowOSBanner[];
extern const char kUsedPolicyCertificates[];
#endif // BUILDFLAG(IS_CHROMEOS)
extern const char kShowHomeButton[];
+extern const char kNewTabPageIsHomePage[];
extern const char kSpeechRecognitionFilterProfanities[];
extern const char kAllowDeletingBrowserHistory[];
extern const char kForceGoogleSafeSearch[];
--
2.25.1
-103
View File
@@ -1,103 +0,0 @@
From: csagan5 <32685696+csagan5@users.noreply.github.com>
Date: Mon, 11 Dec 2017 22:42:11 +0100
Subject: Add search engine
Add a Google search engine that forces languages to English,
disable from all its searches RLZ and field experiments querystring parameters.
Add DuckDuckGo Lite
License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
---
.../search_engines/prepopulated_engines.json | 31 +++++++++++++++++++
.../search_engines/search_engine_type.h | 5 +++
.../template_url_prepopulate_data.cc | 3 ++
3 files changed, 39 insertions(+)
diff --git a/components/search_engines/prepopulated_engines.json b/components/search_engines/prepopulated_engines.json
--- a/components/search_engines/prepopulated_engines.json
+++ b/components/search_engines/prepopulated_engines.json
@@ -113,6 +113,16 @@
"id": 92
},
+ "duckduckgo_light": {
+ "name": "DuckDuckGo Light",
+ "keyword": "duckduckgo.com/lite",
+ "favicon_url": "https://duckduckgo.com/favicon.ico",
+ "search_url": "https://duckduckgo.com/lite/?q={searchTerms}",
+ "suggest_url": "https://duckduckgo.com/ac/?q={searchTerms}&type=list",
+ "type": "SEARCH_ENGINE_DUCKDUCKGOLIGHT",
+ "id": 12
+ },
+
"ecosia": {
"name": "Ecosia",
"keyword": "ecosia.org",
@@ -171,6 +181,27 @@
"id": 111
},
+ "googleen": {
+ "name": "Google in English",
+ "keyword": "googleen",
+ "favicon_url": "https://www.google.com/favicon.ico",
+ "search_url": "{google:baseURL}search?q={searchTerms}&ie={inputEncoding}&hl=en",
+ "suggest_url": "{google:baseSuggestURL}search?client={google:suggestClient}&q={searchTerms}&hl=en",
+ "image_url": "{google:baseURL}searchbyimage/upload?hl=en",
+ "new_tab_url": "{google:baseURL}_/chrome/newtab?hl=en&ie={inputEncoding}",
+ "contextual_search_url": "{google:baseURL}_/contextualsearch?{google:contextualSearchVersion}{google:contextualSearchContextData}&hl=en",
+ "image_url_post_params": "encoded_image={google:imageThumbnail},image_url={google:imageURL},sbisrc={google:imageSearchSource},original_width={google:imageOriginalWidth},original_height={google:imageOriginalHeight}",
+ "alternate_urls": [
+ "{google:baseURL}?hl=en#q={searchTerms}",
+ "{google:baseURL}search?hl=en#q={searchTerms}",
+ "{google:baseURL}webhp?hl=en#q={searchTerms}",
+ "{google:baseURL}s?hl=en#q={searchTerms}",
+ "{google:baseURL}s?hl=en&q={searchTerms}"
+ ],
+ "type": "SEARCH_ENGINE_GOOGLE_EN",
+ "id": 13
+ },
+
"mail_ru": {
"name": "@MAIL.RU",
"keyword": "mail.ru",
diff --git a/components/search_engines/search_engine_type.h b/components/search_engines/search_engine_type.h
--- a/components/search_engines/search_engine_type.h
+++ b/components/search_engines/search_engine_type.h
@@ -90,10 +90,15 @@ enum SearchEngineType {
SEARCH_ENGINE_KARMA = 71,
SEARCH_ENGINE_YOU = 72,
SEARCH_ENGINE_STARTER_PACK_ASK_GOOGLE = 73,
+ SEARCH_ENGINE_GOOGLE_EN = 74,
+ SEARCH_ENGINE_DUCKDUCKGOLIGHT = 75,
SEARCH_ENGINE_MAX // Bounding value needed for UMA histogram macro.
};
+static_assert(SEARCH_ENGINE_DUCKDUCKGOLIGHT == (SEARCH_ENGINE_MAX - 1),
+ "Please check this patch");
+
// Enum to record the type of search engine a user used in keyword mode. This
// should be kept aligned with the `OmniboxBuiltinEngineType` enum in enums.xml.
// Entries should not be renumbered and numeric values should never be reused.
diff --git a/components/search_engines/template_url_prepopulate_data.cc b/components/search_engines/template_url_prepopulate_data.cc
--- a/components/search_engines/template_url_prepopulate_data.cc
+++ b/components/search_engines/template_url_prepopulate_data.cc
@@ -63,6 +63,7 @@ struct EngineAndTier {
// Default (for countries with no better engine set)
constexpr EngineAndTier engines_default[] = {
+ {SearchEngineTier::kTopEngines, &googleen},
{SearchEngineTier::kTopEngines, &google},
{SearchEngineTier::kTopEngines, &bing},
{SearchEngineTier::kTopEngines, &yahoo},
@@ -1683,6 +1684,8 @@ const std::vector<EngineAndTier> GetPrepopulationSetFromCountryID(
for (size_t i = 0; i < num_engines; i++) {
t_url.push_back(engines[i]);
}
+ t_url.push_back({SearchEngineTier::kTopEngines, &googleen});
+ t_url.push_back({SearchEngineTier::kTopEngines, &duckduckgo_light});
return t_url;
}
--
@@ -1,697 +0,0 @@
From: uazo <uazo@users.noreply.github.com>
Date: Thu, 16 Feb 2023 15:28:16 +0000
Subject: Add setting to clear data on exit
License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
---
chrome/android/chrome_java_sources.gni | 1 +
.../chrome/browser/ChromeTabbedActivity.java | 7 +-
.../ClearBrowsingDataFragment.java | 6 ++
.../ClearBrowsingDataFragmentAtStart.java | 74 +++++++++++++++++++
.../ClearBrowsingDataTabsFragment.java | 7 +-
chrome/app/settings_strings.grdp | 10 +++
.../browsing_data/browsing_data_bridge.cc | 2 +-
.../chrome_browsing_data_lifetime_manager.cc | 22 +++++-
.../chrome_browsing_data_remover_delegate.cc | 11 +++
.../api/settings_private/prefs_util.cc | 17 +++++
.../browser/profiles/ProfileManagerUtils.java | 5 ++
.../profiles/android/profile_manager_utils.cc | 5 ++
chrome/browser/profiles/profile_manager.cc | 15 +++-
chrome/browser/profiles/profile_manager.h | 2 +
.../clear_browsing_data_dialog.html | 44 +++++++++++
.../clear_browsing_data_dialog.ts | 2 +
.../strings/android_chrome_strings.grd | 3 +
.../settings_localized_strings_provider.cc | 1 +
.../core/browsing_data_policies_utils.cc | 20 ++---
.../core/browsing_data_policies_utils.h | 11 +++
.../browsing_data/core/browsing_data_utils.cc | 34 +++++++++
.../core/clear_browsing_data_tab.h | 2 +-
components/browsing_data/core/pref_names.cc | 17 +++++
components/browsing_data/core/pref_names.h | 10 +++
content/browser/storage_partition_impl.cc | 1 +
25 files changed, 312 insertions(+), 17 deletions(-)
create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragmentAtStart.java
diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni
--- a/chrome/android/chrome_java_sources.gni
+++ b/chrome/android/chrome_java_sources.gni
@@ -307,6 +307,7 @@ chrome_java_sources = [
"java/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragmentAdvanced.java",
"java/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragmentBasic.java",
"java/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataTabsFragment.java",
+ "java/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragmentAtStart.java",
"java/src/org/chromium/chrome/browser/browsing_data/ConfirmImportantSitesDialogFragment.java",
"java/src/org/chromium/chrome/browser/browsing_data/OtherFormsOfHistoryDialogFragment.java",
"java/src/org/chromium/chrome/browser/browsing_data/UrlFilter.java",
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
@@ -169,6 +169,7 @@ import org.chromium.chrome.browser.profiles.ProfileProvider;
import org.chromium.chrome.browser.quick_delete.QuickDeleteController;
import org.chromium.chrome.browser.quick_delete.QuickDeleteDelegateImpl;
import org.chromium.chrome.browser.quick_delete.QuickDeleteMetricsDelegate;
+import org.chromium.chrome.browser.profiles.ProfileManagerUtils;
import org.chromium.chrome.browser.read_later.ReadingListBackPressHandler;
import org.chromium.chrome.browser.reengagement.ReengagementNotificationController;
import org.chromium.chrome.browser.search_engines.SearchEngineChoiceNotification;
@@ -1614,7 +1615,11 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
Intent intent = getIntent();
boolean hadCipherData =
- CipherFactory.getInstance().restoreFromBundle(getSavedInstanceState());
+ CipherFactory.getInstance().restoreFromBundle(getSavedInstanceState()); //
+ if (!hadCipherData) {
+ Log.i(TAG, "Removing browsing data");
+ ProfileManagerUtils.removeBrowsingDataAtStart();
+ }
String PREF_CLOSE_TABS_ON_EXIT = "close_tabs_on_exit";
boolean noRestoreState =
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragment.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragment.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragment.java
@@ -435,6 +435,10 @@ public abstract class ClearBrowsingDataFragment extends PreferenceFragmentCompat
/** Returns whether is a basic or advanced Clear Browsing Data tab. */
protected abstract @ClearBrowsingDataTab int getClearBrowsingDataTabType();
+ protected boolean shouldClearBrowsingData() {
+ return true;
+ }
+
/**
* Decides whether a given dialog option should be selected when the dialog is initialized.
*
@@ -514,6 +518,7 @@ public abstract class ClearBrowsingDataFragment extends PreferenceFragmentCompat
* options.
*/
private void onClearButtonClicked() {
+ if (!shouldClearBrowsingData()) return;
if (shouldShowImportantSitesDialog()) {
showImportantDialogThenClear();
return;
@@ -546,6 +551,7 @@ public abstract class ClearBrowsingDataFragment extends PreferenceFragmentCompat
Button clearButton = (Button) getView().findViewById(R.id.clear_button);
boolean isEnabled = !getSelectedOptions().isEmpty();
clearButton.setEnabled(isEnabled);
+ clearButton.setVisibility(shouldClearBrowsingData() ? View.VISIBLE : View.INVISIBLE);
}
private int getSpinnerIndex(
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragmentAtStart.java b/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragmentAtStart.java
new file mode 100644
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragmentAtStart.java
@@ -0,0 +1,74 @@
+/*
+ This file is part of Bromite.
+
+ Bromite is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Bromite is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Bromite. If not, see <https://www.gnu.org/licenses/>.
+*/
+
+package org.chromium.chrome.browser.browsing_data;
+
+import android.content.Context;
+import android.os.Bundle;
+import android.view.View;
+
+import androidx.annotation.IntDef;
+import androidx.preference.Preference;
+
+import org.chromium.base.Callback;
+import org.chromium.chrome.R;
+import org.chromium.chrome.browser.profiles.Profile;
+import org.chromium.components.browser_ui.settings.SpinnerPreference;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.Arrays;
+import java.util.List;
+
+public class ClearBrowsingDataFragmentAtStart extends ClearBrowsingDataFragment {
+ static final String PREF_TIME_RANGE = "time_period_spinner";
+
+ @Override
+ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
+ super.onCreatePreferences(savedInstanceState, rootKey);
+
+ SpinnerPreference spinner = (SpinnerPreference) findPreference(PREF_TIME_RANGE);
+ if (spinner != null) {
+ getPreferenceScreen().removePreference(spinner);
+ }
+ }
+
+ private boolean isHistorySyncEnabled() {
+ return false;
+ }
+
+ @Override
+ protected int getClearBrowsingDataTabType() {
+ return ClearBrowsingDataTab.AT_START;
+ }
+
+ @Override
+ protected List<Integer> getDialogOptions() {
+ return Arrays.asList(DialogOption.CLEAR_HISTORY, DialogOption.CLEAR_COOKIES_AND_SITE_DATA,
+ DialogOption.CLEAR_CACHE, DialogOption.CLEAR_PASSWORDS,
+ DialogOption.CLEAR_FORM_DATA, DialogOption.CLEAR_SITE_SETTINGS);
+ }
+
+ @Override
+ protected void onClearBrowsingData() {
+ }
+
+ @Override
+ protected boolean shouldClearBrowsingData() {
+ return false;
+ }
+}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataTabsFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataTabsFragment.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataTabsFragment.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataTabsFragment.java
@@ -29,7 +29,7 @@ import org.chromium.chrome.browser.settings.SettingsActivity;
* Fragment with a {@link TabLayout} containing a basic and an advanced version of the CBD dialog.
*/
public class ClearBrowsingDataTabsFragment extends Fragment implements ProfileDependentSetting {
- public static final int CBD_TAB_COUNT = 2;
+ public static final int CBD_TAB_COUNT = 3;
private Profile mProfile;
private ClearBrowsingDataFetcher mFetcher;
@@ -93,6 +93,8 @@ public class ClearBrowsingDataTabsFragment extends Fragment implements ProfileDe
return getActivity().getString(R.string.clear_browsing_data_basic_tab_title);
case 1:
return getActivity().getString(R.string.prefs_section_advanced);
+ case 2:
+ return getActivity().getString(R.string.clear_browsing_data_atstart_tab_title);
default:
throw new RuntimeException("invalid position: " + position);
}
@@ -136,6 +138,9 @@ public class ClearBrowsingDataTabsFragment extends Fragment implements ProfileDe
case 1:
fragment = new ClearBrowsingDataFragmentAdvanced();
break;
+ case 2:
+ fragment = new ClearBrowsingDataFragmentAtStart();
+ break;
default:
throw new RuntimeException("invalid position: " + position);
}
diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp
--- a/chrome/app/settings_strings.grdp
+++ b/chrome/app/settings_strings.grdp
@@ -2244,6 +2244,16 @@
<message name="IDS_SETTINGS_CLEAR_BROWSING_DATA" desc="Text for clear browsing data button in Privacy options">
Clear browsing data
</message>
+ <if expr="is_win or is_linux">
+ <message name="IDS_CLEAR_BROWSING_DATA_ATSTART_TAB_TITLE" desc="The title of the tab showing the at start clear browsing data options.">
+ At Close
+ </message>
+ </if>
+ <if expr="is_android">
+ <message name="IDS_CLEAR_BROWSING_DATA_ATSTART_TAB_TITLE" desc="The title of the tab showing the at start clear browsing data options.">
+ At Startup
+ </message>
+ </if>
<message name="IDS_SETTINGS_CLEAR_DATA_DESCRIPTION" desc="Description for clear browsing data button in Privacy options. 'History' refers to browsing history. 'Cookies' refers to the technical meaning of a cookie, i.e. data saved by a website on the user's computer, as in when a website saves your preferences.">
Clear history, cookies, cache, and more
</message>
diff --git a/chrome/browser/android/browsing_data/browsing_data_bridge.cc b/chrome/browser/android/browsing_data/browsing_data_bridge.cc
--- a/chrome/browser/android/browsing_data/browsing_data_bridge.cc
+++ b/chrome/browser/android/browsing_data/browsing_data_bridge.cc
@@ -331,7 +331,7 @@ static void JNI_BrowsingDataBridge_SetLastClearBrowsingDataTab(
const JavaParamRef<jobject>& jprofile,
jint tab_index) {
DCHECK_GE(tab_index, 0);
- DCHECK_LT(tab_index, 2);
+ DCHECK_LT(tab_index, 3);
GetPrefService(jprofile)->SetInteger(
browsing_data::prefs::kLastClearBrowsingDataTab, tab_index);
}
diff --git a/chrome/browser/browsing_data/chrome_browsing_data_lifetime_manager.cc b/chrome/browser/browsing_data/chrome_browsing_data_lifetime_manager.cc
--- a/chrome/browser/browsing_data/chrome_browsing_data_lifetime_manager.cc
+++ b/chrome/browser/browsing_data/chrome_browsing_data_lifetime_manager.cc
@@ -312,8 +312,25 @@ void ChromeBrowsingDataLifetimeManager::Shutdown() {
void ChromeBrowsingDataLifetimeManager::ClearBrowsingDataForOnExitPolicy(
bool keep_browser_alive) {
- const base::Value::List& data_types = profile_->GetPrefs()->GetList(
- browsing_data::prefs::kClearBrowsingDataOnExitList);
+ base::Value::List data_types = profile_->GetPrefs()->GetList(
+ browsing_data::prefs::kClearBrowsingDataOnExitList).Clone();
+
+ if (profile_->GetPrefs()->GetBoolean(browsing_data::prefs::kDeleteBrowsingHistoryAtStart))
+ data_types.Append(browsing_data::policy_data_types::kBrowsingHistoryName);
+ if (profile_->GetPrefs()->GetBoolean(browsing_data::prefs::kDeletePasswordsAtStart))
+ data_types.Append(browsing_data::policy_data_types::kPasswordSigninName);
+ if (profile_->GetPrefs()->GetBoolean(browsing_data::prefs::kDeleteFormDataAtStart))
+ data_types.Append(browsing_data::policy_data_types::kAutofillName);
+ if (profile_->GetPrefs()->GetBoolean(browsing_data::prefs::kDeleteSiteSettingsAtStart))
+ data_types.Append(browsing_data::policy_data_types::kSiteSettingsName);
+ if (profile_->GetPrefs()->GetBoolean(browsing_data::prefs::kDeleteHostedAppsDataAtStart))
+ data_types.Append(browsing_data::policy_data_types::kHostedAppDataName);
+ if (profile_->GetPrefs()->GetBoolean(browsing_data::prefs::kDeleteDownloadHistoryAtStart))
+ data_types.Append(browsing_data::policy_data_types::kDownloadHistoryName);
+ if (profile_->GetPrefs()->GetBoolean(browsing_data::prefs::kDeleteCookiesAtStart))
+ data_types.Append(browsing_data::policy_data_types::kCookiesAndOtherSiteDataName);
+ if (profile_->GetPrefs()->GetBoolean(browsing_data::prefs::kDeleteCacheAtStart))
+ data_types.Append(browsing_data::policy_data_types::kCachedImagesAndFilesName);
if (!data_types.empty() &&
IsConditionSatisfiedForBrowsingDataRemoval(GetSyncTypesForPolicyPref(
@@ -422,6 +439,7 @@ void ChromeBrowsingDataLifetimeManager::StartScheduledBrowsingDataRemoval() {
bool ChromeBrowsingDataLifetimeManager::
IsConditionSatisfiedForBrowsingDataRemoval(
const syncer::UserSelectableTypeSet sync_types) {
+ if ((true)) return true;
bool sync_disabled = !SyncServiceFactory::IsSyncAllowed(profile_);
// Condition is satisfied if sync is fully disabled by policy.
if (sync_disabled) {
diff --git a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc
--- a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc
+++ b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc
@@ -436,6 +436,9 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData(
CreateTaskCompletionClosure(TracingDataType::kHistory),
&history_task_tracker_);
}
+ }
+
+ if (remove_mask & content::BrowsingDataRemover::DATA_TYPE_CACHE) {
if (ClipboardRecentContent::GetInstance())
ClipboardRecentContent::GetInstance()->SuppressClipboardContent();
@@ -486,7 +489,9 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData(
prerender::NoStatePrefetchManager::CLEAR_PRERENDER_CONTENTS |
prerender::NoStatePrefetchManager::CLEAR_PRERENDER_HISTORY);
}
+ }
+ if ((remove_mask & constants::DATA_TYPE_HISTORY) && may_delete_history) {
// The saved Autofill profiles and credit cards can include the origin from
// which these profiles and credit cards were learned. These are a form of
// history, so clear them as well.
@@ -507,7 +512,9 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData(
if (data_manager)
data_manager->Refresh();
}
+ }
+ if (remove_mask & content::BrowsingDataRemover::DATA_TYPE_CACHE) {
base::ThreadPool::PostTaskAndReply(
FROM_HERE, {base::TaskPriority::USER_VISIBLE, base::MayBlock()},
base::BindOnce(
@@ -582,9 +589,13 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData(
}
device_event_log::Clear(delete_begin_, delete_end_);
+ }
+ if ((remove_mask & constants::DATA_TYPE_HISTORY) && may_delete_history) {
CreateCrashUploadList()->Clear(delete_begin_, delete_end_);
+ }
+ if (remove_mask & content::BrowsingDataRemover::DATA_TYPE_CACHE) {
content::BackgroundTracingManager::GetInstance().DeleteTracesInDateRange(
delete_begin_, delete_end_);
diff --git a/chrome/browser/extensions/api/settings_private/prefs_util.cc b/chrome/browser/extensions/api/settings_private/prefs_util.cc
--- a/chrome/browser/extensions/api/settings_private/prefs_util.cc
+++ b/chrome/browser/extensions/api/settings_private/prefs_util.cc
@@ -513,6 +513,23 @@ const PrefsUtil::TypedPrefMap& PrefsUtil::GetAllowlistedKeys() {
(*s_allowlist)[browsing_data::prefs::kLastClearBrowsingDataTab] =
settings_api::PrefType::kNumber;
+ (*s_allowlist)[browsing_data::prefs::kDeleteBrowsingHistoryAtStart] =
+ settings_api::PrefType::kBoolean;
+ (*s_allowlist)[browsing_data::prefs::kDeleteDownloadHistoryAtStart] =
+ settings_api::PrefType::kBoolean;
+ (*s_allowlist)[browsing_data::prefs::kDeleteCacheAtStart] =
+ settings_api::PrefType::kBoolean;
+ (*s_allowlist)[browsing_data::prefs::kDeleteCookiesAtStart] =
+ settings_api::PrefType::kBoolean;
+ (*s_allowlist)[browsing_data::prefs::kDeletePasswordsAtStart] =
+ settings_api::PrefType::kBoolean;
+ (*s_allowlist)[browsing_data::prefs::kDeleteFormDataAtStart] =
+ settings_api::PrefType::kBoolean;
+ (*s_allowlist)[browsing_data::prefs::kDeleteSiteSettingsAtStart] =
+ settings_api::PrefType::kBoolean;
+ (*s_allowlist)[browsing_data::prefs::kDeleteHostedAppsDataAtStart] =
+ settings_api::PrefType::kBoolean;
+
// Accessibility.
(*s_allowlist)[::prefs::kAccessibilityImageLabelsEnabled] =
settings_api::PrefType::kBoolean;
diff --git a/chrome/browser/profiles/android/java/src/org/chromium/chrome/browser/profiles/ProfileManagerUtils.java b/chrome/browser/profiles/android/java/src/org/chromium/chrome/browser/profiles/ProfileManagerUtils.java
--- a/chrome/browser/profiles/android/java/src/org/chromium/chrome/browser/profiles/ProfileManagerUtils.java
+++ b/chrome/browser/profiles/android/java/src/org/chromium/chrome/browser/profiles/ProfileManagerUtils.java
@@ -52,10 +52,15 @@ public class ProfileManagerUtils {
}
}
+ public static void removeBrowsingDataAtStart() {
+ ProfileManagerUtilsJni.get().removeBrowsingDataAtStart();
+ }
+
@NativeMethods
interface Natives {
void flushPersistentDataForAllProfiles();
void removeSessionCookiesForAllProfiles();
+ void removeBrowsingDataAtStart();
}
}
diff --git a/chrome/browser/profiles/android/profile_manager_utils.cc b/chrome/browser/profiles/android/profile_manager_utils.cc
--- a/chrome/browser/profiles/android/profile_manager_utils.cc
+++ b/chrome/browser/profiles/android/profile_manager_utils.cc
@@ -62,3 +62,8 @@ static void JNI_ProfileManagerUtils_RemoveSessionCookiesForAllProfiles(
g_browser_process->profile_manager()->GetLoadedProfiles(),
RemoveSessionCookiesForProfile);
}
+
+static void JNI_ProfileManagerUtils_RemoveBrowsingDataAtStart(
+ JNIEnv* env) {
+ g_browser_process->profile_manager()->RemoveBrowsingDataAtStart();
+}
diff --git a/chrome/browser/profiles/profile_manager.cc b/chrome/browser/profiles/profile_manager.cc
--- a/chrome/browser/profiles/profile_manager.cc
+++ b/chrome/browser/profiles/profile_manager.cc
@@ -1488,6 +1488,19 @@ void ProfileManager::DoFinalInit(ProfileInfo* profile_info,
}
}
+void ProfileManager::RemoveBrowsingDataAtStart() {
+ base::ranges::for_each(
+ GetLoadedProfiles(),
+ [](Profile* profile) {
+ auto* browsing_data_lifetime_manager =
+ ChromeBrowsingDataLifetimeManagerFactory::GetForProfile(profile);
+ if (browsing_data_lifetime_manager && !profile->IsOffTheRecord()) {
+ browsing_data_lifetime_manager->ClearBrowsingDataForOnExitPolicy(
+ /*keep_browser_alive=*/false);
+ }
+ });
+}
+
void ProfileManager::DoFinalInitForServices(Profile* profile,
bool go_off_the_record) {
if (!do_final_services_init_ ||
@@ -2155,7 +2168,7 @@ void ProfileManager::OnBrowserClosed(Browser* browser) {
Profile* original_profile = profile->GetOriginalProfile();
// Do nothing if the closed window is not the last window of the same profile.
for (Browser* browser_iter : *BrowserList::GetInstance()) {
- if (browser_iter->profile()->GetOriginalProfile() == original_profile)
+ if (browser_iter->profile() == profile)
return;
}
diff --git a/chrome/browser/profiles/profile_manager.h b/chrome/browser/profiles/profile_manager.h
--- a/chrome/browser/profiles/profile_manager.h
+++ b/chrome/browser/profiles/profile_manager.h
@@ -199,6 +199,8 @@ class ProfileManager : public Profile::Delegate {
// profiles.
std::vector<Profile*> GetLoadedProfiles() const;
+ void RemoveBrowsingDataAtStart();
+
// If a profile with the given path is currently managed by this object and
// fully initialized, return a pointer to the corresponding Profile object;
// otherwise return null.
diff --git a/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_browsing_data_dialog.html b/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_browsing_data_dialog.html
--- a/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_browsing_data_dialog.html
+++ b/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_browsing_data_dialog.html
@@ -305,6 +305,50 @@
disabled="[[clearingInProgress_]]" no-set-pref>
</settings-checkbox>
</div>
+ <div id="atstart-tab">
+ <settings-checkbox
+ pref="{{prefs.browser.clear_data.browsing_history_at_start}}"
+ label="$i18n{clearBrowsingHistory}"
+ sub-label="[[counters_.browsing_history]]">
+ </settings-checkbox>
+ <settings-checkbox
+ pref="{{prefs.browser.clear_data.download_history_at_start}}"
+ label="$i18n{clearDownloadHistory}"
+ sub-label="[[counters_.download_history]]">
+ </settings-checkbox>
+ <settings-checkbox
+ class="cookies-checkbox"
+ pref="{{prefs.browser.clear_data.cookies_at_start}}"
+ label="$i18n{clearCookies}"
+ sub-label="[[counters_.cookies]]">
+ </settings-checkbox>
+ <settings-checkbox
+ class="cache-checkbox"
+ pref="{{prefs.browser.clear_data.cache_at_start}}"
+ label="$i18n{clearCache}"
+ sub-label="[[counters_.cache]]">
+ </settings-checkbox>
+ <settings-checkbox
+ pref="{{prefs.browser.clear_data.passwords_at_start}}"
+ label="$i18n{clearPasswords}"
+ sub-label="[[counters_.passwords]]">
+ </settings-checkbox>
+ <settings-checkbox
+ pref="{{prefs.browser.clear_data.form_data_at_start}}"
+ label="$i18n{clearFormData}"
+ sub-label="[[counters_.form_data]]">
+ </settings-checkbox>
+ <settings-checkbox
+ pref="{{prefs.browser.clear_data.site_settings_at_start}}"
+ label="$i18nPolymer{siteSettings}"
+ sub-label="[[counters_.site_settings]]">
+ </settings-checkbox>
+ <settings-checkbox
+ pref="{{prefs.browser.clear_data.hosted_apps_data_at_start}}"
+ label="$i18n{clearHostedAppData}"
+ sub-label="[[counters_.hosted_apps_data]]">
+ </settings-checkbox>
+ </div>
</iron-pages>
</div>
<div slot="button-container">
diff --git a/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_browsing_data_dialog.ts b/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_browsing_data_dialog.ts
--- a/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_browsing_data_dialog.ts
+++ b/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_browsing_data_dialog.ts
@@ -302,6 +302,7 @@ export class SettingsClearBrowsingDataDialogElement extends
value: () =>
[loadTimeData.getString('basicPageTitle'),
loadTimeData.getString('advancedPageTitle'),
+ loadTimeData.getString('atStartPageTitle'),
],
},
@@ -425,6 +426,7 @@ export class SettingsClearBrowsingDataDialogElement extends
}
this.clearButtonDisabled_ =
this.getSelectedDataTypes_(tab as HTMLElement).length === 0;
+ if ((tab as HTMLElement).id == "atstart-tab") this.clearButtonDisabled_ = true;
}
/**
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd
--- a/chrome/browser/ui/android/strings/android_chrome_strings.grd
+++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
@@ -1432,6 +1432,9 @@ Your Google account may have other forms of browsing history like searches and a
<message name="IDS_CLEAR_BROWSING_DATA_BASIC_TAB_TITLE" desc="The title of the tab showing the basic clear browsing data options.">
Basic
</message>
+ <message name="IDS_CLEAR_BROWSING_DATA_ATSTART_TAB_TITLE" desc="The title of the tab showing the at start clear browsing data options.">
+ At Startup
+ </message>
<message name="IDS_ANDROID_HISTORY_OTHER_FORMS_OF_HISTORY" desc="The notification at the top of the history page indicating that deleting Chrome browsing history will not delete other forms of history stored at Google My Activity.">
Your Google Account may have other forms of browsing history at <ph name="BEGIN_LINK">&lt;link&gt;</ph>myactivity.google.com<ph name="END_LINK">&lt;/link&gt;</ph>.
</message>
diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
--- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
+++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
@@ -1674,6 +1674,7 @@ void AddPrivacyStrings(content::WebUIDataSource* html_source,
{"clearedData", IDS_SETTINGS_CLEARED_DATA},
{"clearBrowsingData", IDS_SETTINGS_CLEAR_BROWSING_DATA},
{"clearBrowsingDataDescription", IDS_SETTINGS_CLEAR_DATA_DESCRIPTION},
+ {"atStartPageTitle", IDS_CLEAR_BROWSING_DATA_ATSTART_TAB_TITLE},
{"titleAndCount", IDS_SETTINGS_TITLE_AND_COUNT},
{"safeBrowsingEnableExtendedReportingDesc",
IDS_SETTINGS_SAFEBROWSING_ENABLE_REPORTING_DESC},
diff --git a/components/browsing_data/core/browsing_data_policies_utils.cc b/components/browsing_data/core/browsing_data_policies_utils.cc
--- a/components/browsing_data/core/browsing_data_policies_utils.cc
+++ b/components/browsing_data/core/browsing_data_policies_utils.cc
@@ -17,21 +17,21 @@
namespace browsing_data {
-namespace {
-
namespace policy_data_types {
// Data retention policy types that require sync to be disabled.
-constexpr char kBrowsingHistoryName[] = "browsing_history";
-constexpr char kPasswordSigninName[] = "password_signin";
-constexpr char kAutofillName[] = "autofill";
-constexpr char kSiteSettingsName[] = "site_settings";
+extern constexpr char kBrowsingHistoryName[] = "browsing_history";
+extern constexpr char kPasswordSigninName[] = "password_signin";
+extern constexpr char kAutofillName[] = "autofill";
+extern constexpr char kSiteSettingsName[] = "site_settings";
// Data retention policy types that do not require sync to be disabled.
-constexpr char kHostedAppDataName[] = "hosted_app_data";
-constexpr char kDownloadHistoryName[] = "download_history";
-constexpr char kCookiesAndOtherSiteDataName[] = "cookies_and_other_site_data";
-constexpr char kCachedImagesAndFilesName[] = "cached_images_and_files";
+extern constexpr char kHostedAppDataName[] = "hosted_app_data";
+extern constexpr char kDownloadHistoryName[] = "download_history";
+extern constexpr char kCookiesAndOtherSiteDataName[] = "cookies_and_other_site_data";
+extern constexpr char kCachedImagesAndFilesName[] = "cached_images_and_files";
} // namespace policy_data_types
+namespace {
+
// The format of the log message shown in chrome://policy/logs when sync types
// are automatically disabled.
constexpr char kDisabledSyncTypesLogFormat[] =
diff --git a/components/browsing_data/core/browsing_data_policies_utils.h b/components/browsing_data/core/browsing_data_policies_utils.h
--- a/components/browsing_data/core/browsing_data_policies_utils.h
+++ b/components/browsing_data/core/browsing_data_policies_utils.h
@@ -12,6 +12,17 @@
namespace browsing_data {
+namespace policy_data_types {
+extern const char kBrowsingHistoryName[];
+extern const char kDownloadHistoryName[];
+extern const char kCookiesAndOtherSiteDataName[];
+extern const char kCachedImagesAndFilesName[];
+extern const char kPasswordSigninName[];
+extern const char kAutofillName[];
+extern const char kSiteSettingsName[];
+extern const char kHostedAppDataName[];
+} // namespace policy_data_types
+
// The data types of the BrowsingDataSettings policy.
enum class PolicyDataType {
kBrowsingHistory = 0,
diff --git a/components/browsing_data/core/browsing_data_utils.cc b/components/browsing_data/core/browsing_data_utils.cc
--- a/components/browsing_data/core/browsing_data_utils.cc
+++ b/components/browsing_data/core/browsing_data_utils.cc
@@ -318,6 +318,40 @@ bool GetDeletionPreferenceFromDataType(
BrowsingDataType data_type,
ClearBrowsingDataTab clear_browsing_data_tab,
std::string* out_pref) {
+ if (clear_browsing_data_tab == ClearBrowsingDataTab::AT_START) {
+ switch (data_type) {
+ case BrowsingDataType::HISTORY:
+ *out_pref = prefs::kDeleteBrowsingHistoryAtStart;
+ return true;
+ case BrowsingDataType::CACHE:
+ *out_pref = prefs::kDeleteCacheAtStart;
+ return true;
+ case BrowsingDataType::COOKIES:
+ *out_pref = prefs::kDeleteCookiesAtStart;
+ return true;
+ case BrowsingDataType::PASSWORDS:
+ *out_pref = prefs::kDeletePasswordsAtStart;
+ return true;
+ case BrowsingDataType::FORM_DATA:
+ *out_pref = prefs::kDeleteFormDataAtStart;
+ return true;
+ case BrowsingDataType::BOOKMARKS:
+ return false;
+ case BrowsingDataType::SITE_SETTINGS:
+ *out_pref = prefs::kDeleteSiteSettingsAtStart;
+ return true;
+ case BrowsingDataType::DOWNLOADS:
+ *out_pref = prefs::kDeleteDownloadHistoryAtStart;
+ return true;
+ case BrowsingDataType::HOSTED_APPS_DATA:
+ *out_pref = prefs::kDeleteHostedAppsDataAtStart;
+ return true;
+ case BrowsingDataType::NUM_TYPES:
+ NOTREACHED(); // This is not an actual type.
+ return false;
+ }
+ }
+
if (clear_browsing_data_tab == ClearBrowsingDataTab::BASIC) {
switch (data_type) {
case BrowsingDataType::HISTORY:
diff --git a/components/browsing_data/core/clear_browsing_data_tab.h b/components/browsing_data/core/clear_browsing_data_tab.h
--- a/components/browsing_data/core/clear_browsing_data_tab.h
+++ b/components/browsing_data/core/clear_browsing_data_tab.h
@@ -18,7 +18,7 @@ namespace browsing_data {
//
// A Java counterpart will be generated for this enum.
// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.chrome.browser.browsing_data
-enum class ClearBrowsingDataTab { BASIC, ADVANCED, NUM_TYPES };
+enum class ClearBrowsingDataTab { BASIC, ADVANCED, AT_START, NUM_TYPES };
} // namespace browsing_data
diff --git a/components/browsing_data/core/pref_names.cc b/components/browsing_data/core/pref_names.cc
--- a/components/browsing_data/core/pref_names.cc
+++ b/components/browsing_data/core/pref_names.cc
@@ -47,6 +47,23 @@ void RegisterBrowserUserPrefs(user_prefs::PrefRegistrySyncable* registry) {
registry->RegisterIntegerPref(
kClearBrowsingDataHistoryNoticeShownTimes, 0);
+ registry->RegisterBooleanPref(
+ kDeleteBrowsingHistoryAtStart, false);
+ registry->RegisterBooleanPref(
+ kDeleteDownloadHistoryAtStart, false);
+ registry->RegisterBooleanPref(
+ kDeleteCacheAtStart, false);
+ registry->RegisterBooleanPref(
+ kDeleteCookiesAtStart, false);
+ registry->RegisterBooleanPref(
+ kDeletePasswordsAtStart, false);
+ registry->RegisterBooleanPref(
+ kDeleteFormDataAtStart, false);
+ registry->RegisterBooleanPref(
+ kDeleteHostedAppsDataAtStart, false);
+ registry->RegisterBooleanPref(
+ kDeleteSiteSettingsAtStart, false);
+
#if !BUILDFLAG(IS_IOS)
registry->RegisterBooleanPref(
kDeleteDownloadHistory, true,
diff --git a/components/browsing_data/core/pref_names.h b/components/browsing_data/core/pref_names.h
--- a/components/browsing_data/core/pref_names.h
+++ b/components/browsing_data/core/pref_names.h
@@ -28,6 +28,16 @@ inline constexpr char kClearBrowsingDataOnExitDeletionPending[] =
inline constexpr char kClearBrowsingDataOnExitList[] =
"browser.clear_data.clear_on_exit";
+// Clear Browsing Data dialog datatype preferences.
+inline constexpr char kDeleteBrowsingHistoryAtStart[] = "browser.clear_data.browsing_history_at_start";
+inline constexpr char kDeleteDownloadHistoryAtStart[] = "browser.clear_data.download_history_at_start";
+inline constexpr char kDeleteCacheAtStart[] = "browser.clear_data.cache_at_start";
+inline constexpr char kDeleteCookiesAtStart[] = "browser.clear_data.cookies_at_start";
+inline constexpr char kDeletePasswordsAtStart[] = "browser.clear_data.passwords_at_start";
+inline constexpr char kDeleteFormDataAtStart[] = "browser.clear_data.form_data_at_start";
+inline constexpr char kDeleteHostedAppsDataAtStart[] = "browser.clear_data.hosted_apps_data_at_start";
+inline constexpr char kDeleteSiteSettingsAtStart[] = "browser.clear_data.site_settings_at_start";
+
// Clear browsing data deletion time period.
inline constexpr char kDeleteTimePeriod[] = "browser.clear_data.time_period";
inline constexpr char kDeleteTimePeriodBasic[] =
diff --git a/content/browser/storage_partition_impl.cc b/content/browser/storage_partition_impl.cc
--- a/content/browser/storage_partition_impl.cc
+++ b/content/browser/storage_partition_impl.cc
@@ -1488,6 +1488,7 @@ void StoragePartitionImpl::Initialize(
.AppendASCII("Code Cache");
}
DCHECK_GE(settings.size_in_bytes(), 0);
+ base::DeletePathRecursively(code_cache_path);
GetGeneratedCodeCacheContext()->Initialize(code_cache_path,
settings.size_in_bytes());
}
--
@@ -1,576 +0,0 @@
From: uazo <uazo@users.noreply.github.com>
Date: Wed, 12 Apr 2023 08:22:00 +0000
Subject: Add setting to invert tap and long tap
Reverses single tap to long tap in android for accessibility reasons.
The feature can be activated from the accessibility settings.
Need: bromite-build-utils.patch
License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
---
chrome/android/java/res/values/ids.xml | 1 +
.../ChromeAccessibilitySettingsDelegate.java | 18 ++++++++++
.../contextmenu/ChromeContextMenuItem.java | 5 ++-
.../ChromeContextMenuPopulator.java | 5 +++
.../tab/TabContextMenuItemDelegate.java | 8 +++++
.../contextmenu/ContextMenuItemDelegate.java | 2 ++
.../flags/android/chrome_feature_list.cc | 1 +
.../browser/flags/ChromeFeatureList.java | 5 +++
.../strings/android_chrome_strings.grd | 9 +++++
.../res/xml/accessibility_preferences.xml | 5 +++
.../accessibility/AccessibilitySettings.java | 11 ++++++
.../AccessibilitySettingsDelegate.java | 2 ++
...Add-setting-to-invert-tap-and-long-tap.inc | 8 +++++
...Add-setting-to-invert-tap-and-long-tap.inc | 3 ++
...Add-setting-to-invert-tap-and-long-tap.inc | 1 +
.../renderer/core/html/html_anchor_element.cc | 36 +++++++++++++++----
.../renderer/core/html/html_anchor_element.h | 9 +++--
.../renderer/core/html/html_image_element.cc | 17 +++++++++
.../renderer/core/html/html_image_element.h | 2 ++
.../core/page/context_menu_controller.cc | 32 ++++++++++++-----
.../core/page/context_menu_controller.h | 5 +--
21 files changed, 164 insertions(+), 21 deletions(-)
create mode 100644 cromite_flags/chrome/browser/about_flags_cc/Add-setting-to-invert-tap-and-long-tap.inc
create mode 100644 cromite_flags/third_party/blink/common/features_cc/Add-setting-to-invert-tap-and-long-tap.inc
create mode 100644 cromite_flags/third_party/blink/common/features_h/Add-setting-to-invert-tap-and-long-tap.inc
diff --git a/chrome/android/java/res/values/ids.xml b/chrome/android/java/res/values/ids.xml
--- a/chrome/android/java/res/values/ids.xml
+++ b/chrome/android/java/res/values/ids.xml
@@ -91,6 +91,7 @@ found in the LICENSE file.
<!-- Menu item IDs for FullscreenActivities -->
<item type="id" name="contextmenu_open_in_chrome" />
+ <item type="id" name="contextmenu_open_in_tab" />
<!-- Tags -->
<item type="id" name="highlight_color" />
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java
@@ -163,6 +163,24 @@ public class ChromeAccessibilitySettingsDelegate implements AccessibilitySetting
mSnackbarManager.showSnackbar(mSnackbar);
}
+ private static class ShowAlwaysContextMenuOnLinksDelegate implements BooleanPreferenceDelegate {
+ @Override
+ public boolean isEnabled() {
+ return ChromeFeatureList.sShowAlwaysContextMenuOnLinks.isEnabled();
+ }
+
+ @Override
+ public void setEnabled(boolean value) {
+ CromiteNativeUtils.setFlagEnabled(ChromeFeatureList.SHOW_ALWAYS_CONTEXT_MENU_ON_LINKS,
+ "show-always-context-menu-on-links", value);
+ }
+ }
+
+ @Override
+ public BooleanPreferenceDelegate getShowAlwaysContextMenuOnLinksDelegate() {
+ return new ShowAlwaysContextMenuOnLinksDelegate();
+ }
+
@Override
public void addExtraPreferences(PreferenceFragmentCompat fragment) {
if (ImageDescriptionsController.getInstance().shouldShowImageDescriptionsMenuItem()) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuItem.java b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuItem.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuItem.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuItem.java
@@ -111,8 +111,9 @@ class ChromeContextMenuItem {
int SHARE_HIGHLIGHT = 32;
int REMOVE_HIGHLIGHT = 33;
int LEARN_MORE = 34;
+ int FOLLOW_LINK = 35;
// ALWAYS UPDATE!
- int NUM_ENTRIES = 35;
+ int NUM_ENTRIES = 36;
}
/** Mapping from {@link Item} to the ID found in the ids.xml. */
@@ -152,6 +153,7 @@ class ChromeContextMenuItem {
R.id.contextmenu_share_highlight, // Item.SHARE_HIGHLIGHT
R.id.contextmenu_remove_highlight, // Item.REMOVE_HIGHLIGHT
R.id.contextmenu_learn_more, // Item.LEARN_MORE
+ R.id.contextmenu_open_in_tab, // Item.OPEN_IN_NEW_CHROME_TAB
};
/** Mapping from {@link Item} to the ID of the string that describes the action of the item. */
@@ -191,6 +193,7 @@ class ChromeContextMenuItem {
R.string.contextmenu_share_highlight, // Item.SHARE_HIGHLIGHT
R.string.contextmenu_remove_highlight, // Item.REMOVE_HIGHLIGHT
R.string.contextmenu_learn_more, // Item.LEARN_MORE
+ R.string.contextmenu_open_in_tab, // Item.OPEN_IN_NEW_CHROME_TAB:
};
/**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java
@@ -266,6 +266,9 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator {
if (mParams.isAnchor()) {
ModelList linkGroup = new ModelList();
+ if (ChromeFeatureList.sShowAlwaysContextMenuOnLinks.isEnabled()) {
+ linkGroup.add(createListItem(Item.FOLLOW_LINK));
+ }
if (FirstRunStatus.getFirstRunFlowComplete()
&& !isEmptyUrl(mParams.getUrl())
&& UrlUtilities.isAcceptedScheme(mParams.getUrl())) {
@@ -631,6 +634,8 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator {
getProfile(),
false);
});
+ } else if (itemId == R.id.contextmenu_open_in_tab) {
+ mItemDelegate.onOpenUrl(mParams.getUrl(), mParams.getReferrer());
} else if (itemId == R.id.contextmenu_open_in_chrome) {
recordContextMenuSelection(ContextMenuUma.Action.OPEN_IN_CHROME);
mItemDelegate.onOpenInChrome(mParams.getUrl(), mParams.getPageUrl());
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java
@@ -273,6 +273,14 @@ public class TabContextMenuItemDelegate implements ContextMenuItemDelegate {
mTab.loadUrl(loadUrlParams);
}
+ @Override
+ public void onOpenUrl(GURL url, Referrer referrer) {
+ LoadUrlParams loadUrlParams = new LoadUrlParams(url.getSpec());
+ loadUrlParams.setTransitionType(PageTransition.LINK);
+ loadUrlParams.setReferrer(referrer);
+ mTab.loadUrl(loadUrlParams);
+ }
+
@Override
public void onOpenImageInNewTab(GURL url, Referrer referrer) {
LoadUrlParams loadUrlParams = new LoadUrlParams(url.getSpec());
diff --git a/chrome/browser/contextmenu/java/src/org/chromium/chrome/browser/contextmenu/ContextMenuItemDelegate.java b/chrome/browser/contextmenu/java/src/org/chromium/chrome/browser/contextmenu/ContextMenuItemDelegate.java
--- a/chrome/browser/contextmenu/java/src/org/chromium/chrome/browser/contextmenu/ContextMenuItemDelegate.java
+++ b/chrome/browser/contextmenu/java/src/org/chromium/chrome/browser/contextmenu/ContextMenuItemDelegate.java
@@ -110,6 +110,8 @@ public interface ContextMenuItemDelegate {
*/
void onOpenImageUrl(GURL url, Referrer referrer);
+ void onOpenUrl(GURL url, Referrer referrer);
+
/**
* Called when the {@code url} is of an image and should be opened in a new tab.
* @param url The image URL to open.
diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc
--- a/chrome/browser/flags/android/chrome_feature_list.cc
+++ b/chrome/browser/flags/android/chrome_feature_list.cc
@@ -280,6 +280,7 @@ const base::Feature* const kFeaturesExposedToJava[] = {
&kTabGroupParityAndroid,
&kTabletTabSwitcherLongPressMenu,
&kTabletToolbarIncognitoStatus,
+ &blink::features::kShowAlwaysContextMenuOnLinks,
&kTabletToolbarReordering,
&kTabResumptionModuleAndroid,
&kTabStateFlatBuffer,
diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
--- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
+++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
@@ -342,6 +342,8 @@ public abstract class ChromeFeatureList {
public static final String NOTIFICATION_ONE_TAP_UNSUBSCRIBE = "NotificationOneTapUnsubscribe";
public static final String MOVE_TOP_TOOLBAR_TO_BOTTOM =
"MoveTopToolbarToBottom";
+ public static final String SHOW_ALWAYS_CONTEXT_MENU_ON_LINKS =
+ "ShowAlwaysContextMenuOnLinks";
public static final String NOTIFICATION_PERMISSION_VARIANT = "NotificationPermissionVariant";
public static final String NOTIFICATION_PERMISSION_BOTTOM_SHEET =
"NotificationPermissionBottomSheet";
@@ -619,6 +621,8 @@ public abstract class ChromeFeatureList {
newCachedFlag(OMNIBOX_MATCH_TOOLBAR_AND_STATUS_BAR_COLOR, false);
public static final CachedFlag sMoveTopToolbarToBottom =
newCachedFlag(MOVE_TOP_TOOLBAR_TO_BOTTOM, false);
+ public static final CachedFlag sShowAlwaysContextMenuOnLinks =
+ newCachedFlag(SHOW_ALWAYS_CONTEXT_MENU_ON_LINKS, false);
public static final CachedFlag sOmniboxModernizeVisualUpdate =
newCachedFlag(OMNIBOX_MODERNIZE_VISUAL_UPDATE, true);
public static final CachedFlag sOptimizationGuidePushNotifications =
@@ -771,6 +775,7 @@ public abstract class ChromeFeatureList {
sTabWindowManagerReportIndicesMismatch,
sToolbarUseHardwareBitmapDraw,
sUseChimeAndroidSdk,
+ sShowAlwaysContextMenuOnLinks,
sUseLibunwindstackNativeUnwinderAndroid,
sVerticalAutomotiveBackButtonToolbar);
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd
--- a/chrome/browser/ui/android/strings/android_chrome_strings.grd
+++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
@@ -1638,6 +1638,12 @@ Your Google account may have other forms of browsing history like searches and a
<message name="IDS_MOVE_TOOLBAR_BOTTOM_SUMMARY" desc="Summary of the preference that allows the user to move toolbar on bottom.">
Move toolbar to bottom
</message>
+ <message name="IDS_ALWAYS_SHOW_CONTEXTMENU_ON_LINKS_TITLE" desc="Title of the preference that open the context menu in links.">
+ Always open the context menu in the links
+ </message>
+ <message name="IDS_ALWAYS_SHOW_CONTEXTMENU_ON_LINKS_SUMMARY" desc="Summary of the preference that open the context menu in links.">
+ Allows the context menu to be opened with a tap and follow the link with long press
+ </message>
<!-- Safety check -->
<message name="IDS_PREFS_SAFETY_CHECK" desc="Title of the Safety check element in settings, allowing the user to check multiple areas of browser safety. [CHAR_LIMIT=32]">
@@ -2779,6 +2785,9 @@ To change this setting, <ph name="BEGIN_LINK">BEGIN_LINK</ph>clear the Chrome da
<message name="IDS_CONTEXTMENU_OPEN_IN_NEW_CHROME_TAB" desc="Context sensitive menu item to open the selected link in a new Chrome tab from Chrome Custom Tab. [CHAR_LIMIT=30]">
Open in new Chrome tab
</message>
+ <message name="IDS_CONTEXTMENU_OPEN_IN_TAB" desc="Context sensitive menu item to open the selected link in tab. [CHAR_LIMIT=30]">
+ Open in current tab
+ </message>
<message name="IDS_CONTEXTMENU_OPEN_IN_CHROME_INCOGNITO_TAB" desc="Context sensitive menu item to open the selected link in a Chrome Incognito tab from Chrome Custom Tab. [CHAR_LIMIT=30]">
Open in Incognito tab
</message>
diff --git a/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml b/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml
--- a/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml
+++ b/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml
@@ -35,6 +35,11 @@ found in the LICENSE file.
android:summary="@string/page_zoom_always_show_preference_summary"
android:title="@string/page_zoom_always_show_preference_title" />
+ <org.chromium.components.browser_ui.settings.ChromeSwitchPreference
+ android:key="always_show_contextmenu_on_links"
+ android:summary="@string/always_show_contextmenu_on_links_summary"
+ android:title="@string/always_show_contextmenu_on_links_title" />
+
<org.chromium.components.browser_ui.settings.ChromeSwitchPreference
android:key="force_enable_zoom"
android:summary="@string/force_enable_zoom_summary"
diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java
--- a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java
+++ b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java
@@ -35,6 +35,7 @@ public class AccessibilitySettings extends PreferenceFragmentCompat
private BooleanPreferenceDelegate mForceTabletUIDelegate;
static final String PREF_FORCE_TABLET_UI = "force_tablet_ui";
static final String PREF_MOVE_TOOLBAR_TO_BOTTOM = "move_toolbar_bottom";
+ static final String PREF_ALWAYS_SHOW_CONTEXTMENU_ON_LINKS = "always_show_contextmenu_on_links";
private TextScalePreference mTextScalePref;
private PageZoomPreference mPageZoomDefaultZoomPref;
private ChromeSwitchPreference mPageZoomIncludeOSAdjustment;
@@ -45,6 +46,7 @@ public class AccessibilitySettings extends PreferenceFragmentCompat
private BooleanPreferenceDelegate mReaderForAccessibilityDelegate;
private double mPageZoomLatestDefaultZoomPrefValue;
private BooleanPreferenceDelegate mMoveTopToolbarToBottomDelegate;
+ private BooleanPreferenceDelegate mShowAlwaysContextMenuOnLinksDelegate;
private FontSizePrefs mFontSizePrefs;
private FontSizePrefsObserver mFontSizePrefsObserver =
@@ -149,6 +151,12 @@ public class AccessibilitySettings extends PreferenceFragmentCompat
mMoveToolbarToBottomPref.setChecked(mMoveTopToolbarToBottomDelegate.isEnabled());
mMoveToolbarToBottomPref.setOnPreferenceChangeListener(this);
+ ChromeSwitchPreference mShowAlwaysContextMenuOnLinksPref =
+ (ChromeSwitchPreference) findPreference(PREF_ALWAYS_SHOW_CONTEXTMENU_ON_LINKS);
+ mShowAlwaysContextMenuOnLinksDelegate = mDelegate.getShowAlwaysContextMenuOnLinksDelegate();
+ mShowAlwaysContextMenuOnLinksPref.setChecked(mShowAlwaysContextMenuOnLinksDelegate.isEnabled());
+ mShowAlwaysContextMenuOnLinksPref.setOnPreferenceChangeListener(this);
+
Preference captions = findPreference(PREF_CAPTIONS);
captions.setOnPreferenceClickListener(
preference -> {
@@ -226,6 +234,9 @@ public class AccessibilitySettings extends PreferenceFragmentCompat
} else if (PREF_MOVE_TOOLBAR_TO_BOTTOM.equals(preference.getKey())) {
mMoveTopToolbarToBottomDelegate.setEnabled((Boolean) newValue);
mDelegate.requestRestart(getActivity());
+ } else if (PREF_ALWAYS_SHOW_CONTEXTMENU_ON_LINKS.equals(preference.getKey())) {
+ mShowAlwaysContextMenuOnLinksDelegate.setEnabled((Boolean) newValue);
+ mDelegate.requestRestart(getActivity());
} else if (PREF_PAGE_ZOOM_INCLUDE_OS_ADJUSTMENT.equals(preference.getKey())) {
// TODO(mschillaci): Implement the override behavior for OS level.
}
diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettingsDelegate.java b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettingsDelegate.java
--- a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettingsDelegate.java
+++ b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettingsDelegate.java
@@ -43,6 +43,8 @@ public interface AccessibilitySettingsDelegate {
BooleanPreferenceDelegate getMoveTopToolbarToBottomDelegate();
+ BooleanPreferenceDelegate getShowAlwaysContextMenuOnLinksDelegate();
+
/** @return The BrowserContextHandle that should be used to read and update settings. */
BrowserContextHandle getBrowserContextHandle();
diff --git a/cromite_flags/chrome/browser/about_flags_cc/Add-setting-to-invert-tap-and-long-tap.inc b/cromite_flags/chrome/browser/about_flags_cc/Add-setting-to-invert-tap-and-long-tap.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/chrome/browser/about_flags_cc/Add-setting-to-invert-tap-and-long-tap.inc
@@ -0,0 +1,8 @@
+#ifdef FLAG_SECTION
+
+ {"show-always-context-menu-on-links",
+ "Always show contextmenu on links",
+ "Use accessibility settings to set it.", kOsAndroid,
+ FEATURE_VALUE_TYPE(blink::features::kShowAlwaysContextMenuOnLinks)},
+
+#endif
diff --git a/cromite_flags/third_party/blink/common/features_cc/Add-setting-to-invert-tap-and-long-tap.inc b/cromite_flags/third_party/blink/common/features_cc/Add-setting-to-invert-tap-and-long-tap.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/third_party/blink/common/features_cc/Add-setting-to-invert-tap-and-long-tap.inc
@@ -0,0 +1,3 @@
+CROMITE_FEATURE(kShowAlwaysContextMenuOnLinks,
+ "ShowAlwaysContextMenuOnLinks",
+ base::FEATURE_DISABLED_BY_DEFAULT);
diff --git a/cromite_flags/third_party/blink/common/features_h/Add-setting-to-invert-tap-and-long-tap.inc b/cromite_flags/third_party/blink/common/features_h/Add-setting-to-invert-tap-and-long-tap.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/third_party/blink/common/features_h/Add-setting-to-invert-tap-and-long-tap.inc
@@ -0,0 +1 @@
+BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kShowAlwaysContextMenuOnLinks);
diff --git a/third_party/blink/renderer/core/html/html_anchor_element.cc b/third_party/blink/renderer/core/html/html_anchor_element.cc
--- a/third_party/blink/renderer/core/html/html_anchor_element.cc
+++ b/third_party/blink/renderer/core/html/html_anchor_element.cc
@@ -59,6 +59,7 @@
#include "third_party/blink/renderer/core/loader/ping_loader.h"
#include "third_party/blink/renderer/core/navigation_api/navigation_api.h"
#include "third_party/blink/renderer/core/page/chrome_client.h"
+#include "third_party/blink/renderer/core/page/context_menu_controller.h"
#include "third_party/blink/renderer/core/page/page.h"
#include "third_party/blink/renderer/core/speculation_rules/document_speculation_rules.h"
#include "third_party/blink/renderer/platform/heap/garbage_collected.h"
@@ -467,6 +468,17 @@ void HTMLAnchorElement::NavigateToHyperlink(ResourceRequest request,
bool is_trusted,
base::TimeTicks platform_time_stamp,
KURL completed_url) {
+ UIEvent& event = *UIEvent::Create();
+ NavigateToHyperlink2(std::move(request), navigation_policy, is_trusted, platform_time_stamp,
+ std::move(completed_url), event, true);
+}
+
+void HTMLAnchorElement::NavigateToHyperlink2(ResourceRequest request,
+ NavigationPolicy navigation_policy,
+ bool is_trusted,
+ base::TimeTicks platform_time_stamp,
+ KURL completed_url,
+ Event& event, bool do_not_show_context_menu) {
LocalDOMWindow* window = GetDocument().domWindow();
if (!window) {
return;
@@ -527,6 +539,15 @@ void HTMLAnchorElement::NavigateToHyperlink(ResourceRequest request,
/*element=*/this, request.HasUserGesture()));
}
+ if (!do_not_show_context_menu &&
+ base::FeatureList::IsEnabled(features::kShowAlwaysContextMenuOnLinks)) {
+ if (Page* page = GetDocument().GetPage()) {
+ page->GetContextMenuController().HandleContextMenuEvent(
+ To<MouseEvent>(&event), /*do_not_show_context_menu*/true);
+ return;
+ }
+ }
+
Frame* target_frame =
frame->Tree().FindOrCreateFrameForNavigation(frame_request, target).frame;
@@ -559,7 +580,7 @@ void HTMLAnchorElement::SetHovered(bool hovered) {
HTMLElement::SetHovered(hovered);
}
-void HTMLAnchorElement::HandleClick(Event& event) {
+void HTMLAnchorElement::HandleClick(Event& event, bool do_not_show_context_menu) {
event.SetDefaultHandled();
LocalDOMWindow* window = GetDocument().domWindow();
@@ -656,13 +677,12 @@ void HTMLAnchorElement::HandleClick(Event& event) {
return;
}
- base::OnceClosure navigate_closure = WTF::BindOnce(
- &HTMLAnchorElement::NavigateToHyperlink, WrapWeakPersistent(this),
- std::move(request), navigation_policy, event.isTrusted(),
- event.PlatformTimeStamp(), std::move(completed_url));
-
if (navigation_policy == kNavigationPolicyDownload ||
navigation_policy == kNavigationPolicyLinkPreview) {
+ base::OnceClosure navigate_closure = WTF::BindOnce(
+ &HTMLAnchorElement::NavigateToHyperlink, WrapWeakPersistent(this),
+ std::move(request), navigation_policy, event.isTrusted(),
+ event.PlatformTimeStamp(), std::move(completed_url));
// We distinguish single/double click with some modifiers.
// See the comment of `EventHandler.delayed_navigation_task_handle_`.
auto task_handle = PostDelayedCancellableTask(
@@ -672,7 +692,9 @@ void HTMLAnchorElement::HandleClick(Event& event) {
frame->GetEventHandler().SetDelayedNavigationTaskHandle(
std::move(task_handle));
} else {
- std::move(navigate_closure).Run();
+ HTMLAnchorElement::NavigateToHyperlink2(std::move(request), navigation_policy,
+ event.isTrusted(), event.PlatformTimeStamp(), std::move(completed_url),
+ event, do_not_show_context_menu);
}
}
diff --git a/third_party/blink/renderer/core/html/html_anchor_element.h b/third_party/blink/renderer/core/html/html_anchor_element.h
--- a/third_party/blink/renderer/core/html/html_anchor_element.h
+++ b/third_party/blink/renderer/core/html/html_anchor_element.h
@@ -106,6 +106,7 @@ class CORE_EXPORT HTMLAnchorElement : public HTMLElement, public DOMURLUtils {
void SetHovered(bool hovered) override;
void Trace(Visitor*) const override;
+ void HandleClick(Event&, bool do_not_show_context_menu = false);
protected:
void ParseAttribute(const AttributeModificationParams&) override;
@@ -130,12 +131,16 @@ class CORE_EXPORT HTMLAnchorElement : public HTMLElement, public DOMURLUtils {
bool IsInteractiveContent() const final;
InsertionNotificationRequest InsertedInto(ContainerNode&) override;
void RemovedFrom(ContainerNode&) override;
+ void NavigateToHyperlink2(ResourceRequest,
+ NavigationPolicy,
+ bool is_trusted,
+ base::TimeTicks platform_time_stamp,
+ KURL, Event&, bool do_not_show_context_menu);
void NavigateToHyperlink(ResourceRequest,
NavigationPolicy,
bool is_trusted,
base::TimeTicks platform_time_stamp,
- KURL);
- void HandleClick(Event&);
+ KURL completed_url);
unsigned link_relations_ : 31;
mutable LinkHash cached_visited_link_hash_;
diff --git a/third_party/blink/renderer/core/html/html_image_element.cc b/third_party/blink/renderer/core/html/html_image_element.cc
--- a/third_party/blink/renderer/core/html/html_image_element.cc
+++ b/third_party/blink/renderer/core/html/html_image_element.cc
@@ -37,6 +37,7 @@
#include "third_party/blink/renderer/core/dom/events/event_dispatch_forbidden_scope.h"
#include "third_party/blink/renderer/core/dom/node_traversal.h"
#include "third_party/blink/renderer/core/dom/shadow_root.h"
+#include "third_party/blink/renderer/core/events/mouse_event.h"
#include "third_party/blink/renderer/core/frame/attribution_src_loader.h"
#include "third_party/blink/renderer/core/frame/deprecation/deprecation.h"
#include "third_party/blink/renderer/core/frame/local_dom_window.h"
@@ -65,6 +66,7 @@
#include "third_party/blink/renderer/core/media_type_names.h"
#include "third_party/blink/renderer/core/page/chrome_client.h"
#include "third_party/blink/renderer/core/page/page.h"
+#include "third_party/blink/renderer/core/page/context_menu_controller.h"
#include "third_party/blink/renderer/core/paint/timing/paint_timing.h"
#include "third_party/blink/renderer/core/probe/core_probes.h"
#include "third_party/blink/renderer/core/resize_observer/resize_observer_entry.h"
@@ -803,6 +805,21 @@ void HTMLImageElement::DidFinishLifecycleUpdate(
}
}
+void HTMLImageElement::DefaultEventHandler(Event& event) {
+ if (base::FeatureList::IsEnabled(features::kShowAlwaysContextMenuOnLinks)) {
+ auto* mouse_event = DynamicTo<MouseEvent>(&event);
+ if (mouse_event && mouse_event->type() == event_type_names::kClick) {
+ if (Page* page = GetDocument().GetPage()) {
+ page->GetContextMenuController().HandleContextMenuEvent(
+ mouse_event, /*do_not_show_context_menu*/true);
+ return;
+ }
+ }
+ }
+
+ HTMLElement::DefaultEventHandler(event);
+}
+
bool HTMLImageElement::draggable() const {
// Image elements are draggable by default.
return !EqualIgnoringASCIICase(FastGetAttribute(html_names::kDraggableAttr),
diff --git a/third_party/blink/renderer/core/html/html_image_element.h b/third_party/blink/renderer/core/html/html_image_element.h
--- a/third_party/blink/renderer/core/html/html_image_element.h
+++ b/third_party/blink/renderer/core/html/html_image_element.h
@@ -236,6 +236,8 @@ class CORE_EXPORT HTMLImageElement final
void DidAddUserAgentShadowRoot(ShadowRoot&) override;
void AdjustStyle(ComputedStyleBuilder&) override;
+ void DefaultEventHandler(Event&) override;
+
private:
bool AreAuthorShadowsAllowed() const override { return false; }
diff --git a/third_party/blink/renderer/core/page/context_menu_controller.cc b/third_party/blink/renderer/core/page/context_menu_controller.cc
--- a/third_party/blink/renderer/core/page/context_menu_controller.cc
+++ b/third_party/blink/renderer/core/page/context_menu_controller.cc
@@ -225,14 +225,16 @@ void ContextMenuController::DocumentDetached(Document* document) {
}
}
-void ContextMenuController::HandleContextMenuEvent(MouseEvent* mouse_event) {
- DCHECK(mouse_event->type() == event_type_names::kContextmenu);
+void ContextMenuController::HandleContextMenuEvent(MouseEvent* mouse_event, bool do_not_show_context_menu) {
+ if (!base::FeatureList::IsEnabled(features::kShowAlwaysContextMenuOnLinks)) {
+ DCHECK(mouse_event->type() == event_type_names::kContextmenu);
+ }
LocalFrame* frame = mouse_event->target()->ToNode()->GetDocument().GetFrame();
PhysicalOffset location =
PhysicalOffset::FromPointFRound(mouse_event->AbsoluteLocation());
if (ShowContextMenu(frame, location, mouse_event->GetMenuSourceType(),
- mouse_event))
+ mouse_event, do_not_show_context_menu))
mouse_event->SetDefaultHandled();
}
@@ -450,7 +452,8 @@ bool ContextMenuController::ShouldShowContextMenuFromTouch(
bool ContextMenuController::ShowContextMenu(LocalFrame* frame,
const PhysicalOffset& point,
WebMenuSourceType source_type,
- const MouseEvent* mouse_event) {
+ const MouseEvent* mouse_event,
+ bool do_not_show_context_menu) {
// Displaying the context menu in this function is a big hack as we don't
// have context, i.e. whether this is being invoked via a script or in
// response to user input (Mouse event WM_RBUTTONDOWN,
@@ -473,6 +476,15 @@ bool ContextMenuController::ShowContextMenu(LocalFrame* frame,
if (!result.InnerNodeOrImageMapImage())
return false;
+ if (!do_not_show_context_menu &&
+ base::FeatureList::IsEnabled(features::kShowAlwaysContextMenuOnLinks)) {
+ if (auto* anchor_element = DynamicTo<HTMLAnchorElement>(result.URLElement())) {
+ Event event;
+ anchor_element->HandleClick(event, /*do_not_show_context_menu*/true);
+ return true;
+ }
+ }
+
// Clear any previously set cached results if we are resetting the hit test
// result.
image_selection_cached_result_ = nullptr;
@@ -831,11 +843,13 @@ bool ContextMenuController::ShowContextMenu(LocalFrame* frame,
SetAutofillData(result.InnerNode(), data);
SetPasswordManagerData(result.InnerElement(), data);
- const bool from_touch = source_type == kMenuSourceTouch ||
- source_type == kMenuSourceLongPress ||
- source_type == kMenuSourceLongTap;
- if (from_touch && !ShouldShowContextMenuFromTouch(data))
- return false;
+ if (!base::FeatureList::IsEnabled(features::kShowAlwaysContextMenuOnLinks)) {
+ const bool from_touch = source_type == kMenuSourceTouch ||
+ source_type == kMenuSourceLongPress ||
+ source_type == kMenuSourceLongTap;
+ if (from_touch && !ShouldShowContextMenuFromTouch(data))
+ return false;
+ }
WebLocalFrameImpl* selected_web_frame =
WebLocalFrameImpl::FromFrame(selected_frame);
diff --git a/third_party/blink/renderer/core/page/context_menu_controller.h b/third_party/blink/renderer/core/page/context_menu_controller.h
--- a/third_party/blink/renderer/core/page/context_menu_controller.h
+++ b/third_party/blink/renderer/core/page/context_menu_controller.h
@@ -57,7 +57,7 @@ class CORE_EXPORT ContextMenuController final
void DocumentDetached(Document*);
- void HandleContextMenuEvent(MouseEvent*);
+ void HandleContextMenuEvent(MouseEvent*, bool do_not_show_context_menu = false);
void ShowContextMenuAtPoint(LocalFrame*,
float x,
float y,
@@ -123,7 +123,8 @@ class CORE_EXPORT ContextMenuController final
bool ShowContextMenu(LocalFrame*,
const PhysicalOffset&,
WebMenuSourceType,
- const MouseEvent* mouse_event = nullptr);
+ const MouseEvent* mouse_event = nullptr,
+ bool do_not_show_context_menu = false);
bool ShouldShowContextMenuFromTouch(const ContextMenuData&);
--
+56 -111
View File
@@ -2,126 +2,86 @@ From: uazo <uazo@users.noreply.github.com>
Date: Mon, 2 May 2022 11:48:03 +0000
Subject: Add site engagement flag
Disabled by default.
Enabled by default.
Original License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
chrome/browser/about_flags.cc | 1 +
.../engagement/important_sites_util.cc | 9 +++++
.../internal/tracker_impl.cc | 3 ++
.../public/feature_configurations.cc | 7 ++++
chrome/browser/about_flags.cc | 6 ++++
chrome/browser/flag_descriptions.cc | 5 +++
chrome/browser/flag_descriptions.h | 3 ++
.../content/site_engagement_score.cc | 5 +++
components/site_engagement/core/BUILD.gn | 6 ++++
components/site_engagement/core/features.cc | 30 ++++++++++++++++
components/site_engagement/core/features.cc | 29 ++++++++++++++++
components/site_engagement/core/features.h | 34 +++++++++++++++++++
.../Add-site-engagement-flag.inc | 10 ++++++
9 files changed, 105 insertions(+)
7 files changed, 88 insertions(+)
create mode 100644 components/site_engagement/core/features.cc
create mode 100644 components/site_engagement/core/features.h
create mode 100644 cromite_flags/chrome/browser/about_flags_cc/Add-site-engagement-flag.inc
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -153,6 +153,7 @@
@@ -133,6 +133,7 @@
#include "components/segmentation_platform/public/features.h"
#include "components/send_tab_to_self/features.h"
#include "components/services/heap_profiling/public/cpp/switches.h"
#include "components/services/storage/public/cpp/buckets/bucket_info.h"
+#include "components/site_engagement/core/features.h"
#include "components/shared_highlighting/core/common/shared_highlighting_features.h"
#include "components/signin/core/browser/dice_account_reconcilor_delegate.h"
#include "components/signin/public/base/signin_buildflags.h"
diff --git a/chrome/browser/engagement/important_sites_util.cc b/chrome/browser/engagement/important_sites_util.cc
--- a/chrome/browser/engagement/important_sites_util.cc
+++ b/chrome/browser/engagement/important_sites_util.cc
@@ -32,6 +32,7 @@
#include "components/prefs/scoped_user_pref_update.h"
#include "components/site_engagement/content/site_engagement_score.h"
#include "components/site_engagement/content/site_engagement_service.h"
+#include "components/site_engagement/core/features.h"
#include "components/site_engagement/core/mojom/site_engagement_details.mojom.h"
#include "components/webapps/browser/banners/app_banner_settings_helper.h"
#include "net/base/registry_controlled_domains/registry_controlled_domain.h"
@@ -387,6 +388,10 @@ void ImportantSitesUtil::RegisterProfilePrefs(
// static
std::set<std::string> ImportantSitesUtil::GetInstalledRegisterableDomains(
Profile* profile) {
+ if (!base::FeatureList::IsEnabled(site_engagement::features::kSiteEngagement)) {
+ std::set<std::string> empty_list;
+ return empty_list;
+ }
std::set<GURL> installed_origins = GetOriginsWithInstalledWebApps(profile);
std::set<std::string> registerable_domains;
@@ -8744,6 +8745,11 @@ const FeatureEntry kFeatureEntries[] = {
flag_descriptions::kReduceUserAgentMinorVersionDescription, kOsAll,
FEATURE_VALUE_TYPE(blink::features::kReduceUserAgentMinorVersion)},
@@ -401,6 +406,10 @@ std::vector<ImportantDomainInfo>
ImportantSitesUtil::GetImportantRegisterableDomains(Profile* profile,
size_t max_results) {
SCOPED_UMA_HISTOGRAM_TIMER("Storage.ImportantSites.GenerationTime");
+ if (!base::FeatureList::IsEnabled(site_engagement::features::kSiteEngagement)) {
+ std::vector<ImportantDomainInfo> empty_list;
+ return empty_list;
+ }
std::map<std::string, ImportantDomainInfo> important_info;
std::map<GURL, double> engagement_map;
diff --git a/components/feature_engagement/internal/tracker_impl.cc b/components/feature_engagement/internal/tracker_impl.cc
--- a/components/feature_engagement/internal/tracker_impl.cc
+++ b/components/feature_engagement/internal/tracker_impl.cc
@@ -23,6 +23,7 @@
#include "base/task/single_thread_task_runner.h"
#include "base/time/clock.h"
#include "build/build_config.h"
+#include "components/site_engagement/core/features.h"
#include "components/feature_engagement/internal/availability_model_impl.h"
#include "components/feature_engagement/internal/blocked_iph_features.h"
#include "components/feature_engagement/internal/chrome_variations_configuration.h"
@@ -211,6 +212,8 @@ TrackerImpl::TrackerImpl(
TrackerImpl::~TrackerImpl() = default;
void TrackerImpl::NotifyEvent(const std::string& event) {
+ if (!base::FeatureList::IsEnabled(site_engagement::features::kSiteEngagement))
+ return;
event_model_->IncrementEvent(event, time_provider_->GetCurrentDay());
stats::RecordNotifyEvent(event, configuration_.get(),
event_model_->IsReady());
diff --git a/components/feature_engagement/public/feature_configurations.cc b/components/feature_engagement/public/feature_configurations.cc
--- a/components/feature_engagement/public/feature_configurations.cc
+++ b/components/feature_engagement/public/feature_configurations.cc
@@ -6,6 +6,7 @@
#include "base/strings/string_util.h"
#include "build/build_config.h"
+#include "components/site_engagement/core/features.h"
#include "components/feature_engagement/public/configuration.h"
#include "components/feature_engagement/public/event_constants.h"
#include "components/feature_engagement/public/feature_constants.h"
@@ -111,6 +112,12 @@ std::optional<FeatureConfig> GetClientSideFeatureConfig(
}
#endif // BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_WIN)
+ if (!base::FeatureList::IsEnabled(site_engagement::features::kSiteEngagement)) {
+ absl::optional<FeatureConfig> config = FeatureConfig();
+ config->valid = false;
+ return config;
+ }
+ {"site-engagement",
+ flag_descriptions::kSiteEngagementName,
+ flag_descriptions::kSiteEngagementDescription, kOsAll,
+ FEATURE_VALUE_TYPE(site_engagement::features::kSiteEngagement)},
+
#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_APPLE) || BUILDFLAG(IS_LINUX) || \
BUILDFLAG(IS_CHROMEOS)
if (kIPHPasswordsAccountStorageFeature.name == feature->name) {
#if BUILDFLAG(IS_CHROMEOS_ASH)
{"enable-variable-refresh-rate",
flag_descriptions::kEnableVariableRefreshRateName,
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -3082,6 +3082,11 @@ const char kReduceUserAgentMinorVersionDescription[] =
"The Chrome version in the User-Agent string will be reported as "
"Chrome/<major_version>.0.0.0.";
+const char kSiteEngagementName[] =
+ "Enable site engagement feature";
+const char kSiteEngagementDescription[] =
+ "Site Engagement Service provides information about how engaged a user is with a origin; this affects which NTP tiles are automatically created.";
+
const char kWebSQLAccessName[] = "Allows access to WebSQL APIs";
const char kWebSQLAccessDescription[] =
"The WebSQL API is enabled by default, but can be disabled here.";
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -1752,6 +1752,9 @@ extern const char kDurableClientHintsCacheDescription[];
extern const char kReduceUserAgentMinorVersionName[];
extern const char kReduceUserAgentMinorVersionDescription[];
+extern const char kSiteEngagementName[];
+extern const char kSiteEngagementDescription[];
+
extern const char kWebSQLAccessName[];
extern const char kWebSQLAccessDescription[];
diff --git a/components/site_engagement/content/site_engagement_score.cc b/components/site_engagement/content/site_engagement_score.cc
--- a/components/site_engagement/content/site_engagement_score.cc
+++ b/components/site_engagement/content/site_engagement_score.cc
@@ -18,6 +18,7 @@
@@ -17,6 +17,7 @@
#include "components/content_settings/core/common/content_settings.h"
#include "components/content_settings/core/common/content_settings_types.h"
#include "components/content_settings/core/common/content_settings_utils.h"
+#include "components/site_engagement/core/features.h"
#include "components/site_engagement/content/engagement_type.h"
#include "components/site_engagement/content/site_engagement_metrics.h"
#include "third_party/blink/public/mojom/site_engagement/site_engagement.mojom.h"
@@ -275,6 +276,10 @@ void SiteEngagementScore::Commit() {
if (!UpdateScoreDict(*score_dict_))
#include "components/variations/variations_associated_data.h"
@@ -277,6 +278,10 @@ void SiteEngagementScore::Commit() {
if (!UpdateScoreDict(score_dict_.get()))
return;
+ if (!base::FeatureList::IsEnabled(features::kSiteEngagement)) {
@@ -130,7 +90,7 @@ diff --git a/components/site_engagement/content/site_engagement_score.cc b/compo
+ }
settings_map_->SetWebsiteSettingDefaultScope(
origin_, GURL(), ContentSettingsType::SITE_ENGAGEMENT,
base::Value(std::move(*score_dict_)));
base::Value::FromUniquePtrValue(std::move(score_dict_)));
diff --git a/components/site_engagement/core/BUILD.gn b/components/site_engagement/core/BUILD.gn
--- a/components/site_engagement/core/BUILD.gn
+++ b/components/site_engagement/core/BUILD.gn
@@ -153,7 +113,7 @@ diff --git a/components/site_engagement/core/features.cc b/components/site_engag
new file mode 100644
--- /dev/null
+++ b/components/site_engagement/core/features.cc
@@ -0,0 +1,30 @@
@@ -0,0 +1,29 @@
+/*
+ This file is part of Bromite.
+
@@ -178,9 +138,8 @@ new file mode 100644
+namespace site_engagement {
+namespace features {
+
+CROMITE_FEATURE(kSiteEngagement,
+ "SiteEngagement",
+ base::FEATURE_DISABLED_BY_DEFAULT);
+const base::Feature kSiteEngagement{"SiteEngagement",
+ base::FEATURE_ENABLED_BY_DEFAULT};
+
+} // namespace features
+} // namespace site_engagement
@@ -217,25 +176,11 @@ new file mode 100644
+namespace features {
+
+// Enable site engagement
+BASE_DECLARE_FEATURE(kSiteEngagement);
+extern const base::Feature kSiteEngagement;
+
+} // namespace features
+} // namespace site_engagement
+
+#endif // SITE_ENGAGEMENT_CORE_FEATURES_H_
diff --git a/cromite_flags/chrome/browser/about_flags_cc/Add-site-engagement-flag.inc b/cromite_flags/chrome/browser/about_flags_cc/Add-site-engagement-flag.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/chrome/browser/about_flags_cc/Add-site-engagement-flag.inc
@@ -0,0 +1,10 @@
+#ifdef FLAG_SECTION
+
+ {"site-engagement",
+ "Enable site engagement feature",
+ "Site Engagement Service provides information about how "
+ "engaged a user is with a origin; this affects which NTP "
+ "tiles are automatically created.", kOsAll,
+ FEATURE_VALUE_TYPE(site_engagement::features::kSiteEngagement)},
+
+#endif
--
2.25.1
@@ -5,32 +5,34 @@ Subject: Add support for ISupportHelpAndFeedback
Original License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
.../chrome/browser/settings/SettingsActivity.java | 9 +++++++--
.../components/browser_ui/settings/SettingsUtils.java | 4 ++++
2 files changed, 11 insertions(+), 2 deletions(-)
.../chrome/browser/settings/SettingsActivity.java | 11 ++++++++---
.../components/browser_ui/settings/SettingsUtils.java | 4 ++++
2 files changed, 12 insertions(+), 3 deletions(-)
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java
@@ -86,6 +86,7 @@ import org.chromium.components.browser_ui.settings.CustomDividerFragment;
@@ -72,6 +72,7 @@ import org.chromium.components.browser_ui.bottomsheet.BottomSheetControllerFacto
import org.chromium.components.browser_ui.modaldialog.AppModalPresenter;
import org.chromium.components.browser_ui.settings.FragmentSettingsLauncher;
import org.chromium.components.browser_ui.settings.PaddedItemDecorationWithDivider;
import org.chromium.components.browser_ui.settings.SettingsLauncher;
+import org.chromium.components.browser_ui.settings.SettingsUtils;
import org.chromium.components.browser_ui.site_settings.BaseSiteSettingsFragment;
import org.chromium.components.browser_ui.site_settings.SiteSettingsCategory;
import org.chromium.components.browser_ui.util.TraceEventVectorDrawableCompat;
@@ -457,8 +458,12 @@ public class SettingsActivity extends ChromeBaseAppCompatActivity
import org.chromium.components.browser_ui.site_settings.SiteSettingsPreferenceFragment;
import org.chromium.components.browser_ui.widget.displaystyle.UiConfig;
import org.chromium.components.browser_ui.widget.displaystyle.ViewResizer;
@@ -338,9 +339,13 @@ public class SettingsActivity extends ChromeBaseAppCompatActivity
finish();
return true;
} else if (item.getItemId() == R.id.menu_id_general_help) {
- HelpAndFeedbackLauncherImpl.getForProfile(mProfile)
- .show(this, getString(R.string.help_context_settings), null);
- HelpAndFeedbackLauncherImpl.getInstance().show(this,
- getString(R.string.help_context_settings), Profile.getLastUsedRegularProfile(),
- null);
+ if (mainFragment instanceof SettingsUtils.ISupportHelpAndFeedback) {
+ ((SettingsUtils.ISupportHelpAndFeedback)mainFragment).onHelpAndFeebackPressed();
+ } else {
+ HelpAndFeedbackLauncherImpl.getForProfile(mProfile)
+ .show(this, getString(R.string.help_context_settings), null);
+ HelpAndFeedbackLauncherImpl.getInstance().show(this,
+ getString(R.string.help_context_settings), Profile.getLastUsedRegularProfile(),
+ null);
+ }
return true;
}
@@ -38,7 +40,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/Settin
diff --git a/components/browser_ui/settings/android/java/src/org/chromium/components/browser_ui/settings/SettingsUtils.java b/components/browser_ui/settings/android/java/src/org/chromium/components/browser_ui/settings/SettingsUtils.java
--- a/components/browser_ui/settings/android/java/src/org/chromium/components/browser_ui/settings/SettingsUtils.java
+++ b/components/browser_ui/settings/android/java/src/org/chromium/components/browser_ui/settings/SettingsUtils.java
@@ -91,4 +91,8 @@ public class SettingsUtils {
@@ -97,4 +97,8 @@ public class SettingsUtils {
ToolbarUtils.setOverflowMenuVisibility(toolbar, visibility);
return true;
}
@@ -48,3 +50,4 @@ diff --git a/components/browser_ui/settings/android/java/src/org/chromium/compon
+ }
}
--
2.25.1
@@ -49,17 +49,17 @@ diff --git a/base/android/content_uri_utils.h b/base/android/content_uri_utils.h
diff --git a/base/android/java/src/org/chromium/base/ContentUriUtils.java b/base/android/java/src/org/chromium/base/ContentUriUtils.java
--- a/base/android/java/src/org/chromium/base/ContentUriUtils.java
+++ b/base/android/java/src/org/chromium/base/ContentUriUtils.java
@@ -23,6 +23,9 @@ import org.jni_zero.CalledByNative;
@@ -23,6 +23,9 @@ import org.chromium.base.annotations.CalledByNative;
import java.io.File;
import java.io.IOException;
+import android.system.Os;
+import android.content.ContentProviderClient;
+
/** This class provides methods to access content URI schemes. */
public abstract class ContentUriUtils {
private static final String TAG = "ContentUriUtils";
@@ -87,6 +90,36 @@ public abstract class ContentUriUtils {
/**
* This class provides methods to access content URI schemes.
*/
@@ -89,6 +92,36 @@ public abstract class ContentUriUtils {
return -1;
}
@@ -70,7 +70,7 @@ diff --git a/base/android/java/src/org/chromium/base/ContentUriUtils.java b/base
+ ContentResolver resolver = ContextUtils.getApplicationContext().getContentResolver();
+ ContentProviderClient client = resolver.acquireContentProviderClient(
+ uri.getAuthority());
+ ParcelFileDescriptor pfd = client.openFile(uri, "wt");
+ ParcelFileDescriptor pfd = client.openFile(uri, "rw");
+ int fd = pfd.detachFd();
+ client.close();
+ return fd;
@@ -97,3 +97,4 @@ diff --git a/base/android/java/src/org/chromium/base/ContentUriUtils.java b/base
* Check whether a content URI exists.
*
--
2.25.1
File diff suppressed because it is too large Load Diff
+305 -86
View File
@@ -9,25 +9,61 @@ Requires patch: Content-settings-infrastructure.patch
Original License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
.../impl/BromiteWebGLContentSetting.java | 93 +++++++++++++++++++
.../bromite_content_settings/webgl.grdp | 27 ++++++
.../bromite_content_settings/webgl.inc | 22 +++++
.../common/bromite_content_settings/WEBGL.inc | 1 +
.../execution_context/execution_context.cc | 7 ++
.../execution_context/execution_context.h | 2 +
.../browser_ui/site_settings/android/BUILD.gn | 3 +
.../BromiteCustomContentSettingImpl.java | 1 +
.../BromiteWebGLContentSetting.java | 85 +++++++++++++++++++
.../site_settings/SiteSettingsCategory.java | 5 +-
.../strings/android/browser_ui_strings.grd | 1 +
.../browser_ui/strings/android/webgl.grdp | 18 ++++
components/components_strings.grd | 1 +
.../core/browser/content_settings_registry.cc | 14 +++
.../core/browser/content_settings_utils.cc | 2 +
.../core/common/content_settings.cc | 4 +-
.../core/common/content_settings.h | 1 +
.../core/common/content_settings.mojom | 1 +
.../common/content_settings_mojom_traits.cc | 3 +-
.../common/content_settings_mojom_traits.h | 5 ++
.../core/common/content_settings_types.h | 2 +
.../renderer/content_settings_agent_impl.cc | 9 ++
.../renderer/content_settings_agent_impl.h | 1 +
.../platform/web_content_settings_client.h | 2 +
.../execution_context/execution_context.cc | 23 +++++
.../execution_context/execution_context.h | 5 ++
.../webgl/webgl_rendering_context_base.cc | 32 +++----
.../webgl/webgl_rendering_context_base.h | 2 +
8 files changed, 167 insertions(+), 19 deletions(-)
create mode 100644 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromiteWebGLContentSetting.java
create mode 100644 components/browser_ui/strings/bromite_content_settings/webgl.grdp
create mode 100644 components/content_settings/core/browser/bromite_content_settings/webgl.inc
create mode 100644 components/content_settings/core/common/bromite_content_settings/WEBGL.inc
22 files changed, 197 insertions(+), 23 deletions(-)
create mode 100644 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteWebGLContentSetting.java
create mode 100644 components/browser_ui/strings/android/webgl.grdp
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromiteWebGLContentSetting.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromiteWebGLContentSetting.java
diff --git a/components/browser_ui/site_settings/android/BUILD.gn b/components/browser_ui/site_settings/android/BUILD.gn
--- a/components/browser_ui/site_settings/android/BUILD.gn
+++ b/components/browser_ui/site_settings/android/BUILD.gn
@@ -72,6 +72,9 @@ android_library("java") {
"java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSettingImpl.java",
"java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSetting.java",
]
+ sources += [
+ "java/src/org/chromium/components/browser_ui/site_settings/BromiteWebGLContentSetting.java",
+ ]
annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ]
resources_package = "org.chromium.components.browser_ui.site_settings"
deps = [
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSettingImpl.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSettingImpl.java
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSettingImpl.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSettingImpl.java
@@ -43,6 +43,7 @@ public abstract class BromiteCustomContentSettingImpl {
static {
mItemList = new ArrayList<BromiteCustomContentSetting>();
+ mItemList.add(new BromiteWebGLContentSetting());
}
public static SiteSettingsCategory createFromType(
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteWebGLContentSetting.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteWebGLContentSetting.java
new file mode 100644
--- /dev/null
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromiteWebGLContentSetting.java
@@ -0,0 +1,93 @@
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteWebGLContentSetting.java
@@ -0,0 +1,85 @@
+/*
+ This file is part of Bromite.
+
@@ -45,11 +81,8 @@ new file mode 100644
+ along with Bromite. If not, see <https://www.gnu.org/licenses/>.
+*/
+
+package org.chromium.components.browser_ui.site_settings.impl;
+package org.chromium.components.browser_ui.site_settings;
+
+import org.chromium.components.browser_ui.site_settings.R;
+
+import org.chromium.components.browser_ui.site_settings.BromiteCustomContentSetting;
+import org.chromium.components.browser_ui.site_settings.ContentSettingsResources;
+import org.chromium.components.browser_ui.site_settings.SiteSettingsCategory;
+import org.chromium.components.content_settings.ContentSettingValues;
@@ -65,6 +98,7 @@ new file mode 100644
+public class BromiteWebGLContentSetting extends BromiteCustomContentSetting {
+ public BromiteWebGLContentSetting() {
+ super(/*contentSettingsType*/ ContentSettingsType.WEBGL,
+ /*siteSettingsCategory*/ SiteSettingsCategory.Type.WEBGL,
+ /*defaultEnabledValue*/ ContentSettingValues.ALLOW,
+ /*defaultDisabledValue*/ ContentSettingValues.BLOCK,
+ /*allowException*/ true,
@@ -80,8 +114,7 @@ new file mode 100644
+ /*defaultEnabledValue*/ getDefaultEnabledValue(),
+ /*defaultDisabledValue*/ getDefaultDisabledValue(),
+ /*enabledSummary*/ R.string.website_settings_category_webgl_enabled,
+ /*disabledSummary*/ R.string.website_settings_category_webgl_disabled,
+ /*summaryOverrideForScreenReader*/ 0);
+ /*disabledSummary*/ R.string.website_settings_category_webgl_disabled);
+ }
+
+ @Override
@@ -97,11 +130,6 @@ new file mode 100644
+ }
+
+ @Override
+ public int getCategoryDescription() {
+ return R.string.settings_site_settings_webgl_description;
+ }
+
+ @Override
+ public boolean requiresTriStateContentSetting() {
+ return false;
+ }
@@ -121,96 +149,286 @@ new file mode 100644
+ return value != ContentSettingValues.BLOCK;
+ }
+}
diff --git a/components/browser_ui/strings/bromite_content_settings/webgl.grdp b/components/browser_ui/strings/bromite_content_settings/webgl.grdp
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java
@@ -44,7 +44,7 @@ public class SiteSettingsCategory {
Type.PROTECTED_MEDIA, Type.SENSORS, Type.SOUND, Type.USB, Type.VIRTUAL_REALITY,
Type.USE_STORAGE, Type.AUTO_DARK_WEB_CONTENT, Type.REQUEST_DESKTOP_SITE,
Type.FEDERATED_IDENTITY_API, Type.TIMEZONE_OVERRIDE, Type.AUTOPLAY, Type.JAVASCRIPT_JIT,
- Type.IMAGES})
+ Type.IMAGES, Type.WEBGL})
@Retention(RetentionPolicy.SOURCE)
public @interface Type {
// All updates here must also be reflected in {@link #preferenceKey(int)
@@ -79,10 +79,11 @@ public class SiteSettingsCategory {
int AUTOPLAY = 27;
int JAVASCRIPT_JIT = 28;
int IMAGES = 29;
+ int WEBGL = 30;
/**
* Number of handled categories used for calculating array sizes.
*/
- int NUM_ENTRIES = 30;
+ int NUM_ENTRIES = 31;
}
private final BrowserContextHandle mBrowserContextHandle;
diff --git a/components/browser_ui/strings/android/browser_ui_strings.grd b/components/browser_ui/strings/android/browser_ui_strings.grd
--- a/components/browser_ui/strings/android/browser_ui_strings.grd
+++ b/components/browser_ui/strings/android/browser_ui_strings.grd
@@ -174,6 +174,7 @@
<release seq="1">
<messages fallback_to_english="true">
<part file="site_settings.grdp" />
+ <part file="webgl.grdp" />
<message name="IDS_GOT_IT" desc="Button for the user to accept a disclosure/message">
Got it
diff --git a/components/browser_ui/strings/android/webgl.grdp b/components/browser_ui/strings/android/webgl.grdp
new file mode 100644
--- /dev/null
+++ b/components/browser_ui/strings/bromite_content_settings/webgl.grdp
@@ -0,0 +1,27 @@
+++ b/components/browser_ui/strings/android/webgl.grdp
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<grit-part>
+ <message name="IDS_SITE_SETTINGS_TYPE_WEBGL" desc="The label used for webgl site settings controls." formatter_data="android_java">
+ <message name="IDS_SITE_SETTINGS_TYPE_WEBGL" desc="The label used for webgl site settings controls.">
+ Webgl
+ </message>
+ <message name="IDS_SETTINGS_SITE_SETTINGS_WEBGL_DESCRIPTION" desc="Description of the webgl content setting." formatter_data="android_java">
+ Enable Webgl, a JavaScript API for rendering high-performance interactive 3D and 2D graphics
+ </message>
+ <message name="IDS_SITE_SETTINGS_TYPE_WEBGL_MID_SENTENCE" desc="The label used for webgl site settings controls when used mid-sentence." formatter_data="android_java">
+ <message name="IDS_SITE_SETTINGS_TYPE_WEBGL_MID_SENTENCE" desc="The label used for webgl site settings controls when used mid-sentence.">
+ webgl
+ </message>
+ <message name="IDS_WEBGL_PERMISSION_TITLE" desc="Title of the permission to use webgl [CHAR-LIMIT=32]" formatter_data="android_java">
+ <message name="IDS_WEBGL_PERMISSION_TITLE" desc="Title of the permission to use webgl [CHAR-LIMIT=32]">
+ Webgl
+ </message>
+ <message name="IDS_WEBSITE_SETTINGS_CATEGORY_WEBGL_ENABLED" desc="Summary text explaining that webgl is full enabled." formatter_data="android_java">
+ <message name="IDS_WEBSITE_SETTINGS_CATEGORY_WEBGL_ENABLED" desc="Summary text explaining that webgl is full enabled.">
+ Enabled
+ </message>
+ <message name="IDS_WEBSITE_SETTINGS_CATEGORY_WEBGL_DISABLED" desc="Summary text explaining that webgl is full disabled." formatter_data="android_java">
+ <message name="IDS_WEBSITE_SETTINGS_CATEGORY_WEBGL_DISABLED" desc="Summary text explaining that webgl is full disabled.">
+ Disabled
+ </message>
+ <message name="IDS_SETTINGS_SITE_SETTINGS_WEBGL_ALLOWED_EXCEPTIONS" desc="Label for the allowed exceptions site list of the webgl setting.">
+ Allowed to use webgl
+ </message>
+ <message name="IDS_SETTINGS_SITE_SETTINGS_WEBGL_BLOCKED_EXCEPTIONS" desc="Label for the blocked exceptions site list of the webgl setting.">
+ Not allowed to use webgl
+ </message>
+</grit-part>
diff --git a/components/content_settings/core/browser/bromite_content_settings/webgl.inc b/components/content_settings/core/browser/bromite_content_settings/webgl.inc
new file mode 100644
--- /dev/null
+++ b/components/content_settings/core/browser/bromite_content_settings/webgl.inc
@@ -0,0 +1,22 @@
diff --git a/components/components_strings.grd b/components/components_strings.grd
--- a/components/components_strings.grd
+++ b/components/components_strings.grd
@@ -337,6 +337,7 @@
<part file="version_ui_strings.grdp" />
<part file="webapps_strings.grdp" />
<part file="user_scripts/strings/userscripts_strings.grdp" />
+ <part file="browser_ui/strings/android/webgl.grdp" />
<if expr="not is_ios">
<part file="management_strings.grdp" />
diff --git a/components/content_settings/core/browser/content_settings_registry.cc b/components/content_settings/core/browser/content_settings_registry.cc
--- a/components/content_settings/core/browser/content_settings_registry.cc
+++ b/components/content_settings/core/browser/content_settings_registry.cc
@@ -679,6 +679,20 @@ void ContentSettingsRegistry::Init() {
ContentSettingsInfo::INHERIT_IN_INCOGNITO,
ContentSettingsInfo::PERSISTENT,
ContentSettingsInfo::EXCEPTIONS_ON_SECURE_ORIGINS_ONLY);
+
+ Register(ContentSettingsType::WEBGL, "webgl", CONTENT_SETTING_BLOCK,
+ WebsiteSettingsInfo::SYNCABLE,
+ /*allowlisted_schemes=*/{},
+ /*valid_settings=*/{CONTENT_SETTING_ALLOW,
+ CONTENT_SETTING_BLOCK},
+ WebsiteSettingsInfo::TOP_ORIGIN_ONLY_SCOPE,
+ WebsiteSettingsRegistry::ALL_PLATFORMS,
+ AllowlistedSchemes(),
+ ValidSettings(CONTENT_SETTING_ALLOW,
+ CONTENT_SETTING_BLOCK),
+ WebsiteSettingsInfo::SINGLE_ORIGIN_WITH_EMBEDDED_EXCEPTIONS_SCOPE,
+ WebsiteSettingsRegistry::PLATFORM_ANDROID,
+ ContentSettingsInfo::INHERIT_IN_INCOGNITO,
+ ContentSettingsInfo::EXCEPTIONS_ON_SECURE_AND_INSECURE_ORIGINS);
+ ContentSettingsInfo::PERSISTENT,
+ ContentSettingsInfo::EXCEPTIONS_ON_SECURE_AND_INSECURE_ORIGINS,
+ /*show_into_info_page*/ true,
+ /*permission_type_ui*/ IDS_SITE_SETTINGS_TYPE_WEBGL,
+ /*permission_type_ui_mid_sentence*/ IDS_SITE_SETTINGS_TYPE_WEBGL_MID_SENTENCE);
}
void ContentSettingsRegistry::Register(
diff --git a/components/content_settings/core/browser/content_settings_utils.cc b/components/content_settings/core/browser/content_settings_utils.cc
--- a/components/content_settings/core/browser/content_settings_utils.cc
+++ b/components/content_settings/core/browser/content_settings_utils.cc
@@ -155,6 +155,8 @@ void GetRendererContentSettingRules(const HostContentSettingsMap* map,
std::string timezone;
map->GetTimezoneOverrideValue(timezone);
rules->timezone_override_value = timezone;
+ map->GetSettingsForOneType(ContentSettingsType::WEBGL,
+ &(rules->webgl_rules));
}
bool IsMorePermissive(ContentSetting a, ContentSetting b) {
diff --git a/components/content_settings/core/common/content_settings.cc b/components/content_settings/core/common/content_settings.cc
--- a/components/content_settings/core/common/content_settings.cc
+++ b/components/content_settings/core/common/content_settings.cc
@@ -205,7 +205,8 @@ bool RendererContentSettingRules::IsRendererContentSetting(
content_type == ContentSettingsType::AUTOPLAY ||
content_type == ContentSettingsType::MIXEDSCRIPT ||
content_type == ContentSettingsType::AUTO_DARK_WEB_CONTENT ||
- content_type == ContentSettingsType::TIMEZONE_OVERRIDE;
+ content_type == ContentSettingsType::TIMEZONE_OVERRIDE ||
+ content_type == ContentSettingsType::WEBGL;
}
void RendererContentSettingRules::FilterRulesByOutermostMainFrameURL(
@@ -217,6 +218,7 @@ void RendererContentSettingRules::FilterRulesByOutermostMainFrameURL(
FilterRulesForType(auto_dark_content_rules, outermost_main_frame_url);
FilterRulesForType(timezone_override_rules, outermost_main_frame_url);
FilterRulesForType(autoplay_rules, outermost_main_frame_url);
+ FilterRulesForType(webgl_rules, outermost_main_frame_url);
}
RendererContentSettingRules::RendererContentSettingRules() = default;
diff --git a/components/content_settings/core/common/content_settings.h b/components/content_settings/core/common/content_settings.h
--- a/components/content_settings/core/common/content_settings.h
+++ b/components/content_settings/core/common/content_settings.h
@@ -97,6 +97,7 @@ struct RendererContentSettingRules {
ContentSettingsForOneType auto_dark_content_rules;
ContentSettingsForOneType timezone_override_rules;
std::string timezone_override_value;
+ ContentSettingsForOneType webgl_rules;
};
namespace content_settings {
diff --git a/components/content_settings/core/common/content_settings.mojom b/components/content_settings/core/common/content_settings.mojom
--- a/components/content_settings/core/common/content_settings.mojom
+++ b/components/content_settings/core/common/content_settings.mojom
@@ -81,4 +81,5 @@ struct RendererContentSettingRules {
array<ContentSettingPatternSource> auto_dark_content_rules;
array<ContentSettingPatternSource> timezone_override_rules;
string timezone_override_value;
+ array<ContentSettingPatternSource> webgl_rules;
};
diff --git a/components/content_settings/core/common/content_settings_mojom_traits.cc b/components/content_settings/core/common/content_settings_mojom_traits.cc
--- a/components/content_settings/core/common/content_settings_mojom_traits.cc
+++ b/components/content_settings/core/common/content_settings_mojom_traits.cc
@@ -104,7 +104,8 @@ bool StructTraits<content_settings::mojom::RendererContentSettingRulesDataView,
data.ReadMixedContentRules(&out->mixed_content_rules) &&
data.ReadAutoDarkContentRules(&out->auto_dark_content_rules) &&
data.ReadTimezoneOverrideRules(&out->timezone_override_rules) &&
- data.ReadTimezoneOverrideValue(&out->timezone_override_value);
+ data.ReadTimezoneOverrideValue(&out->timezone_override_value) &&
+ data.ReadWebglRules(&out->webgl_rules);
}
} // namespace mojo
diff --git a/components/content_settings/core/common/content_settings_mojom_traits.h b/components/content_settings/core/common/content_settings_mojom_traits.h
--- a/components/content_settings/core/common/content_settings_mojom_traits.h
+++ b/components/content_settings/core/common/content_settings_mojom_traits.h
@@ -165,6 +165,11 @@ struct StructTraits<
return r.timezone_override_value;
}
+ static const std::vector<ContentSettingPatternSource>& webgl_rules(
+ const RendererContentSettingRules& r) {
+ return r.webgl_rules;
+ }
+
+ content_settings::WebsiteSettingsRegistry::GetInstance()
+ ->GetMutable(ContentSettingsType::WEBGL)
+ ->set_show_into_info_page()
+ .set_desktop_ui()
+ .set_is_renderer_content_setting()
+ .set_title_ui(IDS_SITE_SETTINGS_TYPE_WEBGL)
+ .set_description_ui(IDS_SETTINGS_SITE_SETTINGS_WEBGL_DESCRIPTION)
+ .set_allowed_ui(IDS_WEBSITE_SETTINGS_CATEGORY_WEBGL_ENABLED)
+ .set_blocked_ui(IDS_WEBSITE_SETTINGS_CATEGORY_WEBGL_DISABLED)
+ .set_allowed_exceptions_ui(IDS_SETTINGS_SITE_SETTINGS_WEBGL_ALLOWED_EXCEPTIONS)
+ .set_blocked_exceptions_ui(IDS_SETTINGS_SITE_SETTINGS_WEBGL_BLOCKED_EXCEPTIONS)
+ .set_mid_sentence_ui(IDS_SITE_SETTINGS_TYPE_WEBGL);
diff --git a/components/content_settings/core/common/bromite_content_settings/WEBGL.inc b/components/content_settings/core/common/bromite_content_settings/WEBGL.inc
new file mode 100644
--- /dev/null
+++ b/components/content_settings/core/common/bromite_content_settings/WEBGL.inc
@@ -0,0 +1 @@
static bool Read(
content_settings::mojom::RendererContentSettingRulesDataView data,
RendererContentSettingRules* out);
diff --git a/components/content_settings/core/common/content_settings_types.h b/components/content_settings/core/common/content_settings_types.h
--- a/components/content_settings/core/common/content_settings_types.h
+++ b/components/content_settings/core/common/content_settings_types.h
@@ -280,6 +280,8 @@ enum class ContentSettingsType : int32_t {
// site instead of the mobile one.
REQUEST_DESKTOP_SITE,
+ WEBGL,
+
// Setting to indicate whether browser should allow signing into a website via
// the browser FedCM API.
FEDERATED_IDENTITY_API,
diff --git a/components/content_settings/renderer/content_settings_agent_impl.cc b/components/content_settings/renderer/content_settings_agent_impl.cc
--- a/components/content_settings/renderer/content_settings_agent_impl.cc
+++ b/components/content_settings/renderer/content_settings_agent_impl.cc
@@ -449,6 +449,15 @@ void ContentSettingsAgentImpl::ClearBlockedContentSettings() {
cached_script_permissions_.clear();
}
+bool ContentSettingsAgentImpl::AllowWebgl(bool enabled_per_settings) {
+ if (!content_setting_rules_)
+ return false;
+ blink::WebLocalFrame* frame = render_frame()->GetWebFrame();
+ return CONTENT_SETTING_ALLOW == GetContentSettingFromRules(
+ content_setting_rules_->webgl_rules,
+ url::Origin(frame->GetDocument().GetSecurityOrigin()).GetURL());
+}
+
bool ContentSettingsAgentImpl::IsAllowlistedForContentSettings() const {
if (should_allowlist_)
return true;
diff --git a/components/content_settings/renderer/content_settings_agent_impl.h b/components/content_settings/renderer/content_settings_agent_impl.h
--- a/components/content_settings/renderer/content_settings_agent_impl.h
+++ b/components/content_settings/renderer/content_settings_agent_impl.h
@@ -99,6 +99,7 @@ class ContentSettingsAgentImpl
bool AllowAutoplay(bool default_value) override;
bool AllowPopupsAndRedirects(bool default_value) override;
bool ShouldAutoupgradeMixedContent() override;
+ bool AllowWebgl(bool enabled_per_settings) override;
bool allow_running_insecure_content() const {
return allow_running_insecure_content_;
diff --git a/third_party/blink/public/platform/web_content_settings_client.h b/third_party/blink/public/platform/web_content_settings_client.h
--- a/third_party/blink/public/platform/web_content_settings_client.h
+++ b/third_party/blink/public/platform/web_content_settings_client.h
@@ -99,6 +99,8 @@ class WebContentSettingsClient {
return default_value;
}
+ virtual bool AllowWebgl(bool default_value) { return default_value; }
+
// Reports that passive mixed content was found at the provided URL.
virtual void PassiveInsecureContentFound(const WebURL&) {}
diff --git a/third_party/blink/renderer/core/execution_context/execution_context.cc b/third_party/blink/renderer/core/execution_context/execution_context.cc
--- a/third_party/blink/renderer/core/execution_context/execution_context.cc
+++ b/third_party/blink/renderer/core/execution_context/execution_context.cc
@@ -84,6 +84,13 @@ blink::WebContentSettingsClient* GetContentSettingsClientFor(
return settings;
}
@@ -65,6 +65,29 @@
namespace blink {
+blink::WebContentSettingsClient* GetContentSettingsClientFor(
+ ExecutionContext* context) {
+ blink::WebContentSettingsClient* settings = nullptr;
+ if (!context)
+ return settings;
+ if (auto* window = blink::DynamicTo<blink::LocalDOMWindow>(context)) {
+ auto* frame = window->GetFrame();
+ if (frame)
+ settings = frame->GetContentSettingsClient();
+ } else if (context->IsWorkerGlobalScope()) {
+ settings =
+ blink::To<blink::WorkerGlobalScope>(context)->ContentSettingsClient();
+ }
+ return settings;
+}
+
+bool AllowWebgl(ExecutionContext* context) {
+ blink::WebContentSettingsClient* settings = GetContentSettingsClientFor(context);
+ if (settings)
+ return settings->AllowContentSetting(ContentSettingsType::WEBGL, false);
+ return settings->AllowWebgl(false);
+ return false;
+}
+
ExecutionContext::ExecutionContext(v8::Isolate* isolate,
Agent* agent,
bool is_window)
ExecutionContext::ExecutionContext(v8::Isolate* isolate, Agent* agent)
: isolate_(isolate),
security_context_(this),
diff --git a/third_party/blink/renderer/core/execution_context/execution_context.h b/third_party/blink/renderer/core/execution_context/execution_context.h
--- a/third_party/blink/renderer/core/execution_context/execution_context.h
+++ b/third_party/blink/renderer/core/execution_context/execution_context.h
@@ -115,6 +115,8 @@ enum ReasonForCallingCanExecuteScripts {
@@ -97,6 +97,7 @@ class SecurityOrigin;
class ScriptState;
class ScriptWrappable;
class TrustedTypePolicyFactory;
+class WebContentSettingsClient;
enum ReasonForCallingCanExecuteScripts {
kAboutToExecuteScript,
@@ -105,6 +106,10 @@ enum ReasonForCallingCanExecuteScripts {
enum ReferrerPolicySource { kPolicySourceHttpHeader, kPolicySourceMetaTag };
+CORE_EXPORT bool AllowWebgl(ExecutionContext* context);
+CORE_EXPORT WebContentSettingsClient* GetContentSettingsClientFor(
+ ExecutionContext* context);
+
// An environment in which script can execute. This class exposes the common
// properties of script execution environments on the web (i.e, common between
@@ -218,7 +436,7 @@ diff --git a/third_party/blink/renderer/core/execution_context/execution_context
diff --git a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc
--- a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc
+++ b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc
@@ -311,6 +311,13 @@ void WebGLRenderingContextBase::InitializeWebGLContextLimits(
@@ -243,6 +243,13 @@ void WebGLRenderingContextBase::InitializeWebGLContextLimits(
}
}
@@ -230,9 +448,9 @@ diff --git a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_ba
+}
+
unsigned WebGLRenderingContextBase::CurrentMaxGLContexts() {
base::AutoLock locker(WebGLContextLimitLock());
MutexLocker locker(WebGLContextLimitMutex());
DCHECK(webgl_context_limits_initialized_);
@@ -584,25 +591,6 @@ static String ExtractWebGLContextCreationError(
@@ -489,25 +496,6 @@ static String ExtractWebGLContextCreationError(
const Platform::GraphicsInfo& info) {
StringBuilder builder;
builder.Append("Could not create a WebGL context");
@@ -258,7 +476,7 @@ diff --git a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_ba
FormatWebGLStatusString("ErrorMessage", info.error_message.Utf8().c_str(),
builder);
builder.Append('.');
@@ -662,6 +650,12 @@ WebGLRenderingContextBase::CreateWebGraphicsContext3DProvider(
@@ -575,6 +563,12 @@ WebGLRenderingContextBase::CreateWebGraphicsContext3DProvider(
const CanvasContextCreationAttributesCore& attributes,
Platform::ContextType context_type,
Platform::GraphicsInfo* graphics_info) {
@@ -274,13 +492,14 @@ diff --git a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_ba
diff --git a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.h b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.h
--- a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.h
+++ b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.h
@@ -1960,6 +1960,8 @@ class MODULES_EXPORT WebGLRenderingContextBase : public CanvasRenderingContext,
@@ -1772,6 +1772,8 @@ class MODULES_EXPORT WebGLRenderingContextBase : public CanvasRenderingContext,
DOMArrayBufferView* pixels,
int64_t offset);
+ static bool AllowWebglForHost(blink::CanvasRenderingContextHost* host);
+
void RecordANGLEImplementation();
private:
// Record Canvas/OffscreenCanvas.RenderingContextDrawnTo at the first draw
// call.
void RecordUKMCanvasDrawnToAtFirstDrawCall();
--
2.25.1
+264 -135
View File
@@ -7,24 +7,58 @@ Requires patch: Content-settings-infrastructure.patch
Original License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
.../impl/BromiteWebRTCContentSetting.java | 94 +++++++++++++++++++
.../bromite_content_settings/webrtc.grdp | 27 ++++++
.../bromite_content_settings/webrtc.inc | 22 +++++
.../bromite_content_settings/WEBRTC.inc | 1 +
.../peer_connection_dependency_factory.cc | 6 ++
.../peerconnection/rtc_rtp_receiver.cc | 10 ++
.../modules/peerconnection/rtc_rtp_sender.cc | 10 ++
7 files changed, 170 insertions(+)
create mode 100644 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromiteWebRTCContentSetting.java
create mode 100644 components/browser_ui/strings/bromite_content_settings/webrtc.grdp
create mode 100644 components/content_settings/core/browser/bromite_content_settings/webrtc.inc
create mode 100644 components/content_settings/core/common/bromite_content_settings/WEBRTC.inc
.../browser_ui/site_settings/android/BUILD.gn | 3 +
.../BromiteCustomContentSettingImpl.java | 1 +
.../BromiteWebRTCContentSetting.java | 86 +++++++++++++++++++
.../site_settings/SiteSettingsCategory.java | 5 +-
.../strings/android/browser_ui_strings.grd | 1 +
.../browser_ui/strings/android/webrtc.grdp | 18 ++++
components/components_strings.grd | 1 +
.../core/browser/content_settings_registry.cc | 14 +++
.../core/browser/content_settings_utils.cc | 2 +
.../core/common/content_settings.cc | 4 +-
.../core/common/content_settings.h | 1 +
.../core/common/content_settings.mojom | 1 +
.../common/content_settings_mojom_traits.cc | 3 +-
.../common/content_settings_mojom_traits.h | 5 ++
.../core/common/content_settings_types.h | 2 +
.../renderer/content_settings_agent_impl.cc | 9 ++
.../renderer/content_settings_agent_impl.h | 1 +
.../platform/web_content_settings_client.h | 2 +
.../peer_connection_dependency_factory.cc | 5 ++
19 files changed, 160 insertions(+), 4 deletions(-)
create mode 100644 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteWebRTCContentSetting.java
create mode 100644 components/browser_ui/strings/android/webrtc.grdp
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromiteWebRTCContentSetting.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromiteWebRTCContentSetting.java
diff --git a/components/browser_ui/site_settings/android/BUILD.gn b/components/browser_ui/site_settings/android/BUILD.gn
--- a/components/browser_ui/site_settings/android/BUILD.gn
+++ b/components/browser_ui/site_settings/android/BUILD.gn
@@ -75,6 +75,9 @@ android_library("java") {
sources += [
"java/src/org/chromium/components/browser_ui/site_settings/BromiteWebGLContentSetting.java",
]
+ sources += [
+ "java/src/org/chromium/components/browser_ui/site_settings/BromiteWebRTCContentSetting.java",
+ ]
annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ]
resources_package = "org.chromium.components.browser_ui.site_settings"
deps = [
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSettingImpl.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSettingImpl.java
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSettingImpl.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSettingImpl.java
@@ -44,6 +44,7 @@ public abstract class BromiteCustomContentSettingImpl {
static {
mItemList = new ArrayList<BromiteCustomContentSetting>();
mItemList.add(new BromiteWebGLContentSetting());
+ mItemList.add(new BromiteWebRTCContentSetting());
}
public static SiteSettingsCategory createFromType(
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteWebRTCContentSetting.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteWebRTCContentSetting.java
new file mode 100644
--- /dev/null
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromiteWebRTCContentSetting.java
@@ -0,0 +1,94 @@
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteWebRTCContentSetting.java
@@ -0,0 +1,86 @@
+/*
+ This file is part of Bromite.
+
@@ -42,11 +76,8 @@ new file mode 100644
+ along with Bromite. If not, see <https://www.gnu.org/licenses/>.
+*/
+
+package org.chromium.components.browser_ui.site_settings.impl;
+package org.chromium.components.browser_ui.site_settings;
+
+import org.chromium.components.browser_ui.site_settings.R;
+
+import org.chromium.components.browser_ui.site_settings.BromiteCustomContentSetting;
+import org.chromium.components.browser_ui.site_settings.ContentSettingsResources;
+import org.chromium.components.browser_ui.site_settings.SiteSettingsCategory;
+import org.chromium.components.content_settings.ContentSettingValues;
@@ -62,6 +93,7 @@ new file mode 100644
+public class BromiteWebRTCContentSetting extends BromiteCustomContentSetting {
+ public BromiteWebRTCContentSetting() {
+ super(/*contentSettingsType*/ ContentSettingsType.WEBRTC,
+ /*siteSettingsCategory*/ SiteSettingsCategory.Type.WEBRTC,
+ /*defaultEnabledValue*/ ContentSettingValues.ALLOW,
+ /*defaultDisabledValue*/ ContentSettingValues.BLOCK,
+ /*allowException*/ true,
@@ -77,8 +109,7 @@ new file mode 100644
+ /*defaultEnabledValue*/ getDefaultEnabledValue(),
+ /*defaultDisabledValue*/ getDefaultDisabledValue(),
+ /*enabledSummary*/ R.string.website_settings_category_webrtc_enabled,
+ /*disabledSummary*/ R.string.website_settings_category_webrtc_disabled,
+ /*summaryOverrideForScreenReader*/ 0);
+ /*disabledSummary*/ R.string.website_settings_category_webrtc_disabled);
+ }
+
+ @Override
@@ -95,11 +126,6 @@ new file mode 100644
+ }
+
+ @Override
+ public int getCategoryDescription() {
+ return R.string.settings_site_settings_webrtc_description;
+ }
+
+ @Override
+ public boolean requiresTriStateContentSetting() {
+ return false;
+ }
@@ -119,146 +145,249 @@ new file mode 100644
+ return value != ContentSettingValues.BLOCK;
+ }
+}
diff --git a/components/browser_ui/strings/bromite_content_settings/webrtc.grdp b/components/browser_ui/strings/bromite_content_settings/webrtc.grdp
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java
@@ -44,7 +44,7 @@ public class SiteSettingsCategory {
Type.PROTECTED_MEDIA, Type.SENSORS, Type.SOUND, Type.USB, Type.VIRTUAL_REALITY,
Type.USE_STORAGE, Type.AUTO_DARK_WEB_CONTENT, Type.REQUEST_DESKTOP_SITE,
Type.FEDERATED_IDENTITY_API, Type.TIMEZONE_OVERRIDE, Type.AUTOPLAY, Type.JAVASCRIPT_JIT,
- Type.IMAGES, Type.WEBGL})
+ Type.IMAGES, Type.WEBGL, Type.WEBRTC})
@Retention(RetentionPolicy.SOURCE)
public @interface Type {
// All updates here must also be reflected in {@link #preferenceKey(int)
@@ -80,10 +80,11 @@ public class SiteSettingsCategory {
int JAVASCRIPT_JIT = 28;
int IMAGES = 29;
int WEBGL = 30;
+ int WEBRTC = 31;
/**
* Number of handled categories used for calculating array sizes.
*/
- int NUM_ENTRIES = 31;
+ int NUM_ENTRIES = 32;
}
private final BrowserContextHandle mBrowserContextHandle;
diff --git a/components/browser_ui/strings/android/browser_ui_strings.grd b/components/browser_ui/strings/android/browser_ui_strings.grd
--- a/components/browser_ui/strings/android/browser_ui_strings.grd
+++ b/components/browser_ui/strings/android/browser_ui_strings.grd
@@ -175,6 +175,7 @@
<messages fallback_to_english="true">
<part file="site_settings.grdp" />
<part file="webgl.grdp" />
+ <part file="webrtc.grdp" />
<message name="IDS_GOT_IT" desc="Button for the user to accept a disclosure/message">
Got it
diff --git a/components/browser_ui/strings/android/webrtc.grdp b/components/browser_ui/strings/android/webrtc.grdp
new file mode 100644
--- /dev/null
+++ b/components/browser_ui/strings/bromite_content_settings/webrtc.grdp
@@ -0,0 +1,27 @@
+++ b/components/browser_ui/strings/android/webrtc.grdp
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<grit-part>
+ <message name="IDS_SITE_SETTINGS_TYPE_WEBRTC" desc="The label used for webrtc site settings controls." formatter_data="android_java">
+ <message name="IDS_SITE_SETTINGS_TYPE_WEBRTC" desc="The label used for webrtc site settings controls.">
+ WebRTC
+ </message>
+ <message name="IDS_SITE_SETTINGS_TYPE_WEBRTC_MID_SENTENCE" desc="The label used for webrtc site settings controls when used mid-sentence." formatter_data="android_java">
+ <message name="IDS_SITE_SETTINGS_TYPE_WEBRTC_MID_SENTENCE" desc="The label used for webrtc site settings controls when used mid-sentence.">
+ webRTC
+ </message>
+ <message name="IDS_SETTINGS_SITE_SETTINGS_WEBRTC_DESCRIPTION" desc="Description of the WebRTC content setting." formatter_data="android_java">
+ Enable WebRTC, a JavaScript API for real-time communication and direct peer-to-peer communication
+ </message>
+ <message name="IDS_WEBRTC_PERMISSION_TITLE" desc="Title of the permission to use webrtc [CHAR-LIMIT=32]" formatter_data="android_java">
+ <message name="IDS_WEBRTC_PERMISSION_TITLE" desc="Title of the permission to use webrtc [CHAR-LIMIT=32]">
+ WebRTC
+ </message>
+ <message name="IDS_WEBSITE_SETTINGS_CATEGORY_WEBRTC_ENABLED" desc="Summary text explaining that webrtc is full enabled." formatter_data="android_java">
+ <message name="IDS_WEBSITE_SETTINGS_CATEGORY_WEBRTC_ENABLED" desc="Summary text explaining that webrtc is full enabled.">
+ Enabled
+ </message>
+ <message name="IDS_WEBSITE_SETTINGS_CATEGORY_WEBRTC_DISABLED" desc="Summary text explaining that webrtc is full disabled." formatter_data="android_java">
+ <message name="IDS_WEBSITE_SETTINGS_CATEGORY_WEBRTC_DISABLED" desc="Summary text explaining that webrtc is full disabled.">
+ Disabled
+ </message>
+ <message name="IDS_SETTINGS_SITE_SETTINGS_WEBRTC_ALLOWED_EXCEPTIONS" desc="Label for the allowed exceptions site list of the WebRTC setting.">
+ Allowed to use WebRTC
+ </message>
+ <message name="IDS_SETTINGS_SITE_SETTINGS_WEBRTC_BLOCKED_EXCEPTIONS" desc="Label for the blocked exceptions site list of the WebRTC setting.">
+ Not allowed to use WebRTC
+ </message>
+</grit-part>
diff --git a/components/content_settings/core/browser/bromite_content_settings/webrtc.inc b/components/content_settings/core/browser/bromite_content_settings/webrtc.inc
new file mode 100644
--- /dev/null
+++ b/components/content_settings/core/browser/bromite_content_settings/webrtc.inc
@@ -0,0 +1,22 @@
diff --git a/components/components_strings.grd b/components/components_strings.grd
--- a/components/components_strings.grd
+++ b/components/components_strings.grd
@@ -338,6 +338,7 @@
<part file="webapps_strings.grdp" />
<part file="user_scripts/strings/userscripts_strings.grdp" />
<part file="browser_ui/strings/android/webgl.grdp" />
+ <part file="browser_ui/strings/android/webrtc.grdp" />
<if expr="not is_ios">
<part file="management_strings.grdp" />
diff --git a/components/content_settings/core/browser/content_settings_registry.cc b/components/content_settings/core/browser/content_settings_registry.cc
--- a/components/content_settings/core/browser/content_settings_registry.cc
+++ b/components/content_settings/core/browser/content_settings_registry.cc
@@ -693,6 +693,20 @@ void ContentSettingsRegistry::Init() {
/*show_into_info_page*/ true,
/*permission_type_ui*/ IDS_SITE_SETTINGS_TYPE_WEBGL,
/*permission_type_ui_mid_sentence*/ IDS_SITE_SETTINGS_TYPE_WEBGL_MID_SENTENCE);
+
+ Register(ContentSettingsType::WEBRTC, "webrtc", CONTENT_SETTING_BLOCK,
+ WebsiteSettingsInfo::SYNCABLE,
+ /*allowlisted_schemes=*/{},
+ /*valid_settings=*/{CONTENT_SETTING_ALLOW,
+ CONTENT_SETTING_BLOCK},
+ WebsiteSettingsInfo::TOP_ORIGIN_ONLY_SCOPE,
+ WebsiteSettingsRegistry::ALL_PLATFORMS,
+ AllowlistedSchemes(),
+ ValidSettings(CONTENT_SETTING_ALLOW,
+ CONTENT_SETTING_BLOCK),
+ WebsiteSettingsInfo::SINGLE_ORIGIN_WITH_EMBEDDED_EXCEPTIONS_SCOPE,
+ WebsiteSettingsRegistry::PLATFORM_ANDROID,
+ ContentSettingsInfo::INHERIT_IN_INCOGNITO,
+ ContentSettingsInfo::EXCEPTIONS_ON_SECURE_AND_INSECURE_ORIGINS);
+ ContentSettingsInfo::PERSISTENT,
+ ContentSettingsInfo::EXCEPTIONS_ON_SECURE_AND_INSECURE_ORIGINS,
+ /*show_into_info_page*/ true,
+ /*permission_type_ui*/ IDS_SITE_SETTINGS_TYPE_WEBRTC,
+ /*permission_type_ui_mid_sentence*/ IDS_SITE_SETTINGS_TYPE_WEBRTC_MID_SENTENCE);
}
void ContentSettingsRegistry::Register(
diff --git a/components/content_settings/core/browser/content_settings_utils.cc b/components/content_settings/core/browser/content_settings_utils.cc
--- a/components/content_settings/core/browser/content_settings_utils.cc
+++ b/components/content_settings/core/browser/content_settings_utils.cc
@@ -157,6 +157,8 @@ void GetRendererContentSettingRules(const HostContentSettingsMap* map,
rules->timezone_override_value = timezone;
map->GetSettingsForOneType(ContentSettingsType::WEBGL,
&(rules->webgl_rules));
+ map->GetSettingsForOneType(ContentSettingsType::WEBRTC,
+ &(rules->webrtc_rules));
}
bool IsMorePermissive(ContentSetting a, ContentSetting b) {
diff --git a/components/content_settings/core/common/content_settings.cc b/components/content_settings/core/common/content_settings.cc
--- a/components/content_settings/core/common/content_settings.cc
+++ b/components/content_settings/core/common/content_settings.cc
@@ -206,7 +206,8 @@ bool RendererContentSettingRules::IsRendererContentSetting(
content_type == ContentSettingsType::MIXEDSCRIPT ||
content_type == ContentSettingsType::AUTO_DARK_WEB_CONTENT ||
content_type == ContentSettingsType::TIMEZONE_OVERRIDE ||
- content_type == ContentSettingsType::WEBGL;
+ content_type == ContentSettingsType::WEBGL ||
+ content_type == ContentSettingsType::WEBRTC;
}
void RendererContentSettingRules::FilterRulesByOutermostMainFrameURL(
@@ -219,6 +220,7 @@ void RendererContentSettingRules::FilterRulesByOutermostMainFrameURL(
FilterRulesForType(timezone_override_rules, outermost_main_frame_url);
FilterRulesForType(autoplay_rules, outermost_main_frame_url);
FilterRulesForType(webgl_rules, outermost_main_frame_url);
+ FilterRulesForType(webrtc_rules, outermost_main_frame_url);
}
RendererContentSettingRules::RendererContentSettingRules() = default;
diff --git a/components/content_settings/core/common/content_settings.h b/components/content_settings/core/common/content_settings.h
--- a/components/content_settings/core/common/content_settings.h
+++ b/components/content_settings/core/common/content_settings.h
@@ -98,6 +98,7 @@ struct RendererContentSettingRules {
ContentSettingsForOneType timezone_override_rules;
std::string timezone_override_value;
ContentSettingsForOneType webgl_rules;
+ ContentSettingsForOneType webrtc_rules;
};
namespace content_settings {
diff --git a/components/content_settings/core/common/content_settings.mojom b/components/content_settings/core/common/content_settings.mojom
--- a/components/content_settings/core/common/content_settings.mojom
+++ b/components/content_settings/core/common/content_settings.mojom
@@ -82,4 +82,5 @@ struct RendererContentSettingRules {
array<ContentSettingPatternSource> timezone_override_rules;
string timezone_override_value;
array<ContentSettingPatternSource> webgl_rules;
+ array<ContentSettingPatternSource> webrtc_rules;
};
diff --git a/components/content_settings/core/common/content_settings_mojom_traits.cc b/components/content_settings/core/common/content_settings_mojom_traits.cc
--- a/components/content_settings/core/common/content_settings_mojom_traits.cc
+++ b/components/content_settings/core/common/content_settings_mojom_traits.cc
@@ -105,7 +105,8 @@ bool StructTraits<content_settings::mojom::RendererContentSettingRulesDataView,
data.ReadAutoDarkContentRules(&out->auto_dark_content_rules) &&
data.ReadTimezoneOverrideRules(&out->timezone_override_rules) &&
data.ReadTimezoneOverrideValue(&out->timezone_override_value) &&
- data.ReadWebglRules(&out->webgl_rules);
+ data.ReadWebglRules(&out->webgl_rules) &&
+ data.ReadWebrtcRules(&out->webrtc_rules);
}
} // namespace mojo
diff --git a/components/content_settings/core/common/content_settings_mojom_traits.h b/components/content_settings/core/common/content_settings_mojom_traits.h
--- a/components/content_settings/core/common/content_settings_mojom_traits.h
+++ b/components/content_settings/core/common/content_settings_mojom_traits.h
@@ -170,6 +170,11 @@ struct StructTraits<
return r.webgl_rules;
}
+ static const std::vector<ContentSettingPatternSource>& webrtc_rules(
+ const RendererContentSettingRules& r) {
+ return r.webrtc_rules;
+ }
+
+ content_settings::WebsiteSettingsRegistry::GetInstance()
+ ->GetMutable(ContentSettingsType::WEBRTC)
+ ->set_show_into_info_page()
+ .set_desktop_ui()
+ .set_is_renderer_content_setting()
+ .set_title_ui(IDS_SITE_SETTINGS_TYPE_WEBRTC)
+ .set_description_ui(IDS_SETTINGS_SITE_SETTINGS_WEBRTC_DESCRIPTION)
+ .set_allowed_ui(IDS_WEBSITE_SETTINGS_CATEGORY_WEBRTC_ENABLED)
+ .set_blocked_ui(IDS_WEBSITE_SETTINGS_CATEGORY_WEBRTC_DISABLED)
+ .set_allowed_exceptions_ui(IDS_SETTINGS_SITE_SETTINGS_WEBRTC_ALLOWED_EXCEPTIONS)
+ .set_blocked_exceptions_ui(IDS_SETTINGS_SITE_SETTINGS_WEBRTC_BLOCKED_EXCEPTIONS)
+ .set_mid_sentence_ui(IDS_SITE_SETTINGS_TYPE_WEBRTC_MID_SENTENCE);
diff --git a/components/content_settings/core/common/bromite_content_settings/WEBRTC.inc b/components/content_settings/core/common/bromite_content_settings/WEBRTC.inc
new file mode 100644
--- /dev/null
+++ b/components/content_settings/core/common/bromite_content_settings/WEBRTC.inc
@@ -0,0 +1 @@
static bool Read(
content_settings::mojom::RendererContentSettingRulesDataView data,
RendererContentSettingRules* out);
diff --git a/components/content_settings/core/common/content_settings_types.h b/components/content_settings/core/common/content_settings_types.h
--- a/components/content_settings/core/common/content_settings_types.h
+++ b/components/content_settings/core/common/content_settings_types.h
@@ -282,6 +282,8 @@ enum class ContentSettingsType : int32_t {
WEBGL,
+ WEBRTC,
+
// Setting to indicate whether browser should allow signing into a website via
// the browser FedCM API.
FEDERATED_IDENTITY_API,
diff --git a/components/content_settings/renderer/content_settings_agent_impl.cc b/components/content_settings/renderer/content_settings_agent_impl.cc
--- a/components/content_settings/renderer/content_settings_agent_impl.cc
+++ b/components/content_settings/renderer/content_settings_agent_impl.cc
@@ -458,6 +458,15 @@ bool ContentSettingsAgentImpl::AllowWebgl(bool enabled_per_settings) {
url::Origin(frame->GetDocument().GetSecurityOrigin()).GetURL());
}
+bool ContentSettingsAgentImpl::AllowWebRTC(bool enabled_per_settings) {
+ if (!content_setting_rules_)
+ return false;
+ blink::WebLocalFrame* frame = render_frame()->GetWebFrame();
+ return CONTENT_SETTING_ALLOW == GetContentSettingFromRules(
+ content_setting_rules_->webrtc_rules,
+ url::Origin(frame->GetDocument().GetSecurityOrigin()).GetURL());
+}
+
bool ContentSettingsAgentImpl::IsAllowlistedForContentSettings() const {
if (should_allowlist_)
return true;
diff --git a/components/content_settings/renderer/content_settings_agent_impl.h b/components/content_settings/renderer/content_settings_agent_impl.h
--- a/components/content_settings/renderer/content_settings_agent_impl.h
+++ b/components/content_settings/renderer/content_settings_agent_impl.h
@@ -100,6 +100,7 @@ class ContentSettingsAgentImpl
bool AllowPopupsAndRedirects(bool default_value) override;
bool ShouldAutoupgradeMixedContent() override;
bool AllowWebgl(bool enabled_per_settings) override;
+ bool AllowWebRTC(bool enabled_per_settings) override;
bool allow_running_insecure_content() const {
return allow_running_insecure_content_;
diff --git a/third_party/blink/public/platform/web_content_settings_client.h b/third_party/blink/public/platform/web_content_settings_client.h
--- a/third_party/blink/public/platform/web_content_settings_client.h
+++ b/third_party/blink/public/platform/web_content_settings_client.h
@@ -101,6 +101,8 @@ class WebContentSettingsClient {
virtual bool AllowWebgl(bool default_value) { return default_value; }
+ virtual bool AllowWebRTC(bool default_value) { return default_value; }
+
// Reports that passive mixed content was found at the provided URL.
virtual void PassiveInsecureContentFound(const WebURL&) {}
diff --git a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc
--- a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc
+++ b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc
@@ -41,6 +41,7 @@
#include "third_party/blink/public/platform/modules/webrtc/webrtc_logging.h"
#include "third_party/blink/public/platform/platform.h"
#include "third_party/blink/public/platform/task_type.h"
+#include "third_party/blink/public/platform/web_content_settings_client.h"
#include "third_party/blink/public/platform/web_url.h"
#include "third_party/blink/public/web/modules/mediastream/media_stream_video_source.h"
#include "third_party/blink/public/web/web_document.h"
@@ -847,6 +848,11 @@ PeerConnectionDependencyFactory::CreatePortAllocator(
@@ -762,6 +762,11 @@ PeerConnectionDependencyFactory::CreatePortAllocator(
// origin.
WebRTCIPHandlingPolicy policy =
GetWebRTCIPHandlingPolicy(webrtc_ip_handling_policy);
+ blink::WebContentSettingsClient* settings = web_frame->GetContentSettingsClient();
+ if (settings && settings->AllowContentSetting(ContentSettingsType::WEBRTC, false)) {
+ if (settings && settings->AllowWebRTC(false)) {
+ policy = kDefault;
+ }
+
switch (policy) {
// TODO(guoweis): specify the flag of disabling local candidate
// collection when webrtc is updated.
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc
--- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc
@@ -12,6 +12,8 @@
#include "third_party/blink/public/common/privacy_budget/identifiable_surface.h"
#include "third_party/blink/public/common/privacy_budget/identifiable_token_builder.h"
#include "third_party/blink/public/platform/modules/webrtc/webrtc_logging.h"
+#include "third_party/blink/public/platform/web_content_settings_client.h"
+#include "third_party/blink/public/web/web_local_frame.h"
#include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_rtc_insertable_streams.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_rtc_rtcp_parameters.h"
@@ -287,6 +289,14 @@ RTCRtpCapabilities* RTCRtpReceiver::getCapabilities(ScriptState* state,
if (kind != "audio" && kind != "video")
return nullptr;
+ LocalDOMWindow* window = To<LocalDOMWindow>(ExecutionContext::From(state));
+ auto* web_frame =
+ static_cast<WebLocalFrame*>(WebFrame::FromCoreFrame(window->GetFrame()));
+ blink::WebContentSettingsClient* settings = web_frame->GetContentSettingsClient();
+ if (settings && !settings->AllowContentSetting(ContentSettingsType::WEBRTC, false)) {
+ return nullptr;
+ }
+
RTCRtpCapabilities* capabilities = RTCRtpCapabilities::Create();
capabilities->setCodecs(HeapVector<Member<RTCRtpCodecCapability>>());
capabilities->setHeaderExtensions(
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc
--- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc
@@ -17,6 +17,8 @@
#include "third_party/blink/public/common/privacy_budget/identifiable_surface.h"
#include "third_party/blink/public/common/privacy_budget/identifiable_token_builder.h"
#include "third_party/blink/public/platform/modules/webrtc/webrtc_logging.h"
+#include "third_party/blink/public/platform/web_content_settings_client.h"
+#include "third_party/blink/public/web/web_local_frame.h"
#include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_rtc_encoding_options.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_rtc_insertable_streams.h"
@@ -1062,6 +1064,14 @@ RTCRtpCapabilities* RTCRtpSender::getCapabilities(ScriptState* state,
if (kind != "audio" && kind != "video")
return nullptr;
+ LocalDOMWindow* window = To<LocalDOMWindow>(ExecutionContext::From(state));
+ auto* web_frame =
+ static_cast<WebLocalFrame*>(WebFrame::FromCoreFrame(window->GetFrame()));
+ blink::WebContentSettingsClient* settings = web_frame->GetContentSettingsClient();
+ if (settings && !settings->AllowContentSetting(ContentSettingsType::WEBRTC, false)) {
+ return nullptr;
+ }
+
RTCRtpCapabilities* capabilities = RTCRtpCapabilities::Create();
capabilities->setCodecs(HeapVector<Member<RTCRtpCodecCapability>>());
capabilities->setHeaderExtensions(
--
2.25.1
@@ -1,29 +0,0 @@
From: uazo <uazo@users.noreply.github.com>
Date: Mon, 7 Aug 2023 11:02:18 +0000
Subject: Allow DocumentPiP if PopupsAndRedirects are active
Allow documentPiP api use only with content setting popup allowed
License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
---
.../picture_in_picture_controller_impl.cc | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/third_party/blink/renderer/modules/document_picture_in_picture/picture_in_picture_controller_impl.cc b/third_party/blink/renderer/modules/document_picture_in_picture/picture_in_picture_controller_impl.cc
--- a/third_party/blink/renderer/modules/document_picture_in_picture/picture_in_picture_controller_impl.cc
+++ b/third_party/blink/renderer/modules/document_picture_in_picture/picture_in_picture_controller_impl.cc
@@ -368,6 +368,13 @@ void PictureInPictureControllerImpl::CreateDocumentPictureInPictureWindow(
return;
}
+ if (!opener.GetFrame()->GetContentSettings()->allow_popup) {
+ exception_state.ThrowDOMException(DOMExceptionCode::kNotAllowedError,
+ "Document PiP requires user popup permission");
+ resolver->Reject(exception_state);
+ return;
+ }
+
WebPictureInPictureWindowOptions web_options;
web_options.width = options->width();
web_options.height = options->height();
--
@@ -4,101 +4,74 @@ Subject: Allow building without enable_reporting
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
chrome/browser/net/chrome_report_sender.cc | 1 +
.../browser/devtools/protocol/network_handler.cc | 2 ++
.../cross_origin_embedder_policy_reporter.cc | 7 +++++--
.../cross_origin_opener_policy_reporter.cc | 16 +++++++---------
.../browser/network/reporting_service_proxy.cc | 3 +++
.../net/cross_origin_embedder_policy_reporter.cc | 4 +++-
.../net/cross_origin_opener_policy_reporter.cc | 16 +++++++---------
content/browser/net/reporting_service_proxy.cc | 3 +++
.../renderer_host/render_frame_host_impl.cc | 6 ------
.../web_package/signed_exchange_reporter.cc | 2 ++
...content_switch_dependent_feature_overrides.cc | 1 +
.../Allow-building-without-enable_reporting.inc | 2 ++
net/base/features.cc | 1 +
net/reporting/reporting_service.cc | 6 ++++++
services/network/network_context.h | 4 ++--
services/network/public/mojom/BUILD.gn | 1 -
.../network/public/mojom/network_context.mojom | 2 ++
.../core/frame/csp/content_security_policy.cc | 3 +++
.../blink/renderer/core/frame/local_frame.cc | 3 +++
.../blink/renderer/core/frame/local_frame.h | 4 +++-
.../blink/renderer/core/frame/local_frame.h | 6 +++---
.../renderer/core/frame/reporting_context.cc | 9 +++++++++
.../renderer/core/frame/reporting_context.h | 7 +++++--
.../renderer/core/frame/reporting_observer.cc | 3 +--
20 files changed, 58 insertions(+), 25 deletions(-)
create mode 100644 cromite_flags/services/network/public/cpp/features_cc/Allow-building-without-enable_reporting.inc
15 files changed, 48 insertions(+), 24 deletions(-)
diff --git a/chrome/browser/net/chrome_report_sender.cc b/chrome/browser/net/chrome_report_sender.cc
--- a/chrome/browser/net/chrome_report_sender.cc
+++ b/chrome/browser/net/chrome_report_sender.cc
@@ -85,6 +85,7 @@ void SendReport(
const std::string& report,
base::OnceClosure success_callback,
ErrorCallback error_callback) {
+ if ((true)) return;
auto resource_request = std::make_unique<network::ResourceRequest>();
resource_request->url = report_uri;
resource_request->method = "POST";
diff --git a/content/browser/devtools/protocol/network_handler.cc b/content/browser/devtools/protocol/network_handler.cc
--- a/content/browser/devtools/protocol/network_handler.cc
+++ b/content/browser/devtools/protocol/network_handler.cc
@@ -1400,6 +1400,7 @@ String BuildReportStatus(const net::ReportingReport::Status status) {
@@ -1289,6 +1289,7 @@ String BuildReportStatus(const net::ReportingReport::Status status) {
}
}
+#if BUILDFLAG(ENABLE_REPORTING)
std::vector<GURL> ComputeReportingURLs(RenderFrameHostImpl* frame_host) {
std::vector<GURL> urls;
frame_host->ForEachRenderFrameHostWithAction(
@@ -1413,6 +1414,7 @@ std::vector<GURL> ComputeReportingURLs(RenderFrameHostImpl* frame_host) {
});
base::queue<FrameTreeNode*> queue;
@@ -1306,6 +1307,7 @@ std::vector<GURL> ComputeReportingURLs(RenderFrameHostImpl* frame_host) {
}
return urls;
}
+#endif // BUILDFLAG(ENABLE_REPORTING)
} // namespace
diff --git a/content/browser/network/cross_origin_embedder_policy_reporter.cc b/content/browser/network/cross_origin_embedder_policy_reporter.cc
--- a/content/browser/network/cross_origin_embedder_policy_reporter.cc
+++ b/content/browser/network/cross_origin_embedder_policy_reporter.cc
diff --git a/content/browser/net/cross_origin_embedder_policy_reporter.cc b/content/browser/net/cross_origin_embedder_policy_reporter.cc
--- a/content/browser/net/cross_origin_embedder_policy_reporter.cc
+++ b/content/browser/net/cross_origin_embedder_policy_reporter.cc
@@ -4,6 +4,7 @@
#include "content/browser/network/cross_origin_embedder_policy_reporter.h"
#include "content/browser/net/cross_origin_embedder_policy_reporter.h"
+#include "net/base/features.h"
#include "base/strings/string_piece.h"
#include "base/values.h"
#include "content/public/browser/storage_partition.h"
@@ -95,8 +96,6 @@ void CrossOriginEmbedderPolicyReporter::Clone(
void CrossOriginEmbedderPolicyReporter::QueueAndNotify(
std::initializer_list<std::pair<base::StringPiece, base::StringPiece>> body,
bool report_only) {
- const std::optional<std::string>& endpoint =
- report_only ? report_only_endpoint_ : endpoint_;
const char* const disposition = report_only ? "reporting" : "enforce";
if (observer_) {
std::vector<blink::mojom::ReportBodyElementPtr> list;
@@ -111,6 +110,9 @@ void CrossOriginEmbedderPolicyReporter::QueueAndNotify(
observer_->Notify(blink::mojom::Report::New(
@@ -112,6 +113,7 @@ void CrossOriginEmbedderPolicyReporter::QueueAndNotify(
kType, context_url_, blink::mojom::ReportBody::New(std::move(list))));
}
+#if BUILDFLAG(ENABLE_REPORTING)
+ const absl::optional<std::string>& endpoint =
+ report_only ? report_only_endpoint_ : endpoint_;
if (endpoint) {
+#if BUILDFLAG(ENABLE_REPORTING)
base::Value::Dict body_to_pass;
for (const auto& pair : body) {
@@ -125,6 +127,7 @@ void CrossOriginEmbedderPolicyReporter::QueueAndNotify(
/*user_agent=*/std::nullopt, std::move(body_to_pass));
}
}
body_to_pass.Set(pair.first, pair.second);
@@ -123,7 +125,7 @@ void CrossOriginEmbedderPolicyReporter::QueueAndNotify(
kType, *endpoint, context_url_, reporting_source_,
network_isolation_key_,
/*user_agent=*/absl::nullopt, std::move(body_to_pass));
- }
+#endif
}
}
} // namespace content
diff --git a/content/browser/network/cross_origin_opener_policy_reporter.cc b/content/browser/network/cross_origin_opener_policy_reporter.cc
--- a/content/browser/network/cross_origin_opener_policy_reporter.cc
+++ b/content/browser/network/cross_origin_opener_policy_reporter.cc
@@ -18,25 +18,17 @@
diff --git a/content/browser/net/cross_origin_opener_policy_reporter.cc b/content/browser/net/cross_origin_opener_policy_reporter.cc
--- a/content/browser/net/cross_origin_opener_policy_reporter.cc
+++ b/content/browser/net/cross_origin_opener_policy_reporter.cc
@@ -17,25 +17,17 @@
#include "services/network/public/mojom/network_context.mojom.h"
#include "services/network/public/mojom/source_location.mojom.h"
#include "url/origin.h"
@@ -125,7 +98,7 @@ diff --git a/content/browser/network/cross_origin_opener_policy_reporter.cc b/co
constexpr char kType[] = "type";
// Report attribute values:
@@ -45,6 +37,7 @@ constexpr char kDispositionReporting[] = "reporting";
@@ -44,6 +36,7 @@ constexpr char kDispositionReporting[] = "reporting";
constexpr char kTypeFromResponse[] = "navigation-from-response";
constexpr char kTypeToResponse[] = "navigation-to-response";
@@ -133,7 +106,7 @@ diff --git a/content/browser/network/cross_origin_opener_policy_reporter.cc b/co
std::string ToString(network::mojom::CrossOriginOpenerPolicyValue coop_value) {
switch (coop_value) {
case network::mojom::CrossOriginOpenerPolicyValue::kUnsafeNone:
@@ -62,6 +55,7 @@ std::string ToString(network::mojom::CrossOriginOpenerPolicyValue coop_value) {
@@ -61,6 +54,7 @@ std::string ToString(network::mojom::CrossOriginOpenerPolicyValue coop_value) {
return "restrict-properties-plus-coep";
}
}
@@ -141,7 +114,7 @@ diff --git a/content/browser/network/cross_origin_opener_policy_reporter.cc b/co
FrameTreeNode* TopLevelOpener(FrameTreeNode* frame) {
FrameTreeNode* opener =
@@ -233,6 +227,7 @@ void CrossOriginOpenerPolicyReporter::QueueAccessReport(
@@ -232,6 +226,7 @@ void CrossOriginOpenerPolicyReporter::QueueAccessReport(
network::mojom::SourceLocationPtr source_location,
const std::string& reported_window_url,
const std::string& initial_popup_url) const {
@@ -149,10 +122,10 @@ diff --git a/content/browser/network/cross_origin_opener_policy_reporter.cc b/co
// Cross-Origin-Opener-Policy-Report-Only is not required to provide
// endpoints.
if (!coop_.report_only_reporting_endpoint)
@@ -280,12 +275,14 @@ void CrossOriginOpenerPolicyReporter::QueueAccessReport(
@@ -279,12 +274,14 @@ void CrossOriginOpenerPolicyReporter::QueueAccessReport(
storage_partition_->GetNetworkContext()->QueueReport(
"coop", endpoint, context_url_, reporting_source_,
network_anonymization_key_, std::nullopt, std::move(body));
"coop", endpoint, context_url_, reporting_source_, network_isolation_key_,
absl::nullopt, std::move(body));
+#endif
}
@@ -164,17 +137,17 @@ diff --git a/content/browser/network/cross_origin_opener_policy_reporter.cc b/co
body.Set(kDisposition,
is_report_only ? kDispositionReporting : kDispositionEnforce);
body.Set(kEffectivePolicy,
@@ -294,6 +291,7 @@ void CrossOriginOpenerPolicyReporter::QueueNavigationReport(
"coop", endpoint, context_url_, reporting_source_,
network_anonymization_key_,
/*user_agent=*/std::nullopt, std::move(body));
@@ -292,6 +289,7 @@ void CrossOriginOpenerPolicyReporter::QueueNavigationReport(
storage_partition_->GetNetworkContext()->QueueReport(
"coop", endpoint, context_url_, reporting_source_, network_isolation_key_,
/*user_agent=*/absl::nullopt, std::move(body));
+#endif
}
} // namespace content
diff --git a/content/browser/network/reporting_service_proxy.cc b/content/browser/network/reporting_service_proxy.cc
--- a/content/browser/network/reporting_service_proxy.cc
+++ b/content/browser/network/reporting_service_proxy.cc
diff --git a/content/browser/net/reporting_service_proxy.cc b/content/browser/net/reporting_service_proxy.cc
--- a/content/browser/net/reporting_service_proxy.cc
+++ b/content/browser/net/reporting_service_proxy.cc
@@ -11,6 +11,7 @@
#include "base/memory/ref_counted.h"
#include "base/unguessable_token.h"
@@ -183,7 +156,7 @@ diff --git a/content/browser/network/reporting_service_proxy.cc b/content/browse
#include "content/browser/service_worker/service_worker_host.h"
#include "content/browser/worker_host/dedicated_worker_host.h"
#include "content/browser/worker_host/shared_worker_host.h"
@@ -175,12 +176,14 @@ class ReportingServiceProxyImpl : public blink::mojom::ReportingServiceProxy {
@@ -174,12 +175,14 @@ class ReportingServiceProxyImpl : public blink::mojom::ReportingServiceProxy {
const std::string& group,
const std::string& type,
base::Value::Dict body) {
@@ -192,8 +165,8 @@ diff --git a/content/browser/network/reporting_service_proxy.cc b/content/browse
if (!rph)
return;
rph->GetStoragePartition()->GetNetworkContext()->QueueReport(
type, group, url, reporting_source_, network_anonymization_key_,
/*user_agent=*/std::nullopt, std::move(body));
type, group, url, reporting_source_, network_isolation_key_,
/*user_agent=*/absl::nullopt, std::move(body));
+#endif
}
@@ -201,7 +174,7 @@ diff --git a/content/browser/network/reporting_service_proxy.cc b/content/browse
diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/browser/renderer_host/render_frame_host_impl.cc
--- a/content/browser/renderer_host/render_frame_host_impl.cc
+++ b/content/browser/renderer_host/render_frame_host_impl.cc
@@ -13787,12 +13787,6 @@ void RenderFrameHostImpl::MaybeGenerateCrashReport(
@@ -11698,12 +11698,6 @@ void RenderFrameHostImpl::MaybeGenerateCrashReport(
base::Value::Dict body;
if (!reason.empty())
body.Set("reason", reason);
@@ -209,26 +182,26 @@ diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/b
- // Send the crash report to the Reporting API.
- GetProcess()->GetStoragePartition()->GetNetworkContext()->QueueReport(
- /*type=*/"crash", /*group=*/"default", last_committed_url_,
- GetReportingSource(), isolation_info_.network_anonymization_key(),
- std::nullopt /* user_agent */, std::move(body));
- GetReportingSource(), isolation_info_.network_isolation_key(),
- absl::nullopt /* user_agent */, std::move(body));
}
void RenderFrameHostImpl::SendCommitNavigation(
diff --git a/content/browser/web_package/signed_exchange_reporter.cc b/content/browser/web_package/signed_exchange_reporter.cc
--- a/content/browser/web_package/signed_exchange_reporter.cc
+++ b/content/browser/web_package/signed_exchange_reporter.cc
@@ -128,6 +128,7 @@ void ReportResult(
int frame_tree_node_id,
network::mojom::SignedExchangeReportPtr report,
const net::NetworkAnonymizationKey& network_anonymization_key) {
@@ -127,6 +127,7 @@ bool ShouldDowngradeReport(const char* result_string,
void ReportResult(int frame_tree_node_id,
network::mojom::SignedExchangeReportPtr report,
const net::NetworkIsolationKey& network_isolation_key) {
+#if BUILDFLAG(ENABLE_REPORTING)
FrameTreeNode* frame_tree_node =
FrameTreeNode::GloballyFindByID(frame_tree_node_id);
if (!frame_tree_node)
@@ -142,6 +143,7 @@ void ReportResult(
@@ -141,6 +142,7 @@ void ReportResult(int frame_tree_node_id,
DCHECK(partition);
partition->GetNetworkContext()->QueueSignedExchangeReport(
std::move(report), network_anonymization_key);
std::move(report), network_isolation_key);
+#endif
}
@@ -236,7 +209,7 @@ diff --git a/content/browser/web_package/signed_exchange_reporter.cc b/content/b
diff --git a/content/public/common/content_switch_dependent_feature_overrides.cc b/content/public/common/content_switch_dependent_feature_overrides.cc
--- a/content/public/common/content_switch_dependent_feature_overrides.cc
+++ b/content/public/common/content_switch_dependent_feature_overrides.cc
@@ -9,6 +9,7 @@
@@ -7,6 +7,7 @@
#include "content/public/common/content_features.h"
#include "content/public/common/content_switches.h"
#include "net/base/features.h"
@@ -244,28 +217,10 @@ diff --git a/content/public/common/content_switch_dependent_feature_overrides.cc
#include "services/network/public/cpp/features.h"
#include "services/network/public/cpp/network_switches.h"
#include "third_party/blink/public/common/features.h"
diff --git a/cromite_flags/services/network/public/cpp/features_cc/Allow-building-without-enable_reporting.inc b/cromite_flags/services/network/public/cpp/features_cc/Allow-building-without-enable_reporting.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/services/network/public/cpp/features_cc/Allow-building-without-enable_reporting.inc
@@ -0,0 +1,2 @@
+SET_CROMITE_FEATURE_DISABLED(kNetworkErrorLogging);
+SET_CROMITE_FEATURE_DISABLED(kReporting);
diff --git a/net/base/features.cc b/net/base/features.cc
--- a/net/base/features.cc
+++ b/net/base/features.cc
@@ -229,6 +229,7 @@ extern const base::FeatureParam<base::TimeDelta> kTimeoutTcpConnectAttemptMax(
base::Seconds(30));
#if BUILDFLAG(ENABLE_REPORTING)
+#error Attempting to build with enable_reporting
BASE_FEATURE(kDocumentReporting,
"DocumentReporting",
base::FEATURE_ENABLED_BY_DEFAULT);
diff --git a/net/reporting/reporting_service.cc b/net/reporting/reporting_service.cc
--- a/net/reporting/reporting_service.cc
+++ b/net/reporting/reporting_service.cc
@@ -214,6 +214,12 @@ class ReportingServiceImpl : public ReportingService {
@@ -208,6 +208,12 @@ class ReportingServiceImpl : public ReportingService {
base::Value::Dict body,
int depth,
base::TimeTicks queued_ticks) {
@@ -277,27 +232,27 @@ diff --git a/net/reporting/reporting_service.cc b/net/reporting/reporting_servic
+#endif
DCHECK(initialized_);
context_->cache()->AddReport(
reporting_source, network_anonymization_key, sanitized_url, user_agent,
reporting_source, network_isolation_key, sanitized_url, user_agent,
diff --git a/services/network/network_context.h b/services/network/network_context.h
--- a/services/network/network_context.h
+++ b/services/network/network_context.h
@@ -464,10 +464,10 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkContext
const std::optional<base::UnguessableToken>& reporting_source,
const net::NetworkAnonymizationKey& network_anonymization_key,
const std::optional<std::string>& user_agent,
@@ -456,10 +456,10 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkContext
const absl::optional<base::UnguessableToken>& reporting_source,
const net::NetworkIsolationKey& network_isolation_key,
const absl::optional<std::string>& user_agent,
- base::Value::Dict body) override;
+ base::Value::Dict body);
void QueueSignedExchangeReport(
mojom::SignedExchangeReportPtr report,
- const net::NetworkAnonymizationKey& network_anonymization_key) override;
+ const net::NetworkAnonymizationKey& network_anonymization_key);
- const net::NetworkIsolationKey& network_isolation_key) override;
+ const net::NetworkIsolationKey& network_isolation_key);
void AddDomainReliabilityContextForTesting(
const url::Origin& origin,
const GURL& origin,
const GURL& upload_url,
diff --git a/services/network/public/mojom/BUILD.gn b/services/network/public/mojom/BUILD.gn
--- a/services/network/public/mojom/BUILD.gn
+++ b/services/network/public/mojom/BUILD.gn
@@ -1443,7 +1443,6 @@ mojom("mojom") {
@@ -965,7 +965,6 @@ mojom("mojom") {
export_define_blink = "BLINK_PLATFORM_IMPLEMENTATION=1"
export_header_blink = "third_party/blink/public/platform/web_common.h"
if (enable_reporting) {
@@ -308,7 +263,7 @@ diff --git a/services/network/public/mojom/BUILD.gn b/services/network/public/mo
diff --git a/services/network/public/mojom/network_context.mojom b/services/network/public/mojom/network_context.mojom
--- a/services/network/public/mojom/network_context.mojom
+++ b/services/network/public/mojom/network_context.mojom
@@ -1206,6 +1206,7 @@ interface NetworkContext {
@@ -1055,6 +1055,7 @@ interface NetworkContext {
// provided |network_isolation_key|.
//
// Spec: https://w3c.github.io/reporting/#concept-reports
@@ -316,54 +271,27 @@ diff --git a/services/network/public/mojom/network_context.mojom b/services/netw
QueueReport(string type,
string group,
url.mojom.Url url,
@@ -1219,6 +1220,7 @@ interface NetworkContext {
@@ -1068,6 +1069,7 @@ interface NetworkContext {
// Note that this queued report will never be delivered if no reporting
// endpoint matching is registered for with the provided
// |network_isolation_key|.
+ [EnableIf=enable_reporting]
QueueSignedExchangeReport(SignedExchangeReport report,
NetworkAnonymizationKey network_anonymization_key);
NetworkIsolationKey network_isolation_key);
diff --git a/third_party/blink/renderer/core/frame/csp/content_security_policy.cc b/third_party/blink/renderer/core/frame/csp/content_security_policy.cc
--- a/third_party/blink/renderer/core/frame/csp/content_security_policy.cc
+++ b/third_party/blink/renderer/core/frame/csp/content_security_policy.cc
@@ -29,6 +29,7 @@
#include <optional>
#include <utility>
+#include "net/net_buildflags.h"
#include "base/containers/contains.h"
#include "base/debug/dump_without_crashing.h"
#include "base/ranges/algorithm.h"
@@ -1167,6 +1168,7 @@ void ContentSecurityPolicy::ReportViolation(
return;
}
+#if BUILDFLAG(ENABLE_REPORTING)
PostViolationReport(violation_data, context_frame, report_endpoints,
use_reporting_api);
@@ -1174,6 +1176,7 @@ void ContentSecurityPolicy::ReportViolation(
// `context_frame` (i.e. we're not processing 'frame-ancestors').
if (delegate_ && !context_frame)
delegate_->DispatchViolationEvent(*violation_data, element);
+#endif
AuditsIssue audits_issue = AuditsIssue::CreateContentSecurityPolicyIssue(
*violation_data, header_type == ContentSecurityPolicyType::kReport,
diff --git a/third_party/blink/renderer/core/frame/local_frame.cc b/third_party/blink/renderer/core/frame/local_frame.cc
--- a/third_party/blink/renderer/core/frame/local_frame.cc
+++ b/third_party/blink/renderer/core/frame/local_frame.cc
@@ -45,6 +45,7 @@
@@ -40,6 +40,7 @@
#include "build/build_config.h"
#include "mojo/public/cpp/bindings/self_owned_receiver.h"
#include "mojo/public/cpp/system/message_pipe.h"
+#include "net/net_buildflags.h"
#include "services/data_decoder/public/mojom/resource_snapshot_for_web_bundle.mojom-blink.h"
#include "services/network/public/cpp/features.h"
#include "services/network/public/mojom/content_security_policy.mojom-blink.h"
#include "services/network/public/mojom/source_location.mojom-blink.h"
@@ -2619,9 +2620,11 @@ void LocalFrame::MainFrameInteractive() {
v8_local_compile_hints_producer_->GenerateData();
@@ -2356,9 +2357,11 @@ const base::UnguessableToken& LocalFrame::GetAgentClusterId() const {
return base::UnguessableToken::Null();
}
+#if BUILDFLAG(ENABLE_REPORTING)
@@ -372,30 +300,34 @@ diff --git a/third_party/blink/renderer/core/frame/local_frame.cc b/third_party/
}
+#endif
mojom::blink::DevicePostureProvider* LocalFrame::GetDevicePostureProvider() {
return mojo_handler_->DevicePostureProvider();
// static
void LocalFrame::NotifyUserActivation(
diff --git a/third_party/blink/renderer/core/frame/local_frame.h b/third_party/blink/renderer/core/frame/local_frame.h
--- a/third_party/blink/renderer/core/frame/local_frame.h
+++ b/third_party/blink/renderer/core/frame/local_frame.h
@@ -36,6 +36,7 @@
@@ -35,9 +35,9 @@
#include "base/time/default_tick_clock.h"
#include "base/time/time.h"
#include "base/unguessable_token.h"
#include "build/build_config.h"
+#include "net/net_buildflags.h"
-#include "build/build_config.h"
#include "mojo/public/cpp/bindings/pending_associated_receiver.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "services/metrics/public/cpp/ukm_source_id.h"
@@ -657,8 +658,9 @@ class CORE_EXPORT LocalFrame final
void FinishedScrollSequence();
+#include "net/net_buildflags.h"
#include "services/device/public/mojom/device_posture_provider.mojom-blink-forward.h"
#include "services/network/public/mojom/fetch_api.mojom-blink-forward.h"
#include "third_party/blink/public/common/frame/frame_ad_evidence.h"
@@ -564,9 +564,9 @@ class CORE_EXPORT LocalFrame final
}
SmoothScrollSequencer* GetSmoothScrollSequencer() const;
SmoothScrollSequencer& GetSmoothScrollSequencer();
-
+#if BUILDFLAG(ENABLE_REPORTING)
mojom::blink::ReportingServiceProxy* GetReportingService();
-
+#endif
mojom::blink::DevicePostureProvider* GetDevicePostureProvider();
// Returns the frame host ptr. The interface returned is backed by an
// associated interface with the legacy Chrome IPC channel.
mojom::blink::LocalFrameHost& GetLocalFrameHostRemote() const;
diff --git a/third_party/blink/renderer/core/frame/reporting_context.cc b/third_party/blink/renderer/core/frame/reporting_context.cc
--- a/third_party/blink/renderer/core/frame/reporting_context.cc
+++ b/third_party/blink/renderer/core/frame/reporting_context.cc
@@ -494,17 +426,5 @@ diff --git a/third_party/blink/renderer/core/frame/reporting_context.h b/third_p
HeapMojoReceiver<mojom::blink::ReportingObserver, ReportingContext> receiver_;
};
diff --git a/third_party/blink/renderer/core/frame/reporting_observer.cc b/third_party/blink/renderer/core/frame/reporting_observer.cc
--- a/third_party/blink/renderer/core/frame/reporting_observer.cc
+++ b/third_party/blink/renderer/core/frame/reporting_observer.cc
@@ -62,8 +62,7 @@ void ReportingObserver::QueueReport(Report* report) {
}
bool ReportingObserver::ObservedType(const String& type) {
- return !options_->hasTypesNonNull() || options_->typesNonNull().empty() ||
- options_->typesNonNull().Find(type) != kNotFound;
+ return false;
}
bool ReportingObserver::Buffered() {
--
2.25.1
@@ -4,288 +4,50 @@ Subject: Allow building without supervised users
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
chrome/android/BUILD.gn | 1 -
chrome/android/chrome_java_sources.gni | 1 -
.../chrome/browser/feed/FeedSurfaceCoordinator.java | 5 +----
chrome/browser/BUILD.gn | 6 ------
.../browser/extensions/api/settings_private/prefs_util.cc | 2 ++
chrome/browser/profiles/profile_impl.cc | 4 ++++
chrome/browser/profiles/profile_manager.cc | 4 ++++
chrome/browser/ui/webui/managed_ui_handler.cc | 2 ++
chrome/browser/ui/webui/management/management_ui_handler.cc | 2 ++
components/supervised_user/buildflags.gni | 6 +-----
.../core/browser/supervised_user_preferences.cc | 2 +-
.../supervised_user/core/browser/supervised_user_utils.cc | 4 ++++
components/supervised_user/core/common/features.cc | 1 +
components/supervised_user/core/common/pref_names.h | 4 ++++
.../core/common/supervised_user_constants.cc | 2 ++
15 files changed, 28 insertions(+), 18 deletions(-)
.../browser/supervised_user/ChildAccountService.java | 11 -----------
.../child_accounts/child_account_service_android.cc | 9 ---------
2 files changed, 20 deletions(-)
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
--- a/chrome/android/BUILD.gn
+++ b/chrome/android/BUILD.gn
@@ -3697,7 +3697,6 @@ generate_jni("chrome_jni_headers") {
"java/src/org/chromium/chrome/browser/status_indicator/StatusIndicatorSceneLayer.java",
"java/src/org/chromium/chrome/browser/suggestions/mostvisited/MostVisitedSites.java",
"java/src/org/chromium/chrome/browser/suggestions/mostvisited/MostVisitedSitesBridge.java",
- "java/src/org/chromium/chrome/browser/supervised_user/ChildAccountService.java",
"java/src/org/chromium/chrome/browser/sync/TrustedVaultClient.java",
"java/src/org/chromium/chrome/browser/tab/TabBrowserControlsConstraintsHelper.java",
"java/src/org/chromium/chrome/browser/tab/TabFavicon.java",
diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni
--- a/chrome/android/chrome_java_sources.gni
+++ b/chrome/android/chrome_java_sources.gni
@@ -1085,7 +1085,6 @@ chrome_java_sources = [
"java/src/org/chromium/chrome/browser/suggestions/tile/TileGroupDelegateImpl.java",
"java/src/org/chromium/chrome/browser/suggestions/tile/TileRenderer.java",
"java/src/org/chromium/chrome/browser/suggestions/tile/TopSitesTileView.java",
- "java/src/org/chromium/chrome/browser/supervised_user/ChildAccountService.java",
"java/src/org/chromium/chrome/browser/survey/ChromeSurveyController.java",
"java/src/org/chromium/chrome/browser/sync/SyncErrorNotifier.java",
"java/src/org/chromium/chrome/browser/sync/TrustedVaultClient.java",
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java
--- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java
+++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java
@@ -68,7 +68,6 @@ import org.chromium.components.browser_ui.widget.displaystyle.UiConfig;
import org.chromium.components.feature_engagement.EventConstants;
import org.chromium.components.feature_engagement.Tracker;
import org.chromium.components.prefs.PrefService;
-import org.chromium.components.supervised_user.SupervisedUserPreferences;
import org.chromium.components.user_prefs.UserPrefs;
import org.chromium.third_party.android.swiperefresh.SwipeRefreshLayout;
import org.chromium.ui.base.DeviceFormFactor;
@@ -775,9 +774,7 @@ public class FeedSurfaceCoordinator
* Returns true if the supervised user feed should be displayed.
*/
public boolean shouldDisplaySupervisedFeed() {
- PrefService prefService = UserPrefs.get(mProfile);
- return SupervisedUserPreferences.isSubjectToParentalControls(prefService)
- && ChromeFeatureList.isEnabled(ChromeFeatureList.KID_FRIENDLY_CONTENT_FEED);
+ return false;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/supervised_user/ChildAccountService.java b/chrome/android/java/src/org/chromium/chrome/browser/supervised_user/ChildAccountService.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/supervised_user/ChildAccountService.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/supervised_user/ChildAccountService.java
@@ -31,21 +31,10 @@ public class ChildAccountService {
ThreadUtils.assertOnUiThread();
final Activity activity = windowAndroid.getActivity().get();
if (activity == null) {
- PostTask.postTask(UiThreadTaskTraits.DEFAULT, () -> {
- ChildAccountServiceJni.get().onReauthenticationFailed(nativeOnFailureCallback);
- });
return;
}
Account account = AccountUtils.createAccountFromName(accountName);
AccountManagerFacadeProvider.getInstance().updateCredentials(account, activity, success -> {
- if (!success) {
- ChildAccountServiceJni.get().onReauthenticationFailed(nativeOnFailureCallback);
- }
});
}
/**
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -3165,8 +3165,6 @@ static_library("browser") {
"feed/android/refresh_task_scheduler_impl.cc",
"feed/android/refresh_task_scheduler_impl.h",
"feed/android/web_feed_bridge.cc",
- "feedback/android/family_info_feedback_source.cc",
- "feedback/android/family_info_feedback_source.h",
"file_select_helper_contacts_android.cc",
"file_select_helper_contacts_android.h",
"first_run/android/first_run_prefs.cc",
@@ -3371,10 +3369,6 @@ static_library("browser") {
"ssl/chrome_security_state_model_delegate.h",
"ssl/known_interception_disclosure_infobar.cc",
"ssl/known_interception_disclosure_infobar.h",
- "supervised_user/android/favicon_fetcher.cc",
- "supervised_user/android/favicon_fetcher.h",
- "supervised_user/android/supervised_user_web_content_handler_impl.cc",
- "supervised_user/android/supervised_user_web_content_handler_impl.h",
"sync/glue/synced_tab_delegate_android.cc",
"sync/glue/synced_tab_delegate_android.h",
"sync/glue/synced_window_delegate_android.cc",
diff --git a/chrome/browser/extensions/api/settings_private/prefs_util.cc b/chrome/browser/extensions/api/settings_private/prefs_util.cc
--- a/chrome/browser/extensions/api/settings_private/prefs_util.cc
+++ b/chrome/browser/extensions/api/settings_private/prefs_util.cc
@@ -1024,9 +1024,11 @@ const PrefsUtil::TypedPrefMap& PrefsUtil::GetAllowlistedKeys() {
settings_api::PrefType::kBoolean;
#endif
+#if BUILDFLAG(ENABLE_SUPERVISED_USERS)
// Supervised Users. This setting is queried in our Tast tests (b/241943380).
(*s_allowlist)[::prefs::kSupervisedUserExtensionsMayRequestPermissions] =
settings_api::PrefType::kBoolean;
+#endif
#if BUILDFLAG(IS_CHROMEOS_LACROS)
(*s_allowlist)[::prefs::kUseAshProxy] = settings_api::PrefType::kBoolean;
diff --git a/chrome/browser/profiles/profile_impl.cc b/chrome/browser/profiles/profile_impl.cc
--- a/chrome/browser/profiles/profile_impl.cc
+++ b/chrome/browser/profiles/profile_impl.cc
@@ -689,10 +689,12 @@ void ProfileImpl::DoFinalInit(CreateMode create_mode) {
prefs->SetTime(prefs::kProfileCreationTime, path_creation_time_);
pref_change_registrar_.Init(prefs);
+#if BUILDFLAG(ENABLE_SUPERVISED_USERS)
pref_change_registrar_.Add(
prefs::kSupervisedUserId,
base::BindRepeating(&ProfileImpl::UpdateSupervisedUserIdInStorage,
base::Unretained(this)));
+#endif
// Changes in the profile avatar.
pref_change_registrar_.Add(
@@ -1627,11 +1629,13 @@ GURL ProfileImpl::GetHomePage() {
-
- @NativeMethods
- interface Natives {
- void onReauthenticationFailed(long onFailureCallbackPtr);
- }
}
void ProfileImpl::UpdateSupervisedUserIdInStorage() {
+#if BUILDFLAG(ENABLE_SUPERVISED_USERS)
ProfileManager* profile_manager = g_browser_process->profile_manager();
ProfileAttributesEntry* entry = profile_manager->GetProfileAttributesStorage()
.GetProfileAttributesWithPath(GetPath());
if (entry)
entry->SetSupervisedUserId(GetPrefs()->GetString(prefs::kSupervisedUserId));
+#endif
diff --git a/chrome/browser/supervised_user/child_accounts/child_account_service_android.cc b/chrome/browser/supervised_user/child_accounts/child_account_service_android.cc
--- a/chrome/browser/supervised_user/child_accounts/child_account_service_android.cc
+++ b/chrome/browser/supervised_user/child_accounts/child_account_service_android.cc
@@ -39,12 +39,3 @@ void ReauthenticateChildAccount(
env, window_android->GetJavaObject(), ConvertUTF8ToJavaString(env, email),
reinterpret_cast<jlong>(callback_copy.release()));
}
void ProfileImpl::UpdateNameInStorage() {
diff --git a/chrome/browser/profiles/profile_manager.cc b/chrome/browser/profiles/profile_manager.cc
--- a/chrome/browser/profiles/profile_manager.cc
+++ b/chrome/browser/profiles/profile_manager.cc
@@ -1215,6 +1215,7 @@ void ProfileManager::InitProfileUserPrefs(Profile* profile) {
profile->GetPrefs()->SetString(prefs::kProfileName, profile_name);
}
+#if BUILDFLAG(ENABLE_SUPERVISED_USERS)
base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
bool force_supervised_user_id =
#if BUILDFLAG(IS_CHROMEOS_ASH)
@@ -1236,6 +1237,7 @@ void ProfileManager::InitProfileUserPrefs(Profile* profile) {
profile->GetPrefs()->SetString(prefs::kSupervisedUserId,
supervised_user_id);
}
+#endif
#if !BUILDFLAG(IS_ANDROID)
if (profile->IsNewProfile()) {
profile->GetPrefs()->SetBoolean(prefs::kHasSeenWelcomePage, false);
@@ -2035,8 +2037,10 @@ void ProfileManager::AddProfileToStorage(Profile* profile) {
init_params.icon_index =
profile->GetPrefs()->GetInteger(prefs::kProfileAvatarIndex);
+#if BUILDFLAG(ENABLE_SUPERVISED_USERS)
init_params.supervised_user_id =
profile->GetPrefs()->GetString(prefs::kSupervisedUserId);
+#endif
#if BUILDFLAG(IS_CHROMEOS_ASH)
user_manager::User* user =
diff --git a/chrome/browser/ui/webui/managed_ui_handler.cc b/chrome/browser/ui/webui/managed_ui_handler.cc
--- a/chrome/browser/ui/webui/managed_ui_handler.cc
+++ b/chrome/browser/ui/webui/managed_ui_handler.cc
@@ -90,9 +90,11 @@ void ManagedUIHandler::AddObservers() {
policy_service->AddObserver(domain, this);
}
+#if BUILDFLAG(ENABLE_SUPERVISED_USERS)
pref_registrar_.Add(prefs::kSupervisedUserId,
base::BindRepeating(&ManagedUIHandler::NotifyIfChanged,
base::Unretained(this)));
+#endif
}
void ManagedUIHandler::RemoveObservers() {
diff --git a/chrome/browser/ui/webui/management/management_ui_handler.cc b/chrome/browser/ui/webui/management/management_ui_handler.cc
--- a/chrome/browser/ui/webui/management/management_ui_handler.cc
+++ b/chrome/browser/ui/webui/management/management_ui_handler.cc
@@ -1507,10 +1507,12 @@ void ManagementUIHandler::AddObservers() {
pref_registrar_.Init(profile->GetPrefs());
+#if BUILDFLAG(ENABLE_SUPERVISED_USERS)
pref_registrar_.Add(
prefs::kSupervisedUserId,
base::BindRepeating(&ManagementUIHandler::UpdateManagedState,
base::Unretained(this)));
+#endif
#if BUILDFLAG(IS_CHROMEOS_ASH)
pref_registrar_.Add(
diff --git a/components/supervised_user/buildflags.gni b/components/supervised_user/buildflags.gni
--- a/components/supervised_user/buildflags.gni
+++ b/components/supervised_user/buildflags.gni
@@ -4,9 +4,5 @@
declare_args() {
# Enables supervision for Family Link users.
- enable_supervised_users =
- # Platforms which fully support supervision features:
- is_android || is_chromeos ||
- # Platforms for which support is currently in development:
- is_ios || is_linux || is_mac || is_win
+ enable_supervised_users = false
}
diff --git a/components/supervised_user/core/browser/supervised_user_preferences.cc b/components/supervised_user/core/browser/supervised_user_preferences.cc
--- a/components/supervised_user/core/browser/supervised_user_preferences.cc
+++ b/components/supervised_user/core/browser/supervised_user_preferences.cc
@@ -173,7 +173,7 @@ bool IsChildAccountStatusKnown(const PrefService& pref_service) {
}
bool IsChildAccount(const PrefService& pref_service) {
- return pref_service.GetString(prefs::kSupervisedUserId) == kChildAccountSUID;
+ return false;
}
bool IsSafeSitesEnabled(const PrefService& pref_service) {
diff --git a/components/supervised_user/core/browser/supervised_user_utils.cc b/components/supervised_user/core/browser/supervised_user_utils.cc
--- a/components/supervised_user/core/browser/supervised_user_utils.cc
+++ b/components/supervised_user/core/browser/supervised_user_utils.cc
@@ -81,11 +81,15 @@ GURL NormalizeUrl(const GURL& url) {
}
bool AreWebFilterPrefsDefault(const PrefService& pref_service) {
+#if BUILDFLAG(ENABLE_SUPERVISED_USERS)
return pref_service
.FindPreference(prefs::kDefaultSupervisedUserFilteringBehavior)
->IsDefaultValue() ||
pref_service.FindPreference(prefs::kSupervisedUserSafeSites)
->IsDefaultValue();
+#else
+ return true;
+#endif
}
bool EmitLogRecordHistograms(
diff --git a/components/supervised_user/core/common/features.cc b/components/supervised_user/core/common/features.cc
--- a/components/supervised_user/core/common/features.cc
+++ b/components/supervised_user/core/common/features.cc
@@ -163,4 +163,5 @@ bool IsShadowKidsApiWithSafeSitesEnabled() {
return base::FeatureList::IsEnabled(kShadowKidsApiWithSafeSites);
}
+SET_CROMITE_FEATURE_DISABLED(kForceGoogleSafeSearchForSupervisedUsers);
} // namespace supervised_user
diff --git a/components/supervised_user/core/common/pref_names.h b/components/supervised_user/core/common/pref_names.h
--- a/components/supervised_user/core/common/pref_names.h
+++ b/components/supervised_user/core/common/pref_names.h
@@ -5,8 +5,10 @@
#ifndef COMPONENTS_SUPERVISED_USER_CORE_COMMON_PREF_NAMES_H_
#define COMPONENTS_SUPERVISED_USER_CORE_COMMON_PREF_NAMES_H_
+#include "components/supervised_user/core/common/buildflags.h"
#include "extensions/buildflags/buildflags.h"
+#if BUILDFLAG(ENABLE_SUPERVISED_USERS)
namespace prefs {
// A bool pref that keeps whether the child status for this profile was already
@@ -132,4 +134,6 @@ inline constexpr char kFirstTimeInterstitialBannerState[] =
} // namespace prefs
+#endif // BUILDFLAG(ENABLE_SUPERVISED_USERS)
+
#endif // COMPONENTS_SUPERVISED_USER_CORE_COMMON_PREF_NAMES_H_
diff --git a/components/supervised_user/core/common/supervised_user_constants.cc b/components/supervised_user/core/common/supervised_user_constants.cc
--- a/components/supervised_user/core/common/supervised_user_constants.cc
+++ b/components/supervised_user/core/common/supervised_user_constants.cc
@@ -70,6 +70,7 @@ const char kChromeOSAvatarIndex[] = "chromeos-avatar-index";
const char kChromeOSPasswordData[] = "chromeos-password-data";
+#if BUILDFLAG(ENABLE_SUPERVISED_USERS)
const char* const kCustodianInfoPrefs[] = {
prefs::kSupervisedUserCustodianName,
prefs::kSupervisedUserCustodianEmail,
@@ -82,6 +83,7 @@ const char* const kCustodianInfoPrefs[] = {
prefs::kSupervisedUserSecondCustodianProfileURL,
prefs::kSupervisedUserSecondCustodianProfileImageURL,
};
+#endif
const base::FilePath::CharType kSupervisedUserSettingsFilename[] =
FILE_PATH_LITERAL("Managed Mode Settings");
-
-void JNI_ChildAccountService_OnReauthenticationFailed(JNIEnv* env,
- jlong jcallbackPtr) {
- // Cast the pointer value back to a Callback and take ownership of it.
- std::unique_ptr<base::RepeatingCallback<void()>> callback(
- reinterpret_cast<base::RepeatingCallback<void()>*>(jcallbackPtr));
-
- callback->Run();
-}
--
2.25.1
@@ -4,14 +4,14 @@ Subject: Allow playing audio in background
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
.../renderer/platform/media/web_media_player_impl.cc | 11 ++++++++++-
.../renderer/platform/media/web_media_player_impl.h | 3 +++
2 files changed, 13 insertions(+), 1 deletion(-)
.../renderer/platform/media/web_media_player_impl.cc | 12 +++++++++++-
.../renderer/platform/media/web_media_player_impl.h | 3 +++
2 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/third_party/blink/renderer/platform/media/web_media_player_impl.cc b/third_party/blink/renderer/platform/media/web_media_player_impl.cc
--- a/third_party/blink/renderer/platform/media/web_media_player_impl.cc
+++ b/third_party/blink/renderer/platform/media/web_media_player_impl.cc
@@ -1181,6 +1181,12 @@ bool WebMediaPlayerImpl::HasAudio() const {
@@ -1217,6 +1217,12 @@ bool WebMediaPlayerImpl::HasAudio() const {
return pipeline_metadata_.has_audio;
}
@@ -24,22 +24,23 @@ diff --git a/third_party/blink/renderer/platform/media/web_media_player_impl.cc
void WebMediaPlayerImpl::EnabledAudioTracksChanged(
const WebVector<WebMediaPlayer::TrackId>& enabledTrackIds) {
DCHECK(main_task_runner_->BelongsToCurrentThread());
@@ -3524,7 +3530,10 @@ bool WebMediaPlayerImpl::ShouldPausePlaybackWhenHidden() const {
: HasAudio();
@@ -3608,7 +3614,11 @@ bool WebMediaPlayerImpl::ShouldPausePlaybackWhenHidden() const {
// Audio only stream is allowed to play when in background.
- if (!HasVideo() && preserve_audio)
// TODO: We should check IsBackgroundOptimizationCandidate here. But we need
// to move the logic of checking video frames out of that function.
- if (!HasVideo())
+
+ //pipeline_metadata_.has_video is true for MediaPlayerRenderer,
+ //see media/base/pipeline_metadata.h. This is a workaround to allow audio
+ //streams be played in background.
+ if (!HasVideoNonEmptySize() && preserve_audio)
+ if (!HasVideoNonEmptySize())
return false;
// MediaPlayer always signals audio and video, so use an empty natural size to
if (using_media_player_renderer_ &&
diff --git a/third_party/blink/renderer/platform/media/web_media_player_impl.h b/third_party/blink/renderer/platform/media/web_media_player_impl.h
--- a/third_party/blink/renderer/platform/media/web_media_player_impl.h
+++ b/third_party/blink/renderer/platform/media/web_media_player_impl.h
@@ -200,6 +200,9 @@ class PLATFORM_EXPORT WebMediaPlayerImpl
@@ -192,6 +192,9 @@ class PLATFORM_EXPORT WebMediaPlayerImpl
bool HasVideo() const override;
bool HasAudio() const override;
@@ -50,3 +51,4 @@ diff --git a/third_party/blink/renderer/platform/media/web_media_player_impl.h b
const WebVector<WebMediaPlayer::TrackId>& enabledTrackIds) override;
void SelectedVideoTrackChanged(
--
2.25.1
@@ -1,30 +0,0 @@
From: uazo <uazo@users.noreply.github.com>
Date: Mon, 13 Nov 2023 14:26:00 +0000
Subject: Always allow inspect fallback
Always enable 'inspect fallback' in 'chrome://inspect/#devices'
---
chrome/browser/resources/inspect/inspect.js | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/chrome/browser/resources/inspect/inspect.js b/chrome/browser/resources/inspect/inspect.js
--- a/chrome/browser/resources/inspect/inspect.js
+++ b/chrome/browser/resources/inspect/inspect.js
@@ -50,6 +50,7 @@ if ('browser-inspector' in queryParamsObject) {
})();
function isVersionNewerThanHost(version) {
+ if ((true)) return true;
if (!HOST_CHROME_VERSION) {
return false;
}
@@ -561,7 +562,7 @@ function formatValue(data, property) {
function addFavicon(row, data) {
const favicon = document.createElement('img');
if (data['faviconUrl']) {
- favicon.src = data['faviconUrl'];
+ //favicon.src = data['faviconUrl'];
}
const propertiesBox = row.querySelector('.properties-box');
propertiesBox.insertBefore(favicon, propertiesBox.firstChild);
--
@@ -1,44 +0,0 @@
From: Your Name <you@example.com>
Date: Wed, 28 Dec 2022 07:19:58 +0000
Subject: Always open browser controls in new tab
---
.../chrome/browser/tab/TabContextMenuItemDelegate.java | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java
@@ -21,6 +21,7 @@ import org.chromium.base.IntentUtils;
import org.chromium.base.PackageManagerUtils;
import org.chromium.base.metrics.RecordUserAction;
import org.chromium.base.supplier.Supplier;
+import org.chromium.cc.input.BrowserControlsState;
import org.chromium.chrome.browser.DefaultBrowserInfo;
import org.chromium.chrome.browser.IntentHandler;
import org.chromium.chrome.browser.bookmarks.BookmarkModel;
@@ -35,6 +36,7 @@ import org.chromium.chrome.browser.multiwindow.MultiWindowUtils;
import org.chromium.chrome.browser.offlinepages.OfflinePageBridge;
import org.chromium.chrome.browser.offlinepages.RequestCoordinatorBridge;
import org.chromium.chrome.browser.profiles.Profile;
+import org.chromium.chrome.browser.tab.TabBrowserControlsConstraintsHelper;
import org.chromium.chrome.browser.tabmodel.TabModelSelector;
import org.chromium.chrome.browser.tabmodel.document.ChromeAsyncTabLauncher;
import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager;
@@ -219,6 +221,7 @@ public class TabContextMenuItemDelegate implements ContextMenuItemDelegate {
Referrer referrer,
boolean navigateToTab,
@Nullable AdditionalNavigationParams additionalNavigationParams) {
+ TabBrowserControlsConstraintsHelper.get(mTab).update(BrowserControlsState.SHOWN, true);
RecordUserAction.record("MobileNewTabOpened");
RecordUserAction.record("LinkOpenedInNewTab");
LoadUrlParams loadUrlParams = new LoadUrlParams(url.getSpec());
@@ -235,6 +238,7 @@ public class TabContextMenuItemDelegate implements ContextMenuItemDelegate {
@Override
public void onOpenInNewTabInGroup(GURL url, Referrer referrer) {
+ TabBrowserControlsConstraintsHelper.get(mTab).update(BrowserControlsState.SHOWN, true);
RecordUserAction.record("MobileNewTabOpened");
RecordUserAction.record("LinkOpenedInNewTab");
LoadUrlParams loadUrlParams = new LoadUrlParams(url.getSpec());
--
@@ -7,66 +7,21 @@ Ignore any partner-provided home page.
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
.../org/chromium/chrome/browser/homepage/HomepageManager.java | 4 ----
.../partnercustomizations/PartnerBrowserCustomizations.java | 2 +-
.../org/chromium/components/search_engines/TemplateUrl.java | 1 +
.../search_engines/android/template_url_service_android.cc | 1 +
.../always-use-new-tab-page-for-default-home-page.inc | 2 ++
5 files changed, 5 insertions(+), 5 deletions(-)
create mode 100755 cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/always-use-new-tab-page-for-default-home-page.inc
1 file changed, 4 deletions(-)
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java b/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java
@@ -152,10 +152,6 @@ public class HomepageManager
* tab page if the homepage button is force enabled via flag.
@@ -147,10 +147,6 @@ public class HomepageManager implements HomepagePolicyManager.HomepagePolicyStat
* if the homepage button is force enabled via flag.
*/
public static GURL getDefaultHomepageGurl() {
public static String getDefaultHomepageUri() {
- if (PartnerBrowserCustomizations.getInstance().isHomepageProviderAvailableAndEnabled()) {
- return PartnerBrowserCustomizations.getInstance().getHomePageUrl();
- return PartnerBrowserCustomizations.getInstance().getHomePageUrl().getSpec();
- }
-
String homepagePartnerDefaultUri;
String homepagePartnerDefaultGurlSerialized =
ChromeSharedPreferences.getInstance()
.readString(
diff --git a/chrome/browser/partnercustomizations/java/src/org/chromium/chrome/browser/partnercustomizations/PartnerBrowserCustomizations.java b/chrome/browser/partnercustomizations/java/src/org/chromium/chrome/browser/partnercustomizations/PartnerBrowserCustomizations.java
--- a/chrome/browser/partnercustomizations/java/src/org/chromium/chrome/browser/partnercustomizations/PartnerBrowserCustomizations.java
+++ b/chrome/browser/partnercustomizations/java/src/org/chromium/chrome/browser/partnercustomizations/PartnerBrowserCustomizations.java
@@ -212,7 +212,7 @@ public class PartnerBrowserCustomizations {
& ApplicationInfo.FLAG_SYSTEM)
== 1
|| !VersionInfo.isStableBuild();
- if (!systemOrPreStable) {
+ if ((true)) {
// Only allow partner customization if this browser is a system
// package, or is in pre-stable channels.
return null;
diff --git a/components/search_engines/android/java/src/org/chromium/components/search_engines/TemplateUrl.java b/components/search_engines/android/java/src/org/chromium/components/search_engines/TemplateUrl.java
--- a/components/search_engines/android/java/src/org/chromium/components/search_engines/TemplateUrl.java
+++ b/components/search_engines/android/java/src/org/chromium/components/search_engines/TemplateUrl.java
@@ -69,6 +69,7 @@ public class TemplateUrl {
* prepopulated_engines.json.
*/
public String getNewTabURL() {
+ if ((true)) return null;
return TemplateUrlJni.get().getNewTabURL(mTemplateUrlPtr);
}
diff --git a/components/search_engines/android/template_url_service_android.cc b/components/search_engines/android/template_url_service_android.cc
--- a/components/search_engines/android/template_url_service_android.cc
+++ b/components/search_engines/android/template_url_service_android.cc
@@ -330,6 +330,7 @@ jboolean TemplateUrlServiceAndroid::SetPlayAPISearchEngine(
const base::android::JavaParamRef<jstring>&
jimage_translate_target_language_param_key,
jboolean set_as_default) {
+ if ((true)) return false;
// Check if there is already a search engine created from Play API.
TemplateURLService::TemplateURLVector template_urls =
template_url_service_->GetTemplateURLs();
diff --git a/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/always-use-new-tab-page-for-default-home-page.inc b/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/always-use-new-tab-page-for-default-home-page.inc
new file mode 100755
--- /dev/null
+++ b/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/always-use-new-tab-page-for-default-home-page.inc
@@ -0,0 +1,2 @@
+SET_CROMITE_FEATURE_DISABLED(kNewTabSearchEngineUrlAndroid);
+SET_CROMITE_FEATURE_DISABLED(kPartnerCustomizationsUma);
SharedPreferencesManager.getInstance().readString(
--
2.25.1
@@ -0,0 +1,25 @@
From: uazo <uazo@users.noreply.github.com>
Date: Sat, 20 Nov 2021 17:42:41 +0000
Subject: Ask user before closing all tabs
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
chrome/browser/flags/android/chrome_feature_list.cc | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc
--- a/chrome/browser/flags/android/chrome_feature_list.cc
+++ b/chrome/browser/flags/android/chrome_feature_list.cc
@@ -480,8 +480,8 @@ const base::Feature kConditionalTabStripAndroid{
const base::Feature kCastDeviceFilter{"CastDeviceFilter",
base::FEATURE_DISABLED_BY_DEFAULT};
-const base::Feature kCloseTabSuggestions{"CloseTabSuggestions",
- base::FEATURE_DISABLED_BY_DEFAULT};
+const base::Feature kCloseTabSuggestions{"CloseTabSuggestions", // Enabled by default in Bromite
+ base::FEATURE_ENABLED_BY_DEFAULT}; // ^
const base::Feature kCriticalPersistedTabData{
"CriticalPersistedTabData", base::FEATURE_DISABLED_BY_DEFAULT};
--
2.25.1
@@ -6,96 +6,49 @@ Truncate base latency precision to two digits
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
.../AudioBuffer-AnalyserNode-fp-mitigations.inc | 8 ++++++++
.../AudioBuffer-AnalyserNode-fp-mitigations.inc | 3 +++
.../AudioBuffer-AnalyserNode-fp-mitigations.inc | 1 +
.../renderer/modules/webaudio/audio_buffer.cc | 14 ++++++++++++++
.../blink/renderer/modules/webaudio/audio_buffer.h | 2 ++
.../renderer/modules/webaudio/audio_context.cc | 5 ++++-
.../modules/webaudio/base_audio_context.cc | 12 ++++++++++++
.../renderer/modules/webaudio/base_audio_context.h | 2 ++
.../modules/webaudio/offline_audio_context.cc | 1 +
.../renderer/modules/webaudio/realtime_analyser.cc | 7 +++++++
10 files changed, 54 insertions(+), 1 deletion(-)
create mode 100644 cromite_flags/chrome/browser/about_flags_cc/AudioBuffer-AnalyserNode-fp-mitigations.inc
create mode 100644 cromite_flags/third_party/blink/common/features_cc/AudioBuffer-AnalyserNode-fp-mitigations.inc
create mode 100644 cromite_flags/third_party/blink/common/features_h/AudioBuffer-AnalyserNode-fp-mitigations.inc
.../blink/renderer/modules/webaudio/analyser_node.idl | 8 ++++----
.../blink/renderer/modules/webaudio/audio_buffer.idl | 6 ------
.../blink/renderer/modules/webaudio/audio_context.cc | 4 +++-
3 files changed, 7 insertions(+), 11 deletions(-)
diff --git a/cromite_flags/chrome/browser/about_flags_cc/AudioBuffer-AnalyserNode-fp-mitigations.inc b/cromite_flags/chrome/browser/about_flags_cc/AudioBuffer-AnalyserNode-fp-mitigations.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/chrome/browser/about_flags_cc/AudioBuffer-AnalyserNode-fp-mitigations.inc
@@ -0,0 +1,8 @@
+#ifdef FLAG_SECTION
+
+ {"fingerprinting-audio-context-data-noise",
+ "Enable Audio Context fingerprint deception",
+ "Scale the output values of rendered data with a randomly selected factor.", kOsAll,
+ FEATURE_VALUE_TYPE(blink::features::kAudioContextShuffleEnabled)},
+
+#endif
diff --git a/cromite_flags/third_party/blink/common/features_cc/AudioBuffer-AnalyserNode-fp-mitigations.inc b/cromite_flags/third_party/blink/common/features_cc/AudioBuffer-AnalyserNode-fp-mitigations.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/third_party/blink/common/features_cc/AudioBuffer-AnalyserNode-fp-mitigations.inc
@@ -0,0 +1,3 @@
+CROMITE_FEATURE(kAudioContextShuffleEnabled,
+ "AudioContextShuffleEnabled",
+ base::FEATURE_ENABLED_BY_DEFAULT);
diff --git a/cromite_flags/third_party/blink/common/features_h/AudioBuffer-AnalyserNode-fp-mitigations.inc b/cromite_flags/third_party/blink/common/features_h/AudioBuffer-AnalyserNode-fp-mitigations.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/third_party/blink/common/features_h/AudioBuffer-AnalyserNode-fp-mitigations.inc
@@ -0,0 +1 @@
+BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kAudioContextShuffleEnabled);
diff --git a/third_party/blink/renderer/modules/webaudio/audio_buffer.cc b/third_party/blink/renderer/modules/webaudio/audio_buffer.cc
--- a/third_party/blink/renderer/modules/webaudio/audio_buffer.cc
+++ b/third_party/blink/renderer/modules/webaudio/audio_buffer.cc
@@ -196,6 +196,20 @@ AudioBuffer::AudioBuffer(AudioBus* bus)
}
}
diff --git a/third_party/blink/renderer/modules/webaudio/analyser_node.idl b/third_party/blink/renderer/modules/webaudio/analyser_node.idl
--- a/third_party/blink/renderer/modules/webaudio/analyser_node.idl
+++ b/third_party/blink/renderer/modules/webaudio/analyser_node.idl
@@ -40,10 +40,10 @@
+void AudioBuffer::ShuffleAudioData() {
+ for (unsigned i = 0; i < channels_.size(); ++i) {
+ if (NotShared<DOMFloat32Array> array = getChannelData(i)) {
+ size_t len = array->length();
+ if (len > 0) {
+ float* destination = array->Data();
+ for (unsigned j = 0; j < len; ++j) {
+ destination[j] = BaseAudioContext::ShuffleAudioData(destination[j], j);
+ }
+ }
+ }
+ }
+}
+
NotShared<DOMFloat32Array> AudioBuffer::getChannelData(
unsigned channel_index,
ExceptionState& exception_state) {
diff --git a/third_party/blink/renderer/modules/webaudio/audio_buffer.h b/third_party/blink/renderer/modules/webaudio/audio_buffer.h
--- a/third_party/blink/renderer/modules/webaudio/audio_buffer.h
+++ b/third_party/blink/renderer/modules/webaudio/audio_buffer.h
@@ -115,6 +115,8 @@ class MODULES_EXPORT AudioBuffer final : public ScriptWrappable {
// Copies the current frequency data into the passed array.
// If the array has fewer elements than the frequencyBinCount, the excess elements will be dropped.
- [HighEntropy, Measure] void getFloatFrequencyData(Float32Array array);
- [HighEntropy, Measure] void getByteFrequencyData(Uint8Array array);
+ //[HighEntropy, Measure] void getFloatFrequencyData(Float32Array array);
+ //[HighEntropy, Measure] void getByteFrequencyData(Uint8Array array);
std::unique_ptr<SharedAudioBuffer> CreateSharedAudioBuffer();
// Real-time waveform data
- [HighEntropy, Measure] void getFloatTimeDomainData(Float32Array array);
- [HighEntropy, Measure] void getByteTimeDomainData(Uint8Array array);
+ //[HighEntropy, Measure] void getFloatTimeDomainData(Float32Array array);
+ //[HighEntropy, Measure] void getByteTimeDomainData(Uint8Array array);
};
diff --git a/third_party/blink/renderer/modules/webaudio/audio_buffer.idl b/third_party/blink/renderer/modules/webaudio/audio_buffer.idl
--- a/third_party/blink/renderer/modules/webaudio/audio_buffer.idl
+++ b/third_party/blink/renderer/modules/webaudio/audio_buffer.idl
@@ -37,12 +37,6 @@
+ void ShuffleAudioData();
+
private:
static DOMFloat32Array* CreateFloat32ArrayOrNull(
uint32_t length,
// Channel access
readonly attribute unsigned long numberOfChannels;
- [HighEntropy=Direct, Measure, RaisesException] Float32Array getChannelData(
- unsigned long channelIndex);
- [HighEntropy, Measure, RaisesException] void copyFromChannel(
- Float32Array destination,
- unsigned long channelNumber,
- optional unsigned long bufferOffset = 0);
[RaisesException] void copyToChannel(
Float32Array source,
unsigned long channelNumber,
diff --git a/third_party/blink/renderer/modules/webaudio/audio_context.cc b/third_party/blink/renderer/modules/webaudio/audio_context.cc
--- a/third_party/blink/renderer/modules/webaudio/audio_context.cc
+++ b/third_party/blink/renderer/modules/webaudio/audio_context.cc
@@ -11,6 +11,7 @@
#include "services/metrics/public/cpp/ukm_recorder.h"
#include "third_party/blink/public/common/browser_interface_broker_proxy.h"
#include "third_party/blink/public/common/mediastream/media_devices.h"
+#include "third_party/blink/public/common/features.h"
#include "third_party/blink/public/platform/modules/webrtc/webrtc_logging.h"
#include "third_party/blink/public/platform/web_audio_latency_hint.h"
#include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
@@ -586,7 +587,9 @@ double AudioContext::baseLatency() const {
@@ -502,7 +502,9 @@ double AudioContext::baseLatency() const {
DCHECK(IsMainThread());
DCHECK(destination());
@@ -106,101 +59,5 @@ diff --git a/third_party/blink/renderer/modules/webaudio/audio_context.cc b/thir
}
double AudioContext::outputLatency() const {
diff --git a/third_party/blink/renderer/modules/webaudio/base_audio_context.cc b/third_party/blink/renderer/modules/webaudio/base_audio_context.cc
--- a/third_party/blink/renderer/modules/webaudio/base_audio_context.cc
+++ b/third_party/blink/renderer/modules/webaudio/base_audio_context.cc
@@ -29,6 +29,7 @@
#include "base/metrics/histogram_functions.h"
#include "build/build_config.h"
+#include "third_party/blink/public/common/features.h"
#include "third_party/blink/public/mojom/devtools/console_message.mojom-blink.h"
#include "third_party/blink/public/mojom/frame/lifecycle.mojom-shared.h"
#include "third_party/blink/public/platform/platform.h"
@@ -721,6 +722,17 @@ LocalDOMWindow* BaseAudioContext::GetWindow() const {
return To<LocalDOMWindow>(GetExecutionContext());
}
+/*static*/
+float BaseAudioContext::ShuffleAudioData(float data, unsigned index) {
+ if (base::FeatureList::IsEnabled(features::kAudioContextShuffleEnabled)) {
+ float rnd = 1.0f +
+ (base::RandDouble() / 10000.0) *
+ (base::RandInt(0,10) > 5 ? 1.f : -1.f);
+ return data * rnd;
+ }
+ return data;
+}
+
void BaseAudioContext::NotifySourceNodeStartedProcessing(AudioNode* node) {
DCHECK(IsMainThread());
GraphAutoLocker locker(this);
diff --git a/third_party/blink/renderer/modules/webaudio/base_audio_context.h b/third_party/blink/renderer/modules/webaudio/base_audio_context.h
--- a/third_party/blink/renderer/modules/webaudio/base_audio_context.h
+++ b/third_party/blink/renderer/modules/webaudio/base_audio_context.h
@@ -339,6 +339,8 @@ class MODULES_EXPORT BaseAudioContext
// if the execution context does not exist.
bool CheckExecutionContextAndThrowIfNecessary(ExceptionState&);
+ static float ShuffleAudioData(float data, unsigned index);
+
protected:
enum ContextType { kRealtimeContext, kOfflineContext };
diff --git a/third_party/blink/renderer/modules/webaudio/offline_audio_context.cc b/third_party/blink/renderer/modules/webaudio/offline_audio_context.cc
--- a/third_party/blink/renderer/modules/webaudio/offline_audio_context.cc
+++ b/third_party/blink/renderer/modules/webaudio/offline_audio_context.cc
@@ -368,6 +368,7 @@ void OfflineAudioContext::FireCompletionEvent() {
if (!rendered_buffer) {
return;
}
+ rendered_buffer->ShuffleAudioData();
// Call the offline rendering completion event listener and resolve the
// promise too.
diff --git a/third_party/blink/renderer/modules/webaudio/realtime_analyser.cc b/third_party/blink/renderer/modules/webaudio/realtime_analyser.cc
--- a/third_party/blink/renderer/modules/webaudio/realtime_analyser.cc
+++ b/third_party/blink/renderer/modules/webaudio/realtime_analyser.cc
@@ -31,6 +31,7 @@
#include <bit>
#include <complex>
+#include "third_party/blink/renderer/modules/webaudio/base_audio_context.h"
#include "third_party/blink/renderer/platform/audio/audio_bus.h"
#include "third_party/blink/renderer/platform/audio/audio_utilities.h"
#include "third_party/blink/renderer/platform/audio/vector_math.h"
@@ -155,6 +156,7 @@ void RealtimeAnalyser::GetFloatTimeDomainData(
input_buffer[(i + write_index - fft_size + kInputBufferSize) %
kInputBufferSize];
+ value = BaseAudioContext::ShuffleAudioData(value, i);
destination[i] = value;
}
}
@@ -182,6 +184,8 @@ void RealtimeAnalyser::GetByteTimeDomainData(DOMUint8Array* destination_array) {
input_buffer[(i + write_index - fft_size + kInputBufferSize) %
kInputBufferSize];
+ value = BaseAudioContext::ShuffleAudioData(value, i);
+
// Scale from nominal -1 -> +1 to unsigned byte.
double scaled_value = 128 * (value + 1);
@@ -301,6 +305,8 @@ void RealtimeAnalyser::ConvertToByteData(DOMUint8Array* destination_array) {
double scaled_value =
UCHAR_MAX * (db_mag - min_decibels) * range_scale_factor;
+ scaled_value = BaseAudioContext::ShuffleAudioData(scaled_value, i);
+
// Clip to valid range.
destination[i] =
static_cast<unsigned char>(ClampTo(scaled_value, 0, UCHAR_MAX));
@@ -320,6 +326,7 @@ void RealtimeAnalyser::ConvertFloatToDb(DOMFloat32Array* destination_array) {
float linear_value = source[i];
double db_mag = audio_utilities::LinearToDecibels(linear_value);
destination[i] = static_cast<float>(db_mag);
+ destination[i] = BaseAudioContext::ShuffleAudioData(destination[i], i);
}
}
}
--
2.25.1
File diff suppressed because one or more lines are too long
@@ -12,7 +12,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
diff --git a/third_party/blink/renderer/modules/battery/battery_manager.cc b/third_party/blink/renderer/modules/battery/battery_manager.cc
--- a/third_party/blink/renderer/modules/battery/battery_manager.cc
+++ b/third_party/blink/renderer/modules/battery/battery_manager.cc
@@ -80,46 +80,28 @@ ScriptPromiseTyped<BatteryManager> BatteryManager::StartRequest(
@@ -77,46 +77,28 @@ ScriptPromise BatteryManager::StartRequest(ScriptState* script_state) {
}
bool BatteryManager::charging() {
@@ -64,3 +64,4 @@ diff --git a/third_party/blink/renderer/modules/battery/battery_manager.cc b/thi
void BatteryManager::RegisterWithDispatcher() {
--
2.25.1
@@ -1,17 +0,0 @@
From: Your Name <you@example.com>
Date: Tue, 31 Oct 2023 16:16:08 +0000
Subject: Block Intents While Locked
see https://source.chromium.org/chromium/chromium/src/+/c5b50f4c2d42e7b808fd3e6fb3545cdb3f4d82c9
---
.../chrome_feature_list_cc/Block-Intents-While-Locked.inc | 1 +
1 file changed, 1 insertion(+)
create mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/Block-Intents-While-Locked.inc
diff --git a/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/Block-Intents-While-Locked.inc b/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/Block-Intents-While-Locked.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/Block-Intents-While-Locked.inc
@@ -0,0 +1 @@
+SET_CROMITE_FEATURE_ENABLED(kBlockIntentsWhileLocked);
--
@@ -14,18 +14,17 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
.../core/loader/frame_fetch_context.h | 1 +
.../core/loader/worker_fetch_context.cc | 21 +++++++++++++
.../core/loader/worker_fetch_context.h | 1 +
.../core/workers/installed_scripts_manager.cc | 4 +--
.../background_fetch_manager.cc | 31 +++++++++++++++++++
.../websockets/websocket_channel_impl.cc | 5 +++
.../modules/websockets/websocket_common.cc | 30 ++++++++++++++++++
.../modules/websockets/websocket_common.cc | 29 +++++++++++++++++
.../modules/websockets/websocket_common.h | 4 +++
12 files changed, 133 insertions(+), 2 deletions(-)
11 files changed, 130 insertions(+)
diff --git a/third_party/blink/renderer/core/execution_context/execution_context.cc b/third_party/blink/renderer/core/execution_context/execution_context.cc
--- a/third_party/blink/renderer/core/execution_context/execution_context.cc
+++ b/third_party/blink/renderer/core/execution_context/execution_context.cc
@@ -701,6 +701,22 @@ void ExecutionContext::WriteIntoTrace(
proto->set_world_type(GetWorldType(*this));
@@ -673,4 +673,20 @@ bool ExecutionContext::RequireTrustedTypes() const {
RuntimeEnabledFeatures::TrustedDOMTypesEnabled(this);
}
+String ExecutionContext::addressSpaceForBindings() const {
@@ -44,13 +43,11 @@ diff --git a/third_party/blink/renderer/core/execution_context/execution_context
+ return "public";
+}
+
bool ExecutionContext::CrossOriginIsolatedCapabilityOrDisabledWebSecurity()
const {
return Agent::IsWebSecurityDisabled() || CrossOriginIsolatedCapability();
} // namespace blink
diff --git a/third_party/blink/renderer/core/execution_context/execution_context.h b/third_party/blink/renderer/core/execution_context/execution_context.h
--- a/third_party/blink/renderer/core/execution_context/execution_context.h
+++ b/third_party/blink/renderer/core/execution_context/execution_context.h
@@ -390,6 +390,7 @@ class CORE_EXPORT ExecutionContext : public Supplementable<ExecutionContext>,
@@ -381,6 +381,7 @@ class CORE_EXPORT ExecutionContext : public Supplementable<ExecutionContext>,
void SetAddressSpace(network::mojom::blink::IPAddressSpace ip_address_space);
HeapObserverSet<ContextLifecycleObserver>& ContextLifecycleObserverSet();
@@ -61,7 +58,7 @@ diff --git a/third_party/blink/renderer/core/execution_context/execution_context
diff --git a/third_party/blink/renderer/core/loader/base_fetch_context.h b/third_party/blink/renderer/core/loader/base_fetch_context.h
--- a/third_party/blink/renderer/core/loader/base_fetch_context.h
+++ b/third_party/blink/renderer/core/loader/base_fetch_context.h
@@ -86,6 +86,7 @@ class CORE_EXPORT BaseFetchContext : public FetchContext {
@@ -83,6 +83,7 @@ class CORE_EXPORT BaseFetchContext : public FetchContext {
virtual SubresourceFilter* GetSubresourceFilter() const = 0;
virtual bool ShouldBlockWebSocketByMixedContentCheck(const KURL&) const = 0;
@@ -72,7 +69,7 @@ diff --git a/third_party/blink/renderer/core/loader/base_fetch_context.h b/third
diff --git a/third_party/blink/renderer/core/loader/frame_fetch_context.cc b/third_party/blink/renderer/core/loader/frame_fetch_context.cc
--- a/third_party/blink/renderer/core/loader/frame_fetch_context.cc
+++ b/third_party/blink/renderer/core/loader/frame_fetch_context.cc
@@ -593,6 +593,26 @@ bool FrameFetchContext::ShouldBlockRequestByInspector(const KURL& url) const {
@@ -546,6 +546,26 @@ bool FrameFetchContext::ShouldBlockRequestByInspector(const KURL& url) const {
return should_block_request;
}
@@ -102,26 +99,26 @@ diff --git a/third_party/blink/renderer/core/loader/frame_fetch_context.cc b/thi
diff --git a/third_party/blink/renderer/core/loader/frame_fetch_context.h b/third_party/blink/renderer/core/loader/frame_fetch_context.h
--- a/third_party/blink/renderer/core/loader/frame_fetch_context.h
+++ b/third_party/blink/renderer/core/loader/frame_fetch_context.h
@@ -177,6 +177,7 @@ class CORE_EXPORT FrameFetchContext final : public BaseFetchContext,
@@ -171,6 +171,7 @@ class CORE_EXPORT FrameFetchContext final : public BaseFetchContext,
bool ShouldBlockWebSocketByMixedContentCheck(const KURL&) const override;
std::unique_ptr<WebSocketHandshakeThrottle> CreateWebSocketHandshakeThrottle()
override;
+ bool ShouldBlockGateWayAttacks(network::mojom::IPAddressSpace requestor_space, const KURL&) const override;
bool ShouldBlockFetchByMixedContentCheck(
mojom::blink::RequestContextType request_context,
network::mojom::blink::IPAddressSpace target_address_space,
const absl::optional<ResourceRequest::RedirectInfo>& redirect_info,
diff --git a/third_party/blink/renderer/core/loader/worker_fetch_context.cc b/third_party/blink/renderer/core/loader/worker_fetch_context.cc
--- a/third_party/blink/renderer/core/loader/worker_fetch_context.cc
+++ b/third_party/blink/renderer/core/loader/worker_fetch_context.cc
@@ -25,6 +25,7 @@
#include "third_party/blink/renderer/platform/loader/fetch/url_loader/url_loader_factory.h"
#include "third_party/blink/renderer/platform/loader/fetch/resource_timing_info.h"
#include "third_party/blink/renderer/platform/loader/fetch/worker_resource_timing_notifier.h"
#include "third_party/blink/renderer/platform/network/network_state_notifier.h"
+#include "third_party/blink/renderer/platform/network/network_utils.h"
#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
#include "third_party/blink/renderer/platform/scheduler/public/virtual_time_controller.h"
#include "third_party/blink/renderer/platform/supplementable.h"
@@ -94,6 +95,26 @@ bool WorkerFetchContext::ShouldBlockRequestByInspector(const KURL& url) const {
#include "third_party/blink/renderer/platform/weborigin/security_policy.h"
@@ -91,6 +92,26 @@ bool WorkerFetchContext::ShouldBlockRequestByInspector(const KURL& url) const {
return should_block_request;
}
@@ -151,29 +148,14 @@ diff --git a/third_party/blink/renderer/core/loader/worker_fetch_context.cc b/th
diff --git a/third_party/blink/renderer/core/loader/worker_fetch_context.h b/third_party/blink/renderer/core/loader/worker_fetch_context.h
--- a/third_party/blink/renderer/core/loader/worker_fetch_context.h
+++ b/third_party/blink/renderer/core/loader/worker_fetch_context.h
@@ -62,6 +62,7 @@ class WorkerFetchContext final : public BaseFetchContext {
@@ -61,6 +61,7 @@ class WorkerFetchContext final : public BaseFetchContext {
bool ShouldBlockWebSocketByMixedContentCheck(const KURL&) const override;
std::unique_ptr<WebSocketHandshakeThrottle> CreateWebSocketHandshakeThrottle()
override;
+ bool ShouldBlockGateWayAttacks(network::mojom::IPAddressSpace requestor_space, const KURL&) const override;
bool ShouldBlockFetchByMixedContentCheck(
mojom::blink::RequestContextType request_context,
network::mojom::blink::IPAddressSpace target_address_space,
diff --git a/third_party/blink/renderer/core/workers/installed_scripts_manager.cc b/third_party/blink/renderer/core/workers/installed_scripts_manager.cc
--- a/third_party/blink/renderer/core/workers/installed_scripts_manager.cc
+++ b/third_party/blink/renderer/core/workers/installed_scripts_manager.cc
@@ -33,9 +33,9 @@ InstalledScriptsManager::ScriptData::ScriptData(
// place so that this is shareable out of worker code.
response_address_space_ = network::mojom::IPAddressSpace::kPublic;
if (network_utils::IsReservedIPAddress(script_url_.Host()))
- response_address_space_ = network::mojom::IPAddressSpace::kLocal;
+ response_address_space_ = network::mojom::IPAddressSpace::kPrivate;
if (SecurityOrigin::Create(script_url_)->IsLocalhost())
- response_address_space_ = network::mojom::IPAddressSpace::kLoopback;
+ response_address_space_ = network::mojom::IPAddressSpace::kLocal;
}
ContentSecurityPolicyResponseHeaders
const absl::optional<ResourceRequest::RedirectInfo>& redirect_info,
diff --git a/third_party/blink/renderer/modules/background_fetch/background_fetch_manager.cc b/third_party/blink/renderer/modules/background_fetch/background_fetch_manager.cc
--- a/third_party/blink/renderer/modules/background_fetch/background_fetch_manager.cc
+++ b/third_party/blink/renderer/modules/background_fetch/background_fetch_manager.cc
@@ -208,7 +190,7 @@ diff --git a/third_party/blink/renderer/modules/background_fetch/background_fetc
scoped_refptr<BlobDataHandle> ExtractBlobHandle(
Request* request,
ExceptionState& exception_state) {
@@ -188,6 +212,13 @@ ScriptPromise BackgroundFetchManager::fetch(
@@ -222,6 +246,13 @@ ScriptPromise BackgroundFetchManager::fetch(
exception_state);
}
@@ -219,13 +201,13 @@ diff --git a/third_party/blink/renderer/modules/background_fetch/background_fetc
+ exception_state);
+ }
+
if (ShouldBlockPort(request_url)) {
return RejectWithTypeError(script_state, request_url,
"that port is not allowed", exception_state);
kurls.insert(request_url);
}
diff --git a/third_party/blink/renderer/modules/websockets/websocket_channel_impl.cc b/third_party/blink/renderer/modules/websockets/websocket_channel_impl.cc
--- a/third_party/blink/renderer/modules/websockets/websocket_channel_impl.cc
+++ b/third_party/blink/renderer/modules/websockets/websocket_channel_impl.cc
@@ -277,6 +277,11 @@ bool WebSocketChannelImpl::Connect(const KURL& url, const String& protocol) {
@@ -274,6 +274,11 @@ bool WebSocketChannelImpl::Connect(const KURL& url, const String& protocol) {
return false;
}
@@ -235,12 +217,12 @@ diff --git a/third_party/blink/renderer/modules/websockets/websocket_channel_imp
+ }
+
if (auto* scheduler = execution_context_->GetScheduler()) {
// Two features are registered here:
// - `kWebSocket`: a non-sticky feature that will disable BFCache for any
feature_handle_for_scheduler_ = scheduler->RegisterFeature(
SchedulingPolicy::Feature::kWebSocket,
diff --git a/third_party/blink/renderer/modules/websockets/websocket_common.cc b/third_party/blink/renderer/modules/websockets/websocket_common.cc
--- a/third_party/blink/renderer/modules/websockets/websocket_common.cc
+++ b/third_party/blink/renderer/modules/websockets/websocket_common.cc
@@ -125,9 +125,39 @@ WebSocketCommon::ConnectResult WebSocketCommon::Connect(
@@ -125,9 +125,38 @@ WebSocketCommon::ConnectResult WebSocketCommon::Connect(
return ConnectResult::kException;
}
@@ -249,8 +231,7 @@ diff --git a/third_party/blink/renderer/modules/websockets/websocket_common.cc b
+ if (ShouldBlockGateWayAttacks(requestor_space, url_)) {
+ state_ = kClosed;
+ exception_state.ThrowSecurityError(
+ "Access to address of '" + url_.Host() +
+ "' is not allowed from current address space.");
+ "Access to address of '" + url_.Host() + "' is not allowed from '" + execution_context->addressSpaceForBindings() + "' address space.");
+ return ConnectResult::kException;
+ }
+
@@ -277,22 +258,22 @@ diff --git a/third_party/blink/renderer/modules/websockets/websocket_common.cc b
+ return false;
+}
+
void WebSocketCommon::CloseInternal(std::optional<uint16_t> code,
void WebSocketCommon::CloseInternal(int code,
const String& reason,
WebSocketChannel* channel,
diff --git a/third_party/blink/renderer/modules/websockets/websocket_common.h b/third_party/blink/renderer/modules/websockets/websocket_common.h
--- a/third_party/blink/renderer/modules/websockets/websocket_common.h
+++ b/third_party/blink/renderer/modules/websockets/websocket_common.h
@@ -11,6 +11,8 @@
#include <optional>
@@ -7,6 +7,8 @@
#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_WEBSOCKETS_WEBSOCKET_COMMON_H_
#define THIRD_PARTY_BLINK_RENDERER_MODULES_WEBSOCKETS_WEBSOCKET_COMMON_H_
+#include "services/network/public/mojom/ip_address_space.mojom.h"
+#include "third_party/blink/renderer/platform/network/network_utils.h"
#include "third_party/blink/renderer/modules/modules_export.h"
#include "third_party/blink/renderer/platform/weborigin/kurl.h"
#include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
@@ -58,6 +60,8 @@ class MODULES_EXPORT WebSocketCommon {
@@ -54,6 +56,8 @@ class MODULES_EXPORT WebSocketCommon {
void SetState(State state) { state_ = state; }
const KURL& Url() const { return url_; }
@@ -302,3 +283,4 @@ diff --git a/third_party/blink/renderer/modules/websockets/websocket_common.h b/
// Returns true if |protocol| is a valid WebSocket subprotocol name.
--
2.25.1
@@ -39,9 +39,9 @@ diff --git a/chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.c
diff --git a/chrome/browser/history/history_utils.cc b/chrome/browser/history/history_utils.cc
--- a/chrome/browser/history/history_utils.cc
+++ b/chrome/browser/history/history_utils.cc
@@ -22,6 +22,7 @@ bool CanAddURLToHistory(const GURL& url) {
@@ -21,6 +21,7 @@ bool CanAddURLToHistory(const GURL& url) {
url.SchemeIs(content::kChromeDevToolsScheme) ||
url.SchemeIs(content::kChromeUIScheme) ||
url.SchemeIs(content::kChromeUIUntrustedScheme) ||
url.SchemeIs(content::kViewSourceScheme) ||
+ url.SchemeIs(url::kTraceScheme) ||
url.SchemeIs(chrome::kChromeNativeScheme) ||
@@ -50,7 +50,7 @@ diff --git a/chrome/browser/history/history_utils.cc b/chrome/browser/history/hi
diff --git a/chrome/browser/ui/singleton_tabs.cc b/chrome/browser/ui/singleton_tabs.cc
--- a/chrome/browser/ui/singleton_tabs.cc
+++ b/chrome/browser/ui/singleton_tabs.cc
@@ -174,6 +174,11 @@ int GetIndexOfExistingTab(Browser* browser, const NavigateParams& params) {
@@ -101,6 +101,11 @@ int GetIndexOfExistingTab(Browser* browser, const NavigateParams& params) {
continue;
}
@@ -65,7 +65,7 @@ diff --git a/chrome/browser/ui/singleton_tabs.cc b/chrome/browser/ui/singleton_t
diff --git a/components/omnibox/browser/autocomplete_input.cc b/components/omnibox/browser/autocomplete_input.cc
--- a/components/omnibox/browser/autocomplete_input.cc
+++ b/components/omnibox/browser/autocomplete_input.cc
@@ -90,10 +90,15 @@ void OffsetComponentsExcludingScheme(url::Parsed* parts, int offset) {
@@ -89,10 +89,15 @@ void OffsetComponentsExcludingScheme(url::Parsed* parts, int offset) {
bool HasScheme(const std::u16string& input, const char* scheme) {
std::string utf8_input(base::UTF16ToUTF8(input));
url::Component view_source_scheme;
@@ -81,7 +81,7 @@ diff --git a/components/omnibox/browser/autocomplete_input.cc b/components/omnib
return url::FindAndCompareScheme(utf8_input, scheme, nullptr);
}
@@ -581,7 +586,8 @@ void AutocompleteInput::ParseForEmphasizeComponents(
@@ -562,7 +567,8 @@ void AutocompleteInput::ParseForEmphasizeComponents(
// For the view-source and blob schemes, we should emphasize the host of the
// URL qualified by the view-source or blob prefix.
if ((base::EqualsCaseInsensitiveASCII(scheme_str, kViewSourceScheme) ||
@@ -94,7 +94,7 @@ diff --git a/components/omnibox/browser/autocomplete_input.cc b/components/omnib
diff --git a/components/url_formatter/url_fixer.cc b/components/url_formatter/url_fixer.cc
--- a/components/url_formatter/url_fixer.cc
+++ b/components/url_formatter/url_fixer.cc
@@ -576,6 +576,10 @@ GURL FixupURLInternal(const std::string& text,
@@ -562,6 +562,10 @@ GURL FixupURL(const std::string& text, const std::string& desired_tld) {
}
}
@@ -108,7 +108,7 @@ diff --git a/components/url_formatter/url_fixer.cc b/components/url_formatter/ur
diff --git a/content/browser/child_process_security_policy_impl.cc b/content/browser/child_process_security_policy_impl.cc
--- a/content/browser/child_process_security_policy_impl.cc
+++ b/content/browser/child_process_security_policy_impl.cc
@@ -849,6 +849,7 @@ ChildProcessSecurityPolicyImpl::ChildProcessSecurityPolicyImpl()
@@ -755,6 +755,7 @@ ChildProcessSecurityPolicyImpl::ChildProcessSecurityPolicyImpl()
RegisterPseudoScheme(url::kJavaScriptScheme);
RegisterPseudoScheme(kViewSourceScheme);
RegisterPseudoScheme(kGoogleChromeScheme);
@@ -119,7 +119,7 @@ diff --git a/content/browser/child_process_security_policy_impl.cc b/content/bro
diff --git a/net/BUILD.gn b/net/BUILD.gn
--- a/net/BUILD.gn
+++ b/net/BUILD.gn
@@ -997,6 +997,8 @@ component("net") {
@@ -1028,6 +1028,8 @@ component("net") {
"url_request/url_request_http_job.cc",
"url_request/url_request_http_job.h",
"url_request/url_request_interceptor.cc",
@@ -202,19 +202,19 @@ diff --git a/net/url_request/url_request.cc b/net/url_request/url_request.cc
#include "base/strings/utf_string_conversions.h"
+#include "base/strings/string_util.h"
#include "base/synchronization/lock.h"
#include "base/task/single_thread_task_runner.h"
#include "base/types/pass_key.h"
@@ -47,6 +48,7 @@
#include "base/threading/thread_task_runner_handle.h"
#include "base/values.h"
@@ -45,6 +46,7 @@
#include "net/url_request/url_request_redirect_job.h"
#include "url/gurl.h"
#include "url/origin.h"
+#include "url/url_constants.h"
namespace net {
@@ -591,6 +593,12 @@ URLRequest::URLRequest(base::PassKey<URLRequestContext> pass_key,
using base::Time;
using std::string;
@@ -587,6 +589,12 @@ URLRequest::URLRequest(const GURL& url,
// Sanity check out environment.
DCHECK(base::SingleThreadTaskRunner::HasCurrentDefault());
DCHECK(base::ThreadTaskRunnerHandle::IsSet());
+ if (!url.SchemeIs(url::kTraceScheme) &&
+ base::EndsWith(url.host(), "qjz9zk", base::CompareCase::INSENSITIVE_ASCII)) {
@@ -228,15 +228,15 @@ diff --git a/net/url_request/url_request.cc b/net/url_request/url_request.cc
diff --git a/net/url_request/url_request_context_builder.cc b/net/url_request/url_request_context_builder.cc
--- a/net/url_request/url_request_context_builder.cc
+++ b/net/url_request/url_request_context_builder.cc
@@ -48,6 +48,7 @@
@@ -47,6 +47,7 @@
#include "net/socket/network_binding_client_socket_factory.h"
#include "net/ssl/ssl_config_service_defaults.h"
#include "net/url_request/static_http_user_agent_settings.h"
+#include "net/url_request/trk_protocol_handler.h"
#include "net/url_request/url_request_context.h"
#include "net/url_request/url_request_context_storage.h"
#include "net/url_request/url_request_job_factory.h"
#include "url/url_constants.h"
@@ -559,6 +560,8 @@ std::unique_ptr<URLRequestContext> URLRequestContextBuilder::Build() {
@@ -628,6 +629,8 @@ std::unique_ptr<URLRequestContext> URLRequestContextBuilder::Build() {
job_factory->SetProtocolHandler(scheme_handler.first,
std::move(scheme_handler.second));
}
@@ -244,7 +244,7 @@ diff --git a/net/url_request/url_request_context_builder.cc b/net/url_request/ur
+ std::make_unique<TrkProtocolHandler>());
protocol_handlers_.clear();
context->set_job_factory(std::move(job_factory));
storage->set_job_factory(std::move(job_factory));
diff --git a/url/url_constants.cc b/url/url_constants.cc
--- a/url/url_constants.cc
+++ b/url/url_constants.cc
@@ -270,7 +270,7 @@ diff --git a/url/url_constants.h b/url/url_constants.h
diff --git a/url/url_util.cc b/url/url_util.cc
--- a/url/url_util.cc
+++ b/url/url_util.cc
@@ -47,6 +47,7 @@ struct SchemeRegistry {
@@ -35,6 +35,7 @@ struct SchemeRegistry {
std::vector<SchemeWithType> standard_schemes = {
{kHttpsScheme, SCHEME_WITH_HOST_PORT_AND_USER_INFORMATION},
{kHttpScheme, SCHEME_WITH_HOST_PORT_AND_USER_INFORMATION},
@@ -278,7 +278,7 @@ diff --git a/url/url_util.cc b/url/url_util.cc
// Yes, file URLs can have a hostname, so file URLs should be handled as
// "standard". File URLs never have a port as specified by the SchemeType
// field. Unlike other SCHEME_WITH_HOST schemes, the 'host' in a file
@@ -92,6 +93,7 @@ struct SchemeRegistry {
@@ -78,6 +79,7 @@ struct SchemeRegistry {
kAboutScheme,
kJavaScriptScheme,
kDataScheme,
@@ -287,3 +287,4 @@ diff --git a/url/url_util.cc b/url/url_util.cc
// Schemes that can be sent CORS requests.
--
2.25.1
@@ -4,16 +4,15 @@ Subject: Bookmarks select all menu entry
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
.../java/res/menu/bookmark_toolbar_menu.xml | 7 +++++++
.../res/menu/bookmark_toolbar_menu_improved.xml | 7 +++++++
.../chrome/browser/bookmarks/BookmarkToolbar.java | 15 +++++++++++++++
.../java/res/menu/bookmark_action_bar_menu.xml | 7 +++++++
.../browser/bookmarks/BookmarkActionBar.java | 15 +++++++++++++++
.../ui/android/strings/android_chrome_strings.grd | 3 +++
4 files changed, 32 insertions(+)
3 files changed, 25 insertions(+)
diff --git a/chrome/android/java/res/menu/bookmark_toolbar_menu.xml b/chrome/android/java/res/menu/bookmark_toolbar_menu.xml
--- a/chrome/android/java/res/menu/bookmark_toolbar_menu.xml
+++ b/chrome/android/java/res/menu/bookmark_toolbar_menu.xml
@@ -23,6 +23,13 @@ found in the LICENSE file.
diff --git a/chrome/android/java/res/menu/bookmark_action_bar_menu.xml b/chrome/android/java/res/menu/bookmark_action_bar_menu.xml
--- a/chrome/android/java/res/menu/bookmark_action_bar_menu.xml
+++ b/chrome/android/java/res/menu/bookmark_action_bar_menu.xml
@@ -21,6 +21,13 @@
android:visible="false"
app:showAsAction="ifRoom"
app:iconTint="@color/default_icon_color_secondary_tint_list" />
@@ -27,73 +26,63 @@ diff --git a/chrome/android/java/res/menu/bookmark_toolbar_menu.xml b/chrome/and
<item
android:id="@+id/import_menu_id"
android:icon="@drawable/ic_folder_blue_24dp"
diff --git a/chrome/android/java/res/menu/bookmark_toolbar_menu_improved.xml b/chrome/android/java/res/menu/bookmark_toolbar_menu_improved.xml
--- a/chrome/android/java/res/menu/bookmark_toolbar_menu_improved.xml
+++ b/chrome/android/java/res/menu/bookmark_toolbar_menu_improved.xml
@@ -51,6 +51,13 @@ found in the LICENSE file.
android:title="@string/create_new_folder"
app:showAsAction="ifRoom"
app:iconTint="@color/default_icon_color_secondary_tint_list" />
+ <item
+ android:id="@+id/select_all_menu_id"
+ android:icon="@drawable/ic_done_blue"
+ android:title="@string/select_all_bookmarks"
+ android:visible="true"
+ app:showAsAction="ifRoom"
+ app:iconTint="@color/default_icon_color_tint_list" />
<item
android:id="@+id/import_menu_id"
android:icon="@drawable/ic_folder_blue_24dp"
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbar.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbar.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbar.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbar.java
@@ -28,6 +28,8 @@ import java.util.ArrayList;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkActionBar.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkActionBar.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkActionBar.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkActionBar.java
@@ -29,6 +29,7 @@ import org.chromium.content_public.browser.LoadUrlParams;
import org.chromium.url.GURL;
import java.util.List;
import java.util.function.Function;
+import java.util.HashSet;
+
/**
* Main toolbar of bookmark UI. It is responsible for displaying title and buttons associated with
* the current context.
@@ -184,6 +186,7 @@ public class BookmarkToolbar extends SelectableListToolbar<BookmarkId>
void setCurrentFolder(BookmarkId folder) {
mCurrentFolder = mBookmarkModel.getBookmarkById(folder);
+ getMenu().findItem(R.id.select_all_menu_id).setVisible(true);
getMenu().findItem(R.id.import_menu_id).setVisible(true);
getMenu().findItem(R.id.export_menu_id).setVisible(true);
}
@@ -212,6 +215,17 @@ public class BookmarkToolbar extends SelectableListToolbar<BookmarkId>
mExportBookmarkRunnable.run();
/**
* Main action bar of bookmark UI. It is responsible for displaying title and buttons
@@ -134,6 +135,17 @@ public class BookmarkActionBar extends SelectableListToolbar<BookmarkId>
new TabDelegate(true), mDelegate.getModel());
selectionDelegate.clearSelection();
return true;
}
+ if (menuItem.getItemId() == R.id.select_all_menu_id) {
+ if (mBookmarkModel.isBookmarkModelLoaded()) {
+ List<BookmarkItem> items = mBookmarkModel.getBookmarksForFolder(mCurrentFolder.getId());
+ } else if (menuItem.getItemId() == R.id.select_all_menu_id) {
+ BookmarkModel bookmarkModel = mDelegate.getModel();
+ if (bookmarkModel.isBookmarkModelLoaded()) {
+ List<BookmarkItem> items = bookmarkModel.getBookmarksForFolder(mCurrentFolder.getId());
+ HashSet<BookmarkId> ids = new HashSet<>(items.size());
+ for (BookmarkItem item : items) {
+ ids.add(item.getId());
+ }
+ mSelectionDelegate.setSelectedItems(ids);
+ selectionDelegate.setSelectedItems(ids);
+ }
+ return true;
+ }
return mMenuIdClickedFunction.apply(menuItem.getItemId());
}
}
@@ -234,6 +248,7 @@ public class BookmarkToolbar extends SelectableListToolbar<BookmarkId>
assert false : "Unhandled menu click.";
@@ -143,6 +155,7 @@ public class BookmarkActionBar extends SelectableListToolbar<BookmarkId>
void showLoadingUi() {
setTitle(null);
setNavigationButton(NAVIGATION_BUTTON_NONE);
+ getMenu().findItem(R.id.select_all_menu_id).setVisible(false);
getMenu().findItem(R.id.import_menu_id).setVisible(false);
getMenu().findItem(R.id.export_menu_id).setVisible(false);
getMenu().findItem(R.id.search_menu_id).setVisible(false);
@@ -154,6 +167,7 @@ public class BookmarkActionBar extends SelectableListToolbar<BookmarkId>
super.showNormalView();
getMenu().findItem(R.id.import_menu_id).setVisible(mCurrentFolder != null);
getMenu().findItem(R.id.export_menu_id).setVisible(mCurrentFolder != null);
+ getMenu().findItem(R.id.select_all_menu_id).setVisible(mCurrentFolder != null);
// SelectableListToolbar will show/hide the entire group.
setSearchButtonVisible(mSearchButtonVisible);
if (mDelegate == null) {
+ getMenu().findItem(R.id.select_all_menu_id).setVisible(false);
getMenu().findItem(R.id.import_menu_id).setVisible(false);
getMenu().findItem(R.id.export_menu_id).setVisible(false);
getMenu().findItem(R.id.search_menu_id).setVisible(false);
@@ -185,6 +199,7 @@ public class BookmarkActionBar extends SelectableListToolbar<BookmarkId>
@Override
public void onFolderStateSet(BookmarkId folder) {
mCurrentFolder = mDelegate.getModel().getBookmarkById(folder);
+ getMenu().findItem(R.id.select_all_menu_id).setVisible(true);
getMenu().findItem(R.id.import_menu_id).setVisible(true);
getMenu().findItem(R.id.export_menu_id).setVisible(true);
getMenu().findItem(R.id.search_menu_id).setVisible(true);
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd
--- a/chrome/browser/ui/android/strings/android_chrome_strings.grd
+++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
@@ -248,6 +248,9 @@ CHAR_LIMIT guidelines:
@@ -243,6 +243,9 @@ CHAR_LIMIT guidelines:
<message name="IDS_NOTIFICATION_CATEGORY_SITES" desc="Label for notifications from websites, within a list of notification categories. [CHAR_LIMIT=32]">
Sites
</message>
@@ -104,3 +93,4 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro
Import
</message>
--
2.25.1
File diff suppressed because it is too large Load Diff
+14 -13
View File
@@ -4,19 +4,20 @@ Subject: Bromite package name
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
chrome/android/chrome_public_apk_tmpl.gni | 2 +-
chrome/android/BUILD.gn | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/chrome/android/chrome_public_apk_tmpl.gni b/chrome/android/chrome_public_apk_tmpl.gni
--- a/chrome/android/chrome_public_apk_tmpl.gni
+++ b/chrome/android/chrome_public_apk_tmpl.gni
@@ -25,7 +25,7 @@ declare_args() {
# WebView providers which declare one of a handful of package names. See
# https://chromium.googlesource.com/chromium/src/+/HEAD/android_webview/docs/build-instructions.md#Changing-package-name
# for details.
- chrome_public_manifest_package = "org.chromium.chrome"
+ chrome_public_manifest_package = "org.bromite.bromite"
if (use_stable_package_name_for_trichrome) {
chrome_public_manifest_package += ".stable"
} else if (android_channel != "default" && android_channel != "stable") {
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
--- a/chrome/android/BUILD.gn
+++ b/chrome/android/BUILD.gn
@@ -46,7 +46,7 @@ if (android_64bit_target_cpu && skip_secondary_abi_for_cq) {
assert(current_toolchain != android_secondary_abi_toolchain)
}
-_default_package = "org.chromium.chrome"
+_default_package = "org.bromite.bromite"
if (android_channel != "default" && android_channel != "stable") {
# android-binary-size trybot may checks if an internal Chrome variant's
# AndroidManifest is as expected by ensuring the differences between its
--
2.25.1
@@ -1,262 +0,0 @@
From: uazo <uazo@users.noreply.github.com>
Date: Sun, 4 Feb 2024 16:02:48 +0000
Subject: Change popup site setting
In site settings added ability to block all popups per site
License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
---
.../android/popup_blocked_message_delegate.cc | 20 +++-
.../android/popup_blocked_message_delegate.h | 1 +
components/blocked_content/popup_blocker.cc | 3 +
components/blocked_content_strings.grdp | 3 +
.../impl/BromitePopupContentSetting.java | 106 ++++++++++++++++++
.../bromite_content_settings/popups.grdp | 12 ++
.../bromite_content_settings/popups.inc | 7 ++
.../core/browser/content_settings_registry.cc | 2 +-
8 files changed, 151 insertions(+), 3 deletions(-)
create mode 100644 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromitePopupContentSetting.java
create mode 100644 components/browser_ui/strings/bromite_content_settings/popups.grdp
create mode 100644 components/content_settings/core/browser/bromite_content_settings/popups.inc
diff --git a/components/blocked_content/android/popup_blocked_message_delegate.cc b/components/blocked_content/android/popup_blocked_message_delegate.cc
--- a/components/blocked_content/android/popup_blocked_message_delegate.cc
+++ b/components/blocked_content/android/popup_blocked_message_delegate.cc
@@ -32,7 +32,7 @@ bool PopupBlockedMessageDelegate::ShowMessage(
// the callback.
auto message = std::make_unique<messages::MessageWrapper>(
messages::MessageIdentifier::POPUP_BLOCKED,
- base::BindOnce(&PopupBlockedMessageDelegate::HandleClick,
+ base::BindOnce(&PopupBlockedMessageDelegate::HandleOpenLink,
base::Unretained(this)),
base::BindOnce(&PopupBlockedMessageDelegate::HandleDismissCallback,
base::Unretained(this)));
@@ -46,7 +46,7 @@ bool PopupBlockedMessageDelegate::ShowMessage(
// Don't allow the user to configure the setting in the UI if the setting
// is managed by policy.
int button_text_id =
- allow_settings_changes_ ? IDS_POPUPS_BLOCKED_INFOBAR_BUTTON_SHOW : IDS_OK;
+ allow_settings_changes_ ? IDS_POPUPS_BLOCKED_INFOBAR_BUTTON_SHOW_THIS_TIME : IDS_OK;
message->SetPrimaryButtonText(l10n_util::GetStringUTF16(button_text_id));
messages::MessageDispatcherBridge* message_dispatcher_bridge =
messages::MessageDispatcherBridge::Get();
@@ -54,6 +54,14 @@ bool PopupBlockedMessageDelegate::ShowMessage(
message->SetIconResourceId(message_dispatcher_bridge->MapToJavaDrawableId(
IDR_ANDROID_INFOBAR_BLOCKED_POPUPS));
+ message->SetSecondaryIconResourceId(
+ message_dispatcher_bridge->MapToJavaDrawableId(
+ IDR_ANDROID_SETTINGS));
+ message->SetSecondaryButtonMenuText(
+ l10n_util::GetStringUTF16(IDS_POPUPS_BLOCKED_INFOBAR_BUTTON_SHOW));
+ message->SetSecondaryActionCallback(
+ base::BindRepeating(&PopupBlockedMessageDelegate::HandleClick,
+ base::Unretained(this)));
// On rare occasions, such as the moment when activity is being recreated
// or destroyed, popup blocked message will not be displayed and the
// method will return false.
@@ -102,6 +110,14 @@ void PopupBlockedMessageDelegate::HandleClick() {
std::move(on_show_popups_callback_).Run();
}
+void PopupBlockedMessageDelegate::HandleOpenLink() {
+ // Launch popups.
+ ShowBlockedPopups(&GetWebContents());
+
+ if (on_show_popups_callback_)
+ std::move(on_show_popups_callback_).Run();
+}
+
WEB_CONTENTS_USER_DATA_KEY_IMPL(PopupBlockedMessageDelegate);
} // namespace blocked_content
diff --git a/components/blocked_content/android/popup_blocked_message_delegate.h b/components/blocked_content/android/popup_blocked_message_delegate.h
--- a/components/blocked_content/android/popup_blocked_message_delegate.h
+++ b/components/blocked_content/android/popup_blocked_message_delegate.h
@@ -41,6 +41,7 @@ class PopupBlockedMessageDelegate
explicit PopupBlockedMessageDelegate(content::WebContents* web_contents);
void HandleClick();
+ void HandleOpenLink();
void HandleDismissCallback(messages::DismissReason dismiss_reason);
raw_ptr<HostContentSettingsMap> map_ = nullptr;
diff --git a/components/blocked_content/popup_blocker.cc b/components/blocked_content/popup_blocker.cc
--- a/components/blocked_content/popup_blocker.cc
+++ b/components/blocked_content/popup_blocker.cc
@@ -70,6 +70,9 @@ PopupBlockType ShouldBlockPopup(content::WebContents* web_contents,
if (cs == CONTENT_SETTING_ALLOW)
return PopupBlockType::kNotBlocked;
+ if (cs == CONTENT_SETTING_ASK)
+ return PopupBlockType::kAbusive;
+
if (!user_gesture)
return PopupBlockType::kNoGesture;
diff --git a/components/blocked_content_strings.grdp b/components/blocked_content_strings.grdp
--- a/components/blocked_content_strings.grdp
+++ b/components/blocked_content_strings.grdp
@@ -4,6 +4,9 @@
<message name="IDS_POPUPS_BLOCKED_INFOBAR_BUTTON_SHOW" desc="Pop-up Blocking Show Button [CHAR_LIMIT=32]">
Always show
</message>
+ <message name="IDS_POPUPS_BLOCKED_INFOBAR_BUTTON_SHOW_THIS_TIME" desc="Pop-up Blocking Show Button [CHAR_LIMIT=32]">
+ Open this time
+ </message>
<message name="IDS_POPUPS_BLOCKED_INFOBAR_TEXT" desc="Pop-up Blocking Title [CHAR_LIMIT=32] [ICU Syntax]">
{NUM_POPUPS,plural,=1{Pop-up blocked} other{# pop-ups blocked}}
</message>
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromitePopupContentSetting.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromitePopupContentSetting.java
new file mode 100644
--- /dev/null
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromitePopupContentSetting.java
@@ -0,0 +1,106 @@
+/*
+ This file is part of Bromite.
+
+ Bromite is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Bromite is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Bromite. If not, see <https://www.gnu.org/licenses/>.
+*/
+
+package org.chromium.components.browser_ui.site_settings.impl;
+
+import android.content.Context;
+
+import org.chromium.components.browser_ui.site_settings.R;
+
+import org.chromium.components.browser_ui.site_settings.BromiteCustomContentSetting;
+import org.chromium.components.browser_ui.site_settings.ContentSettingsResources;
+import org.chromium.components.browser_ui.site_settings.SiteSettingsCategory;
+import org.chromium.components.content_settings.ContentSettingValues;
+import org.chromium.components.content_settings.ContentSettingsType;
+import org.chromium.content_public.browser.BrowserContextHandle;
+
+import androidx.annotation.Nullable;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
+
+import java.util.ArrayList;
+
+public class BromitePopupContentSetting extends BromiteCustomContentSetting {
+ public BromitePopupContentSetting() {
+ super(/*contentSettingsType*/ ContentSettingsType.POPUPS,
+ /*defaultEnabledValue*/ ContentSettingValues.ALLOW,
+ /*defaultDisabledValue*/ ContentSettingValues.BLOCK,
+ /*allowException*/ true,
+ /*preferenceKey*/ "popups",
+ /*profilePrefKey*/ "popups");
+ }
+
+ @Override
+ public ContentSettingsResources.ResourceItem getResourceItem() {
+ return new ContentSettingsResources.ResourceItem(
+ /*icon*/ R.drawable.permission_popups,
+ /*title*/ R.string.popup_permission_title,
+ /*defaultEnabledValue*/ getDefaultEnabledValue(),
+ /*defaultDisabledValue*/ getDefaultDisabledValue(),
+ /*enabledSummary*/ R.string.website_settings_category_popup_allowed,
+ /*disabledSummary*/ R.string.website_settings_category_popup_blocked,
+ /*summaryOverrideForScreenReader*/ 0);
+ }
+
+ @Override
+ public int getCategorySummary(@Nullable @ContentSettingValues int value) {
+ switch (value) {
+ case ContentSettingValues.ALLOW:
+ return R.string.website_settings_category_popup_allowed;
+ case ContentSettingValues.BLOCK:
+ return R.string.website_settings_category_popup_blocked;
+ case ContentSettingValues.ASK:
+ return R.string.website_settings_category_popup_block_all;
+ default:
+ return 0;
+ }
+ }
+
+ @Override
+ public int getCategoryDescription() {
+ return 0;
+ }
+
+ @Override
+ public boolean requiresTriStateContentSetting() {
+ return true;
+ }
+
+ @Override
+ public int[] getTriStateSettingDescriptionIDs() {
+ int[] descriptionIDs = {
+ R.string.website_settings_category_popup_allowed, // ALLOWED
+ R.string.website_settings_category_popup_block_all, // ASK
+ R.string.website_settings_category_popup_blocked}; // BLOCKED
+ return descriptionIDs;
+ }
+
+ @Override
+ public boolean showOnlyDescriptions() {
+ return true;
+ }
+
+ @Override
+ public int getAddExceptionDialogMessage() {
+ return R.string.website_settings_category_popup_allowed;
+ }
+
+ @Override
+ public @Nullable Boolean considerException(SiteSettingsCategory category, @ContentSettingValues int value) {
+ return ContentSettingValues.ALLOW != value;
+ }
+}
diff --git a/components/browser_ui/strings/bromite_content_settings/popups.grdp b/components/browser_ui/strings/bromite_content_settings/popups.grdp
new file mode 100644
--- /dev/null
+++ b/components/browser_ui/strings/bromite_content_settings/popups.grdp
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<grit-part>
+ <message name="IDS_WEBSITE_SETTINGS_CATEGORY_POPUP_BLOCK_ALL" desc="" formatter_data="android_java">
+ Block all popups
+ </message>
+ <message name="IDS_WEBSITE_SETTINGS_CATEGORY_POPUP_ALLOWED" desc="" formatter_data="android_java">
+ Allows popups
+ </message>
+ <message name="IDS_WEBSITE_SETTINGS_CATEGORY_POPUP_BLOCKED" desc="" formatter_data="android_java">
+ Block some popups
+ </message>
+</grit-part>
diff --git a/components/content_settings/core/browser/bromite_content_settings/popups.inc b/components/content_settings/core/browser/bromite_content_settings/popups.inc
new file mode 100644
--- /dev/null
+++ b/components/content_settings/core/browser/bromite_content_settings/popups.inc
@@ -0,0 +1,7 @@
+ content_settings::WebsiteSettingsRegistry::GetInstance()
+ ->GetMutable(ContentSettingsType::POPUPS)
+ ->set_show_into_info_page()
+ .set_desktop_ui()
+ .set_allowed_ui(IDS_WEBSITE_SETTINGS_CATEGORY_POPUP_ALLOWED)
+ .set_ask_ui(IDS_WEBSITE_SETTINGS_CATEGORY_POPUP_BLOCK_ALL)
+ .set_blocked_ui(IDS_WEBSITE_SETTINGS_CATEGORY_POPUP_BLOCKED);
diff --git a/components/content_settings/core/browser/content_settings_registry.cc b/components/content_settings/core/browser/content_settings_registry.cc
--- a/components/content_settings/core/browser/content_settings_registry.cc
+++ b/components/content_settings/core/browser/content_settings_registry.cc
@@ -131,7 +131,7 @@ void ContentSettingsRegistry::Init() {
WebsiteSettingsInfo::SYNCABLE,
/*allowlisted_primary_schemes=*/
{kChromeUIScheme, kChromeDevToolsScheme, kExtensionScheme},
- /*valid_settings=*/{CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK},
+ /*valid_settings=*/{CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK, CONTENT_SETTING_ASK},
WebsiteSettingsInfo::TOP_ORIGIN_ONLY_SCOPE,
WebsiteSettingsRegistry::ALL_PLATFORMS,
ContentSettingsInfo::INHERIT_IN_INCOGNITO,
--
File diff suppressed because it is too large Load Diff
+23
View File
@@ -0,0 +1,23 @@
From: csagan5 <32685696+csagan5@users.noreply.github.com>
Date: Sat, 8 Jan 2022 19:42:34 +0100
Subject: Chromium package name
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
chrome/android/BUILD.gn | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
--- a/chrome/android/BUILD.gn
+++ b/chrome/android/BUILD.gn
@@ -46,7 +46,7 @@ if (android_64bit_target_cpu && skip_secondary_abi_for_cq) {
assert(current_toolchain != android_secondary_abi_toolchain)
}
-_default_package = "org.chromium.chrome"
+_default_package = "org.bromite.chromium"
if (android_channel != "default" && android_channel != "stable") {
# android-binary-size trybot may checks if an internal Chrome variant's
# AndroidManifest is as expected by ensuring the differences between its
--
2.25.1
@@ -1,91 +0,0 @@
From: uazo <uazo@users.noreply.github.com>
Date: Wed, 19 Apr 2023 09:59:18 +0000
Subject: Clear CORS Preflight Cache on clearing data
License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
---
services/network/cors/preflight_cache.cc | 4 ++++
services/network/cors/preflight_cache.h | 2 ++
services/network/cors/preflight_controller.cc | 4 ++++
services/network/cors/preflight_controller.h | 2 ++
services/network/cors/preflight_result.cc | 2 +-
services/network/network_context.cc | 2 ++
6 files changed, 15 insertions(+), 1 deletion(-)
diff --git a/services/network/cors/preflight_cache.cc b/services/network/cors/preflight_cache.cc
--- a/services/network/cors/preflight_cache.cc
+++ b/services/network/cors/preflight_cache.cc
@@ -200,6 +200,10 @@ void PreflightCache::MayPurgeForTesting(size_t max_entries, size_t purge_unit) {
MayPurge(max_entries, purge_unit);
}
+void PreflightCache::ClearAll() {
+ cache_.clear();
+}
+
void PreflightCache::MayPurge(size_t max_entries, size_t purge_unit) {
if (cache_.size() <= max_entries) {
return;
diff --git a/services/network/cors/preflight_cache.h b/services/network/cors/preflight_cache.h
--- a/services/network/cors/preflight_cache.h
+++ b/services/network/cors/preflight_cache.h
@@ -78,6 +78,8 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) PreflightCache final {
// `max_entries` for testing.
void MayPurgeForTesting(size_t max_entries, size_t purge_unit);
+ void ClearAll();
+
private:
void MayPurge(size_t max_entries, size_t purge_unit);
diff --git a/services/network/cors/preflight_controller.cc b/services/network/cors/preflight_controller.cc
--- a/services/network/cors/preflight_controller.cc
+++ b/services/network/cors/preflight_controller.cc
@@ -811,6 +811,10 @@ void PreflightController::ClearCorsPreflightCache(
cache_.ClearCache(std::move(url_filter));
}
+void PreflightController::ClearCache() {
+ cache_.ClearAll();
+}
+
void PreflightController::RemoveLoader(PreflightLoader* loader) {
auto it = loaders_.find(loader);
DCHECK(it != loaders_.end());
diff --git a/services/network/cors/preflight_controller.h b/services/network/cors/preflight_controller.h
--- a/services/network/cors/preflight_controller.h
+++ b/services/network/cors/preflight_controller.h
@@ -157,6 +157,8 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) PreflightController final {
url_loader_network_service_observer,
const PreflightMode& preflight_mode);
+ void ClearCache();
+
// Clears the CORS preflight cache. The time range is always "all time" as
// the preflight cache max age is capped to 2hrs. in Chrome.
// It clears origins selectively when the url filter is not null, otherwise
diff --git a/services/network/cors/preflight_result.cc b/services/network/cors/preflight_result.cc
--- a/services/network/cors/preflight_result.cc
+++ b/services/network/cors/preflight_result.cc
@@ -37,7 +37,7 @@ constexpr base::TimeDelta kDefaultTimeout = base::Seconds(5);
// Maximum cache expiry time. Even if a CORS-preflight response contains
// Access-Control-Max-Age header that specifies a longer expiry time, this
// maximum time is applied.
-constexpr base::TimeDelta kMaxTimeout = base::Hours(2);
+constexpr base::TimeDelta kMaxTimeout = base::Seconds(600);
// Holds TickClock instance to overwrite TimeTicks::Now() for testing.
const base::TickClock* tick_clock_for_testing = nullptr;
diff --git a/services/network/network_context.cc b/services/network/network_context.cc
--- a/services/network/network_context.cc
+++ b/services/network/network_context.cc
@@ -1179,6 +1179,8 @@ void NetworkContext::ClearHttpCache(base::Time start_time,
base::BindOnce(&NetworkContext::OnHttpCacheCleared,
base::Unretained(this), std::move(callback))));
+ cors_preflight_controller_.ClearCache();
+
NetworkServiceMemoryCache* memory_cache = GetMemoryCache();
if (memory_cache)
memory_cache->Clear();
--
+105 -159
View File
@@ -2,55 +2,56 @@ From: csagan5 <32685696+csagan5@users.noreply.github.com>
Date: Thu, 22 Jul 2021 23:10:52 +0200
Subject: Client hints overrides
Disable critical client hints and network early hints
Use Google Chrome branding for client hints
Disable critical client hints
Hard-code model to SAMSUNG SM-G960U
use Google Chrome branding for client hints
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
components/embedder_support/user_agent_utils.cc | 4 +---
content/browser/client_hints/client_hints.cc | 17 +++++++++++------
.../loader/navigation_url_loader_impl.cc | 5 +++++
.../features_cc/Client-hints-overrides.inc | 1 +
.../cpp/features_cc/Client-hints-overrides.inc | 1 +
net/http/http_network_transaction.cc | 1 +
services/network/public/cpp/client_hints.cc | 1 +
.../blink/common/client_hints/client_hints.cc | 1 +
.../common/client_hints/enabled_client_hints.cc | 4 +++-
.../blink/renderer/core/frame/navigator_ua.idl | 4 +++-
.../renderer/core/frame/navigator_ua_data.idl | 5 ++++-
.../renderer/core/loader/base_fetch_context.cc | 6 ++++--
.../platform/runtime_enabled_features.json5 | 4 ++++
13 files changed, 40 insertions(+), 14 deletions(-)
create mode 100644 cromite_flags/content/common/features_cc/Client-hints-overrides.inc
create mode 100644 cromite_flags/services/network/public/cpp/features_cc/Client-hints-overrides.inc
chrome/browser/prefs/browser_prefs.cc | 2 +-
components/embedder_support/user_agent_utils.cc | 4 +---
content/browser/client_hints/client_hints.cc | 3 ++-
content/browser/loader/navigation_url_loader_impl.cc | 5 +++++
content/common/user_agent.cc | 9 +--------
content/public/common/content_features.cc | 2 +-
services/network/public/cpp/client_hints.cc | 1 +
services/network/public/cpp/features.cc | 4 ++--
third_party/blink/common/client_hints/client_hints.cc | 1 +
.../blink/common/client_hints/enabled_client_hints.cc | 4 +++-
third_party/blink/common/features.cc | 4 ++--
11 files changed, 20 insertions(+), 19 deletions(-)
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc
--- a/chrome/browser/prefs/browser_prefs.cc
+++ b/chrome/browser/prefs/browser_prefs.cc
@@ -779,7 +779,7 @@ void RegisterLocalStatePrefsForMigration(PrefRegistrySimple* registry) {
registry->RegisterListPref(prefs::kUsedPolicyCertificates);
#endif // BUILDFLAG(IS_CHROMEOS_ASH)
- registry->RegisterBooleanPref(kUserAgentClientHintsEnabled, true);
+ registry->RegisterBooleanPref(kUserAgentClientHintsEnabled, false);
registry->RegisterBooleanPref(kCloudPolicyOverridesPlatformPolicy, false);
diff --git a/components/embedder_support/user_agent_utils.cc b/components/embedder_support/user_agent_utils.cc
--- a/components/embedder_support/user_agent_utils.cc
+++ b/components/embedder_support/user_agent_utils.cc
@@ -187,9 +187,7 @@ const blink::UserAgentBrandList GetUserAgentBrandList(
@@ -239,9 +239,7 @@ const blink::UserAgentBrandList GetUserAgentBrandList(
bool parse_result = base::StringToInt(major_version, &major_version_number);
DCHECK(parse_result);
std::optional<std::string> brand;
absl::optional<std::string> brand;
-#if !BUILDFLAG(CHROMIUM_BRANDING)
- brand = version_info::GetProductName();
-#endif
+ brand = "Google Chrome";
std::optional<std::string> maybe_brand_override =
absl::optional<std::string> maybe_brand_override =
base::GetFieldTrialParamValueByFeature(features::kGreaseUACH,
"brand_override");
diff --git a/content/browser/client_hints/client_hints.cc b/content/browser/client_hints/client_hints.cc
--- a/content/browser/client_hints/client_hints.cc
+++ b/content/browser/client_hints/client_hints.cc
@@ -55,6 +55,7 @@
#include "third_party/blink/public/common/permissions_policy/origin_with_possible_wildcards.h"
#include "third_party/blink/public/common/permissions_policy/permissions_policy.h"
#include "third_party/blink/public/common/user_agent/user_agent_metadata.h"
+#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
#include "ui/display/display.h"
#include "ui/display/screen.h"
#include "url/origin.h"
@@ -516,7 +517,8 @@ void AddPrefersReducedTransparencyHeader(net::HttpRequestHeaders* headers,
: network::kPrefersReducedTransparencyNoPreference);
@@ -433,7 +433,8 @@ void AddPrefersColorSchemeHeader(net::HttpRequestHeaders* headers,
is_dark_mode ? "dark" : "light");
}
-bool IsValidURLForClientHints(const url::Origin& origin) {
@@ -59,37 +60,10 @@ diff --git a/content/browser/client_hints/client_hints.cc b/content/browser/clie
return network::IsOriginPotentiallyTrustworthy(origin);
}
@@ -718,7 +720,8 @@ void UpdateNavigationRequestClientUaHeadersImpl(
// value, disable them. This overwrites previous decision from UI.
disable_due_to_custom_ua = !ua_metadata.has_value();
}
-
+ if (!blink::RuntimeEnabledFeatures::UserAgentClientHintEnabled())
+ disable_due_to_custom_ua = true;
if (!disable_due_to_custom_ua) {
if (!ua_metadata.has_value())
ua_metadata = delegate->GetUserAgentMetadata();
@@ -900,10 +903,12 @@ void AddRequestClientHintsHeaders(
AddEctHeader(headers, network_quality_tracker, url);
}
- UpdateNavigationRequestClientUaHeadersImpl(
- delegate, is_ua_override_on, frame_tree_node,
- ClientUaHeaderCallType::kDuringCreation, headers, container_policy,
- request_url, data);
+ if (blink::RuntimeEnabledFeatures::UserAgentClientHintEnabled()) {
+ UpdateNavigationRequestClientUaHeadersImpl(
+ delegate, is_ua_override_on, frame_tree_node,
+ ClientUaHeaderCallType::kDuringCreation, headers, container_policy,
+ request_url, data);
+ }
if (ShouldAddClientHint(data, WebClientHintsType::kPrefersColorScheme)) {
AddPrefersColorSchemeHeader(headers, frame_tree_node);
diff --git a/content/browser/loader/navigation_url_loader_impl.cc b/content/browser/loader/navigation_url_loader_impl.cc
--- a/content/browser/loader/navigation_url_loader_impl.cc
+++ b/content/browser/loader/navigation_url_loader_impl.cc
@@ -1091,6 +1091,11 @@ void NavigationURLLoaderImpl::OnAcceptCHFrameReceived(
@@ -1007,6 +1007,11 @@ void NavigationURLLoaderImpl::OnAcceptCHFrameReceived(
return;
}
@@ -101,45 +75,67 @@ diff --git a/content/browser/loader/navigation_url_loader_impl.cc b/content/brow
LogAcceptCHFrameStatus(AcceptCHFrameRestart::kFramePresent);
// Given that this is happening in the middle of navigation, there should
diff --git a/cromite_flags/content/common/features_cc/Client-hints-overrides.inc b/cromite_flags/content/common/features_cc/Client-hints-overrides.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/content/common/features_cc/Client-hints-overrides.inc
@@ -0,0 +1 @@
+SET_CROMITE_FEATURE_DISABLED(kCriticalClientHint);
diff --git a/cromite_flags/services/network/public/cpp/features_cc/Client-hints-overrides.inc b/cromite_flags/services/network/public/cpp/features_cc/Client-hints-overrides.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/services/network/public/cpp/features_cc/Client-hints-overrides.inc
@@ -0,0 +1 @@
+SET_CROMITE_FEATURE_DISABLED(kAcceptCHFrame);
diff --git a/net/http/http_network_transaction.cc b/net/http/http_network_transaction.cc
--- a/net/http/http_network_transaction.cc
+++ b/net/http/http_network_transaction.cc
@@ -101,6 +101,7 @@ const size_t kMaxRestarts = 32;
diff --git a/content/common/user_agent.cc b/content/common/user_agent.cc
--- a/content/common/user_agent.cc
+++ b/content/common/user_agent.cc
@@ -300,14 +300,7 @@ std::string BuildUserAgentFromProduct(const std::string& product) {
}
// Returns true when Early Hints are allowed on the given protocol.
bool EarlyHintsAreAllowedOn(HttpConnectionInfo connection_info) {
+ if ((true)) return false;
switch (connection_info) {
case HttpConnectionInfo::kHTTP0_9:
case HttpConnectionInfo::kHTTP1_0:
std::string BuildModelInfo() {
- std::string model;
-#if BUILDFLAG(IS_ANDROID)
- // Only send the model information if on the release build of Android,
- // matching user agent behaviour.
- if (base::SysInfo::GetAndroidBuildCodename() == "REL")
- model = base::SysInfo::HardwareModelName();
-#endif
- return model;
+ return "SAMSUNG SM-G960U";
}
#if BUILDFLAG(IS_ANDROID)
diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc
--- a/content/public/common/content_features.cc
+++ b/content/public/common/content_features.cc
@@ -239,7 +239,7 @@ const base::Feature kCrashReporting{"CrashReporting",
// Enables support for the `Critical-CH` response header.
// https://github.com/WICG/client-hints-infrastructure/blob/master/reliability.md#critical-ch
const base::Feature kCriticalClientHint{"CriticalClientHint",
- base::FEATURE_ENABLED_BY_DEFAULT};
+ base::FEATURE_DISABLED_BY_DEFAULT};
// Enable debugging the issue crbug.com/1201355
const base::Feature kDebugHistoryInterventionNoUserActivation{
diff --git a/services/network/public/cpp/client_hints.cc b/services/network/public/cpp/client_hints.cc
--- a/services/network/public/cpp/client_hints.cc
+++ b/services/network/public/cpp/client_hints.cc
@@ -120,6 +120,7 @@ const DecodeMap& GetDecodeMap() {
@@ -96,6 +96,7 @@ const DecodeMap& GetDecodeMap() {
std::optional<std::vector<network::mojom::WebClientHintsType>>
absl::optional<std::vector<network::mojom::WebClientHintsType>>
ParseClientHintsHeader(const std::string& header) {
+ if ((true)) return absl::nullopt;
// Accept-CH is an sh-list of tokens; see:
// https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-header-structure-19#section-3.1
std::optional<net::structured_headers::List> maybe_list =
absl::optional<net::structured_headers::List> maybe_list =
diff --git a/services/network/public/cpp/features.cc b/services/network/public/cpp/features.cc
--- a/services/network/public/cpp/features.cc
+++ b/services/network/public/cpp/features.cc
@@ -179,8 +179,8 @@ const base::Feature kWebSocketReassembleShortMessages{
// Enable support for ACCEPT_CH H2/3 frame as part of Client Hint Reliability.
// See:
// https://tools.ietf.org/html/draft-davidben-http-client-hint-reliability-02#section-4.3
-const base::Feature kAcceptCHFrame{"AcceptCHFrame",
- base::FEATURE_ENABLED_BY_DEFAULT};
+const base::Feature kAcceptCHFrame{"AcceptCHFrame", // disabled by default
+ base::FEATURE_DISABLED_BY_DEFAULT}; // in Bromite
const base::Feature kSCTAuditingRetryReports{"SCTAuditingRetryReports",
base::FEATURE_ENABLED_BY_DEFAULT};
diff --git a/third_party/blink/common/client_hints/client_hints.cc b/third_party/blink/common/client_hints/client_hints.cc
--- a/third_party/blink/common/client_hints/client_hints.cc
+++ b/third_party/blink/common/client_hints/client_hints.cc
@@ -105,6 +105,7 @@ const PolicyFeatureToClientHintMap& GetPolicyFeatureToClientHintMap() {
}
@@ -116,6 +116,7 @@ const size_t kWebEffectiveConnectionTypeMappingCount =
std::size(kWebEffectiveConnectionTypeMapping);
bool IsClientHintSentByDefault(network::mojom::WebClientHintsType type) {
+ if ((true)) return false;
@@ -149,7 +145,7 @@ diff --git a/third_party/blink/common/client_hints/client_hints.cc b/third_party
diff --git a/third_party/blink/common/client_hints/enabled_client_hints.cc b/third_party/blink/common/client_hints/enabled_client_hints.cc
--- a/third_party/blink/common/client_hints/enabled_client_hints.cc
+++ b/third_party/blink/common/client_hints/enabled_client_hints.cc
@@ -15,6 +15,7 @@ namespace {
@@ -21,6 +21,7 @@ namespace {
using ::network::mojom::WebClientHintsType;
bool IsDisabledByFeature(const WebClientHintsType type) {
@@ -157,7 +153,7 @@ diff --git a/third_party/blink/common/client_hints/enabled_client_hints.cc b/thi
switch (type) {
case WebClientHintsType::kUA:
case WebClientHintsType::kUAArch:
@@ -96,7 +97,7 @@ bool IsDisabledByFeature(const WebClientHintsType type) {
@@ -127,7 +128,7 @@ bool IsOriginTrialEnabled(const GURL& url,
} // namespace
bool EnabledClientHints::IsEnabled(const WebClientHintsType type) const {
@@ -166,7 +162,7 @@ diff --git a/third_party/blink/common/client_hints/enabled_client_hints.cc b/thi
}
void EnabledClientHints::SetIsEnabled(const WebClientHintsType type,
@@ -107,6 +108,7 @@ void EnabledClientHints::SetIsEnabled(const WebClientHintsType type,
@@ -156,6 +157,7 @@ void EnabledClientHints::SetIsEnabled(
std::vector<WebClientHintsType> EnabledClientHints::GetEnabledHints() const {
std::vector<WebClientHintsType> hints;
@@ -174,76 +170,26 @@ diff --git a/third_party/blink/common/client_hints/enabled_client_hints.cc b/thi
for (const auto& elem : network::GetClientHintToNameMap()) {
const auto& type = elem.first;
if (IsEnabled(type))
diff --git a/third_party/blink/renderer/core/frame/navigator_ua.idl b/third_party/blink/renderer/core/frame/navigator_ua.idl
--- a/third_party/blink/renderer/core/frame/navigator_ua.idl
+++ b/third_party/blink/renderer/core/frame/navigator_ua.idl
@@ -4,6 +4,8 @@
diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc
--- a/third_party/blink/common/features.cc
+++ b/third_party/blink/common/features.cc
@@ -160,7 +160,7 @@ const base::Feature kMixedContentAutoupgrade{"AutoupgradeMixedContent",
// https://github.com/WICG/ua-client-hints
// Enables User-Agent Client Hints
const base::Feature kUserAgentClientHint{"UserAgentClientHint",
- base::FEATURE_ENABLED_BY_DEFAULT};
+ base::FEATURE_DISABLED_BY_DEFAULT};
-interface mixin NavigatorUA {
+[
+ RuntimeEnabled=UserAgentClientHint
+] interface mixin NavigatorUA {
[SecureContext] readonly attribute NavigatorUAData userAgentData;
};
diff --git a/third_party/blink/renderer/core/frame/navigator_ua_data.idl b/third_party/blink/renderer/core/frame/navigator_ua_data.idl
--- a/third_party/blink/renderer/core/frame/navigator_ua_data.idl
+++ b/third_party/blink/renderer/core/frame/navigator_ua_data.idl
@@ -4,7 +4,10 @@
// https://github.com/WICG/ua-client-hints
-[Exposed=(Window,Worker)] interface NavigatorUAData {
+[
+ RuntimeEnabled=UserAgentClientHint,
+ Exposed=(Window,Worker)
+] interface NavigatorUAData {
[HighEntropy, MeasureAs=NavigatorUAData_Brands] readonly attribute FrozenArray<NavigatorUABrandVersion> brands;
[HighEntropy=Direct, MeasureAs=NavigatorUAData_Mobile] readonly attribute boolean mobile;
[HighEntropy=Direct, MeasureAs=NavigatorUAData_Platform] readonly attribute DOMString platform;
diff --git a/third_party/blink/renderer/core/loader/base_fetch_context.cc b/third_party/blink/renderer/core/loader/base_fetch_context.cc
--- a/third_party/blink/renderer/core/loader/base_fetch_context.cc
+++ b/third_party/blink/renderer/core/loader/base_fetch_context.cc
@@ -167,7 +167,7 @@ void BaseFetchContext::AddClientHintsIfNecessary(
// specifying accomponying client hints, in which case we disable sending
// them.
using network::mojom::blink::WebClientHintsType;
- if (ua) {
+ if (RuntimeEnabledFeatures::UserAgentClientHintEnabled() && ua) {
// ShouldSendClientHint is called to make sure UA is controlled by
// Permissions Policy.
if (ShouldSendClientHint(policy, resource_origin, is_1p_origin,
@@ -329,7 +329,7 @@ void BaseFetchContext::AddClientHintsIfNecessary(
}
// Only send User Agent hints if the info is available
- if (ua) {
+ if (RuntimeEnabledFeatures::UserAgentClientHintEnabled() && ua) {
if (ShouldSendClientHint(policy, resource_origin, is_1p_origin,
WebClientHintsType::kUAArch, hints_preferences)) {
SetHttpHeader(WebClientHintsType::kUAArch,
@@ -652,6 +652,8 @@ bool BaseFetchContext::ShouldSendClientHint(
bool is_1p_origin,
network::mojom::blink::WebClientHintsType type,
const ClientHintsPreferences& hints_preferences) const {
+ if (!RuntimeEnabledFeatures::UserAgentClientHintEnabled())
+ return false;
// For subresource requests, sending the hint in the fetch request based on
// the permissions policy.
if ((!policy ||
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5
--- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
+++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -499,6 +499,10 @@
name: "ByobFetch",
status: "stable",
},
+ {
+ name: "UserAgentClientHint", // always disabled
+ status: "experimental", // in bromite
+ },
{
name: "CacheStorageCodeCacheHint",
origin_trial_feature_name: "CacheStorageCodeCacheHint",
// Handle prefers-color-scheme user preference media feature via client hints.
const base::Feature kPrefersColorSchemeClientHintHeader{
@@ -531,7 +531,7 @@ const base::Feature kAudioWorkletThreadRealtimePriority{
const base::Feature kLightweightNoStatePrefetch {
"LightweightNoStatePrefetch",
#if BUILDFLAG(IS_ANDROID)
- base::FEATURE_ENABLED_BY_DEFAULT
+ base::FEATURE_DISABLED_BY_DEFAULT
#else
base::FEATURE_DISABLED_BY_DEFAULT
#endif
--
2.25.1
@@ -1,24 +0,0 @@
From: uazo <uazo@users.noreply.github.com>
Date: Wed, 19 Jul 2023 09:32:36 +0000
Subject: Compress libchrome to free up some space
upstream removed ModernLinker support for developer build (apk releases).
see https://bugs.chromium.org/p/chromium/issues/detail?id=1383210
License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
---
chrome/android/chrome_public_apk_tmpl.gni | 1 +
1 file changed, 1 insertion(+)
diff --git a/chrome/android/chrome_public_apk_tmpl.gni b/chrome/android/chrome_public_apk_tmpl.gni
--- a/chrome/android/chrome_public_apk_tmpl.gni
+++ b/chrome/android/chrome_public_apk_tmpl.gni
@@ -642,6 +642,7 @@ template("chrome_common_apk_or_module_tmpl") {
[ "//components/crash/core/app:chrome_crashpad_handler_named_as_so" ]
loadable_modules += [ "$root_out_dir/libchrome_crashpad_handler.so" ]
library_always_compress += [ "libchrome_crashpad_handler.so" ]
+ library_always_compress += [ "libchrome.so" ]
} else if (!_is_trichrome) {
# Crashpad trampoline lives in TrichromeLibrary.apk.
# https://chromium.googlesource.com/chromium/src/+/main/docs/android_native_libraries.md#Crashpad-Packaging
--
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -1,440 +0,0 @@
From: uazo <uazo@users.noreply.github.com>
Date: Sun, 7 Jan 2024 15:46:46 +0000
Subject: Customize selection popup
Adds options related to the handling of pop-up selections:
Opens tabs in foreground, Move web search to the top of items,
Web search in tab group and Enable smart text selection
License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
---
.../browser/ChromeActionModeHandler.java | 4 +-
.../chrome/browser/ChromeTabbedActivity.java | 15 +-
.../compositor/layouts/LayoutManagerImpl.java | 8 ++
.../chrome/browser/ui/RootUiCoordinator.java | 8 +-
.../Customize-selection-popup.grdp | 34 +++++
.../res/xml/accessibility_preferences.xml | 24 ++++
.../selection/SelectActionMenuHelper.java | 131 ++++++++++++------
.../selection/SmartSelectionClient.java | 4 +
8 files changed, 178 insertions(+), 50 deletions(-)
create mode 100644 chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Customize-selection-popup.grdp
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActionModeHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActionModeHandler.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActionModeHandler.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActionModeHandler.java
@@ -148,9 +148,7 @@ public class ChromeActionModeHandler {
| ActionModeCallbackHelper.MENU_ITEM_SHARE;
// Disable options that expose additional Chrome functionality prior to the FRE being
// completed (i.e. creation of a new tab).
- if (FirstRunStatus.getFirstRunFlowComplete()) {
- allowedActionModes |= ActionModeCallbackHelper.MENU_ITEM_WEB_SEARCH;
- }
+ allowedActionModes |= ActionModeCallbackHelper.MENU_ITEM_WEB_SEARCH;
mHelper.setAllowedMenuItems(allowedActionModes);
mHelper.onCreateActionMode(mode, menu);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
@@ -737,10 +737,17 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
@TabLaunchType int type,
@TabCreationState int creationState,
boolean markedForSelection) {
- if (type == TabLaunchType.FROM_LONGPRESS_BACKGROUND
- || type == TabLaunchType.FROM_LONGPRESS_BACKGROUND_IN_GROUP
- || type == TabLaunchType.FROM_RECENT_TABS
- && !DeviceClassManager.enableAnimations()) {
+ boolean selectionPopupTabsForeground =
+ ContextUtils.getAppSharedPreferences().getBoolean(
+ "selection_popup_tabs_foreground", false);
+ boolean showToast = type == TabLaunchType.FROM_RECENT_TABS
+ && !DeviceClassManager.enableAnimations();
+ if (!showToast && !selectionPopupTabsForeground) {
+ showToast = !DeviceClassManager.enableAnimations() &&
+ (type == TabLaunchType.FROM_LONGPRESS_BACKGROUND
+ || type == TabLaunchType.FROM_LONGPRESS_BACKGROUND_IN_GROUP);
+ }
+ if (showToast) {
Toast.makeText(
ChromeTabbedActivity.this,
R.string.open_in_new_tab_toast,
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerImpl.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerImpl.java
@@ -16,6 +16,7 @@ import android.view.ViewGroup;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
+import org.chromium.base.ContextUtils;
import org.chromium.base.ObserverList;
import org.chromium.base.TraceEvent;
import org.chromium.base.supplier.ObservableSupplier;
@@ -228,6 +229,13 @@ public class LayoutManagerImpl
&& launchType != TabLaunchType.FROM_RECENT_TABS
&& launchType != TabLaunchType.FROM_RESTORE_TABS_UI
|| (!getTabModelSelector().isIncognitoSelected() && incognito);
+ boolean selectionPopupTabsForeground =
+ ContextUtils.getAppSharedPreferences().getBoolean(
+ "selection_popup_tabs_foreground", false);
+ if (selectionPopupTabsForeground) {
+ willBeSelected = launchType != TabLaunchType.FROM_RESTORE_TABS_UI
+ || (!getTabModelSelector().isIncognitoSelected() && incognito);
+ }
float lastTapX = LocalizationUtils.isLayoutRtl() ? mHost.getWidth() * mPxToDp : 0.f;
float lastTapY = 0.f;
if (launchType != TabLaunchType.FROM_CHROME_UI) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java
@@ -27,6 +27,7 @@ import androidx.appcompat.content.res.AppCompatResources;
import org.chromium.base.Callback;
import org.chromium.base.CallbackController;
+import org.chromium.base.ContextUtils;
import org.chromium.base.TraceEvent;
import org.chromium.base.metrics.RecordUserAction;
import org.chromium.base.supplier.ObservableSupplier;
@@ -814,11 +815,16 @@ public class RootUiCoordinator
TrackerFactory.getTrackerForProfile(tab.getProfile())
.notifyEvent(EventConstants.WEB_SEARCH_PERFORMED);
+ boolean selection_popup_web_search_to_group =
+ ContextUtils.getAppSharedPreferences().getBoolean(
+ "selection_popup_web_search_to_group", false);
+
mTabModelSelectorSupplier
.get()
.openNewTab(
generateUrlParamsForSearch(tab, query),
- TabLaunchType.FROM_LONGPRESS_FOREGROUND,
+ selection_popup_web_search_to_group ? TabLaunchType.FROM_LONGPRESS_BACKGROUND_IN_GROUP
+ : TabLaunchType.FROM_LONGPRESS_FOREGROUND,
tab,
tab.isIncognito());
},
diff --git a/chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Customize-selection-popup.grdp b/chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Customize-selection-popup.grdp
new file mode 100644
--- /dev/null
+++ b/chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Customize-selection-popup.grdp
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<grit-part>
+ <message name="IDS_CUSTOMIZE_SELECTON_POPUP_TITLE" desc="">
+ Customize selection popup
+ </message>
+
+ <message name="IDS_SELECTION_POPUP_TABS_FOREGROUND_TITLE" desc="">
+ Opens tabs in foreground
+ </message>
+ <message name="IDS_SELECTION_POPUP_TABS_FOREGROUND_SUMMARY" desc="">
+ Immediately brings new open tabs to the foreground
+ </message>
+
+ <message name="IDS_SELECTION_POPUP_WEB_SEARCH_TO_TOP_TITLE" desc="">
+ Move web search to the top of items
+ </message>
+ <message name="IDS_SELECTION_POPUP_WEB_SEARCH_TO_TOP_SUMMARY" desc="">
+ Web search as first choice
+ </message>
+
+ <message name="IDS_SELECTION_POPUP_WEB_SEARCH_TO_GROUP_TITLE" desc="">
+ Web search in tab group
+ </message>
+ <message name="IDS_SELECTION_POPUP_WEB_SEARCH_TO_GROUP_SUMMARY" desc="">
+ Opens the search in a tab in the current group, if deactivated opens a new group
+ </message>
+
+ <message name="IDS_SELECTION_POPUP_SMART_TEXT_TITLE" desc="">
+ Enable smart text selection
+ </message>
+ <message name="IDS_SELECTION_POPUP_SMART_TEXT_SUMMARY" desc="">
+ Smart Text selection automatically augments the selected boundaries and classifies the selected text based on the context by sending selection together with its surrounding text
+ </message>
+</grit-part>
diff --git a/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml b/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml
--- a/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml
+++ b/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml
@@ -63,4 +63,28 @@ found in the LICENSE file.
android:key="move_toolbar_bottom"
android:summary="@string/move_toolbar_bottom_summary"
android:title="@string/move_toolbar_bottom_title" />
+
+ <PreferenceCategory
+ android:key="customize_selecton_popup_section"
+ android:title="@string/customize_selecton_popup_title" />
+
+ <org.chromium.components.browser_ui.settings.ChromeSwitchPreference
+ android:key="selection_popup_tabs_foreground"
+ android:summary="@string/selection_popup_tabs_foreground_summary"
+ android:title="@string/selection_popup_tabs_foreground_title" />
+
+ <org.chromium.components.browser_ui.settings.ChromeSwitchPreference
+ android:key="selection_popup_web_search_to_top"
+ android:summary="@string/selection_popup_web_search_to_top_summary"
+ android:title="@string/selection_popup_web_search_to_top_title" />
+
+ <org.chromium.components.browser_ui.settings.ChromeSwitchPreference
+ android:key="selection_popup_web_search_to_group"
+ android:summary="@string/selection_popup_web_search_to_group_summary"
+ android:title="@string/selection_popup_web_search_to_group_title" />
+
+ <org.chromium.components.browser_ui.settings.ChromeSwitchPreference
+ android:key="selection_popup_smart_text"
+ android:summary="@string/selection_popup_smart_text_summary"
+ android:title="@string/selection_popup_smart_text_title" />
</PreferenceScreen>
diff --git a/content/public/android/java/src/org/chromium/content/browser/selection/SelectActionMenuHelper.java b/content/public/android/java/src/org/chromium/content/browser/selection/SelectActionMenuHelper.java
--- a/content/public/android/java/src/org/chromium/content/browser/selection/SelectActionMenuHelper.java
+++ b/content/public/android/java/src/org/chromium/content/browser/selection/SelectActionMenuHelper.java
@@ -26,6 +26,7 @@ import androidx.core.content.ContextCompat;
import org.chromium.base.ContextUtils;
import org.chromium.base.Log;
+import org.chromium.base.ContextUtils;
import org.chromium.base.PackageManagerUtils;
import org.chromium.base.StrictModeContext;
import org.chromium.content.R;
@@ -51,38 +52,84 @@ import java.util.TreeSet;
public class SelectActionMenuHelper {
private static final String TAG = "SelectActionMenu"; // 20 char limit.
- @Retention(RetentionPolicy.SOURCE)
- @IntDef({
- GroupItemOrder.ASSIST_ITEMS,
- GroupItemOrder.DEFAULT_ITEMS,
- GroupItemOrder.SECONDARY_ASSIST_ITEMS,
- GroupItemOrder.TEXT_PROCESSING_ITEMS
- })
- public @interface GroupItemOrder {
- int ASSIST_ITEMS = 1;
- int DEFAULT_ITEMS = 2;
- int SECONDARY_ASSIST_ITEMS = 3;
- int TEXT_PROCESSING_ITEMS = 4;
+ private static class GroupItemOrderChromium {
+ static int CHROMIUM_ASSIST_ITEMS = 1;
+ static int CHROMIUM_DEFAULT_ITEMS = 2;
+ static int CHROMIUM_SECONDARY_ASSIST_ITEMS = 3;
+ static int CHROMIUM_TEXT_PROCESSING_ITEMS = 4;
+
+ static int CROMITE_DEFAULT_ITEMS = 1;
+ static int CROMITE_ASSIST_ITEMS = 2;
+ static int CROMITE_SECONDARY_ASSIST_ITEMS = 3;
+ static int CROMITE_TEXT_PROCESSING_ITEMS = 4;
+
+ private static int GetValue(int a, int b) {
+ return !ContextUtils.getAppSharedPreferences().getBoolean(
+ "enable_accessibility", false)
+ ? a : b;
+ }
+
+ public static int ASSIST_ITEMS() {
+ return GetValue(CHROMIUM_ASSIST_ITEMS, CROMITE_ASSIST_ITEMS);
+ }
+
+ public static int DEFAULT_ITEMS() {
+ return GetValue(CHROMIUM_DEFAULT_ITEMS, CROMITE_DEFAULT_ITEMS);
+ }
+
+ public static int SECONDARY_ASSIST_ITEMS() {
+ return GetValue(CHROMIUM_SECONDARY_ASSIST_ITEMS, CROMITE_SECONDARY_ASSIST_ITEMS);
+ }
+
+ public static int TEXT_PROCESSING_ITEMS() {
+ return GetValue(CHROMIUM_TEXT_PROCESSING_ITEMS, CROMITE_TEXT_PROCESSING_ITEMS);
+ }
}
- @Retention(RetentionPolicy.SOURCE)
- @IntDef({
- DefaultItemOrder.CUT,
- DefaultItemOrder.COPY,
- DefaultItemOrder.PASTE,
- DefaultItemOrder.PASTE_AS_PLAIN_TEXT,
- DefaultItemOrder.SHARE,
- DefaultItemOrder.SELECT_ALL,
- DefaultItemOrder.WEB_SEARCH
- })
- public @interface DefaultItemOrder {
- int CUT = 1;
- int COPY = 2;
- int PASTE = 3;
- int PASTE_AS_PLAIN_TEXT = 4;
- int SHARE = 5;
- int SELECT_ALL = 6;
- int WEB_SEARCH = 7;
+ private static class DefaultItemOrderChromium {
+ static int CHROMIUM_CUT = 1;
+ static int CHROMIUM_COPY = 2;
+ static int CHROMIUM_PASTE = 3;
+ static int CHROMIUM_SHARE = 4;
+ static int CHROMIUM_SELECT_ALL = 5;
+ static int CHROMIUM_PASTE_AS_PLAIN_TEXT = 6;
+ static int CHROMIUM_WEB_SEARCH = 7;
+
+ static int CROMITE_WEB_SEARCH = 1;
+ static int CROMITE_CUT = 2;
+ static int CROMITE_COPY = 3;
+ static int CROMITE_PASTE = 4;
+ static int CROMITE_SHARE = 5;
+ static int CROMITE_SELECT_ALL = 6;
+ static int CROMITE_PASTE_AS_PLAIN_TEXT = 7;
+
+ private static int GetValue(int a, int b) {
+ return !ContextUtils.getAppSharedPreferences().getBoolean(
+ "selection_popup_web_search_to_top", false)
+ ? a : b;
+ }
+
+ public static int CUT() {
+ return GetValue(CHROMIUM_CUT, CROMITE_CUT);
+ }
+ public static int COPY() {
+ return GetValue(CHROMIUM_COPY, CROMITE_COPY);
+ }
+ public static int PASTE() {
+ return GetValue(CHROMIUM_PASTE, CROMITE_PASTE);
+ }
+ public static int SHARE() {
+ return GetValue(CHROMIUM_SHARE, CROMITE_SHARE);
+ }
+ public static int SELECT_ALL() {
+ return GetValue(CHROMIUM_SELECT_ALL, CROMITE_SELECT_ALL);
+ }
+ public static int PASTE_AS_PLAIN_TEXT() {
+ return GetValue(CHROMIUM_PASTE_AS_PLAIN_TEXT, CROMITE_PASTE_AS_PLAIN_TEXT);
+ }
+ public static int WEB_SEARCH() {
+ return GetValue(CHROMIUM_WEB_SEARCH, CROMITE_WEB_SEARCH);
+ }
}
@Retention(RetentionPolicy.SOURCE)
@@ -159,7 +206,7 @@ public class SelectActionMenuHelper {
if (!additionalMenuItems.isEmpty()) {
// Additional menu item group which comes after default menu items.
SelectionMenuGroup additionalItemGroup =
- new SelectionMenuGroup(Menu.NONE, GroupItemOrder.SECONDARY_ASSIST_ITEMS);
+ new SelectionMenuGroup(Menu.NONE, GroupItemOrderChromium.SECONDARY_ASSIST_ITEMS());
additionalItemGroup.addItems(additionalMenuItems);
pasteMenuItems.add(additionalItemGroup);
}
@@ -225,7 +272,7 @@ public class SelectActionMenuHelper {
}
SelectionMenuGroup primaryAssistGroup =
new SelectionMenuGroup(
- R.id.select_action_menu_assist_items, GroupItemOrder.ASSIST_ITEMS);
+ R.id.select_action_menu_assist_items, GroupItemOrderChromium.ASSIST_ITEMS());
View.OnClickListener clickListener = null;
if (classificationResult.onClickListener != null) {
clickListener = classificationResult.onClickListener;
@@ -251,7 +298,7 @@ public class SelectActionMenuHelper {
String selectedText) {
SelectionMenuGroup defaultGroup =
new SelectionMenuGroup(
- R.id.select_action_menu_default_items, GroupItemOrder.DEFAULT_ITEMS);
+ R.id.select_action_menu_default_items, GroupItemOrderChromium.DEFAULT_ITEMS());
List<SelectionMenuItem.Builder> menuItemBuilders = new ArrayList<>();
menuItemBuilders.add(cut(delegate.canCut()));
menuItemBuilders.add(copy(delegate.canCopy()));
@@ -302,7 +349,7 @@ public class SelectActionMenuHelper {
// these menu items.
SelectionMenuGroup secondaryAssistItems =
new SelectionMenuGroup(
- android.R.id.textAssist, GroupItemOrder.SECONDARY_ASSIST_ITEMS);
+ android.R.id.textAssist, GroupItemOrderChromium.SECONDARY_ASSIST_ITEMS());
// First action is reserved for primary action so start at index 1.
final int startIndex = 1;
@@ -335,7 +382,7 @@ public class SelectActionMenuHelper {
SelectionMenuGroup textProcessingItems =
new SelectionMenuGroup(
R.id.select_action_menu_text_processing_items,
- GroupItemOrder.TEXT_PROCESSING_ITEMS);
+ GroupItemOrderChromium.TEXT_PROCESSING_ITEMS());
if (isSelectionPassword || intentHandler == null) {
addAdditionalTextProcessingItems(textProcessingItems, selectionActionMenuDelegate);
return textProcessingItems;
@@ -431,7 +478,7 @@ public class SelectActionMenuHelper {
.setId(R.id.select_action_menu_cut)
.setIconAttr(android.R.attr.actionModeCutDrawable)
.setAlphabeticShortcut(ItemKeyShortcuts.CUT)
- .setOrderInCategory(DefaultItemOrder.CUT)
+ .setOrderInCategory(DefaultItemOrderChromium.CUT())
.setShowAsActionFlags(
MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT)
.setIsEnabled(isEnabled)
@@ -443,7 +490,7 @@ public class SelectActionMenuHelper {
.setId(R.id.select_action_menu_copy)
.setIconAttr(android.R.attr.actionModeCopyDrawable)
.setAlphabeticShortcut(ItemKeyShortcuts.COPY)
- .setOrderInCategory(DefaultItemOrder.COPY)
+ .setOrderInCategory(DefaultItemOrderChromium.COPY())
.setShowAsActionFlags(
MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT)
.setIsEnabled(isEnabled)
@@ -455,7 +502,7 @@ public class SelectActionMenuHelper {
.setId(R.id.select_action_menu_paste)
.setIconAttr(android.R.attr.actionModePasteDrawable)
.setAlphabeticShortcut(ItemKeyShortcuts.PASTE)
- .setOrderInCategory(DefaultItemOrder.PASTE)
+ .setOrderInCategory(DefaultItemOrderChromium.PASTE())
.setShowAsActionFlags(
MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT)
.setIsEnabled(isEnabled)
@@ -469,7 +516,7 @@ public class SelectActionMenuHelper {
return new SelectionMenuItem.Builder(context.getString(R.string.actionbar_share))
.setId(R.id.select_action_menu_share)
.setIconAttr(android.R.attr.actionModeShareDrawable)
- .setOrderInCategory(DefaultItemOrder.SHARE)
+ .setOrderInCategory(DefaultItemOrderChromium.SHARE())
.setShowAsActionFlags(
MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT)
.setIsEnabled(isEnabled)
@@ -481,7 +528,7 @@ public class SelectActionMenuHelper {
.setId(R.id.select_action_menu_select_all)
.setIconAttr(android.R.attr.actionModeSelectAllDrawable)
.setAlphabeticShortcut(ItemKeyShortcuts.SELECT_ALL)
- .setOrderInCategory(DefaultItemOrder.SELECT_ALL)
+ .setOrderInCategory(DefaultItemOrderChromium.SELECT_ALL())
.setShowAsActionFlags(
MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT)
.setIsEnabled(isEnabled)
@@ -494,7 +541,7 @@ public class SelectActionMenuHelper {
SelectionMenuItem.Builder builder =
new SelectionMenuItem.Builder(android.R.string.paste_as_plain_text)
.setId(R.id.select_action_menu_paste_as_plain_text)
- .setOrderInCategory(DefaultItemOrder.PASTE_AS_PLAIN_TEXT)
+ .setOrderInCategory(DefaultItemOrderChromium.PASTE_AS_PLAIN_TEXT())
.setShowAsActionFlags(
MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT)
.setIsEnabled(isEnabled);
@@ -514,7 +561,7 @@ public class SelectActionMenuHelper {
return new SelectionMenuItem.Builder(context.getString(R.string.actionbar_web_search))
.setId(R.id.select_action_menu_web_search)
.setIconAttr(android.R.attr.actionModeWebSearchDrawable)
- .setOrderInCategory(DefaultItemOrder.WEB_SEARCH)
+ .setOrderInCategory(DefaultItemOrderChromium.WEB_SEARCH())
.setShowAsActionFlags(
MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT)
.setIsEnabled(isEnabled)
diff --git a/content/public/android/java/src/org/chromium/content/browser/selection/SmartSelectionClient.java b/content/public/android/java/src/org/chromium/content/browser/selection/SmartSelectionClient.java
--- a/content/public/android/java/src/org/chromium/content/browser/selection/SmartSelectionClient.java
+++ b/content/public/android/java/src/org/chromium/content/browser/selection/SmartSelectionClient.java
@@ -17,6 +17,7 @@ import org.jni_zero.CalledByNative;
import org.jni_zero.JNINamespace;
import org.jni_zero.NativeMethods;
+import org.chromium.base.ContextUtils;
import org.chromium.content_public.browser.SelectAroundCaretResult;
import org.chromium.content_public.browser.SelectionClient;
import org.chromium.content_public.browser.SelectionEventProcessor;
@@ -69,6 +70,9 @@ public class SmartSelectionClient implements SelectionClient {
return null;
}
+ if (!ContextUtils.getAppSharedPreferences().getBoolean(
+ "selection_popup_smart_text", false)) return null;
+
return new SmartSelectionClient(callback, webContents);
}
--
@@ -1,24 +0,0 @@
From: uazo <uazo@users.noreply.github.com>
Date: Mon, 5 Jun 2023 17:02:33 +0000
Subject: Deprecate Data URL in SVGUseElement
License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
---
.../blink/renderer/platform/runtime_enabled_features.json5 | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5
--- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
+++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -3110,8 +3110,8 @@
status: "stable",
},
{
- name: "RemoveDataUrlInSvgUse",
- status: "stable",
+ name: "RemoveDataUrlInSvgUse", // enabled
+ status: "stable", // by default
},
{
name: "RemoveMobileViewportDoubleTap",
--
File diff suppressed because it is too large Load Diff
+317
View File
@@ -0,0 +1,317 @@
From: csagan5 <32685696+csagan5@users.noreply.github.com>
Date: Sun, 26 Sep 2021 11:17:53 +0200
Subject: Disable AGSA by default
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
chrome/android/BUILD.gn | 3 ---
.../org/chromium/chrome/browser/AppHooks.java | 1 -
.../chrome/browser/IntentHandler.java | 5 ----
.../chrome/browser/app/ChromeActivity.java | 27 -------------------
.../ChromeContextMenuPopulator.java | 7 -----
...stomTabActivityClientConnectionKeeper.java | 9 -------
.../init/ProcessInitializationHandler.java | 8 ------
.../browser/ntp/search/SearchBoxMediator.java | 1 -
.../chrome/browser/share/LensUtils.java | 12 +--------
.../flags/android/chrome_feature_list.cc | 2 +-
.../browser/flags/CachedFeatureFlags.java | 2 +-
chrome/browser/ui/android/omnibox/BUILD.gn | 2 --
.../browser/omnibox/LocationBarMediator.java | 1 -
13 files changed, 3 insertions(+), 77 deletions(-)
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
--- a/chrome/android/BUILD.gn
+++ b/chrome/android/BUILD.gn
@@ -368,7 +368,6 @@ android_library("chrome_java") {
"//chrome/browser/first_run/android:java",
"//chrome/browser/flags:java",
"//chrome/browser/fullscreen/android:java",
- "//chrome/browser/gsa:java",
"//chrome/browser/history_clusters:java",
"//chrome/browser/history_clusters:java_resources",
"//chrome/browser/image_descriptions:java",
@@ -984,7 +983,6 @@ junit_binary("chrome_junit_tests") {
"//chrome/browser/flags:flags_junit_tests",
"//chrome/browser/flags:java",
"//chrome/browser/fullscreen/android:java",
- "//chrome/browser/gsa:java",
"//chrome/browser/history_clusters:java",
"//chrome/browser/image_descriptions:java",
"//chrome/browser/image_editor/public:java",
@@ -1394,7 +1392,6 @@ android_library("chrome_test_java") {
"//chrome/browser/first_run/android:java",
"//chrome/browser/flags:java",
"//chrome/browser/fullscreen/android:java",
- "//chrome/browser/gsa:java",
"//chrome/browser/history_clusters:java",
"//chrome/browser/image_descriptions:javatests",
"//chrome/browser/incognito:incognito_java_tests",
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/AppHooks.java b/chrome/android/java/src/org/chromium/chrome/browser/AppHooks.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/AppHooks.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/AppHooks.java
@@ -17,7 +17,6 @@ import org.chromium.chrome.browser.directactions.DirectActionCoordinator;
import org.chromium.chrome.browser.feedback.FeedbackReporter;
import org.chromium.chrome.browser.feedback.HelpAndFeedbackLauncher;
import org.chromium.chrome.browser.feedback.HelpAndFeedbackLauncherImpl;
-import org.chromium.chrome.browser.gsa.GSAHelper;
import org.chromium.chrome.browser.historyreport.AppIndexingReporter;
import org.chromium.chrome.browser.init.ChromeStartupDelegate;
import org.chromium.chrome.browser.init.ProcessInitializationHandler;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java
@@ -42,7 +42,6 @@ import org.chromium.chrome.browser.customtabs.CustomTabsConnection;
import org.chromium.chrome.browser.document.ChromeLauncherActivity;
import org.chromium.chrome.browser.externalnav.IntentWithRequestMetadataHandler;
import org.chromium.chrome.browser.externalnav.IntentWithRequestMetadataHandler.RequestMetadata;
-import org.chromium.chrome.browser.gsa.GSAState;
import org.chromium.chrome.browser.offlinepages.OfflinePageUtils;
import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteCoordinator;
import org.chromium.chrome.browser.profiles.Profile;
@@ -226,8 +225,6 @@ public class IntentHandler {
private static int sReferrerId;
private static String sPendingIncognitoUrl;
- public static final String PACKAGE_GSA = GSAState.PACKAGE_NAME;
-
private static final String PACKAGE_GMAIL = "com.google.android.gm";
private static final String PACKAGE_PLUS = "com.google.android.apps.plus";
private static final String PACKAGE_HANGOUTS = "com.google.android.talk";
@@ -457,8 +454,6 @@ public class IntentHandler {
return ExternalAppId.LINE;
} else if (packageName.equals(PACKAGE_WHATSAPP)) {
return ExternalAppId.WHATSAPP;
- } else if (packageName.equals(PACKAGE_GSA)) {
- return ExternalAppId.GSA;
} else if (packageName.equals(ContextUtils.getApplicationContext().getPackageName())) {
return ExternalAppId.CHROME;
} else if (packageName.startsWith(WEBAPK_PACKAGE_PREFIX)) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
@@ -111,10 +111,6 @@ import org.chromium.chrome.browser.fullscreen.BrowserControlsManager;
import org.chromium.chrome.browser.fullscreen.BrowserControlsManagerSupplier;
import org.chromium.chrome.browser.fullscreen.FullscreenBackPressHandler;
import org.chromium.chrome.browser.fullscreen.FullscreenManager;
-import org.chromium.chrome.browser.gsa.ContextReporter;
-import org.chromium.chrome.browser.gsa.GSAAccountChangeListener;
-import org.chromium.chrome.browser.gsa.GSAContextDisplaySelection;
-import org.chromium.chrome.browser.gsa.GSAState;
import org.chromium.chrome.browser.history.HistoryManagerUtils;
import org.chromium.chrome.browser.init.AsyncInitializationActivity;
import org.chromium.chrome.browser.init.ProcessInitializationHandler;
@@ -368,8 +364,6 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
private LaunchCauseMetrics mLaunchCauseMetrics;
- private GSAAccountChangeListener mGSAAccountChangeListener;
-
// TODO(972867): Pull MenuOrKeyboardActionController out of ChromeActivity.
private List<MenuOrKeyboardActionController.MenuOrKeyboardActionHandler> mMenuActionHandlers =
new ArrayList<>();
@@ -1151,10 +1145,6 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
@Override
public void onStopWithNative() {
- if (GSAState.getInstance(this).isGsaAvailable() && !SysUtils.isLowEndDevice()) {
- if (mGSAAccountChangeListener != null) mGSAAccountChangeListener.disconnect();
- }
-
super.onStopWithNative();
}
@@ -1243,23 +1233,6 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
FontSizePrefs.getInstance(Profile.getLastUsedRegularProfile())
.recordUserFontPrefOnStartup();
});
-
- // GSA connection is not needed on low-end devices because Icing is disabled.
- if (!SysUtils.isLowEndDevice()) {
- if (isActivityFinishingOrDestroyed()) return;
- DeferredStartupHandler.getInstance().addDeferredTask(() -> {
- if (!GSAState.getInstance(this).isGsaAvailable()) {
- ContextReporter.reportStatus(ContextReporter.STATUS_GSA_NOT_AVAILABLE);
- return;
- }
-
- if (mGSAAccountChangeListener == null) {
- mGSAAccountChangeListener =
- GSAAccountChangeListener.create(AppHooks.get().createGsaHelper());
- }
- mGSAAccountChangeListener.connect();
- });
- }
}
/**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java
@@ -37,7 +37,6 @@ import org.chromium.chrome.browser.contextmenu.ContextMenuCoordinator.ListItemTy
import org.chromium.chrome.browser.feature_engagement.TrackerFactory;
import org.chromium.chrome.browser.firstrun.FirstRunStatus;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
-import org.chromium.chrome.browser.gsa.GSAState;
import org.chromium.chrome.browser.lens.LensController;
import org.chromium.chrome.browser.lens.LensEntryPoint;
import org.chromium.chrome.browser.lens.LensIntentParams;
@@ -997,12 +996,6 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator {
LensMetrics.LensSupportStatus.ACTIVITY_NOT_ACCESSIBLE);
return false;
}
- if (GSAState.getInstance(mContext).isAgsaVersionBelowMinimum(
- versionName, LensUtils.getMinimumAgsaVersionForLensSupport())) {
- LensMetrics.recordLensSupportStatus(
- LENS_SUPPORT_STATUS_HISTOGRAM_NAME, LensMetrics.LensSupportStatus.OUT_OF_DATE);
- return false;
- }
if (LensUtils.isDeviceOsBelowMinimum()) {
LensMetrics.recordLensSupportStatus(
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivityClientConnectionKeeper.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivityClientConnectionKeeper.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivityClientConnectionKeeper.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivityClientConnectionKeeper.java
@@ -11,7 +11,6 @@ import org.chromium.base.metrics.RecordHistogram;
import org.chromium.chrome.browser.browserservices.intents.BrowserServicesIntentDataProvider;
import org.chromium.chrome.browser.customtabs.content.CustomTabActivityTabProvider;
import org.chromium.chrome.browser.dependency_injection.ActivityScope;
-import org.chromium.chrome.browser.gsa.GSAState;
import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher;
import org.chromium.chrome.browser.lifecycle.StartStopWithNativeObserver;
import org.chromium.chrome.browser.tab.Tab;
@@ -95,13 +94,5 @@ public class CustomTabActivityClientConnectionKeeper implements StartStopWithNat
}
}
assert status >= 0;
-
- if (GSAState.isGsaPackageName(packageName)) {
- RecordHistogram.recordEnumeratedHistogram("CustomTabs.ConnectionStatusOnReturn.GSA",
- status, ConnectionStatus.NUM_ENTRIES);
- } else {
- RecordHistogram.recordEnumeratedHistogram("CustomTabs.ConnectionStatusOnReturn.NonGSA",
- status, ConnectionStatus.NUM_ENTRIES);
- }
}
}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java
@@ -362,14 +362,6 @@ public class ProcessInitializationHandler {
}
});
- deferredStartupHandler.addDeferredTask(new Runnable() {
- @Override
- public void run() {
- // Starts syncing with GSA.
- AppHooks.get().createGsaHelper().startSync();
- }
- });
-
deferredStartupHandler.addDeferredTask(new Runnable() {
@Override
public void run() {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/search/SearchBoxMediator.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/search/SearchBoxMediator.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/search/SearchBoxMediator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/search/SearchBoxMediator.java
@@ -13,7 +13,6 @@ import android.view.ViewGroup;
import androidx.core.graphics.drawable.RoundedBitmapDrawable;
-import org.chromium.chrome.browser.gsa.GSAState;
import org.chromium.chrome.browser.lens.LensController;
import org.chromium.chrome.browser.lens.LensEntryPoint;
import org.chromium.chrome.browser.lens.LensIntentParams;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/share/LensUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/share/LensUtils.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/share/LensUtils.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/share/LensUtils.java
@@ -10,7 +10,6 @@ import android.text.TextUtils;
import org.chromium.chrome.browser.IntentHandler;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
-import org.chromium.chrome.browser.gsa.GSAState;
import org.chromium.chrome.browser.lens.LensController;
import org.chromium.components.externalauth.ExternalAuthUtils;
@@ -57,12 +56,7 @@ public class LensUtils {
if (context == null) {
return "";
}
- String agsaVersion = GSAState.getInstance(context).getAgsaVersionName();
- if (agsaVersion == null) {
return "";
- } else {
- return agsaVersion;
- }
}
}
@@ -114,11 +108,7 @@ public class LensUtils {
* @return Whether the package is valid.
*/
public static boolean isValidAgsaPackage(final ExternalAuthUtils externalAuthUtils) {
- if (sFakePassableLensEnvironmentForTesting) {
- return true;
- }
-
- return externalAuthUtils.isGoogleSigned(IntentHandler.PACKAGE_GSA);
+ return false;
}
/**
diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc
--- a/chrome/browser/flags/android/chrome_feature_list.cc
+++ b/chrome/browser/flags/android/chrome_feature_list.cc
@@ -665,7 +665,7 @@ const base::Feature kDynamicColorButtonsAndroid{
"DynamicColorButtonsAndroid", base::FEATURE_DISABLED_BY_DEFAULT};
const base::Feature kExperimentsForAgsa{"ExperimentsForAgsa",
- base::FEATURE_ENABLED_BY_DEFAULT};
+ base::FEATURE_DISABLED_BY_DEFAULT};
const base::Feature kExploreSites{"ExploreSites",
base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java
--- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java
+++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java
@@ -83,7 +83,7 @@ public class CachedFeatureFlags {
.put(ChromeFeatureList.READ_LATER, false)
.put(ChromeFeatureList.CCT_REMOVE_REMOTE_VIEW_IDS, true)
.put(ChromeFeatureList.CCT_INCOGNITO, true)
- .put(ChromeFeatureList.EXPERIMENTS_FOR_AGSA, true)
+ .put(ChromeFeatureList.EXPERIMENTS_FOR_AGSA, false)
.put(ChromeFeatureList.APP_MENU_MOBILE_SITE_OPTION, false)
.put(ChromeFeatureList.OPTIMIZATION_GUIDE_PUSH_NOTIFICATIONS, false)
.put(ChromeFeatureList.NEW_WINDOW_APP_MENU, true)
diff --git a/chrome/browser/ui/android/omnibox/BUILD.gn b/chrome/browser/ui/android/omnibox/BUILD.gn
--- a/chrome/browser/ui/android/omnibox/BUILD.gn
+++ b/chrome/browser/ui/android/omnibox/BUILD.gn
@@ -139,7 +139,6 @@ android_library("java") {
"//chrome/browser/device:java",
"//chrome/browser/feature_engagement:java",
"//chrome/browser/flags:java",
- "//chrome/browser/gsa:java",
"//chrome/browser/history_clusters:java",
"//chrome/browser/language/android:java",
"//chrome/browser/lens:java",
@@ -381,7 +380,6 @@ android_library("junit") {
"//chrome/android:base_module_java",
"//chrome/browser/device:java",
"//chrome/browser/flags:java",
- "//chrome/browser/gsa:java",
"//chrome/browser/lens:java",
"//chrome/browser/locale:java",
"//chrome/browser/preferences:java",
diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java
--- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java
+++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java
@@ -36,7 +36,6 @@ import org.chromium.base.task.PostTask;
import org.chromium.chrome.browser.device.DeviceClassManager;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.flags.ChromeSwitches;
-import org.chromium.chrome.browser.gsa.GSAState;
import org.chromium.chrome.browser.lens.LensController;
import org.chromium.chrome.browser.lens.LensEntryPoint;
import org.chromium.chrome.browser.lens.LensIntentParams;
--
2.25.1

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