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

Propagate Suggestion Group Headers to Java.

This CL makes new Suggestion metadata - headers - available to Java,
enabling subsequent work on Omnibox Suggestions List.

No processing of any kind takes place here. Suggestion headers should
be processed unconditionally as the feature will be enabled
server-side.

Bug: 1073671
Change-Id: I2e03e7cae1ca9ab54bf80798f2146ce499035ff3
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2161319
Commit-Queue: Ender <ender@google.com>
Reviewed-by: default avatarPatrick Noland <pnoland@chromium.org>
Reviewed-by: default avatarTed Choc <tedchoc@chromium.org>
Reviewed-by: default avatarTommy Li <tommycli@chromium.org>
Cr-Commit-Position: refs/heads/master@{#762158}
parent a28fc86c
......@@ -5,6 +5,7 @@
package org.chromium.chrome.browser.omnibox.suggestions;
import android.text.TextUtils;
import android.util.SparseArray;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
......@@ -46,8 +47,8 @@ public class AutocompleteController {
* Listener for receiving OmniboxSuggestions.
*/
public interface OnSuggestionsReceivedListener {
void onSuggestionsReceived(
List<OmniboxSuggestion> suggestions, String inlineAutocompleteText);
void onSuggestionsReceived(List<OmniboxSuggestion> suggestions,
SparseArray<String> groupHeaders, String inlineAutocompleteText);
}
/**
......@@ -88,7 +89,7 @@ public class AutocompleteController {
mUseCachedZeroSuggestResults = true;
List<OmniboxSuggestion> suggestions =
OmniboxSuggestion.getCachedOmniboxSuggestionsForZeroSuggest();
if (suggestions != null) mListener.onSuggestionsReceived(suggestions, "");
if (suggestions != null) mListener.onSuggestionsReceived(suggestions, null, "");
}
/**
......@@ -178,7 +179,7 @@ public class AutocompleteController {
*
* <p>
* Calling this method with {@code false}, will result in
* {@link #onSuggestionsReceived(List, String, long)} being called with an empty
* {@link #onSuggestionsReceived(List, SparseArray, String, long)} being called with an empty
* result set.
*
* @param clear Whether to clear the most recent autocomplete results.
......@@ -228,7 +229,8 @@ public class AutocompleteController {
@CalledByNative
protected void onSuggestionsReceived(List<OmniboxSuggestion> suggestions,
String inlineAutocompleteText, long currentNativeAutocompleteResult) {
SparseArray<String> groupHeaders, String inlineAutocompleteText,
long currentNativeAutocompleteResult) {
assert mListener != null : "Ensure a listener is set prior generating suggestions.";
// Run through new providers to get an updated list of suggestions.
suggestions = mVoiceSuggestionProvider.addVoiceSuggestions(
......@@ -237,7 +239,7 @@ public class AutocompleteController {
mCurrentNativeAutocompleteResult = currentNativeAutocompleteResult;
// Notify callbacks of suggestions.
mListener.onSuggestionsReceived(suggestions, inlineAutocompleteText);
mListener.onSuggestionsReceived(suggestions, groupHeaders, inlineAutocompleteText);
if (mWaitingForSuggestionsToCache) {
OmniboxSuggestion.cacheOmniboxSuggestionListForZeroSuggest(suggestions);
}
......@@ -291,6 +293,30 @@ public class AutocompleteController {
suggestionList.add(suggestion);
}
/**
* Create a map (SparseArray) of Group Id to Group Header text.
*
* @param size Size hint for the newly created map.
* @return Empty map of Group ID to Header title.
*/
@CalledByNative
private static SparseArray<String> createOmniboxGroupHeadersMap(int size) {
return new SparseArray<String>(size);
}
/**
* Insert element to Group Headers map.
*
* @param headersMap SparseArray of Group Id to Headers.
* @param groupId ID of a Group.
* @param headerText Group title.
*/
@CalledByNative
private static void addOmniboxGroupHeaderToMap(
SparseArray<String> headersMap, int groupId, String headerText) {
headersMap.put(groupId, headerText);
}
@CalledByNative
private static OmniboxSuggestion buildOmniboxSuggestion(int nativeType, boolean isSearchType,
int relevance, int transition, String contents, int[] contentClassificationOffsets,
......@@ -298,7 +324,7 @@ public class AutocompleteController {
int[] descriptionClassificationOffsets, int[] descriptionClassificationStyles,
SuggestionAnswer answer, String fillIntoEdit, String url, String imageUrl,
String imageDominantColor, boolean isStarred, boolean isDeletable,
String postContentType, byte[] postData) {
String postContentType, byte[] postData, int groupId) {
assert contentClassificationOffsets.length == contentClassificationStyles.length;
List<MatchClassification> contentClassifications = new ArrayList<>();
for (int i = 0; i < contentClassificationOffsets.length; i++) {
......@@ -316,7 +342,7 @@ public class AutocompleteController {
return new OmniboxSuggestion(nativeType, isSearchType, relevance, transition, contents,
contentClassifications, description, descriptionClassifications, answer,
fillIntoEdit, url, imageUrl, imageDominantColor, isStarred, isDeletable,
postContentType, postData);
postContentType, postData, groupId);
}
/**
......
......@@ -10,6 +10,7 @@ import android.content.res.Resources;
import android.os.Handler;
import android.os.SystemClock;
import android.text.TextUtils;
import android.util.SparseArray;
import android.view.View;
import androidx.annotation.IntDef;
......@@ -939,8 +940,8 @@ class AutocompleteMediator implements OnSuggestionsReceivedListener, StartStopWi
}
@Override
public void onSuggestionsReceived(
List<OmniboxSuggestion> newSuggestions, String inlineAutocompleteText) {
public void onSuggestionsReceived(List<OmniboxSuggestion> newSuggestions,
SparseArray<String> groupHeaders, String inlineAutocompleteText) {
if (mShouldPreventOmniboxAutocomplete
|| getSuggestionVisibilityState() == SuggestionVisibilityState.DISALLOWED) {
resolvePendingKeyboardShowDecision();
......
......@@ -25,6 +25,8 @@ import java.util.List;
*/
@VisibleForTesting
public class OmniboxSuggestion {
public static final int INVALID_GROUP = -1;
private static final String KEY_ZERO_SUGGEST_LIST_SIZE = "zero_suggest_list_size";
private static final String KEY_PREFIX_ZERO_SUGGEST_URL = "zero_suggest_url";
private static final String KEY_PREFIX_ZERO_SUGGEST_DISPLAY_TEST = "zero_suggest_display_text";
......@@ -32,6 +34,7 @@ public class OmniboxSuggestion {
private static final String KEY_PREFIX_ZERO_SUGGEST_NATIVE_TYPE = "zero_suggest_native_type";
private static final String KEY_PREFIX_ZERO_SUGGEST_IS_SEARCH_TYPE = "zero_suggest_is_search";
private static final String KEY_PREFIX_ZERO_SUGGEST_ANSWER_TEXT = "zero_suggest_answer_text";
private static final String KEY_PREFIX_ZERO_SUGGEST_GROUP_ID = "zero_suggest_group_id";
// Deprecated:
// private static final String KEY_PREFIX_ZERO_SUGGEST_ANSWER_TYPE = "zero_suggest_answer_type";
private static final String KEY_PREFIX_ZERO_SUGGEST_IS_DELETABLE = "zero_suggest_is_deletable";
......@@ -88,13 +91,14 @@ public class OmniboxSuggestion {
private final boolean mIsDeletable;
private final String mPostContentType;
private final byte[] mPostData;
private final int mGroupId;
public OmniboxSuggestion(int nativeType, boolean isSearchType, int relevance, int transition,
String displayText, List<MatchClassification> displayTextClassifications,
String description, List<MatchClassification> descriptionClassifications,
SuggestionAnswer answer, String fillIntoEdit, String url, String imageUrl,
String imageDominantColor, boolean isStarred, boolean isDeletable,
String postContentType, byte[] postData) {
String postContentType, byte[] postData, int groupId) {
mType = nativeType;
mIsSearchType = isSearchType;
mRelevance = relevance;
......@@ -112,6 +116,7 @@ public class OmniboxSuggestion {
mIsDeletable = isDeletable;
mPostContentType = postContentType;
mPostData = postData;
mGroupId = groupId;
}
public int getType() {
......@@ -257,6 +262,7 @@ public class OmniboxSuggestion {
? ""
: Base64.encodeToString(
suggestion.getPostData(), Base64.DEFAULT))
.putInt(KEY_PREFIX_ZERO_SUGGEST_GROUP_ID + i, suggestion.getGroupId())
.apply();
}
}
......@@ -294,15 +300,25 @@ public class OmniboxSuggestion {
byte[] postData = Base64.decode(
prefs.getString(KEY_PREFIX_ZERO_SUGGEST_POST_CONTENT_DATA + i, ""),
Base64.DEFAULT);
int groupId = prefs.getInt(KEY_PREFIX_ZERO_SUGGEST_GROUP_ID + i, INVALID_GROUP);
OmniboxSuggestion suggestion = new OmniboxSuggestion(nativeType, isSearchType, 0, 0,
displayText, classifications, description, classifications, null, "", url,
null, null, isStarred, isDeletable,
postContentType.isEmpty() ? null : postContentType,
postData.length == 0 ? null : postData);
postData.length == 0 ? null : postData, groupId);
suggestions.add(suggestion);
}
}
return suggestions;
}
/**
* @return ID of the group this suggestion is associated with, or null, if the suggestion is
* not associated with any group, or INVALID_GROUP if suggestion is not associated with
* any group.
*/
public int getGroupId() {
return mGroupId;
}
}
......@@ -122,7 +122,7 @@ class VoiceSuggestionProvider {
classifications.add(new MatchClassification(0, MatchClassificationStyle.NONE));
suggestions.add(new OmniboxSuggestion(OmniboxSuggestionType.VOICE_SUGGEST, true, 0, 1,
result.getMatch(), classifications, null, classifications, null, null, voiceUrl,
null, null, false, false, null, null));
null, null, false, false, null, null, OmniboxSuggestion.INVALID_GROUP));
}
private boolean doesVoiceResultHaveMatch(
......
......@@ -8,6 +8,7 @@ import android.annotation.SuppressLint;
import android.support.test.InstrumentationRegistry;
import android.support.test.filters.MediumTest;
import android.support.test.filters.SmallTest;
import android.util.SparseArray;
import android.view.KeyEvent;
import android.widget.ImageButton;
......@@ -79,8 +80,8 @@ public class OmniboxTest {
private static final OnSuggestionsReceivedListener sEmptySuggestionListener =
new OnSuggestionsReceivedListener() {
@Override
public void onSuggestionsReceived(
List<OmniboxSuggestion> suggestions, String inlineAutocompleteText) {}
public void onSuggestionsReceived(List<OmniboxSuggestion> suggestions,
SparseArray<String> groupHeaders, String inlineAutocompleteText) {}
};
/**
......
......@@ -41,7 +41,7 @@ public class VoiceSuggestionProviderTest {
classifications.add(new MatchClassification(0, MatchClassificationStyle.NONE));
return new OmniboxSuggestion(OmniboxSuggestionType.SEARCH_SUGGEST, true, 0, 1, text,
classifications, null, classifications, null, "", "http://www.google.com", null,
null, false, false, null, null);
null, false, false, null, null, OmniboxSuggestion.INVALID_GROUP);
}
private static List<OmniboxSuggestion> createDummySuggestions(String... texts) {
......
......@@ -14,6 +14,7 @@ import android.os.Build;
import android.os.Bundle;
import android.speech.RecognizerIntent;
import android.support.test.filters.SmallTest;
import android.util.SparseArray;
import android.view.ViewGroup;
import androidx.annotation.ColorRes;
......@@ -88,8 +89,8 @@ public class VoiceRecognitionHandlerTest {
private static final OnSuggestionsReceivedListener sEmptySuggestionListener =
new OnSuggestionsReceivedListener() {
@Override
public void onSuggestionsReceived(
List<OmniboxSuggestion> suggestions, String inlineAutocompleteText) {}
public void onSuggestionsReceived(List<OmniboxSuggestion> suggestions,
SparseArray<String> groupHeaders, String inlineAutocompleteText) {}
};
/**
......
......@@ -338,12 +338,14 @@ public class SearchActivityTest {
// Cache some mock results to show.
List<MatchClassification> classifications = new ArrayList<>();
classifications.add(new MatchClassification(0, MatchClassificationStyle.NONE));
OmniboxSuggestion mockSuggestion = new OmniboxSuggestion(0, true, 0, 0,
"https://google.com", classifications, "https://google.com", classifications, null,
"", "https://google.com", null, null, false, false, null, null);
OmniboxSuggestion mockSuggestion2 = new OmniboxSuggestion(0, true, 0, 0,
"https://android.com", classifications, "https://android.com", classifications,
null, "", "https://android.com", null, null, false, false, null, null);
OmniboxSuggestion mockSuggestion =
new OmniboxSuggestion(0, true, 0, 0, "https://google.com", classifications,
"https://google.com", classifications, null, "", "https://google.com", null,
null, false, false, null, null, OmniboxSuggestion.INVALID_GROUP);
OmniboxSuggestion mockSuggestion2 =
new OmniboxSuggestion(0, true, 0, 0, "https://android.com", classifications,
"https://android.com", classifications, null, "", "https://android.com",
null, null, false, false, null, null, OmniboxSuggestion.INVALID_GROUP);
List<OmniboxSuggestion> list = new ArrayList<>();
list.add(mockSuggestion);
list.add(mockSuggestion2);
......
......@@ -117,7 +117,8 @@ public class AutocompleteMediatorUnitTest {
null /* descriptionClassifications */, null /* answer */,
null /* fillIntoEdit */, null /* url */, null /* imageUrl */,
null /* imageDominantColor */, false /* isStarred */, false /* isDeletable */,
null /* postContentType */, null /* postData */);
null /* postContentType */, null /* postData */,
OmniboxSuggestion.INVALID_GROUP);
list.add(suggestion);
}
......@@ -284,7 +285,7 @@ public class AutocompleteMediatorUnitTest {
public void updateSuggestionsList_defersKeyboardPopupWhenHaveLotsOfSuggestionsToShow() {
mMediator.onNativeInitialized();
mMediator.signalPendingKeyboardShowDecision();
mMediator.onSuggestionsReceived(mSuggestionsList, "");
mMediator.onSuggestionsReceived(mSuggestionsList, null, "");
verify(mAutocompleteDelegate, times(1)).setKeyboardVisibility(eq(false));
verify(mAutocompleteDelegate, never()).setKeyboardVisibility(eq(true));
}
......@@ -296,7 +297,7 @@ public class AutocompleteMediatorUnitTest {
mMediator.onNativeInitialized();
mMediator.signalPendingKeyboardShowDecision();
mMediator.onSuggestionsReceived(
mSuggestionsList.subList(0, MINIMUM_NUMBER_OF_SUGGESTIONS_TO_SHOW), "");
mSuggestionsList.subList(0, MINIMUM_NUMBER_OF_SUGGESTIONS_TO_SHOW), null, "");
verify(mAutocompleteDelegate, times(1)).setKeyboardVisibility(eq(true));
verify(mAutocompleteDelegate, never()).setKeyboardVisibility(eq(false));
}
......@@ -307,8 +308,8 @@ public class AutocompleteMediatorUnitTest {
public void updateSuggestionsList_doesNotShowKeyboardAfterReceivingSubsequentSuggestionLists() {
mMediator.onNativeInitialized();
mMediator.signalPendingKeyboardShowDecision();
mMediator.onSuggestionsReceived(mSuggestionsList, "");
mMediator.onSuggestionsReceived(mSuggestionsList.subList(0, 1), "");
mMediator.onSuggestionsReceived(mSuggestionsList, null, "");
mMediator.onSuggestionsReceived(mSuggestionsList.subList(0, 1), null, "");
verify(mAutocompleteDelegate, times(1)).setKeyboardVisibility(eq(false));
verify(mAutocompleteDelegate, never()).setKeyboardVisibility(eq(true));
}
......@@ -322,7 +323,7 @@ public class AutocompleteMediatorUnitTest {
// the omnibox field. This is beyond our control.
mMediator.onNativeInitialized();
mMediator.signalPendingKeyboardShowDecision();
mMediator.onSuggestionsReceived(mSuggestionsList, "");
mMediator.onSuggestionsReceived(mSuggestionsList, null, "");
verify(mAutocompleteDelegate, times(1)).setKeyboardVisibility(eq(false));
// Should request keyboard hide.
mMediator.onSuggestionListScroll();
......@@ -340,7 +341,7 @@ public class AutocompleteMediatorUnitTest {
mMediator.onNativeInitialized();
mMediator.signalPendingKeyboardShowDecision();
mMediator.onSuggestionsReceived(
mSuggestionsList.subList(0, MINIMUM_NUMBER_OF_SUGGESTIONS_TO_SHOW), "");
mSuggestionsList.subList(0, MINIMUM_NUMBER_OF_SUGGESTIONS_TO_SHOW), null, "");
verify(mAutocompleteDelegate, times(1)).setKeyboardVisibility(eq(true));
// Should perform no action.
......@@ -429,11 +430,11 @@ public class AutocompleteMediatorUnitTest {
ChromeFeatureList.OMNIBOX_DEFERRED_KEYBOARD_POPUP})
public void onSuggestionsReceived_sendsOnSuggestionsChanged() {
mMediator.onNativeInitialized();
mMediator.onSuggestionsReceived(mSuggestionsList, "inline_autocomplete");
mMediator.onSuggestionsReceived(mSuggestionsList, null, "inline_autocomplete");
verify(mAutocompleteDelegate).onSuggestionsChanged("inline_autocomplete");
// Ensure duplicate requests are suppressed.
mMediator.onSuggestionsReceived(mSuggestionsList, "inline_autocomplete2");
mMediator.onSuggestionsReceived(mSuggestionsList, null, "inline_autocomplete2");
verifyNoMoreInteractions(mAutocompleteDelegate);
}
......
......@@ -94,7 +94,8 @@ public class OmniboxSuggestionUnitTest {
null /* imageUrl */, null /* imageDominantColor */, false /* isStarred */,
false /* isDeletable */,
hasPostData ? "Dummy Content Type" + (index + 1) : null /* postContentType */,
hasPostData ? new byte[] {4, 5, 6, (byte) (index + 1)} : null /* postData */);
hasPostData ? new byte[] {4, 5, 6, (byte) (index + 1)} : null /* postData */,
OmniboxSuggestion.INVALID_GROUP);
list.add(suggestion);
}
......
......@@ -146,7 +146,7 @@ public class AnswerSuggestionProcessorUnitTest {
/* suggestionAnswer */ null, /* fillIntoEdit */ "", /* url */ "",
/* imageUrl */ "", /* imageDominantColor */ "",
/* isStarred */ false, /* isDeletable */ false, /* postContentType */ null,
/* postData */ null);
/* postData */ null, OmniboxSuggestion.INVALID_GROUP);
PropertyModel model = mProcessor.createModelForSuggestion(suggestion);
return new SuggestionTestHelper(suggestion, null, model, userQuery);
}
......@@ -165,7 +165,7 @@ public class AnswerSuggestionProcessorUnitTest {
/* fillIntoEdit */ "", /* url */ "", /* imageUrl */ "",
/* imageDominantColor */ "",
/* isStarred */ false, /* isDeletable */ false, /* postContentType */ null,
/* postData */ null);
/* postData */ null, OmniboxSuggestion.INVALID_GROUP);
PropertyModel model = mProcessor.createModelForSuggestion(suggestion);
return new SuggestionTestHelper(suggestion, answer, model, null);
}
......
......@@ -111,7 +111,8 @@ public class BaseSuggestionProcessorTest {
/* descriptionClassifications */ new ArrayList<>(),
/* suggestionAnswer */ null, /* fillIntoEdit */ null, url,
/* imageUrl */ "", /* imageDominantColor */ "", false,
/* isDeletable */ false, /* postContentType */ null, /* postData */ null);
/* isDeletable */ false, /* postContentType */ null, /* postData */ null,
OmniboxSuggestion.INVALID_GROUP);
mModel = mProcessor.createModelForSuggestion(mSuggestion);
mProcessor.populateModel(mSuggestion, mModel, 0);
}
......
......@@ -137,7 +137,8 @@ public class BasicSuggestionProcessorTest {
/* descriptionClassifications */ new ArrayList<>(),
/* suggestionAnswer */ null, /* fillIntoEdit */ null, url,
/* imageUrl */ "", /* imageDominantColor */ "", isBookmark,
/* isDeletable */ false, /* postContentType */ null, /* postData */ null);
/* isDeletable */ false, /* postContentType */ null, /* postData */ null,
OmniboxSuggestion.INVALID_GROUP);
mModel = mProcessor.createModelForSuggestion(mSuggestion);
mProcessor.populateModel(mSuggestion, mModel, 0);
}
......
......@@ -93,7 +93,8 @@ public class ClipboardSuggestionProcessorTest {
/* descriptionClassifications */ new ArrayList<>(),
/* suggestionAnswer */ null, /* fillIntoEdit */ null, url,
/* imageUrl */ "", /* imageDominantColor */ "", false,
/* isDeletable */ false, /* postContentType */ null, /* postData */ null);
/* isDeletable */ false, /* postContentType */ null, /* postData */ null,
OmniboxSuggestion.INVALID_GROUP);
mModel = mProcessor.createModelForSuggestion(mSuggestion);
mProcessor.populateModel(mSuggestion, mModel, 0);
SuggestionViewViewBinder.bind(mModel, mRootView, SuggestionViewProperties.TEXT_LINE_1_TEXT);
......
......@@ -106,7 +106,7 @@ public class EntitySuggestionProcessorUnitTest {
/* suggestionAnswer */ null, /* fillIntoEdit */ "", /* url */ "",
/* imageUrl */ url, /* imageDominantColor */ color,
/* isStarred */ false, /* isDeletable */ false, /* postContentType */ null,
/* postData */ null);
/* postData */ null, OmniboxSuggestion.INVALID_GROUP);
PropertyModel model = mProcessor.createModelForSuggestion(suggestion);
return new SuggestionTestHelper(suggestion, model);
}
......
......@@ -46,6 +46,7 @@
#include "components/omnibox/browser/omnibox_field_trial.h"
#include "components/omnibox/browser/omnibox_log.h"
#include "components/omnibox/browser/search_provider.h"
#include "components/omnibox/browser/search_suggestion_parser.h"
#include "components/omnibox/browser/zero_suggest_provider.h"
#include "components/omnibox/common/omnibox_features.h"
#include "components/open_from_clipboard/clipboard_recent_content.h"
......@@ -75,6 +76,9 @@ using metrics::OmniboxEventProto;
namespace {
// Group assignment for suggestions that did not report any group.
constexpr const int INVALID_GROUP = -1;
// Used for histograms, append only.
enum class MatchValidationResult {
VALID_MATCH = 0,
......@@ -427,6 +431,9 @@ void AutocompleteControllerAndroid::NotifySuggestionsReceived(
env, suggestion_list_obj, j_omnibox_suggestion);
}
ScopedJavaLocalRef<jobject> headers =
BuildOmniboxGroupHeaders(env, autocomplete_result.headers_map());
// Get the inline-autocomplete text.
base::string16 inline_autocomplete_text;
if (auto* default_match = autocomplete_result.default_match())
......@@ -436,7 +443,7 @@ void AutocompleteControllerAndroid::NotifySuggestionsReceived(
jlong j_autocomplete_result =
reinterpret_cast<intptr_t>(&(autocomplete_result));
Java_AutocompleteController_onSuggestionsReceived(
env, java_bridge, suggestion_list_obj, inline_text,
env, java_bridge, suggestion_list_obj, headers, inline_text,
j_autocomplete_result);
}
......@@ -567,7 +574,25 @@ AutocompleteControllerAndroid::BuildOmniboxSuggestion(
destination_url, image_url, image_dominant_color,
bookmark_model && bookmark_model->IsBookmarked(match.destination_url),
match.SupportsDeletion(), post_content_type,
ToJavaByteArray(env, post_content));
ToJavaByteArray(env, post_content),
match.suggestion_group_id.value_or(INVALID_GROUP));
}
ScopedJavaLocalRef<jobject>
AutocompleteControllerAndroid::BuildOmniboxGroupHeaders(
JNIEnv* env,
const SearchSuggestionParser::HeadersMap& native_header_map) {
const auto j_header_map =
Java_AutocompleteController_createOmniboxGroupHeadersMap(
env, native_header_map.size());
for (const auto& group_header : native_header_map) {
Java_AutocompleteController_addOmniboxGroupHeaderToMap(
env, j_header_map, group_header.first,
ConvertUTF16ToJavaString(env, group_header.second));
}
return j_header_map;
}
ScopedJavaLocalRef<jobject>
......
......@@ -124,6 +124,11 @@ class AutocompleteControllerAndroid : public AutocompleteController::Observer,
base::android::ScopedJavaLocalRef<jobject> BuildOmniboxSuggestion(
JNIEnv* env, const AutocompleteMatch& match);
// Construct Java Group Headers map from supplied HeadersMap.
base::android::ScopedJavaLocalRef<jobject> BuildOmniboxGroupHeaders(
JNIEnv* env,
const SearchSuggestionParser::HeadersMap& header_map);
// A helper method for fetching the top synchronous autocomplete result.
// The |prevent_inline_autocomplete| flag is passed to the AutocompleteInput
// object, see documentation there for its description.
......
......@@ -5,6 +5,7 @@
package org.chromium.chrome.test.util;
import android.content.Context;
import android.util.SparseArray;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.ListView;
......@@ -78,7 +79,8 @@ public class OmniboxTestUtils {
List<MatchClassification> classifications = new ArrayList<>();
classifications.add(new MatchClassification(0, MatchClassificationStyle.NONE));
mSuggestions.add(new OmniboxSuggestion(type, false, 0, 0, text, classifications, null,
classifications, null, "", url, null, null, false, false, null, null));
classifications, null, "", url, null, null, false, false, null, null,
OmniboxSuggestion.INVALID_GROUP));
return this;
}
......@@ -155,10 +157,8 @@ public class OmniboxTestUtils {
if (suggestions == null) return;
for (int i = 0; i < suggestions.size(); i++) {
onSuggestionsReceived(
suggestions.get(i).mSuggestions,
suggestions.get(i).mAutocompleteText,
0);
onSuggestionsReceived(suggestions.get(i).mSuggestions, null,
suggestions.get(i).mAutocompleteText, 0);
}
}
};
......@@ -198,7 +198,7 @@ public class OmniboxTestUtils {
setOnSuggestionsReceivedListener(new OnSuggestionsReceivedListener() {
@Override
public void onSuggestionsReceived(List<OmniboxSuggestion> suggestions,
String inlineAutocompleteText) {
SparseArray<String> groupHeaders, String inlineAutocompleteText) {
Assert.fail("No autocomplete suggestions should be received");
}
});
......
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