From 1eb5e65b7999cbb07695f3f636efd8ec517b9d87 Mon Sep 17 00:00:00 2001 From: Carmelo Messina Date: Sun, 29 Oct 2023 18:01:49 +0100 Subject: [PATCH] #479 Fix duplicate results --- .../Add-menu-item-to-bookmark-all-tabs.patch | 106 ++++++++++++------ 1 file changed, 69 insertions(+), 37 deletions(-) diff --git a/build/patches/Add-menu-item-to-bookmark-all-tabs.patch b/build/patches/Add-menu-item-to-bookmark-all-tabs.patch index 5e5071c1..8ebb1c48 100644 --- a/build/patches/Add-menu-item-to-bookmark-all-tabs.patch +++ b/build/patches/Add-menu-item-to-bookmark-all-tabs.patch @@ -4,30 +4,29 @@ 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 ++++++++ - .../browser/bookmarks/BookmarkBridge.java | 61 +++++++++++++++++++ - .../browser/bookmarks/BookmarkUtils.java | 4 ++ - .../bookmarks/android/bookmark_bridge.cc | 16 +++++ - .../bookmarks/android/bookmark_bridge.h | 4 ++ + chrome/android/java/res/menu/main_menu.xml | 7 ++ + .../chrome/browser/ChromeTabbedActivity.java | 24 +++++++ + .../browser/bookmarks/BookmarkBridge.java | 64 +++++++++++++++++++ + .../bookmarks/android/bookmark_bridge.cc | 43 +++++++++++++ + .../bookmarks/android/bookmark_bridge.h | 8 +++ .../browser/bookmarks/bookmark_html_writer.cc | 8 ++- .../bookmarks/chrome_bookmark_client.cc | 2 + .../dialogs/DownloadLocationCustomView.java | 4 +- .../strings/android_chrome_strings.grd | 3 + components/bookmark_bar_strings.grdp | 6 ++ .../bookmarks/browser/bookmark_codec.cc | 22 +++++-- - components/bookmarks/browser/bookmark_codec.h | 7 ++- + components/bookmarks/browser/bookmark_codec.h | 7 +- .../browser/bookmark_load_details.cc | 4 ++ .../bookmarks/browser/bookmark_load_details.h | 3 + .../bookmarks/browser/bookmark_model.cc | 3 +- - components/bookmarks/browser/bookmark_model.h | 7 +++ + components/bookmarks/browser/bookmark_model.h | 7 ++ components/bookmarks/browser/bookmark_node.cc | 11 ++++ components/bookmarks/browser/bookmark_node.h | 4 ++ .../bookmarks/browser/bookmark_uuids.cc | 3 + components/bookmarks/browser/bookmark_uuids.h | 1 + components/bookmarks/browser/model_loader.cc | 3 +- .../bookmark_specifics_conversions.cc | 1 + - 23 files changed, 198 insertions(+), 10 deletions(-) + 22 files changed, 228 insertions(+), 10 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 @@ -149,14 +148,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm /** * @return Id representing the special "other" folder from bookmark model. */ -@@ -1008,6 +1025,49 @@ class BookmarkBridge { +@@ -1008,6 +1025,50 @@ class BookmarkBridge { return BookmarkBridgeJni.get().addToReadingList(mNativeBookmarkBridge, title, url); } + // Used to bookmark all tabs in a specific folder, created if not existing + public BookmarkId addToTabsCollection(Context context, Tab tab) { + BookmarkId parent = getTabsCollectionFolderId(); -+ BookmarkId existingId = getUserBookmarkIdForTab(tab); ++ BookmarkId existingId = BookmarkBridgeJni.get().getBookmarkIdForTabsCollection( ++ mNativeBookmarkBridge, tab.getOriginalUrl()); + if (existingId != null && existingId.getId() != BookmarkId.INVALID_ID) { + BookmarkId existingBookmarkId = new BookmarkId(existingId.getId(), BookmarkType.NORMAL); + BookmarkItem existingBookmark = getBookmarkById(existingBookmarkId); @@ -199,7 +199,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm /** * @param url The URL of the reading list item. * @return The reading list item with the URL, or null if no such reading list item. -@@ -1227,6 +1287,7 @@ class BookmarkBridge { +@@ -1221,12 +1282,15 @@ class BookmarkBridge { + void getImageUrlForBookmark(long nativeBookmarkBridge, GURL url, Callback callback); + BookmarkId getBookmarkIdForWebContents( + long nativeBookmarkBridge, WebContents webContents, boolean onlyEditable); ++ BookmarkId getBookmarkIdForTabsCollection( ++ long nativeBookmarkBridge, GURL url); + BookmarkItem getBookmarkById(long nativeBookmarkBridge, long id, int type); + void getTopLevelFolderIds(long nativeBookmarkBridge, List bookmarksList); + BookmarkId getReadingListFolder(long nativeBookmarkBridge); void getAllFoldersWithDepths( long nativeBookmarkBridge, List folderList, List depthList); BookmarkId getRootFolderId(long nativeBookmarkBridge); @@ -207,31 +215,44 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm BookmarkId getMobileFolderId(long nativeBookmarkBridge); BookmarkId getOtherFolderId(long nativeBookmarkBridge); BookmarkId getDesktopFolderId(long nativeBookmarkBridge); -diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java ---- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java -+++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java -@@ -782,6 +782,7 @@ public class BookmarkUtils { - BookmarkId rootNodeId = bookmarkModel.getRootFolderId(); - BookmarkId desktopNodeId = bookmarkModel.getDesktopFolderId(); - BookmarkId mobileNodeId = bookmarkModel.getMobileFolderId(); -+ BookmarkId tabsCollectionNodeId = bookmarkModel.getTabsCollectionFolderId(); - BookmarkId othersNodeId = bookmarkModel.getOtherFolderId(); - - List specialFoldersIds = bookmarkModel.getTopLevelFolderIds(); -@@ -798,6 +799,9 @@ public class BookmarkUtils { - /** Return the background color for the given {@link BookmarkType}. */ - public static @ColorInt int getIconBackground( - Context context, BookmarkModel bookmarkModel, BookmarkItem item) { -+ if (bookmarkModel.isFolderVisible(tabsCollectionNodeId)) { -+ topLevelFolders.add(tabsCollectionNodeId); -+ } - if (isSpecialFolder(bookmarkModel, item)) { - return SemanticColorUtils.getColorPrimaryContainer(context); - } else { 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 -@@ -436,6 +436,10 @@ void BookmarkBridge::GetTopLevelFolderIds( +@@ -330,6 +330,33 @@ void BookmarkBridge::GetImageUrlForBookmark( + base::BindOnce(&HandleImageUrlResponse, callback)); + } + ++base::android::ScopedJavaLocalRef ++BookmarkBridge::GetBookmarkIdForTabsCollection( ++ JNIEnv* env, ++ const JavaParamRef& url) { ++ DCHECK_CURRENTLY_ON(BrowserThread::UI); ++ ++ GURL gurl = *url::GURLAndroid::ToNativeGURL(env, url); ++ ++ bookmarks::BookmarkModel* model = ++ BookmarkModelFactory::GetForBrowserContext(profile_); ++ ++ std::vector nodes = ++ model->GetNodesByURL(gurl); ++ std::sort(nodes.begin(), nodes.end(), &bookmarks::MoreRecentlyAdded); ++ ++ for (const auto* node : nodes) { ++ for (const auto& child : model->tabs_collection_node()->children()) { ++ if (node->id() == child->id()) { ++ return JavaBookmarkIdCreateBookmarkId(env, node->id(), ++ GetBookmarkType(node)); ++ } ++ } ++ } ++ ++ return nullptr; ++} ++ + base::android::ScopedJavaLocalRef + BookmarkBridge::GetBookmarkIdForWebContents( + JNIEnv* env, +@@ -436,6 +463,10 @@ void BookmarkBridge::GetTopLevelFolderIds( } top_level_folders.push_back(root_child.get()); } @@ -242,7 +263,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse if (managed_bookmark_service_->managed_node() && !managed_bookmark_service_->managed_node()->children().empty()) { -@@ -479,6 +483,7 @@ void BookmarkBridge::GetAllFoldersWithDepths( +@@ -479,6 +510,7 @@ void BookmarkBridge::GetAllFoldersWithDepths( // Vector to temporarily contain all child bookmarks at same level for sorting std::vector bookmarks = { bookmark_model_->mobile_node(), @@ -250,7 +271,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse bookmark_model_->bookmark_bar_node(), bookmark_model_->other_node(), }; -@@ -1051,6 +1056,17 @@ void BookmarkBridge::GetBookmarksOfType( +@@ -1051,6 +1083,17 @@ void BookmarkBridge::GetBookmarksOfType( } } @@ -271,7 +292,18 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser/bookmarks/android/bookmark_bridge.h --- a/chrome/browser/bookmarks/android/bookmark_bridge.h +++ b/chrome/browser/bookmarks/android/bookmark_bridge.h -@@ -205,6 +205,10 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver, +@@ -69,6 +69,10 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver, + const base::android::JavaParamRef& j_url, + const base::android::JavaParamRef& j_callback); + ++ base::android::ScopedJavaLocalRef GetBookmarkIdForTabsCollection( ++ JNIEnv* env, ++ const base::android::JavaParamRef& url); ++ + base::android::ScopedJavaLocalRef GetBookmarkIdForWebContents( + JNIEnv* env, + +@@ -205,6 +209,10 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver, const base::android::JavaParamRef& j_list, jint type);