Commit ee2531ef authored by Tomasz Wiszkowski's avatar Tomasz Wiszkowski Committed by Commit Bot

Use BookmarkBridge to detect if AutocompleteMatch is a bookmark.

Bug: 1138587
Change-Id: Iabd37a0b822fd00095b9c64bf3b1a7759d56df97
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2542810
Commit-Queue: Tomasz Wiszkowski <ender@google.com>
Reviewed-by: default avatarTommy Li <tommycli@chromium.org>
Reviewed-by: default avatarTed Choc <tedchoc@chromium.org>
Cr-Commit-Position: refs/heads/master@{#828539}
parent ef5d6041
...@@ -25,6 +25,7 @@ import org.chromium.components.bookmarks.BookmarkType; ...@@ -25,6 +25,7 @@ import org.chromium.components.bookmarks.BookmarkType;
import org.chromium.components.url_formatter.SchemeDisplay; import org.chromium.components.url_formatter.SchemeDisplay;
import org.chromium.components.url_formatter.UrlFormatter; import org.chromium.components.url_formatter.UrlFormatter;
import org.chromium.content_public.browser.WebContents; import org.chromium.content_public.browser.WebContents;
import org.chromium.url.GURL;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
...@@ -858,6 +859,15 @@ public class BookmarkBridge { ...@@ -858,6 +859,15 @@ public class BookmarkBridge {
mNativeBookmarkBridge, BookmarkBridge.this, url, read); mNativeBookmarkBridge, BookmarkBridge.this, url, read);
} }
/**
* Checks whether supplied URL has already been bookmarked.
* @param url The URL to check.
* @return Whether the URL has been bookmarked.
*/
public boolean isBookmarked(GURL url) {
return BookmarkBridgeJni.get().isBookmarked(mNativeBookmarkBridge, url);
}
@VisibleForTesting @VisibleForTesting
BookmarkId getPartnerFolderId() { BookmarkId getPartnerFolderId() {
ThreadUtils.assertOnUiThread(); ThreadUtils.assertOnUiThread();
...@@ -1100,5 +1110,6 @@ public class BookmarkBridge { ...@@ -1100,5 +1110,6 @@ public class BookmarkBridge {
boolean isEditBookmarksEnabled(long nativeBookmarkBridge); boolean isEditBookmarksEnabled(long nativeBookmarkBridge);
void reorderChildren(long nativeBookmarkBridge, BookmarkBridge caller, BookmarkId parent, void reorderChildren(long nativeBookmarkBridge, BookmarkBridge caller, BookmarkId parent,
long[] orderedNodes); long[] orderedNodes);
boolean isBookmarked(long nativeBookmarkBridge, GURL url);
} }
} }
...@@ -13,7 +13,6 @@ import static org.chromium.chrome.browser.preferences.ChromePreferenceKeys.KEY_Z ...@@ -13,7 +13,6 @@ import static org.chromium.chrome.browser.preferences.ChromePreferenceKeys.KEY_Z
import static org.chromium.chrome.browser.preferences.ChromePreferenceKeys.KEY_ZERO_SUGGEST_HEADER_GROUP_TITLE_PREFIX; import static org.chromium.chrome.browser.preferences.ChromePreferenceKeys.KEY_ZERO_SUGGEST_HEADER_GROUP_TITLE_PREFIX;
import static org.chromium.chrome.browser.preferences.ChromePreferenceKeys.KEY_ZERO_SUGGEST_IS_DELETABLE_PREFIX; import static org.chromium.chrome.browser.preferences.ChromePreferenceKeys.KEY_ZERO_SUGGEST_IS_DELETABLE_PREFIX;
import static org.chromium.chrome.browser.preferences.ChromePreferenceKeys.KEY_ZERO_SUGGEST_IS_SEARCH_TYPE_PREFIX; import static org.chromium.chrome.browser.preferences.ChromePreferenceKeys.KEY_ZERO_SUGGEST_IS_SEARCH_TYPE_PREFIX;
import static org.chromium.chrome.browser.preferences.ChromePreferenceKeys.KEY_ZERO_SUGGEST_IS_STARRED_PREFIX;
import static org.chromium.chrome.browser.preferences.ChromePreferenceKeys.KEY_ZERO_SUGGEST_NATIVE_SUBTYPES_PREFIX; import static org.chromium.chrome.browser.preferences.ChromePreferenceKeys.KEY_ZERO_SUGGEST_NATIVE_SUBTYPES_PREFIX;
import static org.chromium.chrome.browser.preferences.ChromePreferenceKeys.KEY_ZERO_SUGGEST_NATIVE_TYPE_PREFIX; import static org.chromium.chrome.browser.preferences.ChromePreferenceKeys.KEY_ZERO_SUGGEST_NATIVE_TYPE_PREFIX;
import static org.chromium.chrome.browser.preferences.ChromePreferenceKeys.KEY_ZERO_SUGGEST_POST_CONTENT_DATA_PREFIX; import static org.chromium.chrome.browser.preferences.ChromePreferenceKeys.KEY_ZERO_SUGGEST_POST_CONTENT_DATA_PREFIX;
...@@ -104,8 +103,6 @@ public class CachedZeroSuggestionsManager { ...@@ -104,8 +103,6 @@ public class CachedZeroSuggestionsManager {
prefs.writeBoolean( prefs.writeBoolean(
KEY_ZERO_SUGGEST_IS_DELETABLE_PREFIX.createKey(numCachableSuggestions), KEY_ZERO_SUGGEST_IS_DELETABLE_PREFIX.createKey(numCachableSuggestions),
suggestion.isDeletable()); suggestion.isDeletable());
prefs.writeBoolean(KEY_ZERO_SUGGEST_IS_STARRED_PREFIX.createKey(numCachableSuggestions),
suggestion.isStarred());
prefs.writeString( prefs.writeString(
KEY_ZERO_SUGGEST_POST_CONTENT_TYPE_PREFIX.createKey(numCachableSuggestions), KEY_ZERO_SUGGEST_POST_CONTENT_TYPE_PREFIX.createKey(numCachableSuggestions),
suggestion.getPostContentType()); suggestion.getPostContentType());
...@@ -160,8 +157,6 @@ public class CachedZeroSuggestionsManager { ...@@ -160,8 +157,6 @@ public class CachedZeroSuggestionsManager {
AutocompleteMatch.INVALID_TYPE); AutocompleteMatch.INVALID_TYPE);
boolean isSearchType = boolean isSearchType =
prefs.readBoolean(KEY_ZERO_SUGGEST_IS_SEARCH_TYPE_PREFIX.createKey(i), false); prefs.readBoolean(KEY_ZERO_SUGGEST_IS_SEARCH_TYPE_PREFIX.createKey(i), false);
boolean isStarred =
prefs.readBoolean(KEY_ZERO_SUGGEST_IS_STARRED_PREFIX.createKey(i), false);
boolean isDeletable = boolean isDeletable =
prefs.readBoolean(KEY_ZERO_SUGGEST_IS_DELETABLE_PREFIX.createKey(i), false); prefs.readBoolean(KEY_ZERO_SUGGEST_IS_DELETABLE_PREFIX.createKey(i), false);
String postContentType = String postContentType =
...@@ -186,8 +181,8 @@ public class CachedZeroSuggestionsManager { ...@@ -186,8 +181,8 @@ public class CachedZeroSuggestionsManager {
AutocompleteMatch suggestion = new AutocompleteMatch(nativeType, subtypes, isSearchType, AutocompleteMatch suggestion = new AutocompleteMatch(nativeType, subtypes, isSearchType,
0, 0, displayText, classifications, description, classifications, null, null, 0, 0, displayText, classifications, description, classifications, null, null,
url, GURL.emptyGURL(), null, isStarred, isDeletable, postContentType, postData, url, GURL.emptyGURL(), null, isDeletable, postContentType, postData, groupId,
groupId, null, null, false, null); null, null, false, null);
suggestions.add(suggestion); suggestions.add(suggestion);
} }
......
...@@ -8,12 +8,14 @@ import android.content.Context; ...@@ -8,12 +8,14 @@ import android.content.Context;
import android.util.Pair; import android.util.Pair;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.Px; import androidx.annotation.Px;
import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
import org.chromium.base.Callback; import org.chromium.base.Callback;
import org.chromium.base.supplier.Supplier; import org.chromium.base.supplier.Supplier;
import org.chromium.chrome.browser.ActivityTabProvider; import org.chromium.chrome.browser.ActivityTabProvider;
import org.chromium.chrome.browser.bookmarks.BookmarkBridge;
import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.image_fetcher.ImageFetcher; import org.chromium.chrome.browser.image_fetcher.ImageFetcher;
import org.chromium.chrome.browser.image_fetcher.ImageFetcherConfig; import org.chromium.chrome.browser.image_fetcher.ImageFetcherConfig;
...@@ -53,14 +55,15 @@ class DropdownItemViewInfoListBuilder { ...@@ -53,14 +55,15 @@ class DropdownItemViewInfoListBuilder {
private static final int DROPDOWN_HEIGHT_UNKNOWN = -1; private static final int DROPDOWN_HEIGHT_UNKNOWN = -1;
private static final int DEFAULT_SIZE_OF_VISIBLE_GROUP = 5; private static final int DEFAULT_SIZE_OF_VISIBLE_GROUP = 5;
private final List<SuggestionProcessor> mPriorityOrderedSuggestionProcessors; private final @NonNull List<SuggestionProcessor> mPriorityOrderedSuggestionProcessors;
private @NonNull AutocompleteController mAutocompleteController; private @NonNull AutocompleteController mAutocompleteController;
private HeaderProcessor mHeaderProcessor; private @Nullable HeaderProcessor mHeaderProcessor;
private ActivityTabProvider mActivityTabProvider; private @Nullable ActivityTabProvider mActivityTabProvider;
private Supplier<ShareDelegate> mShareDelegateSupplier; private @Nullable Supplier<ShareDelegate> mShareDelegateSupplier;
private ImageFetcher mImageFetcher; private @Nullable ImageFetcher mImageFetcher;
private LargeIconBridge mIconBridge; private @Nullable LargeIconBridge mIconBridge;
private @Nullable BookmarkBridge mBookmarkBridge;
@Px @Px
private int mDropdownHeight; private int mDropdownHeight;
private boolean mEnableAdaptiveSuggestionsCount; private boolean mEnableAdaptiveSuggestionsCount;
...@@ -92,6 +95,7 @@ class DropdownItemViewInfoListBuilder { ...@@ -92,6 +95,7 @@ class DropdownItemViewInfoListBuilder {
() -> mActivityTabProvider == null ? null : mActivityTabProvider.get(); () -> mActivityTabProvider == null ? null : mActivityTabProvider.get();
final Supplier<ShareDelegate> shareSupplier = final Supplier<ShareDelegate> shareSupplier =
() -> mShareDelegateSupplier == null ? null : mShareDelegateSupplier.get(); () -> mShareDelegateSupplier == null ? null : mShareDelegateSupplier.get();
final Supplier<BookmarkBridge> bookmarkSupplier = () -> mBookmarkBridge;
mHeaderProcessor = new HeaderProcessor(context, host, delegate); mHeaderProcessor = new HeaderProcessor(context, host, delegate);
registerSuggestionProcessor(new EditUrlSuggestionProcessor( registerSuggestionProcessor(new EditUrlSuggestionProcessor(
...@@ -107,8 +111,8 @@ class DropdownItemViewInfoListBuilder { ...@@ -107,8 +111,8 @@ class DropdownItemViewInfoListBuilder {
new TileSuggestionProcessor(context, queryTileSuggestionCallback)); new TileSuggestionProcessor(context, queryTileSuggestionCallback));
registerSuggestionProcessor( registerSuggestionProcessor(
new MostVisitedTilesProcessor(context, host, iconBridgeSupplier)); new MostVisitedTilesProcessor(context, host, iconBridgeSupplier));
registerSuggestionProcessor( registerSuggestionProcessor(new BasicSuggestionProcessor(
new BasicSuggestionProcessor(context, host, textProvider, iconBridgeSupplier)); context, host, textProvider, iconBridgeSupplier, bookmarkSupplier));
} }
void destroy() { void destroy() {
...@@ -159,9 +163,15 @@ class DropdownItemViewInfoListBuilder { ...@@ -159,9 +163,15 @@ class DropdownItemViewInfoListBuilder {
mImageFetcher = null; mImageFetcher = null;
} }
if (mBookmarkBridge != null) {
mBookmarkBridge.destroy();
mBookmarkBridge = null;
}
mIconBridge = new LargeIconBridge(profile); mIconBridge = new LargeIconBridge(profile);
mImageFetcher = ImageFetcherFactory.createImageFetcher(ImageFetcherConfig.IN_MEMORY_ONLY, mImageFetcher = ImageFetcherFactory.createImageFetcher(ImageFetcherConfig.IN_MEMORY_ONLY,
profile, GlobalDiscardableReferencePool.getReferencePool(), MAX_IMAGE_CACHE_SIZE); profile, GlobalDiscardableReferencePool.getReferencePool(), MAX_IMAGE_CACHE_SIZE);
mBookmarkBridge = new BookmarkBridge(profile);
} }
/** /**
......
...@@ -124,8 +124,8 @@ class VoiceSuggestionProvider { ...@@ -124,8 +124,8 @@ class VoiceSuggestionProvider {
classifications.add(new MatchClassification(0, MatchClassificationStyle.NONE)); classifications.add(new MatchClassification(0, MatchClassificationStyle.NONE));
suggestions.add(new AutocompleteMatch(OmniboxSuggestionType.VOICE_SUGGEST, null, true, 0, 1, suggestions.add(new AutocompleteMatch(OmniboxSuggestionType.VOICE_SUGGEST, null, true, 0, 1,
result.getMatch(), classifications, null, classifications, null, null, voiceUrl, result.getMatch(), classifications, null, classifications, null, null, voiceUrl,
GURL.emptyGURL(), null, false, false, null, null, AutocompleteMatch.INVALID_GROUP, GURL.emptyGURL(), null, false, null, null, AutocompleteMatch.INVALID_GROUP, null,
null, null, false, null)); null, false, null));
} }
private boolean doesVoiceResultHaveMatch( private boolean doesVoiceResultHaveMatch(
......
...@@ -8,9 +8,11 @@ import android.content.Context; ...@@ -8,9 +8,11 @@ import android.content.Context;
import android.text.TextUtils; import android.text.TextUtils;
import androidx.annotation.DrawableRes; import androidx.annotation.DrawableRes;
import androidx.annotation.NonNull;
import org.chromium.base.supplier.Supplier; import org.chromium.base.supplier.Supplier;
import org.chromium.chrome.R; import org.chromium.chrome.R;
import org.chromium.chrome.browser.bookmarks.BookmarkBridge;
import org.chromium.chrome.browser.omnibox.MatchClassificationStyle; import org.chromium.chrome.browser.omnibox.MatchClassificationStyle;
import org.chromium.chrome.browser.omnibox.OmniboxSuggestionType; import org.chromium.chrome.browser.omnibox.OmniboxSuggestionType;
import org.chromium.chrome.browser.omnibox.UrlBarEditingTextStateProvider; import org.chromium.chrome.browser.omnibox.UrlBarEditingTextStateProvider;
...@@ -29,24 +31,30 @@ import java.util.List; ...@@ -29,24 +31,30 @@ import java.util.List;
/** A class that handles model and view creation for the basic omnibox suggestions. */ /** A class that handles model and view creation for the basic omnibox suggestions. */
public class BasicSuggestionProcessor extends BaseSuggestionViewProcessor { public class BasicSuggestionProcessor extends BaseSuggestionViewProcessor {
private final UrlBarEditingTextStateProvider mUrlBarEditingTextProvider; private final @NonNull UrlBarEditingTextStateProvider mUrlBarEditingTextProvider;
private final Supplier<LargeIconBridge> mIconBridgeSupplier; private final @NonNull Supplier<LargeIconBridge> mIconBridgeSupplier;
private final @NonNull Supplier<BookmarkBridge> mBookmarkBridgeSupplier;
private final int mDesiredFaviconWidthPx; private final int mDesiredFaviconWidthPx;
/** /**
* @param context An Android context. * @param context An Android context.
* @param suggestionHost A handle to the object using the suggestions. * @param suggestionHost A handle to the object using the suggestions.
* @param editingTextProvider A means of accessing the text in the omnibox. * @param editingTextProvider A means of accessing the text in the omnibox.
* @param iconBridgeSupplier A means of accessing the large icon bridge.
* @param bookmarkBridgeSupplier A means of accessing the bookmark information.
*/ */
public BasicSuggestionProcessor(Context context, SuggestionHost suggestionHost, public BasicSuggestionProcessor(@NonNull Context context,
UrlBarEditingTextStateProvider editingTextProvider, @NonNull SuggestionHost suggestionHost,
Supplier<LargeIconBridge> iconBridgeSupplier) { @NonNull UrlBarEditingTextStateProvider editingTextProvider,
@NonNull Supplier<LargeIconBridge> iconBridgeSupplier,
@NonNull Supplier<BookmarkBridge> bookmarkBridgeSupplier) {
super(context, suggestionHost); super(context, suggestionHost);
mDesiredFaviconWidthPx = getContext().getResources().getDimensionPixelSize( mDesiredFaviconWidthPx = getContext().getResources().getDimensionPixelSize(
R.dimen.omnibox_suggestion_favicon_size); R.dimen.omnibox_suggestion_favicon_size);
mUrlBarEditingTextProvider = editingTextProvider; mUrlBarEditingTextProvider = editingTextProvider;
mIconBridgeSupplier = iconBridgeSupplier; mIconBridgeSupplier = iconBridgeSupplier;
mBookmarkBridgeSupplier = bookmarkBridgeSupplier;
} }
@Override @Override
...@@ -88,7 +96,8 @@ public class BasicSuggestionProcessor extends BaseSuggestionViewProcessor { ...@@ -88,7 +96,8 @@ public class BasicSuggestionProcessor extends BaseSuggestionViewProcessor {
return SuggestionIcon.MAGNIFIER; return SuggestionIcon.MAGNIFIER;
} }
} else { } else {
if (suggestion.isStarred()) { BookmarkBridge bridge = mBookmarkBridgeSupplier.get();
if (bridge != null && bridge.isBookmarked(suggestion.getUrl())) {
return SuggestionIcon.BOOKMARK; return SuggestionIcon.BOOKMARK;
} else { } else {
return SuggestionIcon.GLOBE; return SuggestionIcon.GLOBE;
......
...@@ -55,7 +55,7 @@ public class VoiceSuggestionProviderTest { ...@@ -55,7 +55,7 @@ public class VoiceSuggestionProviderTest {
} }
private static boolean assertSuggestionMatchesVoiceResult(AutocompleteMatch a, VoiceResult b) { private static boolean assertSuggestionMatchesVoiceResult(AutocompleteMatch a, VoiceResult b) {
return a.getType() == OmniboxSuggestionType.VOICE_SUGGEST && !a.isStarred() return a.getType() == OmniboxSuggestionType.VOICE_SUGGEST
&& TextUtils.equals(a.getDisplayText(), b.getMatch()); && TextUtils.equals(a.getDisplayText(), b.getMatch());
} }
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
package org.chromium.chrome.browser.omnibox.suggestions.basic; package org.chromium.chrome.browser.omnibox.suggestions.basic;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.anyInt; import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.eq; import static org.mockito.Mockito.eq;
...@@ -31,6 +32,7 @@ import org.chromium.base.test.BaseJUnit4ClassRunner; ...@@ -31,6 +32,7 @@ import org.chromium.base.test.BaseJUnit4ClassRunner;
import org.chromium.base.test.UiThreadTest; import org.chromium.base.test.UiThreadTest;
import org.chromium.base.test.util.Batch; import org.chromium.base.test.util.Batch;
import org.chromium.chrome.R; import org.chromium.chrome.R;
import org.chromium.chrome.browser.bookmarks.BookmarkBridge;
import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.omnibox.OmniboxSuggestionType; import org.chromium.chrome.browser.omnibox.OmniboxSuggestionType;
import org.chromium.chrome.browser.omnibox.UrlBarEditingTextStateProvider; import org.chromium.chrome.browser.omnibox.UrlBarEditingTextStateProvider;
...@@ -104,6 +106,8 @@ public class BasicSuggestionProcessorUnitTest { ...@@ -104,6 +106,8 @@ public class BasicSuggestionProcessorUnitTest {
LargeIconBridge mIconBridge; LargeIconBridge mIconBridge;
@Mock @Mock
UrlBarEditingTextStateProvider mUrlBarText; UrlBarEditingTextStateProvider mUrlBarText;
@Mock
BookmarkBridge mBookmarkBridge;
private Bitmap mBitmap; private Bitmap mBitmap;
private BasicSuggestionProcessor mProcessor; private BasicSuggestionProcessor mProcessor;
...@@ -117,7 +121,7 @@ public class BasicSuggestionProcessorUnitTest { ...@@ -117,7 +121,7 @@ public class BasicSuggestionProcessorUnitTest {
doReturn("").when(mUrlBarText).getTextWithoutAutocomplete(); doReturn("").when(mUrlBarText).getTextWithoutAutocomplete();
mBitmap = Bitmap.createBitmap(1, 1, Config.ALPHA_8); mBitmap = Bitmap.createBitmap(1, 1, Config.ALPHA_8);
mProcessor = new BasicSuggestionProcessor(ContextUtils.getApplicationContext(), mProcessor = new BasicSuggestionProcessor(ContextUtils.getApplicationContext(),
mSuggestionHost, mUrlBarText, () -> mIconBridge); mSuggestionHost, mUrlBarText, () -> mIconBridge, () -> mBookmarkBridge);
} }
/** /**
...@@ -128,14 +132,6 @@ public class BasicSuggestionProcessorUnitTest { ...@@ -128,14 +132,6 @@ public class BasicSuggestionProcessorUnitTest {
return AutocompleteMatchBuilder.searchWithType(type).setDisplayText(title); return AutocompleteMatchBuilder.searchWithType(type).setDisplayText(title);
} }
/** Create bookmark suggestion for test. */
private void createBookmarkSuggestion(int type, String title) {
mSuggestion =
createSuggestionBuilder(type, title).setIsSearch(false).setIsStarred(true).build();
mModel = mProcessor.createModel();
mProcessor.populateModel(mSuggestion, mModel, 0);
}
/** Create search suggestion for test. */ /** Create search suggestion for test. */
private void createSearchSuggestion(int type, String title) { private void createSearchSuggestion(int type, String title) {
mSuggestion = createSuggestionBuilder(type, title).setIsSearch(true).build(); mSuggestion = createSuggestionBuilder(type, title).setIsSearch(true).build();
...@@ -260,9 +256,11 @@ public class BasicSuggestionProcessorUnitTest { ...@@ -260,9 +256,11 @@ public class BasicSuggestionProcessorUnitTest {
{OmniboxSuggestionType.PEDAL, SuggestionIcon.BOOKMARK}, {OmniboxSuggestionType.PEDAL, SuggestionIcon.BOOKMARK},
}; };
doReturn(true).when(mBookmarkBridge).isBookmarked(any());
mProcessor.onNativeInitialized(); mProcessor.onNativeInitialized();
for (int[] testCase : testCases) { for (int[] testCase : testCases) {
createBookmarkSuggestion(testCase[0], ""); createUrlSuggestion(testCase[0], "");
Assert.assertFalse(mModel.get(SuggestionViewProperties.IS_SEARCH_SUGGESTION)); Assert.assertFalse(mModel.get(SuggestionViewProperties.IS_SEARCH_SUGGESTION));
assertSuggestionTypeAndIcon(testCase[0], testCase[1]); assertSuggestionTypeAndIcon(testCase[0], testCase[1]);
} }
......
...@@ -866,6 +866,13 @@ void BookmarkBridge::EndGroupingUndos(JNIEnv* env, ...@@ -866,6 +866,13 @@ void BookmarkBridge::EndGroupingUndos(JNIEnv* env,
grouped_bookmark_actions_.reset(); grouped_bookmark_actions_.reset();
} }
bool BookmarkBridge::IsBookmarked(JNIEnv* env,
const JavaParamRef<jobject>& gurl) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
return bookmark_model_->IsBookmarked(
*url::GURLAndroid::ToNativeGURL(env, gurl));
}
base::string16 BookmarkBridge::GetTitle(const BookmarkNode* node) const { base::string16 BookmarkBridge::GetTitle(const BookmarkNode* node) const {
if (partner_bookmarks_shim_->IsPartnerBookmark(node)) if (partner_bookmarks_shim_->IsPartnerBookmark(node))
return partner_bookmarks_shim_->GetTitle(node); return partner_bookmarks_shim_->GetTitle(node);
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
#include "components/bookmarks/browser/base_bookmark_model_observer.h" #include "components/bookmarks/browser/base_bookmark_model_observer.h"
#include "components/bookmarks/common/android/bookmark_id.h" #include "components/bookmarks/common/android/bookmark_id.h"
#include "components/prefs/pref_change_registrar.h" #include "components/prefs/pref_change_registrar.h"
#include "url/android/gurl_android.h"
namespace bookmarks { namespace bookmarks {
class BookmarkModel; class BookmarkModel;
...@@ -232,6 +233,9 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver, ...@@ -232,6 +233,9 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver,
void EndGroupingUndos(JNIEnv* env, void EndGroupingUndos(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj); const base::android::JavaParamRef<jobject>& obj);
bool IsBookmarked(JNIEnv* env,
const base::android::JavaParamRef<jobject>& gurl);
base::string16 GetTitle(const bookmarks::BookmarkNode* node) const; base::string16 GetTitle(const bookmarks::BookmarkNode* node) const;
// ProfileObserver override // ProfileObserver override
......
...@@ -235,8 +235,8 @@ ScopedJavaLocalRef<jobject> AutocompleteControllerAndroid::Classify( ...@@ -235,8 +235,8 @@ ScopedJavaLocalRef<jobject> AutocompleteControllerAndroid::Classify(
if (result.empty()) if (result.empty())
return ScopedJavaLocalRef<jobject>(); return ScopedJavaLocalRef<jobject>();
return ScopedJavaLocalRef<jobject>(result.begin()->GetOrCreateJavaObject( return ScopedJavaLocalRef<jobject>(
env, provider_client_->GetBookmarkModel())); result.begin()->GetOrCreateJavaObject(env));
} }
void AutocompleteControllerAndroid::OnOmniboxFocused( void AutocompleteControllerAndroid::OnOmniboxFocused(
...@@ -524,8 +524,7 @@ void AutocompleteControllerAndroid::NotifySuggestionsReceived( ...@@ -524,8 +524,7 @@ void AutocompleteControllerAndroid::NotifySuggestionsReceived(
for (const auto& match : autocomplete_result) { for (const auto& match : autocomplete_result) {
Java_AutocompleteController_addOmniboxSuggestionToResult( Java_AutocompleteController_addOmniboxSuggestionToResult(
env, j_autocomplete_result, env, j_autocomplete_result, match.GetOrCreateJavaObject(env));
match.GetOrCreateJavaObject(env, provider_client_->GetBookmarkModel()));
} }
PopulateOmniboxGroupsDetails(env, j_autocomplete_result, PopulateOmniboxGroupsDetails(env, j_autocomplete_result,
...@@ -573,9 +572,7 @@ bool AutocompleteControllerAndroid::IsValidMatch(JNIEnv* env, ...@@ -573,9 +572,7 @@ bool AutocompleteControllerAndroid::IsValidMatch(JNIEnv* env,
// match count is very low, we can consider skipping the expensive // match count is very low, we can consider skipping the expensive
// verification step and removing this code. // verification step and removing this code.
bool equal = Java_AutocompleteController_isEquivalentOmniboxSuggestion( bool equal = Java_AutocompleteController_isEquivalentOmniboxSuggestion(
env, env, result.match_at(selected_index).GetOrCreateJavaObject(env),
result.match_at(selected_index)
.GetOrCreateJavaObject(env, provider_client_->GetBookmarkModel()),
hash_code); hash_code);
UMA_HISTOGRAM_ENUMERATION("Android.Omnibox.InvalidMatch", UMA_HISTOGRAM_ENUMERATION("Android.Omnibox.InvalidMatch",
equal ? MatchValidationResult::VALID_MATCH equal ? MatchValidationResult::VALID_MATCH
......
...@@ -92,7 +92,6 @@ public class AutocompleteMatch { ...@@ -92,7 +92,6 @@ public class AutocompleteMatch {
private final String mImageDominantColor; private final String mImageDominantColor;
private final int mRelevance; private final int mRelevance;
private final int mTransition; private final int mTransition;
private final boolean mIsStarred;
private final boolean mIsDeletable; private final boolean mIsDeletable;
private final String mPostContentType; private final String mPostContentType;
private final byte[] mPostData; private final byte[] mPostData;
...@@ -107,8 +106,8 @@ public class AutocompleteMatch { ...@@ -107,8 +106,8 @@ public class AutocompleteMatch {
List<MatchClassification> displayTextClassifications, String description, List<MatchClassification> displayTextClassifications, String description,
List<MatchClassification> descriptionClassifications, SuggestionAnswer answer, List<MatchClassification> descriptionClassifications, SuggestionAnswer answer,
String fillIntoEdit, GURL url, GURL imageUrl, String imageDominantColor, String fillIntoEdit, GURL url, GURL imageUrl, String imageDominantColor,
boolean isStarred, boolean isDeletable, String postContentType, byte[] postData, boolean isDeletable, String postContentType, byte[] postData, int groupId,
int groupId, List<QueryTile> queryTiles, byte[] clipboardImageData, boolean hasTabMatch, List<QueryTile> queryTiles, byte[] clipboardImageData, boolean hasTabMatch,
List<NavsuggestTile> navsuggestTiles) { List<NavsuggestTile> navsuggestTiles) {
if (subtypes == null) { if (subtypes == null) {
subtypes = Collections.emptySet(); subtypes = Collections.emptySet();
...@@ -129,7 +128,6 @@ public class AutocompleteMatch { ...@@ -129,7 +128,6 @@ public class AutocompleteMatch {
assert imageUrl != null; assert imageUrl != null;
mImageUrl = imageUrl; mImageUrl = imageUrl;
mImageDominantColor = imageDominantColor; mImageDominantColor = imageDominantColor;
mIsStarred = isStarred;
mIsDeletable = isDeletable; mIsDeletable = isDeletable;
mPostContentType = postContentType; mPostContentType = postContentType;
mPostData = postData; mPostData = postData;
...@@ -146,10 +144,10 @@ public class AutocompleteMatch { ...@@ -146,10 +144,10 @@ public class AutocompleteMatch {
int[] contentClassificationOffsets, int[] contentClassificationStyles, int[] contentClassificationOffsets, int[] contentClassificationStyles,
String description, int[] descriptionClassificationOffsets, String description, int[] descriptionClassificationOffsets,
int[] descriptionClassificationStyles, SuggestionAnswer answer, String fillIntoEdit, int[] descriptionClassificationStyles, SuggestionAnswer answer, String fillIntoEdit,
GURL url, GURL imageUrl, String imageDominantColor, boolean isStarred, GURL url, GURL imageUrl, String imageDominantColor, boolean isDeletable,
boolean isDeletable, String postContentType, byte[] postData, int groupId, String postContentType, byte[] postData, int groupId, List<QueryTile> tiles,
List<QueryTile> tiles, byte[] clipboardImageData, boolean hasTabMatch, byte[] clipboardImageData, boolean hasTabMatch, String[] navsuggestTitles,
String[] navsuggestTitles, GURL[] navsuggestUrls) { GURL[] navsuggestUrls) {
assert contentClassificationOffsets.length == contentClassificationStyles.length; assert contentClassificationOffsets.length == contentClassificationStyles.length;
List<MatchClassification> contentClassifications = new ArrayList<>(); List<MatchClassification> contentClassifications = new ArrayList<>();
for (int i = 0; i < contentClassificationOffsets.length; i++) { for (int i = 0; i < contentClassificationOffsets.length; i++) {
...@@ -177,9 +175,8 @@ public class AutocompleteMatch { ...@@ -177,9 +175,8 @@ public class AutocompleteMatch {
return new AutocompleteMatch(nativeType, subtypes, isSearchType, relevance, transition, return new AutocompleteMatch(nativeType, subtypes, isSearchType, relevance, transition,
contents, contentClassifications, description, descriptionClassifications, answer, contents, contentClassifications, description, descriptionClassifications, answer,
fillIntoEdit, url, imageUrl, imageDominantColor, isStarred, isDeletable, fillIntoEdit, url, imageUrl, imageDominantColor, isDeletable, postContentType,
postContentType, postData, groupId, tiles, clipboardImageData, hasTabMatch, postData, groupId, tiles, clipboardImageData, hasTabMatch, navsuggestTiles);
navsuggestTiles);
} }
public int getType() { public int getType() {
...@@ -238,13 +235,6 @@ public class AutocompleteMatch { ...@@ -238,13 +235,6 @@ public class AutocompleteMatch {
return mIsSearchType; return mIsSearchType;
} }
/**
* @return Whether this suggestion represents a starred/bookmarked URL.
*/
public boolean isStarred() {
return mIsStarred;
}
public boolean isDeletable() { public boolean isDeletable() {
return mIsDeletable; return mIsDeletable;
} }
...@@ -293,7 +283,7 @@ public class AutocompleteMatch { ...@@ -293,7 +283,7 @@ public class AutocompleteMatch {
final int displayTextHash = mDisplayText != null ? mDisplayText.hashCode() : 0; final int displayTextHash = mDisplayText != null ? mDisplayText.hashCode() : 0;
final int fillIntoEditHash = mFillIntoEdit != null ? mFillIntoEdit.hashCode() : 0; final int fillIntoEditHash = mFillIntoEdit != null ? mFillIntoEdit.hashCode() : 0;
int hash = 37 * mType + 2017 * displayTextHash + 1901 * fillIntoEditHash int hash = 37 * mType + 2017 * displayTextHash + 1901 * fillIntoEditHash
+ (mIsStarred ? 1 : 0) + (mIsDeletable ? 1 : 0); + (mIsDeletable ? 1 : 0);
if (mAnswer != null) hash = hash + mAnswer.hashCode(); if (mAnswer != null) hash = hash + mAnswer.hashCode();
return hash; return hash;
} }
...@@ -313,8 +303,7 @@ public class AutocompleteMatch { ...@@ -313,8 +303,7 @@ public class AutocompleteMatch {
&& TextUtils.equals(mDescription, suggestion.mDescription) && TextUtils.equals(mDescription, suggestion.mDescription)
&& ObjectsCompat.equals( && ObjectsCompat.equals(
mDescriptionClassifications, suggestion.mDescriptionClassifications) mDescriptionClassifications, suggestion.mDescriptionClassifications)
&& mIsStarred == suggestion.mIsStarred && mIsDeletable == suggestion.mIsDeletable && mIsDeletable == suggestion.mIsDeletable && mRelevance == suggestion.mRelevance
&& mRelevance == suggestion.mRelevance
&& ObjectsCompat.equals(mAnswer, suggestion.mAnswer) && ObjectsCompat.equals(mAnswer, suggestion.mAnswer)
&& TextUtils.equals(mPostContentType, suggestion.mPostContentType) && TextUtils.equals(mPostContentType, suggestion.mPostContentType)
&& Arrays.equals(mPostData, suggestion.mPostData) && mGroupId == suggestion.mGroupId && Arrays.equals(mPostData, suggestion.mPostData) && mGroupId == suggestion.mGroupId
...@@ -344,9 +333,8 @@ public class AutocompleteMatch { ...@@ -344,9 +333,8 @@ public class AutocompleteMatch {
"mDescription=" + mDescription, "mFillIntoEdit=" + mFillIntoEdit, "mUrl=" + mUrl, "mDescription=" + mDescription, "mFillIntoEdit=" + mFillIntoEdit, "mUrl=" + mUrl,
"mImageUrl=" + mImageUrl, "mImageDominatColor=" + mImageDominantColor, "mImageUrl=" + mImageUrl, "mImageDominatColor=" + mImageDominantColor,
"mRelevance=" + mRelevance, "mTransition=" + mTransition, "mRelevance=" + mRelevance, "mTransition=" + mTransition,
"mIsStarred=" + mIsStarred, "mIsDeletable=" + mIsDeletable, "mIsDeletable=" + mIsDeletable, "mPostContentType=" + mPostContentType,
"mPostContentType=" + mPostContentType, "mPostData=" + Arrays.toString(mPostData), "mPostData=" + Arrays.toString(mPostData), "mGroupId=" + mGroupId,
"mGroupId=" + mGroupId,
"mDisplayTextClassifications=" + mDisplayTextClassifications, "mDisplayTextClassifications=" + mDisplayTextClassifications,
"mDescriptionClassifications=" + mDescriptionClassifications, "mAnswer=" + mAnswer); "mDescriptionClassifications=" + mDescriptionClassifications, "mAnswer=" + mAnswer);
return pieces.toString(); return pieces.toString();
......
...@@ -35,7 +35,6 @@ public class AutocompleteMatchBuilder { ...@@ -35,7 +35,6 @@ public class AutocompleteMatchBuilder {
private String mImageDominantColor; private String mImageDominantColor;
private int mRelevance; private int mRelevance;
private int mTransition; private int mTransition;
private boolean mIsStarred;
private boolean mIsDeletable; private boolean mIsDeletable;
private String mPostContentType; private String mPostContentType;
private byte[] mPostData; private byte[] mPostData;
...@@ -85,7 +84,6 @@ public class AutocompleteMatchBuilder { ...@@ -85,7 +84,6 @@ public class AutocompleteMatchBuilder {
mImageDominantColor = null; mImageDominantColor = null;
mRelevance = 0; mRelevance = 0;
mTransition = 0; mTransition = 0;
mIsStarred = false;
mIsDeletable = false; mIsDeletable = false;
mPostContentType = null; mPostContentType = null;
mPostData = null; mPostData = null;
...@@ -111,8 +109,8 @@ public class AutocompleteMatchBuilder { ...@@ -111,8 +109,8 @@ public class AutocompleteMatchBuilder {
return new AutocompleteMatch(mType, mSubtypes, mIsSearchType, mRelevance, mTransition, return new AutocompleteMatch(mType, mSubtypes, mIsSearchType, mRelevance, mTransition,
mDisplayText, mDisplayTextClassifications, mDescription, mDisplayText, mDisplayTextClassifications, mDescription,
mDescriptionClassifications, mAnswer, mFillIntoEdit, mUrl, mImageUrl, mDescriptionClassifications, mAnswer, mFillIntoEdit, mUrl, mImageUrl,
mImageDominantColor, mIsStarred, mIsDeletable, mPostContentType, mPostData, mImageDominantColor, mIsDeletable, mPostContentType, mPostData, mGroupId,
mGroupId, mQueryTiles, mClipboardImageData, mHasTabMatch, mNavsuggestTiles); mQueryTiles, mClipboardImageData, mHasTabMatch, mNavsuggestTiles);
} }
/** /**
...@@ -196,15 +194,6 @@ public class AutocompleteMatchBuilder { ...@@ -196,15 +194,6 @@ public class AutocompleteMatchBuilder {
return this; return this;
} }
/**
* @param isStarred Whether built suggestion is bookmarked.
* @return Omnibox suggestion builder.
*/
public AutocompleteMatchBuilder setIsStarred(boolean isStarred) {
mIsStarred = isStarred;
return this;
}
/** /**
* @param answer The answer in the Omnibox suggestion. * @param answer The answer in the Omnibox suggestion.
* @return Omnibox suggestion builder. * @return Omnibox suggestion builder.
......
...@@ -40,10 +40,6 @@ namespace base { ...@@ -40,10 +40,6 @@ namespace base {
class Time; class Time;
} // namespace base } // namespace base
namespace bookmarks {
class BookmarkModel;
} // namespace bookmarks
namespace gfx { namespace gfx {
struct VectorIcon; struct VectorIcon;
} // namespace gfx } // namespace gfx
...@@ -197,8 +193,7 @@ struct AutocompleteMatch { ...@@ -197,8 +193,7 @@ struct AutocompleteMatch {
// Returns a corresponding Java object, creating it if necessary. // Returns a corresponding Java object, creating it if necessary.
// NOTE: Android specific methods are defined in autocomplete_match_android.cc // NOTE: Android specific methods are defined in autocomplete_match_android.cc
base::android::ScopedJavaLocalRef<jobject> GetOrCreateJavaObject( base::android::ScopedJavaLocalRef<jobject> GetOrCreateJavaObject(
JNIEnv* env, JNIEnv* env) const;
bookmarks::BookmarkModel* model) const;
#endif #endif
#if (!defined(OS_ANDROID) || BUILDFLAG(ENABLE_VR)) && !defined(OS_IOS) #if (!defined(OS_ANDROID) || BUILDFLAG(ENABLE_VR)) && !defined(OS_IOS)
......
...@@ -9,7 +9,6 @@ ...@@ -9,7 +9,6 @@
#include "base/android/jni_android.h" #include "base/android/jni_android.h"
#include "base/android/jni_array.h" #include "base/android/jni_array.h"
#include "base/android/jni_string.h" #include "base/android/jni_string.h"
#include "components/bookmarks/browser/bookmark_model.h"
#include "components/omnibox/browser/jni_headers/AutocompleteMatch_jni.h" #include "components/omnibox/browser/jni_headers/AutocompleteMatch_jni.h"
#include "components/omnibox/browser/search_suggestion_parser.h" #include "components/omnibox/browser/search_suggestion_parser.h"
#include "components/query_tiles/android/tile_conversion_bridge.h" #include "components/query_tiles/android/tile_conversion_bridge.h"
...@@ -23,8 +22,7 @@ using base::android::ToJavaByteArray; ...@@ -23,8 +22,7 @@ using base::android::ToJavaByteArray;
using base::android::ToJavaIntArray; using base::android::ToJavaIntArray;
ScopedJavaLocalRef<jobject> AutocompleteMatch::GetOrCreateJavaObject( ScopedJavaLocalRef<jobject> AutocompleteMatch::GetOrCreateJavaObject(
JNIEnv* env, JNIEnv* env) const {
bookmarks::BookmarkModel* bookmark_model) const {
// Short circuit if we already built the match. // Short circuit if we already built the match.
if (java_match_) if (java_match_)
return ScopedJavaLocalRef<jobject>(java_match_); return ScopedJavaLocalRef<jobject>(java_match_);
...@@ -90,9 +88,8 @@ ScopedJavaLocalRef<jobject> AutocompleteMatch::GetOrCreateJavaObject( ...@@ -90,9 +88,8 @@ ScopedJavaLocalRef<jobject> AutocompleteMatch::GetOrCreateJavaObject(
ConvertUTF16ToJavaString(env, fill_into_edit), ConvertUTF16ToJavaString(env, fill_into_edit),
url::GURLAndroid::FromNativeGURL(env, destination_url), url::GURLAndroid::FromNativeGURL(env, destination_url),
url::GURLAndroid::FromNativeGURL(env, destination_url), url::GURLAndroid::FromNativeGURL(env, destination_url),
j_image_dominant_color, j_image_dominant_color, SupportsDeletion(), j_post_content_type,
bookmark_model && bookmark_model->IsBookmarked(destination_url), j_post_content,
SupportsDeletion(), j_post_content_type, j_post_content,
suggestion_group_id.value_or( suggestion_group_id.value_or(
SearchSuggestionParser::kNoSuggestionGroupId), SearchSuggestionParser::kNoSuggestionGroupId),
j_query_tiles, ToJavaByteArray(env, clipboard_image_data), has_tab_match, j_query_tiles, ToJavaByteArray(env, clipboard_image_data), has_tab_match,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment