mirror of
https://github.com/jqssun/android-helium-browser.git
synced 2026-06-23 09:16:54 +00:00
Compare commits
15 commits
v148.0.777
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4b91057e79 | ||
|
|
c63f21c76d | ||
|
|
41fb08ba13 | ||
|
|
fe89591825 | ||
|
|
3e0d493fb2 | ||
|
|
727f80a0b2 | ||
|
|
c0be0b1ccc | ||
|
|
8692691dad | ||
|
|
47a8883b95 | ||
|
|
8f50dff27b | ||
|
|
e7df780b05 | ||
|
|
5dfc4c34cf | ||
|
|
66db726a34 | ||
|
|
973b832475 | ||
|
|
95cacaea77 |
17 changed files with 223 additions and 82 deletions
37
.github/ISSUE_TEMPLATE/report.yml
vendored
Normal file
37
.github/ISSUE_TEMPLATE/report.yml
vendored
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
name: Report
|
||||
description: Report a bug or suggest a feature
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
### Important
|
||||
Before reporting a new issue, please check if it already exists [upstream](https://crbug.com/) or in the [issue tracker](https://github.com/jqssun/android-helium-browser/issues).
|
||||
|
||||
We aim to keep things lightweight. The scope of accepted bugs is limited to current patches. If a feature can be achieved via an extension or a user script, please refrain from opening a report.
|
||||
|
||||
- type: checkboxes
|
||||
id: checklist
|
||||
attributes:
|
||||
label: Verification
|
||||
description: Please verify the following before submitting.
|
||||
options:
|
||||
- label: I have checked upstream at crbug.com and I confirm this is NOT a known issue from Chromium.
|
||||
required: true
|
||||
- label: I have checked the issue tracker and I confirm this is NOT a known issue in this project.
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: environment
|
||||
attributes:
|
||||
label: Environment
|
||||
description: Please provide the applicable device model, operating system version, and app version.
|
||||
validations:
|
||||
required: false
|
||||
|
||||
- type: textarea
|
||||
id: description
|
||||
attributes:
|
||||
label: Description
|
||||
description: A clear and concise description of what the issue is.
|
||||
validations:
|
||||
required: true
|
||||
12
.github/workflows/build.yml
vendored
12
.github/workflows/build.yml
vendored
|
|
@ -13,6 +13,8 @@ on:
|
|||
|
||||
permissions:
|
||||
contents: write
|
||||
id-token: write
|
||||
attestations: write
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
|
@ -53,6 +55,7 @@ jobs:
|
|||
run: |
|
||||
export VERSION=$(find chromium/src/out/release -name '*arm64-v8a.apk' | sed 's/.*\///;s/\-arm64-v8a.apk$//')
|
||||
echo "VERSION=$VERSION" >> $GITHUB_ENV
|
||||
mv $(find chromium/src/out/release -name '*arm64-v8a.aab') $VERSION-${{ env.unix_time }}-arm64-v8a.aab
|
||||
mv $(find chromium/src/out/release -name '*arm64-v8a.apk') $VERSION-${{ env.unix_time }}-arm64-v8a.apk
|
||||
mv $(find chromium/src/out/release -name '*armeabi-v7a.apk') $VERSION-${{ env.unix_time }}-armeabi-v7a.apk
|
||||
|
||||
|
|
@ -63,5 +66,14 @@ jobs:
|
|||
name: v${{ env.VERSION }}
|
||||
tag_name: v${{ env.VERSION }}
|
||||
files: |
|
||||
${{ env.VERSION }}-${{ env.unix_time }}-arm64-v8a.aab
|
||||
${{ env.VERSION }}-${{ env.unix_time }}-arm64-v8a.apk
|
||||
${{ env.VERSION }}-${{ env.unix_time }}-armeabi-v7a.apk
|
||||
|
||||
- name: Attest
|
||||
uses: actions/attest-build-provenance@v4
|
||||
with:
|
||||
subject-path: |
|
||||
${{ env.VERSION }}-${{ env.unix_time }}-arm64-v8a.aab
|
||||
${{ env.VERSION }}-${{ env.unix_time }}-arm64-v8a.apk
|
||||
${{ env.VERSION }}-${{ env.unix_time }}-armeabi-v7a.apk
|
||||
|
|
|
|||
3
.gitignore
vendored
3
.gitignore
vendored
|
|
@ -4,4 +4,5 @@ chromium/
|
|||
depot_tools/
|
||||
keys/
|
||||
|
||||
*.apk
|
||||
*.aab
|
||||
*.apk
|
||||
22
README.md
22
README.md
|
|
@ -5,9 +5,9 @@
|
|||
[](https://github.com/jqssun/android-helium-browser/actions/workflows/build.yml)
|
||||
[](https://github.com/jqssun/android-helium-browser/releases)
|
||||
|
||||
An experimental Chromium-based web browser for Android with extensions support, based on
|
||||
- [Helium](https://github.com/imputnet/helium) by [imput](https://github.com/imputnet), as well as
|
||||
A fully open-source experimental Chromium-based web browser for Android with extensions support, based on
|
||||
- [Vanadium](https://github.com/GrapheneOS/Vanadium) by [GrapheneOS](https://github.com/GrapheneOS)
|
||||
- [Helium](https://github.com/imputnet/helium) by [imput](https://github.com/imputnet) (future patches pending GPLv2 compatibility)
|
||||
|
||||
<img alt="Helium Browser for Android" src="fastlane/metadata/android/en-US/images/phoneScreenshots/1.png" />
|
||||
|
||||
|
|
@ -15,8 +15,10 @@ An experimental Chromium-based web browser for Android with extensions support,
|
|||
|
||||
### Installing Extensions
|
||||
|
||||
Navigate to [Chrome Web Store](https://chromewebstore.google.com/), then enable **Desktop site** by selecting the menu button <kbd>⋮</kbd> in the top right corner and ensure the option is checked. Select **Okay** and proceed as normal if prompted with:
|
||||
Navigate to [Chrome Web Store](https://chromewebstore.google.com/), enable **Desktop site** by selecting the menu button <kbd>⋮</kbd> in the top right corner and ensure the option is checked. Select **Okay** and proceed as normal if prompted with:
|
||||
> The Chrome Web Store is only available on desktop.
|
||||
|
||||
Manifest V2 (MV2) extensions are supported. You can install [uBlock Origin from Chrome Web Store](https://chromewebstore.google.com/detail/ublock-origin/cjpalhdlnbpafiamejdnhcphjbkeiagm).
|
||||
|
||||
Once you select **Add to Chrome**, [the extension will be installed in the background](https://support.google.com/chrome_webstore/answer/2664769) until the button changes to **Remove from Chrome**.
|
||||
|
||||
|
|
@ -26,8 +28,6 @@ To use [an extension's popup](https://developer.chrome.com/docs/extensions/devel
|
|||
|
||||
To run an extension in Incognito (OTR) mode, go to **Manage extensions**, find the extension you want to use in Incognito mode, select **Details**, and turn on **Allow in Incognito**.
|
||||
|
||||
Manifest V2 (MV2) extensions are supported. You can install [uBlock Origin from Chrome Web Store](https://chromewebstore.google.com/detail/ublock-origin/cjpalhdlnbpafiamejdnhcphjbkeiagm).
|
||||
|
||||
### Debug URLs
|
||||
|
||||
To view and access the debug URLs, use [`chrome://chrome-urls`](chrome://chrome-urls). For **Experiments**, use [`chrome://flags`](chrome://flags).
|
||||
|
|
@ -80,14 +80,20 @@ flowchart TD
|
|||
style n8 stroke:#FF6D00
|
||||
```
|
||||
|
||||
The full build aims to be consistent with [Helium](https://github.com/imputnet/helium-linux), which means additional patches are necessary before all features can be ported over. All [Vanadium](https://github.com/GrapheneOS/Vanadium) patches are applied by default. Further patches are underway. These are pending the resolution of licensing incompatibilities between the two browsers.
|
||||
All [Vanadium](https://github.com/GrapheneOS/Vanadium) patches are applied by default. While the full build aims to be consistent with [Helium](https://github.com/imputnet/helium-linux), downstream implementation of Helium patches is currently paused to ensure strict compliance with upstream licensing requirements. The diagram reflects the architecture of initial ported releases and serves as the target framework if resolution is achieved.
|
||||
|
||||
## Building
|
||||
|
||||
All releases are built using [Actions](https://github.com/features/actions). Current releases can also be attested using [GitHub CLI](https://github.com/cli/cli).
|
||||
|
||||
```shell
|
||||
gh attestation verify *.apk -R jqssun/android-helium-browser
|
||||
```
|
||||
|
||||
This repository provides the build script to compile on the latest Ubuntu, and may also work with other Linux distributions.
|
||||
|
||||
To build these releases yourself via CI (e.g. GitHub Actions), fork this repository. Supply your `base64` encoded `keystore.jks` and `local.properties` (containing your `keyAlias`, `keyPassword` and `storePassword`) to [**Repository secrets**](https://github.com/jqssun/android-helium-browser/blob/main/.github/workflows/build.yml#L28-L29) under **Settings** > **Secrets and variables** > **Actions**. To generate a release, go to **Actions**, select **Build**, and select **Run workflow**. Under **Runner**, you can either use a GitHub-hosted runner by entering `ubuntu-latest`, or `self-hosted` for your own hardware.
|
||||
To build these releases yourself via CI (e.g. GitHub Actions), fork this repository. Supply your `base64` encoded `keystore.jks` and `local.properties` (containing your `keyAlias`, `keyPassword` and `storePassword`) to [**Repository secrets**](https://github.com/jqssun/android-helium-browser/blob/main/.github/workflows/build.yml#L49-L50) under **Settings** > **Secrets and variables** > **Actions**. To generate a release, go to **Actions**, select **Build**, and select **Run workflow**. Under **Runner**, you can either use a GitHub-hosted runner by entering `ubuntu-latest`, or `self-hosted` for your own hardware.
|
||||
|
||||
## Credits
|
||||
|
||||
This project would not have been possible without the huge community contributions from [Helium](https://github.com/imputnet/helium), [Vanadium](https://github.com/GrapheneOS/Vanadium), as well as [ungoogled-chromium](https://github.com/ungoogled-software/ungoogled-chromium) and various other upstream projects. All credit goes to the original authors and contributors. This project is currently being developed independently of upstream.
|
||||
This project would not have been possible without the huge community contributions from [Vanadium](https://github.com/GrapheneOS/Vanadium), [Helium](https://github.com/imputnet/helium), as well as [ungoogled-chromium](https://github.com/ungoogled-software/ungoogled-chromium) and various other upstream projects. All credit goes to the original authors and contributors. This project started around the same time as [Helium Browser for Linux](https://github.com/imputnet/helium-linux) but it is not officially affiliated with the upstream [Helium](https://github.com/imputnet/helium) project.
|
||||
36
args.gn
Normal file
36
args.gn
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
chrome_public_manifest_package = "io.github.jqssun.helium"
|
||||
is_desktop_android = true
|
||||
target_os = "android"
|
||||
target_cpu = "arm"
|
||||
is_component_build = false
|
||||
is_debug = false
|
||||
is_official_build = true
|
||||
symbol_level = 1
|
||||
disable_fieldtrial_testing_config = true
|
||||
ffmpeg_branding = "Chrome"
|
||||
proprietary_codecs = true
|
||||
enable_vr = false
|
||||
enable_arcore = false
|
||||
enable_openxr = false
|
||||
enable_cardboard = false
|
||||
enable_remoting = false
|
||||
enable_reporting = false
|
||||
google_api_key = "x"
|
||||
google_default_client_id = "x"
|
||||
google_default_client_secret = "x"
|
||||
|
||||
use_siso = true
|
||||
use_login_database_as_backend = true
|
||||
build_contextual_search = false
|
||||
dcheck_always_on = false
|
||||
enable_iterator_debugging = false
|
||||
exclude_unwind_tables = false
|
||||
icu_use_data_file = true
|
||||
rtc_build_examples = false
|
||||
use_errorprone_java_compiler = false
|
||||
use_rtti = false
|
||||
enable_av1_decoder = true
|
||||
enable_dav1d_decoder = true
|
||||
include_both_v8_snapshots = false
|
||||
include_both_v8_snapshots_android_secondary_abi = false
|
||||
generate_linker_map = true
|
||||
80
build.sh
80
build.sh
|
|
@ -5,7 +5,7 @@ export VERSION=$(grep -m1 -o '[0-9]\+\(\.[0-9]\+\)\{3\}' vanadium/args.gn)
|
|||
export CHROMIUM_SOURCE=https://chromium.googlesource.com/chromium/src.git # https://github.com/chromium/chromium.git
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y sudo lsb-release file nano git curl python3 python3-pillow
|
||||
sudo apt-get install -y sudo lsb-release file nano git curl python3 python3-pillow imagemagick
|
||||
|
||||
# https://github.com/uazo/cromite/blob/master/tools/images/chr-source/prepare-build.sh
|
||||
git clone --depth 1 https://chromium.googlesource.com/chromium/tools/depot_tools.git
|
||||
|
|
@ -14,7 +14,7 @@ mkdir -p chromium/src/out/Default; cd chromium
|
|||
gclient root; cd src
|
||||
git init
|
||||
git remote add origin $CHROMIUM_SOURCE
|
||||
git fetch --depth 2 $CHROMIUM_SOURCE +refs/tags/$VERSION:chromium_$VERSION
|
||||
git fetch --depth 1 $CHROMIUM_SOURCE +refs/tags/$VERSION:chromium_$VERSION
|
||||
git checkout $VERSION
|
||||
export COMMIT=$(git show-ref -s $VERSION | head -n1)
|
||||
cat > ../.gclient <<EOF
|
||||
|
|
@ -38,10 +38,12 @@ git config --add remote.origin.fetch '+refs/tags/*:refs/tags/*'
|
|||
|
||||
# https://grapheneos.org/build#browser-and-webview
|
||||
rm -rf $SCRIPT_DIR/vanadium/patches/*trichrome-{apk-build-targets,browser-apk-targets}.patch
|
||||
rm -rf $SCRIPT_DIR/vanadium/patches/*{detailed,supported}-language*.patch
|
||||
rm -rf $SCRIPT_DIR/vanadium/patches/*component-updates.patch
|
||||
# rm -rf $SCRIPT_DIR/vanadium/patches/*crashpad*.patch
|
||||
replace "$SCRIPT_DIR/vanadium/patches" "VANADIUM" "HELIUM"
|
||||
replace "$SCRIPT_DIR/vanadium/patches" "Vanadium" "Helium"
|
||||
replace "$SCRIPT_DIR/vanadium/patches" "vanadium" "helium"
|
||||
replace "$SCRIPT_DIR/vanadium/patches" ".helium.app" ".vanadium.app" # components
|
||||
git am --whitespace=nowarn --keep-non-patch $SCRIPT_DIR/vanadium/patches/*.patch
|
||||
|
||||
gclient sync -D --no-history --nohooks
|
||||
|
|
@ -55,85 +57,23 @@ rm -rf third_party/angle/third_party/VK-GL-CTS/
|
|||
# python3 "${SCRIPT_DIR}/helium/utils/generate_resources.py" "${SCRIPT_DIR}/helium/resources/generate_resources.txt" "${SCRIPT_DIR}/helium/resources"
|
||||
# python3 "${SCRIPT_DIR}/helium/utils/replace_resources.py" "${SCRIPT_DIR}/helium/resources/helium_resources.txt" "${SCRIPT_DIR}/helium/resources" .
|
||||
|
||||
sed -i 's|constexpr gfx::Size kMinSize = {25, 25};|constexpr gfx::Size kMinSize = {256, 25};|' chrome/browser/ui/android/extensions/extension_action_popup_contents.cc
|
||||
sed -i '/feature_overrides.EnableFeature(::features::kSkipVulkanBlocklist);/d' chrome/browser/chrome_browser_field_trials.cc
|
||||
sed -i '/feature_overrides.EnableFeature(::features::kDefaultANGLEVulkan);/d' chrome/browser/chrome_browser_field_trials.cc
|
||||
sed -i '/feature_overrides.EnableFeature(::features::kVulkanFromANGLE);/d' chrome/browser/chrome_browser_field_trials.cc
|
||||
|
||||
# ext: mv2
|
||||
sed -i 's/BASE_FEATURE(kExtensionManifestV2Unsupported, base::FEATURE_ENABLED_BY_DEFAULT);/BASE_FEATURE(kExtensionManifestV2Unsupported, base::FEATURE_DISABLED_BY_DEFAULT);/' extensions/common/extension_features.cc
|
||||
sed -i 's/BASE_FEATURE(kExtensionManifestV2Disabled, base::FEATURE_ENABLED_BY_DEFAULT);/BASE_FEATURE(kExtensionManifestV2Disabled, base::FEATURE_DISABLED_BY_DEFAULT);/' extensions/common/extension_features.cc
|
||||
sed -i 's|uncompiled_sources_ = \[|&\n "browser_action.json",\n "page_action.json",|' chrome/common/extensions/api/api_sources.gni
|
||||
|
||||
# ext: toolbar
|
||||
sed -i '/feature_overrides.EnableFeature(::features::kDefaultPassthroughCommandDecoder);/d' chrome/browser/chrome_browser_field_trials.cc
|
||||
sed -i '/<ViewStub/{N;N;N;N;N;N; /optional_button_stub/a\
|
||||
<ViewStub\
|
||||
android:id="@+id/extensions_toolbar_container_stub"\
|
||||
android:inflatedId="@+id/extensions_toolbar_container"\
|
||||
android:layout_width="wrap_content"\
|
||||
android:layout_height="match_parent" />
|
||||
}' chrome/browser/ui/android/toolbar/java/res/layout/toolbar_phone.xml
|
||||
sed -i 's|(ToolbarTablet) mToolbarLayout,|mToolbarLayout,|' chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
|
||||
sed -i '/mPrefService.setBoolean(Pref.PIN_EXTENSIONS_MENU_BUTTON, pinned);$/aif (!pinned) { mContainer.findViewById(R.id.extensions_menu_button).setVisibility(View.GONE); }' chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsToolbarCoordinatorImpl.java
|
||||
|
||||
# ext: load in incognito
|
||||
sed -i 's| if (!context->IsOffTheRecord()) {| if (true) {|' extensions/browser/process_manager.cc
|
||||
sed -i 's|public static boolean shouldOpenIncognitoAsWindow() {|public static boolean shouldOpenIncognitoAsWindow() { if (true) return true;|' chrome/browser/incognito/android/java/src/org/chromium/chrome/browser/incognito/IncognitoUtils.java
|
||||
|
||||
sed -i 's|if (!IncognitoUtils.shouldOpenIncognitoAsWindow() \|\| isIncognitoShowing()) {|if (true) {|' chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedAppMenuPropertiesDelegate.java
|
||||
source $SCRIPT_DIR/patch.sh
|
||||
|
||||
cp $SCRIPT_DIR/args.gn out/Default/args.gn
|
||||
sudo dpkg --add-architecture i386; sudo apt-get update; sudo apt-get install -y libgcc-s1:i386
|
||||
cat > out/Default/args.gn <<EOF
|
||||
chrome_public_manifest_package = "io.github.jqssun.helium"
|
||||
is_desktop_android = true
|
||||
target_os = "android"
|
||||
target_cpu = "arm"
|
||||
is_component_build = false
|
||||
is_debug = false
|
||||
is_official_build = true
|
||||
symbol_level = 1
|
||||
disable_fieldtrial_testing_config = true
|
||||
ffmpeg_branding = "Chrome"
|
||||
proprietary_codecs = true
|
||||
enable_vr = false
|
||||
enable_arcore = false
|
||||
enable_openxr = false
|
||||
enable_cardboard = false
|
||||
enable_remoting = false
|
||||
enable_reporting = false
|
||||
google_api_key = "x"
|
||||
google_default_client_id = "x"
|
||||
google_default_client_secret = "x"
|
||||
|
||||
use_siso = true
|
||||
use_login_database_as_backend = true
|
||||
build_contextual_search = false
|
||||
dcheck_always_on = false
|
||||
enable_iterator_debugging = false
|
||||
exclude_unwind_tables = false
|
||||
icu_use_data_file = true
|
||||
rtc_build_examples = false
|
||||
use_errorprone_java_compiler = false
|
||||
use_rtti = false
|
||||
enable_av1_decoder = true
|
||||
enable_dav1d_decoder = true
|
||||
include_both_v8_snapshots = false
|
||||
include_both_v8_snapshots_android_secondary_abi = false
|
||||
generate_linker_map = true
|
||||
EOF
|
||||
|
||||
gn gen out/Default # gn args out/Default; echo 'treat_warnings_as_errors = false' >> out/Default/args.gn
|
||||
mkdir -p out/tmp out/release
|
||||
autoninja -C out/Default chrome_public_apk
|
||||
mv $(find out/Default/apks -name 'Chrome*.apk') out/tmp/$VERSION-armeabi-v7a.apk
|
||||
|
||||
sed -i 's/target_cpu = "arm"/target_cpu = "arm64"/' out/Default/args.gn
|
||||
autoninja -C out/Default chrome_public_apk
|
||||
autoninja -C out/Default chrome_public_apk chrome_public_bundle
|
||||
mv $(find out/Default/apks -name 'Chrome*.apk') out/tmp/$VERSION-arm64-v8a.apk
|
||||
mv $(find out/Default/apks -name 'Chrome*.aab') out/tmp/$VERSION-arm64-v8a.aab
|
||||
|
||||
export PATH=$PWD/third_party/jdk/current/bin/:$PATH
|
||||
export ANDROID_HOME=$PWD/third_party/android_sdk/public
|
||||
sign_apk out/tmp/$VERSION-armeabi-v7a.apk out/release/$VERSION-armeabi-v7a.apk
|
||||
sign_apk out/tmp/$VERSION-arm64-v8a.apk out/release/$VERSION-arm64-v8a.apk
|
||||
sign_aab out/tmp/$VERSION-arm64-v8a.aab out/release/$VERSION-arm64-v8a.aab
|
||||
rm -rf $SCRIPT_DIR/keys
|
||||
|
|
|
|||
|
|
@ -18,3 +18,8 @@ sign_apk() {
|
|||
source $SCRIPT_DIR/keys/local.properties
|
||||
$apksigner sign -verbose -ks $SCRIPT_DIR/keys/test.jks --ks-pass pass:$storePassword --key-pass pass:$keyPassword --ks-key-alias $keyAlias --out $2 $1 || exit 1
|
||||
}
|
||||
|
||||
sign_aab() {
|
||||
source $SCRIPT_DIR/keys/local.properties
|
||||
jarsigner -verbose -sigalg SHA256withRSA -digestalg SHA-256 -keystore $SCRIPT_DIR/keys/test.jks -storepass $storePassword -keypass $keyPassword -signedjar $2 $1 $keyAlias || exit 1
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1 +1,9 @@
|
|||
An experimental Chromium-based web browser for Android with extensions support, based on Helium and Vanadium.
|
||||
A fully open-source experimental Chromium-based web browser for Android with extensions support.
|
||||
|
||||
- Installing Extensions: Navigate to Chrome Web Store, enable "Desktop site", and then proceed as normal. Manifest V2 (MV2) extensions are supported. You can install uBlock Origin from Chrome Web Store.
|
||||
|
||||
- Using Extensions: To use an extension's popup, open extensions menu, select the menu button next to the extension, and choose "Pin to toolbar" from the list. You can then open the popup using the extension's dedicated toolbar icon. To run an extension in Incognito (OTR) mode, go to "Manage extensions", find the extension you want to use in Incognito mode, select "Details", and turn on "Allow in Incognito".
|
||||
|
||||
- Debug URLs: To view and access them, use "chrome://chrome-urls".
|
||||
|
||||
- WebRTC IP Policy: Available under "Privacy and security" in Settings. If you experience issues with WebRTC due to IPs being shielded by default, you may try to change it to Default public interface only, or Default.
|
||||
|
|
|
|||
BIN
fastlane/metadata/android/en-US/images/featureGraphic.png
Normal file
BIN
fastlane/metadata/android/en-US/images/featureGraphic.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
BIN
fastlane/metadata/android/en-US/images/icon.png
Normal file
BIN
fastlane/metadata/android/en-US/images/icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 48 KiB |
BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/3.png
Normal file
BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/3.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 133 KiB |
BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/4.png
Normal file
BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/4.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 128 KiB |
BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/5.png
Normal file
BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/5.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 109 KiB |
BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/6.png
Normal file
BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/6.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 414 KiB |
|
|
@ -1 +1 @@
|
|||
A Chromium-based web browser for Android with extensions support.
|
||||
Private and secure open-source Android browser with support for extensions
|
||||
96
patch.sh
Executable file
96
patch.sh
Executable file
|
|
@ -0,0 +1,96 @@
|
|||
#!/bin/bash
|
||||
|
||||
mkdir -p chrome/android/java/res_helium_base
|
||||
for icon in $(find chrome/android/java/res_helium_base -type f -name '*.png'); do convert $icon -fill navy -tint 36 $icon; done
|
||||
# sed -i 's|Google LLC|jqssun, Google LLC|' chrome/browser/ui/android/strings/android_chrome_strings.grd
|
||||
|
||||
sed -i '/feature_overrides.EnableFeature(::features::kSkipVulkanBlocklist);/d' chrome/browser/chrome_browser_field_trials.cc
|
||||
sed -i '/feature_overrides.EnableFeature(::features::kDefaultANGLEVulkan);/d' chrome/browser/chrome_browser_field_trials.cc
|
||||
sed -i '/feature_overrides.EnableFeature(::features::kVulkanFromANGLE);/d' chrome/browser/chrome_browser_field_trials.cc
|
||||
sed -i '/feature_overrides.EnableFeature(::features::kDefaultPassthroughCommandDecoder);/d' chrome/browser/chrome_browser_field_trials.cc
|
||||
|
||||
# dev
|
||||
sed -i 's/BASE_FEATURE(kSubmenusInAppMenu, base::FEATURE_DISABLED_BY_DEFAULT);/BASE_FEATURE(kSubmenusInAppMenu, base::FEATURE_ENABLED_BY_DEFAULT);/' chrome/browser/flags/android/chrome_feature_list.cc
|
||||
sed -i '/BASE_FEATURE(kTaskManagerClank,/,/);/ s/base::FEATURE_DISABLED_BY_DEFAULT/base::FEATURE_ENABLED_BY_DEFAULT/' chrome/browser/task_manager/common/task_manager_features.cc
|
||||
sed -i 's/BASE_FEATURE(kAndroidDevToolsFrontend, base::FEATURE_DISABLED_BY_DEFAULT);/BASE_FEATURE(kAndroidDevToolsFrontend, base::FEATURE_ENABLED_BY_DEFAULT);/' content/public/common/content_features.cc
|
||||
sed -i 's|if (!DeviceFormFactor.isNonMultiDisplayContextOnTablet(mContext)) {|if (false) {|' chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedAppMenuPropertiesDelegate.java
|
||||
sed -i 's|boolean shouldShowDeveloperMenu() {|boolean shouldShowDeveloperMenu() { if (true) return DevToolsWindowAndroid.isDevToolsAllowedFor(getProfile(), mItemDelegate.getWebContents());|' chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java
|
||||
sed -i 's|TabUtils.isUsingDesktopUserAgent(mItemDelegate.getWebContents())|(true \|\| TabUtils.isUsingDesktopUserAgent(mItemDelegate.getWebContents()))|' chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java
|
||||
|
||||
# search
|
||||
sed -i 's|BASE_FEATURE(kOmniboxSiteSearch, DISABLED);|BASE_FEATURE(kOmniboxSiteSearch, ENABLED);|' components/omnibox/common/omnibox_features.cc
|
||||
|
||||
# playback
|
||||
sed -i 's|#if BUILDFLAG(IS_ANDROID)|#if 0|' content/public/renderer/render_frame_media_playback_options.cc
|
||||
|
||||
# viewport
|
||||
sed -i 's|constexpr gfx::Size kMinSize = {25, 25};|constexpr gfx::Size kMinSize = {256, 25};|' chrome/browser/ui/android/extensions/extension_action_popup_contents.cc
|
||||
sed -i 's|<meta name="color-scheme" content="light dark">|&\n<meta name="viewport" content="width=device-width">|' chrome/browser/resources/extensions/extensions.html
|
||||
sed -i 's|--extensions-card-width: 400px;|--extensions-card-width: 96%;|' chrome/browser/resources/extensions/item_list.css # card width
|
||||
sed -i 's|--cr-toolbar-field-width: 680px;|--cr-toolbar-field-width: 96%;|' chrome/browser/resources/extensions/shared_vars.css # page content
|
||||
sed -i 's|padding: 24px 60px 64px;|padding: 24px 0 64px;|' chrome/browser/resources/extensions/item_list.css # content wrapper
|
||||
|
||||
# ext: mv2
|
||||
sed -i 's/BASE_FEATURE(kExtensionManifestV2Unsupported, base::FEATURE_ENABLED_BY_DEFAULT);/BASE_FEATURE(kExtensionManifestV2Unsupported, base::FEATURE_DISABLED_BY_DEFAULT);/' extensions/common/extension_features.cc
|
||||
sed -i 's/BASE_FEATURE(kExtensionManifestV2Disabled, base::FEATURE_ENABLED_BY_DEFAULT);/BASE_FEATURE(kExtensionManifestV2Disabled, base::FEATURE_DISABLED_BY_DEFAULT);/' extensions/common/extension_features.cc
|
||||
sed -i 's|uncompiled_sources_ = \[|&\n "browser_action.json",\n "page_action.json",|' chrome/common/extensions/api/api_sources.gni
|
||||
sed -i 's/api::webstore_private::MV2DeprecationStatus::kHardDisable)));/api::webstore_private::MV2DeprecationStatus::kNone)));/' chrome/browser/extensions/api/webstore_private/webstore_private_api.cc
|
||||
sed -i 's/bool g_allow_mv2_for_testing = false;/bool g_allow_mv2_for_testing = true;/' extensions/browser/manifest_v2_experiment_manager.cc
|
||||
|
||||
# ext: toolbar
|
||||
sed -i '/<ViewStub/{N;N;N;N;N;N; /optional_button_stub/a\
|
||||
<ViewStub\
|
||||
android:id="@+id/extensions_toolbar_container_stub"\
|
||||
android:inflatedId="@+id/extensions_toolbar_container"\
|
||||
android:layout_width="wrap_content"\
|
||||
android:layout_height="match_parent" />
|
||||
}' chrome/browser/ui/android/toolbar/java/res/layout/toolbar_phone.xml
|
||||
sed -i 's|(ToolbarTablet) mToolbarLayout,|mToolbarLayout,|' chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
|
||||
sed -i '/\/\/ Draw the signin button if visible./i\ { View extContainer = findViewById(R.id.extensions_toolbar_container); if (extContainer != null \&\& extContainer.getVisibility() != View.GONE \&\& extContainer.getWidth() != 0) { canvas.save(); ViewUtils.translateCanvasToView(mToolbarButtonsContainer, extContainer, canvas); extContainer.draw(canvas); canvas.restore(); } }' chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhone.java
|
||||
|
||||
# ext: pin
|
||||
sed -i '/Pref.PIN_EXTENSIONS_MENU_BUTTON, this::updateMenuButtonPinState);$/a\if (!mPrefService.getBoolean(Pref.PIN_EXTENSIONS_MENU_BUTTON)) { mContainer.findViewById(R.id.extensions_menu_button).setVisibility(View.GONE); }' chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsToolbarCoordinatorImpl.java
|
||||
sed -i '/"ExtensionsToolbarCoordinatorImpl.requestLayoutWithViewUtils()");$/a\if (!isMenuButtonPinned()) { mContainer.findViewById(R.id.extensions_menu_button).setVisibility(View.GONE); }' chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsToolbarCoordinatorImpl.java
|
||||
|
||||
# ext: incognito
|
||||
sed -i 's|if (!context->IsOffTheRecord()) {|if (true) {|' extensions/browser/process_manager.cc
|
||||
sed -i 's|public static boolean shouldOpenIncognitoAsWindow() {|public static boolean shouldOpenIncognitoAsWindow() { if (true) return true;|' chrome/browser/incognito/android/java/src/org/chromium/chrome/browser/incognito/IncognitoUtils.java
|
||||
|
||||
# ext: priority
|
||||
sed -i 's|host_contents_->SetColorProviderSource(NoOpColorProviderSource::Get());|&\nhost_contents_->SetPrimaryPageImportance(content::ChildProcessImportance::IMPORTANT, content::ChildProcessImportance::NORMAL);|' extensions/browser/extension_host.cc
|
||||
|
||||
# ext: perms prompt
|
||||
sed -i '/content::WebContents\* web_contents = show_params->GetParentWebContents();/,/DCHECK(view_android);/{/GetParentWebContents/!d}' chrome/browser/ui/android/extensions/extension_install_dialog_view_android.cc
|
||||
sed -i 's|view_android->GetWindowAndroid();|show_params->GetParentWindow();|' chrome/browser/ui/android/extensions/extension_install_dialog_view_android.cc
|
||||
|
||||
# tmp
|
||||
sed -i 's|if (!IncognitoUtils.shouldOpenIncognitoAsWindow() \|\| isIncognitoShowing()) {|if (true) {|' chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedAppMenuPropertiesDelegate.java
|
||||
sed -i 's/BASE_FEATURE(kAndroidSearchInSettings,"SearchInSettings", base::FEATURE_DISABLED_BY_DEFAULT);/BASE_FEATURE(kAndroidSearchInSettings,"SearchInSettings", base::FEATURE_ENABLED_BY_DEFAULT);/' chrome/browser/flags/android/chrome_feature_list.cc
|
||||
for file in components/omnibox/browser/autocomplete_match.h components/omnibox/browser/autocomplete_match.cc components/omnibox/browser/actions/omnibox_action.h components/omnibox/browser/location_bar_model_impl.cc components/omnibox/browser/location_bar_model_util.cc; do
|
||||
sed -i '/#include "build\/build_config.h"/i #include "build/android_buildflags.h"' $file
|
||||
sed -i 's/#if (!BUILDFLAG(IS_ANDROID) || BUILDFLAG(ENABLE_VR)) && !BUILDFLAG(IS_IOS)/#if (!BUILDFLAG(IS_ANDROID) || BUILDFLAG(ENABLE_VR) || BUILDFLAG(IS_DESKTOP_ANDROID)) \&\& !BUILDFLAG(IS_IOS)/' $file
|
||||
done
|
||||
|
||||
# crbug.com/40831291: bottom address bar
|
||||
sed -i 's@(idealFitsBelow && spaceBelowAnchor >= spaceAboveAnchor) || !idealFitsAbove;@(idealFitsBelow == idealFitsAbove) ? (spaceBelowAnchor >= spaceAboveAnchor) : idealFitsBelow;@' ui/android/java/src/org/chromium/ui/widget/PopupSpecCalculator.java
|
||||
|
||||
# crbug.com/404069963: ntp override
|
||||
sed -i '/feature_overrides.EnableFeature(chrome::android::kChromeNativeUrlOverriding);/d' chrome/browser/chrome_browser_field_trials.cc
|
||||
sed -i 's|newCachedFlag(CHROME_NATIVE_URL_OVERRIDING, BuildConfig.IS_DESKTOP_ANDROID)|newCachedFlag(CHROME_NATIVE_URL_OVERRIDING, false)|' chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
|
||||
|
||||
# crbug.com/431004500: incognito uaf
|
||||
sed -i '/for (int i = 0; i < tab_list->GetTabCount(); ++i) {/i if (!tab_list) { continue; }' chrome/browser/extensions/api/tabs/tabs_api.cc
|
||||
|
||||
# crbug.com/40274462: incognito uaf
|
||||
sed -i '/CONTENT_EXPORT static WebContents\* FromRenderFrameHost(RenderFrameHost\* rfh);/a\CONTENT_EXPORT static bool HasLiveWebContentsForBrowserContext(BrowserContext* browser_context);' content/public/browser/web_contents.h
|
||||
sed -i '/^WebContentsImpl::WebContentsImpl(BrowserContext\* browser_context)/i\ bool WebContents::HasLiveWebContentsForBrowserContext(BrowserContext* browser_context) { for (WebContentsImpl* web_contents : WebContentsImpl::GetAllWebContents()) { if (web_contents->GetBrowserContext() == browser_context) { return true; } } return false; }' content/browser/web_contents/web_contents_impl.cc
|
||||
sed -i '/#include "content\/public\/browser\/render_process_host.h"/a#include "content/public/browser/web_contents.h"' chrome/browser/profiles/profile_destroyer.cc
|
||||
sed -i '/^void ProfileDestroyer::DestroyOTRProfileWhenAppropriateWithTimeout($/,/MaybeSendDestroyedNotification/{/ profile->MaybeSendDestroyedNotification();/i\
|
||||
if (content::WebContents::HasLiveWebContentsForBrowserContext(profile)) { return; }
|
||||
}' chrome/browser/profiles/profile_destroyer.cc
|
||||
|
||||
# crbug.com/444024982: api 31
|
||||
sed -i 's/|| mSupportedProfileType == SupportedProfileType.REGULAR) {/|| mSupportedProfileType == SupportedProfileType.REGULAR || mSupportedProfileType == SupportedProfileType.MIXED) {/' chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
|
||||
sed -i 's/|| mSupportedProfileType == SupportedProfileType.OFF_THE_RECORD) {/|| mSupportedProfileType == SupportedProfileType.OFF_THE_RECORD || mSupportedProfileType == SupportedProfileType.MIXED) {/' chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
|
||||
|
||||
export PATCHED=1
|
||||
2
vanadium
2
vanadium
|
|
@ -1 +1 @@
|
|||
Subproject commit adfd3a9edb0f212332447682ef6be20580d576ba
|
||||
Subproject commit 6f3faec0acc5d003cf1c2374d555062cfe3b757f
|
||||
Loading…
Add table
Add a link
Reference in a new issue