Patches for 145 (final version)

This commit is contained in:
Carmelo Messina
2026-02-05 14:18:21 +01:00
parent 0ae84a9ecb
commit eab93d000f
43 changed files with 1433 additions and 444 deletions
@@ -36,7 +36,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
.../browser/history/HistoryManager.java | 27 ++-
.../chrome/browser/history/HistoryPage.java | 16 ++
.../native_page/NativePageFactory.java | 4 +-
.../chrome/browser/ntp/RecentTabsManager.java | 28 ++-
.../chrome/browser/ntp/RecentTabsManager.java | 29 ++-
.../privacy/settings/IncognitoSettings.java | 175 ++++++++++++++++++
.../settings/FragmentDependencyProvider.java | 4 +
.../HistoricalTabModelObserver.java | 5 +-
@@ -89,7 +89,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
.../add-an-always-incognito-mode.inc | 1 +
.../add-an-always-incognito-mode.inc | 3 +
.../add-an-always-incognito-mode.inc | 1 +
70 files changed, 807 insertions(+), 116 deletions(-)
70 files changed, 808 insertions(+), 116 deletions(-)
create mode 100644 chrome/android/java/res/xml/incognito_preferences.xml
create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/AlwaysIncognitoLinkInterceptor.java
create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/IncognitoSettings.java
@@ -654,10 +654,11 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/Nat
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsManager.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsManager.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsManager.java
@@ -48,6 +48,15 @@ import org.chromium.ui.base.WindowAndroid;
@@ -48,6 +48,16 @@ import org.chromium.ui.base.WindowAndroid;
import org.chromium.ui.modaldialog.ModalDialogManager;
import org.chromium.url.GURL;
+import android.content.Context;
+import android.content.Intent;
+import android.provider.Browser;
+import android.net.Uri;
@@ -670,7 +671,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsM
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -120,7 +129,8 @@ public class RecentTabsManager
@@ -120,7 +130,8 @@ public class RecentTabsManager
SnackbarManager snackbarManager,
Runnable showHistoryManager,
RecentlyClosedEntriesManager recentlyClosedEntriesManager) {
@@ -680,7 +681,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsM
mActiveTab = tab;
mShowHistoryManager = showHistoryManager;
mForeignSessionHelper = new ForeignSessionHelper(profile);
@@ -310,6 +320,22 @@ public class RecentTabsManager
@@ -310,6 +321,22 @@ public class RecentTabsManager
*/
public void openRecentlyClosedTab(RecentlyClosedTab tab, int windowDisposition) {
if (mIsDestroyed) return;
@@ -858,7 +859,7 @@ new file mode 100644
+ MenuItem help =
+ menu.add(Menu.NONE, R.id.menu_id_targeted_help, Menu.NONE, R.string.menu_help);
+ help.setIcon(VectorDrawableCompat.create(
+ getResources(), R.drawable.ic_help_and_feedback, getActivity().getTheme()));
+ getResources(), R.drawable.ic_help_24dp, getActivity().getTheme()));
+ }
+
+ @Override
@@ -327,8 +327,8 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse
}
+void BookmarkBridge::ImportBookmarks(JNIEnv* env,
+ const JavaParamRef<jobject>& obj,
+ const JavaParamRef<jobject>& java_window) {
+ const JavaRef<jobject>& obj,
+ const JavaRef<jobject>& java_window) {
+ DCHECK(IsLoaded());
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+
@@ -357,9 +357,9 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse
+}
+
+void BookmarkBridge::ExportBookmarks(JNIEnv* env,
+ const JavaParamRef<jobject>& obj,
+ const JavaParamRef<jobject>& java_window,
+ const JavaParamRef<jstring>& j_export_path) {
+ const JavaRef<jobject>& obj,
+ const JavaRef<jobject>& java_window,
+ const JavaRef<jstring>& j_export_path) {
+ DCHECK(IsLoaded());
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+
@@ -544,13 +544,13 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser
jint type);
+ void ImportBookmarks(JNIEnv* env,
+ const base::android::JavaParamRef<jobject>& obj,
+ const base::android::JavaParamRef<jobject>& java_window);
+ const base::android::JavaRef<jobject>& obj,
+ const base::android::JavaRef<jobject>& java_window);
+
+ void ExportBookmarks(JNIEnv* env,
+ const base::android::JavaParamRef<jobject>& obj,
+ const base::android::JavaParamRef<jobject>& java_window,
+ const base::android::JavaParamRef<jstring>& j_export_path);
+ const base::android::JavaRef<jobject>& obj,
+ const base::android::JavaRef<jobject>& java_window,
+ const base::android::JavaRef<jstring>& j_export_path);
+ void ExportBookmarksEnd(const base::android::ScopedJavaGlobalRef<jobject>& obj,
+ ui::WindowAndroid* window, bookmark_html_writer::Result result) const;
+
@@ -24,7 +24,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
.../homepage/settings/HomepageSettings.java | 2 +-
.../privacy/settings/PrivacySettings.java | 2 +-
.../settings/FragmentDependencyProvider.java | 10 +-
.../browser/settings/SettingsActivity.java | 39 ++++
.../browser/settings/SettingsActivity.java | 41 ++++-
.../tracing/settings/DeveloperSettings.java | 5 +-
chrome/browser/about_flags.cc | 11 ++
chrome/browser/browser_features.cc | 1 +
@@ -106,7 +106,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
third_party/blink/public/common/features.h | 1 +
ui/base/ui_base_features.cc | 1 +
ui/base/ui_base_features.h | 1 +
93 files changed, 845 insertions(+), 31 deletions(-)
93 files changed, 846 insertions(+), 32 deletions(-)
create mode 100644 chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/include_all_directory.java
create mode 100644 chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/java_template/CromiteCachedFlag.java.tmpl
create mode 100644 chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Add-cromite-flags-support.grdp
@@ -620,14 +620,16 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/Settin
@VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE)
public static final String EXTRA_SHOW_FRAGMENT = "show_fragment";
@@ -206,6 +244,7 @@ public class SettingsActivity extends ChromeBaseAppCompatActivity
@@ -206,7 +244,8 @@ public class SettingsActivity extends ChromeBaseAppCompatActivity
mSnackbarManagerSupplier,
mBottomSheetControllerSupplier,
getModalDialogManagerSupplier(),
+ () -> new RequestRestartDelegate(mSnackbarManagerSupplier, this),
() -> mSearchCoordinator),
- () -> mSearchCoordinator),
+ () -> mSearchCoordinator,
+ () -> new RequestRestartDelegate(mSnackbarManagerSupplier, this)),
/* recursive= */ true);
fragmentManager.registerFragmentLifecycleCallbacks(
new WideDisplayPaddingApplier(), /* recursive= */ true);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tracing/settings/DeveloperSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/tracing/settings/DeveloperSettings.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/tracing/settings/DeveloperSettings.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tracing/settings/DeveloperSettings.java
@@ -13,7 +13,7 @@ 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 | 15 ++++++
.../browser/LaunchIntentDispatcher.java | 21 ++++++++
.../browser/LaunchIntentDispatcher.java | 22 ++++++++
.../CustomTabIntentDataProvider.java | 22 ++++----
.../customtabs/CustomTabsConnection.java | 3 +-
.../IncognitoCustomTabIntentDataProvider.java | 14 +++++
@@ -25,7 +25,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
.../OriginVerifier.java | 5 ++
.../core/common/language_experiments.cc | 1 +
.../add-custom-tab-intents-privacy-option.inc | 1 +
13 files changed, 158 insertions(+), 13 deletions(-)
13 files changed, 159 insertions(+), 13 deletions(-)
create mode 100644 chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Add-custom-tab-intents-privacy-option.grdp
create mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/add-custom-tab-intents-privacy-option.inc
@@ -57,7 +57,15 @@ 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/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
@@ -51,6 +51,9 @@ import java.lang.annotation.Retention;
@@ -22,6 +22,7 @@ import androidx.core.os.BuildCompat;
import org.chromium.base.ApplicationStatus;
import org.chromium.base.CommandLine;
+import org.chromium.base.ContextUtils;
import org.chromium.base.IntentUtils;
import org.chromium.base.Log;
import org.chromium.base.metrics.RecordHistogram;
@@ -51,6 +52,9 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.Set;
@@ -67,7 +75,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDis
/**
* Dispatches incoming intents to the appropriate activity based on the current configuration and
* Intent fired.
@@ -137,6 +140,9 @@ public class LaunchIntentDispatcher {
@@ -137,6 +141,9 @@ public class LaunchIntentDispatcher {
*/
public static boolean isCustomTabIntent(Intent intent) {
if (intent == null) return false;
@@ -77,7 +85,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDis
Log.w(
TAG,
"CustomTabsIntent#shouldAlwaysUseBrowserUI() = "
@@ -163,6 +169,10 @@ public class LaunchIntentDispatcher {
@@ -163,6 +170,10 @@ public class LaunchIntentDispatcher {
// Make sure the result of the CustomTabActivity is forwarded to the client.
newIntent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
@@ -88,7 +96,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());
@@ -333,6 +343,17 @@ public class LaunchIntentDispatcher {
@@ -333,6 +344,17 @@ public class LaunchIntentDispatcher {
if (Intent.ACTION_VIEW.equals(newIntent.getAction())
&& !IntentHandler.wasIntentSenderChrome(newIntent)) {
@@ -12,7 +12,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
.../java/res/xml/privacy_preferences.xml | 7 +++-
.../customtabs/CustomTabDelegateFactory.java | 2 ++
.../ExternalNavigationDelegateImpl.java | 4 ++-
.../ExternalNavigationDelegateImpl.java | 6 ++--
.../cromite/sAllowExternalIntentRequests.java | 33 +++++++++++++++++++
...g-to-disable-external-intent-requests.grdp | 9 +++++
.../android/external_intents_features.cc | 6 ++++
@@ -22,7 +22,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
...ag-to-disable-external-intent-requests.inc | 13 ++++++++
...t-Delete-block-external-form-redirects.inc | 15 +++++++++
...ag-to-disable-external-intent-requests.inc | 3 ++
12 files changed, 118 insertions(+), 2 deletions(-)
12 files changed, 119 insertions(+), 3 deletions(-)
create mode 100644 chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/sAllowExternalIntentRequests.java
create mode 100644 chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Add-flag-to-disable-external-intent-requests.grdp
create mode 100644 cromite_flags/chrome/browser/about_flags_cc/Add-flag-to-disable-external-intent-requests.inc
@@ -85,6 +85,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/externalnav/Ext
+ return !sAllowExternalIntentRequests.getInstance().isEnabled();
}
@Override
@@ -316,7 +318,7 @@ public class ExternalNavigationDelegateImpl implements ExternalNavigationDelegat
&& params.isInitialNavigationInFrame()
// TODO(crbug.com/452537438): Figure out a better way to check whether we are in
// desktop windowing mode or if the device can enter desktop windowing mode.
- && (DeviceInfo.isDesktop() || params.isInDesktopWindowingMode());
+ && (params.isInDesktopWindowingMode());
}
@Override
diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/sAllowExternalIntentRequests.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/sAllowExternalIntentRequests.java
new file mode 100644
@@ -167,7 +167,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse
+base::android::ScopedJavaLocalRef<jobject>
+BookmarkBridge::GetBookmarkIdForTabsCollection(
+ JNIEnv* env,
+ const JavaParamRef<jobject>& url) {
+ const JavaRef<jobject>& url) {
+ DCHECK_CURRENTLY_ON(BrowserThread::UI);
+
+ GURL gurl = url::GURLAndroid::ToNativeGURL(env, url);
@@ -218,7 +218,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse
+ScopedJavaLocalRef<jobject> BookmarkBridge::GetTabsCollectionFolderId(
+ JNIEnv* env,
+ const JavaParamRef<jobject>& obj) {
+ const JavaRef<jobject>& obj) {
+ DCHECK_CURRENTLY_ON(BrowserThread::UI);
+ const BookmarkNode* tabs_collection_node = bookmark_model_->tabs_collection_node();
+ ScopedJavaLocalRef<jobject> folder_id_obj =
@@ -239,7 +239,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser
+ base::android::ScopedJavaLocalRef<jobject> GetBookmarkIdForTabsCollection(
+ JNIEnv* env,
+ const base::android::JavaParamRef<jobject>& url);
+ const base::android::JavaRef<jobject>& url);
+
base::android::ScopedJavaLocalRef<jobject>
GetMostRecentlyAddedUserBookmarkIdForUrl(JNIEnv* env, const GURL& url);
@@ -250,7 +250,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser
+ base::android::ScopedJavaLocalRef<jobject> GetTabsCollectionFolderId(
+ JNIEnv* env,
+ const base::android::JavaParamRef<jobject>& obj);
+ const base::android::JavaRef<jobject>& obj);
+
base::android::ScopedJavaLocalRef<jobject> AddFolder(
JNIEnv* env,
+2 -2
View File
@@ -265,8 +265,8 @@ diff --git a/tools/json_to_struct/json_to_struct.gni b/tools/json_to_struct/json
+
action(action_name) {
visibility = [ ":$source_set_name" ]
script = "//build/gn_run_binary.py"
@@ -63,6 +68,10 @@ template("json_to_struct") {
script = "//tools/json_to_struct/json_to_struct.py"
@@ -61,6 +66,10 @@ template("json_to_struct") {
"--namespace=" + invoker.namespace,
"--schema=" + rebase_path(invoker.schema_file, root_build_dir),
]
@@ -8,7 +8,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
.../java/res/xml/privacy_preferences.xml | 5 ++
.../chrome/browser/ChromeTabbedActivity.java | 7 +-
.../browsing_data/BrowsingDataBridge.java | 12 +--
.../ClearBrowsingDataFragment.java | 31 ++++++--
.../ClearBrowsingDataFragment.java | 37 +++++++--
.../ClearBrowsingDataFragmentAtStart.java | 79 +++++++++++++++++++
chrome/app/settings_strings.grdp | 10 +++
chrome/browser/about_flags.cc | 1 +
@@ -41,7 +41,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
content/browser/storage_partition_impl.cc | 2 +
.../public/browser/browsing_data_remover.h | 7 +-
.../Add-setting-to-clear-data-on-exit.inc | 8 ++
37 files changed, 410 insertions(+), 34 deletions(-)
37 files changed, 415 insertions(+), 35 deletions(-)
create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragmentAtStart.java
create mode 100644 chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Add-setting-to-clear-data-on-exit.grdp
create mode 100644 cromite_flags/chrome/browser/about_flags_cc/Add-setting-to-clear-data-on-exit.inc
@@ -176,7 +176,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/C
item.isSelected());
}
@@ -447,8 +454,12 @@ public class ClearBrowsingDataFragment extends ChromeBaseSettingsFragment
@@ -447,8 +454,16 @@ public class ClearBrowsingDataFragment extends ChromeBaseSettingsFragment
.setBrowsingDataDeletionTimePeriod(mLastSelectedTimePeriod);
}
@@ -186,11 +186,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/C
+
/** Returns the list of supported {@link DialogOption}. */
- private static List<Integer> getDialogOptions(Bundle fragmentArgs) {
+ protected static List<Integer> getDialogOptions(Bundle fragmentArgs) {
+ protected List<Integer> getDialogOptions(Bundle fragmentArgs) {
+ return getDialogOptionsStatic(fragmentArgs);
+ }
+
+ private static List<Integer> getDialogOptionsStatic(Bundle fragmentArgs) {
String referrer =
fragmentArgs.getString(
ClearBrowsingDataFragment.CLEAR_BROWSING_DATA_REFERRER, null);
@@ -474,6 +485,10 @@ public class ClearBrowsingDataFragment extends ChromeBaseSettingsFragment
@@ -474,6 +489,10 @@ public class ClearBrowsingDataFragment extends ChromeBaseSettingsFragment
DialogOption.CLEAR_SITE_SETTINGS);
}
@@ -201,7 +205,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/C
/**
* Decides whether a given dialog option should be selected when the dialog is initialized.
*
@@ -482,7 +497,7 @@ public class ClearBrowsingDataFragment extends ChromeBaseSettingsFragment
@@ -482,7 +501,7 @@ public class ClearBrowsingDataFragment extends ChromeBaseSettingsFragment
*/
private boolean isOptionSelectedByDefault(@DialogOption int option) {
return BrowsingDataBridge.getForProfile(getProfile())
@@ -210,7 +214,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/C
}
/**
@@ -550,6 +565,7 @@ public class ClearBrowsingDataFragment extends ChromeBaseSettingsFragment
@@ -550,6 +569,7 @@ public class ClearBrowsingDataFragment extends ChromeBaseSettingsFragment
* options.
*/
private void onClearButtonClicked() {
@@ -218,7 +222,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/C
if (shouldShowImportantSitesDialog()) {
showImportantDialogThenClear();
return;
@@ -579,6 +595,7 @@ public class ClearBrowsingDataFragment extends ChromeBaseSettingsFragment
@@ -579,6 +599,7 @@ public class ClearBrowsingDataFragment extends ChromeBaseSettingsFragment
Button clearButton = (Button) assumeNonNull(getView()).findViewById(R.id.clear_button);
boolean isEnabled = !getSelectedOptions().isEmpty();
clearButton.setEnabled(isEnabled);
@@ -226,7 +230,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/C
}
private int getSpinnerIndex(
@@ -656,7 +673,7 @@ public class ClearBrowsingDataFragment extends ChromeBaseSettingsFragment
@@ -656,7 +677,7 @@ public class ClearBrowsingDataFragment extends ChromeBaseSettingsFragment
.getBoolean(Pref.ALLOW_DELETING_BROWSER_HISTORY)) {
enabled = false;
browsingDataBridge.setBrowsingDataDeletionPreference(
@@ -235,7 +239,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/C
}
// Disable tabs closure if the user is in multi-window mode.
@@ -686,8 +703,12 @@ public class ClearBrowsingDataFragment extends ChromeBaseSettingsFragment
@@ -686,8 +707,12 @@ public class ClearBrowsingDataFragment extends ChromeBaseSettingsFragment
mSigninManager.addSignInStateObserver(this);
setHasOptionsMenu(true);
@@ -248,6 +252,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/C
@Override
public ObservableSupplier<String> getPageTitle() {
return mPageTitle;
@@ -989,7 +1014,7 @@ public class ClearBrowsingDataFragment extends ChromeBaseSettingsFragment
public void updateDynamicPreferences(
Context context, SettingsIndexData indexData, Profile profile) {
Bundle args = createFragmentArgs(context.getClass().getName());
- List<Integer> options = getDialogOptions(args);
+ List<Integer> options = getDialogOptionsStatic(args);
// Not all checkboxes defined in the layout are necessarily handled by this
// class or a particular subclass. Hide those that are not.
Set<Integer> unboundOptions = getAllOptions();
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
+13 -11
View File
@@ -21,7 +21,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
chrome/browser/endpoint_fetcher/BUILD.gn | 32 ++
chrome/browser/endpoint_fetcher/DEPS | 3 +
chrome/browser/endpoint_fetcher/OWNERS | 1 +
.../endpoint_fetcher_android.cc | 107 +++++++
.../endpoint_fetcher_android.cc | 109 +++++++
.../endpoint_fetcher/EndpointFetcher.java | 63 ++++
.../EndpointHeaderResponse.java | 31 ++
.../endpoint_fetcher/EndpointResponse.java | 30 ++
@@ -50,7 +50,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
components/manta/base_provider.cc | 4 +-
.../Bromite-auto-updater.inc | 3 +
.../Bromite-auto-updater.inc | 1 +
42 files changed, 1154 insertions(+), 106 deletions(-)
42 files changed, 1156 insertions(+), 106 deletions(-)
create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/omaha/CromiteUpdateStatusProvider.java
create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/omaha/inline/BromiteInlineUpdateController.java
create mode 100644 chrome/browser/endpoint_fetcher/BUILD.gn
@@ -366,7 +366,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omaha/UpdateMen
+ mMenuUiState.itemState.summary =
+ resources.getString(defaultUpdateSummary);
+ }
+ mMenuUiState.itemState.icon = R.drawable.ic_history_googblue_24dp;
+ mMenuUiState.itemState.icon = R.drawable.ic_history_24dp;
+ mMenuUiState.itemState.iconTintId = R.color.default_icon_color_blue_light;
+ mMenuUiState.itemState.enabled = true;
+ break;
@@ -390,7 +390,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omaha/UpdateMen
+ mMenuUiState.itemState.title = R.string.menu_inline_update_failed;
+ mMenuUiState.itemState.titleColorId = R.color.default_text_color_blue_dark;
+ mMenuUiState.itemState.summary = resources.getString(R.string.try_again);
+ mMenuUiState.itemState.icon = R.drawable.ic_history_googblue_24dp;
+ mMenuUiState.itemState.icon = R.drawable.ic_history_24dp;
+ mMenuUiState.itemState.iconTintId = R.color.default_icon_color_blue_light;
+ mMenuUiState.itemState.enabled = true;
+ break;
@@ -758,7 +758,7 @@ diff --git a/chrome/browser/endpoint_fetcher/endpoint_fetcher_android.cc b/chrom
new file mode 100644
--- /dev/null
+++ b/chrome/browser/endpoint_fetcher/endpoint_fetcher_android.cc
@@ -0,0 +1,107 @@
@@ -0,0 +1,109 @@
+// Copyright 2019 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
@@ -815,11 +815,11 @@ new file mode 100644
+
+static void JNI_EndpointFetcher_NativeFetchWithNoAuth(
+ JNIEnv* env,
+ const base::android::JavaParamRef<jobject>& jprofile,
+ const base::android::JavaParamRef<jstring>& jurl,
+ const base::android::JavaRef<jobject>& jprofile,
+ const base::android::JavaRef<jstring>& jurl,
+ jlong jtimeout, jboolean intercept_redirect,
+ jint jannotation_hash_code,
+ const base::android::JavaParamRef<jobject>& jcallback) {
+ const base::android::JavaRef<jobject>& jcallback) {
+ auto endpoint_fetcher = std::make_unique<endpoint_fetcher::EndpointFetcher>(
+ Profile::FromJavaObject(jprofile)
+ ->GetDefaultStoragePartition()
@@ -842,11 +842,11 @@ new file mode 100644
+
+static void JNI_EndpointFetcher_NativeHeadWithNoAuth(
+ JNIEnv* env,
+ const base::android::JavaParamRef<jobject>& jprofile,
+ const base::android::JavaParamRef<jstring>& jurl,
+ const base::android::JavaRef<jobject>& jprofile,
+ const base::android::JavaRef<jstring>& jurl,
+ jlong jtimeout, jboolean intercept_redirect,
+ jint jannotation_hash_code,
+ const base::android::JavaParamRef<jobject>& jcallback) {
+ const base::android::JavaRef<jobject>& jcallback) {
+ auto endpoint_fetcher = std::make_unique<endpoint_fetcher::EndpointFetcher>(
+ Profile::FromJavaObject(jprofile)
+ ->GetDefaultStoragePartition()
@@ -866,6 +866,8 @@ new file mode 100644
+ std::move(endpoint_fetcher)),
+ nullptr);
+}
+
+DEFINE_JNI(EndpointFetcher)
diff --git a/chrome/browser/endpoint_fetcher/java/src/org/chromium/chrome/browser/endpoint_fetcher/EndpointFetcher.java b/chrome/browser/endpoint_fetcher/java/src/org/chromium/chrome/browser/endpoint_fetcher/EndpointFetcher.java
new file mode 100644
--- /dev/null
@@ -30,7 +30,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
chrome/browser/browser_process_impl.h | 2 +
chrome/browser/chrome_browser_main.cc | 3 +
chrome/browser/flags/BUILD.gn | 3 +
.../flags/android/adblock_native_gateway.cc | 31 ++
.../flags/android/adblock_native_gateway.cc | 33 ++
.../browser/flags/AdBlockNativeGateway.java | 30 ++
.../net/system_network_context_manager.cc | 4 +
.../strings/android_chrome_strings.grd | 14 +
@@ -50,7 +50,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
.../browser/subresource_filter_features.cc | 118 +-------
.../core/browser/verified_ruleset_dealer.cc | 4 +
.../core/common/indexed_ruleset.cc | 5 +-
38 files changed, 1282 insertions(+), 127 deletions(-)
38 files changed, 1284 insertions(+), 127 deletions(-)
create mode 100644 chrome/android/java/res/layout/adblock_editor.xml
create mode 100644 chrome/android/java/res/xml/adblock_preferences.xml
create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/settings/AdBlockEditor.java
@@ -630,7 +630,7 @@ diff --git a/chrome/browser/flags/android/adblock_native_gateway.cc b/chrome/bro
new file mode 100755
--- /dev/null
+++ b/chrome/browser/flags/android/adblock_native_gateway.cc
@@ -0,0 +1,31 @@
@@ -0,0 +1,33 @@
+#include "chrome/browser/flags/jni_headers/AdBlockNativeGateway_jni.h"
+
+#include "base/android/jni_string.h"
@@ -639,7 +639,7 @@ new file mode 100755
+#include "components/prefs/pref_service.h"
+
+using base::android::ScopedJavaLocalRef;
+using base::android::JavaParamRef;
+using base::android::JavaRef;
+
+static ScopedJavaLocalRef<jstring> JNI_AdBlockNativeGateway_GetAdBlockFiltersURL(
+ JNIEnv* env) {
@@ -648,20 +648,22 @@ new file mode 100755
+}
+
+static void JNI_AdBlockNativeGateway_SetAdBlockFiltersURL(
+ JNIEnv* env, const JavaParamRef<jstring>& url) {
+ JNIEnv* env, const JavaRef<jstring>& url) {
+ g_browser_process->local_state()->SetString(prefs::kAdBlockFiltersURL,
+ base::android::ConvertJavaStringToUTF8(env, url));
+}
+
+static jboolean JNI_AdBlockNativeGateway_GetAdBlockEnabled(
+static bool JNI_AdBlockNativeGateway_GetAdBlockEnabled(
+ JNIEnv* env) {
+ return g_browser_process->local_state()->GetBoolean(prefs::kAdBlockEnabled);
+}
+
+static void JNI_AdBlockNativeGateway_SetAdBlockEnabled(
+ JNIEnv* env, jboolean enabled) {
+ JNIEnv* env, bool enabled) {
+ g_browser_process->local_state()->SetBoolean(prefs::kAdBlockEnabled, enabled);
+}
+
+DEFINE_JNI(AdBlockNativeGateway)
diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/AdBlockNativeGateway.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/AdBlockNativeGateway.java
new file mode 100755
--- /dev/null
@@ -690,7 +692,7 @@ new file mode 100755
+ }
+
+ @NativeMethods
+ interface Natives {
+ public interface Natives {
+ void setAdBlockFiltersURL(String url);
+ String getAdBlockFiltersURL();
+ void setAdBlockEnabled(boolean enabled);
@@ -1115,7 +1117,7 @@ new file mode 100644
+#include "components/component_updater/update_scheduler.h"
+#include "url/gurl.h"
+#include "components/component_updater/download_filters_task.h"
+#include "components/subresource_filter/content/shared/browser/ruleset_service.h"
+#include "components/subresource_filter/content/browser/ruleset_service.h"
+#include "services/network/public/cpp/shared_url_loader_factory.h"
+
+namespace adblock_updater {
@@ -47,7 +47,7 @@ Require: bromite-build-utils.patch
.../ContentSettingsResources.java | 32 +-
.../site_settings/SingleCategorySettings.java | 57 ++-
.../site_settings/SingleWebsiteSettings.java | 48 +-
.../site_settings/SiteSettings.java | 33 +-
.../site_settings/SiteSettings.java | 35 +-
.../site_settings/SiteSettingsCategory.java | 18 +-
.../site_settings/SiteSettingsDelegate.java | 2 +
.../TriStateSiteSettingsPreference.java | 11 +
@@ -84,7 +84,7 @@ Require: bromite-build-utils.patch
.../platform/web_content_settings_client.h | 13 +
.../execution_context/execution_context.cc | 16 +
.../execution_context/execution_context.h | 5 +
73 files changed, 1962 insertions(+), 105 deletions(-)
73 files changed, 1963 insertions(+), 106 deletions(-)
create mode 100644 components/browser_ui/settings/android/java/res/layout/preference_spinner_single_widget.xml
create mode 100644 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSetting.java
create mode 100644 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSettingImpl.java
@@ -2621,6 +2621,15 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c
}
if (prefCategory != Type.THIRD_PARTY_COOKIES) {
@@ -278,7 +281,7 @@ public class SiteSettings extends BaseSiteSettingsFragment
// Always remove the divider as the search is based on containment style.
indexData.removeEntry(PreferenceParser.createUniqueId(prefFragment, "divider"));
- for (@Type int prefCategory = 0; prefCategory < Type.NUM_ENTRIES; prefCategory++) {
+ for (@Type int prefCategory = 0; prefCategory < BromiteCustomContentSettingImpl.NUM_ENTRIES(); prefCategory++) {
if (SiteSettingsCategory.contentSettingsType(prefCategory) < 0) continue;
String key = SiteSettingsCategory.preferenceKey(prefCategory);
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
+20 -5
View File
@@ -45,6 +45,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
.../prefs/chrome_pref_service_factory.cc | 6 +-
.../profiles/profile_shortcut_manager_win.cc | 2 +-
.../settings/settings_menu/settings_menu.html | 14 ++-
.../tab_group_sync/TabGroupSyncUtils.java | 5 +-
.../OmniboxSuggestionsContainer.java | 8 +-
.../strings/android_chrome_strings.grd | 4 +-
.../toolbar/chrome_labs/chrome_labs_utils.cc | 1 +
@@ -66,9 +67,9 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
.../webui/version/resources/about_version.ts | 4 +-
.../resources/about_version_mobile.css | 9 ++
content/child/runtime_features.cc | 44 ++++-----
.../Cromite-Branding.inc | 2 +
.../Cromite-Branding.inc | 1 +
tools/grit/grit/grd_reader.py | 35 +++++++
64 files changed, 263 insertions(+), 173 deletions(-)
65 files changed, 266 insertions(+), 174 deletions(-)
create mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/Cromite-Branding.inc
diff --git a/build/BUILD.gn b/build/BUILD.gn
@@ -13273,7 +13274,7 @@ diff --git a/chrome/browser/hub/internal/android/res/layout/hub_toolbar_layout.x
+ android:layout_width="44dp"
+ android:layout_height="match_parent"
+ android:contentDescription="@string/search"
+ android:src="@drawable/ic_search"
+ android:src="@drawable/ic_search_24dp"
+ android:tooltipText="@string/accessibility_search_loupe_tooltip_text"
+ style="@style/ToolbarMenuButton"
+ app:tint="@color/default_icon_color_tint_list" />
@@ -13419,6 +13420,21 @@ diff --git a/chrome/browser/resources/settings/settings_menu/settings_menu.html
$i18n{aboutPageTitle}
<cr-ripple></cr-ripple>
</a>
diff --git a/chrome/browser/tab_group_sync/android/java/src/org/chromium/chrome/browser/tab_group_sync/TabGroupSyncUtils.java b/chrome/browser/tab_group_sync/android/java/src/org/chromium/chrome/browser/tab_group_sync/TabGroupSyncUtils.java
--- a/chrome/browser/tab_group_sync/android/java/src/org/chromium/chrome/browser/tab_group_sync/TabGroupSyncUtils.java
+++ b/chrome/browser/tab_group_sync/android/java/src/org/chromium/chrome/browser/tab_group_sync/TabGroupSyncUtils.java
@@ -127,7 +127,10 @@ public final class TabGroupSyncUtils {
for (String syncGroupId : tabGroupSyncService.getAllGroupIds()) {
SavedTabGroup savedTabGroup = tabGroupSyncService.getGroup(syncGroupId);
// If there is no local ID the group is already hidden so this is a no-op.
- if (savedTabGroup == null || savedTabGroup.localId == null) continue;
+ if (savedTabGroup == null || savedTabGroup.localId == null) {
+ tabGroupSyncService.removeGroup(syncGroupId);
+ continue;
+ }
if (!isInAnyWindow(savedTabGroup.localId, filterList)) {
tabGroupSyncService.removeLocalTabGroupMapping(
diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/OmniboxSuggestionsContainer.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/OmniboxSuggestionsContainer.java
--- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/OmniboxSuggestionsContainer.java
+++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/OmniboxSuggestionsContainer.java
@@ -19295,8 +19311,7 @@ diff --git a/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/C
new file mode 100644
--- /dev/null
+++ b/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/Cromite-Branding.inc
@@ -0,0 +1,2 @@
+SET_CROMITE_FEATURE_ENABLED(kAndroidTabDeclutterArchiveAllButActiveTab);
@@ -0,0 +1 @@
+SET_CROMITE_FEATURE_ENABLED(kGridTabSwitcherUpdate);
diff --git a/tools/grit/grit/grd_reader.py b/tools/grit/grit/grd_reader.py
--- a/tools/grit/grit/grd_reader.py
@@ -59,6 +59,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
components/optimization_guide/features.gni | 3 +-
.../core/page_content_annotations_features.cc | 7 +++++
.../page_content_annotations_model_manager.cc | 1 +
.../browser/client_side_phishing_model.cc | 4 +--
.../notification_content_detection/BUILD.gn | 4 ---
components/viz/service/BUILD.gn | 4 +--
components/viz/service/gl/gpu_service_impl.cc | 18 -----------
@@ -83,7 +84,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
.../core/html/parser/html_document_parser.cc | 1 +
.../document_speculation_rules.cc | 1 +
.../platform/runtime_enabled_features.json5 | 2 +-
78 files changed, 197 insertions(+), 139 deletions(-)
79 files changed, 199 insertions(+), 141 deletions(-)
create mode 100644 cromite_flags/chrome/browser/browser_features_cc/Disable-all-predictors-code.inc
create mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/Disable-all-predictors-code.inc
create mode 100644 cromite_flags/chrome/common/chrome_features_cc/Disable-all-predictors-code.inc
@@ -1397,6 +1398,29 @@ diff --git a/components/page_content_annotations/core/page_content_annotations_m
if (page_visibility_model_handler_)
return;
diff --git a/components/safe_browsing/content/browser/client_side_phishing_model.cc b/components/safe_browsing/content/browser/client_side_phishing_model.cc
--- a/components/safe_browsing/content/browser/client_side_phishing_model.cc
+++ b/components/safe_browsing/content/browser/client_side_phishing_model.cc
@@ -466,7 +466,7 @@ void ClientSidePhishingModel::OnImageEmbeddingModelFileAndEmbeddingListLoaded(
model_metadata.value());
}
- int loaded_image_embedder_version = -1; // Valid versions start at 1.
+ [[maybe_unused]] int loaded_image_embedder_version = -1; // Valid versions start at 1.
if (image_embedding_model_metadata.has_value()) {
embedding_model_opt_guide_metadata_image_embedding_version_ =
image_embedding_model_metadata->image_embedding_model_version();
@@ -490,9 +490,9 @@ void ClientSidePhishingModel::OnImageEmbeddingModelFileAndEmbeddingListLoaded(
embedding_list_version_num);
}
}
+#if BUILDFLAG(BUILD_WITH_TFLITE_LIB)
// Drop any existing target image embeddings in preparation for a new set.
target_image_embeddings_.clear();
-#if BUILDFLAG(BUILD_WITH_TFLITE_LIB)
// Only load image embeddings when the version of their embedder matches the
// version of the embedder that's been loaded.
if (model_and_list.second.has_value() &&
diff --git a/components/safe_browsing/content/browser/notification_content_detection/BUILD.gn b/components/safe_browsing/content/browser/notification_content_detection/BUILD.gn
--- a/components/safe_browsing/content/browser/notification_content_detection/BUILD.gn
+++ b/components/safe_browsing/content/browser/notification_content_detection/BUILD.gn
@@ -1520,7 +1544,7 @@ new file mode 100644
--- /dev/null
+++ b/cromite_flags/components/password_manager/core/browser/features/password_features_cc/Disable-all-predictors-code.inc
@@ -0,0 +1 @@
+SET_CROMITE_FEATURE_DISABLED(kDownloadModelForPasswordChange);
+SET_CROMITE_FEATURE_DISABLED(kProactivelyDownloadModelForPasswordChange);
diff --git a/cromite_flags/components/permissions/features_cc/Disable-all-predictors-code.inc b/cromite_flags/components/permissions/features_cc/Disable-all-predictors-code.inc
new file mode 100644
--- /dev/null
@@ -7,9 +7,34 @@ see https://w3c.github.io/webappsec-dbsc/#privacy-considerations
License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
---
net/features.gni | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
.../metrics/chrome_browser_main_extra_parts_metrics.cc | 6 ++++++
net/features.gni | 2 +-
2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc b/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc
--- a/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc
+++ b/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc
@@ -124,6 +124,10 @@
#include "chrome/browser/signin/bound_session_credentials/unexportable_key_service_factory.h"
#endif // BUILDFLAG(IS_MAC)
+#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC)
+#include "net/net_buildflags.h"
+#endif
+
namespace {
// The number of restarts to wait until removing the enable-benchmarking flag.
@@ -884,7 +888,9 @@ void RecordStartupMetrics() {
#endif // BUILDFLAG(IS_WIN)
#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC)
+#if BUILDFLAG(ENABLE_DEVICE_BOUND_SESSIONS)
crypto::MaybeMeasureTpmOperations(unexportable_keys::GetDefaultConfig());
+#endif
#endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC)
// Record whether Chrome is the default browser or not.
diff --git a/net/features.gni b/net/features.gni
--- a/net/features.gni
+++ b/net/features.gni
+16 -3
View File
@@ -11,12 +11,13 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
.../settings/FragmentDependencyProvider.java | 29 -------------------
.../chrome/browser/settings/MainSettings.java | 2 +-
.../settings/SettingsNavigationImpl.java | 3 +-
.../search/SearchIndexProviderRegistry.java | 2 --
chrome/browser/BUILD.gn | 1 -
chrome/browser/safety_check/android/BUILD.gn | 2 --
.../safety_check/SafetyCheckBridge.java | 4 +--
.../suggestions/action/OmniboxPedal.java | 3 --
.../Disable-safety-check.inc | 1 +
12 files changed, 6 insertions(+), 72 deletions(-)
13 files changed, 6 insertions(+), 74 deletions(-)
create mode 100644 cromite_flags/chrome/common/chrome_features_cc/Disable-safety-check.inc
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
@@ -30,7 +31,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
"//chrome/browser/safety_hub/android:java",
"//chrome/browser/screenshot_monitor:java",
"//chrome/browser/search_engines/android:java",
@@ -1141,8 +1140,6 @@ if (_is_default_toolchain) {
@@ -1129,8 +1128,6 @@ if (_is_default_toolchain) {
"//chrome/browser/recent_tabs:junit",
"//chrome/browser/recent_tabs/internal:junit",
"//chrome/browser/safe_browsing/android:junit",
@@ -39,7 +40,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
"//chrome/browser/search_engines/android:junit",
"//chrome/browser/search_resumption:junit",
"//chrome/browser/serial/android:junit",
@@ -1434,8 +1431,6 @@ if (_is_default_toolchain) {
@@ -1422,8 +1419,6 @@ if (_is_default_toolchain) {
"//chrome/browser/quick_delete:javatests",
"//chrome/browser/renderer_host/android:javatests",
"//chrome/browser/safe_browsing/android:javatests",
@@ -211,6 +212,18 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/Settin
case SettingsFragment.SITE:
return SiteSettings.class;
case SettingsFragment.ACCESSIBILITY:
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/search/SearchIndexProviderRegistry.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/search/SearchIndexProviderRegistry.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/settings/search/SearchIndexProviderRegistry.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/search/SearchIndexProviderRegistry.java
@@ -123,8 +123,6 @@ public final class SearchIndexProviderRegistry {
.SEARCH_INDEX_DATA_PROVIDER,
org.chromium.chrome.browser.privacy.settings.PrivacySettings
.SEARCH_INDEX_DATA_PROVIDER,
- org.chromium.chrome.browser.safety_check.SafetyCheckSettingsFragment
- .SEARCH_INDEX_DATA_PROVIDER,
org.chromium.chrome.browser.tasks.tab_management.TabsSettings
.SEARCH_INDEX_DATA_PROVIDER,
org.chromium.chrome.browser.sync.settings.ManageSyncSettings
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -11,18 +11,18 @@ Require: Timezone-customization.patch
License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
---
.../renderer/chrome_content_renderer_client.cc | 2 +-
.../renderer/content_settings_agent_impl.cc | 9 ++++++++-
.../renderer/content_settings_agent_impl.h | 2 ++
content/browser/speech/tts_android.cc | 2 +-
content/browser/speech/tts_win.cc | 2 +-
.../Disable-speechSynthesis-getVoices-API.inc | 8 ++++++++
.../Disable-speechSynthesis-getVoices-API.inc | 2 ++
.../Disable-speechSynthesis-getVoices-API.inc | 3 +++
.../Disable-speechSynthesis-getVoices-API.inc | 1 +
.../platform/web_content_settings_client.h | 2 ++
.../modules/speech/speech_synthesis.cc | 18 +++++++++++++++---
11 files changed, 44 insertions(+), 7 deletions(-)
.../chrome_content_renderer_client.cc | 2 +-
.../renderer/content_settings_agent_impl.cc | 9 ++++++++-
.../renderer/content_settings_agent_impl.h | 2 ++
content/browser/speech/tts_android.cc | 2 +-
content/browser/speech/tts_win.cc | 2 +-
.../Disable-speechSynthesis-getVoices-API.inc | 8 ++++++++
.../Disable-speechSynthesis-getVoices-API.inc | 2 ++
.../Disable-speechSynthesis-getVoices-API.inc | 3 +++
.../Disable-speechSynthesis-getVoices-API.inc | 1 +
.../platform/web_content_settings_client.h | 2 ++
.../modules/speech/speech_synthesis.cc | 19 ++++++++++++++++---
11 files changed, 45 insertions(+), 7 deletions(-)
create mode 100644 cromite_flags/chrome/browser/about_flags_cc/Disable-speechSynthesis-getVoices-API.inc
create mode 100644 cromite_flags/media/base/media_switches_cc/Disable-speechSynthesis-getVoices-API.inc
create mode 100644 cromite_flags/third_party/blink/common/features_cc/Disable-speechSynthesis-getVoices-API.inc
@@ -163,7 +163,7 @@ diff --git a/third_party/blink/renderer/modules/speech/speech_synthesis.cc b/thi
#include "third_party/blink/renderer/bindings/modules/v8/v8_speech_synthesis_error_event_init.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_speech_synthesis_event_init.h"
#include "third_party/blink/renderer/core/dom/document.h"
@@ -88,9 +90,19 @@ SpeechSynthesis::SpeechSynthesis(LocalDOMWindow& window)
@@ -88,9 +90,20 @@ SpeechSynthesis::SpeechSynthesis(LocalDOMWindow& window)
void SpeechSynthesis::OnSetVoiceList(
Vector<mojom::blink::SpeechSynthesisVoicePtr> mojom_voices) {
voice_list_.clear();
@@ -172,7 +172,8 @@ diff --git a/third_party/blink/renderer/modules/speech/speech_synthesis.cc b/thi
- MakeGarbageCollected<SpeechSynthesisVoice>(std::move(mojom_voice)));
+ bool allowed = !base::FeatureList::IsEnabled(features::kDisableSpeechSynthesisVoiceList);
+ if (allowed) {
+ auto* frame = local_dom_window_->GetFrame();
+ LocalDOMWindow* window = GetSupplementable();
+ auto* frame = window->GetFrame();
+ if (frame) {
+ blink::WebContentSettingsClient* settings = frame->GetContentSettingsClient();
+ if (settings) allowed = !settings->IsTimezoneChanged();
@@ -4,10 +4,11 @@ Subject: Enable Android Dynamic Performance Framework
License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
---
chrome/version.gni | 8 ++++----
components/viz/common/features.cc | 2 ++
components/viz/service/performance_hint/hint_session.cc | 5 +----
3 files changed, 7 insertions(+), 8 deletions(-)
chrome/version.gni | 8 ++++----
components/viz/common/features.cc | 2 ++
components/viz/service/performance_hint/hint_session.cc | 5 +----
.../platform/widget/input/widget_input_handler_manager.cc | 5 +++++
4 files changed, 12 insertions(+), 8 deletions(-)
diff --git a/chrome/version.gni b/chrome/version.gni
--- a/chrome/version.gni
@@ -44,15 +45,7 @@ diff --git a/chrome/version.gni b/chrome/version.gni
diff --git a/components/viz/common/features.cc b/components/viz/common/features.cc
--- a/components/viz/common/features.cc
+++ b/components/viz/common/features.cc
@@ -161,6 +161,7 @@ BASE_FEATURE(kWebViewNewInvalidateHeuristic, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kWebViewNewInvalidateHeuristicForTV,
base::FEATURE_DISABLED_BY_DEFAULT);
+SET_CROMITE_FEATURE_ENABLED(kWebViewEnableADPFRendererMain);
// If enabled and the device's SOC manufacturer is in the allowlist, WebView
// reports the set of threads involved in frame production to HWUI, and they're
@@ -241,6 +242,7 @@ BASE_FEATURE(kEnableADPFRendererMain, base::FEATURE_ENABLED_BY_DEFAULT);
@@ -241,6 +241,7 @@ BASE_FEATURE(kEnableADPFRendererMain, base::FEATURE_ENABLED_BY_DEFAULT);
// If enabled, Chrome puts Renderer Main threads into a separate
// ADPF(Android Dynamic Performance Framework) hint session, and does not
// report any timing hints from this session.
@@ -60,6 +53,14 @@ diff --git a/components/viz/common/features.cc b/components/viz/common/features.
BASE_FEATURE(kEnableADPFSeparateRendererMainSession,
base::FEATURE_DISABLED_BY_DEFAULT);
@@ -538,6 +539,7 @@ bool IsBrowserControlsInVizEnabled() {
bool ShouldUseAdpfForSoc(std::string_view soc_allowlist,
std::string_view soc) {
+ if ((true)) return true;
std::vector<std::string_view> allowlist = base::SplitStringPiece(
soc_allowlist, "|", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
return base::Contains(allowlist, soc);
diff --git a/components/viz/service/performance_hint/hint_session.cc b/components/viz/service/performance_hint/hint_session.cc
--- a/components/viz/service/performance_hint/hint_session.cc
+++ b/components/viz/service/performance_hint/hint_session.cc
@@ -81,4 +82,19 @@ diff --git a/components/viz/service/performance_hint/hint_session.cc b/component
std::string soc_allowlist = features::kADPFSocManufacturerAllowlist.Get();
std::string soc = base::SysInfo::SocManufacturer();
diff --git a/third_party/blink/renderer/platform/widget/input/widget_input_handler_manager.cc b/third_party/blink/renderer/platform/widget/input/widget_input_handler_manager.cc
--- a/third_party/blink/renderer/platform/widget/input/widget_input_handler_manager.cc
+++ b/third_party/blink/renderer/platform/widget/input/widget_input_handler_manager.cc
@@ -221,6 +221,11 @@ class SynchronousCompositorProxyRegistry
renderer_threads.push_back(
viz::Thread{io_thread_id_, viz::Thread::Type::kIO});
}
+ // Renderer Main is included in the set of threads reported to the HWUI.
+ if (main_thread_id_ != base::kInvalidThreadId) {
+ renderer_threads.push_back(
+ viz::Thread{main_thread_id_, viz::Thread::Type::kMain});
+ }
proxy_->SetThreads(renderer_threads);
}
--
@@ -225,14 +225,14 @@ diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp
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
@@ -486,6 +486,7 @@ const PrefsUtil::TypedPrefMap& PrefsUtil::GetAllowlistedKeys() {
settings_api::PrefType::kNumber;
(*s_allowlist)[::prefs::kNearbySharingOnboardingCompletePrefName] =
@@ -416,6 +416,7 @@ const PrefsUtil::TypedPrefMap& PrefsUtil::GetAllowlistedKeys() {
(*s_allowlist)[::prefs::kBlockAll3pcToggleEnabled] =
settings_api::PrefType::kBoolean;
(*s_allowlist)[::prefs::kEnableDoNotTrack] = settings_api::PrefType::kBoolean;
+ (*s_allowlist)[::prefs::kEnableGPC] = settings_api::PrefType::kBoolean;
(*s_allowlist)[::prefs::kNearbySharingActiveProfilePrefName] =
settings_api::PrefType::kBoolean;
(*s_allowlist)[::prefs::kNearbySharingDeviceNamePrefName] =
// Sync and personalization page.
(*s_allowlist)[::prefs::kSearchSuggestEnabled] =
diff --git a/chrome/browser/renderer_preferences_util.cc b/chrome/browser/renderer_preferences_util.cc
--- a/chrome/browser/renderer_preferences_util.cc
+++ b/chrome/browser/renderer_preferences_util.cc
+579 -57
View File
@@ -6,33 +6,38 @@ Full activation of incognito mode in experimental extension
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
.../chrome/browser/ChromeTabbedActivity.java | 40 +++++++-
.../chrome/browser/app/ChromeActivity.java | 28 ++++--
.../chrome/browser/ChromeTabbedActivity.java | 37 +++++++-
.../chrome/browser/app/ChromeActivity.java | 36 ++++++--
.../customtabs/BaseCustomTabActivity.java | 2 +-
.../BaseCustomTabRootUiCoordinator.java | 4 +-
.../CustomTabIntentDataProvider.java | 3 +
.../tabbed_mode/TabbedRootUiCoordinator.java | 3 +-
.../browser/tabmodel/TabModelJniBridge.java | 4 +-
.../tabmodel/TabModelSelectorBase.java | 7 ++
.../browser/toolbar/ToolbarManager.java | 4 +-
.../browser/toolbar/ToolbarManager.java | 13 ++-
.../chrome/browser/ui/RootUiCoordinator.java | 6 +-
.../developer_private_functions.cc | 3 +-
.../browser/extensions/extension_tab_util.cc | 2 +-
.../tabmodel/IncognitoTabModelImpl.java | 10 +-
.../tabmodel/IncognitoTabModelImpl.java | 10 ++-
.../tabmodel/IncognitoTabModelObserver.java | 2 +
.../extensions/extension_actions_bridge.cc | 12 +++
.../extensions/extension_actions_bridge.h | 1 +
.../ui/extensions/ExtensionActionsBridge.java | 6 ++
.../extensions/extension_actions_bridge.cc | 23 +++--
.../extensions/extension_actions_bridge.h | 4 +-
.../ui/extensions/ExtensionActionsBridge.java | 26 +++++-
.../android/tab_model/tab_model_jni_bridge.cc | 4 +
.../ExtensionActionListCoordinator.java | 4 +-
.../ExtensionActionListMediator.java | 19 +++-
.../ExtensionToolbarCoordinator.java | 7 +-
.../ExtensionToolbarCoordinatorImpl.java | 5 +-
.../extensions/ExtensionsMenuCoordinator.java | 4 +-
.../extensions/ExtensionsMenuMediator.java | 10 +-
.../ChromeAndroidTaskTrackerImpl.java | 92 ++++++++++++++-----
.../ExtensionActionListCoordinator.java | 12 ++-
.../ExtensionActionListMediator.java | 23 +++--
.../ExtensionActionsUpdateHelper.java | 64 +++++++++++--
.../ExtensionToolbarCoordinator.java | 13 ++-
.../ExtensionToolbarCoordinatorImpl.java | 34 +++++--
.../extensions/ExtensionsMenuCoordinator.java | 7 +-
.../extensions/ExtensionsMenuMediator.java | 14 ++-
.../browser_window/ChromeAndroidTaskImpl.java | 3 +
.../ChromeAndroidTaskTrackerFactory.java | 1 -
.../ChromeAndroidTaskTrackerImpl.java | 90 ++++++++++++++-----
.../ChromeAndroidTaskTracker.java | 7 +-
26 files changed, 233 insertions(+), 56 deletions(-)
components/tabs/impl/tab_collection.cc | 16 ++++
components/tabs/impl/tab_strip_collection.cc | 4 +-
31 files changed, 382 insertions(+), 95 deletions(-)
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
@@ -59,7 +64,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct
import org.chromium.chrome.browser.ui.IncognitoRestoreAppLaunchDrawBlockerFactory;
import org.chromium.chrome.browser.ui.RootUiCoordinator;
import org.chromium.chrome.browser.ui.appmenu.AppMenuPropertiesDelegate;
@@ -822,7 +825,36 @@ public class ChromeTabbedActivity extends ChromeActivity implements PreAttachInt
@@ -822,7 +825,33 @@ public class ChromeTabbedActivity extends ChromeActivity implements PreAttachInt
mTabModelNotificationDotManager.initWithNative(mTabModelSelector);
TabModel currentTabModel = mTabModelSelector.getCurrentModel();
initializeChromeAndroidTask(
@@ -73,9 +78,6 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct
+
+ @Override
+ public void onProfileDestroyed(Profile profile) {
+ if (!profile.isOffTheRecord()) return;
+ ExtensionActionsBridge.get(profile)
+ .closeBackgroundHosts();
+ }
+ });
+
@@ -97,7 +99,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct
// For saving non-incognito tab closures for Recent Tabs.
boolean alwaysIncognito = AlwaysIncognitoLinkInterceptor.isAlwaysIncognito();
@@ -2969,7 +3001,7 @@ public class ChromeTabbedActivity extends ChromeActivity implements PreAttachInt
@@ -2969,7 +2998,7 @@ public class ChromeTabbedActivity extends ChromeActivity implements PreAttachInt
mLayoutStateProviderSupplier,
getBrowserControlsManager(),
getWindowAndroid(),
@@ -106,7 +108,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct
getLifecycleDispatcher(),
getLayoutManagerSupplier(),
/* menuOrKeyboardActionController= */ this,
@@ -3885,6 +3917,10 @@ public class ChromeTabbedActivity extends ChromeActivity implements PreAttachInt
@@ -3885,6 +3914,10 @@ public class ChromeTabbedActivity extends ChromeActivity implements PreAttachInt
}
RecordUserAction.record("MobileMenuRecentTabs");
} else if (id == R.id.extensions_menu_id) {
@@ -158,11 +160,26 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv
+ mChromeAndroidTaskSupplierInternal.get().getId(),
+ tabModel);
+ ChromeAndroidTaskTrackerFactory.getInstance()
+ .onActivityWindowAndroidDestroy(incognitoTask);
+ .onActivityWindowAndroidDestroy(incognitoTask, getWindowAndroid());
}
@Override
@@ -2053,7 +2069,7 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
@@ -1797,6 +1813,14 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
@SuppressLint("NewApi")
@Override
protected final void onDestroy() {
+ ActivityWindowAndroid wAndroid = getWindowAndroid();
+ if (wAndroid != null) {
+ var chromeAndroidTaskTracker = ChromeAndroidTaskTrackerFactory.getInstance();
+ if (chromeAndroidTaskTracker != null) {
+ chromeAndroidTaskTracker.onActivityWindowAndroidDestroy(wAndroid);
+ }
+ }
+
if (mSnackbarManager != null) {
SnackbarManagerProvider.detach(mSnackbarManager);
}
@@ -2053,7 +2077,7 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
getProfileProviderSupplier().runSyncOrOnAvailable(this::initializeManualFillingComponent);
@@ -171,7 +188,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv
if (chromeAndroidTask != null) {
chromeAndroidTask.onNativeInitializationFinished();
}
@@ -2097,7 +2113,7 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
@@ -2097,7 +2121,7 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
&& DeviceFormFactor.isNonMultiDisplayContextOnTablet(this)) {
HostZoomMap.setTransparentZoomAdjustment(
ContentFeatureList.sAndroidMonitorZoomScalingFactor.getValue() / 100.0f);
@@ -319,6 +336,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar
import org.chromium.chrome.browser.flags.ChromeFeatureList;
import android.view.Gravity;
@@ -366,7 +368,7 @@ public class ToolbarManager
private TopInsetCoordinator.@Nullable Observer mTopInsetCoordinatorObserver;
private final SettableNonNullObservableSupplier<@ControlsPosition Integer>
mToolbarPositionSupplier = ObservableSuppliers.createNonNull(ControlsPosition.NONE);
- private final OneshotSupplier<ChromeAndroidTask> mChromeAndroidTaskSupplier;
+ private final Function<Tab, ChromeAndroidTask> mChromeAndroidTaskSupplier;
private @MonotonicNonNull HomeButtonCoordinator mHomeButtonCoordinator;
private @MonotonicNonNull HomePageButtonsCoordinator mHomePageButtonsCoordinator;
@@ -802,7 +804,7 @@ public class ToolbarManager
ObservableSupplier<Boolean> omniboxFocusStateSupplier,
OneshotSupplier<Boolean> promoShownOneshotSupplier,
@@ -328,6 +354,31 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar
Supplier<Boolean> isInOverviewModeSupplier,
Supplier<ModalDialogManager> modalDialogManagerSupplier,
StatusBarColorController statusBarColorController,
@@ -2424,22 +2426,19 @@ public class ToolbarManager
ViewStub extensionToolbarStub =
mControlContainer.findViewById(R.id.extension_toolbar_container_stub);
if (extensionToolbarStub != null) {
- ChromeAndroidTask task = mChromeAndroidTaskSupplier.get();
- // ChromeAndroidTask is available only on Desktop Android.
- if (task != null) {
mExtensionToolbarCoordinator =
ExtensionToolbarCoordinator.maybeCreate(
mActivity,
extensionToolbarStub,
mWindowAndroid,
- task,
+ mChromeAndroidTaskSupplier,
+ mProfileSupplier,
mActivityTabProvider.asObservable(),
mTabCreatorManager.getTabCreator(false),
getBrowsingModeThemeColorProvider());
if (mExtensionToolbarCoordinator != null) {
mToolbar.setExtensionToolbarCoordinator(mExtensionToolbarCoordinator);
}
- }
}
// Must be initialized before Toolbar attempts to use it.
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
@@ -440,7 +491,20 @@ diff --git a/chrome/browser/ui/android/extensions/extension_actions_bridge.cc b/
#include "ui/color/color_provider_manager.h"
#include "ui/events/android/key_event_android.h"
#include "ui/events/event.h"
@@ -221,6 +223,16 @@ void ExtensionActionsBridge::ClearExtensionData(JNIEnv* env) {
@@ -60,10 +62,9 @@ void ExtensionActionsBridge::IconObserver::OnIconUpdated() {
}
ExtensionActionsBridge::ExtensionActionsBridge(
- BrowserWindowInterface* browser,
+ Profile* profile,
const base::android::JavaRef<jobject>& java_object)
- : browser_(browser),
- profile_(browser->GetProfile()),
+ : profile_(profile),
java_object_(java_object),
model_(ToolbarActionsModel::Get(profile_)),
keybinding_registry_(
@@ -221,6 +222,16 @@ void ExtensionActionsBridge::ClearExtensionData(JNIEnv* env) {
install_directory, install_updacked_directory));
}
@@ -457,9 +521,32 @@ diff --git a/chrome/browser/ui/android/extensions/extension_actions_bridge.cc b/
jni_zero::ScopedJavaLocalRef<jobject>
ExtensionActionsBridge::HandleKeyDownEvent(
JNIEnv* env,
@@ -309,11 +320,9 @@ void ExtensionActionsBridge::OnToolbarIconUpdated(
static jlong JNI_ExtensionActionsBridge_Init(
JNIEnv* env,
const base::android::JavaRef<jobject>& java_object,
- jlong j_browser_window_interface) {
- BrowserWindowInterface* browser =
- reinterpret_cast<BrowserWindowInterface*>(j_browser_window_interface);
+ Profile* profile) {
return reinterpret_cast<jlong>(
- new ExtensionActionsBridge(browser, java_object));
+ new ExtensionActionsBridge(profile, java_object));
}
static bool JNI_ExtensionActionsBridge_ExtensionsEnabled(JNIEnv* env,
diff --git a/chrome/browser/ui/android/extensions/extension_actions_bridge.h b/chrome/browser/ui/android/extensions/extension_actions_bridge.h
--- a/chrome/browser/ui/android/extensions/extension_actions_bridge.h
+++ b/chrome/browser/ui/android/extensions/extension_actions_bridge.h
@@ -25,7 +25,7 @@ namespace extensions {
// This bridge is created and owned by Java UI code.
class ExtensionActionsBridge : public ToolbarActionsModel::Observer {
public:
- ExtensionActionsBridge(BrowserWindowInterface* browser,
+ ExtensionActionsBridge(Profile* profile,
const base::android::JavaRef<jobject>& java_object);
ExtensionActionsBridge(const ExtensionActionsBridge&) = delete;
ExtensionActionsBridge& operator=(const ExtensionActionsBridge&) = delete;
@@ -53,6 +53,7 @@ class ExtensionActionsBridge : public ToolbarActionsModel::Observer {
int tab_id,
content::WebContents* web_contents);
@@ -468,10 +555,74 @@ diff --git a/chrome/browser/ui/android/extensions/extension_actions_bridge.h b/c
jni_zero::ScopedJavaLocalRef<jobject> HandleKeyDownEvent(
JNIEnv* env,
const ui::KeyEventAndroid& key_event);
@@ -100,7 +101,6 @@ class ExtensionActionsBridge : public ToolbarActionsModel::Observer {
// Called by IconObserver to notify that the icon of an action was updated.
void OnToolbarIconUpdated(const ToolbarActionsModel::ActionId& action_id);
- const raw_ptr<BrowserWindowInterface> browser_;
const raw_ptr<Profile> profile_;
const base::android::ScopedJavaGlobalRef<jobject> java_object_;
const raw_ptr<ToolbarActionsModel> model_;
diff --git a/chrome/browser/ui/android/extensions/java/src/org/chromium/chrome/browser/ui/extensions/ExtensionActionsBridge.java b/chrome/browser/ui/android/extensions/java/src/org/chromium/chrome/browser/ui/extensions/ExtensionActionsBridge.java
--- a/chrome/browser/ui/android/extensions/java/src/org/chromium/chrome/browser/ui/extensions/ExtensionActionsBridge.java
+++ b/chrome/browser/ui/android/extensions/java/src/org/chromium/chrome/browser/ui/extensions/ExtensionActionsBridge.java
@@ -245,6 +245,10 @@ public class ExtensionActionsBridge implements Destroyable {
@@ -6,6 +6,7 @@ package org.chromium.chrome.browser.ui.extensions;
import android.graphics.Bitmap;
import android.view.KeyEvent;
+import android.util.ArrayMap;
import androidx.annotation.VisibleForTesting;
@@ -17,14 +18,17 @@ import org.jni_zero.NativeMethods;
import org.chromium.base.ObserverList;
import org.chromium.base.lifetime.Destroyable;
import org.chromium.base.lifetime.LifetimeAssert;
+import org.chromium.base.ThreadUtils;
import org.chromium.build.annotations.NullMarked;
import org.chromium.build.annotations.Nullable;
import org.chromium.chrome.browser.profiles.Profile;
+import org.chromium.chrome.browser.profiles.ProfileKeyedMap;
import org.chromium.chrome.browser.ui.browser_window.ChromeAndroidTask;
import org.chromium.content_public.browser.WebContents;
import org.chromium.extensions.ShowAction;
import java.util.Objects;
+import java.util.Map;
/** A JNI bridge to interact with extension actions for the toolbar. */
@NullMarked
@@ -34,10 +38,19 @@ public class ExtensionActionsBridge implements Destroyable {
private long mNativeExtensionActionsBridge;
private final ObserverList<Observer> mObservers = new ObserverList<>();
- public ExtensionActionsBridge(ChromeAndroidTask task) {
+ private static final ProfileKeyedMap<ExtensionActionsBridge> mExtensionActionsBridges =
+ new ProfileKeyedMap<>((e) -> e.destroy());
+
+ public static ExtensionActionsBridge get(Profile profile) {
+ ThreadUtils.assertOnUiThread();
+ return mExtensionActionsBridges.getForProfile(profile,
+ ExtensionActionsBridge::new);
+ }
+
+ private ExtensionActionsBridge(Profile profile) {
mNativeExtensionActionsBridge =
ExtensionActionsBridgeJni.get()
- .init(this, task.getOrCreateNativeBrowserWindowPtr());
+ .init(this, profile);
}
/** Represents the result of handling a key event. */
@@ -71,6 +84,7 @@ public class ExtensionActionsBridge implements Destroyable {
@Override
public void destroy() {
+ closeBackgroundHosts();
assert mNativeExtensionActionsBridge != 0;
ExtensionActionsBridgeJni.get().destroy(mNativeExtensionActionsBridge);
mNativeExtensionActionsBridge = 0;
@@ -245,11 +259,15 @@ public class ExtensionActionsBridge implements Destroyable {
ExtensionActionsBridgeJni.get().clearExtensionData(mNativeExtensionActionsBridge);
}
@@ -482,7 +633,13 @@ diff --git a/chrome/browser/ui/android/extensions/java/src/org/chromium/chrome/b
@NativeMethods
public interface Natives {
boolean extensionsEnabled(@JniType("Profile*") Profile profile);
@@ -281,6 +285,8 @@ public class ExtensionActionsBridge implements Destroyable {
- long init(ExtensionActionsBridge bridge, long browserWindowInterfacePtr);
+ long init(ExtensionActionsBridge bridge, @JniType("Profile*") Profile profile);
void destroy(long nativeExtensionActionsBridge);
@@ -281,6 +299,8 @@ public class ExtensionActionsBridge implements Destroyable {
void clearExtensionData(long nativeExtensionActionsBridge);
@@ -508,7 +665,15 @@ diff --git a/chrome/browser/ui/android/tab_model/tab_model_jni_bridge.cc b/chrom
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListCoordinator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListCoordinator.java
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListCoordinator.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListCoordinator.java
@@ -21,6 +21,8 @@ import org.chromium.ui.listmenu.ListMenuButton;
@@ -12,6 +12,7 @@ import org.chromium.base.lifetime.LifetimeAssert;
import org.chromium.base.supplier.NullableObservableSupplier;
import org.chromium.build.annotations.NullMarked;
import org.chromium.build.annotations.Nullable;
+import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.toolbar.extensions.ExtensionActionButtonProperties.ListItemType;
import org.chromium.chrome.browser.ui.browser_window.ChromeAndroidTask;
@@ -21,6 +22,8 @@ import org.chromium.ui.listmenu.ListMenuButton;
import org.chromium.ui.modelutil.MVCListAdapter.ModelList;
import org.chromium.ui.modelutil.ViewGroupAdapter;
@@ -517,19 +682,55 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow
/**
* Root component for the extension action buttons. Exposes public API for external consumers to
* interact with the buttons and affect their states.
@@ -37,7 +39,7 @@ public class ExtensionActionListCoordinator implements Destroyable {
@@ -28,6 +31,7 @@ import org.chromium.ui.modelutil.ViewGroupAdapter;
@NullMarked
public class ExtensionActionListCoordinator implements Destroyable {
private final ExtensionActionListContainer mContainer;
+ private final ListMenuButton mExtensionsMenuButton;
private final ModelList mModels;
private final ExtensionActionListMediator mMediator;
private final ViewGroupAdapter mAdapter;
@@ -36,15 +40,18 @@ public class ExtensionActionListCoordinator implements Destroyable {
public ExtensionActionListCoordinator(
Context context,
ExtensionActionListContainer container,
+ ListMenuButton extensionsMenuButton,
WindowAndroid windowAndroid,
- ChromeAndroidTask task,
+ Function<Tab, ChromeAndroidTask> task,
+ NullableObservableSupplier<Profile> profileSupplier,
NullableObservableSupplier<Tab> currentTabSupplier) {
mContainer = container;
+ mExtensionsMenuButton = extensionsMenuButton;
mModels = new ModelList();
mMediator =
new ExtensionActionListMediator(
- context, windowAndroid, mModels, task, currentTabSupplier);
+ context, windowAndroid, mModels, task, profileSupplier, currentTabSupplier);
mAdapter =
new ViewGroupAdapter.Builder(mContainer, mModels)
.registerType(
@@ -69,6 +76,7 @@ public class ExtensionActionListCoordinator implements Destroyable {
/** Performs a click on the button for the given action. */
public void click(String actionId) {
+ mExtensionsMenuButton.dismiss();
for (int i = 0; i < mModels.size(); i++) {
if (mModels.get(i).model.get(ExtensionActionButtonProperties.ID).equals(actionId)) {
mContainer.getChildAt(i).performClick();
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListMediator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListMediator.java
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListMediator.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListMediator.java
@@ -31,6 +31,8 @@ import org.chromium.ui.modelutil.MVCListAdapter.ListItem;
@@ -15,6 +15,7 @@ import org.chromium.base.supplier.NullableObservableSupplier;
import org.chromium.build.annotations.NullMarked;
import org.chromium.build.annotations.Nullable;
import org.chromium.chrome.browser.extensions.ContextMenuSource;
+import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.toolbar.MenuBuilderHelper;
import org.chromium.chrome.browser.toolbar.extensions.ExtensionActionButtonProperties.ListItemType;
@@ -31,6 +32,8 @@ import org.chromium.ui.modelutil.MVCListAdapter.ListItem;
import org.chromium.ui.modelutil.MVCListAdapter.ModelList;
import org.chromium.ui.modelutil.PropertyModel;
@@ -538,7 +739,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow
@NullMarked
class ExtensionActionListMediator implements Destroyable {
private static final String TAG = "EALMediator";
@@ -38,7 +40,7 @@ class ExtensionActionListMediator implements Destroyable {
@@ -38,7 +41,7 @@ class ExtensionActionListMediator implements Destroyable {
private final Context mContext;
private final WindowAndroid mWindowAndroid;
private final ModelList mModels;
@@ -547,12 +748,13 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow
private final ExtensionActionsUpdateHelper mExtensionActionsUpdateHelper;
private final ActionsUpdateDelegate mActionsUpdateDelegate = new ActionsUpdateDelegate();
@@ -51,12 +53,12 @@ class ExtensionActionListMediator implements Destroyable {
@@ -51,16 +54,17 @@ class ExtensionActionListMediator implements Destroyable {
Context context,
WindowAndroid windowAndroid,
ModelList models,
- ChromeAndroidTask task,
+ Function<Tab, ChromeAndroidTask> task,
+ NullableObservableSupplier<Profile> profileSupplier,
NullableObservableSupplier<Tab> currentTabSupplier) {
mContext = context;
mWindowAndroid = windowAndroid;
@@ -562,7 +764,12 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow
mExtensionActionsUpdateHelper =
new ExtensionActionsUpdateHelper(
@@ -111,8 +113,13 @@ class ExtensionActionListMediator implements Destroyable {
- mModels, task, currentTabSupplier, mActionsUpdateDelegate);
+ mModels, profileSupplier, currentTabSupplier, mActionsUpdateDelegate);
}
@Override
@@ -111,8 +115,13 @@ class ExtensionActionListMediator implements Destroyable {
}
int tabId = currentTab.getId();
@@ -577,7 +784,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow
assert mCurrentPopup == null;
mCurrentPopup =
new ExtensionActionPopup(mContext, mWindowAndroid, buttonView, actionId, contents);
@@ -131,9 +138,11 @@ class ExtensionActionListMediator implements Destroyable {
@@ -131,9 +140,11 @@ class ExtensionActionListMediator implements Destroyable {
return;
}
@@ -590,12 +797,143 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow
ExtensionActionContextMenuUtils.showContextMenu(
mContext, buttonView, bridge, MenuBuilderHelper.getRectProvider(buttonView), null);
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionsUpdateHelper.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionsUpdateHelper.java
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionsUpdateHelper.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionsUpdateHelper.java
@@ -9,6 +9,7 @@ import org.chromium.base.lifetime.Destroyable;
import org.chromium.base.supplier.NullableObservableSupplier;
import org.chromium.build.annotations.NullMarked;
import org.chromium.build.annotations.Nullable;
+import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.ui.browser_window.ChromeAndroidTask;
import org.chromium.chrome.browser.ui.extensions.ExtensionActionsBridge;
@@ -46,32 +47,35 @@ public class ExtensionActionsUpdateHelper implements Destroyable {
void onUpdateFinished();
}
+ private final NullableObservableSupplier<Profile> mProfileSupplier;
private final NullableObservableSupplier<Tab> mCurrentTabSupplier;
private final ActionsUpdateDelegate mActionsUpdateDelegate;
private final ModelList mModels;
- private final ExtensionActionsBridge mExtensionActionsBridge;
+ private final Callback<@Nullable Profile> mProfileUpdatedCallback = this::onProfileUpdated;
private final Callback<@Nullable Tab> mTabChangedCallback = this::onTabChanged;
private final ActionsObserver mActionsObserver = new ActionsObserver();
+ @Nullable private ExtensionActionsBridge mExtensionActionsBridge;
+ @Nullable private Profile mProfile;
@Nullable private Tab mCurrentTab;
public ExtensionActionsUpdateHelper(
ModelList models,
- ChromeAndroidTask task,
+ NullableObservableSupplier<Profile> profileSupplier,
NullableObservableSupplier<Tab> currentTabSupplier,
ActionsUpdateDelegate delegate) {
mModels = models;
+ mProfileSupplier = profileSupplier;
mCurrentTabSupplier = currentTabSupplier;
mActionsUpdateDelegate = delegate;
- mExtensionActionsBridge = new ExtensionActionsBridge(task);
+ mProfileSupplier.addObserver(mProfileUpdatedCallback);
mCurrentTabSupplier.addObserver(mTabChangedCallback);
- mExtensionActionsBridge.addObserver(mActionsObserver);
}
private void maybeUpdateAllActions() {
- if (mCurrentTab == null) {
+ if (mProfile == null || mExtensionActionsBridge == null || mCurrentTab == null) {
mModels.clear();
return;
}
@@ -98,6 +102,35 @@ public class ExtensionActionsUpdateHelper implements Destroyable {
mActionsUpdateDelegate.onUpdateFinished();
}
+ private void onProfileUpdated(@Nullable Profile profile) {
+ if (profile == mProfile) {
+ return;
+ }
+
+ mActionsUpdateDelegate.onUpdateStarted();
+
+ if (mExtensionActionsBridge != null) {
+ mExtensionActionsBridge.removeObserver(mActionsObserver);
+ }
+ mExtensionActionsBridge = null;
+ mProfile = profile;
+
+ if (mProfile != null) {
+ mExtensionActionsBridge = ExtensionActionsBridge.get(mProfile);
+ if (mExtensionActionsBridge != null) {
+ mExtensionActionsBridge.addObserver(mActionsObserver);
+ }
+ }
+
+ mModels.clear();
+
+ if (mCurrentTab != null && mCurrentTab.getProfile() != mProfile) {
+ return;
+ }
+
+ maybeUpdateAllActions();
+ }
+
private void onTabChanged(@Nullable Tab tab) {
if (tab == mCurrentTab) {
return;
@@ -116,9 +149,21 @@ public class ExtensionActionsUpdateHelper implements Destroyable {
}
mCurrentTab = tab;
+
+ // If the tab belongs to a different profile, onProfileUpdated will be called soon, so
+ // do not update actions now to avoid duplicated updates.
+ if (tab.getProfile() != mProfile) {
+ return;
+ }
+
maybeUpdateAllActions();
}
+ /** Returns the profile. */
+ public @Nullable Profile getProfile() {
+ return mProfile;
+ }
+
/** Returns the current tab. */
public @Nullable Tab getCurrentTab() {
return mCurrentTab;
@@ -131,11 +176,16 @@ public class ExtensionActionsUpdateHelper implements Destroyable {
@Override
public void destroy() {
- mExtensionActionsBridge.removeObserver(mActionsObserver);
+ if (mExtensionActionsBridge != null) {
+ mExtensionActionsBridge.removeObserver(mActionsObserver);
+ }
+
+ mProfileSupplier.removeObserver(mProfileUpdatedCallback);
mCurrentTabSupplier.removeObserver(mTabChangedCallback);
- mExtensionActionsBridge.destroy();
mCurrentTab = null;
+ mExtensionActionsBridge = null;
+ mProfile = null;
}
private class ActionsObserver implements ExtensionActionsBridge.Observer {
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionToolbarCoordinator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionToolbarCoordinator.java
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionToolbarCoordinator.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionToolbarCoordinator.java
@@ -15,12 +15,15 @@ import org.chromium.build.annotations.Initializer;
@@ -14,13 +14,17 @@ import org.chromium.base.supplier.NullableObservableSupplier;
import org.chromium.build.annotations.Initializer;
import org.chromium.build.annotations.NullMarked;
import org.chromium.build.annotations.Nullable;
+import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.tab.Tab;
+import org.chromium.chrome.browser.tabmodel.TabModel;
import org.chromium.chrome.browser.tabmodel.TabCreator;
@@ -609,36 +947,54 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow
/**
* The coordinator of the extension-related toolbar UI.
*
@@ -41,7 +44,7 @@ public interface ExtensionToolbarCoordinator extends Destroyable {
@@ -41,12 +45,13 @@ public interface ExtensionToolbarCoordinator extends Destroyable {
Context context,
ViewStub extensionToolbarStub,
WindowAndroid windowAndroid,
- ChromeAndroidTask task,
+ Function<Tab, ChromeAndroidTask> task,
+ NullableObservableSupplier<Profile> profileSupplier,
NullableObservableSupplier<Tab> currentTabSupplier,
TabCreator tabCreator,
ThemeColorProvider themeColorProvider) {
@@ -77,7 +80,7 @@ public interface ExtensionToolbarCoordinator extends Destroyable {
// Check if the extension UI is enabled first.
- if (!ExtensionUi.isEnabled(task.getProfile())) {
+ if (!ExtensionUi.isEnabled(profileSupplier.get())) {
return null;
}
@@ -60,6 +65,7 @@ public interface ExtensionToolbarCoordinator extends Destroyable {
extensionToolbarStub,
windowAndroid,
task,
+ profileSupplier,
currentTabSupplier,
tabCreator,
themeColorProvider);
@@ -77,7 +83,8 @@ public interface ExtensionToolbarCoordinator extends Destroyable {
Context context,
ViewStub extensionToolbarStub,
WindowAndroid windowAndroid,
- ChromeAndroidTask task,
+ Function<Tab, ChromeAndroidTask> task,
+ NullableObservableSupplier<Profile> profileSupplier,
NullableObservableSupplier<Tab> currentTabSupplier,
TabCreator tabCreator,
ThemeColorProvider themeColorProvider);
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionToolbarCoordinatorImpl.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionToolbarCoordinatorImpl.java
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionToolbarCoordinatorImpl.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionToolbarCoordinatorImpl.java
@@ -16,6 +16,7 @@ import org.chromium.build.annotations.NullMarked;
@@ -15,7 +15,9 @@ import org.chromium.base.supplier.NullableObservableSupplier;
import org.chromium.build.annotations.NullMarked;
import org.chromium.build.annotations.Nullable;
import org.chromium.build.annotations.ServiceImpl;
+import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.tab.Tab;
+import org.chromium.chrome.browser.tabmodel.TabModel;
import org.chromium.chrome.browser.tabmodel.TabCreator;
import org.chromium.chrome.browser.theme.ThemeColorProvider;
import org.chromium.chrome.browser.ui.browser_window.ChromeAndroidTask;
@@ -24,6 +25,8 @@ import org.chromium.chrome.browser.ui.extensions.ExtensionUi;
@@ -24,40 +26,42 @@ import org.chromium.chrome.browser.ui.extensions.ExtensionUi;
import org.chromium.chrome.browser.ui.extensions.R;
import org.chromium.ui.base.WindowAndroid;
@@ -647,19 +1003,95 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow
/** The implementation of {@link ExtensionToolbarCoordinator}. */
@NullMarked
@ServiceImpl(ExtensionToolbarCoordinator.class)
@@ -39,7 +42,7 @@ public class ExtensionToolbarCoordinatorImpl implements ExtensionToolbarCoordina
public class ExtensionToolbarCoordinatorImpl implements ExtensionToolbarCoordinator {
private final @Nullable LifetimeAssert mLifetimeAssert = LifetimeAssert.create(this);
- private ExtensionActionsBridge mBridge;
private ExtensionActionListCoordinator mExtensionActionListCoordinator;
private ExtensionsMenuCoordinator mExtensionsMenuCoordinator;
+ private NullableObservableSupplier<Tab> mCurrentTabSupplier;
+ Function<Tab, ChromeAndroidTask> mTaskSupplier;
@Override
public void initializeWithNative(
Context context,
ViewStub extensionToolbarStub,
WindowAndroid windowAndroid,
- ChromeAndroidTask task,
+ Function<Tab, ChromeAndroidTask> task,
+ NullableObservableSupplier<Profile> profileSupplier,
NullableObservableSupplier<Tab> currentTabSupplier,
TabCreator tabCreator,
ThemeColorProvider themeColorProvider) {
- mBridge = new ExtensionActionsBridge(task);
+ mCurrentTabSupplier = currentTabSupplier;
+ mTaskSupplier = task;
extensionToolbarStub.setLayoutResource(R.layout.extension_toolbar_container);
LinearLayout container = (LinearLayout) extensionToolbarStub.inflate();
- mProfileSupplier.addObserver((profile) -> {
- if (!ExtensionUi.isEnabled(profileSupplier.get())) {
- container.setVisibility(View.GONE);
- }
- });
mExtensionActionListCoordinator =
new ExtensionActionListCoordinator(
context,
container.findViewById(R.id.extension_action_list),
+ container.findViewById(R.id.extensions_menu_button),
windowAndroid,
task,
+ profileSupplier,
currentTabSupplier);
mExtensionsMenuCoordinator =
new ExtensionsMenuCoordinator(
@@ -65,6 +69,7 @@ public class ExtensionToolbarCoordinatorImpl implements ExtensionToolbarCoordina
container.findViewById(R.id.extensions_menu_button),
themeColorProvider,
task,
+ profileSupplier,
currentTabSupplier,
tabCreator,
mExtensionActionListCoordinator);
@@ -74,7 +79,6 @@ public class ExtensionToolbarCoordinatorImpl implements ExtensionToolbarCoordina
public void destroy() {
mExtensionsMenuCoordinator.destroy();
mExtensionActionListCoordinator.destroy();
- mBridge.destroy();
LifetimeAssert.setSafeToGc(mLifetimeAssert, true);
}
@@ -85,6 +89,18 @@ public class ExtensionToolbarCoordinatorImpl implements ExtensionToolbarCoordina
return false;
}
+ Tab currentTab = mCurrentTabSupplier.get();
+ if (currentTab == null) {
+ return false;
+ }
+
+ ChromeAndroidTask task = mTaskSupplier.apply(currentTab);
+ if (task == null) {
+ return false;
+ }
+
+ ExtensionActionsBridge mBridge = ExtensionActionsBridge.get(currentTab.getProfile());
+
ExtensionActionsBridge.HandleKeyEventResult result = mBridge.handleKeyDownEvent(event);
if (result.handled) {
return true;
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuCoordinator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuCoordinator.java
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuCoordinator.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuCoordinator.java
@@ -40,6 +40,8 @@ import org.chromium.ui.modelutil.PropertyModelChangeProcessor;
@@ -18,6 +18,7 @@ import org.chromium.base.lifetime.Destroyable;
import org.chromium.base.supplier.NullableObservableSupplier;
import org.chromium.build.annotations.NullMarked;
import org.chromium.build.annotations.Nullable;
+import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabLaunchType;
import org.chromium.chrome.browser.tabmodel.TabCreator;
@@ -40,6 +41,8 @@ import org.chromium.ui.modelutil.PropertyModelChangeProcessor;
import org.chromium.ui.modelutil.SimpleRecyclerViewAdapter;
import org.chromium.ui.widget.RectProvider;
@@ -668,19 +1100,36 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow
/**
* Coordinator for the extensions menu, accessed from the puzzle icon in the toolbar. This class is
* responsible for the button and the menu.
@@ -75,7 +77,7 @@ public class ExtensionsMenuCoordinator implements Destroyable {
@@ -75,7 +78,8 @@ public class ExtensionsMenuCoordinator implements Destroyable {
Context context,
ListMenuButton extensionsMenuButton,
ThemeColorProvider themeColorProvider,
- ChromeAndroidTask task,
+ Function<Tab, ChromeAndroidTask> task,
+ NullableObservableSupplier<Profile> profileSupplier,
NullableObservableSupplier<Tab> currentTabSupplier,
TabCreator tabCreator,
ExtensionActionListCoordinator extensionActionListCoordinator) {
@@ -138,6 +142,7 @@ public class ExtensionsMenuCoordinator implements Destroyable {
new ExtensionsMenuMediator(
mContext,
task,
+ profileSupplier,
mCurrentTabSupplier,
mExtensionModels,
() -> {
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuMediator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuMediator.java
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuMediator.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuMediator.java
@@ -26,6 +26,8 @@ import org.chromium.ui.modelutil.MVCListAdapter.ModelList;
@@ -13,6 +13,7 @@ import org.chromium.base.lifetime.Destroyable;
import org.chromium.base.supplier.NullableObservableSupplier;
import org.chromium.build.annotations.NullMarked;
import org.chromium.chrome.browser.extensions.ContextMenuSource;
+import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.ui.browser_window.ChromeAndroidTask;
import org.chromium.chrome.browser.toolbar.extensions.ExtensionActionListCoordinator;
@@ -26,6 +27,8 @@ import org.chromium.ui.modelutil.MVCListAdapter.ModelList;
import org.chromium.ui.modelutil.PropertyModel;
import org.chromium.ui.widget.RectProvider;
@@ -689,7 +1138,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow
/**
* Mediator for the extensions menu. This class is responsible for listening to changes in the
* extensions and updating the model accordingly.
@@ -34,7 +36,7 @@ import org.chromium.ui.widget.RectProvider;
@@ -34,7 +37,7 @@ import org.chromium.ui.widget.RectProvider;
class ExtensionsMenuMediator implements Destroyable {
private final ActionsUpdateDelegate mActionsUpdateDelegate = new ActionsUpdateDelegate();
private final Context mContext;
@@ -698,20 +1147,30 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow
private final Runnable mOnUpdateFinishedRunnable;
private final ExtensionActionsUpdateHelper mExtensionActionsUpdateHelper;
private final View mRootView;
@@ -42,7 +44,7 @@ class ExtensionsMenuMediator implements Destroyable {
@@ -42,7 +45,8 @@ class ExtensionsMenuMediator implements Destroyable {
public ExtensionsMenuMediator(
Context context,
- ChromeAndroidTask task,
+ Function<Tab, ChromeAndroidTask> task,
+ NullableObservableSupplier<Profile> profileSupplier,
NullableObservableSupplier<Tab> currentTabSupplier,
ModelList extensionModels,
Runnable onUpdateFinishedRunnable,
@@ -99,9 +101,11 @@ class ExtensionsMenuMediator implements Destroyable {
@@ -56,7 +60,7 @@ class ExtensionsMenuMediator implements Destroyable {
mExtensionActionsUpdateHelper =
new ExtensionActionsUpdateHelper(
- extensionModels, task, currentTabSupplier, mActionsUpdateDelegate);
+ extensionModels, profileSupplier, currentTabSupplier, mActionsUpdateDelegate);
}
private static class RelativeViewRectProvider extends RectProvider {
@@ -99,9 +103,11 @@ class ExtensionsMenuMediator implements Destroyable {
return;
}
+ ChromeAndroidTask task = mTaskSupplier.get();
+ ChromeAndroidTask task = mTask.apply(currentTab);
+
ExtensionActionContextMenuBridge bridge =
new ExtensionActionContextMenuBridge(
@@ -720,6 +1179,30 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow
ExtensionActionContextMenuUtils.showContextMenu(
mContext,
diff --git a/chrome/browser/ui/browser_window/internal/android/java/src/org/chromium/chrome/browser/ui/browser_window/ChromeAndroidTaskImpl.java b/chrome/browser/ui/browser_window/internal/android/java/src/org/chromium/chrome/browser/ui/browser_window/ChromeAndroidTaskImpl.java
--- a/chrome/browser/ui/browser_window/internal/android/java/src/org/chromium/chrome/browser/ui/browser_window/ChromeAndroidTaskImpl.java
+++ b/chrome/browser/ui/browser_window/internal/android/java/src/org/chromium/chrome/browser/ui/browser_window/ChromeAndroidTaskImpl.java
@@ -440,6 +440,9 @@ final class ChromeAndroidTaskImpl
if (isActivityToRemoveAtTop) {
registerListenersForTopActivity();
}
+
+ // (5) remove UnownedUserDataHost
+ topActivityScopedObjects.mTabModel.associateWithBrowserWindow(0);
}
@Override
diff --git a/chrome/browser/ui/browser_window/internal/android/java/src/org/chromium/chrome/browser/ui/browser_window/ChromeAndroidTaskTrackerFactory.java b/chrome/browser/ui/browser_window/internal/android/java/src/org/chromium/chrome/browser/ui/browser_window/ChromeAndroidTaskTrackerFactory.java
--- a/chrome/browser/ui/browser_window/internal/android/java/src/org/chromium/chrome/browser/ui/browser_window/ChromeAndroidTaskTrackerFactory.java
+++ b/chrome/browser/ui/browser_window/internal/android/java/src/org/chromium/chrome/browser/ui/browser_window/ChromeAndroidTaskTrackerFactory.java
@@ -21,7 +21,6 @@ public final class ChromeAndroidTaskTrackerFactory {
public static ChromeAndroidTaskTracker getInstance() {
// TODO(crbug.com/473636857): Remove once this is properly implemented on non-desktop
// platforms.
- if (!DeviceInfo.isDesktop()) return null;
return ChromeAndroidTaskTrackerImpl.getInstance();
}
diff --git a/chrome/browser/ui/browser_window/internal/android/java/src/org/chromium/chrome/browser/ui/browser_window/ChromeAndroidTaskTrackerImpl.java b/chrome/browser/ui/browser_window/internal/android/java/src/org/chromium/chrome/browser/ui/browser_window/ChromeAndroidTaskTrackerImpl.java
--- a/chrome/browser/ui/browser_window/internal/android/java/src/org/chromium/chrome/browser/ui/browser_window/ChromeAndroidTaskTrackerImpl.java
+++ b/chrome/browser/ui/browser_window/internal/android/java/src/org/chromium/chrome/browser/ui/browser_window/ChromeAndroidTaskTrackerImpl.java
@@ -796,7 +1279,7 @@ diff --git a/chrome/browser/ui/browser_window/internal/android/java/src/org/chro
mObservers.forEach((observer) -> observer.onTaskAdded(newTask));
return newTask;
}
@@ -141,28 +167,43 @@ final class ChromeAndroidTaskTrackerImpl implements ChromeAndroidTaskTracker {
@@ -141,23 +167,38 @@ final class ChromeAndroidTaskTrackerImpl implements ChromeAndroidTaskTracker {
@Override
@Nullable
@@ -831,7 +1314,7 @@ diff --git a/chrome/browser/ui/browser_window/internal/android/java/src/org/chro
+ if (key.mTaskId != taskId) continue;
+
+ var task = mTasksCromite.get(key);
+ if (task.getActivityWindowAndroid() != activityWindowAndroid) {
+ if (task.getTopActivityWindowAndroid() != activityWindowAndroid) {
+ continue;
+ }
+ onActivityWindowAndroidDestroy(task, activityWindowAndroid);
@@ -843,18 +1326,12 @@ diff --git a/chrome/browser/ui/browser_window/internal/android/java/src/org/chro
if (task == null) {
return;
}
- task.removeActivityScopedObjects(activityWindowAndroid);
+ task.removeActivityScopedObjects(activityWindowAndroid); <-- check this
// Destroy the ChromeAndroidTask if there is no ActivityWindowAndroid associated with it.
//
@@ -177,7 +218,7 @@ final class ChromeAndroidTaskTrackerImpl implements ChromeAndroidTaskTracker {
// In the future, we can register a Task listener when a ChromeAndroidTask is created,
// then destroy it when notified of the Task removal.
if (task.getTopActivityWindowAndroid() == null) {
- removeInternal(taskId);
+ removeInternal(task); <-- check this
+ removeInternal(task);
}
}
@@ -943,9 +1420,54 @@ diff --git a/chrome/browser/ui/browser_window/public/android/java/src/org/chromi
*/
void onActivityWindowAndroidDestroy(ActivityWindowAndroid activityWindowAndroid);
+ void onActivityWindowAndroidDestroy(ChromeAndroidTask task);
+ void onActivityWindowAndroidDestroy(ChromeAndroidTask task, ActivityWindowAndroid activityWindowAndroid);
+
/**
* Adds an observer which will be called on addition or removal of tasks.
*
diff --git a/components/tabs/impl/tab_collection.cc b/components/tabs/impl/tab_collection.cc
--- a/components/tabs/impl/tab_collection.cc
+++ b/components/tabs/impl/tab_collection.cc
@@ -137,6 +137,22 @@ TabCollection::TabCollection(Type type,
TabCollection::~TabCollection() {
DispatchPendingNotifications();
+
+ auto& childrens = GetChildren();
+ for (auto it = childrens.begin(); it != childrens.end(); ) {
+ auto& child = *it;
+ if (std::holds_alternative<std::unique_ptr<TabInterface>>(child)) {
+ TabInterface* tab =
+ std::get<std::unique_ptr<TabInterface>>(child).get();
+ auto removed_tab = MaybeRemoveTab(tab);
+ } else if (std::holds_alternative<std::unique_ptr<TabCollection>>(child)) {
+ TabCollection* collection =
+ std::get<std::unique_ptr<TabCollection>>(child).get();
+ auto removed_collection = MaybeRemoveCollection(collection);
+ } else {
+ it++;
+ }
+ }
}
void TabCollection::AddObserver(TabCollectionObserver* observer) const {
diff --git a/components/tabs/impl/tab_strip_collection.cc b/components/tabs/impl/tab_strip_collection.cc
--- a/components/tabs/impl/tab_strip_collection.cc
+++ b/components/tabs/impl/tab_strip_collection.cc
@@ -327,13 +327,13 @@ std::unique_ptr<TabInterface> TabStripCollection::RemoveTabAtIndexRecursive(
std::unique_ptr<TabInterface> TabStripCollection::MaybeRemoveTab(
TabInterface* tab) {
CHECK(tab);
- return nullptr;
+ return RemoveTabImpl(tab);
}
std::unique_ptr<TabCollection> TabStripCollection::MaybeRemoveCollection(
TabCollection* collection) {
CHECK(collection);
- return nullptr;
+ return TabStripCollection::RemoveTabCollection(collection);
}
void TabStripCollection::InsertTabCollectionAt(
--
@@ -51,7 +51,7 @@ 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/password_manager/settings/PasswordSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java
@@ -26,6 +26,8 @@ import androidx.preference.Preference;
@@ -27,6 +27,8 @@ import androidx.preference.Preference;
import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceGroup;
@@ -60,7 +60,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manage
import org.chromium.base.supplier.ObservableSupplier;
import org.chromium.base.supplier.ObservableSupplierImpl;
import org.chromium.build.annotations.Nullable;
@@ -57,6 +59,11 @@ import java.lang.annotation.Retention;
@@ -60,6 +62,11 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.Locale;
@@ -72,16 +72,16 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manage
/**
* The "Passwords" screen in Settings, which allows the user to enable or disable password saving,
* to view saved passwords (just the username and URL), and to delete saved passwords.
@@ -64,7 +71,7 @@ import java.util.Locale;
@@ -67,7 +74,7 @@ import java.util.Locale;
public class PasswordSettings extends ChromeBaseSettingsFragment
implements PasswordListObserver,
Preference.OnPreferenceClickListener,
Preference.OnPreferenceClickListener, SearchViewProvider,
- SyncService.SyncStateChangedListener {
+ SyncService.SyncStateChangedListener, INeedSnackbarManager {
@IntDef({
TrustedVaultBannerState.NOT_SHOWN,
TrustedVaultBannerState.OFFER_OPT_IN,
@@ -94,6 +101,12 @@ public class PasswordSettings extends ChromeBaseSettingsFragment
@@ -97,6 +104,12 @@ public class PasswordSettings extends ChromeBaseSettingsFragment
public static final String PREF_TRUSTED_VAULT_BANNER = "trusted_vault_banner";
public static final String PREF_KEY_MANAGE_ACCOUNT_LINK = "manage_account_link";
@@ -94,7 +94,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manage
private static final String PREF_KEY_CATEGORY_SAVED_PASSWORDS = "saved_passwords";
private static final String PREF_KEY_CATEGORY_EXCEPTIONS = "exceptions";
private static final String PREF_KEY_SAVED_PASSWORDS_NO_TEXT = "saved_passwords_no_text";
@@ -126,6 +139,9 @@ public class PasswordSettings extends ChromeBaseSettingsFragment
@@ -129,6 +142,9 @@ public class PasswordSettings extends ChromeBaseSettingsFragment
private Preference mLinkPref;
private Menu mMenu;
@@ -104,7 +104,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manage
private final ObservableSupplierImpl<String> mPageTitle = new ObservableSupplierImpl<>();
/** For controlling the UX flow of exporting passwords. */
@@ -305,6 +321,7 @@ public class PasswordSettings extends ChromeBaseSettingsFragment
@@ -315,6 +331,7 @@ public class PasswordSettings extends ChromeBaseSettingsFragment
createSavePasswordsSwitch();
createAutoSignInCheckbox();
@@ -112,7 +112,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manage
PasswordManagerHandlerProvider.getForProfile(getProfile())
.getPasswordManagerHandler()
@@ -565,6 +582,71 @@ public class PasswordSettings extends ChromeBaseSettingsFragment
@@ -577,6 +594,71 @@ public class PasswordSettings extends ChromeBaseSettingsFragment
getPrefService().getBoolean(Pref.CREDENTIALS_ENABLE_SERVICE));
}
@@ -16,6 +16,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
chrome/browser/extensions/extension_util.h | 2 +-
chrome/browser/resources/BUILD.gn | 7 +
chrome/browser/resources/settings/BUILD.gn | 2 +-
.../browser/resources/settings/lazy_load.ts | 2 +-
.../resources/settings/page_visibility.ts | 36 ++-
.../settings/people_page/sync_controls.ts | 6 +-
.../search_engine_edit_dialog.html | 6 +
@@ -80,7 +81,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
ui/webui/resources/images/BUILD.gn | 2 +-
ui/webui/resources/js/BUILD.gn | 2 +-
ui/webui/resources/js/load_time_data.ts | 17 +-
73 files changed, 1159 insertions(+), 75 deletions(-)
74 files changed, 1160 insertions(+), 76 deletions(-)
create mode 100644 chrome/app/settings_strings_android.grdp
create mode 100644 chrome/browser/search_engines/android/java/res/layout/search_engine_layout.xml
create mode 100644 chrome/browser/ui/webui/settings/settings_localized_strings_provider_android.cc
@@ -485,6 +486,18 @@ diff --git a/chrome/browser/resources/settings/BUILD.gn b/chrome/browser/resourc
build_webui("build") {
grd_prefix = "settings"
diff --git a/chrome/browser/resources/settings/lazy_load.ts b/chrome/browser/resources/settings/lazy_load.ts
--- a/chrome/browser/resources/settings/lazy_load.ts
+++ b/chrome/browser/resources/settings/lazy_load.ts
@@ -143,7 +143,7 @@ export {CrTextareaElement} from 'chrome://resources/cr_elements/cr_textarea/cr_t
export {CrToastElement} from 'chrome://resources/cr_elements/cr_toast/cr_toast.js';
export {getToastManager} from 'chrome://resources/cr_elements/cr_toast/cr_toast_manager.js';
export {CrTooltipElement} from 'chrome://resources/cr_elements/cr_tooltip/cr_tooltip.js';
-// <if expr="not is_chromeos">
+// <if expr="not is_chromeos and not is_android">
export {PageCallbackRouter, PageHandlerFactory, PageHandlerRemote, PageRemote} from 'chrome://resources/js/batch_upload_promo.mojom-webui.js';
export type {PageHandlerInterface} from 'chrome://resources/js/batch_upload_promo.mojom-webui.js';
export {BatchUploadPromoProxyImpl} from 'chrome://resources/js/batch_upload_promo/batch_upload_promo_proxy.js';
diff --git a/chrome/browser/resources/settings/page_visibility.ts b/chrome/browser/resources/settings/page_visibility.ts
--- a/chrome/browser/resources/settings/page_visibility.ts
+++ b/chrome/browser/resources/settings/page_visibility.ts
+3 -3
View File
@@ -242,7 +242,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.j
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
@@ -351,8 +351,8 @@ public class LaunchIntentDispatcher {
@@ -352,8 +352,8 @@ public class LaunchIntentDispatcher {
/*incognito*/true);
newIntent.setData(mIntent.getData());
newIntent.setPackage(applicationContext.getPackageName());
@@ -411,7 +411,7 @@ new file mode 100644
+ chromeIntent.setPackage(applicationContext.getPackageName());
+ chromeIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+
+ LaunchIntentDispatcher.dispatch(this, chromeIntent);
+ LaunchIntentDispatcher.dispatchToTabbedActivity(this, chromeIntent);
+ finish();
+ });
+
@@ -461,7 +461,7 @@ new file mode 100644
+ chromeIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ IntentHandler.setForceIncognitoMode(chromeIntent);
+
+ LaunchIntentDispatcher.dispatch(this, chromeIntent);
+ LaunchIntentDispatcher.dispatchToTabbedActivity(this, chromeIntent);
+ finish();
+ }
+
@@ -18,12 +18,12 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
.../src/org/chromium/base/DeviceInfo.java | 6 +-
build/BUILD.gn | 2 +-
build/config/android/rules.gni | 4 +-
build/config/chrome_build.gni | 7 ++-
build/config/chrome_build.gni | 7 +-
build/config/compiler/BUILD.gn | 2 +-
build/config/compiler/pgo/BUILD.gn | 2 +-
chrome/android/BUILD.gn | 4 +-
chrome/android/chrome_public_apk_tmpl.gni | 2 +-
.../java/res/layout/manage_space_activity.xml | 14 ++++-
.../java/res/layout/manage_space_activity.xml | 14 +++-
.../java/res/xml/developer_preferences.xml | 6 ++
.../browser/ChromeBaseAppCompatActivity.java | 2 +-
.../AppMenuPropertiesDelegateImpl.java | 2 +-
@@ -33,11 +33,12 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
.../MediaCaptureNotificationServiceImpl.java | 8 +--
.../browser/multiwindow/MultiWindowUtils.java | 2 +-
.../ChromeSiteSettingsDelegate.java | 2 +-
.../site_settings/ManageSpaceActivity.java | 20 +++++++
.../site_settings/ManageSpaceActivity.java | 20 ++++++
...InterceptNavigationDelegateClientImpl.java | 2 +-
.../browser/tab/RequestDesktopUtils.java | 2 +-
.../TabbedAppMenuPropertiesDelegate.java | 2 +-
.../tabbed_mode/TabbedRootUiCoordinator.java | 2 +-
chrome/app/extensions_strings.grdp | 7 +++
chrome/app/extensions_strings.grdp | 7 ++
chrome/app/theme/theme_resources.grd | 4 +-
chrome/browser/BUILD.gn | 6 +-
chrome/browser/about_flags.cc | 4 ++
@@ -45,7 +46,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
.../bookmarks/bar/BookmarkBarUtils.java | 6 +-
.../bar/BookmarkBarVisibilityProvider.java | 2 +-
chrome/browser/browser_process_impl.cc | 2 +-
chrome/browser/chrome_browser_field_trials.cc | 60 +++++++++----------
chrome/browser/chrome_browser_field_trials.cc | 72 +++++++++----------
.../chrome_browser_interface_binders_webui.cc | 4 +-
.../browser/chrome_content_browser_client.cc | 4 +-
chrome/browser/devtools/BUILD.gn | 2 +-
@@ -53,13 +54,15 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
.../download_offline_content_provider.cc | 4 +-
chrome/browser/extensions/BUILD.gn | 12 +++-
.../chrome_extensions_api_client_android.cc | 2 +-
.../extensions/api/identity/web_auth_flow.cc | 6 +-
.../extensions/api/identity/web_auth_flow.h | 4 +-
.../extensions/extension_management.cc | 8 ++-
.../browser/extensions/extension_management.h | 2 +-
chrome/browser/extensions/extension_util.cc | 11 ++++
chrome/browser/extensions/extension_util.cc | 11 +++
.../feedback/DeviceInfoFeedbackSource.java | 2 +-
chrome/browser/media/router/BUILD.gn | 4 +-
.../browser/media/router/discovery/BUILD.gn | 2 +-
.../media/router/media_router_feature.cc | 10 ++--
.../media/router/media_router_feature.cc | 10 +--
.../media/router/media_router_feature.h | 2 +-
.../media/webrtc/webrtc_event_log_manager.cc | 4 +-
.../policy_value_and_status_aggregator.cc | 2 +-
@@ -70,8 +73,8 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
chrome/browser/resources/discards/BUILD.gn | 2 +-
.../resources/extensions/detail_view.css | 6 ++
.../resources/extensions/extensions.html | 8 ++-
.../resources/extensions/item_list.css | 11 ++++
.../resources/extensions/toolbar.html.ts | 7 ---
.../resources/extensions/item_list.css | 11 +++
.../resources/extensions/toolbar.html.ts | 7 --
...omeProvidedSharingOptionsProviderBase.java | 4 +-
chrome/browser/startup_data.cc | 6 +-
chrome/browser/startup_data.h | 6 +-
@@ -81,14 +84,14 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
.../browser/ui/android/context_menu_helper.h | 4 +-
.../desktop_site/DesktopSiteUtils.java | 4 +-
chrome/browser/ui/android/extensions/BUILD.gn | 4 +-
.../extensions/extension_actions_bridge.cc | 23 +++++++
.../extensions/extension_actions_bridge.cc | 23 ++++++
.../extensions/extension_actions_bridge.h | 1 +
.../java/res/layout/extensions_menu.xml | 1 +
.../res/layout/extensions_menu_footer.xml | 4 +-
.../extensions/java/res/values/dimens.xml | 1 +
.../ui/extensions/ExtensionActionsBridge.java | 6 ++
.../extensions/windowing/internal/BUILD.gn | 2 +-
.../Enable-extensions-Android.grdp | 15 +++++
.../Enable-extensions-Android.grdp | 15 ++++
.../Extensions-Android.grdp | 9 +++
.../browser/ui/android/tab_model/tab_model.cc | 4 +-
.../browser/ui/android/tab_model/tab_model.h | 2 +-
@@ -96,11 +99,11 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
.../android/tab_model/tab_model_test_helper.h | 2 +-
.../toolbar/java/res/layout/toolbar_phone.xml | 6 ++
.../ExtensionActionListContainer.java | 8 ++-
.../ExtensionToolbarCoordinatorImpl.java | 10 +++-
.../extensions/ExtensionsMenuCoordinator.java | 44 +++++++-------
.../ExtensionToolbarCoordinatorImpl.java | 10 ++-
.../extensions/ExtensionsMenuCoordinator.java | 44 ++++++------
.../ExtensionsMenuItemProperties.java | 5 +-
.../ExtensionsMenuItemViewBinder.java | 2 +
.../extensions/ExtensionsMenuMediator.java | 10 +++-
.../extensions/ExtensionsMenuMediator.java | 10 ++-
chrome/browser/ui/prefs/BUILD.gn | 4 +-
chrome/browser/ui/prefs/prefs_tab_helper.cc | 8 +--
.../browser/ui/webui/chrome_web_ui_configs.cc | 4 +-
@@ -109,12 +112,12 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
chrome/chrome_paks.gni | 2 +-
chrome/common/chrome_switches.cc | 2 +-
chrome/common/chrome_switches.h | 2 +-
chrome/common/extensions/api/api_sources.gni | 7 +++
chrome/common/extensions/api/api_sources.gni | 7 ++
chrome/common/webui_url_constants.cc | 2 +-
chrome/common/webui_url_constants.h | 2 +-
.../sandbox_status_extension_android.cc | 3 +-
.../sandbox_status_extension_android.h | 1 +
chrome/test/BUILD.gn | 14 ++---
chrome/test/BUILD.gn | 14 ++--
chrome/version.gni | 4 +-
.../core/browser/host_content_settings_map.cc | 6 ++
.../embedder_support/view/ContentView.java | 2 +-
@@ -136,7 +139,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
.../media/video_capture_manager.cc | 4 +-
.../media/video_capture_manager.h | 6 +-
.../render_widget_host_view_android.cc | 2 +-
.../browser/ContentUiEventHandler.java | 7 ++-
.../browser/ContentUiEventHandler.java | 7 +-
content/public/common/content_features.cc | 2 +-
.../render_frame_media_playback_options.cc | 2 +-
.../about_flags_cc/Extensions-Android.inc | 12 ++++
@@ -146,12 +149,12 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
extensions/browser/api/system_cpu/BUILD.gn | 2 +-
.../api/web_request/permission_helper.cc | 2 +-
extensions/browser/extension_frame_host.cc | 8 +++
extensions/browser/extension_host.cc | 24 +++++++-
extensions/browser/extension_host.cc | 24 ++++++-
extensions/buildflags/BUILD.gn | 3 +-
extensions/buildflags/buildflags.gni | 4 +-
extensions/common/api/schema.gni | 2 +-
extensions/common/command.cc | 2 +-
extensions/common/extension_features.cc | 10 +++-
extensions/common/extension_features.cc | 10 ++-
extensions/common/extension_features.h | 6 +-
extensions/common/extension_l10n_util.cc | 6 ++
extensions/common/features/feature.cc | 2 +-
@@ -175,7 +178,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
ui/webui/resources/cr_elements/BUILD.gn | 2 +-
.../cr_elements/cr_toolbar/cr_toolbar.css | 6 ++
ui/webui/resources/css/BUILD.gn | 2 +-
163 files changed, 565 insertions(+), 285 deletions(-)
166 files changed, 577 insertions(+), 297 deletions(-)
create mode 100644 chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Enable-extensions-Android.grdp
create mode 100644 chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Extensions-Android.grdp
create mode 100644 cromite_flags/chrome/browser/about_flags_cc/Extensions-Android.inc
@@ -333,7 +336,7 @@ diff --git a/build/config/compiler/pgo/BUILD.gn b/build/config/compiler/pgo/BUIL
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
--- a/chrome/android/BUILD.gn
+++ b/chrome/android/BUILD.gn
@@ -966,7 +966,7 @@ if (_is_default_toolchain) {
@@ -954,7 +954,7 @@ if (_is_default_toolchain) {
"//chrome/browser/password_entry_edit/android/internal:java",
]
@@ -342,7 +345,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
deps +=
[ "//chrome/browser/ui/android/extensions/windowing/internal:java" ]
} else {
@@ -2310,7 +2310,7 @@ if (_is_default_toolchain) {
@@ -2298,7 +2298,7 @@ if (_is_default_toolchain) {
"//components/embedder_support/android:virtual_structure_javatests",
]
@@ -598,6 +601,18 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/RequestDesk
return false;
}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedAppMenuPropertiesDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedAppMenuPropertiesDelegate.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedAppMenuPropertiesDelegate.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedAppMenuPropertiesDelegate.java
@@ -843,7 +843,7 @@ public class TabbedAppMenuPropertiesDelegate extends AppMenuPropertiesDelegateIm
return false;
}
- return DeviceInfo.isDesktop() || isPdf;
+ return DeviceInfo.isDesktopFalse() || isPdf;
}
private MVCListAdapter.ListItem buildPrintItem(Tab currentTab) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java
@@ -771,6 +786,15 @@ diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_pro
diff --git a/chrome/browser/chrome_browser_field_trials.cc b/chrome/browser/chrome_browser_field_trials.cc
--- a/chrome/browser/chrome_browser_field_trials.cc
+++ b/chrome/browser/chrome_browser_field_trials.cc
@@ -124,7 +124,7 @@ void ChromeBrowserFieldTrials::RegisterFeatureOverrides(
feature_overrides.DisableFeature(features::kEyeDropper);
}
#elif BUILDFLAG(IS_ANDROID) // BUILDFLAG(IS_LINUX)
-#if BUILDFLAG(IS_DESKTOP_ANDROID)
+#if BUILDFLAG(IS_DESKTOP_ANDROID_CROMITE)
// Nota bene: Anything here is expected to be short-lived, unless deemed too
// risky to launch to non-desktop platforms. New features being added here
// should be the exception, and not the norm. Instead, you should place the
@@ -134,11 +134,11 @@ void ChromeBrowserFieldTrials::RegisterFeatureOverrides(
// Enables the caret browsing a11y feature - can use arrow keys to navigate
// through web pages.
@@ -785,9 +809,19 @@ diff --git a/chrome/browser/chrome_browser_field_trials.cc b/chrome/browser/chro
// If enabled, render processes associated only with tabs in unfocused windows
// will be downgraded to "vis" priority, rather than remaining at "fg". This
@@ -155,10 +155,10 @@ void ChromeBrowserFieldTrials::RegisterFeatureOverrides(
@@ -149,16 +149,16 @@ void ChromeBrowserFieldTrials::RegisterFeatureOverrides(
// Enable desktop tab management features.
// TODO(crbug.com/422902625): Remove when rollout is complete to all form
// factors.
- feature_overrides.EnableFeature(chrome::android::kProcessRankPolicyAndroid);
- feature_overrides.EnableFeature(chrome::android::kProtectedTabsAndroid);
- feature_overrides.EnableFeature(features::kSubframeImportance);
+ // feature_overrides.EnableFeature(chrome::android::kProcessRankPolicyAndroid); have dangling ptr issue on shutdown
+ // feature_overrides.EnableFeature(chrome::android::kProtectedTabsAndroid);
+ // feature_overrides.EnableFeature(features::kSubframeImportance);
// TODO(crbug.com/465596248): Remove when experiment is complete.
feature_overrides.EnableFeature(chrome::android::kProtectRecentlyVisibleTab);
- feature_overrides.EnableFeature(chrome::android::kProtectRecentlyVisibleTab);
+ // feature_overrides.EnableFeature(chrome::android::kProtectRecentlyVisibleTab);
// TODO(crbug.com/422903297): Remove when tablet rollout is complete.
- feature_overrides.EnableFeature(features::kRendererProcessLimitOnAndroid);
+ // feature_overrides.EnableFeature(features::kRendererProcessLimitOnAndroid);
@@ -834,7 +868,7 @@ diff --git a/chrome/browser/chrome_browser_field_trials.cc b/chrome/browser/chro
// Enables automatic picture-in-picture.
// TODO(crbug.com/421608904): Remove when rollout is complete to all form
// factors.
@@ -197,43 +197,43 @@ void ChromeBrowserFieldTrials::RegisterFeatureOverrides(
@@ -197,48 +197,48 @@ void ChromeBrowserFieldTrials::RegisterFeatureOverrides(
feature_overrides.EnableFeature(media::kContextMenuPictureInPictureAndroid);
// Disables the enhanced pip transition and uses the default animation.
// TODO(crbug.com/440384447): Remove when enhanced pip transition is fixed.
@@ -894,6 +928,12 @@ diff --git a/chrome/browser/chrome_browser_field_trials.cc b/chrome/browser/chro
// Enable the ability for extensions to override chrome pages.
// TODO(crbug.com/404069963): Remove flag when the feature is verified to be
// stable on desktop Android.
- feature_overrides.EnableFeature(chrome::android::kChromeNativeUrlOverriding);
+ // feature_overrides.EnableFeature(chrome::android::kChromeNativeUrlOverriding);
// Enable desktop full screen to a screen feature flag by default for desktop
// platforms.
@@ -250,7 +250,7 @@ void ChromeBrowserFieldTrials::RegisterFeatureOverrides(
// Enables the ability to specify a platform-specific zoom scaling that will
// apply transparently to all pages.
@@ -1031,6 +1071,57 @@ diff --git a/chrome/browser/extensions/api/chrome_extensions_api_client_android.
namespace extensions {
diff --git a/chrome/browser/extensions/api/identity/web_auth_flow.cc b/chrome/browser/extensions/api/identity/web_auth_flow.cc
--- a/chrome/browser/extensions/api/identity/web_auth_flow.cc
+++ b/chrome/browser/extensions/api/identity/web_auth_flow.cc
@@ -38,7 +38,7 @@
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_window.h"
#else
-static_assert(BUILDFLAG(ENABLE_DESKTOP_ANDROID_EXTENSIONS));
+static_assert(BUILDFLAG(ENABLE_DESKTOP_ANDROID_EXTENSIONS_CROMITE));
#include "base/functional/callback_forward.h"
#include "chrome/browser/android/tab_android.h"
#include "chrome/browser/ui/android/tab_model/tab_model.h"
@@ -166,7 +166,7 @@ void WebAuthFlow::CloseInfoBar() {
}
}
-#if BUILDFLAG(ENABLE_DESKTOP_ANDROID_EXTENSIONS)
+#if BUILDFLAG(ENABLE_DESKTOP_ANDROID_EXTENSIONS_CROMITE)
void WebAuthFlow::OnBrowserWindowInterfaceInitialized(
BrowserWindowInterface* browser) {
TabModel* tab_model =
@@ -202,7 +202,7 @@ bool WebAuthFlow::DisplayAuthPageInPopupWindow() {
browser->window()->Show();
#else
- static_assert(BUILDFLAG(ENABLE_DESKTOP_ANDROID_EXTENSIONS));
+ static_assert(BUILDFLAG(ENABLE_DESKTOP_ANDROID_EXTENSIONS_CROMITE));
BrowserWindowCreateParams params(BrowserWindowInterface::TYPE_POPUP,
*profile_, user_gesture_);
if (popup_bounds_.has_value()) {
diff --git a/chrome/browser/extensions/api/identity/web_auth_flow.h b/chrome/browser/extensions/api/identity/web_auth_flow.h
--- a/chrome/browser/extensions/api/identity/web_auth_flow.h
+++ b/chrome/browser/extensions/api/identity/web_auth_flow.h
@@ -149,7 +149,7 @@ class WebAuthFlow : public content::WebContentsObserver,
void MaybeStartTimeout();
void OnTimeout();
-#if BUILDFLAG(ENABLE_DESKTOP_ANDROID_EXTENSIONS)
+#if BUILDFLAG(ENABLE_DESKTOP_ANDROID_EXTENSIONS_CROMITE)
void OnBrowserWindowInterfaceInitialized(BrowserWindowInterface* browser);
#endif
@@ -195,7 +195,7 @@ class WebAuthFlow : public content::WebContentsObserver,
// the error code when the flow times out.
bool initial_url_loaded_ = false;
base::ScopedObservation<Profile, ProfileObserver> profile_observation_{this};
-#if BUILDFLAG(ENABLE_DESKTOP_ANDROID_EXTENSIONS)
+#if BUILDFLAG(ENABLE_DESKTOP_ANDROID_EXTENSIONS_CROMITE)
base::WeakPtrFactory<WebAuthFlow> weak_factory_{this};
#endif
};
diff --git a/chrome/browser/extensions/extension_management.cc b/chrome/browser/extensions/extension_management.cc
--- a/chrome/browser/extensions/extension_management.cc
+++ b/chrome/browser/extensions/extension_management.cc
@@ -63,7 +63,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
.../user_scripts/UserScriptsBridge.java | 212 +++++
.../user_scripts/UserScriptsPreferences.java | 122 +++
.../user_scripts/android/java_sources.gni | 18 +
.../android/user_scripts_bridge.cc | 173 ++++
.../android/user_scripts_bridge.cc | 174 ++++
.../android/user_scripts_bridge.h | 31 +
...Allow-playing-videos-in-background.user.js | 25 +
.../assets/Dont-track-me-Google.user.js | 826 ++++++++++++++++++
@@ -136,7 +136,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
.../strings/userscripts_strings.grdp | 54 ++
.../Experimental-user-scripts-support.inc | 13 +
tools/gritsettings/resource_ids.spec | 6 +
109 files changed, 10494 insertions(+), 3 deletions(-)
109 files changed, 10495 insertions(+), 3 deletions(-)
create mode 100644 components/user_scripts/README.md
create mode 100755 components/user_scripts/android/BUILD.gn
create mode 100644 components/user_scripts/android/java/res/layout/accept_script_item.xml
@@ -250,7 +250,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
"//components/variations:variations_java",
"//components/variations/android:variations_java",
"//components/viz/service:service_java",
@@ -1704,6 +1709,7 @@ if (_is_default_toolchain) {
@@ -1692,6 +1697,7 @@ if (_is_default_toolchain) {
java_group("chrome_public_non_pak_assets") {
deps = [
"//chrome/android/webapk/libs/runtime_library:runtime_library_assets",
@@ -2070,7 +2070,7 @@ new file mode 100644
+ }
+
+ @NativeMethods
+ interface Natives {
+ public interface Natives {
+ boolean isEnabled();
+ void setEnabled(boolean enabled);
+
@@ -2241,7 +2241,7 @@ diff --git a/components/user_scripts/android/user_scripts_bridge.cc b/components
new file mode 100644
--- /dev/null
+++ b/components/user_scripts/android/user_scripts_bridge.cc
@@ -0,0 +1,173 @@
@@ -0,0 +1,174 @@
+/*
+ This file is part of Bromite.
+
@@ -2281,7 +2281,6 @@ new file mode 100644
+using base::android::ConvertJavaStringToUTF8;
+using base::android::ConvertUTF16ToJavaString;
+using base::android::ConvertUTF8ToJavaString;
+using base::android::JavaParamRef;
+using base::android::JavaRef;
+using base::android::ScopedJavaGlobalRef;
+using base::android::ScopedJavaLocalRef;
@@ -2342,7 +2341,7 @@ new file mode 100644
+
+static void JNI_UserScriptsBridge_RemoveScript(
+ JNIEnv* env,
+ const JavaParamRef<jstring>& jscript_key) {
+ const JavaRef<jstring>& jscript_key) {
+ user_scripts::UserScriptsBrowserClient* client = GetUserScriptsBrowserClient();
+ if (client == NULL) return;
+
@@ -2352,7 +2351,7 @@ new file mode 100644
+
+static void JNI_UserScriptsBridge_SetScriptEnabled(
+ JNIEnv* env,
+ const JavaParamRef<jstring>& jscript_key,
+ const JavaRef<jstring>& jscript_key,
+ jboolean is_enabled) {
+ user_scripts::UserScriptsBrowserClient* client = GetUserScriptsBrowserClient();
+ if (client == NULL) return;
@@ -2372,7 +2371,7 @@ new file mode 100644
+
+static void JNI_UserScriptsBridge_SelectAndAddScriptFromFile(
+ JNIEnv* env,
+ const JavaParamRef<jobject>& jwindow_android) {
+ const JavaRef<jobject>& jwindow_android) {
+ user_scripts::UserScriptsBrowserClient* client = GetUserScriptsBrowserClient();
+ if (client == NULL) return;
+
@@ -2381,7 +2380,7 @@ new file mode 100644
+}
+
+static void JNI_UserScriptsBridge_TryToInstall(JNIEnv* env,
+ const JavaParamRef<jstring>& jscript_path) {
+ const JavaRef<jstring>& jscript_path) {
+ user_scripts::UserScriptsBrowserClient* client = GetUserScriptsBrowserClient();
+ if (client == NULL) return;
+
@@ -2414,6 +2413,8 @@ new file mode 100644
+ Java_UserScriptsBridge_onUserScriptLoaded(env, result, j_error);
+}
+
+DEFINE_JNI(UserScriptsBridge)
+
+}
diff --git a/components/user_scripts/android/user_scripts_bridge.h b/components/user_scripts/android/user_scripts_bridge.h
new file mode 100644
@@ -6004,11 +6005,11 @@ new file mode 100755
+
+bool IsStandardScheme(std::string_view scheme) {
+ // "*" gets the same treatment as a standard scheme.
+ if (scheme == "*")
+ if (scheme == "*") {
+ return true;
+ }
+
+ return url::IsStandard(scheme.data(),
+ url::Component(0, static_cast<int>(scheme.length())));
+ return url::IsStandard(scheme);
+}
+
+bool IsValidPortForScheme(std::string_view scheme, std::string_view port) {
+33 -11
View File
@@ -40,8 +40,8 @@ suit Cromite logic.
chrome/browser/ui/tab_helpers.cc | 3 +-
.../extensions/api/_permission_features.json | 14 -
.../common/extensions/api/adblock_private.idl | 8 +
.../adblock/android/adblock_controller_jni.cc | 79 +-
.../components/adblock/AdblockController.java | 51 +-
.../adblock/android/adblock_controller_jni.cc | 85 +-
.../components/adblock/AdblockController.java | 53 +-
components/adblock/content/browser/BUILD.gn | 24 +-
.../content/browser/adblock_blocking_page.cc | 183 +
.../content/browser/adblock_blocking_page.h | 75 +
@@ -131,7 +131,7 @@ suit Cromite logic.
.../renderer/core/exported/web_document.cc | 13 +-
.../blink/renderer/core/html/html_element.cc | 8 +-
.../definitions/adblock_private.d.ts | 14 +
126 files changed, 9342 insertions(+), 687 deletions(-)
126 files changed, 9347 insertions(+), 690 deletions(-)
rename chrome/browser/adblock/android/java/res/xml/{adblock_preferences.xml => eyeo_adblock_preferences.xml} (59%)
create mode 100644 chrome/browser/resources/settings/adblock_page/adblock_page.html
create mode 100644 chrome/browser/resources/settings/adblock_page/adblock_page.ts
@@ -1947,6 +1947,15 @@ diff --git a/components/adblock/android/adblock_controller_jni.cc b/components/a
#include "base/logging.h"
#include "components/adblock/android/jni_headers/AdblockController_jni.h"
#include "components/adblock/content/browser/factories/subscription_service_factory.h"
@@ -34,7 +36,7 @@
using base::android::CheckException;
using base::android::ConvertUTF8ToJavaString;
using base::android::GetClass;
-using base::android::JavaParamRef;
+using base::android::JavaRef;
using base::android::MethodID;
using base::android::ScopedJavaLocalRef;
using base::android::ToJavaArrayOfObjects;
@@ -48,6 +50,9 @@ ScopedJavaLocalRef<jobject> ToJava(JNIEnv* env,
const std::string& url,
const std::string& title,
@@ -1971,7 +1980,7 @@ diff --git a/components/adblock/android/adblock_controller_jni.cc b/components/a
std::vector<ScopedJavaLocalRef<jobject>> CSubscriptionsToJObjects(
JNIEnv* env,
+ const base::android::JavaParamRef<jobject>& jbrowser_context_handle,
+ const base::android::JavaRef<jobject>& jbrowser_context_handle,
const std::vector<scoped_refptr<adblock::Subscription>>& subscriptions) {
+ auto* subscription_service =
+ adblock::SubscriptionServiceFactory::GetForBrowserContext(
@@ -2013,13 +2022,13 @@ diff --git a/components/adblock/android/adblock_controller_jni.cc b/components/a
false));
}
}
@@ -104,6 +129,52 @@ std::vector<ScopedJavaLocalRef<jobject>> CSubscriptionsToJObjects(
@@ -104,10 +129,56 @@ std::vector<ScopedJavaLocalRef<jobject>> CSubscriptionsToJObjects(
} // namespace
+static void
+JNI_AdblockController_StartUpdate(JNIEnv* env,
+ const base::android::JavaParamRef<jobject>& jbrowser_context_handle) {
+ const base::android::JavaRef<jobject>& jbrowser_context_handle) {
+ auto* subscription_service =
+ adblock::SubscriptionServiceFactory::GetForBrowserContext(
+ content::BrowserContextFromJavaHandle(jbrowser_context_handle));
@@ -2028,7 +2037,7 @@ diff --git a/components/adblock/android/adblock_controller_jni.cc b/components/a
+
+static base::android::ScopedJavaLocalRef<jobjectArray>
+JNI_AdblockController_GetCustomSubscriptions(JNIEnv* env,
+ const base::android::JavaParamRef<jobject>& jbrowser_context_handle) {
+ const base::android::JavaRef<jobject>& jbrowser_context_handle) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+ auto* subscription_service =
+ adblock::SubscriptionServiceFactory::GetForBrowserContext(
@@ -2046,7 +2055,7 @@ diff --git a/components/adblock/android/adblock_controller_jni.cc b/components/a
+
+static jboolean JNI_AdblockController_IsPrivilegedFiltersEnabled(
+ JNIEnv* env,
+ const base::android::JavaParamRef<jobject>& jbrowser_context_handle) {
+ const base::android::JavaRef<jobject>& jbrowser_context_handle) {
+ auto* subscription_service =
+ adblock::SubscriptionServiceFactory::GetForBrowserContext(
+ content::BrowserContextFromJavaHandle(jbrowser_context_handle));
@@ -2055,7 +2064,7 @@ diff --git a/components/adblock/android/adblock_controller_jni.cc b/components/a
+
+static void JNI_AdblockController_SetPrivilegedFiltersEnabled(
+ JNIEnv* env,
+ const base::android::JavaParamRef<jobject>& jbrowser_context_handle,
+ const base::android::JavaRef<jobject>& jbrowser_context_handle,
+ jboolean j_enabled) {
+ auto* subscription_service =
+ adblock::SubscriptionServiceFactory::GetForBrowserContext(
@@ -2066,6 +2075,11 @@ diff --git a/components/adblock/android/adblock_controller_jni.cc b/components/a
static base::android::ScopedJavaLocalRef<jobjectArray>
JNI_AdblockController_GetInstalledSubscriptions(
JNIEnv* env,
- const base::android::JavaParamRef<jobject>& jbrowser_context_handle) {
+ const base::android::JavaRef<jobject>& jbrowser_context_handle) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
auto* subscription_service =
adblock::SubscriptionServiceFactory::GetForBrowserContext(
@@ -119,7 +190,7 @@ JNI_AdblockController_GetInstalledSubscriptions(
return ToJavaArrayOfObjects(
@@ -2075,6 +2089,12 @@ diff --git a/components/adblock/android/adblock_controller_jni.cc b/components/a
subscription_service->GetFilteringConfiguration(
adblock::kAdblockFilteringConfigurationName))));
}
@@ -131,3 +202,5 @@ JNI_AdblockController_GetRecommendedSubscriptions(JNIEnv* env) {
auto list = adblock::config::GetKnownSubscriptions();
return ToJavaArrayOfObjects(env, CSubscriptionsToJObjects(env, list));
}
+
+DEFINE_JNI(AdblockController)
diff --git a/components/adblock/android/java/src/org/chromium/components/adblock/AdblockController.java b/components/adblock/android/java/src/org/chromium/components/adblock/AdblockController.java
--- a/components/adblock/android/java/src/org/chromium/components/adblock/AdblockController.java
+++ b/components/adblock/android/java/src/org/chromium/components/adblock/AdblockController.java
@@ -2167,10 +2187,12 @@ diff --git a/components/adblock/android/java/src/org/chromium/components/adblock
@UiThread
public List<Subscription> getInstalledSubscriptions() {
return (List<Subscription>)
@@ -276,6 +321,10 @@ public class AdblockController {
@@ -275,7 +320,11 @@ public class AdblockController {
}
@NativeMethods
interface Natives {
- interface Natives {
+ public interface Natives {
+ void startUpdate(BrowserContextHandle contextHandle);
+ boolean isPrivilegedFiltersEnabled(BrowserContextHandle contextHandle);
+ void setPrivilegedFiltersEnabled(BrowserContextHandle contextHandle, boolean enabled);
@@ -24,7 +24,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
.../layout/preference_spinner_single_line.xml | 7 +++
.../settings/SpinnerPreference.java | 7 +++
...istory-number-of-days-privacy-setting.grdp | 18 ++++++
.../core/browser/browsing_history_service.cc | 2 +-
.../core/browser/browsing_history_service.cc | 4 +-
.../core/browser/expire_history_backend.cc | 13 +++-
.../core/browser/expire_history_backend.h | 2 +
.../history/core/browser/history_backend.cc | 17 +++++
@@ -35,7 +35,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
components/history/core/common/pref_names.h | 1 +
components/history_embeddings/sql_database.cc | 2 +-
.../omnibox/browser/shortcuts_backend.cc | 4 +-
25 files changed, 263 insertions(+), 15 deletions(-)
25 files changed, 264 insertions(+), 16 deletions(-)
create mode 100644 components/cromite_components_strings_grd/History-number-of-days-privacy-setting.grdp
diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/android/java/res/xml/privacy_preferences.xml
@@ -425,6 +425,15 @@ new file mode 100644
diff --git a/components/history/core/browser/browsing_history_service.cc b/components/history/core/browser/browsing_history_service.cc
--- a/components/history/core/browser/browsing_history_service.cc
+++ b/components/history/core/browser/browsing_history_service.cc
@@ -682,7 +682,7 @@ void BrowsingHistoryService::QueryComplete(
// Exhausted the local results; continue querying to get remote results.
// Start querying at the point where local history ends.
base::Time expiry_treshold =
- clock_->Now() - base::Days(HistoryBackend::kExpireDaysThreshold);
+ clock_->Now() - base::Days(90); // no matter
if (state->remote_end_time_for_continuation.is_null()) {
state->remote_end_time_for_continuation = base::Time::Max();
}
@@ -758,7 +758,7 @@ void BrowsingHistoryService::RecordResultsMetrics(
// Count the number of local, remote, and combined entries, each split by
// entries before vs after the local expiry threshold (90 days).
@@ -17,8 +17,8 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
cc/base/features.h | 2 +
cc/input/browser_controls_offset_manager.cc | 6 +
cc/trees/layer_tree_host_impl.cc | 3 +
.../tab_management/TabGroupUiCoordinator.java | 7 +-
.../tab_management/TabGroupUiMediator.java | 51 +++++-
.../tab_management/TabGroupUiCoordinator.java | 8 +-
.../tab_management/TabGroupUiMediator.java | 52 +++++-
.../tab_management/TabGroupUiProperties.java | 5 +
.../tab_management/TabGroupUiToolbarView.java | 17 ++
.../tab_management/TabGroupUiViewBinder.java | 3 +
@@ -29,7 +29,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
.../browser/feed/FeedSurfaceCoordinator.java | 4 +
.../java/res/layout/search_activity.xml | 1 -
.../android/java/res/xml/main_preferences.xml | 3 +-
.../chrome/browser/ChromeTabbedActivity.java | 1 +
.../chrome/browser/ChromeTabbedActivity.java | 3 +-
.../ChromeAccessibilitySettingsDelegate.java | 70 +++++++++
.../HeadlessBrowserControlsStateProvider.java | 5 +
.../compositor/CompositorViewHolder.java | 7 +
@@ -104,7 +104,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
.../render_widget_host_view_android.cc | 3 +
.../Move-navigation-bar-to-bottom.inc | 17 ++
.../renderer/core/frame/viewport_data.cc | 1 +
91 files changed, 1061 insertions(+), 87 deletions(-)
91 files changed, 1064 insertions(+), 88 deletions(-)
create mode 100644 chrome/browser/hub/internal/android/java/src/org/chromium/chrome/browser/hub/ReversedLinearLayout.java
create mode 100644 cromite_flags/chrome/browser/about_flags_cc/Move-navigation-bar-to-bottom.inc
@@ -177,7 +177,15 @@ diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiCoordinator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiCoordinator.java
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiCoordinator.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiCoordinator.java
@@ -61,6 +61,7 @@ import org.chromium.components.sensitive_content.SensitiveContentFeatures;
@@ -26,6 +26,7 @@ import org.chromium.base.supplier.ObservableSupplier;
import org.chromium.base.supplier.ObservableSupplierImpl;
import org.chromium.base.supplier.ObservableSuppliers;
import org.chromium.base.supplier.OneshotSupplier;
+import org.chromium.base.supplier.NullableObservableSupplier;
import org.chromium.base.supplier.SettableNonNullObservableSupplier;
import org.chromium.base.supplier.SettableNullableObservableSupplier;
import org.chromium.build.annotations.Initializer;
@@ -61,6 +62,7 @@ import org.chromium.components.sensitive_content.SensitiveContentFeatures;
import org.chromium.ui.modaldialog.ModalDialogManager;
import org.chromium.ui.modelutil.PropertyModel;
import org.chromium.ui.modelutil.PropertyModelChangeProcessor;
@@ -185,17 +193,17 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser
import java.util.List;
import java.util.function.Supplier;
@@ -198,7 +199,8 @@ public class TabGroupUiCoordinator implements TabGroupUiMediator.ResetHandler, T
@@ -198,7 +200,8 @@ public class TabGroupUiCoordinator implements TabGroupUiMediator.ResetHandler, T
@Initializer
public void initializeWithNative(
BottomControlsCoordinator.BottomControlsVisibilityController visibilityController,
- Callback<Object> onSnapshotTokenChange) {
+ Callback<Object> onSnapshotTokenChange,
+ TopUiThemeColorProvider topUiThemeColorProvider, ObservableSupplier<Tab> tabSupplier) {
+ TopUiThemeColorProvider topUiThemeColorProvider, NullableObservableSupplier<Tab> tabSupplier) {
ObservableSupplierImpl<Object> tabStripTokenSupplier = new ObservableSupplierImpl<>();
var currentTabGroupModelFilterSupplier =
@@ -294,7 +296,8 @@ public class TabGroupUiCoordinator implements TabGroupUiMediator.ResetHandler, T
@@ -294,7 +297,8 @@ public class TabGroupUiCoordinator implements TabGroupUiMediator.ResetHandler, T
sharedImageTilesConfigBuilder,
mThemeColorProvider,
onSnapshotTokenChange,
@@ -208,7 +216,15 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser
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
@@ -79,6 +79,12 @@ import java.util.List;
@@ -25,6 +25,7 @@ import org.chromium.base.Token;
import org.chromium.base.metrics.RecordHistogram;
import org.chromium.base.metrics.RecordUserAction;
import org.chromium.base.supplier.LazyOneshotSupplier;
+import org.chromium.base.supplier.NullableObservableSupplier;
import org.chromium.base.supplier.NonNullObservableSupplier;
import org.chromium.base.supplier.ObservableSupplier;
import org.chromium.base.supplier.ObservableSupplierImpl;
@@ -79,6 +80,12 @@ import java.util.List;
import java.util.Objects;
import java.util.function.Supplier;
@@ -221,7 +237,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser
/** A mediator for the TabGroupUi. Responsible for managing the internal state of the component. */
@NullMarked
public class TabGroupUiMediator implements BackPressHandler {
@@ -154,6 +160,11 @@ public class TabGroupUiMediator implements BackPressHandler {
@@ -154,6 +161,11 @@ public class TabGroupUiMediator implements BackPressHandler {
private final Callback<Object> mOnSnapshotTokenChange;
private final ObservableSupplier<Object> mChildTokenSupplier;
@@ -233,18 +249,18 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser
// These should only be used when regular (non-incognito) tabs are set in the model.
private final @Nullable SharedImageTilesCoordinator mSharedImageTilesCoordinator;
private final SharedImageTilesConfig.@Nullable Builder mSharedImageTilesConfigBuilder;
@@ -184,7 +195,9 @@ public class TabGroupUiMediator implements BackPressHandler {
@@ -184,7 +196,9 @@ public class TabGroupUiMediator implements BackPressHandler {
SharedImageTilesConfig.@Nullable Builder sharedImageTilesConfigBuilder,
ThemeColorProvider themeColorProvider,
Callback<Object> onSnapshotTokenChange,
- ObservableSupplierImpl<Object> childTokenSupplier) {
+ ObservableSupplierImpl<Object> childTokenSupplier,
+ TopUiThemeColorProvider topUiThemeColorProvider, ObservableSupplier<Tab> tabSupplier) {
+ TopUiThemeColorProvider topUiThemeColorProvider, NullableObservableSupplier<Tab> tabSupplier) {
+ mTopUiThemeColorProvider = topUiThemeColorProvider;
mResetHandler = resetHandler;
mModel = model;
mTabModelSelector = tabModelSelector;
@@ -238,11 +251,30 @@ public class TabGroupUiMediator implements BackPressHandler {
@@ -238,11 +252,30 @@ public class TabGroupUiMediator implements BackPressHandler {
mIsShowingHub = true;
}
@@ -275,7 +291,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser
resetTabStrip();
}
@@ -264,6 +296,8 @@ public class TabGroupUiMediator implements BackPressHandler {
@@ -264,6 +297,8 @@ public class TabGroupUiMediator implements BackPressHandler {
@Override
public void restoreCompleted() {
resetTabStrip();
@@ -284,7 +300,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser
}
@Override
@@ -361,6 +395,8 @@ public class TabGroupUiMediator implements BackPressHandler {
@@ -361,6 +396,8 @@ public class TabGroupUiMediator implements BackPressHandler {
mModel.set(TabGroupUiProperties.WIDTH_PX_CALLBACK, mWidthPxSupplier::set);
resetTabStrip();
@@ -293,7 +309,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser
mHandleBackPressChangedSupplier = handleBackPressChangedSupplier;
if (mTabGridDialogControllerSupplier != null) {
mTabGridDialogControllerSupplier.onAvailable(
@@ -393,6 +429,18 @@ public class TabGroupUiMediator implements BackPressHandler {
@@ -393,6 +430,18 @@ public class TabGroupUiMediator implements BackPressHandler {
mModel.set(TINT, mThemeColorProvider.getTint());
}
@@ -312,7 +328,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser
private void setupToolbarButtons() {
View.OnClickListener showGroupDialogOnClickListener =
view -> {
@@ -584,6 +632,7 @@ public class TabGroupUiMediator implements BackPressHandler {
@@ -584,6 +633,7 @@ public class TabGroupUiMediator implements BackPressHandler {
@SuppressWarnings("NullAway")
public void destroy() {
@@ -758,14 +774,16 @@ diff --git a/chrome/android/java/res/xml/main_preferences.xml b/chrome/android/j
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
@@ -1067,6 +1067,7 @@ public class ChromeTabbedActivity extends ChromeActivity implements PreAttachInt
@@ -1067,7 +1067,8 @@ public class ChromeTabbedActivity extends ChromeActivity implements PreAttachInt
mRootUiCoordinator.getBottomSheetController(),
mRootUiCoordinator.getShareDelegateSupplier(),
mXrSceneCoreSessionManagerSupplier.get(),
+ /*browserControlsManagerSupplier*/ () -> getBrowserControlsManager(),
mBackPressManager);
- mBackPressManager);
+ mBackPressManager,
+ /*browserControlsManagerSupplier*/ () -> getBrowserControlsManager());
mLayoutStateProviderSupplier.set(mLayoutManager);
}
}
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
@@ -1714,7 +1732,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar
return readAloud != null && readAloud.isRestoringPlayer();
- });
+ },
+ mTopUiThemeColorProvider, mActivityTabProvider);
+ mTopUiThemeColorProvider, mActivityTabProvider.asObservable());
if (mInitializedWithNative) {
bottomControlsCoordinator.initializeWithNative();
}
@@ -2737,7 +2755,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow
+import android.app.Activity;
+
+import org.chromium.base.supplier.ObservableSupplier;
+import org.chromium.base.supplier.NullableObservableSupplier;
+import org.chromium.chrome.browser.theme.TopUiThemeColorProvider;
+import org.chromium.chrome.browser.tab.CurrentTabObserver;
+import org.chromium.chrome.browser.tab.Tab;
@@ -2756,7 +2774,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow
BottomControlsCoordinator.BottomControlsVisibilityController visibilityController,
- Callback<Object> onModelTokenChange);
+ Callback<Object> onModelTokenChange,
+ TopUiThemeColorProvider topUiThemeColorProvider, ObservableSupplier<Tab> tabSupplier);
+ TopUiThemeColorProvider topUiThemeColorProvider, NullableObservableSupplier<Tab> tabSupplier);
/** Destroy the delegate. */
void destroy();
@@ -2788,7 +2806,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow
- Supplier<Boolean> readAloudRestoringSupplier) {
+ Supplier<Boolean> readAloudRestoringSupplier,
+ TopUiThemeColorProvider topUiThemeColorProvider,
+ ObservableSupplier<Tab> tabSupplier) {
+ NullableObservableSupplier<Tab> tabSupplier) {
mRootFrameLayout = root;
root.setConstraintsSupplier(constraintsSupplier);
PropertyModel model = new PropertyModel(BottomControlsProperties.ALL_KEYS);
@@ -2798,7 +2816,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow
},
- root::onModelTokenChange);
+ root::onModelTokenChange,
+ topUiThemeColorProvider, tabSupplier);
+ topUiThemeColorProvider, tabSupplier);
mContentDelegateWrapper.set(contentDelegate);
},
mContentDelegateSupplier,
@@ -265,7 +265,7 @@ new file mode 100644
--- /dev/null
+++ b/cromite_flags/content/public/common/content_features_cc/Partitioning-all-cookies-by-top-frame-domain.inc
@@ -0,0 +1 @@
+SET_CROMITE_FEATURE_DISABLED(kCookieDeprecationFacilitatedTesting);
+// empty file
diff --git a/cromite_flags/net/base/features_cc/Partitioning-all-cookies-by-top-frame-domain.inc b/cromite_flags/net/base/features_cc/Partitioning-all-cookies-by-top-frame-domain.inc
new file mode 100644
--- /dev/null
@@ -12,9 +12,10 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
.../insecure_private_network.grdp | 18 ++++
.../insecure_private_network.inc | 25 +++++
.../INSECURE_PRIVATE_NETWORK.inc | 3 +
.../private_network_access_util.cc | 6 +-
...rivate-network-access-content-settings.inc | 2 +
services/network/public/cpp/features.cc | 2 +-
7 files changed, 175 insertions(+), 4 deletions(-)
8 files changed, 178 insertions(+), 7 deletions(-)
create mode 100644 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromiteInsecurePrivateNetworkContentSetting.java
create mode 100644 components/browser_ui/strings/bromite_content_settings/insecure_private_network.grdp
create mode 100644 components/content_settings/core/browser/bromite_content_settings/insecure_private_network.inc
@@ -236,6 +237,34 @@ new file mode 100644
+ // Stores whether to allow insecure websites to make private network requests.
+ // See also: https://wicg.github.io/cors-rfc1918
+ INSECURE_PRIVATE_NETWORK,
diff --git a/content/browser/renderer_host/private_network_access_util.cc b/content/browser/renderer_host/private_network_access_util.cc
--- a/content/browser/renderer_host/private_network_access_util.cc
+++ b/content/browser/renderer_host/private_network_access_util.cc
@@ -121,13 +121,13 @@ Policy DerivePolicyForNonSecureContext(
// Requests from the `unknown` address space are controlled separately
// because it is unclear why they happen in the first place. The goal is
// to reduce instances of this happening before enabling this feature.
- return Policy::kAllow;
+ return Policy::kWarn;
case AddressSpace::kLocal:
// Requests from the non secure contexts in the `local` address space
// to localhost are blocked only if the right feature is enabled.
// This is controlled separately because private network websites face
// additional hurdles compared to public websites. See crbug.com/1234044.
- return Policy::kWarn;
+ return Policy::kBlock;
case AddressSpace::kPublic:
case AddressSpace::kLoopback:
// Private network requests from non secure contexts are blocked if the
@@ -137,7 +137,7 @@ Policy DerivePolicyForNonSecureContext(
// has no effect. Indeed, requests initiated from the local address space
// are never considered private network requests - they cannot target
// more-private address spaces.
- return Policy::kWarn;
+ return Policy::kBlock;
}
}
diff --git a/cromite_flags/services/network/public/cpp/features_cc/Private-network-access-content-settings.inc b/cromite_flags/services/network/public/cpp/features_cc/Private-network-access-content-settings.inc
new file mode 100644
--- /dev/null
@@ -26,7 +26,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
...em_webview_bundle.AndroidManifest.expected | 5 -
build/config/android/config.gni | 4 +-
chrome/android/BUILD.gn | 30 +-
chrome/android/BUILD.gn | 18 -
chrome/android/chrome_java_sources.gni | 4 -
chrome/android/java/AndroidManifest.xml | 33 -
.../browser/PlayServicesVersionInfo.java | 12 +-
@@ -111,7 +111,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
.../gms/ChromiumPlayServicesAvailability.java | 17 +-
third_party/androidx/customizations.gni | 14 +-
third_party/cardboard/BUILD.gn | 4 -
87 files changed, 146 insertions(+), 2720 deletions(-)
87 files changed, 134 insertions(+), 2720 deletions(-)
create mode 100644 components/webauthn/android/java/src/org/chromium/components/webauthn/ConditionalUiState.java
diff --git a/android_webview/expectations/system_webview_bundle.AndroidManifest.expected b/android_webview/expectations/system_webview_bundle.AndroidManifest.expected
@@ -168,22 +168,9 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
"//base:content_uri_utils_java",
"//base:flagged_apis_java",
"//base:process_launcher_java",
@@ -741,13 +733,22 @@ if (_is_default_toolchain) {
"//services/shape_detection:shape_detection_java",
@@ -742,12 +734,9 @@ if (_is_default_toolchain) {
"//services/shape_detection/public/mojom:mojom_java",
"//skia/public/mojom:mojom_java",
+ # added for Bromite in place of binary blobs
+ check if useful # "//third_party/androidx:androidx_annotation_annotation_java",
+ # "//third_party/android_deps:com_airbnb_android_lottie_java",
+ # "//third_party/androidx:androidx_lifecycle_lifecycle_common_java",
+ # "//third_party/androidx:androidx_appcompat_appcompat_java",
+ # "//third_party/androidx:androidx_fragment_fragment_java",
+ # "//third_party/androidx:androidx_core_core_java",
+ # "//third_party/androidx:androidx_media_media_java",
+ # "//third_party/androidx:androidx_recyclerview_recyclerview_java",
+ # "//third_party/androidx:androidx_vectordrawable_vectordrawable_java",
+ # "//base:base_java",
+ # "//third_party/jni_zero:jni_zero_java",
"//third_party/android_deps:chromium_play_services_availability_java",
- "//third_party/android_deps:com_airbnb_android_lottie_java",
- "//third_party/android_deps:com_google_code_findbugs_jsr305_java",
@@ -194,7 +181,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
"//third_party/android_deps:protobuf_lite_runtime_java",
"//third_party/android_media:android_media_java",
"//third_party/android_swipe_refresh:android_swipe_refresh_java",
@@ -1903,7 +1904,6 @@ if (_is_default_toolchain) {
@@ -1903,7 +1892,6 @@ if (_is_default_toolchain) {
]
deps = [
":chrome_java",
@@ -202,7 +189,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
"//base:base_java",
"//base:base_java_test_support",
"//build/android:build_java",
@@ -2009,7 +2009,6 @@ if (_is_default_toolchain) {
@@ -2009,7 +1997,6 @@ if (_is_default_toolchain) {
"java/src/org/chromium/chrome/browser/base/SplitCompatBackupAgent.java",
"java/src/org/chromium/chrome/browser/base/SplitCompatContentProvider.java",
"java/src/org/chromium/chrome/browser/base/SplitCompatCustomTabsService.java",
@@ -210,7 +197,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
"java/src/org/chromium/chrome/browser/base/SplitCompatIntentService.java",
"java/src/org/chromium/chrome/browser/base/SplitCompatJobService.java",
"java/src/org/chromium/chrome/browser/base/SplitCompatMinidumpUploadJobService.java",
@@ -2037,14 +2036,10 @@ if (_is_default_toolchain) {
@@ -2037,14 +2024,10 @@ if (_is_default_toolchain) {
"java/src/org/chromium/chrome/browser/photo_picker/DecoderService.java",
"java/src/org/chromium/chrome/browser/provider/ChromeBrowserProvider.java",
"java/src/org/chromium/chrome/browser/provider/PageContentProvider.java",
@@ -225,7 +212,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
"//base:base_java",
"//chrome/browser/autofill/android:third_party_provider_java",
"//chrome/browser/download/android:file_provider_java",
@@ -2063,7 +2058,6 @@ if (_is_default_toolchain) {
@@ -2063,7 +2046,6 @@ if (_is_default_toolchain) {
"//components/module_installer/android:module_installer_java",
"//components/policy/android:policy_java",
"//components/variations/android:variations_java",
@@ -661,7 +648,7 @@ diff --git a/chrome/browser/password_manager/android/java/src/org/chromium/chrom
import org.jni_zero.JniType;
import org.jni_zero.NativeMethods;
@@ -489,13 +487,6 @@ public class PasswordManagerHelper {
@@ -490,13 +488,6 @@ public class PasswordManagerHelper {
// If the exception is not a Chrome-defined one, it means that the call failed at the
// API call level. It could have either failed with a known ApiException or because of a
// different error (e.g. a different exception thrown by the implementation of the API).
@@ -515,7 +515,7 @@ new file mode 100644
+ android:gravity="center"
+ android:layout_gravity="center"
+ android:drawablePadding="8dp"
+ android:drawableStart="@drawable/btn_star_filled"
+ android:drawableStart="@drawable/ic_star_filled_24dp"
+ android:text="@string/menu_bookmarks"
+ android:textAppearance="@style/TextAppearance.TextSmall.Secondary"
+ app:drawableHeight="20sp"
@@ -9,7 +9,6 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
.../ReaderModeToolbarButtonController.java | 4 ++--
.../ContextualPageActionController.java | 4 ++++
.../chrome/browser/settings/MainSettings.java | 2 +-
.../segmentation_platform_config.cc | 1 +
.../strings/android_chrome_strings.grd | 3 +++
...tton_group_adaptive_toolbar_preference.xml | 9 +++++++++
@@ -20,7 +19,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
.../adaptive/AdaptiveToolbarStats.java | 2 ++
...oButtonGroupAdaptiveToolbarPreference.java | 19 ++++++++++++-------
...ve-button-in-top-toolbar-customization.inc | 1 +
13 files changed, 43 insertions(+), 14 deletions(-)
12 files changed, 42 insertions(+), 13 deletions(-)
create mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/Restore-adaptive-button-in-top-toolbar-customization.inc
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/ReaderModeToolbarButtonController.java b/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/ReaderModeToolbarButtonController.java
@@ -54,18 +53,6 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/segmentation_pl
showDynamicAction(result);
});
}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java
@@ -343,7 +343,7 @@ public class MainSettings extends ChromeBaseSettingsFragment
getContext(),
getProfile(),
(shouldShow) -> {
- if (!shouldShow) removePreferenceIfPresent(PREF_TOOLBAR_SHORTCUT);
+ if (!shouldShow) removePreferenceIfPresent(PREF_TOOLBAR_SHORTCUT); <-- check if needed
});
// LINT.IfChange(InitPrefUiTheme)
diff --git a/chrome/browser/segmentation_platform/segmentation_platform_config.cc b/chrome/browser/segmentation_platform/segmentation_platform_config.cc
--- a/chrome/browser/segmentation_platform/segmentation_platform_config.cc
+++ b/chrome/browser/segmentation_platform/segmentation_platform_config.cc
@@ -19,7 +19,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
.../android/java/res/xml/main_preferences.xml | 3 +-
.../AutofillPaymentMethodsFragment.java | 1 +
.../settings/AutofillProfilesFragment.java | 1 +
.../settings/PasswordSettings.java | 697 ++++++++++++++++++
.../settings/PasswordSettings.java | 709 ++++++++++++++++++
.../settings/FragmentDependencyProvider.java | 5 +
.../chrome/browser/settings/MainSettings.java | 15 -
.../settings/SettingsNavigationImpl.java | 4 +
@@ -43,12 +43,12 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
.../CredentialEditFragmentView.java | 226 ++++++
.../CredentialEntryFragmentViewBase.java | 135 ++++
.../browser/password_manager/android/BUILD.gn | 23 +
.../PasswordManagerHelper.java | 19 +-
.../PasswordManagerHelper.java | 22 +-
.../PasswordManagerUtilBridge.java | 3 +-
.../settings/CallbackDelayer.java | 18 +
.../settings/DialogManager.java | 168 +++++
.../settings/ExportErrorDialogFragment.java | 110 +++
.../password_manager/settings/ExportFlow.java | 583 +++++++++++++++
.../password_manager/settings/ExportFlow.java | 583 ++++++++++++++
.../settings/ExportFlowInterface.java | 90 +++
.../settings/NonCancelableProgressBar.java | 55 ++
.../PasswordAccessReauthenticationHelper.java | 143 ++++
@@ -60,17 +60,17 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
.../settings/PasswordsPreference.java | 1 +
.../settings/ProgressBarDialogFragment.java | 70 ++
.../settings/ReauthenticationManager.java | 198 +++++
.../settings/SavedPasswordEntry.java | 41 ++
.../settings/SavedPasswordEntry.java | 41 +
.../settings/SingleThreadBarrierClosure.java | 49 ++
.../settings/TimedCallbackDelayer.java | 33 +
.../android/password_manager_android_util.cc | 1 +
.../android/password_ui_view_android.cc | 449 +++++++++++
.../android/password_ui_view_android.cc | 450 +++++++++++
.../android/password_ui_view_android.h | 196 +++++
.../android/pwm_disabled/BUILD.gn | 2 -
.../password_store_backend_factory.cc | 14 +-
...ssword_manager_settings_service_factory.cc | 4 +-
chrome/browser/prefs/browser_prefs.cc | 7 -
.../strings/android_chrome_strings.grd | 123 +++-
.../strings/android_chrome_strings.grd | 123 ++-
.../Import-Password-Android.grdp | 9 +
.../autofill/core/common/autofill_features.cc | 1 +
.../settings/SettingsNavigation.java | 3 +
@@ -87,7 +87,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
.../core/common/password_manager_pref_names.h | 2 -
components/sync/service/sync_prefs.cc | 2 +-
.../Restore-chrome-password-store.inc | 1 +
79 files changed, 5539 insertions(+), 78 deletions(-)
79 files changed, 5554 insertions(+), 79 deletions(-)
create mode 100644 chrome/android/java/res/layout/password_no_result.xml
create mode 100644 chrome/android/java/res/menu/save_password_preferences_action_bar_menu.xml
create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java
@@ -266,14 +266,14 @@ new file mode 100644
+
+ <item
+ android:id="@+id/menu_id_search"
+ android:icon="@drawable/ic_search"
+ android:icon="@drawable/ic_search_24dp"
+ android:title="@string/search"
+ app:showAsAction="always"
+ app:actionViewClass="androidx.appcompat.widget.SearchView" />
+
+ <item
+ android:id="@id/menu_id_targeted_help"
+ android:icon="@drawable/ic_help_and_feedback"
+ android:icon="@drawable/ic_help_24dp"
+ android:title="@string/menu_help"
+ android:visibility="gone"
+ app:showAsAction="ifRoom"/>
@@ -345,7 +345,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manage
new file mode 100644
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java
@@ -0,0 +1,697 @@
@@ -0,0 +1,709 @@
+// Copyright 2014 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
@@ -353,6 +353,7 @@ new file mode 100644
+package org.chromium.chrome.browser.password_manager.settings;
+
+import static org.chromium.chrome.browser.password_manager.PasswordMetricsUtil.PASSWORD_SETTINGS_EXPORT_METRICS_ID;
+import static org.chromium.build.NullUtil.assumeNonNull;
+
+import android.app.Activity;
+import android.content.Context;
@@ -377,6 +378,7 @@ new file mode 100644
+import org.chromium.base.supplier.ObservableSupplier;
+import org.chromium.base.supplier.ObservableSupplierImpl;
+import org.chromium.build.annotations.Nullable;
+import org.chromium.build.annotations.MonotonicNonNull;
+import org.chromium.chrome.R;
+import org.chromium.chrome.browser.password_manager.ManagePasswordsReferrer;
+import org.chromium.chrome.browser.password_manager.PasswordManagerHelper;
@@ -389,6 +391,7 @@ new file mode 100644
+import org.chromium.components.browser_ui.settings.ChromeBasePreference;
+import org.chromium.components.browser_ui.settings.ChromeSwitchPreference;
+import org.chromium.components.browser_ui.settings.SearchUtils;
+import org.chromium.components.browser_ui.settings.SearchViewProvider;
+import org.chromium.components.browser_ui.settings.TextMessagePreference;
+import org.chromium.components.browser_ui.styles.SemanticColorUtils;
+import org.chromium.components.prefs.PrefService;
@@ -411,7 +414,7 @@ new file mode 100644
+ */
+public class PasswordSettings extends ChromeBaseSettingsFragment
+ implements PasswordListObserver,
+ Preference.OnPreferenceClickListener,
+ Preference.OnPreferenceClickListener, SearchViewProvider,
+ SyncService.SyncStateChangedListener {
+ @IntDef({
+ TrustedVaultBannerState.NOT_SHOWN,
@@ -480,6 +483,7 @@ new file mode 100644
+ private final ExportFlow mExportFlow = new ExportFlow();
+ private ActivityWindowAndroid mWindowAndroid;
+ private IntentRequestTracker mIntentRequestTracker;
+ private @MonotonicNonNull SearchViewProvider.Observer mSearchViewObserver;
+
+ @Override
+ public void onCreatePreferences(@Nullable Bundle savedInstanceState, @Nullable String rootKey) {
@@ -562,6 +566,11 @@ new file mode 100644
+ }
+
+ @Override
+ public void setSearchViewObserver(SearchViewProvider.Observer observer) {
+ mSearchViewObserver = observer;
+ }
+
+ @Override
+ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+ menu.clear();
+ mMenu = menu;
@@ -573,7 +582,8 @@ new file mode 100644
+ mHelpItem = menu.findItem(R.id.menu_id_targeted_help);
+ mHelpItem.setVisible(false);
+ SearchUtils.initializeSearchView(
+ mSearchItem, mSearchQuery, getActivity(), this::filterPasswords);
+ mSearchItem, mSearchQuery, getActivity(),
+ assumeNonNull(mSearchViewObserver), this::filterPasswords);
+ }
+
+ @Override
@@ -842,6 +852,8 @@ new file mode 100644
+ public void onDestroy() {
+ super.onDestroy();
+
+ if (mSearchViewObserver != null) mSearchViewObserver.onUpdated(false);
+
+ if (SyncServiceFactory.getForProfile(getProfile()) != null) {
+ SyncServiceFactory.getForProfile(getProfile()).removeSyncStateChangedListener(this);
+ }
@@ -2562,7 +2574,7 @@ new file mode 100644
+
+ <item
+ android:id="@+id/help_button"
+ android:icon="@drawable/ic_help_and_feedback"
+ android:icon="@drawable/ic_help_24dp"
+ app:iconTint="@macro/default_icon_color"
+ android:title="@string/menu_help"
+ android:visibility="gone"
@@ -3015,6 +3027,15 @@ diff --git a/chrome/browser/password_manager/android/java/src/org/chromium/chrom
import org.chromium.components.browser_ui.settings.SettingsCustomTabLauncher;
import org.chromium.components.sync.SyncService;
import org.chromium.ui.modaldialog.ModalDialogManager;
@@ -134,7 +135,7 @@ public class PasswordManagerHelper {
context, modalDialogManagerSupplier.get(), settingsCustomTabLauncher)) {
LoadingModalDialogCoordinator loadingDialogCoordinator =
LoadingModalDialogCoordinator.create(modalDialogManagerSupplier, context);
- launchTheCredentialManager(referrer, syncService, loadingDialogCoordinator, account);
+ launchTheCredentialManager(context, referrer, syncService, loadingDialogCoordinator, account);
}
}
@@ -163,6 +164,7 @@ public class PasswordManagerHelper {
Context context,
ModalDialogManager modalDialogManager,
@@ -3040,7 +3061,12 @@ diff --git a/chrome/browser/password_manager/android/java/src/org/chromium/chrom
return false;
}
@@ -400,6 +392,11 @@ public class PasswordManagerHelper {
@@ -396,10 +388,16 @@ public class PasswordManagerHelper {
@VisibleForTesting
void launchTheCredentialManager(
+ Context context,
@ManagePasswordsReferrer int referrer,
@Nullable SyncService syncService,
LoadingModalDialogCoordinator loadingDialogCoordinator,
@Nullable String account) {
@@ -5326,7 +5352,7 @@ diff --git a/chrome/browser/password_manager/android/password_ui_view_android.cc
new file mode 100644
--- /dev/null
+++ b/chrome/browser/password_manager/android/password_ui_view_android.cc
@@ -0,0 +1,449 @@
@@ -0,0 +1,450 @@
+// Copyright 2013 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
@@ -5379,7 +5405,6 @@ new file mode 100644
+
+namespace {
+
+using base::android::JavaParamRef;
+using base::android::JavaRef;
+using base::android::ScopedJavaLocalRef;
+using IsInsecureCredential = CredentialEditBridge::IsInsecureCredential;
@@ -5596,7 +5621,7 @@ new file mode 100644
+ JNIEnv* env,
+ const base::android::JavaRef<jobject>& context,
+ int index,
+ const JavaParamRef<jobject>& obj) {
+ const JavaRef<jobject>& obj) {
+ if (static_cast<size_t>(index) >= passwords_.size() ||
+ credential_edit_bridge_) {
+ return;
@@ -5618,7 +5643,7 @@ new file mode 100644
+ JNIEnv* env,
+ const base::android::JavaRef<jobject>& context,
+ int index,
+ const JavaParamRef<jobject>& obj) {
+ const JavaRef<jobject>& obj) {
+ if (static_cast<size_t>(index) >= blocked_sites_.size() ||
+ credential_edit_bridge_) {
+ return;
@@ -5675,7 +5700,7 @@ new file mode 100644
+jboolean PasswordUiViewAndroid::StartImporting(
+ JNIEnv* env,
+ const base::android::JavaRef<jobject>& obj,
+ const JavaParamRef<jobject>& java_window) {
+ const JavaRef<jobject>& java_window) {
+ ui::WindowAndroid* window =
+ ui::WindowAndroid::FromJavaWindowAndroid(java_window);
+ CHECK(window);
@@ -5715,7 +5740,7 @@ new file mode 100644
+
+// static
+static jlong JNI_PasswordUiView_Init(JNIEnv* env,
+ const JavaParamRef<jobject>& obj,
+ const JavaRef<jobject>& obj,
+ Profile* profile) {
+ PasswordUiViewAndroid* controller =
+ new PasswordUiViewAndroid(env, obj, profile);
@@ -5776,6 +5801,8 @@ new file mode 100644
+ break;
+ }
+}
+
+DEFINE_JNI(PasswordUiView)
diff --git a/chrome/browser/password_manager/android/password_ui_view_android.h b/chrome/browser/password_manager/android/password_ui_view_android.h
new file mode 100644
--- /dev/null
@@ -5873,12 +5900,12 @@ new file mode 100644
+ JNIEnv* env,
+ const base::android::JavaRef<jobject>& context,
+ int index,
+ const base::android::JavaParamRef<jobject>& obj);
+ const base::android::JavaRef<jobject>& obj);
+ void HandleShowBlockedCredentialView(
+ JNIEnv* env,
+ const base::android::JavaRef<jobject>& context,
+ int index,
+ const base::android::JavaParamRef<jobject>& obj);
+ const base::android::JavaRef<jobject>& obj);
+ jboolean IsWaitingForPasswordStore(JNIEnv* env,
+ const base::android::JavaRef<jobject>&);
+
@@ -5891,7 +5918,7 @@ new file mode 100644
+
+ jboolean StartImporting(JNIEnv* env,
+ const base::android::JavaRef<jobject>& obj,
+ const base::android::JavaParamRef<jobject>& java_window);
+ const base::android::JavaRef<jobject>& java_window);
+
+ // Destroy the native implementation.
+ void Destroy(JNIEnv*, const base::android::JavaRef<jobject>&);
@@ -17,7 +17,7 @@ diff --git a/components/policy/content/policy_blocklist_navigation_throttle.cc b
PolicyBlocklistState
PolicyBlocklistNavigationThrottle::GetViewSourceNavigationBlocklistState() {
- CHECK(IsViewSourceNavigation());
+ CHECK(false);
+ if ((true)) CHECK(false);
GURL view_source_url =
GURL(std::string("view-source:") + navigation_handle()->GetURL().spec());
@@ -17,7 +17,6 @@ This reverts commit 11f6a3e29bee9a6590a4fd56b28e8048200c18d0.
Original License: BSD-3-Clause - https://spdx.org/licenses/BSD-3-Clause.html
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
...val-of-execution-context-address-space.inc | 2 ++
.../execution_context/execution_context.cc | 9 +++++++
.../execution_context/execution_context.h | 4 +++
.../core/exported/web_shared_worker_impl.cc | 1 +
@@ -52,16 +51,8 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
.../audio_worklet_global_scope_test.cc | 1 +
.../webaudio/audio_worklet_thread_test.cc | 1 +
.../worklet/worklet_thread_test_common.cc | 2 +-
35 files changed, 153 insertions(+), 15 deletions(-)
create mode 100644 cromite_flags/content/public/common/content_features_cc/Revert-removal-of-execution-context-address-space.inc
34 files changed, 151 insertions(+), 15 deletions(-)
diff --git a/cromite_flags/content/public/common/content_features_cc/Revert-removal-of-execution-context-address-space.inc b/cromite_flags/content/public/common/content_features_cc/Revert-removal-of-execution-context-address-space.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/content/public/common/content_features_cc/Revert-removal-of-execution-context-address-space.inc
@@ -0,0 +1,2 @@
+SET_CROMITE_FEATURE_ENABLED(kBlockInsecurePrivateNetworkRequests);
+SET_CROMITE_FEATURE_ENABLED(kBlockInsecurePrivateNetworkRequestsFromPrivate);
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
@@ -9,23 +9,23 @@ The feature can be disabled using the throttle-main-thread-to-60hz flag (enabled
License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
---
cc/base/features.cc | 9 ++-------
cc/scheduler/scheduler_state_machine.cc | 17 +++++++++++++++++
.../java/res/xml/privacy_preferences.xml | 6 ++++++
chrome/browser/about_flags.cc | 6 +++---
.../browser/chrome_content_browser_client.cc | 11 +++++++++++
.../Set-the-screen-frame-rate-to-60-Hz.grdp | 9 +++++++++
components/viz/common/features.cc | 1 +
.../common/frame_sinks/begin_frame_source.cc | 14 +++++++++++++-
.../common/frame_sinks/begin_frame_source.h | 1 +
components/viz/service/display/display.cc | 18 ++++++++++++++++--
.../external_begin_frame_source_android.cc | 13 +++++++++++++
.../external_begin_frame_source_android.h | 2 ++
.../root_compositor_frame_sink_impl.cc | 10 ++++++++--
.../Set-the-screen-frame-rate-to-60-Hz.inc | 7 +++++++
.../renderer/core/animation/animation_clock.cc | 11 ++++++++---
.../core/view_transition/view_transition.cc | 2 ++
16 files changed, 119 insertions(+), 18 deletions(-)
cc/base/features.cc | 9 ++-------
cc/scheduler/scheduler_state_machine.cc | 19 ++++++++++++++++++-
.../java/res/xml/privacy_preferences.xml | 6 ++++++
chrome/browser/about_flags.cc | 6 +++---
.../browser/chrome_content_browser_client.cc | 11 +++++++++++
.../Set-the-screen-frame-rate-to-60-Hz.grdp | 9 +++++++++
components/viz/common/features.cc | 1 +
.../common/frame_sinks/begin_frame_source.cc | 14 +++++++++++++-
.../common/frame_sinks/begin_frame_source.h | 1 +
components/viz/service/display/display.cc | 18 ++++++++++++++++--
.../external_begin_frame_source_android.cc | 13 +++++++++++++
.../external_begin_frame_source_android.h | 2 ++
.../root_compositor_frame_sink_impl.cc | 10 ++++++++--
.../Set-the-screen-frame-rate-to-60-Hz.inc | 7 +++++++
.../core/animation/animation_clock.cc | 11 ++++++++---
.../core/view_transition/view_transition.cc | 2 ++
16 files changed, 120 insertions(+), 19 deletions(-)
create mode 100644 chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Set-the-screen-frame-rate-to-60-Hz.grdp
create mode 100644 cromite_flags/chrome/browser/about_flags_cc/Set-the-screen-frame-rate-to-60-Hz.inc
@@ -58,6 +58,15 @@ diff --git a/cc/base/features.cc b/cc/base/features.cc
diff --git a/cc/scheduler/scheduler_state_machine.cc b/cc/scheduler/scheduler_state_machine.cc
--- a/cc/scheduler/scheduler_state_machine.cc
+++ b/cc/scheduler/scheduler_state_machine.cc
@@ -34,7 +34,7 @@ const int kMaxPendingSubmitFrames = 1;
bool IsEligibleToThrottleMainFrameRate() {
#if BUILDFLAG(IS_ANDROID)
// Still requires balancing tradeoffs for desktop Android, not enabled yet.
- return !base::android::device_info::is_desktop();
+ return true;
#else
return true;
#endif
@@ -1578,6 +1578,15 @@ void SchedulerStateMachine::FrameIntervalUpdated(
//
// Apply some slack, so that if for some reason the interval is a bit larger
+3 -3
View File
@@ -572,15 +572,15 @@ diff --git a/components/browser_ui/site_settings/android/website_preference_brid
+static void JNI_WebsitePreferenceBridge_SetCustomTimezone(
+ JNIEnv* env,
+ const JavaParamRef<jobject>& jbrowser_context_handle,
+ const JavaParamRef<jstring>& custom_timezone) {
+ const JavaRef<jobject>& jbrowser_context_handle,
+ const JavaRef<jstring>& custom_timezone) {
+ std::string new_timezone = ConvertJavaStringToUTF8(env, custom_timezone);
+ GetHostContentSettingsMap(jbrowser_context_handle)->SetTimezoneOverrideValue(new_timezone);
+}
+
+static base::android::ScopedJavaLocalRef<jstring> JNI_WebsitePreferenceBridge_GetCustomTimezone(
+ JNIEnv* env,
+ const JavaParamRef<jobject>& jbrowser_context_handle) {
+ const JavaRef<jobject>& jbrowser_context_handle) {
+ std::string custom_timezone;
+ GetHostContentSettingsMap(jbrowser_context_handle)->GetTimezoneOverrideValue(custom_timezone);
+ return ConvertUTF8ToJavaString(env, custom_timezone);
@@ -1214,7 +1214,7 @@ diff --git a/chrome/browser/android/favicon_helper.cc b/chrome/browser/android/f
+ Profile* profile,
+ std::vector<GURL>& gurls,
+ jint j_desired_size_in_pixel,
+ const base::android::JavaParamRef<jobject>&
+ const base::android::JavaRef<jobject>&
+ j_composed_favicon_image_callback) {
+ DCHECK(profile);
+ if (!profile) {
@@ -1351,7 +1351,7 @@ diff --git a/chrome/browser/android/favicon_helper.h b/chrome/browser/android/fa
+ Profile* profile,
+ std::vector<GURL>& gurls,
+ jint j_desired_size_in_pixel,
+ const base::android::JavaParamRef<jobject>& j_favicon_image_callback);
+ const base::android::JavaRef<jobject>& j_favicon_image_callback);
bool GetLocalFaviconImageForURL(
JNIEnv* env,
Profile* profile,
+8 -19
View File
@@ -24,9 +24,9 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
.../settings/UserAgentPreferences.java | 189 ++++++++++++++++++
.../chromium/chrome/browser/tab/TabImpl.java | 64 +++++-
.../chromium/chrome/browser/tab/TabUtils.java | 8 +-
.../browser/android/content/content_utils.cc | 32 ++-
.../browser/android/content/content_utils.cc | 29 +++
.../preferences/browser_prefs_android.cc | 7 +
.../privacy_preferences_manager_impl.cc | 127 ++++++++++++
.../privacy_preferences_manager_impl.cc | 126 ++++++++++++
...ktop_site_web_contents_observer_android.cc | 11 +
...sktop_site_web_contents_observer_android.h | 2 +
.../preferences/ChromePreferenceKeys.java | 2 -
@@ -46,7 +46,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
.../browser/web_contents/web_contents_impl.cc | 6 +-
.../framehost/NavigationControllerImpl.java | 17 +-
content/renderer/render_thread_impl.cc | 1 -
36 files changed, 811 insertions(+), 26 deletions(-)
36 files changed, 808 insertions(+), 25 deletions(-)
create mode 100644 chrome/android/java/res/layout/custom_useragent_preferences.xml
create mode 100644 chrome/android/java/res/xml/useragent_preferences.xml
create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/settings/UserAgentPreferences.java
@@ -690,7 +690,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabUtils.ja
diff --git a/chrome/browser/android/content/content_utils.cc b/chrome/browser/android/content/content_utils.cc
--- a/chrome/browser/android/content/content_utils.cc
+++ b/chrome/browser/android/content/content_utils.cc
@@ -8,9 +8,23 @@
@@ -8,9 +8,22 @@
#include "content/public/browser/web_contents.h"
#include "third_party/blink/public/common/user_agent/user_agent_metadata.h"
@@ -706,7 +706,6 @@ diff --git a/chrome/browser/android/content/content_utils.cc b/chrome/browser/an
+using base::android::ConvertJavaStringToUTF8;
+using base::android::ConvertUTF16ToJavaString;
+using base::android::ConvertUTF8ToJavaString;
+using base::android::JavaParamRef;
+using base::android::JavaRef;
+using base::android::ScopedJavaGlobalRef;
+using base::android::ScopedJavaLocalRef;
@@ -714,7 +713,7 @@ diff --git a/chrome/browser/android/content/content_utils.cc b/chrome/browser/an
static std::string JNI_ContentUtils_GetBrowserUserAgent(JNIEnv* env) {
return embedder_support::GetUserAgent();
}
@@ -19,6 +33,22 @@ static void JNI_ContentUtils_SetUserAgentOverride(
@@ -19,6 +32,22 @@ static void JNI_ContentUtils_SetUserAgentOverride(
JNIEnv* env,
const base::android::JavaRef<jobject>& jweb_contents,
bool j_override_in_new_tabs) {
@@ -737,15 +736,6 @@ diff --git a/chrome/browser/android/content/content_utils.cc b/chrome/browser/an
constexpr char kLinuxInfoStr[] = "X11; Linux x86_64";
// Note: Any updates to desktop overrides here should also be applied to
@@ -29,7 +59,7 @@ static void JNI_ContentUtils_SetUserAgentOverride(
blink::UserAgentOverride spoofed_ua;
spoofed_ua.ua_string_override =
embedder_support::BuildUserAgentFromOSAndProduct(
- kLinuxInfoStr, embedder_support::GetProductAndVersion());
+ kLinuxInfoStr, embedder_support::GetProductAndVersion(embedder_support::UserAgentReductionEnterprisePolicyState::kForceEnabled));
spoofed_ua.ua_metadata_override = metadata;
spoofed_ua.ua_metadata_override->platform = "Linux";
spoofed_ua.ua_metadata_override->platform_version =
diff --git a/chrome/browser/android/preferences/browser_prefs_android.cc b/chrome/browser/android/preferences/browser_prefs_android.cc
--- a/chrome/browser/android/preferences/browser_prefs_android.cc
+++ b/chrome/browser/android/preferences/browser_prefs_android.cc
@@ -773,7 +763,7 @@ diff --git a/chrome/browser/android/preferences/browser_prefs_android.cc b/chrom
diff --git a/chrome/browser/android/preferences/privacy_preferences_manager_impl.cc b/chrome/browser/android/preferences/privacy_preferences_manager_impl.cc
--- a/chrome/browser/android/preferences/privacy_preferences_manager_impl.cc
+++ b/chrome/browser/android/preferences/privacy_preferences_manager_impl.cc
@@ -12,9 +12,35 @@
@@ -12,9 +12,34 @@
#include "components/policy/core/common/features.h"
#include "components/prefs/pref_service.h"
@@ -801,7 +791,6 @@ diff --git a/chrome/browser/android/preferences/privacy_preferences_manager_impl
+using base::android::ConvertJavaStringToUTF8;
+using base::android::ConvertUTF16ToJavaString;
+using base::android::ConvertUTF8ToJavaString;
+using base::android::JavaParamRef;
+using base::android::JavaRef;
+using base::android::ScopedJavaGlobalRef;
+using base::android::ScopedJavaLocalRef;
@@ -809,7 +798,7 @@ diff --git a/chrome/browser/android/preferences/privacy_preferences_manager_impl
static bool JNI_PrivacyPreferencesManagerImpl_IsMetricsReportingEnabled(
JNIEnv* env) {
PrefService* local_state = g_browser_process->local_state();
@@ -37,4 +63,105 @@ JNI_PrivacyPreferencesManagerImpl_IsMetricsReportingDisabledByPolicy(
@@ -37,4 +62,105 @@ JNI_PrivacyPreferencesManagerImpl_IsMetricsReportingDisabledByPolicy(
!local_state->GetBoolean(metrics::prefs::kMetricsReportingEnabled);
}
@@ -877,7 +866,7 @@ diff --git a/chrome/browser/android/preferences/privacy_preferences_manager_impl
+
+static void JNI_PrivacyPreferencesManagerImpl_SetOverrideUserAgentValue(
+ JNIEnv* env,
+ const JavaParamRef<jstring>& ua, jboolean desktopMode) {
+ const JavaRef<jstring>& ua, jboolean desktopMode) {
+ std::string new_ua = ConvertJavaStringToUTF8(env, ua);
+ if (desktopMode == false) {
+ g_browser_process->local_state()->SetString(prefs::kOverrideUserAgent,
+51 -7
View File
@@ -12,8 +12,9 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
chrome/android/java/res/values/dimens.xml | 11 +
chrome/android/java/res/values/styles.xml | 24 ++
.../DefaultSearchEngineFirstRunFragment.java | 3 -
.../browser/firstrun/FirstRunActivity.java | 23 +-
.../browser/firstrun/FirstRunActivity.java | 39 +-
.../firstrun/FirstRunFlowSequencer.java | 55 +--
.../browser/firstrun/FirstRunFragment.java | 3 +
.../browser/firstrun/FirstRunUtils.java | 1 +
.../firstrun/ToSAndUMAFirstRunFragment.java | 321 +++++++++++++++++
.../firstrun/TosAndUmaFragmentView.java | 336 ++++++++++++++++++
@@ -22,7 +23,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
...creenSigninAndHistorySyncActivityBase.java | 6 +-
.../browser/locale/LocaleManagerDelegate.java | 5 +-
.../Welcome-screen.grdp | 27 ++
16 files changed, 907 insertions(+), 76 deletions(-)
17 files changed, 926 insertions(+), 76 deletions(-)
create mode 100644 chrome/android/java/res/layout/fre_tosanduma.xml
create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/firstrun/ToSAndUMAFirstRunFragment.java
create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/firstrun/TosAndUmaFragmentView.java
@@ -293,7 +294,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/Defaul
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivity.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivity.java
@@ -41,8 +41,7 @@ import org.chromium.chrome.browser.feature_engagement.TrackerFactory;
@@ -23,6 +23,7 @@ import androidx.annotation.CallSuper;
import androidx.annotation.ColorInt;
import androidx.annotation.StringRes;
import androidx.annotation.VisibleForTesting;
+import androidx.fragment.app.Fragment;
import androidx.viewpager2.widget.ViewPager2;
import org.chromium.base.ActivityState;
@@ -41,8 +42,7 @@ import org.chromium.chrome.browser.feature_engagement.TrackerFactory;
import org.chromium.chrome.browser.metrics.UmaUtils;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.search_engines.TemplateUrlServiceFactory;
@@ -303,7 +312,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstR
import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeUtils;
import org.chromium.chrome.browser.ui.signin.DialogWhenLargeContentLayout;
import org.chromium.chrome.browser.ui.signin.SigninUtils;
@@ -231,7 +230,7 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa
@@ -231,7 +231,7 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa
/** Creates first page and sets up adapter. Should result UI being shown on the screen. */
private void createFirstPage() {
BooleanSupplier showWelcomePage = () -> !FirstRunStatus.shouldSkipWelcomePage();
@@ -312,7 +321,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstR
mFreProgressStates.add(MobileFreProgress.WELCOME_SHOWN);
mPagerAdapter = new FirstRunPagerAdapter(FirstRunActivity.this, mPages);
mPager.setAdapter(mPagerAdapter);
@@ -256,9 +255,6 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa
@@ -256,9 +256,6 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa
//
// TODO(b/245912657): explicitly sign in supervised users in {@link
// FullscreenSigninMediator#handleContinueWithNative} rather than relying on SigninChecker.
@@ -322,7 +331,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstR
assumeNonNull(mFreProperties);
mFirstRunFlowSequencer.updateFirstRunProperties(mFreProperties);
@@ -274,16 +270,6 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa
@@ -274,16 +271,6 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa
mFreProgressStates.add(MobileFreProgress.DEFAULT_SEARCH_ENGINE_SHOWN);
}
@@ -339,7 +348,29 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstR
if (mPagerAdapter != null) {
mPagerAdapter.notifyDataSetChanged();
}
@@ -645,11 +631,6 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa
@@ -498,6 +485,21 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa
return true;
}
+ @Override
+ public void onAttachFragment(Fragment fragment) {
+ if (!(fragment instanceof FirstRunFragment)) return;
+
+ FirstRunFragment page = (FirstRunFragment) fragment;
+ if (mNativeInitializationPromise.isFulfilled()) {
+ page.onNativeInitialized();
+ } else {
+ mNativeInitializationPromise.then(
+ (ignored) -> {
+ page.onNativeInitialized();
+ });
+ }
+ }
+
// Activity:
@Override
public void onRestoreInstanceState(@Nullable Bundle state) {
@@ -645,11 +647,6 @@ public class FirstRunActivity extends FirstRunActivityBase implements FirstRunPa
public void acceptTermsOfService(boolean allowMetricsAndCrashUploading) {
assert mNativeInitializationPromise.isFulfilled();
@@ -471,6 +502,19 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstR
}
return true;
}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunFragment.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunFragment.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunFragment.java
@@ -12,6 +12,9 @@ import org.chromium.build.annotations.Nullable;
/** This interface is implemented by FRE fragments. */
@NullMarked
public interface FirstRunFragment {
+
+ default void onNativeInitialized() {}
+
/**
* @see androidx.fragment.app.Fragment#getActivity().
*/
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunUtils.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunUtils.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunUtils.java
+9 -7
View File
@@ -14,13 +14,13 @@ Subject: bromite build utils
build/config/android/rules.gni | 6 +-
.../ChromeAccessibilitySettingsDelegate.java | 5 +
chrome/browser/flags/BUILD.gn | 8 +-
.../flags/android/cromite_native_utils.cc | 92 +++++++++++++++
.../flags/android/cromite_native_utils.cc | 94 +++++++++++++++
.../flags/android/cromite_native_utils.h | 14 +++
.../browser/flags/CromiteNativeUtils.java | 46 ++++++++
mojo/public/tools/mojom/mojom_parser.py | 22 +++-
tools/grit/grit/grd_reader.py | 27 ++++-
tools/grit/preprocess_if_expr.py | 32 +++++-
17 files changed, 536 insertions(+), 19 deletions(-)
17 files changed, 538 insertions(+), 19 deletions(-)
create mode 100644 build/bromite/bromite_utils.gni
create mode 100644 build/bromite/gyp/cpp_bromite_include.py
create mode 100644 build/bromite/gyp/cpp_bromite_include.pydeps
@@ -504,7 +504,7 @@ diff --git a/chrome/browser/flags/android/cromite_native_utils.cc b/chrome/brows
new file mode 100755
--- /dev/null
+++ b/chrome/browser/flags/android/cromite_native_utils.cc
@@ -0,0 +1,92 @@
@@ -0,0 +1,94 @@
+#include "chrome/browser/flags/android/cromite_native_utils.h"
+
+#include "chrome/browser/browser_process.h"
@@ -514,10 +514,10 @@ new file mode 100755
+
+#include "base/android/jni_string.h"
+
+using base::android::JavaParamRef;
+using base::android::JavaRef;
+
+static void JNI_CromiteNativeUtils_SetEnabled(JNIEnv* env,
+ const JavaParamRef<jstring>& featureName, jboolean isEnabled) {
+ const JavaRef<jstring>& featureName, bool isEnabled) {
+ flags_ui::PrefServiceFlagsStorage flags_storage(
+ g_browser_process->local_state());
+ std::set<std::string> entries = flags_storage.GetFlags();
@@ -560,7 +560,7 @@ new file mode 100755
+}
+
+static jboolean JNI_CromiteNativeUtils_IsFlagEnabled(JNIEnv* env,
+ const JavaParamRef<jstring>& featureName) {
+ const JavaRef<jstring>& featureName) {
+ auto internal_name = base::android::ConvertJavaStringToUTF8(env, featureName);
+
+ flags_ui::PrefServiceFlagsStorage flags_storage(
@@ -597,6 +597,8 @@ new file mode 100755
+
+ return false;
+}
+
+DEFINE_JNI(CromiteNativeUtils)
diff --git a/chrome/browser/flags/android/cromite_native_utils.h b/chrome/browser/flags/android/cromite_native_utils.h
new file mode 100755
--- /dev/null
@@ -662,7 +664,7 @@ new file mode 100755
+ }
+
+ @NativeMethods
+ interface Natives {
+ public interface Natives {
+ void setEnabled(String featureName, boolean newValue);
+ boolean isFlagEnabled(String featureName);
+ }
@@ -10,11 +10,11 @@ Pre-requisites: eyeo Browser Ad filtering Solution: Base Module
chrome/android/chrome_java_sources.gni | 4 +
.../browser/adblock/TabIdTranslator.java | 36 ++
chrome/browser/BUILD.gn | 4 +
.../android/adblock/tab_id_translator_jni.cc | 41 ++
.../android/adblock/tab_id_translator_jni.cc | 43 ++
chrome/browser/ui/BUILD.gn | 6 +
components/adblock/android/BUILD.gn | 107 ++++
.../adblock/android/adblock_controller_jni.cc | 133 +++++
.../filtering_configuration_android.cc | 244 ++++++++
.../filtering_configuration_android.cc | 246 ++++++++
.../android/filtering_configuration_android.h | 94 +++
.../components/adblock/AdblockController.java | 283 +++++++++
.../components/adblock/AdblockSwitches.java | 22 +
@@ -44,9 +44,9 @@ Pre-requisites: eyeo Browser Ad filtering Solution: Base Module
.../TestPagesWildcardDomainTestBase.java | 116 ++++
.../TestResourceFilteringObserver.java | 180 ++++++
.../adblock/TestVerificationUtils.java | 220 +++++++
...esource_classification_notifier_android.cc | 163 +++++
...esource_classification_notifier_android.cc | 165 ++++++
...resource_classification_notifier_android.h | 72 +++
40 files changed, 5609 insertions(+)
40 files changed, 5615 insertions(+)
create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/adblock/TabIdTranslator.java
create mode 100644 chrome/browser/android/adblock/tab_id_translator_jni.cc
create mode 100644 components/adblock/android/BUILD.gn
@@ -105,7 +105,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
"//components/android_autofill/browser:features_java",
"//components/android_autofill/browser:java",
"//components/autofill/android:autofill_features_java",
@@ -1472,6 +1476,7 @@ if (_is_default_toolchain) {
@@ -1460,6 +1464,7 @@ if (_is_default_toolchain) {
"//chrome/test/data/translate/",
"//chrome/test/data/webauthn/",
"//chrome/test/media_router/resources/",
@@ -113,7 +113,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
"//components/test/data/autofill/",
"//components/test/data/payments/",
"//content/test/data/browsing_data/",
@@ -3066,6 +3071,12 @@ if (_is_default_toolchain) {
@@ -3054,6 +3059,12 @@ if (_is_default_toolchain) {
sources += [ "java/src/org/chromium/chrome/browser/media/MediaCapturePickerManagerBridge.java" ]
}
@@ -126,7 +126,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
# Used for testing only, should not be shipped to end users.
if (enable_offline_pages_harness) {
sources += [ "java/src/org/chromium/chrome/browser/offlinepages/evaluation/OfflinePageEvaluationBridge.java" ]
@@ -3158,6 +3169,7 @@ if (_is_default_toolchain) {
@@ -3146,6 +3157,7 @@ if (_is_default_toolchain) {
"//chrome/browser/ui/plus_addresses/android:jni_headers",
"//chrome/browser/util:jni_headers",
"//chrome/browser/webauthn/android:jni_headers",
@@ -214,7 +214,7 @@ diff --git a/chrome/browser/android/adblock/tab_id_translator_jni.cc b/chrome/br
new file mode 100644
--- /dev/null
+++ b/chrome/browser/android/adblock/tab_id_translator_jni.cc
@@ -0,0 +1,41 @@
@@ -0,0 +1,43 @@
+/*
+ * This file is part of eyeo Chromium SDK,
+ * Copyright (C) 2006-present eyeo GmbH
@@ -256,6 +256,8 @@ new file mode 100644
+
+ return tab->GetAndroidId();
+}
+
+DEFINE_JNI(TabIdTranslator)
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
@@ -526,7 +528,7 @@ diff --git a/components/adblock/android/filtering_configuration_android.cc b/com
new file mode 100644
--- /dev/null
+++ b/components/adblock/android/filtering_configuration_android.cc
@@ -0,0 +1,244 @@
@@ -0,0 +1,246 @@
+/*
+ * This file is part of eyeo Chromium SDK,
+ * Copyright (C) 2006-present eyeo GmbH
@@ -563,7 +565,7 @@ new file mode 100644
+using base::android::AttachCurrentThread;
+using base::android::ConvertJavaStringToUTF8;
+using base::android::ConvertUTF8ToJavaString;
+using base::android::JavaParamRef;
+using base::android::JavaRef;
+using base::android::ScopedJavaLocalRef;
+using base::android::ToJavaArrayOfStrings;
+
@@ -571,7 +573,7 @@ new file mode 100644
+
+FilteringConfigurationAndroid::FilteringConfigurationAndroid(
+ JNIEnv* env,
+ const JavaParamRef<jobject>& jcontroller,
+ const JavaRef<jobject>& jcontroller,
+ const std::string& configuration_name,
+ SubscriptionService* subscription_service,
+ PrefService* pref_service)
@@ -657,14 +659,14 @@ new file mode 100644
+
+void FilteringConfigurationAndroid::AddAllowedDomain(
+ JNIEnv* env,
+ const JavaParamRef<jstring>& allowed_domain) {
+ const JavaRef<jstring>& allowed_domain) {
+ filtering_configuration_ptr->AddAllowedDomain(
+ ConvertJavaStringToUTF8(allowed_domain));
+}
+
+void FilteringConfigurationAndroid::RemoveAllowedDomain(
+ JNIEnv* env,
+ const JavaParamRef<jstring>& allowed_domain) {
+ const JavaRef<jstring>& allowed_domain) {
+ filtering_configuration_ptr->RemoveAllowedDomain(
+ ConvertJavaStringToUTF8(allowed_domain));
+}
@@ -677,14 +679,14 @@ new file mode 100644
+
+void FilteringConfigurationAndroid::AddCustomFilter(
+ JNIEnv* env,
+ const JavaParamRef<jstring>& custom_filter) {
+ const JavaRef<jstring>& custom_filter) {
+ filtering_configuration_ptr->AddCustomFilter(
+ ConvertJavaStringToUTF8(custom_filter));
+}
+
+void FilteringConfigurationAndroid::RemoveCustomFilter(
+ JNIEnv* env,
+ const JavaParamRef<jstring>& custom_filter) {
+ const JavaRef<jstring>& custom_filter) {
+ filtering_configuration_ptr->RemoveCustomFilter(
+ ConvertJavaStringToUTF8(custom_filter));
+}
@@ -697,14 +699,14 @@ new file mode 100644
+
+void FilteringConfigurationAndroid::AddFilterList(
+ JNIEnv* env,
+ const JavaParamRef<jstring>& url) {
+ const JavaRef<jstring>& url) {
+ filtering_configuration_ptr->AddFilterList(
+ GURL{ConvertJavaStringToUTF8(url)});
+}
+
+void FilteringConfigurationAndroid::RemoveFilterList(
+ JNIEnv* env,
+ const JavaParamRef<jstring>& url) {
+ const JavaRef<jstring>& url) {
+ filtering_configuration_ptr->RemoveFilterList(
+ GURL{ConvertJavaStringToUTF8(url)});
+}
@@ -726,9 +728,9 @@ new file mode 100644
+
+static jlong JNI_FilteringConfiguration_Create(
+ JNIEnv* env,
+ const JavaParamRef<jobject>& jcontroller,
+ const JavaParamRef<jstring>& jstring,
+ const JavaParamRef<jobject>& jbrowser_context_handle) {
+ const JavaRef<jobject>& jcontroller,
+ const JavaRef<jstring>& jstring,
+ const JavaRef<jobject>& jbrowser_context_handle) {
+ DCHECK(!jcontroller.is_null());
+ DCHECK(!jbrowser_context_handle.is_null());
+ auto* context =
@@ -742,7 +744,7 @@ new file mode 100644
+static ScopedJavaLocalRef<jobjectArray>
+JNI_FilteringConfiguration_GetConfigurations(
+ JNIEnv* env,
+ const JavaParamRef<jobject>& jbrowser_context_handle) {
+ const JavaRef<jobject>& jbrowser_context_handle) {
+ std::vector<std::string> configurations;
+ std::ranges::transform(
+ adblock::SubscriptionServiceFactory::GetForBrowserContext(
@@ -755,7 +757,7 @@ new file mode 100644
+
+static jboolean JNI_FilteringConfiguration_IsAutoInstallEnabled(
+ JNIEnv* env,
+ const JavaParamRef<jobject>& jbrowser_context_handle) {
+ const JavaRef<jobject>& jbrowser_context_handle) {
+ return adblock::SubscriptionServiceFactory::GetForBrowserContext(
+ content::BrowserContextFromJavaHandle(jbrowser_context_handle))
+ ->IsAutoInstallEnabled()
@@ -766,11 +768,13 @@ new file mode 100644
+static void JNI_FilteringConfiguration_SetAutoInstallEnabled(
+ JNIEnv* env,
+ jboolean j_enabled,
+ const JavaParamRef<jobject>& jbrowser_context_handle) {
+ const JavaRef<jobject>& jbrowser_context_handle) {
+ adblock::SubscriptionServiceFactory::GetForBrowserContext(
+ content::BrowserContextFromJavaHandle(jbrowser_context_handle))
+ ->SetAutoInstallEnabled(j_enabled == JNI_TRUE);
+}
+
+DEFINE_JNI(FilteringConfiguration)
diff --git a/components/adblock/android/filtering_configuration_android.h b/components/adblock/android/filtering_configuration_android.h
new file mode 100644
--- /dev/null
@@ -813,7 +817,7 @@ new file mode 100644
+ public:
+ explicit FilteringConfigurationAndroid(
+ JNIEnv* env,
+ const base::android::JavaParamRef<jobject>& jcontroller,
+ const base::android::JavaRef<jobject>& jcontroller,
+ const std::string& configuration_name,
+ adblock::SubscriptionService* subscription_service,
+ PrefService* pref_service);
@@ -823,21 +827,21 @@ new file mode 100644
+ void SetEnabled(JNIEnv* env, jboolean j_enabled);
+ jboolean IsEnabled(JNIEnv* env) const;
+ void AddFilterList(JNIEnv* env,
+ const base::android::JavaParamRef<jstring>& url);
+ const base::android::JavaRef<jstring>& url);
+ void RemoveFilterList(JNIEnv* env,
+ const base::android::JavaParamRef<jstring>& url);
+ const base::android::JavaRef<jstring>& url);
+ base::android::ScopedJavaLocalRef<jobjectArray> GetFilterLists(
+ JNIEnv* env) const;
+ void AddAllowedDomain(JNIEnv* env,
+ const base::android::JavaParamRef<jstring>& domain);
+ const base::android::JavaRef<jstring>& domain);
+ void RemoveAllowedDomain(JNIEnv* env,
+ const base::android::JavaParamRef<jstring>& domain);
+ const base::android::JavaRef<jstring>& domain);
+ base::android::ScopedJavaLocalRef<jobjectArray> GetAllowedDomains(
+ JNIEnv* env) const;
+ void AddCustomFilter(JNIEnv* env,
+ const base::android::JavaParamRef<jstring>& filter);
+ const base::android::JavaRef<jstring>& filter);
+ void RemoveCustomFilter(JNIEnv* env,
+ const base::android::JavaParamRef<jstring>& filter);
+ const base::android::JavaRef<jstring>& filter);
+ base::android::ScopedJavaLocalRef<jobjectArray> GetCustomFilters(
+ JNIEnv* env) const;
+
@@ -1641,7 +1645,7 @@ new file mode 100644
+ }
+
+ @NativeMethods
+ interface Natives {
+ public interface Natives {
+ void destroy(long nativeFilteringConfigurationAndroid);
+
+ void setEnabled(long nativeFilteringConfigurationAndroid, boolean enabled);
@@ -5707,7 +5711,7 @@ diff --git a/components/adblock/android/resource_classification_notifier_android
new file mode 100644
--- /dev/null
+++ b/components/adblock/android/resource_classification_notifier_android.cc
@@ -0,0 +1,163 @@
@@ -0,0 +1,165 @@
+/*
+ * This file is part of eyeo Chromium SDK,
+ * Copyright (C) 2006-present eyeo GmbH
@@ -5740,7 +5744,7 @@ new file mode 100644
+
+using base::android::AttachCurrentThread;
+using base::android::ConvertUTF8ToJavaString;
+using base::android::JavaParamRef;
+using base::android::JavaRef;
+using base::android::ScopedJavaLocalRef;
+using base::android::ToJavaArrayOfStrings;
+
@@ -5748,7 +5752,7 @@ new file mode 100644
+
+ResourceClassificationNotifierAndroid::ResourceClassificationNotifierAndroid(
+ JNIEnv* env,
+ const JavaParamRef<jobject>& jcontroller,
+ const JavaRef<jobject>& jcontroller,
+ ResourceClassificationRunner* classification_runner)
+ : classification_runner_(classification_runner),
+ java_weak_controller_(env, jcontroller) {
@@ -5861,8 +5865,8 @@ new file mode 100644
+
+static jlong JNI_ResourceClassificationNotifier_Create(
+ JNIEnv* env,
+ const JavaParamRef<jobject>& jcontroller,
+ const base::android::JavaParamRef<jobject>& jbrowser_context_handle) {
+ const JavaRef<jobject>& jcontroller,
+ const base::android::JavaRef<jobject>& jbrowser_context_handle) {
+ DCHECK(!jcontroller.is_null());
+ DCHECK(!jbrowser_context_handle.is_null());
+ return reinterpret_cast<jlong>(
@@ -5871,6 +5875,8 @@ new file mode 100644
+ adblock::ResourceClassificationRunnerFactory::GetForBrowserContext(
+ content::BrowserContextFromJavaHandle(jbrowser_context_handle))));
+}
+
+DEFINE_JNI(ResourceClassificationNotifier)
diff --git a/components/adblock/android/resource_classification_notifier_android.h b/components/adblock/android/resource_classification_notifier_android.h
new file mode 100644
--- /dev/null
@@ -5910,7 +5916,7 @@ new file mode 100644
+ public:
+ ResourceClassificationNotifierAndroid(
+ JNIEnv* env,
+ const base::android::JavaParamRef<jobject>& jcontroller,
+ const base::android::JavaRef<jobject>& jcontroller,
+ ResourceClassificationRunner* classification_runner);
+ ~ResourceClassificationNotifierAndroid() override;
+
@@ -6,13 +6,13 @@ Remove translate offer
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
.../xml/languages_detailed_preferences.xml | 41 ---------------
.../java/res/xml/languages_preferences.xml | 4 --
.../language/settings/LanguageSettings.java | 50 +------------------
.../strings/android_chrome_strings.grd | 3 --
.../core/browser/translate_manager.cc | 5 +-
.../core/browser/translate_script.cc | 17 ++-----
6 files changed, 10 insertions(+), 110 deletions(-)
.../xml/languages_detailed_preferences.xml | 41 -----
.../java/res/xml/languages_preferences.xml | 4 -
.../language/settings/LanguageSettings.java | 153 ------------------
.../strings/android_chrome_strings.grd | 3 -
.../core/browser/translate_manager.cc | 5 +-
.../core/browser/translate_script.cc | 17 +-
6 files changed, 8 insertions(+), 215 deletions(-)
diff --git a/chrome/browser/language/android/java/res/xml/languages_detailed_preferences.xml b/chrome/browser/language/android/java/res/xml/languages_detailed_preferences.xml
--- a/chrome/browser/language/android/java/res/xml/languages_detailed_preferences.xml
@@ -144,25 +144,103 @@ diff --git a/chrome/browser/language/android/java/src/org/chromium/chrome/browse
}
/** Setup the App Language section with a title and preference to choose the app language. */
@@ -186,7 +148,7 @@ public class LanguageSettings extends ChromeBaseSettingsFragment
* @param contentLanguagesPreference ContentLanguagesPreference reference to update about state
* changes.
*/
- private void setupTranslateSection(ContentLanguagesPreference contentLanguagesPreference) {
+/* private void setupTranslateSection(ContentLanguagesPreference contentLanguagesPreference) {
// Setup expandable advanced settings section.
PreferenceCategory translationAdvancedSection =
(PreferenceCategory) findPreference(TRANSLATION_ADVANCED_SECTION);
@@ -266,7 +228,7 @@ public class LanguageSettings extends ChromeBaseSettingsFragment
return getPrefService().isManagedPreference(Pref.OFFER_TRANSLATE_ENABLED);
}
});
- }
+ } */
@@ -179,95 +141,6 @@ public class LanguageSettings extends ChromeBaseSettingsFragment
mAppLanguageDelegate.setup(this, appLanguagePreference, getProfile());
}
- /**
- * Setup the translate preferences section. A switch preferences controls if translate is
- * enabled/disabled and will hide all advanced settings when disabled.
- *
- * @param contentLanguagesPreference ContentLanguagesPreference reference to update about state
- * changes.
- */
- private void setupTranslateSection(ContentLanguagesPreference contentLanguagesPreference) {
- // Setup expandable advanced settings section.
- PreferenceCategory translationAdvancedSection =
- (PreferenceCategory) findPreference(TRANSLATION_ADVANCED_SECTION);
- translationAdvancedSection.setOnExpandButtonClickListener(
- () -> {
- // Lambda for PreferenceGroup.OnExpandButtonClickListener.
- LanguagesManager.recordImpression(
- LanguagesManager.LanguageSettingsPageType.ADVANCED_LANGUAGE_SETTINGS);
- });
- translationAdvancedSection.setVisible(
- getPrefService().getBoolean(Pref.OFFER_TRANSLATE_ENABLED));
-
- // Setup target language preference.
- LanguageItemPickerPreference targetLanguagePreference =
- (LanguageItemPickerPreference) findPreference(TARGET_LANGUAGE_KEY);
- targetLanguagePreference.setLanguageItem(
- getProfile(), TranslateBridge.getTargetLanguageForChromium(getProfile()));
- setSelectLanguageLauncher(
- targetLanguagePreference,
- LanguagesManager.LanguageListType.TARGET_LANGUAGES,
- REQUEST_CODE_CHANGE_TARGET_LANGUAGE,
- LanguagesManager.LanguageSettingsPageType.CHANGE_TARGET_LANGUAGE);
- mPrefChangeRegistrar.addObserver(
- Pref.PREF_TRANSLATE_RECENT_TARGET,
- () -> {
- targetLanguagePreference.setLanguageItem(
- getProfile(),
- TranslateBridge.getTargetLanguageForChromium(getProfile()));
- });
-
- // Setup always translate preference.
- LanguageItemListPreference alwaysTranslatePreference =
- (LanguageItemListPreference) findPreference(ALWAYS_LANGUAGES_KEY);
- alwaysTranslatePreference.setFragmentListDelegate(
- new AlwaysTranslateListFragment.ListDelegate(getProfile()));
- mPrefChangeRegistrar.addObserver(
- Pref.PREF_ALWAYS_TRANSLATE_LIST, alwaysTranslatePreference);
- setLanguageListPreferenceClickListener(alwaysTranslatePreference);
-
- // Setup never translate preference.
- LanguageItemListPreference neverTranslatePreference =
- (LanguageItemListPreference) findPreference(NEVER_LANGUAGES_KEY);
- neverTranslatePreference.setFragmentListDelegate(
- new NeverTranslateListFragment.ListDelegate(getProfile()));
- mPrefChangeRegistrar.addObserver(Pref.BLOCKED_LANGUAGES, neverTranslatePreference);
- setLanguageListPreferenceClickListener(neverTranslatePreference);
-
- // Setup translate switch to toggle advanced section on and off.
- ChromeSwitchPreference translateSwitch =
- (ChromeSwitchPreference) findPreference(TRANSLATE_SWITCH_KEY);
- boolean isTranslateEnabled = getPrefService().getBoolean(Pref.OFFER_TRANSLATE_ENABLED);
- translateSwitch.setChecked(isTranslateEnabled);
-
- translateSwitch.setOnPreferenceChangeListener(
- new Preference.OnPreferenceChangeListener() {
- @Override
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- boolean enabled = (boolean) newValue;
- getPrefService().setBoolean(Pref.OFFER_TRANSLATE_ENABLED, enabled);
- updateTranslateAdvancedSectionIndex(enabled, /* refreshResult= */ true);
- contentLanguagesPreference.notifyPrefChanged();
- translationAdvancedSection.setVisible(enabled);
- notifyPreferencesUpdated();
- LanguagesManager.recordAction(
- enabled
- ? LanguagesManager.LanguageSettingsActionType
- .ENABLE_TRANSLATE_GLOBALLY
- : LanguagesManager.LanguageSettingsActionType
- .DISABLE_TRANSLATE_GLOBALLY);
- return true;
- }
- });
- translateSwitch.setManagedPreferenceDelegate(
- new ChromeManagedPreferenceDelegate(getProfile()) {
- @Override
- public boolean isPreferenceControlledByPolicy(Preference preference) {
- return getPrefService().isManagedPreference(Pref.OFFER_TRANSLATE_ENABLED);
- }
- });
- }
-
@Override
public void onStart() {
@@ -321,17 +283,9 @@ public class LanguageSettings extends ChromeBaseSettingsFragment
super.onStart();
@@ -321,17 +194,9 @@ public class LanguageSettings extends ChromeBaseSettingsFragment
// Get the actual default system language to set as target language.
code = GlobalAppLocaleController.getInstance().getOriginalSystemLocale().getLanguage();
}
@@ -180,6 +258,30 @@ diff --git a/chrome/browser/language/android/java/src/org/chromium/chrome/browse
}
/**
@@ -479,23 +344,5 @@ public class LanguageSettings extends ChromeBaseSettingsFragment
private static void updateTranslateAdvancedSectionIndex(
boolean enabled, boolean refreshResult) {
- var indexData = SettingsIndexData.getInstance();
- if (indexData == null) return;
-
- String prefFrag = LanguageSettings.class.getName();
- if (enabled) {
- indexData.addEntryForKey(
- prefFrag, TARGET_LANGUAGE_KEY, R.string.languages_settings_target);
- indexData.addEntryForKey(
- prefFrag, ALWAYS_LANGUAGES_KEY, R.string.languages_settings_automatic);
- indexData.addEntryForKey(
- prefFrag, NEVER_LANGUAGES_KEY, R.string.languages_settings_dont_offer_langs);
- indexData.resolveIndex(); // Restores the header of the added entries.
- } else {
- indexData.removeEntryForKey(prefFrag, TARGET_LANGUAGE_KEY);
- indexData.removeEntryForKey(prefFrag, ALWAYS_LANGUAGES_KEY);
- indexData.removeEntryForKey(prefFrag, NEVER_LANGUAGES_KEY);
- }
- if (refreshResult) indexData.setRefreshResult(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