Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit f74f2df9 authored by Carmelo Messina's avatar Carmelo Messina
Browse files

Patches for v134 (changed)

parent c5a85ab0
Loading
Loading
Loading
Loading
+39 −68
Original line number Diff line number Diff line
@@ -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 +
@@ -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
@@ -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;
 
@@ -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;
+    }
+
@@ -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();
@@ -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;
 }
 
@@ -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.
@@ -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);
 
@@ -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_;
@@ -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;
 
@@ -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
+8 −17
Original line number Diff line number Diff line
@@ -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 +
@@ -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
@@ -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;
 
@@ -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;
@@ -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);
     }
 
@@ -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;
     }
 
+1 −1
Original line number Diff line number Diff line
@@ -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",
+        ]
+      }
     }
+41 −1
Original line number Diff line number Diff line
@@ -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 +-
@@ -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 +-
@@ -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
@@ -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
@@ -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
+29 −22
Original line number Diff line number Diff line
@@ -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 +-
@@ -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
@@ -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;
 }
 
@@ -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(),
@@ -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);
   }
 
@@ -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);
 }
 
@@ -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);
 
@@ -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(),
@@ -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;
     }
 
@@ -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