Index: chrome/browser/resources/omnibox/omnibox.js |
diff --git a/chrome/browser/resources/omnibox/omnibox.js b/chrome/browser/resources/omnibox/omnibox.js |
index f30bfc143154bc8e66f3ed8861e38164856f25db..afde3e03477cd23c3b5e64fd1845d2d4b34669dc 100644 |
--- a/chrome/browser/resources/omnibox/omnibox.js |
+++ b/chrome/browser/resources/omnibox/omnibox.js |
@@ -16,9 +16,15 @@ |
* results are available. When results (possibly intermediate ones) |
* are available, the Javascript formats them and displays them. |
*/ |
-cr.define('omniboxDebug', function() { |
+define('main', [ |
+ 'mojo/public/js/bindings/connection', |
+ 'chrome/browser/ui/webui/omnibox/omnibox.mojom', |
+], function(connector, browser) { |
'use strict'; |
+ var connection; |
+ var page; |
+ |
/** |
* Register our event handlers. |
*/ |
@@ -35,10 +41,9 @@ cr.define('omniboxDebug', function() { |
} |
/** |
- * @type {Array.<Object>} an array of all autocomplete results we've seen |
+ * @type {OmniboxResultMojo} an array of all autocomplete results we've seen |
* for this query. We append to this list once for every call to |
- * handleNewAutocompleteResult. For details on the structure of |
- * the object inside, see the comments by addResultToOutput. |
+ * handleNewAutocompleteResult. See omnibox.mojom for details.. |
*/ |
var progressiveAutocompleteResults = []; |
@@ -65,12 +70,12 @@ cr.define('omniboxDebug', function() { |
// - forth element: the value of prefer-keyword |
// - fifth element: the value of page-classification |
cursorPositionUsed = $('input-text').selectionEnd; |
- chrome.send('startOmniboxQuery', [ |
+ page.browser_.startOmniboxQuery( |
$('input-text').value, |
cursorPositionUsed, |
$('prevent-inline-autocomplete').checked, |
$('prefer-keyword').checked, |
- parseInt($('page-classification').value)]); |
+ parseInt($('page-classification').value)); |
// Cancel the submit action. i.e., don't submit the form. (We handle |
// display the results solely with Javascript.) |
event.preventDefault(); |
@@ -152,8 +157,6 @@ cr.define('omniboxDebug', function() { |
'A green checkmark indicates that the provider is done looking for ' + |
'more results.'), |
new PresentationInfoRecord( |
- 'Template URL', '', 'template_url', false, ''), |
- new PresentationInfoRecord( |
'Associated Keyword', '', 'associated_keyword', false, |
'If non-empty, a "press tab to search" hint will be shown and will ' + |
'engage this keyword.'), |
@@ -213,21 +216,22 @@ cr.define('omniboxDebug', function() { |
if (propertyName in autocompleteSuggestion) { |
if (propertyName == 'additional_info') { |
// |additional_info| embeds a two-column table of provider-specific data |
- // within this cell. |
+ // within this cell. |additional_info| is an array of |
+ // AutocompleteAdditionalInfo. |
var additionalInfoTable = document.createElement('table'); |
- for (var additionalInfoKey in autocompleteSuggestion[propertyName]) { |
+ for (var i = 0; i < autocompleteSuggestion[propertyName].length; i++) { |
+ var additionalInfo = autocompleteSuggestion[propertyName][i]; |
var additionalInfoRow = document.createElement('tr'); |
// Set the title (name of property) cell text. |
var propertyCell = document.createElement('td'); |
- propertyCell.textContent = additionalInfoKey + ':'; |
+ propertyCell.textContent = additionalInfo.key + ':'; |
propertyCell.className = 'additional-info-property'; |
additionalInfoRow.appendChild(propertyCell); |
// Set the value of the property cell text. |
var valueCell = document.createElement('td'); |
- valueCell.textContent = |
- autocompleteSuggestion[propertyName][additionalInfoKey]; |
+ valueCell.textContent = additionalInfo.value; |
valueCell.className = 'additional-info-value'; |
additionalInfoRow.appendChild(valueCell); |
@@ -264,59 +268,11 @@ cr.define('omniboxDebug', function() { |
} |
/** |
- * Called by C++ code when we get an update from the |
- * AutocompleteController. We simply append the result to |
- * progressiveAutocompleteResults and refresh the page. |
- */ |
- function handleNewAutocompleteResult(result) { |
- progressiveAutocompleteResults.push(result); |
- refresh(); |
- } |
- |
- /** |
* Appends some human-readable information about the provided |
* autocomplete result to the HTML node with id omnibox-debug-text. |
* The current human-readable form is a few lines about general |
* autocomplete result statistics followed by a table with one line |
- * for each autocomplete match. The input parameter result is a |
- * complex Object with lots of information about various |
- * autocomplete matches. Here's an example of what it looks like: |
- * <pre> |
- * {@code |
- * { |
- * 'done': false, |
- * 'time_since_omnibox_started_ms': 15, |
- * 'host': 'mai', |
- * 'is_typed_host': false, |
- * 'combined_results' : { |
- * 'num_items': 4, |
- * 'item_0': { |
- * 'destination_url': 'http://mail.google.com', |
- * 'provider_name': 'HistoryURL', |
- * 'relevance': 1410, |
- * ... |
- * } |
- * 'item_1: { |
- * ... |
- * } |
- * ... |
- * } |
- * 'results_by_provider': { |
- * 'HistoryURL' : { |
- * 'num_items': 3, |
- * ... |
- * } |
- * 'Search' : { |
- * 'num_items': 1, |
- * ... |
- * } |
- * ... |
- * } |
- * } |
- * } |
- * </pre> |
- * For more information on how the result is packed, see the |
- * corresponding code in chrome/browser/ui/webui/omnibox_ui.cc |
+ * for each autocomplete match. The input parameter is an OmniboxResultMojo. |
*/ |
function addResultToOutput(result) { |
var output = $('omnibox-debug-text'); |
@@ -377,23 +333,20 @@ cr.define('omniboxDebug', function() { |
// Add the per-provider result tables with labels. We do not append the |
// combined/merged result table since we already have the per provider |
// results. |
- for (var provider in result.results_by_provider) { |
- var results = result.results_by_provider[provider]; |
+ for (var i = 0; i < result.results_by_provider.length; i++) { |
+ var providerResults = result.results_by_provider[i]; |
// If we have no results we do not display anything. |
- if (results.num_items == 0) { |
+ if (providerResults.results.length == 0) { |
continue; |
} |
var p = document.createElement('p'); |
- p.appendChild(addResultTableToOutput(results)); |
+ p.appendChild(addResultTableToOutput(providerResults.results)); |
output.appendChild(p); |
} |
} |
/** |
- * @param {Object} result either the combined_results component of |
- * the structure described in the comment by addResultToOutput() |
- * above or one of the per-provider results in the structure. |
- * (Both have the same format). |
+ * @param {Object} result an array of AutocompleteMatchMojos. |
* @return {HTMLTableCellElement} that is a user-readable HTML |
* representation of this object. |
*/ |
@@ -404,8 +357,8 @@ cr.define('omniboxDebug', function() { |
table.className = 'autocomplete-results-table'; |
table.appendChild(createAutocompleteResultTableHeader()); |
// Loop over every autocomplete item and add it as a row in the table. |
- for (var i = 0; i < result.num_items; i++) { |
- var autocompleteSuggestion = result['item_' + i]; |
+ for (var i = 0; i < result.length; i++) { |
+ var autocompleteSuggestion = result[i]; |
var row = document.createElement('tr'); |
// Loop over all the columns/properties and output either them |
// all (if we're in detailed mode) or only the ones marked displayAlways. |
@@ -464,11 +417,22 @@ cr.define('omniboxDebug', function() { |
} |
} |
- return { |
- initialize: initialize, |
- startOmniboxQuery: startOmniboxQuery, |
- handleNewAutocompleteResult: handleNewAutocompleteResult |
+ function OmniboxPageImpl(browser) { |
+ this.browser_ = browser; |
+ page = this; |
+ initialize(); |
+ } |
+ |
+ OmniboxPageImpl.prototype = |
+ Object.create(browser.OmniboxPageStub.prototype); |
+ |
+ OmniboxPageImpl.prototype.handleNewAutocompleteResult = function(result) { |
+ progressiveAutocompleteResults.push(result); |
+ refresh(); |
}; |
-}); |
-document.addEventListener('DOMContentLoaded', omniboxDebug.initialize); |
+ return function(handle) { |
+ connection = new connector.Connection(handle, OmniboxPageImpl, |
+ browser.OmniboxUIHandlerMojoProxy); |
+ }; |
+}); |