Patches for 135 (changed)

This commit is contained in:
Carmelo Messina
2025-04-01 16:26:40 +02:00
parent a88c2408c2
commit 02dd46c503
31 changed files with 1289 additions and 637 deletions
@@ -14,15 +14,15 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
chrome/android/java/AndroidManifest.xml | 1 -
.../menu/bookmark_toolbar_menu_improved.xml | 14 +
.../browser/TabbedModeTabDelegateFactory.java | 5 +-
.../app/bookmarks/BookmarkActivity.java | 32 ++
.../app/bookmarks/BookmarkActivity.java | 31 ++
.../native_page/NativePageFactory.java | 9 +-
chrome/browser/BUILD.gn | 11 +-
.../bookmarks/android/bookmark_bridge.cc | 267 ++++++++++++++++
.../bookmarks/android/bookmark_bridge.cc | 267 +++++++++++++++++
.../bookmarks/android/bookmark_bridge.h | 30 +-
.../browser/bookmarks/BookmarkBridge.java | 285 ++++++++++++++++++
.../browser/bookmarks/BookmarkBridge.java | 39 +++
.../browser/bookmarks/BookmarkDelegate.java | 10 +
.../bookmarks/BookmarkManagerCoordinator.java | 9 +
.../bookmarks/BookmarkManagerMediator.java | 23 ++
.../bookmarks/BookmarkManagerMediator.java | 283 ++++++++++++++++++
.../browser/bookmarks/BookmarkPage.java | 9 +-
.../browser/bookmarks/BookmarkToolbar.java | 28 ++
.../bookmarks/BookmarkToolbarMediator.java | 4 +
@@ -52,7 +52,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
ui/shell_dialogs/select_file_dialog_linux.cc | 4 +
ui/shell_dialogs/select_file_dialog_linux.h | 2 +
ui/shell_dialogs/select_file_dialog_win.cc | 5 +
41 files changed, 888 insertions(+), 29 deletions(-)
41 files changed, 901 insertions(+), 29 deletions(-)
create mode 100644 cromite_flags/chrome/browser/about_flags_cc/add-bookmark-import-export-actions.inc
create mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/add-bookmark-import-export-actions.inc
create mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_h/add-bookmark-import-export-actions.inc
@@ -124,7 +124,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/TabbedModeTabDe
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/bookmarks/BookmarkActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/app/bookmarks/BookmarkActivity.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/app/bookmarks/BookmarkActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/app/bookmarks/BookmarkActivity.java
@@ -28,6 +28,9 @@ import org.chromium.components.embedder_support.util.UrlConstants;
@@ -7,6 +7,7 @@ package org.chromium.chrome.browser.app.bookmarks;
import android.content.ComponentName;
import android.content.Intent;
import android.text.TextUtils;
+import android.os.Bundle;
import org.chromium.base.IntentUtils;
import org.chromium.build.annotations.Nullable;
@@ -28,6 +29,9 @@ import org.chromium.components.embedder_support.util.UrlConstants;
import org.chromium.ui.modaldialog.ModalDialogManager;
import org.chromium.ui.modaldialog.ModalDialogManager.ModalDialogType;
@@ -134,17 +142,17 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/bookmarks/B
/**
* The activity that displays the bookmark UI on the phone. It keeps a {@link
* BookmarkManagerCoordinator} inside of it and creates a snackbar manager. This activity should
@@ -38,6 +41,9 @@ public class BookmarkActivity extends SnackbarActivity {
public static final int EDIT_BOOKMARK_REQUEST_CODE = 14;
public static final String INTENT_VISIT_BOOKMARK_ID = "BookmarkEditActivity.VisitBookmarkId";
@@ -41,6 +45,9 @@ public class BookmarkActivity extends SnackbarActivity {
private @Nullable BookmarkManagerCoordinator mBookmarkManagerCoordinator;
private @Nullable BookmarkOpener mBookmarkOpener;
+ private ActivityWindowAndroid mWindowAndroid;
+ private IntentRequestTracker mIntentRequestTracker;
+
private @Nullable BookmarkManagerCoordinator mBookmarkManagerCoordinator;
private @Nullable BookmarkOpener mBookmarkOpener;
@@ -70,8 +76,25 @@ public class BookmarkActivity extends SnackbarActivity {
@Override
protected void onProfileAvailable(Profile profile) {
super.onProfileAvailable(profile);
@@ -70,6 +77,14 @@ public class BookmarkActivity extends SnackbarActivity {
getOnBackPressedDispatcher(),
mBookmarkManagerCoordinator,
SecondaryActivity.BOOKMARK);
@@ -154,23 +162,12 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/bookmarks/B
+ mWindowAndroid = new ActivityWindowAndroid(this, listenToActivityState,
+ mIntentRequestTracker, /*InsetObserver*/ null,
+ /* trackOcclusion= */ true);
+ mWindowAndroid.getIntentRequestTracker().restoreInstanceState(savedInstanceState);
+ mBookmarkManagerCoordinator.setWindow(mWindowAndroid,
+ new ModalDialogManager(
+ new AppModalPresenter(this), ModalDialogManager.ModalDialogType.APP));
+ getModalDialogManagerSupplier().get());
}
+ @Override
+ protected void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+
+ mWindowAndroid.getIntentRequestTracker().saveInstanceState(outState);
+ }
+
@Override
protected void onDestroy() {
super.onDestroy();
@@ -89,6 +112,7 @@ public class BookmarkActivity extends SnackbarActivity {
@@ -89,6 +104,7 @@ public class BookmarkActivity extends SnackbarActivity {
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
@@ -178,10 +175,17 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/bookmarks/B
if (requestCode == EDIT_BOOKMARK_REQUEST_CODE && resultCode == RESULT_OK) {
BookmarkId bookmarkId =
BookmarkId.getBookmarkIdFromString(
@@ -102,6 +126,14 @@ public class BookmarkActivity extends SnackbarActivity {
return new ModalDialogManager(new AppModalPresenter(this), ModalDialogType.APP);
@@ -97,6 +113,21 @@ public class BookmarkActivity extends SnackbarActivity {
}
}
+ @Override
+ protected void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+
+ mWindowAndroid.getIntentRequestTracker().saveInstanceState(outState);
+ }
+
+ @Override
+ public void onRequestPermissionsResult(
+ int requestCode, String[] permissions, int[] grantResults) {
@@ -190,9 +194,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/bookmarks/B
+ super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+ }
+
/**
* @return The {@link BookmarkManagerCoordinator} for testing purposes.
*/
@Override
protected ModalDialogManager createModalDialogManager() {
return new ModalDialogManager(new AppModalPresenter(this), ModalDialogType.APP);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java
@@ -665,302 +669,63 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser
diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java
--- a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java
+++ b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java
@@ -36,6 +36,48 @@ import org.chromium.url.GURL;
@@ -36,6 +36,9 @@ import org.chromium.url.GURL;
import java.util.ArrayList;
import java.util.List;
+import android.app.Activity;
+import android.content.Intent;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.content.DialogInterface;
+import android.content.res.Resources;
+import android.content.ContentResolver;
+import android.net.Uri;
+import android.provider.Browser;
+import android.provider.DocumentsContract;
+import android.Manifest.permission;
+import android.view.View;
+import android.view.LayoutInflater;
+
+import androidx.appcompat.app.AlertDialog;
+import android.os.Build;
+
+import java.io.File;
+
+import org.chromium.base.ContentUriUtils;
+import org.chromium.base.shared_preferences.SharedPreferencesManager;
+import org.chromium.base.task.AsyncTask;
+import org.chromium.chrome.R;
+import org.chromium.chrome.browser.document.ChromeLauncherActivity;
+import org.chromium.chrome.browser.IntentHandler;
+import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
+import org.chromium.chrome.browser.download.DownloadLocationDialogType;
+import org.chromium.chrome.browser.download.settings.DownloadLocationHelperImpl;
+import org.chromium.chrome.browser.download.dialogs.DownloadLocationDialogController;
+import org.chromium.chrome.browser.download.dialogs.DownloadLocationDialogCoordinator;
+import org.chromium.chrome.browser.download.dialogs.DownloadLocationCustomView;
+import org.chromium.chrome.browser.download.DirectoryOption;
+import org.chromium.chrome.browser.profiles.ProfileManager;
+import org.chromium.chrome.browser.preferences.ChromeSharedPreferences;
+import org.chromium.chrome.browser.flags.ChromeFeatureList;
+import org.chromium.ui.base.PageTransition;
+import org.chromium.ui.base.WindowAndroid;
+import org.chromium.ui.modelutil.PropertyModel;
+import org.chromium.ui.modaldialog.ModalDialogManager;
+import org.chromium.ui.modaldialog.ModalDialogProperties;
+import org.chromium.ui.modaldialog.DialogDismissalCause;
+import java.util.function.BiConsumer;
+
/**
* Provides the communication channel for Android to fetch and manipulate the bookmark model stored
* in native.
@@ -498,6 +540,245 @@ class BookmarkBridge {
@@ -52,6 +55,9 @@ class BookmarkBridge {
private boolean mIsNativeBookmarkModelLoaded;
private boolean mInitializedPartnerBookmarks;
+ private static final BiConsumer<Boolean, String> NOOP = (success, bookmarksPath) -> {};
+ private BiConsumer<Boolean, String> mOnExportedFunction = NOOP;
+
// Lazily set pseudo-constants. These should never change at runtime. Used to avoid crossing
// JNI to fetch information.
private @Nullable BookmarkId mRootFolderId;
@@ -498,6 +504,35 @@ class BookmarkBridge {
.getTotalBookmarkCount(mNativeBookmarkBridge, id.getId(), id.getType());
}
+ @CalledByNative
+ public void bookmarksExported(WindowAndroid window, String bookmarksPath, boolean success) {
+ Uri uri = Uri.parse(bookmarksPath);
+
+ if (success == false) {
+ ((Activity)window.getContext().get()).runOnUiThread(new Runnable() {
+ public void run() {
+ window.showError(R.string.saving_file_error);
+ }
+ });
+ } else {
+ SharedPreferencesManager sharedPrefs = ChromeSharedPreferences.getInstance();
+ sharedPrefs.writeString(ChromePreferenceKeys.BOOKMARKS_LAST_EXPORT_URI, bookmarksPath);
+
+ Context context = ContextUtils.getApplicationContext();
+
+ Intent intent = new Intent(Intent.ACTION_VIEW,
+ ContentUriUtils.isContentUri(bookmarksPath) ?
+ Uri.parse(bookmarksPath) : Uri.parse("file://" + bookmarksPath));
+ intent.putExtra(Browser.EXTRA_APPLICATION_ID,
+ context.getPackageName());
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ intent.putExtra(IntentHandler.EXTRA_PAGE_TRANSITION_TYPE, PageTransition.AUTO_BOOKMARK);
+
+ // If the bookmark manager is shown in a tab on a phone (rather than in a separate
+ // activity) the component name may be null. Send the intent through
+ // ChromeLauncherActivity instead to avoid crashing. See crbug.com/615012.
+ intent.setClass(context, ChromeLauncherActivity.class);
+
+ IntentHandler.startActivityForTrustedIntent(intent);
+ }
+ }
+
+ /**
+ * Import bookmarks from a selected file.
+ * @param window The current window of the bookmarks activity or page.
+ */
+ public void importBookmarks(WindowAndroid window) {
+ assert mIsNativeBookmarkModelLoaded;
+ BookmarkBridgeJni.get().importBookmarks(mNativeBookmarkBridge, BookmarkBridge.this, window);
+ BookmarkBridgeJni.get().importBookmarks(mNativeBookmarkBridge,
+ BookmarkBridge.this, window);
+ }
+
+ /**
+ * Export bookmarks to a path selected by the user.
+ * @param window The current window of the bookmarks activity or page.
+ */
+ public void exportBookmarks(WindowAndroid window, ModalDialogManager modalDialogManager) {
+ public void exportBookmarks(WindowAndroid window, String exportPath,
+ BiConsumer<Boolean, String> onExportedFunction) {
+ assert mIsNativeBookmarkModelLoaded;
+ if (ChromeFeatureList.isEnabled(ChromeFeatureList.BOOKMARKS_EXPORT_USESAF) ||
+ Build.VERSION.SDK_INT > Build.VERSION_CODES.Q)
+ exportBookmarksImplUseSaf(window);
+ else
+ exportBookmarksImplUseFile(window, modalDialogManager);
+ mOnExportedFunction = onExportedFunction;
+ BookmarkBridgeJni.get().exportBookmarks(mNativeBookmarkBridge,
+ BookmarkBridge.this, window, exportPath);
+ }
+
+ private void exportBookmarksImplUseSaf(WindowAndroid window) {
+ Context context = window.getContext().get();
+
+ // standard name for boorkmark file
+ final String standardBoorkmarkName = "bookmarks.html";
+
+ // use the fileSelector and saf asking user for the file
+ Intent fileSelector = new Intent(Intent.ACTION_CREATE_DOCUMENT);
+ fileSelector.addCategory(Intent.CATEGORY_OPENABLE);
+ fileSelector.setType("text/html");
+ fileSelector.putExtra(Intent.EXTRA_TITLE, standardBoorkmarkName);
+ fileSelector.setFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION |
+ Intent.FLAG_GRANT_READ_URI_PERMISSION |
+ Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
+
+ // get last exported uri path, if any
+ SharedPreferencesManager sharedPrefs = ChromeSharedPreferences.getInstance();
+ String bookmarksPath = sharedPrefs.readString(ChromePreferenceKeys.BOOKMARKS_LAST_EXPORT_URI, standardBoorkmarkName);
+ Uri lastSelectedUri = Uri.parse(bookmarksPath);
+
+ // prepare delegate for file selector
+ DialogInterface.OnClickListener onClickListener = new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int button) {
+ if (button == AlertDialog.BUTTON_NEGATIVE) {
+ window.showIntent(fileSelector,
+ new WindowAndroid.IntentCallback() {
+ @Override
+ public void onIntentCompleted(int resultCode, Intent data) {
+ if (data == null) return;
+ Uri filePath = data.getData();
+ doExportBookmarksImpl(window, filePath);
+ }
+ },
+ null);
+ } else {
+ if (dialog!=null) dialog.dismiss();
+ doExportBookmarksImpl(window, lastSelectedUri);
+ }
+ }
+ };
+
+ // as a workaround for https://issuetracker.google.com/issues/37136466
+ // ask to overwrite if is a valid uri and the file is present
+ if (DocumentsContract.isDocumentUri(context, lastSelectedUri)) {
+ AsyncTask<Void> checkUriTask = new AsyncTask<Void>() {
+ boolean uriExists = false;
+ String actualFilePath = null;
+
+ @Override
+ protected Void doInBackground() {
+ uriExists = ContentUriUtils.contentUriExists(lastSelectedUri.toString());
+ if (uriExists) {
+ actualFilePath = ContentUriUtils.getFilePathFromContentUri(lastSelectedUri);
+ // get real actual file name on disk
+ if (actualFilePath==null) actualFilePath = lastSelectedUri.toString();
+ // set file name to last exported file name
+ fileSelector.putExtra(Intent.EXTRA_TITLE,
+ ContentUriUtils.getDisplayName(lastSelectedUri, context,
+ DocumentsContract.Document.COLUMN_DISPLAY_NAME));
+ }
+ return null;
+ }
+
+ @Override
+ protected void onPostExecute(Void result) {
+ // check for permissions
+ if (uriExists) {
+ AlertDialog.Builder alert =
+ new AlertDialog.Builder(context, R.style.ThemeOverlay_BrowserUI_AlertDialog);
+ AlertDialog alertDialog =
+ alert.setTitle(R.string.export_bookmarks_alert_title)
+ .setMessage(context.getString(R.string.export_bookmarks_alert_message, actualFilePath))
+ .setPositiveButton(
+ R.string.export_bookmarks_alert_message_yes, onClickListener)
+ .setNegativeButton(R.string.export_bookmarks_alert_message_no, onClickListener)
+ .create();
+ alertDialog.getDelegate().setHandleNativeActionModesEnabled(false);
+
+ // show dialog asking for overwrite
+ alertDialog.show();
+ return;
+ } else {
+ onClickListener.onClick(null, AlertDialog.BUTTON_NEGATIVE);
+ }
+ }
+ };
+ checkUriTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+ return;
+ }
+
+ // actually open the file selector
+ onClickListener.onClick(null, AlertDialog.BUTTON_NEGATIVE);
+ }
+
+ private void doExportBookmarksImpl(WindowAndroid window, Uri filePath) {
+ ContentResolver resolver = ContextUtils.getApplicationContext().getContentResolver();
+ // since we want to persist the uri in settings, ask for persistable permissions
+ resolver.takePersistableUriPermission(filePath, Intent.FLAG_GRANT_WRITE_URI_PERMISSION |
+ Intent.FLAG_GRANT_READ_URI_PERMISSION);
+
+ BookmarkBridgeJni.get().exportBookmarks(mNativeBookmarkBridge, BookmarkBridge.this,
+ window, filePath.toString());
+ }
+
+ private void exportBookmarksImplUseFile(WindowAndroid window, ModalDialogManager modalDialogManager) {
+ Context context = window.getContext().get();
+
+ // standard name for boorkmark file
+ final String standardBoorkmarkName = "bookmarks.html";
+
+ // use the download ui and standard file saving
+ DownloadLocationDialogController controller = new DownloadLocationDialogController() {
+ @Override
+ public void onDownloadLocationDialogComplete(String returnedPath) {}
+
+ @Override
+ public void onDownloadLocationDialogCanceled() {}
+ };
+
+ DownloadLocationDialogCoordinator dialog = new DownloadLocationDialogCoordinator() {
+ @Override
+ protected void onDirectoryOptionsRetrieved(ArrayList<DirectoryOption> dirs) {
+ if (mDialogModel != null) return;
+
+ // Actually show the dialog.
+ mCustomView = (DownloadLocationCustomView) LayoutInflater.from(context).inflate(
+ R.layout.download_location_dialog, null);
+ mCustomView.initialize(DownloadLocationDialogType.DEFAULT, /*totalBytes*/ 0,
+ (isChecked) -> {},
+ new DownloadLocationHelperImpl(mProfile));
+ mCustomView.setTitle(context.getString(R.string.export_bookmarks_alert_title));
+ mCustomView.setFileName(standardBoorkmarkName);
+ mCustomView.mDontShowAgain.setVisibility(View.GONE);
+
+ Resources resources = context.getResources();
+ mDialogModel = new PropertyModel.Builder(ModalDialogProperties.ALL_KEYS)
+ .with(ModalDialogProperties.CONTROLLER, this)
+ .with(ModalDialogProperties.CUSTOM_VIEW, mCustomView)
+ .with(ModalDialogProperties.POSITIVE_BUTTON_TEXT, resources,
+ R.string.export_bookmarks)
+ .with(ModalDialogProperties.NEGATIVE_BUTTON_TEXT, resources,
+ R.string.cancel)
+ .build();
+
+ mModalDialogManager.showDialog(mDialogModel, ModalDialogManager.ModalDialogType.APP);
+ }
+
+ @Override
+ public void onDismiss(PropertyModel model, int dismissalCause) {
+ switch (dismissalCause) {
+ case DialogDismissalCause.POSITIVE_BUTTON_CLICKED:
+ {
+ String fileName = mCustomView.getFileName();
+ String directory = mCustomView.getDirectoryOption().location;
+ if (fileName != null && directory != null) {
+ File file = new File(directory, fileName);
+
+ if (window.hasPermission(permission.WRITE_EXTERNAL_STORAGE)) {
+ BookmarkBridgeJni.get().exportBookmarks(mNativeBookmarkBridge,
+ BookmarkBridge.this, window, file.getPath());
+ } else {
+ String[] requestPermissions = new String[] {permission.WRITE_EXTERNAL_STORAGE};
+ window.requestPermissions(requestPermissions, (permissions, grantResults) -> {
+ if (grantResults.length >= 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+ BookmarkBridgeJni.get().exportBookmarks(mNativeBookmarkBridge,
+ BookmarkBridge.this, window, file.getPath());
+ }
+ });
+ };
+ }
+ }
+ break;
+ }
+ mDialogModel = null;
+ mCustomView = null;
+ }
+ };
+ dialog.initialize(controller);
+ dialog.showDialog(context, modalDialogManager, /*totalBytes*/ 0,
+ DownloadLocationDialogType.DEFAULT, /*suggestedPath*/ "",
+ ProfileManager.getLastUsedRegularProfile());
+ @CalledByNative
+ public void bookmarksExported(WindowAndroid window, String bookmarksPath, boolean success) {
+ BiConsumer<Boolean, String> action = mOnExportedFunction
+ .andThen((x, y) -> mOnExportedFunction = NOOP);
+ action.accept(success, bookmarksPath);
+ }
+
/**
* Synchronously gets a list of bookmarks that match the specified search query.
*
@@ -1120,6 +1401,10 @@ class BookmarkBridge {
@@ -1120,6 +1155,10 @@ class BookmarkBridge {
void getChildIds(
long nativeBookmarkBridge, long id, int type, List<BookmarkId> bookmarksList);
@@ -1029,7 +794,55 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows
import org.chromium.ui.accessibility.AccessibilityState;
import org.chromium.ui.listmenu.ListMenu;
import org.chromium.ui.listmenu.ListMenuItemProperties;
@@ -84,6 +86,9 @@ class BookmarkManagerMediator
@@ -75,6 +77,47 @@ import java.util.function.BooleanSupplier;
import java.util.function.Consumer;
import java.util.function.Predicate;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.DialogInterface;
+import android.content.res.Resources;
+import android.content.ContentResolver;
+import android.net.Uri;
+import android.provider.Browser;
+import android.provider.DocumentsContract;
+import android.Manifest.permission;
+import android.view.View;
+import android.view.LayoutInflater;
+
+import androidx.appcompat.app.AlertDialog;
+import android.os.Build;
+
+import java.io.File;
+
+import org.chromium.base.ContextUtils;
+import org.chromium.base.ContentUriUtils;
+import org.chromium.base.shared_preferences.SharedPreferencesManager;
+import org.chromium.base.task.AsyncTask;
+import org.chromium.chrome.R;
+import org.chromium.chrome.browser.document.ChromeLauncherActivity;
+import org.chromium.chrome.browser.IntentHandler;
+import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
+import org.chromium.chrome.browser.download.DownloadLocationDialogType;
+import org.chromium.chrome.browser.download.settings.DownloadLocationHelperImpl;
+import org.chromium.chrome.browser.download.dialogs.DownloadLocationDialogController;
+import org.chromium.chrome.browser.download.dialogs.DownloadLocationDialogCoordinator;
+import org.chromium.chrome.browser.download.dialogs.DownloadLocationCustomView;
+import org.chromium.chrome.browser.download.DirectoryOption;
+import org.chromium.chrome.browser.profiles.ProfileManager;
+import org.chromium.chrome.browser.preferences.ChromeSharedPreferences;
+import org.chromium.chrome.browser.flags.ChromeFeatureList;
+import org.chromium.ui.base.PageTransition;
+import org.chromium.ui.base.WindowAndroid;
+import org.chromium.ui.modelutil.PropertyModel;
+import org.chromium.ui.modaldialog.ModalDialogManager;
+import org.chromium.ui.modaldialog.ModalDialogProperties;
+import org.chromium.ui.modaldialog.DialogDismissalCause;
+
/** Responsible for BookmarkManager business logic. */
// TODO(crbug.com/40256938): Remove BookmarkDelegate if possible.
class BookmarkManagerMediator
@@ -84,6 +127,9 @@ class BookmarkManagerMediator
private static boolean sPreventLoadingForTesting;
@@ -1039,7 +852,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows
/** Keeps track of whether drag is enabled / active for bookmark lists. */
private class BookmarkDragStateDelegate implements DragStateDelegate {
private BookmarkDelegate mBookmarkDelegate;
@@ -573,6 +578,14 @@ class BookmarkManagerMediator
@@ -573,6 +619,14 @@ class BookmarkManagerMediator
mNativePage = nativePage;
}
@@ -1054,7 +867,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows
/** See BookmarkManager(Coordinator)#updateForUrl */
void updateForUrl(String url) {
// Bookmark model is null if the manager has been destroyed.
@@ -748,6 +761,16 @@ class BookmarkManagerMediator
@@ -748,6 +802,235 @@ class BookmarkManagerMediator
}
}
@@ -1065,7 +878,226 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows
+
+ @Override
+ public void exportBookmarks() {
+ mBookmarkModel.exportBookmarks(mWindowAndroid, mModalDialogManager);
+ if (ChromeFeatureList.isEnabled(ChromeFeatureList.BOOKMARKS_EXPORT_USESAF) ||
+ Build.VERSION.SDK_INT > Build.VERSION_CODES.Q) {
+ exportBookmarksImplUseSaf();
+ } else {
+ exportBookmarksImplUseFile();
+ }
+ }
+
+ private void exportBookmarksImplUseSaf() {
+ Context context = mWindowAndroid.getContext().get();
+
+ // standard name for boorkmark file
+ final String standardBoorkmarkName = "bookmarks.html";
+
+ // use the fileSelector and saf asking user for the file
+ Intent fileSelector = new Intent(Intent.ACTION_CREATE_DOCUMENT);
+ fileSelector.addCategory(Intent.CATEGORY_OPENABLE);
+ fileSelector.setType("text/html");
+ fileSelector.putExtra(Intent.EXTRA_TITLE, standardBoorkmarkName);
+ fileSelector.setFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION |
+ Intent.FLAG_GRANT_READ_URI_PERMISSION |
+ Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
+
+ // get last exported uri path, if any
+ SharedPreferencesManager sharedPrefs = ChromeSharedPreferences.getInstance();
+ String bookmarksPath = sharedPrefs.readString(ChromePreferenceKeys.BOOKMARKS_LAST_EXPORT_URI, standardBoorkmarkName);
+ Uri lastSelectedUri = Uri.parse(bookmarksPath);
+
+ // prepare delegate for file selector
+ DialogInterface.OnClickListener onClickListener = new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int button) {
+ if (button == AlertDialog.BUTTON_NEGATIVE) {
+ mWindowAndroid.showIntent(fileSelector,
+ new WindowAndroid.IntentCallback() {
+ @Override
+ public void onIntentCompleted(int resultCode, Intent data) {
+ if (data == null) return;
+ Uri filePath = data.getData();
+ doExportBookmarksImpl(filePath);
+ }
+ },
+ null);
+ } else {
+ if (dialog!=null) dialog.dismiss();
+ doExportBookmarksImpl(lastSelectedUri);
+ }
+ }
+ };
+
+ // as a workaround for https://issuetracker.google.com/issues/37136466
+ // ask to overwrite if is a valid uri and the file is present
+ if (DocumentsContract.isDocumentUri(context, lastSelectedUri)) {
+ AsyncTask<Void> checkUriTask = new AsyncTask<Void>() {
+ boolean uriExists = false;
+ String actualFilePath = null;
+
+ @Override
+ protected Void doInBackground() {
+ uriExists = ContentUriUtils.contentUriExists(lastSelectedUri.toString());
+ if (uriExists) {
+ actualFilePath = ContentUriUtils.getFilePathFromContentUri(lastSelectedUri);
+ // get real actual file name on disk
+ if (actualFilePath==null) actualFilePath = lastSelectedUri.toString();
+ // set file name to last exported file name
+ fileSelector.putExtra(Intent.EXTRA_TITLE,
+ ContentUriUtils.getDisplayName(lastSelectedUri, context,
+ DocumentsContract.Document.COLUMN_DISPLAY_NAME));
+ }
+ return null;
+ }
+
+ @Override
+ protected void onPostExecute(Void result) {
+ // check for permissions
+ if (uriExists) {
+ AlertDialog.Builder alert =
+ new AlertDialog.Builder(context, R.style.ThemeOverlay_BrowserUI_AlertDialog);
+ AlertDialog alertDialog =
+ alert.setTitle(R.string.export_bookmarks_alert_title)
+ .setMessage(context.getString(R.string.export_bookmarks_alert_message, actualFilePath))
+ .setPositiveButton(
+ R.string.export_bookmarks_alert_message_yes, onClickListener)
+ .setNegativeButton(R.string.export_bookmarks_alert_message_no, onClickListener)
+ .create();
+ alertDialog.getDelegate().setHandleNativeActionModesEnabled(false);
+
+ // show dialog asking for overwrite
+ alertDialog.show();
+ return;
+ } else {
+ onClickListener.onClick(null, AlertDialog.BUTTON_NEGATIVE);
+ }
+ }
+ };
+ checkUriTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+ return;
+ }
+
+ // actually open the file selector
+ onClickListener.onClick(null, AlertDialog.BUTTON_NEGATIVE);
+ }
+
+ private void exportBookmarksImplUseFile() {
+ Context context = mWindowAndroid.getContext().get();
+
+ // standard name for boorkmark file
+ final String standardBoorkmarkName = "bookmarks.html";
+
+ // use the download ui and standard file saving
+ DownloadLocationDialogController controller = new DownloadLocationDialogController() {
+ @Override
+ public void onDownloadLocationDialogComplete(String returnedPath) {}
+
+ @Override
+ public void onDownloadLocationDialogCanceled() {}
+ };
+
+ DownloadLocationDialogCoordinator dialog = new DownloadLocationDialogCoordinator() {
+ @Override
+ protected void onDirectoryOptionsRetrieved(ArrayList<DirectoryOption> dirs) {
+ if (mDialogModel != null) return;
+
+ // Actually show the dialog.
+ mCustomView = (DownloadLocationCustomView) LayoutInflater.from(context).inflate(
+ R.layout.download_location_dialog, null);
+ mCustomView.initialize(DownloadLocationDialogType.DEFAULT, /*totalBytes*/ 0,
+ (isChecked) -> {},
+ new DownloadLocationHelperImpl(mProfile));
+ mCustomView.setTitle(context.getString(R.string.export_bookmarks_alert_title));
+ mCustomView.setFileName(standardBoorkmarkName);
+ mCustomView.mDontShowAgain.setVisibility(View.GONE);
+
+ Resources resources = context.getResources();
+ mDialogModel = new PropertyModel.Builder(ModalDialogProperties.ALL_KEYS)
+ .with(ModalDialogProperties.CONTROLLER, this)
+ .with(ModalDialogProperties.CUSTOM_VIEW, mCustomView)
+ .with(ModalDialogProperties.POSITIVE_BUTTON_TEXT, resources,
+ R.string.export_bookmarks)
+ .with(ModalDialogProperties.NEGATIVE_BUTTON_TEXT, resources,
+ R.string.cancel)
+ .build();
+
+ mModalDialogManager.showDialog(mDialogModel, ModalDialogManager.ModalDialogType.APP);
+ }
+
+ @Override
+ public void onDismiss(PropertyModel model, int dismissalCause) {
+ switch (dismissalCause) {
+ case DialogDismissalCause.POSITIVE_BUTTON_CLICKED:
+ {
+ String fileName = mCustomView.getFileName();
+ String directory = mCustomView.getDirectoryOption().location;
+ if (fileName != null && directory != null) {
+ File file = new File(directory, fileName);
+
+ if (mWindowAndroid.hasPermission(permission.WRITE_EXTERNAL_STORAGE)) {
+ doExportBookmarksImpl(file.getPath());
+ } else {
+ String[] requestPermissions = new String[] {permission.WRITE_EXTERNAL_STORAGE};
+ mWindowAndroid.requestPermissions(requestPermissions, (permissions, grantResults) -> {
+ if (grantResults.length >= 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+ doExportBookmarksImpl(file.getPath());
+ }
+ });
+ };
+ }
+ }
+ break;
+ }
+ mDialogModel = null;
+ mCustomView = null;
+ }
+ };
+ dialog.initialize(controller);
+ dialog.showDialog(context, mModalDialogManager, /*totalBytes*/ 0,
+ DownloadLocationDialogType.DEFAULT, /*suggestedPath*/ "",
+ ProfileManager.getLastUsedRegularProfile());
+ }
+
+ private void doExportBookmarksImpl(Uri filePath) {
+ ContentResolver resolver = ContextUtils.getApplicationContext().getContentResolver();
+ // since we want to persist the uri in settings, ask for persistable permissions
+ resolver.takePersistableUriPermission(filePath, Intent.FLAG_GRANT_WRITE_URI_PERMISSION |
+ Intent.FLAG_GRANT_READ_URI_PERMISSION);
+
+ doExportBookmarksImpl(filePath.toString());
+ }
+
+ private void doExportBookmarksImpl(String filePath) {
+ mBookmarkModel.exportBookmarks(mWindowAndroid, filePath,
+ (success, bookmarksPath) -> {
+ if (!success) {
+ ((Activity)mWindowAndroid.getContext().get()).runOnUiThread(new Runnable() {
+ public void run() {
+ mWindowAndroid.showError(R.string.saving_file_error);
+ }
+ });
+ } else {
+ SharedPreferencesManager sharedPrefs = ChromeSharedPreferences.getInstance();
+ sharedPrefs.writeString(ChromePreferenceKeys.BOOKMARKS_LAST_EXPORT_URI, bookmarksPath);
+
+ Context context = ContextUtils.getApplicationContext();
+
+ Intent intent = new Intent(Intent.ACTION_VIEW,
+ ContentUriUtils.isContentUri(bookmarksPath) ?
+ Uri.parse(bookmarksPath) : Uri.parse("file://" + bookmarksPath));
+ intent.putExtra(Browser.EXTRA_APPLICATION_ID,
+ context.getPackageName());
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ intent.putExtra(IntentHandler.EXTRA_PAGE_TRANSITION_TYPE, PageTransition.AUTO_BOOKMARK);
+
+ // If the bookmark manager is shown in a tab on a phone (rather than in a separate
+ // activity) the component name may be null. Send the intent through
+ // ChromeLauncherActivity instead to avoid crashing. See crbug.com/615012.
+ intent.setClass(context, ChromeLauncherActivity.class);
+
+ IntentHandler.startActivityForTrustedIntent(intent);
+ }
+ });
+ }
+
@Override
@@ -1107,7 +1139,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows
diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbar.java b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbar.java
--- a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbar.java
+++ b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbar.java
@@ -97,6 +97,17 @@ public class BookmarkToolbar extends SelectableListToolbar<BookmarkId>
@@ -96,6 +96,17 @@ public class BookmarkToolbar extends SelectableListToolbar<BookmarkId>
setOnMenuItemClickListener(dragEnabled ? null : this);
}
@@ -1125,7 +1157,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows
void setEditButtonVisible(boolean visible) {
mEditButtonVisible = visible;
getMenu().findItem(R.id.edit_menu_id).setVisible(visible);
@@ -173,6 +184,13 @@ public class BookmarkToolbar extends SelectableListToolbar<BookmarkId>
@@ -172,6 +183,13 @@ public class BookmarkToolbar extends SelectableListToolbar<BookmarkId>
void setCurrentFolder(BookmarkId folder) {
mCurrentFolder = mBookmarkModel.getBookmarkById(folder);
@@ -1139,7 +1171,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows
}
void setNavigateBackRunnable(Runnable navigateBackRunnable) {
@@ -192,6 +210,13 @@ public class BookmarkToolbar extends SelectableListToolbar<BookmarkId>
@@ -191,6 +209,13 @@ public class BookmarkToolbar extends SelectableListToolbar<BookmarkId>
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
hideOverflowMenu();
@@ -1153,7 +1185,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows
return mMenuIdClickedFunction.apply(menuItem.getItemId());
}
@@ -207,6 +232,9 @@ public class BookmarkToolbar extends SelectableListToolbar<BookmarkId>
@@ -206,6 +231,9 @@ public class BookmarkToolbar extends SelectableListToolbar<BookmarkId>
protected void showNormalView() {
super.showNormalView();
@@ -4,32 +4,32 @@ Subject: Add menu item to bookmark all tabs
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
chrome/android/java/res/menu/main_menu.xml | 7 ++
.../chrome/browser/ChromeTabbedActivity.java | 24 +++++++
.../bookmarks/android/bookmark_bridge.cc | 42 ++++++++++++
.../bookmarks/android/bookmark_bridge.h | 8 +++
.../browser/bookmarks/BookmarkBridge.java | 66 +++++++++++++++++++
.../browser/bookmarks/bookmark_html_writer.cc | 14 +++-
.../bookmark_merged_surface_service.cc | 3 +
chrome/android/java/res/menu/main_menu.xml | 7 +++
.../chrome/browser/ChromeTabbedActivity.java | 43 +++++++++++++++++++
.../bookmarks/android/bookmark_bridge.cc | 42 ++++++++++++++++++
.../bookmarks/android/bookmark_bridge.h | 8 ++++
.../browser/bookmarks/BookmarkBridge.java | 41 ++++++++++++++++++
.../browser/bookmarks/bookmark_html_writer.cc | 14 +++++-
.../bookmark_merged_surface_service.cc | 3 ++
.../permanent_folder_ordering_tracker.cc | 2 +
.../dialogs/DownloadLocationCustomView.java | 4 +-
.../strings/android_chrome_strings.grd | 3 +
.../strings/android_chrome_strings.grd | 3 ++
.../bookmark_ui_operations_helper.cc | 2 +
components/bookmark_bar_strings.grdp | 6 ++
.../bookmarks/browser/bookmark_codec.cc | 20 +++++-
components/bookmarks/browser/bookmark_codec.h | 7 +-
.../browser/bookmark_load_details.cc | 14 +++-
components/bookmark_bar_strings.grdp | 6 +++
.../bookmarks/browser/bookmark_codec.cc | 20 +++++++--
components/bookmarks/browser/bookmark_codec.h | 7 ++-
.../browser/bookmark_load_details.cc | 14 ++++--
.../bookmarks/browser/bookmark_load_details.h | 2 +
.../bookmarks/browser/bookmark_model.cc | 3 +-
components/bookmarks/browser/bookmark_model.h | 7 ++
components/bookmarks/browser/bookmark_node.cc | 11 ++++
components/bookmarks/browser/bookmark_node.h | 3 +
components/bookmarks/browser/bookmark_model.h | 7 +++
components/bookmarks/browser/bookmark_node.cc | 11 +++++
components/bookmarks/browser/bookmark_node.h | 3 ++
.../bookmarks/browser/bookmark_storage.cc | 2 +
.../bookmarks/browser/bookmark_uuids.cc | 3 +
.../bookmarks/browser/bookmark_uuids.cc | 3 ++
components/bookmarks/browser/bookmark_uuids.h | 1 +
components/bookmarks/browser/model_loader.cc | 8 ++-
components/bookmarks/browser/model_loader.cc | 8 +++-
.../bookmark_specifics_conversions.cc | 1 +
25 files changed, 249 insertions(+), 14 deletions(-)
25 files changed, 243 insertions(+), 14 deletions(-)
diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/res/menu/main_menu.xml
--- a/chrome/android/java/res/menu/main_menu.xml
@@ -66,7 +66,25 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct
import org.chromium.chrome.browser.compositor.layouts.Layout;
import org.chromium.chrome.browser.compositor.layouts.LayoutManagerChrome;
import org.chromium.chrome.browser.compositor.layouts.LayoutManagerChromePhone;
@@ -3102,6 +3103,8 @@ public class ChromeTabbedActivity extends ChromeActivity implements MismatchedIn
@@ -253,12 +254,17 @@ import org.chromium.chrome.browser.ui.RootUiCoordinator;
import org.chromium.chrome.browser.ui.appmenu.AppMenuPropertiesDelegate;
import org.chromium.chrome.browser.ui.desktop_windowing.AppHeaderUtils;
import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeUtils;
+import org.chromium.chrome.browser.ui.messages.snackbar.Snackbar;
+import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager;
+import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager.SnackbarController;
import org.chromium.chrome.browser.ui.searchactivityutils.SearchActivityClient;
import org.chromium.chrome.browser.ui.searchactivityutils.SearchActivityExtras.IntentOrigin;
import org.chromium.chrome.browser.undo_tab_close_snackbar.UndoBarController;
import org.chromium.chrome.browser.usage_stats.UsageStatsService;
import org.chromium.chrome.browser.util.ChromeAccessibilityUtil;
import org.chromium.chrome.browser.xr.XrLayoutStateObserver;
+import org.chromium.components.bookmarks.BookmarkId;
+import org.chromium.components.bookmarks.BookmarkItem;
import org.chromium.components.browser_ui.bottomsheet.BottomSheetController;
import org.chromium.components.browser_ui.edge_to_edge.SystemBarColorHelper;
import org.chromium.components.browser_ui.edge_to_edge.TabbedSystemBarColorHelper;
@@ -3103,6 +3109,8 @@ public class ChromeTabbedActivity extends ChromeActivity implements MismatchedIn
getTabModelSelectorSupplier().get(),
closeAllTabsRunnable);
RecordUserAction.record("MobileMenuCloseAllTabs");
@@ -75,7 +93,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct
} else if (id == R.id.close_all_incognito_tabs_menu_id) {
// Close only incognito tabs
Runnable closeAllTabsRunnable =
@@ -3190,6 +3193,27 @@ public class ChromeTabbedActivity extends ChromeActivity implements MismatchedIn
@@ -3191,6 +3199,41 @@ public class ChromeTabbedActivity extends ChromeActivity implements MismatchedIn
getTabModalLifetimeHandler().onOmniboxFocusChanged(hasFocus);
}
@@ -94,9 +112,23 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct
+ if (tab.isNativePage()) {
+ continue;
+ }
+ bookmarkModel.addToTabsCollection(this, tab);
+ bookmarkModel.addToTabsCollection(tab);
+ }
+ bookmarkModel.finishedAddingToTabsCollection(this, getSnackbarManager());
+ BookmarkId parent = bookmarkModel.getTabsCollectionFolderId();
+ BookmarkItem bookmarkItem = bookmarkModel.getBookmarkById(parent);
+ String folderName = "";
+ if (bookmarkItem != null) {
+ folderName = bookmarkItem.getTitle();
+ }
+ SnackbarController snackbarController = new SnackbarController() {
+ @Override
+ public void onAction(Object actionData) {
+ }
+ };
+ Snackbar snackbar = Snackbar.make(folderName, snackbarController, Snackbar.TYPE_ACTION,
+ Snackbar.UMA_BOOKMARK_ADDED)
+ .setTemplateText(getString(R.string.bookmark_page_saved_folder));
+ getSnackbarManager().showSnackbar(snackbar);
+ });
+ }
+
@@ -212,19 +244,15 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows
import org.chromium.base.ObserverList;
import org.chromium.base.ThreadUtils;
import org.chromium.base.metrics.RecordUserAction;
@@ -26,6 +27,11 @@ import org.chromium.chrome.browser.partnerbookmarks.PartnerBookmarksShim;
@@ -26,6 +27,7 @@ import org.chromium.chrome.browser.partnerbookmarks.PartnerBookmarksShim;
import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
import org.chromium.chrome.browser.preferences.ChromeSharedPreferences;
import org.chromium.chrome.browser.profiles.Profile;
+import org.chromium.chrome.browser.tab.Tab;
+import org.chromium.chrome.browser.ui.messages.snackbar.Snackbar;
+import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager;
+import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager.SnackbarController;
+import org.chromium.chrome.R;
import org.chromium.components.bookmarks.BookmarkId;
import org.chromium.components.bookmarks.BookmarkItem;
import org.chromium.components.bookmarks.BookmarkType;
@@ -85,6 +91,7 @@ import org.chromium.ui.modaldialog.DialogDismissalCause;
@@ -46,6 +48,7 @@ import java.util.function.BiConsumer;
class BookmarkBridge {
private static OneshotSupplierImpl<BookmarkModel.PartnerBookmarkIteratorProvider>
sPartnerBookmarkIteratorSupplier = new OneshotSupplierImpl<>();
@@ -232,7 +260,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows
private final ObserverList<BookmarkModelObserver> mObservers = new ObserverList<>();
private final Profile mProfile;
@@ -419,6 +426,16 @@ class BookmarkBridge {
@@ -383,6 +386,16 @@ class BookmarkBridge {
return mMobileFolderId;
}
@@ -249,12 +277,12 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows
/** Returns Id representing the special "other" folder from bookmark model. */
public BookmarkId getOtherFolderId() {
ThreadUtils.assertOnUiThread();
@@ -1140,6 +1157,50 @@ class BookmarkBridge {
@@ -894,6 +907,29 @@ class BookmarkBridge {
.addToReadingList(mNativeBookmarkBridge, parentId, title, url);
}
+ // Used to bookmark all tabs in a specific folder, created if not existing
+ public BookmarkId addToTabsCollection(Context context, Tab tab) {
+ public BookmarkId addToTabsCollection(Tab tab) {
+ BookmarkId parent = getTabsCollectionFolderId();
+ BookmarkId existingId = BookmarkBridgeJni.get().getBookmarkIdForTabsCollection(
+ mNativeBookmarkBridge, tab.getOriginalUrl());
@@ -275,32 +303,11 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows
+ }
+ return bookmarkId;
+ }
+
+ public void finishedAddingToTabsCollection(Activity activity, SnackbarManager snackbarManager) {
+ BookmarkId parent = getTabsCollectionFolderId();
+
+ BookmarkItem bookmarkItem = getBookmarkById(parent);
+ String folderName;
+ if (bookmarkItem != null) {
+ folderName = bookmarkItem.getTitle();
+ } else {
+ folderName = "";
+ }
+ SnackbarController snackbarController = new SnackbarController() {
+ @Override
+ public void onAction(Object actionData) {
+ }
+ };
+ Snackbar snackbar = Snackbar.make(folderName, snackbarController, Snackbar.TYPE_ACTION,
+ Snackbar.UMA_BOOKMARK_ADDED)
+ .setTemplateText(activity.getString(R.string.bookmark_page_saved_folder));
+ snackbarManager.showSnackbar(snackbar);
+ }
+
/**
* Helper method to mark an item as read.
*
@@ -1357,6 +1418,9 @@ class BookmarkBridge {
@@ -1111,6 +1147,9 @@ class BookmarkBridge {
BookmarkId getMostRecentlyAddedUserBookmarkIdForUrl(
long nativeBookmarkBridge, @JniType("GURL") GURL url);
@@ -310,7 +317,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows
BookmarkItem getBookmarkById(long nativeBookmarkBridge, long id, int type);
void getTopLevelFolderIds(
@@ -1378,6 +1442,8 @@ class BookmarkBridge {
@@ -1132,6 +1171,8 @@ class BookmarkBridge {
BookmarkId getRootFolderId(long nativeBookmarkBridge);
@@ -32,14 +32,14 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/homepage/Homepa
diff --git a/chrome/browser/partnerbookmarks/android/java/src/org/chromium/chrome/browser/partnerbookmarks/PartnerBookmarksProviderIterator.java b/chrome/browser/partnerbookmarks/android/java/src/org/chromium/chrome/browser/partnerbookmarks/PartnerBookmarksProviderIterator.java
--- a/chrome/browser/partnerbookmarks/android/java/src/org/chromium/chrome/browser/partnerbookmarks/PartnerBookmarksProviderIterator.java
+++ b/chrome/browser/partnerbookmarks/android/java/src/org/chromium/chrome/browser/partnerbookmarks/PartnerBookmarksProviderIterator.java
@@ -65,6 +65,7 @@ public class PartnerBookmarksProviderIterator implements PartnerBookmark.Bookmar
* @param callback The callback to receive the result.
*/
public static void createIfAvailable(Callback<@Nullable BookmarkIterator> callback) {
+ if ((true)) return null;
@@ -68,6 +68,7 @@ public class PartnerBookmarksProviderIterator implements PartnerBookmark.Bookmar
new AsyncTask<@Nullable Cursor>() {
@Override
protected @Nullable Cursor doInBackground() {
+ if ((true)) return null;
try {
return ContextUtils.getApplicationContext()
.getContentResolver()
diff --git a/chrome/browser/partnercustomizations/java/src/org/chromium/chrome/browser/partnercustomizations/PartnerBrowserCustomizations.java b/chrome/browser/partnercustomizations/java/src/org/chromium/chrome/browser/partnercustomizations/PartnerBrowserCustomizations.java
--- a/chrome/browser/partnercustomizations/java/src/org/chromium/chrome/browser/partnercustomizations/PartnerBrowserCustomizations.java
+++ b/chrome/browser/partnercustomizations/java/src/org/chromium/chrome/browser/partnercustomizations/PartnerBrowserCustomizations.java
@@ -37,11 +37,11 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
.../skia/src/ports/SkFontConfigInterface.cpp | 4 +
.../ports/SkFontConfigInterface_direct.cpp | 5 +
.../src/ports/SkFontConfigInterface_direct.h | 1 +
.../skia/src/ports/SkFontMgr_android.cpp | 277 ++-
.../skia/src/ports/SkFontMgr_android.cpp | 278 ++-
.../skia/src/ports/SkFontMgr_android_data.cpp | 1640 +++++++++++++++++
.../src/ports/SkFontMgr_android_parser.cpp | 49 +-
.../skia/src/ports/SkFontMgr_android_parser.h | 5 +-
35 files changed, 2406 insertions(+), 79 deletions(-)
35 files changed, 2407 insertions(+), 79 deletions(-)
create mode 100644 chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Android-fonts-fingerprinting-mitigation.grdp
create mode 100644 components/component_updater/installer_policies/fonts_pack_component_installer.cc
create mode 100644 components/component_updater/installer_policies/fonts_pack_component_installer.h
@@ -1069,7 +1069,7 @@ diff --git a/third_party/skia/src/ports/SkFontMgr_android.cpp b/third_party/skia
const SkString* cannonicalFamilyName = nullptr;
if (!family.fNames.empty()) {
cannonicalFamilyName = &family.fNames[0];
@@ -119,38 +206,59 @@ public:
@@ -119,38 +206,60 @@ public:
// TODO? make this lazy
for (int i = 0; i < family.fFonts.size(); ++i) {
@@ -1101,6 +1101,7 @@ diff --git a/third_party/skia/src/ports/SkFontMgr_android.cpp b/third_party/skia
+
+ std::unique_ptr<SkStreamAsset> stream;
+ if (!custom && !fontFile.fFileName.startsWith('#')) {
+ std::unique_ptr<SkStreamAsset>* streamPtr = streamForPath.find(pathName);
+ if (!streamPtr) {
+ streamPtr = streamForPath.set(pathName, SkStream::MakeFromFile(pathName.c_str()));
+ }
@@ -1108,7 +1109,7 @@ diff --git a/third_party/skia/src/ports/SkFontMgr_android.cpp b/third_party/skia
+ SkDEBUGF("Requested font file %s cannot be opened.\n", pathName.c_str());
+ continue;
+ }
+ std::unique_ptr<SkStreamAsset> stream = (*streamPtr)->duplicate();
+ stream = (*streamPtr)->duplicate();
+ if (!stream) {
+ SkDEBUGF("Requested font file %s could not be duplicated.\n", pathName.c_str());
+ continue;
@@ -1152,7 +1153,7 @@ diff --git a/third_party/skia/src/ports/SkFontMgr_android.cpp b/third_party/skia
}
uint32_t variant = family.fVariant;
@@ -161,13 +269,25 @@ public:
@@ -161,13 +270,25 @@ public:
// The first specified family name overrides the family name found in the font.
// TODO: SkTypeface_AndroidSystem::onCreateFamilyNameIterator should return
// all of the specified family names in addition to the names found in the font.
@@ -1184,7 +1185,7 @@ diff --git a/third_party/skia/src/ports/SkFontMgr_android.cpp b/third_party/skia
int weight = fontFile.fWeight != 0 ? fontFile.fWeight : fontStyle.weight();
SkFontStyle::Slant slant = fontStyle.slant();
switch (fontFile.fStyle) {
@@ -178,6 +298,19 @@ public:
@@ -178,6 +299,19 @@ public:
}
fontStyle = SkFontStyle(weight, fontStyle.width(), slant);
@@ -1204,7 +1205,7 @@ diff --git a/third_party/skia/src/ports/SkFontMgr_android.cpp b/third_party/skia
fStyles.push_back(
SkTypeface_AndroidSystem::Make(proxy,
fontStyle, proxy->isFixedPitch(),
@@ -206,15 +339,18 @@ public:
@@ -206,15 +340,18 @@ public:
return fStyles[index];
}
@@ -1226,7 +1227,7 @@ diff --git a/third_party/skia/src/ports/SkFontMgr_android.cpp b/third_party/skia
SkString fFallbackFor;
friend struct NameToFamily;
@@ -235,24 +371,26 @@ struct NameToFamily {
@@ -235,24 +372,26 @@ struct NameToFamily {
class SkFontMgr_Android : public SkFontMgr {
public:
@@ -1257,7 +1258,7 @@ diff --git a/third_party/skia/src/ports/SkFontMgr_android.cpp b/third_party/skia
}
this->buildNameToFamilyMap(families, custom ? custom->fIsolated : false);
this->findDefaultStyleSet();
@@ -310,33 +448,53 @@ protected:
@@ -310,33 +449,53 @@ protected:
return sset->matchStyle(style);
}
@@ -1326,7 +1327,7 @@ diff --git a/third_party/skia/src/ports/SkFontMgr_android.cpp b/third_party/skia
}
}
return nullptr;
@@ -359,7 +517,7 @@ protected:
@@ -359,7 +518,7 @@ protected:
for (int bcp47Index = bcp47Count; bcp47Index --> 0;) {
SkLanguage lang(bcp47[bcp47Index]);
while (!lang.getTag().isEmpty()) {
@@ -1335,7 +1336,7 @@ diff --git a/third_party/skia/src/ports/SkFontMgr_android.cpp b/third_party/skia
find_family_style_character(currentFamilyName, fFallbackNameToFamilyMap,
style, SkToBool(elegant),
lang.getTag(), character);
@@ -370,7 +528,7 @@ protected:
@@ -370,7 +529,7 @@ protected:
lang = lang.getParent();
}
}
@@ -1344,7 +1345,7 @@ diff --git a/third_party/skia/src/ports/SkFontMgr_android.cpp b/third_party/skia
find_family_style_character(currentFamilyName, fFallbackNameToFamilyMap,
style, SkToBool(elegant),
SkString(), character);
@@ -421,6 +579,7 @@ protected:
@@ -421,6 +580,7 @@ protected:
private:
std::unique_ptr<SkFontScanner> fScanner;
@@ -1352,7 +1353,7 @@ diff --git a/third_party/skia/src/ports/SkFontMgr_android.cpp b/third_party/skia
TArray<sk_sp<SkFontStyleSet_Android>> fStyleSets;
sk_sp<SkFontStyleSet> fDefaultStyleSet;
@@ -442,7 +601,7 @@ private:
@@ -442,7 +602,7 @@ private:
}
sk_sp<SkFontStyleSet_Android> newSet =
@@ -1361,7 +1362,7 @@ diff --git a/third_party/skia/src/ports/SkFontMgr_android.cpp b/third_party/skia
if (0 == newSet->count()) {
return;
}
@@ -487,11 +646,11 @@ static char const * const gSystemFontUseStrings[] = {
@@ -487,11 +647,11 @@ static char const * const gSystemFontUseStrings[] = {
} // namespace
@@ -1376,7 +1377,7 @@ diff --git a/third_party/skia/src/ports/SkFontMgr_android.cpp b/third_party/skia
if (custom) {
SkASSERT(0 <= custom->fSystemFontUse);
SkASSERT(custom->fSystemFontUse < std::size(gSystemFontUseStrings));
@@ -501,5 +660,5 @@ sk_sp<SkFontMgr> SkFontMgr_New_Android(const SkFontMgr_Android_CustomFonts* cust
@@ -501,5 +661,5 @@ sk_sp<SkFontMgr> SkFontMgr_New_Android(const SkFontMgr_Android_CustomFonts* cust
custom->fFontsXml,
custom->fFallbackFontsXml);
}
+130 -33
View File
@@ -35,11 +35,13 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
.../omaha/inline/InlineUpdateController.java | 57 ++++
.../safety_hub/SafetyHubFetchService.java | 5 -
.../strings/android_chrome_strings.grd | 23 +-
.../endpoint_fetcher/endpoint_fetcher.cc | 120 ++++++--
.../endpoint_fetcher/endpoint_fetcher.h | 22 ++
.../ui/lens/lens_overlay_query_controller.cc | 1 +
.../endpoint_fetcher/endpoint_fetcher.cc | 133 ++++++--
.../endpoint_fetcher/endpoint_fetcher.h | 24 ++
components/manta/base_provider.cc | 1 +
.../Bromite-auto-updater.inc | 3 +
.../Bromite-auto-updater.inc | 1 +
31 files changed, 1223 insertions(+), 95 deletions(-)
33 files changed, 1240 insertions(+), 95 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
@@ -1718,6 +1720,17 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro
<message name="IDS_MENU_NEW_WINDOW" desc="Menu item for opening a new window. [CHAR_LIMIT=27]">
New window
</message>
diff --git a/chrome/browser/ui/lens/lens_overlay_query_controller.cc b/chrome/browser/ui/lens/lens_overlay_query_controller.cc
--- a/chrome/browser/ui/lens/lens_overlay_query_controller.cc
+++ b/chrome/browser/ui/lens/lens_overlay_query_controller.cc
@@ -771,6 +771,7 @@ LensOverlayQueryController::CreateEndpointFetcher(
/*post_data=*/request_string,
/*headers=*/request_headers,
/*cors_exempt_headers=*/cors_exempt_headers, chrome::GetChannel(),
+ kTrafficAnnotationTag,
/*request_params=*/
EndpointFetcher::RequestParams::Builder(http_method,
kTrafficAnnotationTag)
diff --git a/components/endpoint_fetcher/endpoint_fetcher.cc b/components/endpoint_fetcher/endpoint_fetcher.cc
--- a/components/endpoint_fetcher/endpoint_fetcher.cc
+++ b/components/endpoint_fetcher/endpoint_fetcher.cc
@@ -1733,15 +1746,61 @@ diff --git a/components/endpoint_fetcher/endpoint_fetcher.cc b/components/endpoi
namespace {
const char kContentTypeKey[] = "Content-Type";
const char kDeveloperKey[] = "X-Developer-Key";
@@ -30,6 +35,7 @@ constexpr base::TimeDelta kDefaultTimeOut = base::Milliseconds(30000);
std::string GetHttpMethodString(const HttpMethod& http_method) {
switch (http_method) {
case HttpMethod::kGet:
+ intercept_redirect_(false),
return "GET";
case HttpMethod::kPost:
@@ -35,6 +40,8 @@ std::string GetHttpMethodString(const HttpMethod& http_method) {
return "POST";
@@ -207,6 +213,7 @@ EndpointFetcher::EndpointFetcher(
case HttpMethod::kDelete:
return "DELETE";
+ case HttpMethod::kHead:
+ return "HEAD";
default:
DCHECK(0) << base::StringPrintf("Unknown HttpMethod %d\n",
static_cast<int>(http_method));
@@ -49,6 +56,8 @@ HttpMethod GetHttpMethod(const std::string& http_method_string) {
return HttpMethod::kPost;
} else if (http_method_string == "DELETE") {
return HttpMethod::kDelete;
+ } else if (http_method_string == "HEAD") {
+ return HttpMethod::kHead;
}
return HttpMethod::kUndefined;
}
@@ -115,9 +124,11 @@ EndpointFetcher::EndpointFetcher(
const std::vector<std::string>& headers,
const std::vector<std::string>& cors_exempt_headers,
version_info::Channel channel,
+ const net::NetworkTrafficAnnotationTag& annotation_tag,
const RequestParams request_params)
: url_loader_factory_(url_loader_factory),
identity_manager_(nullptr),
+ intercept_redirect_(false),
consent_level_(std::nullopt),
sanitize_response_(true),
channel_(channel),
@@ -137,6 +148,7 @@ EndpointFetcher::EndpointFetcher(
const net::NetworkTrafficAnnotationTag& annotation_tag)
: url_loader_factory_(url_loader_factory),
identity_manager_(nullptr),
+ intercept_redirect_(false),
consent_level_(std::nullopt),
sanitize_response_(false),
request_params_(EndpointFetcher::RequestParams::Builder(HttpMethod::kGet,
@@ -161,6 +173,7 @@ EndpointFetcher::EndpointFetcher(
: oauth_consumer_name_(oauth_consumer_name),
url_loader_factory_(url_loader_factory),
identity_manager_(identity_manager),
+ intercept_redirect_(false),
consent_level_(consent_level),
sanitize_response_(true),
request_params_(
@@ -190,6 +203,7 @@ EndpointFetcher::EndpointFetcher(
bool is_oauth_fetch)
: url_loader_factory_(url_loader_factory),
identity_manager_(nullptr),
+ intercept_redirect_(false),
consent_level_(std::nullopt),
sanitize_response_(true),
request_params_(
@@ -207,6 +221,7 @@ EndpointFetcher::EndpointFetcher(
EndpointFetcher::EndpointFetcher(
const net::NetworkTrafficAnnotationTag& annotation_tag)
: identity_manager_(nullptr),
@@ -1749,7 +1808,7 @@ diff --git a/components/endpoint_fetcher/endpoint_fetcher.cc b/components/endpoi
consent_level_(std::nullopt),
sanitize_response_(true),
request_params_(
@@ -215,6 +222,23 @@ EndpointFetcher::EndpointFetcher(
@@ -215,6 +230,27 @@ EndpointFetcher::EndpointFetcher(
.SetTimeout(kDefaultTimeOut)
.Build()) {}
@@ -1761,19 +1820,23 @@ diff --git a/components/endpoint_fetcher/endpoint_fetcher.cc b/components/endpoi
+ int64_t timeout_ms,
+ const bool intercept_redirect,
+ const net::NetworkTrafficAnnotationTag& annotation_tag)
+ : url_(url),
+ http_method_(http_method),
+ timeout_(base::Milliseconds(timeout_ms)),
+ intercept_redirect_(intercept_redirect),
+ annotation_tag_(annotation_tag),
+ url_loader_factory_(url_loader_factory),
+ : url_loader_factory_(url_loader_factory),
+ identity_manager_(nullptr),
+ sanitize_response_(false) {}
+ intercept_redirect_(intercept_redirect),
+ consent_level_(std::nullopt),
+ sanitize_response_(false),
+ request_params_(
+ EndpointFetcher::RequestParams::Builder(GetHttpMethod(http_method),
+ annotation_tag)
+ .SetAuthType(NO_AUTH)
+ .SetTimeout(base::Milliseconds(timeout_ms))
+ .SetUrl(url)
+ .Build()) {}
+
EndpointFetcher::~EndpointFetcher() = default;
void EndpointFetcher::Fetch(EndpointFetcherCallback endpoint_fetcher_callback) {
@@ -272,12 +296,9 @@ void EndpointFetcher::PerformRequest(
@@ -272,12 +308,9 @@ void EndpointFetcher::PerformRequest(
auto resource_request = std::make_unique<network::ResourceRequest>();
resource_request->method = GetHttpMethodString(request_params_.http_method());
resource_request->url = request_params_.url();
@@ -1789,7 +1852,7 @@ diff --git a/components/endpoint_fetcher/endpoint_fetcher.cc b/components/endpoi
if (request_params_.http_method() == HttpMethod::kPost) {
resource_request->headers.SetHeader(kContentTypeKey,
request_params_.content_type());
@@ -305,10 +326,27 @@ void EndpointFetcher::PerformRequest(
@@ -305,10 +338,26 @@ void EndpointFetcher::PerformRequest(
default:
break;
}
@@ -1803,7 +1866,6 @@ diff --git a/components/endpoint_fetcher/endpoint_fetcher.cc b/components/endpoi
// callback
simple_url_loader_ = network::SimpleURLLoader::Create(
std::move(resource_request), request_params_.annotation_tag());
+ simple_url_loader_->SetTimeoutDuration(timeout_);
+ simple_url_loader_->SetAllowHttpErrorResults(true);
+
+ if (!response_)
@@ -1817,15 +1879,17 @@ diff --git a/components/endpoint_fetcher/endpoint_fetcher.cc b/components/endpoi
if (request_params_.http_method() == HttpMethod::kPost) {
simple_url_loader_->AttachStringForUpload(
@@ -320,15 +358,23 @@ void EndpointFetcher::PerformRequest(
@@ -320,15 +369,25 @@ void EndpointFetcher::PerformRequest(
}
simple_url_loader_->SetRetryOptions(GetMaxRetries(),
network::SimpleURLLoader::RETRY_ON_5XX);
- simple_url_loader_->SetTimeoutDuration(request_params_.timeout());
- simple_url_loader_->SetAllowHttpErrorResults(true);
- network::SimpleURLLoader::BodyAsStringCallbackDeprecated
+ LOG(INFO) << "performing " << http_method_ << " request to " << url_;
+ if (base::EqualsCaseInsensitiveASCII(http_method_, "HEAD")) {
+ LOG(INFO) << "performing "
+ << GetHttpMethodString(request_params_.http_method())
+ << " request to " << url_;
+ if (request_params_.http_method() == HttpMethod::kHead) {
+ endpoint_fetcher_callback_ = std::move(endpoint_fetcher_callback);
+
+ simple_url_loader_->DownloadHeadersOnly(
@@ -1847,7 +1911,7 @@ diff --git a/components/endpoint_fetcher/endpoint_fetcher.cc b/components/endpoi
}
void EndpointFetcher::OnResponseFetched(
@@ -406,21 +452,6 @@ void EndpointFetcher::OnSanitizationResult(
@@ -406,21 +465,6 @@ void EndpointFetcher::OnSanitizationResult(
std::move(endpoint_fetcher_callback).Run(std::move(response));
}
@@ -1869,7 +1933,7 @@ diff --git a/components/endpoint_fetcher/endpoint_fetcher.cc b/components/endpoi
int EndpointFetcher::GetMaxRetries() const {
if (!request_params_.max_retries.has_value()) {
return kNumRetries;
@@ -445,3 +476,38 @@ UploadProgressCallback EndpointFetcher::GetUploadProgressCallback() const {
@@ -445,3 +489,38 @@ UploadProgressCallback EndpointFetcher::GetUploadProgressCallback() const {
std::string EndpointFetcher::GetUrlForTesting() {
return request_params_.url().spec();
}
@@ -1920,7 +1984,15 @@ diff --git a/components/endpoint_fetcher/endpoint_fetcher.h b/components/endpoin
namespace network {
struct ResourceRequest;
@@ -76,6 +78,8 @@ enum AuthType {
@@ -61,6 +63,7 @@ enum class HttpMethod {
kGet = 0,
kPost = 1,
kDelete = 2,
+ kHead = 3,
};
enum AuthType {
@@ -76,6 +79,8 @@ enum AuthType {
struct EndpointResponse {
std::string response;
@@ -1929,7 +2001,15 @@ diff --git a/components/endpoint_fetcher/endpoint_fetcher.h b/components/endpoin
int http_status_code{-1};
std::optional<FetchErrorType> error_type;
};
@@ -304,6 +308,14 @@ class EndpointFetcher {
@@ -296,6 +301,7 @@ class EndpointFetcher {
const std::vector<std::string>& headers,
const std::vector<std::string>& cors_exempt_headers,
version_info::Channel channel,
+ const net::NetworkTrafficAnnotationTag& annotation_tag,
const RequestParams request_params);
// Constructor if no authentication is needed.
@@ -304,6 +310,14 @@ class EndpointFetcher {
const GURL& url,
const net::NetworkTrafficAnnotationTag& annotation_tag);
@@ -1944,7 +2024,7 @@ diff --git a/components/endpoint_fetcher/endpoint_fetcher.h b/components/endpoin
// Used for tests. Can be used if caller constructs their own
// url_loader_factory and identity_manager.
EndpointFetcher(
@@ -360,6 +372,11 @@ class EndpointFetcher {
@@ -360,6 +374,11 @@ class EndpointFetcher {
void OnSanitizationResult(std::unique_ptr<EndpointResponse> response,
EndpointFetcherCallback endpoint_fetcher_callback,
data_decoder::JsonSanitizer::Result result);
@@ -1956,16 +2036,22 @@ diff --git a/components/endpoint_fetcher/endpoint_fetcher.h b/components/endpoin
network::mojom::CredentialsMode GetCredentialsMode() const;
int GetMaxRetries() const;
@@ -370,6 +387,8 @@ class EndpointFetcher {
@@ -370,12 +389,14 @@ class EndpointFetcher {
// network::SimpleURLLoader.
const std::string oauth_consumer_name_;
signin::ScopeSet oauth_scopes_;
+ GURL url_;
+ const bool intercept_redirect_;
// Members set in constructor
const scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory_;
@@ -388,6 +407,9 @@ class EndpointFetcher {
// `identity_manager_` can be null if it is not needed for authentication (in
// this case, callers should invoke `PerformRequest` directly).
const raw_ptr<signin::IdentityManager> identity_manager_;
+ const bool intercept_redirect_;
// `consent_level_` is used together with `identity_manager_`, so it can be
// null if `identity_manager_` is null.
const std::optional<signin::ConsentLevel> consent_level_;
@@ -388,6 +409,9 @@ class EndpointFetcher {
access_token_fetcher_;
std::unique_ptr<network::SimpleURLLoader> simple_url_loader_;
@@ -1975,6 +2061,17 @@ diff --git a/components/endpoint_fetcher/endpoint_fetcher.h b/components/endpoin
base::WeakPtrFactory<EndpointFetcher> weak_ptr_factory_{this};
};
diff --git a/components/manta/base_provider.cc b/components/manta/base_provider.cc
--- a/components/manta/base_provider.cc
+++ b/components/manta/base_provider.cc
@@ -160,6 +160,7 @@ std::unique_ptr<EndpointFetcher> BaseProvider::CreateEndpointFetcherForDemoMode(
/*cors_exempt_headers=*/std::vector<std::string>(),
// ChromeOS always uses the stable channel API key
version_info::Channel::STABLE,
+ annotation_tag,
EndpointFetcher::RequestParams::Builder(kHttpMethod, annotation_tag)
.Build());
}
diff --git a/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/Bromite-auto-updater.inc b/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/Bromite-auto-updater.inc
new file mode 100644
--- /dev/null
@@ -18,7 +18,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
.../developer_private/developer_private_api.h | 3 +
.../developer_private_functions_desktop.cc | 1 +
.../developer_private_functions_shared.cc | 7 ++-
.../profile_info_generator.cc | 1 +
.../profile_info_generator.cc | 3 +
.../webstore_private/webstore_private_api.cc | 15 ++++-
.../extensions/chrome_extension_system.cc | 1 +
.../extensions/cws_info_service_factory.cc | 3 +-
@@ -50,7 +50,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
extensions/common/extension_features.cc | 14 +++++
extensions/common/extension_features.h | 2 +
.../definitions/developer_private.d.ts | 2 +
37 files changed, 251 insertions(+), 108 deletions(-)
37 files changed, 253 insertions(+), 108 deletions(-)
create mode 100644 cromite_flags/chrome/browser/about_flags_cc/Webstore-protection.inc
diff --git a/chrome/app/extensions_strings.grdp b/chrome/app/extensions_strings.grdp
@@ -78,9 +78,9 @@ diff --git a/chrome/browser/extensions/api/developer_private/developer_private_a
+#include "chrome/browser/about_flags.h"
+#include "chrome/browser/browser_process.h"
+#include "components/flags_ui/pref_service_flags_storage.h"
+#include "components/flags_ui/feature_entry.h"
+#include "components/flags_ui/flags_storage.h"
+#include "components/webui/flags/pref_service_flags_storage.h"
+#include "components/webui/flags/feature_entry.h"
+#include "components/webui/flags/flags_storage.h"
+
namespace extensions {
@@ -165,11 +165,20 @@ diff --git a/chrome/browser/extensions/api/developer_private/developer_private_f
diff --git a/chrome/browser/extensions/api/developer_private/profile_info_generator.cc b/chrome/browser/extensions/api/developer_private/profile_info_generator.cc
--- a/chrome/browser/extensions/api/developer_private/profile_info_generator.cc
+++ b/chrome/browser/extensions/api/developer_private/profile_info_generator.cc
@@ -46,6 +46,7 @@ developer::ProfileInfo CreateProfileInfo(Profile* profile) {
@@ -7,6 +7,7 @@
#include "build/build_config.h"
#include "chrome/browser/prefs/incognito_mode_prefs.h"
#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/extensions/api/developer_private/developer_private_api.h"
#include "chrome/common/pref_names.h"
#include "components/policy/core/common/policy_pref_names.h"
#include "components/prefs/pref_service.h"
@@ -46,6 +47,8 @@ developer::ProfileInfo CreateProfileInfo(Profile* profile) {
->DidUserAcknowledgeNoticeGlobally();
#endif // !BUILDFLAG(IS_ANDROID)
+ info->is_extension_autoupdate_enabled = DeveloperPrivateAPI::IsExtensionAutoupdateEnabled();
+ info.is_extension_autoupdate_enabled =
+ DeveloperPrivateAPI::IsExtensionAutoupdateEnabled();
return info;
}
@@ -1071,7 +1071,7 @@ diff --git a/chrome/browser/ui/views/page_info/permission_toggle_row_view.cc b/c
+ if (choose_button_) {
+ choose_button_->SetEnabledTextColors(std::nullopt);
+ if (permission_.setting == CONTENT_SETTING_DEFAULT) {
+ choose_button_->SetTextColorId(views::Button::ButtonState::STATE_NORMAL,
+ choose_button_->SetTextColor(views::Button::ButtonState::STATE_NORMAL,
+ ui::kColorLabelForeground);
+ }
+ }
@@ -1110,7 +1110,7 @@ diff --git a/chrome/browser/ui/views/page_info/permission_toggle_row_view.cc b/c
+ }
+ choose_button_->SetText(caption);
+ if (permission_.setting == CONTENT_SETTING_DEFAULT) {
+ choose_button_->SetTextColorId(views::Button::ButtonState::STATE_NORMAL,
+ choose_button_->SetTextColor(views::Button::ButtonState::STATE_NORMAL,
+ ui::kColorLabelForeground);
+ }
+ }
@@ -16,6 +16,8 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
.../predictors/autocomplete_action_predictor.cc | 2 ++
.../predictors/loading_predictor_config.cc | 4 ++--
chrome/browser/predictors/predictors_features.cc | 3 +--
.../search_prefetch/field_trial_settings.cc | 4 ++++
.../search_prefetch_url_loader_interceptor.cc | 1 +
.../chrome_browser_main_extra_parts_profiles.cc | 1 -
chrome/browser/safe_browsing/BUILD.gn | 1 -
...fication_content_detection_service_factory.cc | 5 +++++
@@ -23,11 +25,12 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
.../read_anything/read_aloud_app_model.cc | 16 ++++++++++++++--
.../read_anything/read_aloud_app_model.h | 9 ++++++++-
.../read_anything_app_controller.cc | 10 ++++++++++
.../read_anything/read_anything_app_controller.h | 4 ++++
.../read_anything/read_anything_app_controller.h | 6 ++++++
chrome/utility/BUILD.gn | 2 +-
chrome/utility/services.cc | 8 --------
.../integrators/autofill_optimization_guide.cc | 5 +++--
.../omnibox/browser/autocomplete_controller.cc | 4 ++++
.../omnibox/browser/base_search_provider.cc | 4 ++--
.../optimization_guide/core/hints_fetcher.cc | 1 +
.../optimization_guide/core/hints_manager.cc | 5 +++++
.../core/optimization_guide_features.cc | 15 +++++++++------
@@ -38,21 +41,23 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
.../page_content_annotations_model_manager.cc | 1 +
.../notification_content_detection/BUILD.gn | 7 +++++++
components/safe_browsing/core/common/features.cc | 1 +
.../Disable-all-predictors-code.inc | 3 +++
.../Disable-all-predictors-code.inc | 2 ++
.../Disable-all-predictors-code.inc | 1 +
.../Disable-all-predictors-code.inc | 1 +
.../features_cc/Disable-all-predictors-code.inc | 3 +++
.../features_cc/Disable-all-predictors-code.inc | 1 +
.../features_cc/Disable-all-predictors-code.inc | 1 +
.../features_cc/Disable-all-predictors-code.inc | 2 ++
services/webnn/features.gni | 2 +-
.../core/html/parser/html_document_parser.cc | 1 +
.../document_speculation_rules.cc | 1 +
.../platform/runtime_enabled_features.json5 | 2 +-
43 files changed, 114 insertions(+), 45 deletions(-)
47 files changed, 123 insertions(+), 47 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
create mode 100644 cromite_flags/components/permissions/features_cc/Disable-all-predictors-code.inc
create mode 100644 cromite_flags/net/base/features_cc/Disable-all-predictors-code.inc
create mode 100644 cromite_flags/services/network/public/cpp/features_cc/Disable-all-predictors-code.inc
create mode 100644 cromite_flags/third_party/blink/common/features_cc/Disable-all-predictors-code.inc
@@ -251,6 +256,28 @@ diff --git a/chrome/browser/predictors/predictors_features.cc b/chrome/browser/p
} // namespace
diff --git a/chrome/browser/preloading/prefetch/search_prefetch/field_trial_settings.cc b/chrome/browser/preloading/prefetch/search_prefetch/field_trial_settings.cc
--- a/chrome/browser/preloading/prefetch/search_prefetch/field_trial_settings.cc
+++ b/chrome/browser/preloading/prefetch/search_prefetch/field_trial_settings.cc
@@ -146,3 +146,7 @@ const base::FeatureParam<base::TimeDelta>
kSuppressesSearchPrefetchOnSlowNetworkThreshold{
&kSuppressesSearchPrefetchOnSlowNetwork,
"slow_network_threshold_for_search_prefetch", base::Milliseconds(208)};
+
+SET_CROMITE_FEATURE_DISABLED(kSearchPrefetchServicePrefetching);
+SET_CROMITE_FEATURE_DISABLED(kSearchPrefetchWithNoVarySearchDiskCache);
+SET_CROMITE_FEATURE_DISABLED(kSearchNavigationPrefetch);
diff --git a/chrome/browser/preloading/prefetch/search_prefetch/search_prefetch_url_loader_interceptor.cc b/chrome/browser/preloading/prefetch/search_prefetch/search_prefetch_url_loader_interceptor.cc
--- a/chrome/browser/preloading/prefetch/search_prefetch/search_prefetch_url_loader_interceptor.cc
+++ b/chrome/browser/preloading/prefetch/search_prefetch/search_prefetch_url_loader_interceptor.cc
@@ -84,6 +84,7 @@ SearchPrefetchURLLoader::RequestHandler
SearchPrefetchURLLoaderInterceptor::MaybeCreateLoaderForRequest(
const network::ResourceRequest& tentative_resource_request,
content::FrameTreeNodeId frame_tree_node_id) {
+ if ((true)) return {};
// Do not intercept non-main frame navigations.
if (!tentative_resource_request.is_outermost_main_frame) {
// Use the is_outermost_main_frame flag instead of obtaining the
diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc
--- a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc
+++ b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc
@@ -511,7 +538,17 @@ diff --git a/chrome/renderer/accessibility/read_anything/read_anything_app_contr
class ReadAnythingAppControllerTest;
class ReadAnythingAppControllerScreen2xDataCollectionModeTest;
@@ -376,7 +378,9 @@ class ReadAnythingAppController
@@ -275,7 +277,9 @@ class ReadAnythingAppController
// available.
void UpdateDependencyParserModel(base::File model_file);
+#if BUILDFLAG(BUILD_WITH_TFLITE_LIB)
DependencyParserModel& GetDependencyParserModelForTesting();
+#endif
// Called when distillation has completed.
void OnAXTreeDistilled(const ui::AXTreeID& tree_id,
@@ -376,7 +380,9 @@ class ReadAnythingAppController
// Helpers for logging UmaHistograms based on times recorded in WebUI.
void IncrementMetricCount(const std::string& metric);
@@ -616,6 +653,26 @@ diff --git a/components/omnibox/browser/autocomplete_controller.cc b/components/
// Appends available autocompletion of the given type, subtype, and number to
// the existing available autocompletions string, encoding according to the
diff --git a/components/omnibox/browser/base_search_provider.cc b/components/omnibox/browser/base_search_provider.cc
--- a/components/omnibox/browser/base_search_provider.cc
+++ b/components/omnibox/browser/base_search_provider.cc
@@ -99,14 +99,14 @@ BaseSearchProvider::BaseSearchProvider(AutocompleteProvider::Type type,
bool BaseSearchProvider::ShouldPrefetch(const AutocompleteMatch& match) {
// TODO (manukh): `GetAdditionalInfoForDebugging()` shouldn't be used for
// non-debugging purposes.
- return match.GetAdditionalInfoForDebugging(kShouldPrefetchKey) == kTrue;
+ return false;
}
// static
bool BaseSearchProvider::ShouldPrerender(const AutocompleteMatch& match) {
// TODO (manukh): `GetAdditionalInfoForDebugging()` shouldn't be used for
// non-debugging purposes.
- return match.GetAdditionalInfoForDebugging(kShouldPrerenderKey) == kTrue;
+ return false;
}
// static
diff --git a/components/optimization_guide/core/hints_fetcher.cc b/components/optimization_guide/core/hints_fetcher.cc
--- a/components/optimization_guide/core/hints_fetcher.cc
+++ b/components/optimization_guide/core/hints_fetcher.cc
@@ -811,10 +868,9 @@ diff --git a/cromite_flags/chrome/browser/browser_features_cc/Disable-all-predic
new file mode 100644
--- /dev/null
+++ b/cromite_flags/chrome/browser/browser_features_cc/Disable-all-predictors-code.inc
@@ -0,0 +1,3 @@
@@ -0,0 +1,2 @@
+SET_CROMITE_FEATURE_DISABLED(kBookmarkTriggerForPrerender2);
+SET_CROMITE_FEATURE_DISABLED(kNewTabPageTriggerForPrerender2);
+SET_CROMITE_FEATURE_DISABLED(kSupportSearchSuggestionForPrerender2);
diff --git a/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/Disable-all-predictors-code.inc b/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/Disable-all-predictors-code.inc
new file mode 100644
--- /dev/null
@@ -835,6 +891,12 @@ new file mode 100644
+SET_CROMITE_FEATURE_DISABLED(kPermissionOnDeviceNotificationPredictions);
+SET_CROMITE_FEATURE_DISABLED(kPermissionOnDeviceGeolocationPredictions);
+SET_CROMITE_FEATURE_DISABLED(kPermissionPredictionsV2);
diff --git a/cromite_flags/net/base/features_cc/Disable-all-predictors-code.inc b/cromite_flags/net/base/features_cc/Disable-all-predictors-code.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/net/base/features_cc/Disable-all-predictors-code.inc
@@ -0,0 +1 @@
+SET_CROMITE_FEATURE_DISABLED(kHttpCacheNoVarySearch);
diff --git a/cromite_flags/services/network/public/cpp/features_cc/Disable-all-predictors-code.inc b/cromite_flags/services/network/public/cpp/features_cc/Disable-all-predictors-code.inc
new file mode 100644
--- /dev/null
@@ -38,8 +38,8 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
.../browser/AttributionOsLevelManager.java | 349 +-----------------
.../public/browser/content_browser_client.cc | 7 +-
.../public/browser/navigation_controller.cc | 1 -
.../Disable-conversion-measurement-api.inc | 1 +
.../Disable-conversion-measurement-api.inc | 10 +
.../Disable-conversion-measurement-api.inc | 2 +
.../Disable-conversion-measurement-api.inc | 8 +
.../attribution/request_headers_internal.cc | 1 +
services/network/network_context.cc | 20 -
.../network/public/cpp/attribution_utils.cc | 2 +
@@ -47,7 +47,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
third_party/blink/renderer/core/page/page.cc | 2 +-
.../platform/runtime_enabled_features.json5 | 20 +-
ui/events/android/motion_event_android.cc | 8 +-
36 files changed, 101 insertions(+), 430 deletions(-)
36 files changed, 100 insertions(+), 430 deletions(-)
create mode 100644 cromite_flags/services/network/public/cpp/features_cc/Disable-conversion-measurement-api.inc
create mode 100644 cromite_flags/third_party/blink/common/features_cc/Disable-conversion-measurement-api.inc
@@ -986,23 +986,22 @@ diff --git a/cromite_flags/services/network/public/cpp/features_cc/Disable-conve
new file mode 100644
--- /dev/null
+++ b/cromite_flags/services/network/public/cpp/features_cc/Disable-conversion-measurement-api.inc
@@ -0,0 +1 @@
+// none
@@ -0,0 +1,2 @@
+SET_CROMITE_FEATURE_DISABLED(kBrowsingTopics);
+SET_CROMITE_FEATURE_DISABLED(kInterestGroupStorage);
diff --git a/cromite_flags/third_party/blink/common/features_cc/Disable-conversion-measurement-api.inc b/cromite_flags/third_party/blink/common/features_cc/Disable-conversion-measurement-api.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/third_party/blink/common/features_cc/Disable-conversion-measurement-api.inc
@@ -0,0 +1,10 @@
@@ -0,0 +1,8 @@
+SET_CROMITE_FEATURE_DISABLED(kAdAuctionSignals);
+SET_CROMITE_FEATURE_DISABLED(kBrowsingTopics);
+SET_CROMITE_FEATURE_DISABLED(kBrowsingTopicsDocumentAPI);
+SET_CROMITE_FEATURE_DISABLED(kBrowsingTopicsParameters);
+SET_CROMITE_FEATURE_DISABLED(kFledge);
+SET_CROMITE_FEATURE_DISABLED(kFledgeBiddingAndAuctionServer);
+SET_CROMITE_FEATURE_DISABLED(kInterestGroupStorage);
+SET_CROMITE_FEATURE_DISABLED(kPrivateAggregationApi);
+SET_CROMITE_FEATURE_DISABLED(kBiddingAndScoringDebugReportingAPI);
+SET_CROMITE_FEATURE_DISABLED(kAllowURNsInIframes);
+SET_CROMITE_FEATURE_DISABLED(kFledgeSampleDebugReports);
diff --git a/services/network/attribution/request_headers_internal.cc b/services/network/attribution/request_headers_internal.cc
--- a/services/network/attribution/request_headers_internal.cc
+++ b/services/network/attribution/request_headers_internal.cc
@@ -7,17 +7,17 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
---
chrome/android/java/AndroidManifest.xml | 9 ---------
.../password_store_android_backend_bridge_helper_impl.cc | 1 +
.../android/password_store_android_local_backend.cc | 6 +++++-
.../generated_password_leak_detection_pref.cc | 3 +--
.../password_receiver_service_factory.cc | 2 +-
.../password_manager/password_sender_service_factory.cc | 2 +-
.../affiliations/core/browser/affiliation_backend.cc | 1 +
.../core/browser/affiliation_service_impl.cc | 4 ++++
components/affiliations/core/browser/facet_manager.cc | 4 ++++
.../affiliation/password_affiliation_source_adapter.cc | 4 ++++
.../leak_detection/leak_detection_check_factory_impl.cc | 5 +++++
.../browser/leak_detection/leak_detection_check_impl.cc | 3 +--
.../Disable-privacy-issues-in-password-manager.inc | 1 +
12 files changed, 25 insertions(+), 16 deletions(-)
12 files changed, 24 insertions(+), 15 deletions(-)
create mode 100644 cromite_flags/components/password_manager/core/browser/features/password_features_cc/Disable-privacy-issues-in-password-manager.inc
diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/AndroidManifest.xml
@@ -50,22 +50,6 @@ diff --git a/chrome/browser/password_manager/android/password_store_android_back
base::android::BuildInfo* info = base::android::BuildInfo::GetInstance();
int current_gms_core_version;
if (!base::StringToInt(info->gms_version_code(), &current_gms_core_version)) {
diff --git a/chrome/browser/password_manager/android/password_store_android_local_backend.cc b/chrome/browser/password_manager/android/password_store_android_local_backend.cc
--- a/chrome/browser/password_manager/android/password_store_android_local_backend.cc
+++ b/chrome/browser/password_manager/android/password_store_android_local_backend.cc
@@ -29,7 +29,11 @@ PasswordStoreAndroidLocalBackend::PasswordStoreAndroidLocalBackend(
PrefService* prefs)
: PasswordStoreAndroidBackend(std::move(bridge_helper),
std::move(lifecycle_helper),
- prefs) {}
+ prefs) {
+ // This is why we have to explicitly call it here whenever local GMSCore is
+ // created.
+ if ((true)) password_affiliation_adapter.DisableSource();
+}
PasswordStoreAndroidLocalBackend::~PasswordStoreAndroidLocalBackend() = default;
diff --git a/chrome/browser/password_manager/generated_password_leak_detection_pref.cc b/chrome/browser/password_manager/generated_password_leak_detection_pref.cc
--- a/chrome/browser/password_manager/generated_password_leak_detection_pref.cc
+++ b/chrome/browser/password_manager/generated_password_leak_detection_pref.cc
@@ -142,6 +126,20 @@ diff --git a/components/affiliations/core/browser/facet_manager.cc b/components/
if (IsCachedDataFresh()) {
AffiliatedFacetsWithUpdateTime affiliation;
if (!backend_->ReadAffiliationsAndBrandingFromDatabase(facet_uri_,
diff --git a/components/password_manager/core/browser/affiliation/password_affiliation_source_adapter.cc b/components/password_manager/core/browser/affiliation/password_affiliation_source_adapter.cc
--- a/components/password_manager/core/browser/affiliation/password_affiliation_source_adapter.cc
+++ b/components/password_manager/core/browser/affiliation/password_affiliation_source_adapter.cc
@@ -27,6 +27,10 @@ PasswordAffiliationSourceAdapter::~PasswordAffiliationSourceAdapter() = default;
void PasswordAffiliationSourceAdapter::GetFacets(
AffiliationSource::ResultCallback response_callback) {
+ if (((true))) {
+ std::move(response_callback).Run({});
+ return;
+ }
on_password_forms_received_callback_ = std::move(response_callback);
store_->GetAllLogins(weak_ptr_factory_.GetWeakPtr());
}
diff --git a/components/password_manager/core/browser/leak_detection/leak_detection_check_factory_impl.cc b/components/password_manager/core/browser/leak_detection/leak_detection_check_factory_impl.cc
--- a/components/password_manager/core/browser/leak_detection/leak_detection_check_factory_impl.cc
+++ b/components/password_manager/core/browser/leak_detection/leak_detection_check_factory_impl.cc
+11 -4
View File
@@ -27,11 +27,13 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
.../shared_storage_document_service_impl.cc | 9 +++++++++
.../features_cc/Disable-privacy-sandbox.inc | 1 +
.../Disable-privacy-sandbox.inc | 1 +
.../features_cc/Disable-privacy-sandbox.inc | 2 ++
.../features_cc/Disable-privacy-sandbox.inc | 1 +
.../features_cc/Disable-privacy-sandbox.inc | 1 +
third_party/blink/common/features.cc | 1 +
19 files changed, 48 insertions(+), 28 deletions(-)
20 files changed, 48 insertions(+), 28 deletions(-)
create mode 100644 cromite_flags/content/common/features_cc/Disable-privacy-sandbox.inc
create mode 100644 cromite_flags/content/public/common/content_features_cc/Disable-privacy-sandbox.inc
create mode 100644 cromite_flags/services/network/public/cpp/features_cc/Disable-privacy-sandbox.inc
create mode 100644 cromite_flags/third_party/blink/common/features_cc/Disable-privacy-sandbox.inc
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
@@ -328,13 +330,18 @@ new file mode 100644
+++ b/cromite_flags/content/public/common/content_features_cc/Disable-privacy-sandbox.inc
@@ -0,0 +1 @@
+SET_CROMITE_FEATURE_DISABLED(kPrivacySandboxAdsAPIsOverride);
diff --git a/cromite_flags/services/network/public/cpp/features_cc/Disable-privacy-sandbox.inc b/cromite_flags/services/network/public/cpp/features_cc/Disable-privacy-sandbox.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/services/network/public/cpp/features_cc/Disable-privacy-sandbox.inc
@@ -0,0 +1 @@
+SET_CROMITE_FEATURE_DISABLED(kSharedStorageAPI);
diff --git a/cromite_flags/third_party/blink/common/features_cc/Disable-privacy-sandbox.inc b/cromite_flags/third_party/blink/common/features_cc/Disable-privacy-sandbox.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/third_party/blink/common/features_cc/Disable-privacy-sandbox.inc
@@ -0,0 +1,2 @@
@@ -0,0 +1 @@
+SET_CROMITE_FEATURE_DISABLED(kFencedFrames);
+SET_CROMITE_FEATURE_DISABLED(kSharedStorageAPI);
diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc
--- a/third_party/blink/common/features.cc
+++ b/third_party/blink/common/features.cc
@@ -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 ++
.../renderer/modules/speech/speech_synthesis.cc | 17 ++++++++++++++---
11 files changed, 43 insertions(+), 7 deletions(-)
.../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(-)
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
@@ -151,7 +151,15 @@ diff --git a/third_party/blink/public/platform/web_content_settings_client.h b/t
diff --git a/third_party/blink/renderer/modules/speech/speech_synthesis.cc b/third_party/blink/renderer/modules/speech/speech_synthesis.cc
--- a/third_party/blink/renderer/modules/speech/speech_synthesis.cc
+++ b/third_party/blink/renderer/modules/speech/speech_synthesis.cc
@@ -35,6 +35,7 @@
@@ -28,6 +28,7 @@
#include <tuple>
#include "build/build_config.h"
+#include "third_party/blink/public/common/features.h"
#include "third_party/blink/public/common/privacy_budget/identifiability_metric_builder.h"
#include "third_party/blink/public/common/privacy_budget/identifiability_study_settings.h"
#include "third_party/blink/public/common/privacy_budget/identifiable_token.h"
@@ -35,6 +36,7 @@
#include "third_party/blink/public/common/thread_safe_browser_interface_broker_proxy.h"
#include "third_party/blink/public/platform/browser_interface_broker_proxy.h"
#include "third_party/blink/public/platform/platform.h"
@@ -159,7 +167,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"
@@ -93,9 +94,19 @@ SpeechSynthesis::SpeechSynthesis(LocalDOMWindow& window)
@@ -93,9 +95,19 @@ SpeechSynthesis::SpeechSynthesis(LocalDOMWindow& window)
void SpeechSynthesis::OnSetVoiceList(
Vector<mojom::blink::SpeechSynthesisVoicePtr> mojom_voices) {
voice_list_.clear();
@@ -6,10 +6,10 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
---
chrome/android/java/res/layout/bookmark_search_box_row.xml | 4 ++--
.../chrome/browser/bookmarks/BookmarkManagerOpenerImpl.java | 2 +-
.../browser/bookmarks/BookmarkSearchBoxRowViewBinder.java | 1 +
.../browser/bookmarks/BookmarkSearchBoxRowViewBinder.java | 2 ++
.../chromium/chrome/browser/bookmarks/BookmarkUiPrefs.java | 2 +-
components/bookmarks/browser/bookmark_node.cc | 3 +--
5 files changed, 6 insertions(+), 6 deletions(-)
5 files changed, 7 insertions(+), 6 deletions(-)
diff --git a/chrome/android/java/res/layout/bookmark_search_box_row.xml b/chrome/android/java/res/layout/bookmark_search_box_row.xml
--- a/chrome/android/java/res/layout/bookmark_search_box_row.xml
@@ -40,7 +40,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkSearchBoxRowViewBinder.java b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkSearchBoxRowViewBinder.java
--- a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkSearchBoxRowViewBinder.java
+++ b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkSearchBoxRowViewBinder.java
@@ -33,6 +33,7 @@ class BookmarkSearchBoxRowViewBinder {
@@ -5,6 +5,7 @@
package org.chromium.chrome.browser.bookmarks;
import android.view.View;
+import android.view.ViewGroup;
import androidx.annotation.DrawableRes;
import androidx.annotation.StringRes;
@@ -33,6 +34,7 @@ class BookmarkSearchBoxRowViewBinder {
private void bindInternal(PropertyModel model, View view, PropertyKey key) {
BookmarkSearchBoxRow row = (BookmarkSearchBoxRow) view;
ChipView shoppingChip = view.findViewById(R.id.shopping_filter_chip);
@@ -9,10 +9,12 @@ PartitionNelAndReportingByNetworkIsolationKey, kSplitCacheByNavigationInitiator
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
.../browser/net/profile_network_context_service.cc | 2 +-
.../Enable-network-isolation-features.inc | 12 ++++++++++++
.../Enable-network-isolation-features.inc | 1 +
3 files changed, 14 insertions(+), 1 deletion(-)
.../browser/net/profile_network_context_service.cc | 2 +-
.../Enable-network-isolation-features.inc | 10 ++++++++++
.../Enable-network-isolation-features.inc | 1 +
net/http/http_cache.cc | 14 +++++++++-----
net/http/http_cache.h | 2 +-
5 files changed, 22 insertions(+), 7 deletions(-)
create mode 100644 cromite_flags/net/base/features_cc/Enable-network-isolation-features.inc
create mode 100644 cromite_flags/services/network/public/cpp/features_cc/Enable-network-isolation-features.inc
@@ -32,7 +34,7 @@ diff --git a/cromite_flags/net/base/features_cc/Enable-network-isolation-feature
new file mode 100644
--- /dev/null
+++ b/cromite_flags/net/base/features_cc/Enable-network-isolation-features.inc
@@ -0,0 +1,12 @@
@@ -0,0 +1,10 @@
+SET_CROMITE_FEATURE_ENABLED(kSplitCodeCacheByNetworkIsolationKey);
+SET_CROMITE_FEATURE_ENABLED(kPartitionConnectionsByNetworkIsolationKey);
+
@@ -40,15 +42,75 @@ new file mode 100644
+
+// enable http cache partition
+SET_CROMITE_FEATURE_ENABLED(kSplitCacheByNetworkIsolationKey);
+// but disable cache for cross-site main frame navigation
+SET_CROMITE_FEATURE_ENABLED(kSplitCacheByCrossSiteMainFrameNavigationBoolean);
+
+// most restricted option (ByNavigationInitiator) used
+// it generates a cache key isolating all requests per initiator.
+// requests with initiators with an opaque origin are not cached
+SET_CROMITE_FEATURE_ENABLED(kSplitCacheByNavigationInitiator);
diff --git a/cromite_flags/services/network/public/cpp/features_cc/Enable-network-isolation-features.inc b/cromite_flags/services/network/public/cpp/features_cc/Enable-network-isolation-features.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/services/network/public/cpp/features_cc/Enable-network-isolation-features.inc
@@ -0,0 +1 @@
+SET_CROMITE_FEATURE_ENABLED(kSplitAuthCacheByNetworkIsolationKey);
diff --git a/net/http/http_cache.cc b/net/http/http_cache.cc
--- a/net/http/http_cache.cc
+++ b/net/http/http_cache.cc
@@ -633,7 +633,7 @@ bool HttpCache::CanGenerateCacheKeyForRequest(const HttpRequestInfo* request) {
// static
// Generate a key that can be used inside the cache.
-std::string HttpCache::GenerateCacheKey(
+std::string HttpCache::GenerateCacheKey2(
const GURL& url,
int load_flags,
const NetworkIsolationKey& network_isolation_key,
@@ -671,8 +671,8 @@ std::string HttpCache::GenerateCacheKey(
const bool is_initiator_cross_site =
initiator_site != net::SchemefulSite(url);
if (is_initiator_cross_site) {
- is_cross_site_main_frame_navigation_prefix =
- kCrossSiteMainFrameNavigationPrefix;
+ DLOG(INFO) << "---initiator_site cs=" << base::StrCat({"ni_", initiator_site.Serialize(), " "});
+ return "";
}
}
isolation_key = base::StrCat(
@@ -687,9 +687,11 @@ std::string HttpCache::GenerateCacheKey(
// Strip out the reference, username, and password sections of the URL and
// concatenate with the credential_key, the post_key, and the network
// isolation key if we are splitting the cache.
- return base::StringPrintf("%c/%" PRId64 "/%s%s", credential_key,
+ auto key = base::StringPrintf("%c/%" PRId64 "/%s%s", credential_key,
upload_data_identifier, isolation_key.c_str(),
HttpUtil::SpecForRequest(url).c_str());
+ DLOG(INFO) << "---key=" << key;
+ return key;
}
// static
@@ -712,10 +714,12 @@ HttpCache::GenerateCacheKeyForRequestWithAlternateURL(
const int64_t upload_data_identifier =
request->upload_data_stream ? request->upload_data_stream->identifier()
: int64_t(0);
- return GenerateCacheKey(
+ auto key = GenerateCacheKey2(
url, request->load_flags, request->network_isolation_key,
upload_data_identifier, request->is_subframe_document_resource,
request->is_main_frame_navigation, request->initiator);
+ if (key.empty()) return std::nullopt;
+ return key;
}
// static
diff --git a/net/http/http_cache.h b/net/http/http_cache.h
--- a/net/http/http_cache.h
+++ b/net/http/http_cache.h
@@ -509,7 +509,7 @@ class NET_EXPORT HttpCache : public HttpTransactionFactory {
// Generates a cache key given the various pieces used to construct the key.
// Must not be called if a corresponding `CanGenerateCacheKeyForRequest`
// returns false.
- static std::string GenerateCacheKey(
+ static std::string GenerateCacheKey2(
const GURL& url,
int load_flags,
const NetworkIsolationKey& network_isolation_key,
--
@@ -12,10 +12,11 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
chrome/app/settings_strings.grdp | 3 +
chrome/app/settings_strings_android.grdp | 260 ++++++++++++++++++
chrome/browser/BUILD.gn | 3 +
.../chrome_browser_interface_binders.cc | 12 +
.../chrome_browser_interface_binders.cc | 3 +
.../chrome_browser_interface_binders_webui.cc | 21 ++
chrome/browser/resources/BUILD.gn | 6 +
chrome/browser/resources/settings/BUILD.gn | 2 +-
.../resources/settings/page_visibility.ts | 43 ++-
.../resources/settings/page_visibility.ts | 40 ++-
.../search_engine_edit_dialog.html | 6 +
.../search_engine_edit_dialog.ts | 6 +-
.../search_engines_browser_proxy.ts | 8 +-
@@ -26,7 +27,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
.../settings/settings_ui/settings_ui.html | 6 +
.../resources/settings_shared/BUILD.gn | 2 +-
chrome/browser/search/background/BUILD.gn | 4 +-
.../browser/search_engines/android/BUILD.gn | 2 +
.../browser/search_engines/android/BUILD.gn | 1 +
.../java/res/layout/search_engine_layout.xml | 25 ++
.../settings/SearchEngineSettings.java | 21 ++
chrome/browser/ui/BUILD.gn | 18 ++
@@ -37,7 +38,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
.../template_url_table_model.cc | 9 +-
.../search_engines/template_url_table_model.h | 6 +-
.../browser/ui/webui/chrome_web_ui_configs.cc | 8 +
chrome/browser/ui/webui/favicon_source.cc | 16 ++
chrome/browser/ui/webui/favicon_source.cc | 14 +
chrome/browser/ui/webui/favicon_source.h | 2 +
.../webui/settings/search_engines_handler.cc | 28 +-
.../webui/settings/search_engines_handler.h | 3 +-
@@ -69,14 +70,14 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
.../cr_components/managed_dialog/BUILD.gn | 2 +-
.../cr_components/managed_footnote/BUILD.gn | 2 +-
.../cr_components/theme_color_picker/BUILD.gn | 2 +-
ui/webui/resources/cr_elements/BUILD.gn | 4 +-
ui/webui/resources/cr_elements/BUILD.gn | 6 +-
.../cr_elements/cr_dialog/cr_dialog.css | 2 +-
.../resources/cr_elements/cr_shared_vars.css | 4 +
ui/webui/resources/css/BUILD.gn | 2 +-
ui/webui/resources/images/BUILD.gn | 2 +-
ui/webui/resources/js/BUILD.gn | 2 +-
ui/webui/resources/js/load_time_data.ts | 17 +-
69 files changed, 1146 insertions(+), 68 deletions(-)
70 files changed, 1153 insertions(+), 69 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
@@ -430,10 +431,37 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
diff --git a/chrome/browser/chrome_browser_interface_binders.cc b/chrome/browser/chrome_browser_interface_binders.cc
--- a/chrome/browser/chrome_browser_interface_binders.cc
+++ b/chrome/browser/chrome_browser_interface_binders.cc
@@ -84,6 +84,18 @@
@@ -84,6 +84,9 @@
#endif
#if BUILDFLAG(IS_ANDROID)
+#include "ui/webui/resources/cr_components/help_bubble/help_bubble.mojom.h"
+#include "ui/webui/resources/cr_components/customize_color_scheme_mode/customize_color_scheme_mode.mojom.h"
+#include "chrome/browser/ui/webui/settings/settings_ui_android.h"
#include "chrome/browser/android/dom_distiller/distiller_ui_handle_android.h"
#include "chrome/browser/facilitated_payments/payment_link_handler_binder.h"
#include "chrome/browser/offline_pages/android/offline_page_auto_fetcher.h"
diff --git a/chrome/browser/chrome_browser_interface_binders_webui.cc b/chrome/browser/chrome_browser_interface_binders_webui.cc
--- a/chrome/browser/chrome_browser_interface_binders_webui.cc
+++ b/chrome/browser/chrome_browser_interface_binders_webui.cc
@@ -61,6 +61,12 @@
#include "chrome/browser/ui/webui/whats_new/whats_new_ui.h"
#endif
+#if BUILDFLAG(IS_ANDROID)
+#include "ui/webui/resources/cr_components/customize_color_scheme_mode/customize_color_scheme_mode.mojom.h"
+#include "ui/webui/resources/cr_components/help_bubble/help_bubble.mojom.h"
+#include "chrome/browser/ui/webui/settings/settings_ui.h"
+#endif
+
#if BUILDFLAG(IS_ANDROID)
#include "chrome/browser/ui/webui/feed_internals/feed_internals.mojom.h"
#include "chrome/browser/ui/webui/feed_internals/feed_internals_ui.h"
@@ -460,6 +466,15 @@ void PopulateChromeWebUIFrameBinders(
OnDeviceTranslationInternalsUI>(map);
#endif
+#if BUILDFLAG(IS_ANDROID)
+ RegisterWebUIControllerInterfaceBinder<
+ help_bubble::mojom::HelpBubbleHandlerFactory, settings::SettingsUI>(map);
+
@@ -442,13 +470,29 @@ diff --git a/chrome/browser/chrome_browser_interface_binders.cc b/chrome/browser
+ CustomizeColorSchemeModeHandlerFactory, settings::SettingsUI>(map);
+#endif
+
#if !BUILDFLAG(IS_ANDROID)
RegisterWebUIControllerInterfaceBinder<
search_engine_choice::mojom::PageHandlerFactory, SearchEngineChoiceUI>(
@@ -562,6 +577,9 @@ void PopulateChromeWebUIFrameBinders(
RegisterWebUIControllerInterfaceBinder<suggest_internals::mojom::PageHandler,
SuggestInternalsUI>(map);
+#if BUILDFLAG(IS_ANDROID)
+#include "ui/webui/resources/cr_components/help_bubble/help_bubble.mojom.h"
+#include "ui/webui/resources/cr_components/customize_color_scheme_mode/customize_color_scheme_mode.mojom.h"
+#include "chrome/browser/ui/webui/settings/settings_ui_android.h"
#include "chrome/browser/android/dom_distiller/distiller_ui_handle_android.h"
#include "chrome/browser/facilitated_payments/payment_link_handler_binder.h"
#include "chrome/browser/offline_pages/android/offline_page_auto_fetcher.h"
+#error "Check this patch"
+#endif
RegisterWebUIControllerInterfaceBinder<
customize_color_scheme_mode::mojom::
CustomizeColorSchemeModeHandlerFactory,
@@ -582,6 +600,9 @@ void PopulateChromeWebUIFrameBinders(
CertificateManagerUI>(map);
#endif // BUILDFLAG(CHROME_ROOT_STORE_CERT_MANAGEMENT_UI)
+#if BUILDFLAG(IS_ANDROID)
+#error "Check this patch"
+#endif
RegisterWebUIControllerInterfaceBinder<
help_bubble::mojom::HelpBubbleHandlerFactory, UserEducationInternalsUI,
settings::SettingsUI, ReadingListUI, NewTabPageUI, CustomizeChromeUI,
diff --git a/chrome/browser/resources/BUILD.gn b/chrome/browser/resources/BUILD.gn
--- a/chrome/browser/resources/BUILD.gn
+++ b/chrome/browser/resources/BUILD.gn
@@ -480,7 +524,7 @@ diff --git a/chrome/browser/resources/settings/BUILD.gn b/chrome/browser/resourc
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
@@ -42,8 +42,49 @@ export interface PrivacyPageVisibility {
@@ -42,8 +42,46 @@ export interface PrivacyPageVisibility {
searchPrediction: boolean;
}
@@ -490,9 +534,6 @@ diff --git a/chrome/browser/resources/settings/page_visibility.ts b/chrome/brows
+ chrome.autofillPrivate = {
+ isUserEligibleForAutofillImprovements(): Promise<boolean> {
+ return Promise.resolve(false);
+ },
+ hasUserAnnotationsEntries(): Promise<boolean> {
+ return Promise.resolve(false);
+ }
+ };
+
@@ -776,7 +817,7 @@ diff --git a/chrome/browser/search/background/BUILD.gn b/chrome/browser/search/b
diff --git a/chrome/browser/search_engines/android/BUILD.gn b/chrome/browser/search_engines/android/BUILD.gn
--- a/chrome/browser/search_engines/android/BUILD.gn
+++ b/chrome/browser/search_engines/android/BUILD.gn
@@ -80,12 +80,14 @@ android_resources("java_resources") {
@@ -80,6 +80,7 @@ android_resources("java_resources") {
"java/res/layout/blocking_choice_dialog.xml",
"java/res/layout/default_search_engine_dialog_view.xml",
"java/res/layout/search_engine_choice_header.xml",
@@ -784,13 +825,6 @@ diff --git a/chrome/browser/search_engines/android/BUILD.gn b/chrome/browser/sea
"java/res/layout/search_engine_recent_title.xml",
"java/res/layout/search_engine_with_logo.xml",
"java/res/values/dimens.xml",
"java/res/values/ids.xml",
]
deps = [
+ "//chrome/browser/search/background:ntp_background_proto",
"//chrome/browser/ui/android/strings:ui_strings_grd",
"//components/browser_ui/styles/android:java_resources",
"//components/browser_ui/widget/android:java_resources",
diff --git a/chrome/browser/search_engines/android/java/res/layout/search_engine_layout.xml b/chrome/browser/search_engines/android/java/res/layout/search_engine_layout.xml
new file mode 100644
--- /dev/null
@@ -1108,17 +1142,7 @@ diff --git a/chrome/browser/ui/webui/chrome_web_ui_configs.cc b/chrome/browser/u
diff --git a/chrome/browser/ui/webui/favicon_source.cc b/chrome/browser/ui/webui/favicon_source.cc
--- a/chrome/browser/ui/webui/favicon_source.cc
+++ b/chrome/browser/ui/webui/favicon_source.cc
@@ -13,7 +13,9 @@
#include "chrome/browser/favicon/favicon_service_factory.h"
#include "chrome/browser/favicon/favicon_utils.h"
#include "chrome/browser/favicon/history_ui_favicon_request_handler_factory.h"
+#if !BUILDFLAG(IS_ANDROID)
#include "chrome/browser/history/top_sites_factory.h"
+#endif
#include "chrome/browser/profiles/profile.h"
#include "chrome/common/url_constants.h"
#include "chrome/common/webui_url_constants.h"
@@ -22,9 +24,11 @@
@@ -22,9 +22,11 @@
#include "components/history/core/browser/top_sites.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/web_contents.h"
@@ -1130,7 +1154,7 @@ diff --git a/chrome/browser/ui/webui/favicon_source.cc b/chrome/browser/ui/webui
#include "third_party/skia/include/core/SkBitmap.h"
#include "ui/base/resource/resource_bundle.h"
#include "ui/base/resource/resource_scale_factor.h"
@@ -226,6 +230,7 @@ bool FaviconSource::ShouldServiceRequest(
@@ -226,6 +228,7 @@ bool FaviconSource::ShouldServiceRequest(
render_process_id);
}
@@ -1138,7 +1162,7 @@ diff --git a/chrome/browser/ui/webui/favicon_source.cc b/chrome/browser/ui/webui
ui::NativeTheme* FaviconSource::GetNativeTheme(
const content::WebContents::Getter& wc_getter) {
#if BUILDFLAG(IS_ANDROID)
@@ -234,6 +239,7 @@ ui::NativeTheme* FaviconSource::GetNativeTheme(
@@ -234,6 +237,7 @@ ui::NativeTheme* FaviconSource::GetNativeTheme(
return webui::GetNativeThemeDeprecated(wc_getter.Run());
#endif
}
@@ -1146,7 +1170,7 @@ diff --git a/chrome/browser/ui/webui/favicon_source.cc b/chrome/browser/ui/webui
void FaviconSource::OnFaviconDataAvailable(
content::URLDataSource::GotDataCallback callback,
@@ -257,7 +263,11 @@ void FaviconSource::SendDefaultResponse(
@@ -257,7 +261,11 @@ void FaviconSource::SendDefaultResponse(
parsed.device_scale_factor,
parsed.force_light_mode
? false
@@ -1158,7 +1182,7 @@ diff --git a/chrome/browser/ui/webui/favicon_source.cc b/chrome/browser/ui/webui
return;
}
int icon_size = std::ceil(parsed.size_in_dip * parsed.device_scale_factor);
@@ -277,7 +287,11 @@ void FaviconSource::SendDefaultResponse(
@@ -277,7 +285,11 @@ void FaviconSource::SendDefaultResponse(
SendDefaultResponse(std::move(callback), 16, 1.0f,
force_light_mode
? false
@@ -1170,7 +1194,7 @@ diff --git a/chrome/browser/ui/webui/favicon_source.cc b/chrome/browser/ui/webui
}
void FaviconSource::SendDefaultResponse(
@@ -287,6 +301,7 @@ void FaviconSource::SendDefaultResponse(
@@ -287,6 +299,7 @@ void FaviconSource::SendDefaultResponse(
bool dark_mode) {
int resource_id;
switch (size_in_dip) {
@@ -1178,7 +1202,7 @@ diff --git a/chrome/browser/ui/webui/favicon_source.cc b/chrome/browser/ui/webui
case 64:
resource_id =
dark_mode ? IDR_DEFAULT_FAVICON_DARK_64 : IDR_DEFAULT_FAVICON_64;
@@ -295,6 +310,7 @@ void FaviconSource::SendDefaultResponse(
@@ -295,6 +308,7 @@ void FaviconSource::SendDefaultResponse(
resource_id =
dark_mode ? IDR_DEFAULT_FAVICON_DARK_32 : IDR_DEFAULT_FAVICON_32;
break;
@@ -2266,6 +2290,15 @@ diff --git a/ui/webui/resources/cr_elements/BUILD.gn b/ui/webui/resources/cr_ele
web_component_files += [ "cr_a11y_announcer/cr_a11y_announcer.ts" ]
non_web_component_files += [
@@ -144,7 +144,7 @@ build_webui("build") {
]
}
- if (!is_android && !is_ios) {
+ if (!is_ios) {
non_web_component_files += [
"cr_container_shadow_mixin.ts",
"cr_radio_button/cr_radio_button_mixin.ts",
@@ -240,7 +240,7 @@ build_webui("build") {
"../js:build_ts",
"//third_party/lit/v3_0:build_ts",
@@ -2578,7 +2578,7 @@ new file mode 100644
--- /dev/null
+++ b/components/user_scripts/browser/resources/browser_resources.grd
@@ -0,0 +1,14 @@
+<grit latest_public_release="0" current_release="1" output_all_resource_defines="false">
+<grit latest_public_release="0" current_release="1">
+ <outputs>
+ <output filename="grit/userscripts_browser_resources.h" type="rc_header">
+ <emit emit_type='prepend'></emit>
@@ -2592,7 +2592,6 @@ new file mode 100644
+ </includes>
+ </release>
+</grit>
\ No newline at end of file
diff --git a/components/user_scripts/browser/resources/user-script-ui/BUILD.gn b/components/user_scripts/browser/resources/user-script-ui/BUILD.gn
new file mode 100644
--- /dev/null
@@ -7587,7 +7586,7 @@ new file mode 100755
+++ b/components/user_scripts/renderer/resources/user_scripts_renderer_resources.grd
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grit latest_public_release="0" current_release="1" output_all_resource_defines="false">
+<grit latest_public_release="0" current_release="1">
+ <outputs>
+ <output filename="grit/user_scripts_renderer_resources.h" type="rc_header">
+ <emit emit_type='prepend'></emit>
+35 -4
View File
@@ -9,7 +9,7 @@ suit Cromite logic.
.../adblock_chrome_content_browser_client.cc | 6 +
.../adblock_chrome_content_browser_client.h | 4 +
chrome/browser/adblock/android/BUILD.gn | 2 +-
.../adblock/android/adblock_strings.grd | 54 +-
.../adblock/android/adblock_strings.grd | 56 +-
.../java/res/layout/adblock_custom_item.xml | 14 +-
.../layout/adblock_filter_lists_list_item.xml | 15 +
...ences.xml => eyeo_adblock_preferences.xml} | 42 +-
@@ -80,10 +80,10 @@ suit Cromite logic.
.../converter/parser/url_filter_options.cc | 21 +-
.../serializer/flatbuffer_serializer.cc | 102 +-
components/adblock/core/features.cc | 6 +-
.../core/net/adblock_resource_request_impl.cc | 21 +-
.../core/net/adblock_resource_request_impl.cc | 26 +-
components/adblock/core/resources/.gitignore | 2 +-
components/adblock/core/resources/BUILD.gn | 5 +-
.../core/resources/adblock_resources.grd | 3 -
.../core/resources/adblock_resources.grd | 5 +-
.../core/resources/elemhide_for_selector.jst | 4 +-
.../adblock/core/resources/elemhideemu.jst | 2 +
.../resources/snippets/dist/dependencies.jst | 1690 ++++++
@@ -125,7 +125,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 +
120 files changed, 9154 insertions(+), 610 deletions(-)
120 files changed, 9157 insertions(+), 616 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
@@ -226,6 +226,15 @@ diff --git a/chrome/browser/adblock/android/BUILD.gn b/chrome/browser/adblock/an
diff --git a/chrome/browser/adblock/android/adblock_strings.grd b/chrome/browser/adblock/android/adblock_strings.grd
--- a/chrome/browser/adblock/android/adblock_strings.grd
+++ b/chrome/browser/adblock/android/adblock_strings.grd
@@ -15,7 +15,7 @@
You should have received a copy of the GNU General Public License
along with eyeo Chromium SDK. If not, see <http://www.gnu.org/licenses/>.
-->
-<grit current_release="1" latest_public_release="0" output_all_resource_defines="false">
+<grit current_release="1" latest_public_release="0">
<outputs>
<output filename="values-af/adblock_strings.xml" lang="af" type="android" />
<output filename="values-am/adblock_strings.xml" lang="am" type="android" />
@@ -186,10 +186,52 @@
<release seq="1">
<messages fallback_to_english="true">
@@ -4382,6 +4391,19 @@ diff --git a/components/adblock/core/net/adblock_resource_request_impl.cc b/comp
auto request = std::make_unique<network::ResourceRequest>();
request->url = url_;
request->method = MethodToString();
@@ -181,11 +166,8 @@ void AdblockResourceRequestImpl::OnDownloadFinished(
return;
}
- GURL::Replacements strip_query;
- strip_query.ClearQuery();
- GURL url = url_.ReplaceComponents(strip_query);
response_callback_.Run(
- url, std::move(downloaded_file),
+ url_, std::move(downloaded_file),
loader_->ResponseInfo() ? loader_->ResponseInfo()->headers : nullptr);
// response_callback_ may delete this, do not call any member variables now.
}
diff --git a/components/adblock/core/resources/.gitignore b/components/adblock/core/resources/.gitignore
--- a/components/adblock/core/resources/.gitignore
+++ b/components/adblock/core/resources/.gitignore
@@ -4413,6 +4435,15 @@ diff --git a/components/adblock/core/resources/BUILD.gn b/components/adblock/cor
diff --git a/components/adblock/core/resources/adblock_resources.grd b/components/adblock/core/resources/adblock_resources.grd
--- a/components/adblock/core/resources/adblock_resources.grd
+++ b/components/adblock/core/resources/adblock_resources.grd
@@ -15,7 +15,7 @@
You should have received a copy of the GNU General Public License
along with eyeo Chromium SDK. If not, see <http://www.gnu.org/licenses/>.
-->
-<grit latest_public_release="0" current_release="1" output_all_resource_defines="false">
+<grit latest_public_release="0" current_release="1">
<outputs>
<output filename="grit/adblock_resources.h" type="rc_header">
<emit emit_type="prepend">
@@ -30,9 +30,6 @@
<include name="IDR_ADBLOCK_ELEMHIDE_EMU_JS" file="elemhideemu.jst" type="BINDATA" />
<include name="IDR_ADBLOCK_SNIPPETS_JS" file="${root_gen_dir}/components/adblock/core/resources/snippets.jst" use_base_dir="false" type="BINDATA" compress="gzip" />
@@ -3,13 +3,13 @@ Date: Tue, 31 Oct 2023 16:20:12 +0000
Subject: Keep Manta Service Disabled
---
components/manta/features.cc | 2 ++
1 file changed, 2 insertions(+)
components/manta/features.cc | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/components/manta/features.cc b/components/manta/features.cc
--- a/components/manta/features.cc
+++ b/components/manta/features.cc
@@ -9,6 +9,7 @@
@@ -9,36 +9,43 @@
namespace manta::features {
BASE_FEATURE(kMantaService, "MantaService", base::FEATURE_ENABLED_BY_DEFAULT);
@@ -17,7 +17,11 @@ diff --git a/components/manta/features.cc b/components/manta/features.cc
// Enables Anchovy Prod Server
BASE_FEATURE(kAnchovyUseProdServer,
@@ -19,6 +20,7 @@ BASE_FEATURE(kAnchovyUseProdServer,
"AnchovyUseProdServer",
base::FEATURE_ENABLED_BY_DEFAULT);
+SET_CROMITE_FEATURE_DISABLED(kAnchovyUseProdServer);
// Enables Orca Prod Server
BASE_FEATURE(kOrcaUseProdServer,
"OrcaUseProdServer",
base::FEATURE_ENABLED_BY_DEFAULT);
@@ -25,4 +29,28 @@ diff --git a/components/manta/features.cc b/components/manta/features.cc
// Enables Scanner Prod Server
BASE_FEATURE(kScannerUseProdServer,
"ScannerUseProdServer",
base::FEATURE_ENABLED_BY_DEFAULT);
+SET_CROMITE_FEATURE_DISABLED(kScannerUseProdServer);
// Enables SeaPen Prod Server
BASE_FEATURE(kSeaPenUseProdServer,
"SeaPenUseProdServer",
base::FEATURE_ENABLED_BY_DEFAULT);
+SET_CROMITE_FEATURE_DISABLED(kSeaPenUseProdServer);
// Enables Mahi Prod Server
BASE_FEATURE(kMahiUseProdServer,
"MahiUseProdServer",
base::FEATURE_ENABLED_BY_DEFAULT);
+SET_CROMITE_FEATURE_DISABLED(kMahiUseProdServer);
// Enables Walrus Prod Server
BASE_FEATURE(kWalrusUseProdServer,
"WalrusUseProdServer",
base::FEATURE_ENABLED_BY_DEFAULT);
+SET_CROMITE_FEATURE_DISABLED(kWalrusUseProdServer);
bool IsMantaServiceEnabled() {
return base::FeatureList::IsEnabled(kMantaService);
--
@@ -5,9 +5,22 @@ Subject: Keep empty tabs between sessions
Original License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
.../browser/multiwindow/MultiWindowUtils.java | 2 +-
.../browser/tabmodel/TabPersistentStore.java | 15 ---------------
1 file changed, 15 deletions(-)
2 files changed, 1 insertion(+), 16 deletions(-)
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/multiwindow/MultiWindowUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/multiwindow/MultiWindowUtils.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/multiwindow/MultiWindowUtils.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/multiwindow/MultiWindowUtils.java
@@ -915,7 +915,7 @@ public class MultiWindowUtils implements ActivityStateListener {
for (TabModel model : models) {
for (int i = 0; i < model.getCount(); i++) {
Tab tab = model.getTabAt(i);
- if (!TabPersistentStore.shouldSkipTab(tab)) {
+ if ((true)) {
totalCount++;
}
}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java
@@ -325,8 +325,8 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser
public static final WritableObjectPropertyKey<Callback<Integer>> WIDTH_PX_CALLBACK =
new WritableObjectPropertyKey<>();
+ public static final PropertyModel.WritableIntPropertyKey PRIMARY_COLOR =
+ new PropertyModel.WritableIntPropertyKey();
+ public static final WritableObjectPropertyKey<Integer> PRIMARY_COLOR =
+ new WritableObjectPropertyKey<>();
+
public static final PropertyKey[] ALL_KEYS =
new PropertyKey[] {
@@ -1311,9 +1311,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.
import org.chromium.url.GURL;
+import org.chromium.chrome.browser.flags.ChromeFeatureList;
import java.util.List;
@@ -768,11 +769,16 @@ public class NewTabPage
import androidx.annotation.NonNull;
import org.chromium.chrome.browser.bookmarks.BookmarkManagerOpener;
@@ -772,11 +773,16 @@ public class NewTabPage
final int topControlsDistanceToRest =
mBrowserControlsStateProvider.getContentOffset()
- mBrowserControlsStateProvider.getTopControlsHeight();
@@ -1332,7 +1332,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.
if (topMargin != layoutParams.topMargin || bottomMargin != layoutParams.bottomMargin) {
layoutParams.topMargin = topMargin;
@@ -788,9 +794,7 @@ public class NewTabPage
@@ -792,9 +798,7 @@ public class NewTabPage
* strip.
*/
private int getToolbarExtraYOffset() {
@@ -606,7 +606,7 @@ diff --git a/third_party/blink/renderer/platform/graphics/static_bitmap_image.cc
#include "v8/include/v8.h"
+#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
+#include "third_party/skia/include/private/SkColorData.h"
+#include "third_party/skia/src/core/SkColorData.h"
+
namespace blink {
+74 -18
View File
@@ -13,6 +13,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
.../web_package/signed_exchange_loader.h | 2 +
.../signed_exchange_prefetch_handler.cc | 2 +-
.../signed_exchange_request_handler.cc | 1 +
.../Partition-HSTS-cache-by-NAK.inc | 1 +
net/http/transport_security_state.cc | 103 ++++++++++++------
net/http/transport_security_state.h | 39 ++++---
net/quic/crypto/proof_verifier_chromium.cc | 5 +-
@@ -22,10 +23,11 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
net/spdy/spdy_session.h | 3 +-
.../url_request_context_builder.cc | 14 ---
net/url_request/url_request_http_job.cc | 5 +-
services/network/network_context.cc | 31 ++++--
services/network/network_context.h | 13 ++-
.../public/mojom/network_context.mojom | 9 +-
21 files changed, 173 insertions(+), 102 deletions(-)
services/network/network_context.cc | 37 ++++---
services/network/network_context.h | 15 ++-
.../public/mojom/network_context.mojom | 10 +-
22 files changed, 181 insertions(+), 104 deletions(-)
create mode 100644 cromite_flags/net/base/features_cc/Partition-HSTS-cache-by-NAK.inc
diff --git a/chrome/browser/ssl/https_upgrades_interceptor.cc b/chrome/browser/ssl/https_upgrades_interceptor.cc
--- a/chrome/browser/ssl/https_upgrades_interceptor.cc
@@ -217,6 +219,12 @@ diff --git a/content/browser/web_package/signed_exchange_request_handler.cc b/co
frame_tree_node_id_, accept_langs_,
false /* keep_entry_for_prefetch_cache */);
diff --git a/cromite_flags/net/base/features_cc/Partition-HSTS-cache-by-NAK.inc b/cromite_flags/net/base/features_cc/Partition-HSTS-cache-by-NAK.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/net/base/features_cc/Partition-HSTS-cache-by-NAK.inc
@@ -0,0 +1 @@
+SET_CROMITE_FEATURE_DISABLED(kHstsTopLevelNavigationsOnly);
diff --git a/net/http/transport_security_state.cc b/net/http/transport_security_state.cc
--- a/net/http/transport_security_state.cc
+++ b/net/http/transport_security_state.cc
@@ -802,7 +810,32 @@ diff --git a/services/network/network_context.cc b/services/network/network_cont
pending_cert_verify->ocsp_result = ocsp_result;
pending_cert_verify->sct_list = sct_list;
pending_cert_verify->ct_verification_mode = ct_verification_mode;
@@ -2121,17 +2123,19 @@ void NetworkContext::SetCorsOriginAccessListsForOrigin(
@@ -2082,20 +2084,22 @@ void NetworkContext::VerifyCertInternal(
void NetworkContext::VerifyCert(
const scoped_refptr<net::X509Certificate>& certificate,
const net::HostPortPair& host_port,
+ const net::NetworkAnonymizationKey& network_anonymization_key,
const std::string& ocsp_result,
const std::string& sct_list,
VerifyCertCallback callback) {
- VerifyCertInternal(certificate, host_port, ocsp_result, sct_list,
+ VerifyCertInternal(certificate, host_port, network_anonymization_key, ocsp_result, sct_list,
CTVerificationMode::kTlsCertificate, std::move(callback));
}
void NetworkContext::VerifyCertForSignedExchange(
const scoped_refptr<net::X509Certificate>& certificate,
const net::HostPortPair& host_port,
+ const net::NetworkAnonymizationKey& network_anonymization_key,
const std::string& ocsp_result,
const std::string& sct_list,
VerifyCertCallback callback) {
- VerifyCertInternal(certificate, host_port, ocsp_result, sct_list,
+ VerifyCertInternal(certificate, host_port, network_anonymization_key, ocsp_result, sct_list,
CTVerificationMode::kSignedExchange, std::move(callback));
}
@@ -2121,17 +2125,19 @@ void NetworkContext::SetCorsOriginAccessListsForOrigin(
std::move(callback).Run();
}
@@ -825,7 +858,7 @@ diff --git a/services/network/network_context.cc b/services/network/network_cont
bool is_top_level_nav,
IsHSTSActiveForHostCallback callback) {
net::TransportSecurityState* security_state =
@@ -2143,10 +2147,10 @@ void NetworkContext::IsHSTSActiveForHost(const std::string& host,
@@ -2143,10 +2149,10 @@ void NetworkContext::IsHSTSActiveForHost(const std::string& host,
}
std::move(callback).Run(
@@ -838,7 +871,7 @@ diff --git a/services/network/network_context.cc b/services/network/network_cont
GetHSTSStateCallback callback) {
base::Value::Dict result;
@@ -2184,10 +2188,10 @@ void NetworkContext::GetHSTSState(const std::string& domain,
@@ -2184,10 +2190,10 @@ void NetworkContext::GetHSTSState(const std::string& domain,
net::TransportSecurityState::STSState dynamic_sts_state;
net::TransportSecurityState::PKPState dynamic_pkp_state;
bool found_sts_dynamic = transport_security_state->GetDynamicSTSState(
@@ -851,7 +884,7 @@ diff --git a/services/network/network_context.cc b/services/network/network_cont
if (found_sts_dynamic) {
result.Set("dynamic_upgrade_mode",
static_cast<int>(dynamic_sts_state.upgrade_mode));
@@ -2225,6 +2229,7 @@ void NetworkContext::GetHSTSState(const std::string& domain,
@@ -2225,6 +2231,7 @@ void NetworkContext::GetHSTSState(const std::string& domain,
}
void NetworkContext::DeleteDynamicDataForHost(
@@ -859,7 +892,7 @@ diff --git a/services/network/network_context.cc b/services/network/network_cont
const std::string& host,
DeleteDynamicDataForHostCallback callback) {
net::TransportSecurityState* transport_security_state =
@@ -2235,7 +2240,7 @@ void NetworkContext::DeleteDynamicDataForHost(
@@ -2235,7 +2242,7 @@ void NetworkContext::DeleteDynamicDataForHost(
}
std::move(callback).Run(
@@ -868,7 +901,7 @@ diff --git a/services/network/network_context.cc b/services/network/network_cont
}
void NetworkContext::EnableStaticKeyPinningForTesting(
@@ -2279,7 +2284,7 @@ void NetworkContext::PreconnectSockets(
@@ -2279,7 +2286,7 @@ void NetworkContext::PreconnectSockets(
DCHECK(!require_network_anonymization_key_ ||
!network_anonymization_key.IsEmpty());
@@ -877,7 +910,7 @@ diff --git a/services/network/network_context.cc b/services/network/network_cont
// |PreconnectSockets| may receive arguments from the renderer, which is not
// guaranteed to validate them.
@@ -3092,7 +3097,9 @@ void NetworkContext::OnConnectionError() {
@@ -3092,7 +3099,9 @@ void NetworkContext::OnConnectionError() {
}
}
@@ -888,7 +921,7 @@ diff --git a/services/network/network_context.cc b/services/network/network_cont
// TODO(lilyhoughton) This needs to be gotten rid of once explicit
// construction with a URLRequestContext is no longer supported.
@@ -3118,6 +3125,7 @@ GURL NetworkContext::GetHSTSRedirectForPreconnect(const GURL& original_url) {
@@ -3118,6 +3127,7 @@ GURL NetworkContext::GetHSTSRedirectForPreconnect(const GURL& original_url) {
// top-level navigation so we need to disallow HSTS upgrades for every
// preconnect.
if (!url_request_context_->transport_security_state()->ShouldUpgradeToSSL(
@@ -896,7 +929,7 @@ diff --git a/services/network/network_context.cc b/services/network/network_cont
original_url.host(), /*is_top_level_nav=*/false)) {
RecordHSTSPreconnectUpgradeReason(
HSTSRedirectUpgradeReason::kNotUpgradedNoHSTSPin);
@@ -3167,7 +3175,8 @@ void NetworkContext::OnVerifyCertComplete(uint64_t cert_verify_id, int result) {
@@ -3167,7 +3177,8 @@ void NetworkContext::OnVerifyCertComplete(uint64_t cert_verify_id, int result) {
url_request_context_->transport_security_state()->CheckPublicKeyPins(
pending_cert_verify->host_port.host(),
pending_cert_verify->result->is_issued_by_known_root,
@@ -909,7 +942,14 @@ diff --git a/services/network/network_context.cc b/services/network/network_cont
diff --git a/services/network/network_context.h b/services/network/network_context.h
--- a/services/network/network_context.h
+++ b/services/network/network_context.h
@@ -414,19 +414,22 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkContext
@@ -408,25 +408,29 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkContext
mojo::PendingReceiver<mojom::HostResolver> receiver) override;
void VerifyCert(const scoped_refptr<net::X509Certificate>& certificate,
const net::HostPortPair& host_port,
+ const net::NetworkAnonymizationKey& network_anonymization_key,
const std::string& ocsp_result,
const std::string& sct_list,
VerifyCertCallback callback) override;
void VerifyCertForSignedExchange(
const scoped_refptr<net::X509Certificate>& certificate,
const net::HostPortPair& host_port,
@@ -935,7 +975,7 @@ diff --git a/services/network/network_context.h b/services/network/network_conte
const std::string& host,
DeleteDynamicDataForHostCallback callback) override;
void SetCorsOriginAccessListsForOrigin(
@@ -769,7 +772,8 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkContext
@@ -769,7 +773,8 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkContext
mojo::PendingRemote<mojom::CookieAccessObserver> cookie_observer,
net::FirstPartySetMetadata first_party_set_metadata);
@@ -945,7 +985,15 @@ diff --git a/services/network/network_context.h b/services/network/network_conte
#if BUILDFLAG(IS_P2P_ENABLED)
void DestroySocketManager(P2PSocketManager* socket_manager);
@@ -975,6 +979,7 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkContext
@@ -781,6 +786,7 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkContext
void VerifyCertInternal(
const scoped_refptr<net::X509Certificate>& certificate,
const net::HostPortPair& host_port,
+ const net::NetworkAnonymizationKey& network_anonymization_key,
const std::string& ocsp_result,
const std::string& sct_list,
CTVerificationMode ct_verification_mode,
@@ -975,6 +981,7 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkContext
VerifyCertCallback callback;
scoped_refptr<net::X509Certificate> certificate;
net::HostPortPair host_port;
@@ -956,7 +1004,15 @@ diff --git a/services/network/network_context.h b/services/network/network_conte
diff --git a/services/network/public/mojom/network_context.mojom b/services/network/public/mojom/network_context.mojom
--- a/services/network/public/mojom/network_context.mojom
+++ b/services/network/public/mojom/network_context.mojom
@@ -1530,24 +1530,25 @@ interface NetworkContext {
@@ -1522,6 +1522,7 @@ interface NetworkContext {
// Checks the given certificate against the CertVerifier and CTVerifier.
VerifyCert(X509Certificate certificate,
HostPortPair host_port,
+ NetworkAnonymizationKey network_anonymization_key,
string ocsp_response,
string sct_list)
=> (int32 error_code, CertVerifyResult cv_result, bool pkp_bypassed);
@@ -1530,24 +1531,25 @@ interface NetworkContext {
// This implementation is specific for use by Signed Exchange.
VerifyCertForSignedExchange(X509Certificate certificate,
HostPortPair host_port,
@@ -985,7 +1041,7 @@ diff --git a/services/network/public/mojom/network_context.mojom b/services/netw
// Sets allowed and blocked origins respectively for the URLLoaderFactory
// consumers to access beyond the same-origin policy. The list is managed per
@@ -1566,7 +1567,7 @@ interface NetworkContext {
@@ -1566,7 +1568,7 @@ interface NetworkContext {
// Deletes any dynamic data stored for |host| from the transport
// security state. Returns true iff an entry was deleted.
// See net::TransportSecurityState::DeleteDynamicDataForHost for more detail.
@@ -108,9 +108,9 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
third_party/android_deps/BUILD.gn | 704 +-----------------
.../preconditions/javatests/BUILD.gn | 1 -
.../gms/ChromiumPlayServicesAvailability.java | 10 +-
third_party/androidx/customizations.gni | 13 +-
third_party/androidx/customizations.gni | 14 +-
third_party/cardboard/BUILD.gn | 4 -
86 files changed, 126 insertions(+), 2291 deletions(-)
86 files changed, 127 insertions(+), 2291 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
@@ -4579,12 +4579,13 @@ diff --git a/third_party/androidx/customizations.gni b/third_party/androidx/cust
_androidx_prebuilt(target_name) {
forward_variables_from(invoker, "*")
target_type = "android_aar_prebuilt"
@@ -172,6 +172,17 @@ template("androidx_android_aar_prebuilt") {
@@ -172,6 +172,18 @@ template("androidx_android_aar_prebuilt") {
}
}
+template("androidx_android_aar_prebuilt") {
+ if (target_name == "androidx_credentials_credentials_play_services_auth_java") {
+ if (target_name == "androidx_credentials_credentials_play_services_auth_java"
+ || target_name == "androidx_credentials_registry_registry_provider_play_services_java") {
+ forward_variables_from(invoker, "*")
+ not_needed(["deps", "aar_path", "info_path", "enable_bytecode_checks"])
+ } else {
@@ -4,7 +4,7 @@ Subject: Remove support for device memory and cpu recovery
License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
---
.../v8_memory/web_memory_impl.cc | 8 ++++++++
.../v8_memory/web_memory_impl.cc | 6 ++++++
...ort-for-device-memory-and-cpu-recovery.inc | 3 +++
...ort-for-device-memory-and-cpu-recovery.inc | 2 ++
.../browser/blob/blob_memory_controller.cc | 20 ++++++++++---------
@@ -14,7 +14,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
.../measure_memory_controller.cc | 5 +++++
.../blink/renderer/core/timing/memory_info.cc | 14 ++++++++++---
.../core/timing/window_performance.cc | 2 +-
10 files changed, 68 insertions(+), 18 deletions(-)
10 files changed, 66 insertions(+), 18 deletions(-)
create mode 100644 cromite_flags/third_party/blink/common/features_cc/Remove-support-for-device-memory-and-cpu-recovery.inc
create mode 100644 cromite_flags/third_party/blink/common/features_h/Remove-support-for-device-memory-and-cpu-recovery.inc
@@ -29,15 +29,13 @@ diff --git a/components/performance_manager/v8_memory/web_memory_impl.cc b/compo
namespace performance_manager {
@@ -111,6 +112,13 @@ WebMeasureMemorySecurityChecker::Create() {
@@ -111,6 +112,11 @@ WebMeasureMemorySecurityChecker::Create() {
bool WebMeasureMemorySecurityCheckerImpl::IsMeasureMemoryAllowed(
const FrameNode* frame) const {
+ if (!base::FeatureList::IsEnabled(
+ blink::features::kWebMeasureMemoryViaPerformanceManager)) {
+ std::move(bad_message_callback)
+ .Run("WebMeasureMemoryViaPerformanceManager feature is disabled");
+ return;
+ return false;
+ }
+
// TODO(crbug.com/40132061): The frame may have navigated since it sent the
@@ -11,8 +11,8 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
.../SearchActivityLocationBarLayout.java | 8 ---
.../tabbed_mode/TabbedRootUiCoordinator.java | 2 +-
.../browser/toolbar/ToolbarManager.java | 5 --
.../ui/AdaptiveToolbarUiCoordinator.java | 41 ------------
.../chrome/browser/ui/RootUiCoordinator.java | 19 ------
.../ui/AdaptiveToolbarUiCoordinator.java | 48 --------------
.../chrome/browser/ui/RootUiCoordinator.java | 18 -----
chrome/browser/ui/android/omnibox/BUILD.gn | 1 -
.../chrome/browser/omnibox/LocationBar.java | 6 --
.../omnibox/LocationBarCoordinator.java | 13 ----
@@ -24,7 +24,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
.../suggestions/AutocompleteMediator.java | 8 ---
.../omnibox/voice/VoiceRecognitionUtil.java | 1 +
chrome/browser/ui/android/toolbar/BUILD.gn | 1 -
20 files changed, 9 insertions(+), 253 deletions(-)
20 files changed, 9 insertions(+), 259 deletions(-)
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabRootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabRootUiCoordinator.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabRootUiCoordinator.java
@@ -228,7 +228,16 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/AdaptiveToolbarUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/ui/AdaptiveToolbarUiCoordinator.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/ui/AdaptiveToolbarUiCoordinator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ui/AdaptiveToolbarUiCoordinator.java
@@ -40,7 +40,6 @@ import org.chromium.chrome.browser.share.ShareButtonController;
@@ -26,8 +26,6 @@ import org.chromium.chrome.browser.dom_distiller.ReaderModeToolbarButtonControll
import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.identity_disc.IdentityDiscController;
import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher;
-import org.chromium.chrome.browser.omnibox.voice.VoiceRecognitionHandler;
-import org.chromium.chrome.browser.omnibox.voice.VoiceRecognitionHandler.VoiceInteractionSource;
import org.chromium.chrome.browser.price_insights.PriceInsightsButtonController;
import org.chromium.chrome.browser.price_tracking.CurrentTabPriceTrackingStateSupplier;
import org.chromium.chrome.browser.price_tracking.PriceTrackingBottomSheetContentCoordinator;
@@ -40,7 +38,6 @@ import org.chromium.chrome.browser.share.ShareButtonController;
import org.chromium.chrome.browser.share.ShareDelegate;
import org.chromium.chrome.browser.tabmodel.TabModelSelector;
import org.chromium.chrome.browser.toolbar.ButtonDataProvider;
@@ -236,7 +245,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/AdaptiveTool
import org.chromium.chrome.browser.toolbar.adaptive.AdaptiveButtonActionMenuCoordinator;
import org.chromium.chrome.browser.toolbar.adaptive.AdaptiveToolbarBehavior;
import org.chromium.chrome.browser.toolbar.adaptive.AdaptiveToolbarButtonController;
@@ -68,7 +67,6 @@ public class AdaptiveToolbarUiCoordinator {
@@ -68,7 +65,6 @@ public class AdaptiveToolbarUiCoordinator {
private CurrentTabPriceTrackingStateSupplier mCurrentTabPriceTrackingStateSupplier;
private ContextualPageActionController mContextualPageActionController;
private AdaptiveToolbarButtonController mAdaptiveToolbarButtonController;
@@ -244,7 +253,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/AdaptiveTool
private BottomSheetController mBottomSheetController;
private ObservableSupplier<Profile> mProfileSupplier;
private Supplier<ScrimManager> mScrimSupplier;
@@ -232,45 +230,6 @@ public class AdaptiveToolbarUiCoordinator {
@@ -232,45 +228,6 @@ public class AdaptiveToolbarUiCoordinator {
mButtonDataProviders = List.of(identityDiscController, adaptiveToolbarButtonController);
}
@@ -290,6 +299,18 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/AdaptiveTool
/**
* Returns the list of {@link ButtonDataProvider}. The order in which the providers determines
* which one will be shown first.
@@ -279,11 +236,6 @@ public class AdaptiveToolbarUiCoordinator {
return mButtonDataProviders;
}
- /** Returns {@link VoiceToolbarButtonController} used for voice search button. */
- public VoiceToolbarButtonController getVoiceToolbarButtonController() {
- return mVoiceToolbarButtonController;
- }
-
/** Destroy internally used objects. */
public void destroy() {
if (mCurrentTabPriceTrackingStateSupplier != null) {
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
@@ -301,15 +322,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordi
import org.chromium.chrome.browser.paint_preview.DemoPaintPreview;
import org.chromium.chrome.browser.password_manager.ManagePasswordsReferrer;
import org.chromium.chrome.browser.password_manager.PasswordManagerLauncher;
@@ -130,7 +129,6 @@ import org.chromium.chrome.browser.tabmodel.TabModelSelector;
import org.chromium.chrome.browser.theme.TopUiThemeColorProvider;
import org.chromium.chrome.browser.toolbar.ToolbarIntentMetadata;
import org.chromium.chrome.browser.toolbar.ToolbarManager;
-import org.chromium.chrome.browser.toolbar.adaptive.AdaptiveToolbarBehavior;
import org.chromium.chrome.browser.toolbar.top.ToolbarActionModeCallback;
import org.chromium.chrome.browser.toolbar.top.ToolbarControlContainer;
import org.chromium.chrome.browser.ui.appmenu.AppMenuBlocker;
@@ -285,7 +283,6 @@ public class RootUiCoordinator
@@ -285,7 +284,6 @@ public class RootUiCoordinator
private LayoutManagerImpl mLayoutManager;
protected OneshotSupplier<ToolbarIntentMetadata> mIntentMetadataOneshotSupplier;
protected OneshotSupplierImpl<Boolean> mPromoShownOneshotSupplier = new OneshotSupplierImpl<>();
@@ -317,7 +330,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordi
private MediaCaptureOverlayController mCaptureController;
private @Nullable ScrollCaptureManager mScrollCaptureManager;
protected final ActivityLifecycleDispatcher mActivityLifecycleDispatcher;
@@ -612,9 +609,6 @@ public class RootUiCoordinator
@@ -612,9 +610,6 @@ public class RootUiCoordinator
}
if (mToolbarManager != null) {
@@ -327,7 +340,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordi
mToolbarManager.destroy();
mToolbarManager = null;
}
@@ -1488,23 +1482,10 @@ public class RootUiCoordinator
@@ -1488,23 +1483,10 @@ public class RootUiCoordinator
if (!mSupportsAppMenuSupplier.getAsBoolean()) {
mToolbarManager.getToolbar().disableMenuButton();
}
@@ -6,17 +6,17 @@ restore https://chromium-review.googlesource.com/c/chromium/src/+/5554182
License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
---
.../chrome/browser/bookmarks/BookmarkToolbar.java | 14 ++++++++++++++
.../bookmarks/BookmarkToolbarCoordinator.java | 1 +
.../browser/bookmarks/BookmarkToolbarMediator.java | 1 +
.../bookmarks/BookmarkToolbarProperties.java | 9 +++++++++
.../bookmarks/BookmarkToolbarViewBinder.java | 4 ++++
5 files changed, 29 insertions(+)
.../chrome/browser/bookmarks/BookmarkToolbar.java | 13 +++++++++++++
.../bookmarks/BookmarkToolbarCoordinator.java | 1 +
.../browser/bookmarks/BookmarkToolbarMediator.java | 1 +
.../bookmarks/BookmarkToolbarProperties.java | 9 +++++++++
.../bookmarks/BookmarkToolbarViewBinder.java | 4 ++++
5 files changed, 28 insertions(+)
diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbar.java b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbar.java
--- a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbar.java
+++ b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbar.java
@@ -10,10 +10,13 @@ import android.view.MenuItem;
@@ -10,10 +10,12 @@ import android.view.MenuItem;
import android.view.View.OnClickListener;
import androidx.annotation.IdRes;
@@ -24,13 +24,12 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows
import androidx.appcompat.widget.Toolbar.OnMenuItemClickListener;
import androidx.core.view.MenuCompat;
+import org.chromium.chrome.R;
import org.chromium.chrome.browser.bookmarks.BookmarkUiState.BookmarkUiMode;
+import org.chromium.components.bookmarks.BookmarkItem;
import org.chromium.components.bookmarks.BookmarkId;
import org.chromium.components.browser_ui.util.ToolbarUtils;
import org.chromium.components.browser_ui.widget.selectable_list.SelectableListToolbar;
@@ -29,8 +32,10 @@ import java.util.function.Function;
@@ -29,8 +31,10 @@ import java.util.function.Function;
*/
public class BookmarkToolbar extends SelectableListToolbar<BookmarkId>
implements OnMenuItemClickListener, OnClickListener {
@@ -41,7 +40,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows
private boolean mEditButtonVisible;
private boolean mNewFolderButtonVisible;
private boolean mNewFolderButtonEnabled;
@@ -58,6 +63,11 @@ public class BookmarkToolbar extends SelectableListToolbar<BookmarkId>
@@ -58,6 +62,11 @@ public class BookmarkToolbar extends SelectableListToolbar<BookmarkId>
setOnMenuItemClickListener(this);
}
@@ -53,7 +52,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows
void setSelectionDelegate(SelectionDelegate selectionDelegate) {
mSelectionDelegate = selectionDelegate;
getMenu().setGroupEnabled(R.id.selection_mode_menu_group, true);
@@ -161,6 +171,10 @@ public class BookmarkToolbar extends SelectableListToolbar<BookmarkId>
@@ -161,6 +170,10 @@ public class BookmarkToolbar extends SelectableListToolbar<BookmarkId>
getMenu().findItem(id).setChecked(true);
}
+206 -11
View File
@@ -15,12 +15,16 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
.../android/java/res/layout/ntp_shortcuts.xml | 65 ++++++
chrome/android/java/res/values/attrs.xml | 4 +
chrome/android/java/res/values/dimens.xml | 2 +
.../chrome/browser/ChromeTabbedActivity.java | 3 +-
.../browser/TabbedModeTabDelegateFactory.java | 9 +-
.../feedback/ChromeFeedbackCollector.java | 1 +
.../feedback/SimplifiedNtpFeedbackSource.java | 38 ++++
.../identity_disc/IdentityDiscController.java | 5 +-
.../native_page/NativePageFactory.java | 19 +-
.../NativePageNavigationDelegateImpl.java | 2 +-
.../chrome/browser/ntp/NewTabPage.java | 8 +-
.../chrome/browser/ntp/NewTabPageLayout.java | 25 ++-
.../SuggestionsNavigationDelegate.java | 17 ++
.../SuggestionsNavigationDelegate.java | 27 ++-
.../mostvisited/MostVisitedSitesBridge.java | 2 +-
.../tile/MostVisitedTilesCoordinator.java | 7 +-
.../tile/MostVisitedTilesGridLayout.java | 193 ++++++++++++++++++
@@ -33,7 +37,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
.../Restore-Simplified-NTP-launch.inc | 12 ++
.../Restore-Simplified-NTP-launch.inc | 5 +
.../Restore-Simplified-NTP-launch.inc | 1 +
27 files changed, 399 insertions(+), 31 deletions(-)
31 files changed, 437 insertions(+), 42 deletions(-)
create mode 100644 chrome/android/java/res/layout/ntp_shortcuts.xml
create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/feedback/SimplifiedNtpFeedbackSource.java
create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/suggestions/tile/MostVisitedTilesGridLayout.java
@@ -253,6 +257,66 @@ diff --git a/chrome/android/java/res/values/dimens.xml b/chrome/android/java/res
<dimen name="tile_layout_no_logo_top_margin">20dp</dimen>
<dimen name="mvt_container_lateral_margin">@dimen/signin_promo_lateral_paddings</dimen>
<dimen name="mvt_container_top_padding">17dp</dimen>
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
@@ -2780,7 +2780,8 @@ public class ChromeTabbedActivity extends ChromeActivity implements MismatchedIn
getToolbarManager().getTabStripHeightSupplier(),
mModuleRegistrySupplier,
mEdgeToEdgeControllerSupplier,
- getStartupMetricsTracker());
+ getStartupMetricsTracker(),
+ mBookmarkManagerOpenerSupplier);
}
return mTabDelegateFactory;
}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/TabbedModeTabDelegateFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/TabbedModeTabDelegateFactory.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/TabbedModeTabDelegateFactory.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/TabbedModeTabDelegateFactory.java
@@ -15,6 +15,7 @@ import org.chromium.base.supplier.OneshotSupplier;
import org.chromium.base.supplier.Supplier;
import org.chromium.chrome.browser.app.ChromeActivity;
import org.chromium.chrome.browser.app.tab_activity_glue.ActivityTabWebContentsDelegateAndroid;
+import org.chromium.chrome.browser.bookmarks.BookmarkManagerOpener;
import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider;
import org.chromium.chrome.browser.compositor.CompositorViewHolder;
import org.chromium.chrome.browser.contextmenu.ChromeContextMenuPopulator;
@@ -82,6 +83,7 @@ public class TabbedModeTabDelegateFactory implements TabDelegateFactory {
private final OneshotSupplier<ModuleRegistry> mModuleRegistrySupplier;
private final ObservableSupplier<EdgeToEdgeController> mEdgeToEdgeControllerSupplier;
private final StartupMetricsTracker mStartupMetricsTracker;
+ private final ObservableSupplier<BookmarkManagerOpener> mBookmarkManagerOpenerSupplier;
private NativePageFactory mNativePageFactory;
@@ -111,7 +113,8 @@ public class TabbedModeTabDelegateFactory implements TabDelegateFactory {
@NonNull ObservableSupplier<Integer> tabStripHeightSupplier,
@NonNull OneshotSupplier<ModuleRegistry> moduleRegistrySupplier,
@NonNull ObservableSupplier<EdgeToEdgeController> edgeToEdgeControllerSupplier,
- StartupMetricsTracker startupMetricsTracker) {
+ StartupMetricsTracker startupMetricsTracker,
+ @NonNull ObservableSupplier<BookmarkManagerOpener> bookmarkManagerOpenerSupplier) {
mActivity = activity;
mAppBrowserControlsVisibilityDelegate = appBrowserControlsVisibilityDelegate;
mShareDelegateSupplier = shareDelegateSupplier;
@@ -138,6 +141,7 @@ public class TabbedModeTabDelegateFactory implements TabDelegateFactory {
mModuleRegistrySupplier = moduleRegistrySupplier;
mEdgeToEdgeControllerSupplier = edgeToEdgeControllerSupplier;
mStartupMetricsTracker = startupMetricsTracker;
+ mBookmarkManagerOpenerSupplier = bookmarkManagerOpenerSupplier;
}
@Override
@@ -204,7 +208,8 @@ public class TabbedModeTabDelegateFactory implements TabDelegateFactory {
mTabStripHeightSupplier,
mModuleRegistrySupplier,
mEdgeToEdgeControllerSupplier,
- mStartupMetricsTracker);
+ mStartupMetricsTracker,
+ mBookmarkManagerOpenerSupplier);
}
return mNativePageFactory.createNativePage(url, candidatePage, tab, pdfInfo);
}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/feedback/ChromeFeedbackCollector.java b/chrome/android/java/src/org/chromium/chrome/browser/feedback/ChromeFeedbackCollector.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/feedback/ChromeFeedbackCollector.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/feedback/ChromeFeedbackCollector.java
@@ -322,6 +386,93 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/identity_disc/I
}
private ButtonSpec buttonSpecWithDrawableAndDescription(
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java
@@ -22,6 +22,7 @@ import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor;
import org.chromium.chrome.browser.app.ChromeActivity;
import org.chromium.chrome.browser.app.download.home.DownloadPage;
import org.chromium.chrome.browser.bookmarks.BookmarkPage;
+import org.chromium.chrome.browser.bookmarks.BookmarkManagerOpener;
import org.chromium.chrome.browser.browser_controls.BrowserControlsMarginSupplier;
import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider;
import org.chromium.chrome.browser.fullscreen.BrowserControlsManager;
@@ -78,6 +79,7 @@ public class NativePageFactory {
private final OneshotSupplier<ModuleRegistry> mModuleRegistrySupplier;
private final ObservableSupplier<EdgeToEdgeController> mEdgeToEdgeControllerSupplier;
private final StartupMetricsTracker mStartupMetricsTracker;
+ private final ObservableSupplier<BookmarkManagerOpener> mBookmarkManagerOpenerSupplier;
private NewTabPageUma mNewTabPageUma;
private NativePageBuilder mNativePageBuilder;
@@ -100,7 +102,8 @@ public class NativePageFactory {
@NonNull ObservableSupplier<Integer> tabStripHeightSupplier,
@NonNull OneshotSupplier<ModuleRegistry> moduleRegistrySupplier,
@NonNull ObservableSupplier<EdgeToEdgeController> edgeToEdgeControllerSupplier,
- @NonNull StartupMetricsTracker startupMetricsTracker) {
+ @NonNull StartupMetricsTracker startupMetricsTracker,
+ @NonNull ObservableSupplier<BookmarkManagerOpener> bookmarkManagerOpenerSupplier) {
mActivity = activity;
mBottomSheetController = sheetController;
mBrowserControlsManager = browserControlsManager;
@@ -118,6 +121,7 @@ public class NativePageFactory {
mModuleRegistrySupplier = moduleRegistrySupplier;
mEdgeToEdgeControllerSupplier = edgeToEdgeControllerSupplier;
mStartupMetricsTracker = startupMetricsTracker;
+ mBookmarkManagerOpenerSupplier = bookmarkManagerOpenerSupplier;
}
private NativePageBuilder getBuilder() {
@@ -141,7 +145,8 @@ public class NativePageFactory {
mTabStripHeightSupplier,
mModuleRegistrySupplier,
mEdgeToEdgeControllerSupplier,
- mStartupMetricsTracker);
+ mStartupMetricsTracker,
+ mBookmarkManagerOpenerSupplier);
}
return mNativePageBuilder;
}
@@ -174,9 +179,10 @@ public class NativePageFactory {
private final OneshotSupplier<ModuleRegistry> mModuleRegistrySupplier;
private final ObservableSupplier<EdgeToEdgeController> mEdgeToEdgeControllerSupplier;
private final StartupMetricsTracker mStartupMetricsTracker;
+ private final ObservableSupplier<BookmarkManagerOpener> mBookmarkManagerOpenerSupplier;
public NativePageBuilder(
- Activity activity,
+ ChromeActivity activity,
Supplier<NewTabPageUma> uma,
BottomSheetController sheetController,
BrowserControlsManager browserControlsManager,
@@ -193,7 +199,8 @@ public class NativePageFactory {
ObservableSupplier<Integer> tabStripHeightSupplier,
OneshotSupplier<ModuleRegistry> moduleRegistrySupplier,
ObservableSupplier<EdgeToEdgeController> edgeToEdgeControllerSupplier,
- StartupMetricsTracker startupMetricsTracker) {
+ StartupMetricsTracker startupMetricsTracker,
+ @NonNull ObservableSupplier<BookmarkManagerOpener> bookmarkManagerOpenerSupplier) {
mActivity = activity;
mUma = uma;
mBottomSheetController = sheetController;
@@ -212,6 +219,7 @@ public class NativePageFactory {
mModuleRegistrySupplier = moduleRegistrySupplier;
mEdgeToEdgeControllerSupplier = edgeToEdgeControllerSupplier;
mStartupMetricsTracker = startupMetricsTracker;
+ mBookmarkManagerOpenerSupplier = bookmarkManagerOpenerSupplier;
}
protected NativePage buildNewTabPage(Tab tab, String url) {
@@ -245,7 +253,8 @@ public class NativePageFactory {
mTabStripHeightSupplier,
mModuleRegistrySupplier,
mEdgeToEdgeControllerSupplier,
- mStartupMetricsTracker);
+ mStartupMetricsTracker,
+ mBookmarkManagerOpenerSupplier);
}
protected NativePage buildBookmarksPage(Tab tab) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageNavigationDelegateImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageNavigationDelegateImpl.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageNavigationDelegateImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageNavigationDelegateImpl.java
@@ -334,6 +485,38 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/Nat
protected final TabModelSelector mTabModelSelector;
protected final Tab mTab;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java
@@ -117,6 +117,9 @@ import org.chromium.ui.base.DeviceFormFactor;
import org.chromium.ui.base.WindowAndroid;
import org.chromium.url.GURL;
+import androidx.annotation.NonNull;
+import org.chromium.chrome.browser.bookmarks.BookmarkManagerOpener;
+
import java.util.List;
/** Provides functionality when the user interacts with the NTP. */
@@ -475,7 +478,8 @@ public class NewTabPage
ObservableSupplier<Integer> tabStripHeightSupplier,
OneshotSupplier<ModuleRegistry> moduleRegistrySupplier,
ObservableSupplier<EdgeToEdgeController> edgeToEdgeControllerSupplier,
- StartupMetricsTracker startupMetricsTracker) {
+ StartupMetricsTracker startupMetricsTracker,
+ @NonNull ObservableSupplier<BookmarkManagerOpener> bookmarkManagerOpenerSupplier) {
mConstructedTimeNs = System.nanoTime();
TraceEvent.begin(TAG);
@@ -499,7 +503,7 @@ public class NewTabPage
SuggestionsNavigationDelegate navigationDelegate =
new SuggestionsNavigationDelegate(
- activity, profile, nativePageHost, tabModelSelector, mTab);
+ activity, profile, nativePageHost, tabModelSelector, mTab, bookmarkManagerOpenerSupplier);
mNewTabPageManager =
new NewTabPageManagerImpl(
navigationDelegate, profile, nativePageHost, snackbarManager);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java
@@ -414,24 +597,38 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageL
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsNavigationDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsNavigationDelegate.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsNavigationDelegate.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsNavigationDelegate.java
@@ -22,6 +22,11 @@ import org.chromium.ui.base.PageTransition;
@@ -22,16 +22,41 @@ import org.chromium.ui.base.PageTransition;
import org.chromium.ui.mojom.WindowOpenDisposition;
import org.chromium.url.GURL;
+import androidx.annotation.NonNull;
+import org.chromium.base.supplier.ObservableSupplier;
+import org.chromium.chrome.browser.bookmarks.BookmarkUtils;
+import org.chromium.chrome.browser.download.DownloadUtils;
+import org.chromium.chrome.browser.download.DownloadOpenSource;
+import org.chromium.chrome.browser.profiles.OtrProfileId;
+import org.chromium.chrome.browser.bookmarks.BookmarkManagerOpener;
+
/** Extension of {@link NativePageNavigationDelegate} with suggestions-specific methods. */
public class SuggestionsNavigationDelegate extends NativePageNavigationDelegateImpl {
@@ -34,6 +39,18 @@ public class SuggestionsNavigationDelegate extends NativePageNavigationDelegateI
+ private final @NonNull ObservableSupplier<BookmarkManagerOpener> mBookmarkManagerOpenerSupplier;
+
public SuggestionsNavigationDelegate(
Activity activity,
Profile profile,
NativePageHost host,
TabModelSelector tabModelSelector,
- Tab tab) {
+ Tab tab,
+ @NonNull ObservableSupplier<BookmarkManagerOpener> bookmarkManagerOpenerSupplier) {
super(activity, profile, host, tabModelSelector, tab);
}
+ mBookmarkManagerOpenerSupplier = bookmarkManagerOpenerSupplier;
+ }
+
+ public void navigateToBookmarks() {
+ BookmarkUtils.showBookmarkManager(mActivity, mTab.isIncognito());
+ mBookmarkManagerOpenerSupplier.get()
+ .showBookmarkManager(mActivity, mTab.getProfile());
+ }
+
+ public void navigateToDownloadManager() {
@@ -440,11 +637,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/Sug
+ otrProfileID = mProfile.getOtrProfileId();
+ }
+ DownloadUtils.showDownloadManager(mActivity, mTab, otrProfileID, DownloadOpenSource.NEW_TAB_PAGE);
+ }
+
}
/**
* Opens the suggestions page without recording metrics.
*
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/mostvisited/MostVisitedSitesBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/mostvisited/MostVisitedSitesBridge.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/mostvisited/MostVisitedSitesBridge.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/mostvisited/MostVisitedSitesBridge.java
@@ -7,28 +7,23 @@ Voice button and legacy share/voice functionality is not restored.
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
.../chrome/browser/settings/MainSettings.java | 15 ++-------------
.../segmentation_platform_config.cc | 1 +
.../adaptive/AdaptiveToolbarButtonController.java | 2 +-
.../toolbar/adaptive/AdaptiveToolbarPrefs.java | 2 +-
.../adaptive/AdaptiveToolbarStatePredictor.java | 4 ++++
...RadioButtonGroupAdaptiveToolbarPreference.java | 11 ++---------
...aptive-button-in-top-toolbar-customization.inc | 1 +
7 files changed, 12 insertions(+), 24 deletions(-)
.../chrome/browser/settings/MainSettings.java | 9 +--------
.../segmentation_platform_config.cc | 1 +
.../adaptive/AdaptiveToolbarButtonController.java | 2 +-
.../toolbar/adaptive/AdaptiveToolbarPrefs.java | 2 +-
.../adaptive/AdaptiveToolbarStatePredictor.java | 4 ++++
.../RadioButtonGroupAdaptiveToolbarPreference.java | 11 ++---------
...e-adaptive-button-in-top-toolbar-customization.inc | 1 +
7 files changed, 11 insertions(+), 19 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/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
@@ -288,19 +288,8 @@ public class MainSettings extends ChromeBaseSettingsFragment
if (!ChromeFeatureList.sAndroidAppearanceSettings.isEnabled()) {
removePreferenceIfPresent(PREF_APPEARANCE);
- // LINT.IfChange(InitPrefToolbarShortcut)
- new AdaptiveToolbarStatePredictor(
- getContext(),
- getProfile(),
- /* androidPermissionDelegate= */ null,
@@ -293,14 +293,7 @@ public class MainSettings extends ChromeBaseSettingsFragment
getContext(),
getProfile(),
/* androidPermissionDelegate= */ null,
- /* behavior= */ null)
- .recomputeUiState(
- uiState -> {
@@ -37,8 +32,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSe
- removePreferenceIfPresent(PREF_TOOLBAR_SHORTCUT);
- }
- });
+
+ new AdaptiveToolbarStatePredictor(getContext(), getProfile(), null);
+ /* behavior= */ null);
// LINT.ThenChange(//chrome/android/java/src/org/chromium/chrome/browser/appearance/settings/AppearanceSettingsFragment.java:InitPrefToolbarShortcut)
// LINT.IfChange(InitPrefUiTheme)
+2 -2
View File
@@ -61,7 +61,7 @@ diff --git a/android_webview/browser/aw_content_browser_client.cc b/android_webv
std::string GetProduct() {
- return embedder_support::GetProductAndVersion();
+ return embedder_support::GetProductAndVersion(UserAgentReductionEnterprisePolicyState::kForceEnabled);
+ return embedder_support::GetProductAndVersion(embedder_support::UserAgentReductionEnterprisePolicyState::kForceEnabled);
}
std::string GetUserAgent() {
@@ -751,7 +751,7 @@ diff --git a/chrome/browser/android/content/content_utils.cc b/chrome/browser/an
blink::UserAgentOverride spoofed_ua;
spoofed_ua.ua_string_override = content::BuildUserAgentFromOSAndProduct(
- kLinuxInfoStr, embedder_support::GetProductAndVersion());
+ kLinuxInfoStr, embedder_support::GetProductAndVersion(UserAgentReductionEnterprisePolicyState::kForceEnabled));
+ 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 =
+6 -4
View File
@@ -6,9 +6,9 @@ Allows log activation without opening the console window.
Log rotation enabled by default.
---
chrome/common/logging_chrome.cc | 11 ++++++++---
chrome/common/logging_chrome.h | 5 ++++-
chrome/common/logging_chrome.h | 6 +++++-
content/app/content_main.cc | 9 ++++++---
3 files changed, 18 insertions(+), 7 deletions(-)
3 files changed, 19 insertions(+), 7 deletions(-)
diff --git a/chrome/common/logging_chrome.cc b/chrome/common/logging_chrome.cc
--- a/chrome/common/logging_chrome.cc
@@ -63,7 +63,7 @@ diff --git a/chrome/common/logging_chrome.cc b/chrome/common/logging_chrome.cc
diff --git a/chrome/common/logging_chrome.h b/chrome/common/logging_chrome.h
--- a/chrome/common/logging_chrome.h
+++ b/chrome/common/logging_chrome.h
@@ -34,9 +34,12 @@ LoggingDestination DetermineLoggingDestination(
@@ -34,10 +34,14 @@ LoggingDestination DetermineLoggingDestination(
// write new logs to the latest log file. Otherwise, we reuse the existing file
// if exists.
base::FilePath SetUpLogFile(const base::FilePath& target_path, bool new_log);
@@ -74,9 +74,11 @@ diff --git a/chrome/common/logging_chrome.h b/chrome/common/logging_chrome.h
bool RotateLogFile(const base::FilePath& target_path);
+#endif
+#if BUILDFLAG(IS_CHROMEOS)
#if defined(UNIT_TEST)
// Expose the following methods only for tests.
@@ -67,7 +70,7 @@ base::FilePath GetLogFileName(const base::CommandLine& command_line);
@@ -67,7 +71,7 @@ base::FilePath GetLogFileName(const base::CommandLine& command_line);
// otherwise.
bool DialogsAreSuppressed();
+1 -1
View File
@@ -514,7 +514,7 @@ new file mode 100755
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/about_flags.h"
+#include "chrome/browser/flags/jni_headers/CromiteNativeUtils_jni.h"
+#include "components/flags_ui/pref_service_flags_storage.h"
+#include "components/webui/flags/pref_service_flags_storage.h"
+
+#include "base/android/jni_string.h"
+