Loading build/patches/Add-bookmark-import-export-actions.patch +39 −68 Original line number Diff line number Diff line Loading @@ -26,9 +26,8 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../bookmarks/BookmarkToolbarViewBinder.java | 6 + .../native_page/NativePageFactory.java | 11 +- chrome/browser/BUILD.gn | 11 +- .../bookmarks/android/bookmark_bridge.cc | 277 +++++++++++++++++ .../bookmarks/android/bookmark_bridge.h | 29 +- .../browser/bookmarks/bookmark_html_writer.cc | 3 + .../bookmarks/android/bookmark_bridge.cc | 267 ++++++++++++++++ .../bookmarks/android/bookmark_bridge.h | 30 +- .../dialogs/DownloadLocationCustomView.java | 8 +- .../DownloadLocationDialogCoordinator.java | 10 +- .../flags/android/chrome_feature_list.cc | 1 + Loading @@ -53,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 + 42 files changed, 900 insertions(+), 30 deletions(-) 41 files changed, 888 insertions(+), 30 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 Loading Loading @@ -871,7 +870,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse // Must come after all headers that specialize FromJniType() / ToJniType(). #include "chrome/android/chrome_jni_headers/BookmarkBridge_jni.h" @@ -84,12 +106,97 @@ using bookmarks::android::JavaBookmarkIdGetType; @@ -84,6 +106,57 @@ using bookmarks::android::JavaBookmarkIdGetType; using content::BrowserThread; using power_bookmarks::PowerBookmarkMeta; Loading Loading @@ -910,7 +909,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse + } + } + + if (base::Contains(chrome::ChromeDebugURLs(), fixed_url)) { + if (base::Contains(chrome::ChromeDebugURLs(), fixed_url.spec())) { + return true; + } + Loading @@ -929,47 +928,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse namespace { // The key used to connect the instance of the bookmark bridge to the bookmark // model. const char kBookmarkBridgeUserDataKey[] = "bookmark_bridge"; // Compares titles of different instance of BookmarkNode. +class FileBookmarksExportObserver: public BookmarksExportObserver { + public: + FileBookmarksExportObserver( + const JavaParamRef<jobject>& obj, + ui::WindowAndroid* window, + const std::string& export_path) : + obj_(ScopedJavaGlobalRef<jobject>(obj)), + window_(window), + export_path_(export_path) {} + + void OnExportFinished(Result result) override { + if (result == Result::kSuccess) { + LOG(INFO) << "Bookmarks exported successfully to " << export_path_; + } else if (result == Result::kCouldNotCreateFile) { + LOG(ERROR) << "Bookmarks export: could not create file " << export_path_; + } else if (result == Result::kCouldNotWriteHeader) { + LOG(ERROR) << "Bookmarks export: could not write header"; + } else if (result == Result::kCouldNotWriteNodes) { + LOG(ERROR) << "Bookmarks export: could not write nodes"; + } + + JNIEnv* env = AttachCurrentThread(); + Java_BookmarkBridge_bookmarksExported(env, obj_, window_->GetJavaObject(), + ConvertUTF8ToJavaString(env, export_path_), + result == Result::kSuccess); + delete this; + } + + private: + const ScopedJavaGlobalRef<jobject> obj_; + raw_ptr<ui::WindowAndroid> window_; + const std::string export_path_; +}; + class BookmarkTitleComparer { public: explicit BookmarkTitleComparer(BookmarkBridge* bookmark_bridge, @@ -231,6 +338,10 @@ BookmarkBridge::~BookmarkBridge() { @@ -231,6 +304,10 @@ BookmarkBridge::~BookmarkBridge() { partner_bookmarks_shim_observation_.Reset(); bookmark_model_observation_.Reset(); profile_observation_.Reset(); Loading @@ -980,7 +939,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse } void BookmarkBridge::Destroy(JNIEnv* env) { @@ -765,6 +876,172 @@ jint BookmarkBridge::GetTotalBookmarkCount( @@ -765,6 +842,196 @@ jint BookmarkBridge::GetTotalBookmarkCount( return count; } Loading Loading @@ -1038,8 +997,32 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse + export_path_ = export_path_.Append(FILE_PATH_LITERAL("bookmarks.html")); + } + + observer_ = new FileBookmarksExportObserver(obj, window, export_path_.MaybeAsASCII()); + bookmark_html_writer::WriteBookmarks(profile_, export_path_, observer_); + bookmark_html_writer::WriteBookmarks(profile_, export_path_, + base::BindOnce(&BookmarkBridge::ExportBookmarksEnd, + weak_ptr_factory_.GetWeakPtr(), + base::android::ScopedJavaGlobalRef<jobject>(obj), + window)); +} + +void BookmarkBridge::ExportBookmarksEnd(const ScopedJavaGlobalRef<jobject>& obj, + ui::WindowAndroid* window, + bookmark_html_writer::Result result) const +{ + auto export_path = export_path_.MaybeAsASCII(); + if (result == bookmark_html_writer::Result::kSuccess) { + LOG(INFO) << "Bookmarks exported successfully to " << export_path; + } else if (result == bookmark_html_writer::Result::kCouldNotCreateFile) { + LOG(ERROR) << "Bookmarks export: could not create file " << export_path; + } else if (result == bookmark_html_writer::Result::kCouldNotWriteHeader) { + LOG(ERROR) << "Bookmarks export: could not write header"; + } else if (result == bookmark_html_writer::Result::kCouldNotWriteNodes) { + LOG(ERROR) << "Bookmarks export: could not write nodes"; + } + + JNIEnv* env = AttachCurrentThread(); + Java_BookmarkBridge_bookmarksExported(env, obj, window->GetJavaObject(), + base::android::ConvertUTF8ToJavaString(env, export_path), + result == bookmark_html_writer::Result::kSuccess); +} + +// Attempts to create a TemplateURL from the provided data. |title| is optional. Loading Loading @@ -1196,7 +1179,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser jboolean IsEditBookmarksEnabled(JNIEnv* env); void LoadEmptyPartnerBookmarkShimForTesting(JNIEnv* env); @@ -93,6 +103,15 @@ class BookmarkBridge : public ProfileObserver, @@ -93,6 +103,17 @@ class BookmarkBridge : public ProfileObserver, jlong id, jint type); Loading @@ -1208,21 +1191,22 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser + const base::android::JavaParamRef<jobject>& obj, + const base::android::JavaParamRef<jobject>& java_window, + const base::android::JavaParamRef<jstring>& j_export_path); + void ExportBookmarksEnd(const base::android::ScopedJavaGlobalRef<jobject>& obj, + ui::WindowAndroid* window, bookmark_html_writer::Result result) const; + void GetAllFoldersWithDepths( JNIEnv* env, const base::android::JavaParamRef<jobject>& j_folders_obj, @@ -362,6 +381,9 @@ class BookmarkBridge : public ProfileObserver, @@ -362,6 +383,8 @@ class BookmarkBridge : public ProfileObserver, void CreateOrDestroyAccountReadingListManagerIfNeeded(); const raw_ptr<Profile> profile_; // weak + base::FilePath export_path_; + raw_ptr<BookmarksExportObserver> observer_; // weak + base::android::ScopedJavaGlobalRef<jobject> java_bookmark_model_; const raw_ptr<bookmarks::BookmarkModel> bookmark_model_; // weak const raw_ptr<bookmarks::ManagedBookmarkService> @@ -376,6 +398,7 @@ class BookmarkBridge : public ProfileObserver, @@ -376,6 +399,7 @@ class BookmarkBridge : public ProfileObserver, std::unique_ptr<bookmarks::ScopedGroupBookmarkActions> grouped_bookmark_actions_; PrefChangeRegistrar pref_change_registrar_; Loading @@ -1230,7 +1214,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser // Information about the Partner bookmarks (must check for IsLoaded()). // This is owned by profile. @@ -407,6 +430,10 @@ class BookmarkBridge : public ProfileObserver, @@ -407,6 +431,10 @@ class BookmarkBridge : public ProfileObserver, bool suppress_observer_notifications_ = false; Loading @@ -1241,19 +1225,6 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser // Weak pointers for creating callbacks that won't call into a destroyed // object. base::WeakPtrFactory<BookmarkBridge> weak_ptr_factory_; diff --git a/chrome/browser/bookmarks/bookmark_html_writer.cc b/chrome/browser/bookmarks/bookmark_html_writer.cc --- a/chrome/browser/bookmarks/bookmark_html_writer.cc +++ b/chrome/browser/bookmarks/bookmark_html_writer.cc @@ -36,6 +36,9 @@ #include "base/task/thread_pool.h" #include "base/time/time.h" #include "base/values.h" +#if BUILDFLAG(IS_ANDROID) +#include "base/android/content_uri_utils.h" +#endif #include "chrome/browser/bookmarks/bookmark_model_factory.h" #include "chrome/browser/favicon/favicon_service_factory.h" #include "chrome/browser/profiles/profile.h" diff --git a/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationCustomView.java b/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationCustomView.java --- a/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationCustomView.java +++ b/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationCustomView.java Loading build/patches/Add-cromite-flags-support.patch +8 −17 Original line number Diff line number Diff line Loading @@ -46,8 +46,8 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../res/xml/accessibility_preferences.xml | 3 +- .../accessibility/AccessibilitySettings.java | 6 +- .../android/java/res/values/attrs.xml | 4 + .../settings/ChromeSwitchPreference.java | 20 ++ .../components/cached_flags/CachedFlag.java | 9 +- .../settings/ChromeSwitchPreference.java | 19 ++ .../components/cached_flags/CachedFlag.java | 8 +- components/components_strings.grd | 1 + .../content_settings/core/common/features.cc | 1 + .../placeholder.txt | 1 + Loading Loading @@ -106,7 +106,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html third_party/blink/public/common/features.h | 1 + ui/base/ui_base_features.cc | 1 + ui/base/ui_base_features.h | 1 + 93 files changed, 808 insertions(+), 30 deletions(-) 93 files changed, 806 insertions(+), 30 deletions(-) create mode 100644 chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/include_all_directory.java create mode 100644 chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/java_template/CromiteCachedFlag.java.tmpl create mode 100644 chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Add-cromite-flags-support.grdp Loading Loading @@ -1037,17 +1037,16 @@ diff --git a/components/browser_ui/settings/android/java/res/values/attrs.xml b/ diff --git a/components/browser_ui/settings/android/widget/java/src/org/chromium/components/browser_ui/settings/ChromeSwitchPreference.java b/components/browser_ui/settings/android/widget/java/src/org/chromium/components/browser_ui/settings/ChromeSwitchPreference.java --- a/components/browser_ui/settings/android/widget/java/src/org/chromium/components/browser_ui/settings/ChromeSwitchPreference.java +++ b/components/browser_ui/settings/android/widget/java/src/org/chromium/components/browser_ui/settings/ChromeSwitchPreference.java @@ -15,6 +15,9 @@ import android.view.accessibility.AccessibilityEvent; @@ -15,6 +15,8 @@ import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityNodeInfo; import android.widget.TextView; +import androidx.annotation.Nullable; +import android.content.res.TypedArray; + import androidx.annotation.ColorInt; import androidx.annotation.VisibleForTesting; import androidx.preference.PreferenceViewHolder; @@ -40,6 +43,11 @@ public class ChromeSwitchPreference extends SwitchPreferenceCompat { @@ -40,6 +42,11 @@ public class ChromeSwitchPreference extends SwitchPreferenceCompat { /** Indicates if the preference uses a custom layout. */ private final boolean mHasCustomLayout; Loading @@ -1059,7 +1058,7 @@ diff --git a/components/browser_ui/settings/android/widget/java/src/org/chromium // TOOD(crbug.com/1451550): This is an interim solution. In the long-term, we should migrate // away from a switch with dynamically changing summaries onto a radio group. /** @@ -59,6 +67,18 @@ public class ChromeSwitchPreference extends SwitchPreferenceCompat { @@ -59,6 +66,18 @@ public class ChromeSwitchPreference extends SwitchPreferenceCompat { mHasCustomLayout = ManagedPreferencesUtils.isCustomLayoutApplied(context, attrs); mUseSummaryAsTitle = true; Loading @@ -1081,15 +1080,7 @@ diff --git a/components/browser_ui/settings/android/widget/java/src/org/chromium diff --git a/components/cached_flags/android/java/src/org/chromium/components/cached_flags/CachedFlag.java b/components/cached_flags/android/java/src/org/chromium/components/cached_flags/CachedFlag.java --- a/components/cached_flags/android/java/src/org/chromium/components/cached_flags/CachedFlag.java +++ b/components/cached_flags/android/java/src/org/chromium/components/cached_flags/CachedFlag.java @@ -5,6 +5,7 @@ package org.chromium.components.cached_flags; import android.content.SharedPreferences; +import androidx.annotation.Nullable; import org.chromium.base.FeatureMap; import org.chromium.base.FeatureOverrides; @@ -155,7 +156,7 @@ public class CachedFlag extends Flag { @@ -155,7 +155,7 @@ public class CachedFlag extends Flag { editor.putBoolean(getSharedPreferenceKey(), featureValue); } Loading @@ -1098,7 +1089,7 @@ diff --git a/components/cached_flags/android/java/src/org/chromium/components/ca // Create the key only once to avoid String concatenation every flag check. if (mPreferenceKey == null) { mPreferenceKey = CachedFlagsSharedPreferences.FLAGS_CACHED.createKey(mFeatureName); @@ -163,6 +164,12 @@ public class CachedFlag extends Flag { @@ -163,6 +163,12 @@ public class CachedFlag extends Flag { return mPreferenceKey; } Loading build/patches/Add-kill-switch-for-unsupported-clangd-flags.patch +1 −1 Original line number Diff line number Diff line Loading @@ -29,11 +29,11 @@ diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn + if (skip_clangd_unsupported_options) { + cflags -= [ + "-Wno-thread-safety-reference-return", + "-Wno-nontrivial-memcall", + ] + cflags_cc -= [ + "-Wno-c++11-narrowing-const-reference", + "-Wno-missing-template-arg-list-after-template-kw", + "-Wno-dangling-assignment-gsl", + ] + } } Loading build/patches/Add-lifetime-options-for-permissions.patch +41 −1 Original line number Diff line number Diff line Loading @@ -73,6 +73,8 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html components/page_info/page_info.h | 1 + .../permissions/PermissionDialogDelegate.java | 13 +++ .../PermissionDialogModelFactory.java | 82 ++++++++++++++++++- .../embedded_permission_prompt_android.cc | 3 +- .../embedded_permission_prompt_android.h | 2 +- .../permission_dialog_delegate.cc | 24 +++++- .../permission_dialog_delegate.h | 1 + .../permission_prompt_android.cc | 8 +- Loading @@ -80,6 +82,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../android/permissions_android_strings.grd | 17 ++++ .../geolocation_permission_context_android.cc | 34 ++++++-- .../geolocation_permission_context_android.h | 13 ++- .../embedded_permission_prompt_flow_model.cc | 2 +- .../permissions/permission_context_base.cc | 52 ++++++++++-- .../permissions/permission_context_base.h | 23 +++++- components/permissions/permission_prompt.h | 3 +- Loading @@ -87,7 +90,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html components/permissions/permission_request.h | 16 +++- .../permissions/permission_request_manager.cc | 45 ++++++---- .../permissions/permission_request_manager.h | 11 ++- 35 files changed, 489 insertions(+), 68 deletions(-) 38 files changed, 493 insertions(+), 71 deletions(-) diff --git a/chrome/browser/permissions/last_tab_standing_tracker.cc b/chrome/browser/permissions/last_tab_standing_tracker.cc --- a/chrome/browser/permissions/last_tab_standing_tracker.cc Loading Loading @@ -685,6 +688,31 @@ diff --git a/components/permissions/android/java/src/org/chromium/components/per } public static ModalDialogProperties.ModalDialogButtonSpec[] getButtonSpecs( diff --git a/components/permissions/android/permission_prompt/embedded_permission_prompt_android.cc b/components/permissions/android/permission_prompt/embedded_permission_prompt_android.cc --- a/components/permissions/android/permission_prompt/embedded_permission_prompt_android.cc +++ b/components/permissions/android/permission_prompt/embedded_permission_prompt_android.cc @@ -105,7 +105,8 @@ void EmbeddedPermissionPromptAndroid::Acknowledge() { delegate()->FinalizeCurrentRequests(); } -void EmbeddedPermissionPromptAndroid::AcceptThisTime() { +void EmbeddedPermissionPromptAndroid::AcceptThisTime( + content_settings::mojom::LifetimeMode lifetimeOption) { prompt_model_->PrecalculateVariantsForMetrics(); prompt_model_->RecordPermissionActionUKM( permissions::ElementAnchoredBubbleAction::kGrantedOnce); diff --git a/components/permissions/android/permission_prompt/embedded_permission_prompt_android.h b/components/permissions/android/permission_prompt/embedded_permission_prompt_android.h --- a/components/permissions/android/permission_prompt/embedded_permission_prompt_android.h +++ b/components/permissions/android/permission_prompt/embedded_permission_prompt_android.h @@ -43,7 +43,7 @@ class EmbeddedPermissionPromptAndroid : public PermissionPromptAndroid { const override; void Closing() override; void Accept() override; - void AcceptThisTime() override; + void AcceptThisTime(content_settings::mojom::LifetimeMode lifetimeOption) override; void Acknowledge() override; void Deny() override; void Resumed() override; diff --git a/components/permissions/android/permission_prompt/permission_dialog_delegate.cc b/components/permissions/android/permission_prompt/permission_dialog_delegate.cc --- a/components/permissions/android/permission_prompt/permission_dialog_delegate.cc +++ b/components/permissions/android/permission_prompt/permission_dialog_delegate.cc Loading Loading @@ -941,6 +969,18 @@ diff --git a/components/permissions/contexts/geolocation_permission_context_andr std::unique_ptr<LocationSettings> location_settings_; diff --git a/components/permissions/embedded_permission_prompt_flow_model.cc b/components/permissions/embedded_permission_prompt_flow_model.cc --- a/components/permissions/embedded_permission_prompt_flow_model.cc +++ b/components/permissions/embedded_permission_prompt_flow_model.cc @@ -295,7 +295,7 @@ void EmbeddedPermissionPromptFlowModel::SetDelegateAction( delegate_->Accept(); break; case DelegateAction::kAllowThisTime: - delegate_->AcceptThisTime(); + delegate_->AcceptThisTime(content_settings::mojom::LifetimeMode::ONLY_THIS_TIME); break; case DelegateAction::kDeny: delegate_->Deny(); diff --git a/components/permissions/permission_context_base.cc b/components/permissions/permission_context_base.cc --- a/components/permissions/permission_context_base.cc +++ b/components/permissions/permission_context_base.cc Loading build/patches/Add-menu-item-to-bookmark-all-tabs.patch +29 −22 Original line number Diff line number Diff line Loading @@ -7,9 +7,9 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html chrome/android/java/res/menu/main_menu.xml | 7 ++ .../chrome/browser/ChromeTabbedActivity.java | 24 +++++++ .../browser/bookmarks/BookmarkBridge.java | 67 +++++++++++++++++++ .../bookmarks/android/bookmark_bridge.cc | 44 +++++++++++- .../bookmarks/android/bookmark_bridge.cc | 42 ++++++++++++ .../bookmarks/android/bookmark_bridge.h | 8 +++ .../browser/bookmarks/bookmark_html_writer.cc | 11 ++- .../browser/bookmarks/bookmark_html_writer.cc | 14 +++- .../bookmark_merged_surface_service.cc | 3 + .../permanent_folder_ordering_tracker.cc | 2 + .../dialogs/DownloadLocationCustomView.java | 4 +- Loading @@ -29,7 +29,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html components/bookmarks/browser/bookmark_uuids.h | 1 + components/bookmarks/browser/model_loader.cc | 8 ++- .../bookmark_specifics_conversions.cc | 1 + 25 files changed, 249 insertions(+), 14 deletions(-) 25 files changed, 250 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 Loading Loading @@ -225,16 +225,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browser/bookmarks/android/bookmark_bridge.cc --- a/chrome/browser/bookmarks/android/bookmark_bridge.cc +++ b/chrome/browser/bookmarks/android/bookmark_bridge.cc @@ -187,7 +187,7 @@ class FileBookmarksExportObserver: public BookmarksExportObserver { JNIEnv* env = AttachCurrentThread(); Java_BookmarkBridge_bookmarksExported(env, obj_, window_->GetJavaObject(), - ConvertUTF8ToJavaString(env, export_path_), + base::android::ConvertUTF8ToJavaString(env, export_path_), result == Result::kSuccess); delete this; } @@ -360,6 +360,33 @@ jboolean BookmarkBridge::AreAccountBookmarkFoldersActive(JNIEnv* env) { @@ -326,6 +326,33 @@ jboolean BookmarkBridge::AreAccountBookmarkFoldersActive(JNIEnv* env) { return bookmark_model_->account_mobile_node() != nullptr; } Loading Loading @@ -268,7 +259,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse base::android::ScopedJavaLocalRef<jobject> BookmarkBridge::GetMostRecentlyAddedUserBookmarkIdForUrl(JNIEnv* env, const GURL& url) { @@ -472,6 +499,7 @@ void BookmarkBridge::GetAllFoldersWithDepths( @@ -438,6 +465,7 @@ void BookmarkBridge::GetAllFoldersWithDepths( // Vector to temporarily contain all child bookmarks at same level for sorting std::vector<const BookmarkNode*> bookmarks = { bookmark_model_->mobile_node(), Loading @@ -276,7 +267,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse bookmark_model_->bookmark_bar_node(), bookmark_model_->other_node(), }; @@ -565,6 +593,9 @@ std::vector<const BookmarkNode*> BookmarkBridge::GetTopLevelFolderIdsImpl( @@ -531,6 +559,9 @@ std::vector<const BookmarkNode*> BookmarkBridge::GetTopLevelFolderIdsImpl( top_level_folders.push_back(other_node); } Loading @@ -286,7 +277,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse const BookmarkNode* reading_list_node = local_or_syncable_reading_list_manager_->GetRoot(); if (IsPermanentFolderVisible(ignore_visibility, reading_list_node)) { @@ -1266,6 +1297,17 @@ void BookmarkBridge::GetBookmarksOfType( @@ -1256,6 +1287,17 @@ void BookmarkBridge::GetBookmarksOfType( AddBookmarkNodesToBookmarkIdList(env, j_list, results); } Loading Loading @@ -318,7 +309,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser base::android::ScopedJavaLocalRef<jobject> GetMostRecentlyAddedUserBookmarkIdForUrl(JNIEnv* env, const GURL& url); const bookmarks::BookmarkNode* GetMostRecentlyAddedUserBookmarkIdForUrlImpl( @@ -221,6 +225,10 @@ class BookmarkBridge : public ProfileObserver, @@ -223,6 +227,10 @@ class BookmarkBridge : public ProfileObserver, const base::android::JavaParamRef<jobject>& j_list, jint type); Loading @@ -332,7 +323,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser diff --git a/chrome/browser/bookmarks/bookmark_html_writer.cc b/chrome/browser/bookmarks/bookmark_html_writer.cc --- a/chrome/browser/bookmarks/bookmark_html_writer.cc +++ b/chrome/browser/bookmarks/bookmark_html_writer.cc @@ -176,7 +176,8 @@ class Writer : public base::RefCountedThreadSafe<Writer> { @@ -173,14 +173,15 @@ class Writer : public base::RefCountedThreadSafe<Writer> { BookmarkCodec codec; local_bookmarks_ = codec.Encode(model->bookmark_bar_node(), model->other_node(), Loading @@ -342,17 +333,25 @@ diff --git a/chrome/browser/bookmarks/bookmark_html_writer.cc b/chrome/browser/b if (model->account_bookmark_bar_node()) { CHECK(model->account_other_node()); @@ -217,6 +218,9 @@ class Writer : public base::RefCountedThreadSafe<Writer> { CHECK(model->account_mobile_node()); account_bookmarks_ = codec.Encode( model->account_bookmark_bar_node(), model->account_other_node(), - model->account_mobile_node(), /*sync_metadata_str=*/std::string()); + model->account_mobile_node(), /*tabs_folder_node*/ nullptr, /*sync_metadata_str=*/std::string()); } else { CHECK(!model->account_other_node()); CHECK(!model->account_mobile_node()); @@ -214,6 +215,9 @@ class Writer : public base::RefCountedThreadSafe<Writer> { base::Value::Dict* mobile_folder_value = local_permanent_folders->FindDict( BookmarkCodec::kMobileBookmarkFolderNameKey); CHECK(mobile_folder_value); + base::Value::Dict* tabs_collection_value = + roots->FindDict(BookmarkCodec::kTabsBookmarkFolderNameKey); + local_permanent_folders->FindDict(BookmarkCodec::kTabsBookmarkFolderNameKey); + CHECK(tabs_collection_value); base::Value::Dict* account_permanent_folders = account_bookmarks_.FindDict(BookmarkCodec::kRootsKey); @@ -292,6 +296,10 @@ class Writer : public base::RefCountedThreadSafe<Writer> { @@ -289,6 +293,10 @@ class Writer : public base::RefCountedThreadSafe<Writer> { return bookmark_html_writer::Result::kCouldNotWriteNodes; } Loading @@ -363,7 +362,15 @@ diff --git a/chrome/browser/bookmarks/bookmark_html_writer.cc b/chrome/browser/b DecrementIndent(); if (!Write(kFolderChildrenEnd) || !Write(kNewline)) { @@ -566,6 +574,7 @@ void BookmarkFaviconFetcher::ExportBookmarks() { @@ -435,6 +443,7 @@ class Writer : public base::RefCountedThreadSafe<Writer> { case BookmarkNode::URL: case BookmarkNode::OTHER_NODE: case BookmarkNode::MOBILE: + case BookmarkNode::TABS_COLLECTION: NOTREACHED(); } @@ -563,6 +572,7 @@ void BookmarkFaviconFetcher::ExportBookmarks() { ExtractUrls(model->bookmark_bar_node()); ExtractUrls(model->other_node()); ExtractUrls(model->mobile_node()); Loading Loading
build/patches/Add-bookmark-import-export-actions.patch +39 −68 Original line number Diff line number Diff line Loading @@ -26,9 +26,8 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../bookmarks/BookmarkToolbarViewBinder.java | 6 + .../native_page/NativePageFactory.java | 11 +- chrome/browser/BUILD.gn | 11 +- .../bookmarks/android/bookmark_bridge.cc | 277 +++++++++++++++++ .../bookmarks/android/bookmark_bridge.h | 29 +- .../browser/bookmarks/bookmark_html_writer.cc | 3 + .../bookmarks/android/bookmark_bridge.cc | 267 ++++++++++++++++ .../bookmarks/android/bookmark_bridge.h | 30 +- .../dialogs/DownloadLocationCustomView.java | 8 +- .../DownloadLocationDialogCoordinator.java | 10 +- .../flags/android/chrome_feature_list.cc | 1 + Loading @@ -53,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 + 42 files changed, 900 insertions(+), 30 deletions(-) 41 files changed, 888 insertions(+), 30 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 Loading Loading @@ -871,7 +870,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse // Must come after all headers that specialize FromJniType() / ToJniType(). #include "chrome/android/chrome_jni_headers/BookmarkBridge_jni.h" @@ -84,12 +106,97 @@ using bookmarks::android::JavaBookmarkIdGetType; @@ -84,6 +106,57 @@ using bookmarks::android::JavaBookmarkIdGetType; using content::BrowserThread; using power_bookmarks::PowerBookmarkMeta; Loading Loading @@ -910,7 +909,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse + } + } + + if (base::Contains(chrome::ChromeDebugURLs(), fixed_url)) { + if (base::Contains(chrome::ChromeDebugURLs(), fixed_url.spec())) { + return true; + } + Loading @@ -929,47 +928,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse namespace { // The key used to connect the instance of the bookmark bridge to the bookmark // model. const char kBookmarkBridgeUserDataKey[] = "bookmark_bridge"; // Compares titles of different instance of BookmarkNode. +class FileBookmarksExportObserver: public BookmarksExportObserver { + public: + FileBookmarksExportObserver( + const JavaParamRef<jobject>& obj, + ui::WindowAndroid* window, + const std::string& export_path) : + obj_(ScopedJavaGlobalRef<jobject>(obj)), + window_(window), + export_path_(export_path) {} + + void OnExportFinished(Result result) override { + if (result == Result::kSuccess) { + LOG(INFO) << "Bookmarks exported successfully to " << export_path_; + } else if (result == Result::kCouldNotCreateFile) { + LOG(ERROR) << "Bookmarks export: could not create file " << export_path_; + } else if (result == Result::kCouldNotWriteHeader) { + LOG(ERROR) << "Bookmarks export: could not write header"; + } else if (result == Result::kCouldNotWriteNodes) { + LOG(ERROR) << "Bookmarks export: could not write nodes"; + } + + JNIEnv* env = AttachCurrentThread(); + Java_BookmarkBridge_bookmarksExported(env, obj_, window_->GetJavaObject(), + ConvertUTF8ToJavaString(env, export_path_), + result == Result::kSuccess); + delete this; + } + + private: + const ScopedJavaGlobalRef<jobject> obj_; + raw_ptr<ui::WindowAndroid> window_; + const std::string export_path_; +}; + class BookmarkTitleComparer { public: explicit BookmarkTitleComparer(BookmarkBridge* bookmark_bridge, @@ -231,6 +338,10 @@ BookmarkBridge::~BookmarkBridge() { @@ -231,6 +304,10 @@ BookmarkBridge::~BookmarkBridge() { partner_bookmarks_shim_observation_.Reset(); bookmark_model_observation_.Reset(); profile_observation_.Reset(); Loading @@ -980,7 +939,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse } void BookmarkBridge::Destroy(JNIEnv* env) { @@ -765,6 +876,172 @@ jint BookmarkBridge::GetTotalBookmarkCount( @@ -765,6 +842,196 @@ jint BookmarkBridge::GetTotalBookmarkCount( return count; } Loading Loading @@ -1038,8 +997,32 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse + export_path_ = export_path_.Append(FILE_PATH_LITERAL("bookmarks.html")); + } + + observer_ = new FileBookmarksExportObserver(obj, window, export_path_.MaybeAsASCII()); + bookmark_html_writer::WriteBookmarks(profile_, export_path_, observer_); + bookmark_html_writer::WriteBookmarks(profile_, export_path_, + base::BindOnce(&BookmarkBridge::ExportBookmarksEnd, + weak_ptr_factory_.GetWeakPtr(), + base::android::ScopedJavaGlobalRef<jobject>(obj), + window)); +} + +void BookmarkBridge::ExportBookmarksEnd(const ScopedJavaGlobalRef<jobject>& obj, + ui::WindowAndroid* window, + bookmark_html_writer::Result result) const +{ + auto export_path = export_path_.MaybeAsASCII(); + if (result == bookmark_html_writer::Result::kSuccess) { + LOG(INFO) << "Bookmarks exported successfully to " << export_path; + } else if (result == bookmark_html_writer::Result::kCouldNotCreateFile) { + LOG(ERROR) << "Bookmarks export: could not create file " << export_path; + } else if (result == bookmark_html_writer::Result::kCouldNotWriteHeader) { + LOG(ERROR) << "Bookmarks export: could not write header"; + } else if (result == bookmark_html_writer::Result::kCouldNotWriteNodes) { + LOG(ERROR) << "Bookmarks export: could not write nodes"; + } + + JNIEnv* env = AttachCurrentThread(); + Java_BookmarkBridge_bookmarksExported(env, obj, window->GetJavaObject(), + base::android::ConvertUTF8ToJavaString(env, export_path), + result == bookmark_html_writer::Result::kSuccess); +} + +// Attempts to create a TemplateURL from the provided data. |title| is optional. Loading Loading @@ -1196,7 +1179,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser jboolean IsEditBookmarksEnabled(JNIEnv* env); void LoadEmptyPartnerBookmarkShimForTesting(JNIEnv* env); @@ -93,6 +103,15 @@ class BookmarkBridge : public ProfileObserver, @@ -93,6 +103,17 @@ class BookmarkBridge : public ProfileObserver, jlong id, jint type); Loading @@ -1208,21 +1191,22 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser + const base::android::JavaParamRef<jobject>& obj, + const base::android::JavaParamRef<jobject>& java_window, + const base::android::JavaParamRef<jstring>& j_export_path); + void ExportBookmarksEnd(const base::android::ScopedJavaGlobalRef<jobject>& obj, + ui::WindowAndroid* window, bookmark_html_writer::Result result) const; + void GetAllFoldersWithDepths( JNIEnv* env, const base::android::JavaParamRef<jobject>& j_folders_obj, @@ -362,6 +381,9 @@ class BookmarkBridge : public ProfileObserver, @@ -362,6 +383,8 @@ class BookmarkBridge : public ProfileObserver, void CreateOrDestroyAccountReadingListManagerIfNeeded(); const raw_ptr<Profile> profile_; // weak + base::FilePath export_path_; + raw_ptr<BookmarksExportObserver> observer_; // weak + base::android::ScopedJavaGlobalRef<jobject> java_bookmark_model_; const raw_ptr<bookmarks::BookmarkModel> bookmark_model_; // weak const raw_ptr<bookmarks::ManagedBookmarkService> @@ -376,6 +398,7 @@ class BookmarkBridge : public ProfileObserver, @@ -376,6 +399,7 @@ class BookmarkBridge : public ProfileObserver, std::unique_ptr<bookmarks::ScopedGroupBookmarkActions> grouped_bookmark_actions_; PrefChangeRegistrar pref_change_registrar_; Loading @@ -1230,7 +1214,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser // Information about the Partner bookmarks (must check for IsLoaded()). // This is owned by profile. @@ -407,6 +430,10 @@ class BookmarkBridge : public ProfileObserver, @@ -407,6 +431,10 @@ class BookmarkBridge : public ProfileObserver, bool suppress_observer_notifications_ = false; Loading @@ -1241,19 +1225,6 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser // Weak pointers for creating callbacks that won't call into a destroyed // object. base::WeakPtrFactory<BookmarkBridge> weak_ptr_factory_; diff --git a/chrome/browser/bookmarks/bookmark_html_writer.cc b/chrome/browser/bookmarks/bookmark_html_writer.cc --- a/chrome/browser/bookmarks/bookmark_html_writer.cc +++ b/chrome/browser/bookmarks/bookmark_html_writer.cc @@ -36,6 +36,9 @@ #include "base/task/thread_pool.h" #include "base/time/time.h" #include "base/values.h" +#if BUILDFLAG(IS_ANDROID) +#include "base/android/content_uri_utils.h" +#endif #include "chrome/browser/bookmarks/bookmark_model_factory.h" #include "chrome/browser/favicon/favicon_service_factory.h" #include "chrome/browser/profiles/profile.h" diff --git a/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationCustomView.java b/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationCustomView.java --- a/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationCustomView.java +++ b/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationCustomView.java Loading
build/patches/Add-cromite-flags-support.patch +8 −17 Original line number Diff line number Diff line Loading @@ -46,8 +46,8 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../res/xml/accessibility_preferences.xml | 3 +- .../accessibility/AccessibilitySettings.java | 6 +- .../android/java/res/values/attrs.xml | 4 + .../settings/ChromeSwitchPreference.java | 20 ++ .../components/cached_flags/CachedFlag.java | 9 +- .../settings/ChromeSwitchPreference.java | 19 ++ .../components/cached_flags/CachedFlag.java | 8 +- components/components_strings.grd | 1 + .../content_settings/core/common/features.cc | 1 + .../placeholder.txt | 1 + Loading Loading @@ -106,7 +106,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html third_party/blink/public/common/features.h | 1 + ui/base/ui_base_features.cc | 1 + ui/base/ui_base_features.h | 1 + 93 files changed, 808 insertions(+), 30 deletions(-) 93 files changed, 806 insertions(+), 30 deletions(-) create mode 100644 chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/include_all_directory.java create mode 100644 chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/java_template/CromiteCachedFlag.java.tmpl create mode 100644 chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Add-cromite-flags-support.grdp Loading Loading @@ -1037,17 +1037,16 @@ diff --git a/components/browser_ui/settings/android/java/res/values/attrs.xml b/ diff --git a/components/browser_ui/settings/android/widget/java/src/org/chromium/components/browser_ui/settings/ChromeSwitchPreference.java b/components/browser_ui/settings/android/widget/java/src/org/chromium/components/browser_ui/settings/ChromeSwitchPreference.java --- a/components/browser_ui/settings/android/widget/java/src/org/chromium/components/browser_ui/settings/ChromeSwitchPreference.java +++ b/components/browser_ui/settings/android/widget/java/src/org/chromium/components/browser_ui/settings/ChromeSwitchPreference.java @@ -15,6 +15,9 @@ import android.view.accessibility.AccessibilityEvent; @@ -15,6 +15,8 @@ import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityNodeInfo; import android.widget.TextView; +import androidx.annotation.Nullable; +import android.content.res.TypedArray; + import androidx.annotation.ColorInt; import androidx.annotation.VisibleForTesting; import androidx.preference.PreferenceViewHolder; @@ -40,6 +43,11 @@ public class ChromeSwitchPreference extends SwitchPreferenceCompat { @@ -40,6 +42,11 @@ public class ChromeSwitchPreference extends SwitchPreferenceCompat { /** Indicates if the preference uses a custom layout. */ private final boolean mHasCustomLayout; Loading @@ -1059,7 +1058,7 @@ diff --git a/components/browser_ui/settings/android/widget/java/src/org/chromium // TOOD(crbug.com/1451550): This is an interim solution. In the long-term, we should migrate // away from a switch with dynamically changing summaries onto a radio group. /** @@ -59,6 +67,18 @@ public class ChromeSwitchPreference extends SwitchPreferenceCompat { @@ -59,6 +66,18 @@ public class ChromeSwitchPreference extends SwitchPreferenceCompat { mHasCustomLayout = ManagedPreferencesUtils.isCustomLayoutApplied(context, attrs); mUseSummaryAsTitle = true; Loading @@ -1081,15 +1080,7 @@ diff --git a/components/browser_ui/settings/android/widget/java/src/org/chromium diff --git a/components/cached_flags/android/java/src/org/chromium/components/cached_flags/CachedFlag.java b/components/cached_flags/android/java/src/org/chromium/components/cached_flags/CachedFlag.java --- a/components/cached_flags/android/java/src/org/chromium/components/cached_flags/CachedFlag.java +++ b/components/cached_flags/android/java/src/org/chromium/components/cached_flags/CachedFlag.java @@ -5,6 +5,7 @@ package org.chromium.components.cached_flags; import android.content.SharedPreferences; +import androidx.annotation.Nullable; import org.chromium.base.FeatureMap; import org.chromium.base.FeatureOverrides; @@ -155,7 +156,7 @@ public class CachedFlag extends Flag { @@ -155,7 +155,7 @@ public class CachedFlag extends Flag { editor.putBoolean(getSharedPreferenceKey(), featureValue); } Loading @@ -1098,7 +1089,7 @@ diff --git a/components/cached_flags/android/java/src/org/chromium/components/ca // Create the key only once to avoid String concatenation every flag check. if (mPreferenceKey == null) { mPreferenceKey = CachedFlagsSharedPreferences.FLAGS_CACHED.createKey(mFeatureName); @@ -163,6 +164,12 @@ public class CachedFlag extends Flag { @@ -163,6 +163,12 @@ public class CachedFlag extends Flag { return mPreferenceKey; } Loading
build/patches/Add-kill-switch-for-unsupported-clangd-flags.patch +1 −1 Original line number Diff line number Diff line Loading @@ -29,11 +29,11 @@ diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn + if (skip_clangd_unsupported_options) { + cflags -= [ + "-Wno-thread-safety-reference-return", + "-Wno-nontrivial-memcall", + ] + cflags_cc -= [ + "-Wno-c++11-narrowing-const-reference", + "-Wno-missing-template-arg-list-after-template-kw", + "-Wno-dangling-assignment-gsl", + ] + } } Loading
build/patches/Add-lifetime-options-for-permissions.patch +41 −1 Original line number Diff line number Diff line Loading @@ -73,6 +73,8 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html components/page_info/page_info.h | 1 + .../permissions/PermissionDialogDelegate.java | 13 +++ .../PermissionDialogModelFactory.java | 82 ++++++++++++++++++- .../embedded_permission_prompt_android.cc | 3 +- .../embedded_permission_prompt_android.h | 2 +- .../permission_dialog_delegate.cc | 24 +++++- .../permission_dialog_delegate.h | 1 + .../permission_prompt_android.cc | 8 +- Loading @@ -80,6 +82,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../android/permissions_android_strings.grd | 17 ++++ .../geolocation_permission_context_android.cc | 34 ++++++-- .../geolocation_permission_context_android.h | 13 ++- .../embedded_permission_prompt_flow_model.cc | 2 +- .../permissions/permission_context_base.cc | 52 ++++++++++-- .../permissions/permission_context_base.h | 23 +++++- components/permissions/permission_prompt.h | 3 +- Loading @@ -87,7 +90,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html components/permissions/permission_request.h | 16 +++- .../permissions/permission_request_manager.cc | 45 ++++++---- .../permissions/permission_request_manager.h | 11 ++- 35 files changed, 489 insertions(+), 68 deletions(-) 38 files changed, 493 insertions(+), 71 deletions(-) diff --git a/chrome/browser/permissions/last_tab_standing_tracker.cc b/chrome/browser/permissions/last_tab_standing_tracker.cc --- a/chrome/browser/permissions/last_tab_standing_tracker.cc Loading Loading @@ -685,6 +688,31 @@ diff --git a/components/permissions/android/java/src/org/chromium/components/per } public static ModalDialogProperties.ModalDialogButtonSpec[] getButtonSpecs( diff --git a/components/permissions/android/permission_prompt/embedded_permission_prompt_android.cc b/components/permissions/android/permission_prompt/embedded_permission_prompt_android.cc --- a/components/permissions/android/permission_prompt/embedded_permission_prompt_android.cc +++ b/components/permissions/android/permission_prompt/embedded_permission_prompt_android.cc @@ -105,7 +105,8 @@ void EmbeddedPermissionPromptAndroid::Acknowledge() { delegate()->FinalizeCurrentRequests(); } -void EmbeddedPermissionPromptAndroid::AcceptThisTime() { +void EmbeddedPermissionPromptAndroid::AcceptThisTime( + content_settings::mojom::LifetimeMode lifetimeOption) { prompt_model_->PrecalculateVariantsForMetrics(); prompt_model_->RecordPermissionActionUKM( permissions::ElementAnchoredBubbleAction::kGrantedOnce); diff --git a/components/permissions/android/permission_prompt/embedded_permission_prompt_android.h b/components/permissions/android/permission_prompt/embedded_permission_prompt_android.h --- a/components/permissions/android/permission_prompt/embedded_permission_prompt_android.h +++ b/components/permissions/android/permission_prompt/embedded_permission_prompt_android.h @@ -43,7 +43,7 @@ class EmbeddedPermissionPromptAndroid : public PermissionPromptAndroid { const override; void Closing() override; void Accept() override; - void AcceptThisTime() override; + void AcceptThisTime(content_settings::mojom::LifetimeMode lifetimeOption) override; void Acknowledge() override; void Deny() override; void Resumed() override; diff --git a/components/permissions/android/permission_prompt/permission_dialog_delegate.cc b/components/permissions/android/permission_prompt/permission_dialog_delegate.cc --- a/components/permissions/android/permission_prompt/permission_dialog_delegate.cc +++ b/components/permissions/android/permission_prompt/permission_dialog_delegate.cc Loading Loading @@ -941,6 +969,18 @@ diff --git a/components/permissions/contexts/geolocation_permission_context_andr std::unique_ptr<LocationSettings> location_settings_; diff --git a/components/permissions/embedded_permission_prompt_flow_model.cc b/components/permissions/embedded_permission_prompt_flow_model.cc --- a/components/permissions/embedded_permission_prompt_flow_model.cc +++ b/components/permissions/embedded_permission_prompt_flow_model.cc @@ -295,7 +295,7 @@ void EmbeddedPermissionPromptFlowModel::SetDelegateAction( delegate_->Accept(); break; case DelegateAction::kAllowThisTime: - delegate_->AcceptThisTime(); + delegate_->AcceptThisTime(content_settings::mojom::LifetimeMode::ONLY_THIS_TIME); break; case DelegateAction::kDeny: delegate_->Deny(); diff --git a/components/permissions/permission_context_base.cc b/components/permissions/permission_context_base.cc --- a/components/permissions/permission_context_base.cc +++ b/components/permissions/permission_context_base.cc Loading
build/patches/Add-menu-item-to-bookmark-all-tabs.patch +29 −22 Original line number Diff line number Diff line Loading @@ -7,9 +7,9 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html chrome/android/java/res/menu/main_menu.xml | 7 ++ .../chrome/browser/ChromeTabbedActivity.java | 24 +++++++ .../browser/bookmarks/BookmarkBridge.java | 67 +++++++++++++++++++ .../bookmarks/android/bookmark_bridge.cc | 44 +++++++++++- .../bookmarks/android/bookmark_bridge.cc | 42 ++++++++++++ .../bookmarks/android/bookmark_bridge.h | 8 +++ .../browser/bookmarks/bookmark_html_writer.cc | 11 ++- .../browser/bookmarks/bookmark_html_writer.cc | 14 +++- .../bookmark_merged_surface_service.cc | 3 + .../permanent_folder_ordering_tracker.cc | 2 + .../dialogs/DownloadLocationCustomView.java | 4 +- Loading @@ -29,7 +29,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html components/bookmarks/browser/bookmark_uuids.h | 1 + components/bookmarks/browser/model_loader.cc | 8 ++- .../bookmark_specifics_conversions.cc | 1 + 25 files changed, 249 insertions(+), 14 deletions(-) 25 files changed, 250 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 Loading Loading @@ -225,16 +225,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browser/bookmarks/android/bookmark_bridge.cc --- a/chrome/browser/bookmarks/android/bookmark_bridge.cc +++ b/chrome/browser/bookmarks/android/bookmark_bridge.cc @@ -187,7 +187,7 @@ class FileBookmarksExportObserver: public BookmarksExportObserver { JNIEnv* env = AttachCurrentThread(); Java_BookmarkBridge_bookmarksExported(env, obj_, window_->GetJavaObject(), - ConvertUTF8ToJavaString(env, export_path_), + base::android::ConvertUTF8ToJavaString(env, export_path_), result == Result::kSuccess); delete this; } @@ -360,6 +360,33 @@ jboolean BookmarkBridge::AreAccountBookmarkFoldersActive(JNIEnv* env) { @@ -326,6 +326,33 @@ jboolean BookmarkBridge::AreAccountBookmarkFoldersActive(JNIEnv* env) { return bookmark_model_->account_mobile_node() != nullptr; } Loading Loading @@ -268,7 +259,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse base::android::ScopedJavaLocalRef<jobject> BookmarkBridge::GetMostRecentlyAddedUserBookmarkIdForUrl(JNIEnv* env, const GURL& url) { @@ -472,6 +499,7 @@ void BookmarkBridge::GetAllFoldersWithDepths( @@ -438,6 +465,7 @@ void BookmarkBridge::GetAllFoldersWithDepths( // Vector to temporarily contain all child bookmarks at same level for sorting std::vector<const BookmarkNode*> bookmarks = { bookmark_model_->mobile_node(), Loading @@ -276,7 +267,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse bookmark_model_->bookmark_bar_node(), bookmark_model_->other_node(), }; @@ -565,6 +593,9 @@ std::vector<const BookmarkNode*> BookmarkBridge::GetTopLevelFolderIdsImpl( @@ -531,6 +559,9 @@ std::vector<const BookmarkNode*> BookmarkBridge::GetTopLevelFolderIdsImpl( top_level_folders.push_back(other_node); } Loading @@ -286,7 +277,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse const BookmarkNode* reading_list_node = local_or_syncable_reading_list_manager_->GetRoot(); if (IsPermanentFolderVisible(ignore_visibility, reading_list_node)) { @@ -1266,6 +1297,17 @@ void BookmarkBridge::GetBookmarksOfType( @@ -1256,6 +1287,17 @@ void BookmarkBridge::GetBookmarksOfType( AddBookmarkNodesToBookmarkIdList(env, j_list, results); } Loading Loading @@ -318,7 +309,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser base::android::ScopedJavaLocalRef<jobject> GetMostRecentlyAddedUserBookmarkIdForUrl(JNIEnv* env, const GURL& url); const bookmarks::BookmarkNode* GetMostRecentlyAddedUserBookmarkIdForUrlImpl( @@ -221,6 +225,10 @@ class BookmarkBridge : public ProfileObserver, @@ -223,6 +227,10 @@ class BookmarkBridge : public ProfileObserver, const base::android::JavaParamRef<jobject>& j_list, jint type); Loading @@ -332,7 +323,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser diff --git a/chrome/browser/bookmarks/bookmark_html_writer.cc b/chrome/browser/bookmarks/bookmark_html_writer.cc --- a/chrome/browser/bookmarks/bookmark_html_writer.cc +++ b/chrome/browser/bookmarks/bookmark_html_writer.cc @@ -176,7 +176,8 @@ class Writer : public base::RefCountedThreadSafe<Writer> { @@ -173,14 +173,15 @@ class Writer : public base::RefCountedThreadSafe<Writer> { BookmarkCodec codec; local_bookmarks_ = codec.Encode(model->bookmark_bar_node(), model->other_node(), Loading @@ -342,17 +333,25 @@ diff --git a/chrome/browser/bookmarks/bookmark_html_writer.cc b/chrome/browser/b if (model->account_bookmark_bar_node()) { CHECK(model->account_other_node()); @@ -217,6 +218,9 @@ class Writer : public base::RefCountedThreadSafe<Writer> { CHECK(model->account_mobile_node()); account_bookmarks_ = codec.Encode( model->account_bookmark_bar_node(), model->account_other_node(), - model->account_mobile_node(), /*sync_metadata_str=*/std::string()); + model->account_mobile_node(), /*tabs_folder_node*/ nullptr, /*sync_metadata_str=*/std::string()); } else { CHECK(!model->account_other_node()); CHECK(!model->account_mobile_node()); @@ -214,6 +215,9 @@ class Writer : public base::RefCountedThreadSafe<Writer> { base::Value::Dict* mobile_folder_value = local_permanent_folders->FindDict( BookmarkCodec::kMobileBookmarkFolderNameKey); CHECK(mobile_folder_value); + base::Value::Dict* tabs_collection_value = + roots->FindDict(BookmarkCodec::kTabsBookmarkFolderNameKey); + local_permanent_folders->FindDict(BookmarkCodec::kTabsBookmarkFolderNameKey); + CHECK(tabs_collection_value); base::Value::Dict* account_permanent_folders = account_bookmarks_.FindDict(BookmarkCodec::kRootsKey); @@ -292,6 +296,10 @@ class Writer : public base::RefCountedThreadSafe<Writer> { @@ -289,6 +293,10 @@ class Writer : public base::RefCountedThreadSafe<Writer> { return bookmark_html_writer::Result::kCouldNotWriteNodes; } Loading @@ -363,7 +362,15 @@ diff --git a/chrome/browser/bookmarks/bookmark_html_writer.cc b/chrome/browser/b DecrementIndent(); if (!Write(kFolderChildrenEnd) || !Write(kNewline)) { @@ -566,6 +574,7 @@ void BookmarkFaviconFetcher::ExportBookmarks() { @@ -435,6 +443,7 @@ class Writer : public base::RefCountedThreadSafe<Writer> { case BookmarkNode::URL: case BookmarkNode::OTHER_NODE: case BookmarkNode::MOBILE: + case BookmarkNode::TABS_COLLECTION: NOTREACHED(); } @@ -563,6 +572,7 @@ void BookmarkFaviconFetcher::ExportBookmarks() { ExtractUrls(model->bookmark_bar_node()); ExtractUrls(model->other_node()); ExtractUrls(model->mobile_node()); Loading