Index: chrome/browser/resources/local_omnibox_popup/local_omnibox_popup.js |
diff --git a/chrome/browser/resources/local_omnibox_popup/local_omnibox_popup.js b/chrome/browser/resources/local_omnibox_popup/local_omnibox_popup.js |
index 97adfd2e390da7f435a00879847f152b8a74a99c..2f49fd65b1f72453a5caade593b57eecac8e37d6 100644 |
--- a/chrome/browser/resources/local_omnibox_popup/local_omnibox_popup.js |
+++ b/chrome/browser/resources/local_omnibox_popup/local_omnibox_popup.js |
@@ -39,6 +39,21 @@ var MIDDLE_MOUSE_BUTTON = 1; |
var MAX_SUGGESTIONS_TO_SHOW = 5; |
/** |
+ * Assume any native suggestion with a score higher than this value has been |
+ * inlined by the browser. |
+ * @type {number} |
+ * @const |
+ */ |
+var INLINE_SUGGESTION_THRESHOLD = 1200; |
+ |
+/** |
+ * Suggestion provider type corresponding to a verbatim URL suggestion. |
+ * @type {string} |
+ * @const |
+ */ |
+var VERBATIM_URL_TYPE = 'url-what-you-typed'; |
+ |
+/** |
* The omnibox input value during the last onnativesuggestions event. |
* @type {string} |
*/ |
@@ -106,8 +121,7 @@ function renderSuggestions(nativeSuggestions) { |
for (var i = 0, length = nativeSuggestions.length; |
i < Math.min(MAX_SUGGESTIONS_TO_SHOW, length); ++i) { |
- // Select the first suggestion. |
- addSuggestionToBox(nativeSuggestions[i], box, i == 0); |
+ addSuggestionToBox(nativeSuggestions[i], box, i == selectedIndex); |
} |
} |
@@ -128,6 +142,21 @@ function getDropdownHeight() { |
} |
/** |
+ * @param {Object} suggestion A suggestion. |
+ * @param {boolean} inVerbatimMode Are we in verbatim mode? |
+ * @return {boolean} True if the suggestion should be selected. |
+ */ |
+function shouldSelectSuggestion(suggestion, inVerbatimMode) { |
+ var isVerbatimUrl = suggestion.type == VERBATIM_URL_TYPE; |
+ var inlinableSuggestion = suggestion.rankingData.relevance > |
+ INLINE_SUGGESTION_THRESHOLD; |
+ // Verbatim URLs should always be selected. Otherwise, select suggestions |
+ // with a high enough score unless we are in verbatim mode (e.g. backspacing |
+ // away). |
+ return isVerbatimUrl || (!inVerbatimMode && inlinableSuggestion); |
+} |
+ |
+/** |
* Updates selectedIndex, bounding it between -1 and the total number of |
* of suggestions - 1 (looping as necessary), and selects the corresponding |
* suggestion. |
@@ -178,18 +207,10 @@ function updateSelectedSuggestion(increment) { |
} |
/** |
- * chrome.searchBox.onnativesuggestions implementation. |
+ * Updates suggestions in response to a onchange or onnativesuggestions call. |
*/ |
-function handleNativeSuggestions() { |
+function updateSuggestions() { |
var apiHandle = getApiObjectHandle(); |
- |
- // Used to workaround repeated undesired asynchronous onnativesuggestions |
- // events and the fact that when a suggestion is clicked, the omnibox unfocus |
- // can cause onnativesuggestions to fire, preventing the suggestion onclick |
- // from registering. |
- if (lastInputValue == apiHandle.value && $('suggestionsBox')) { |
- return; |
- } |
lastInputValue = apiHandle.value; |
clearSuggestions(); |
@@ -198,10 +219,12 @@ function handleNativeSuggestions() { |
nativeSuggestions.sort(function(a, b) { |
return b.rankingData.relevance - a.rankingData.relevance; |
}); |
+ if (shouldSelectSuggestion(nativeSuggestions[0], apiHandle.verbatim)) { |
+ selectedIndex = 0; |
+ apiHandle.setRestrictedAutocompleteText( |
+ nativeSuggestions[selectedIndex].rid); |
+ } |
renderSuggestions(nativeSuggestions); |
- selectedIndex = 0; |
- apiHandle.setRestrictedAutocompleteText( |
- nativeSuggestions[selectedIndex].rid); |
} |
var height = getDropdownHeight(); |
@@ -219,7 +242,7 @@ function appendSuggestionStyles() { |
style.textContent = |
'.suggestion {' + |
' -webkit-margin-start: ' + apiHandle.startMargin + 'px;' + |
- ' -webkit-margin-end: ' + apiHandle.endMargin + 'px;' + |
+ ' width: ' + apiHandle.width + 'px;' + |
' font: ' + apiHandle.fontSize + 'px "' + apiHandle.font + '";' + |
'}'; |
document.querySelector('head').appendChild(style); |
@@ -275,7 +298,8 @@ function onSubmit() { |
*/ |
function setUpApi() { |
var apiHandle = getApiObjectHandle(); |
- apiHandle.onnativesuggestions = handleNativeSuggestions; |
+ apiHandle.onnativesuggestions = updateSuggestions; |
+ apiHandle.onchange = updateSuggestions; |
apiHandle.onkeypress = handleKeyPress; |
apiHandle.onsubmit = onSubmit; |
appendSuggestionStyles(); |