Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2334)

Unified Diff: chrome/browser/resources/local_omnibox_popup/local_omnibox_popup.js

Issue 13905008: Merge local_omnibox_popup into local_ntp. Render the Google logo and fakebox if Google is the sear… (Closed) Base URL: https://git.chromium.org/chromium/src.git@master
Patch Set: Addressing comments. Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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
deleted file mode 100644
index 6c6be4ae126eb4b5f4a7fcc466e3449f399416ca..0000000000000000000000000000000000000000
--- a/chrome/browser/resources/local_omnibox_popup/local_omnibox_popup.js
+++ /dev/null
@@ -1,354 +0,0 @@
-// Copyright 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-/**
- * @fileoverview Support for omnibox behavior in offline mode or when API
- * features are not supported on the server.
- */
-
-// ==========================================================
-// Enums.
-// ==========================================================
-
-/**
- * Possible behaviors for navigateContentWindow.
- * @enum {number}
- */
-var WindowOpenDisposition = {
- CURRENT_TAB: 1,
- NEW_BACKGROUND_TAB: 2
-};
-
-/**
- * The JavaScript button event value for a middle click.
- * @type {number}
- * @const
- */
-var MIDDLE_MOUSE_BUTTON = 1;
-
-// =============================================================================
-// Util functions
-// =============================================================================
-
-/**
- * The maximum number of suggestions to show.
- * @type {number}
- * @const
- */
-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';
-
-/**
- * Suggestion provider type corresponding to a verbatim search suggestion.
- * @type {string}
- * @const
- */
-var VERBATIM_SEARCH_TYPE = 'search-what-you-typed';
-
-/**
- * The omnibox input value during the last onnativesuggestions event.
- * @type {string}
- */
-var lastInputValue = '';
-
-/**
- * The ordered restricted ids of the currently displayed suggestions. Since the
- * suggestions contain the user's personal data (browser history) the searchBox
- * API embeds the content of the suggestion in a shadow dom, and assigns a
- * random restricted id to each suggestion which is accessible to the JS.
- * @type {Array.<number>}
- */
-
-var restrictedIds = [];
-
-/**
- * The index of the currently selected suggestion or -1 if none are selected.
- * @type {number}
- */
-var selectedIndex = -1;
-
-/**
- * Shortcut for document.getElementById.
- * @param {string} id of the element.
- * @return {HTMLElement} with the id.
- */
-function $(id) {
- return document.getElementById(id);
-}
-
-/**
- * Displays a suggestion.
- * @param {Object} suggestion The suggestion to render.
- * @param {HTMLElement} box The html element to add the suggestion to.
- * @param {boolean} select True to select the selection.
- */
-function addSuggestionToBox(suggestion, box, select) {
- var suggestionDiv = document.createElement('div');
- suggestionDiv.classList.add('suggestion');
- suggestionDiv.classList.toggle('selected', select);
- suggestionDiv.classList.toggle('search', suggestion.is_search);
-
- if (suggestion.destination_url) { // iframes.
- var suggestionIframe = document.createElement('iframe');
- suggestionIframe.className = 'contents';
- suggestionIframe.src = suggestion.destination_url;
- suggestionIframe.id = suggestion.rid;
- suggestionDiv.appendChild(suggestionIframe);
- } else {
- var contentsContainer = document.createElement('div');
- var contents = suggestion.combinedNode;
- contents.classList.add('contents');
- contentsContainer.appendChild(contents);
- suggestionDiv.appendChild(contentsContainer);
- suggestionDiv.onclick = function(event) {
- handleSuggestionClick(suggestion.rid, event.button);
- };
- }
-
- restrictedIds.push(suggestion.rid);
- box.appendChild(suggestionDiv);
-}
-
-/**
- * Renders the input suggestions.
- * @param {Array} nativeSuggestions An array of native suggestions to render.
- */
-function renderSuggestions(nativeSuggestions) {
- var box = document.createElement('div');
- box.id = 'suggestionsBox';
- $('suggestions-box-container').appendChild(box);
-
- for (var i = 0, length = nativeSuggestions.length;
- i < Math.min(MAX_SUGGESTIONS_TO_SHOW, length); ++i) {
- // Don't add the search-what-you-typed suggestion if it's the top match.
- if (i > 0 || nativeSuggestions[i].type != VERBATIM_SEARCH_TYPE)
- addSuggestionToBox(nativeSuggestions[i], box, i == selectedIndex);
- }
-}
-
-/**
- * Clears the suggestions being displayed.
- */
-function clearSuggestions() {
- $('suggestions-box-container').innerHTML = '';
- restrictedIds = [];
- selectedIndex = -1;
-}
-
-/**
- * @return {number} The height of the dropdown.
- */
-function getDropdownHeight() {
- return $('suggestions-box-container').offsetHeight;
-}
-
-/**
- * @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.type != VERBATIM_SEARCH_TYPE &&
- 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.
- * @param {boolean} increment True to increment the selected suggestion, false
- * to decrement.
- */
-function updateSelectedSuggestion(increment) {
- var numSuggestions = restrictedIds.length;
- if (!numSuggestions)
- return;
-
- var oldSelection = $('suggestionsBox').querySelector('.selected');
- if (oldSelection)
- oldSelection.classList.remove('selected');
-
- if (increment)
- selectedIndex = ++selectedIndex > numSuggestions - 1 ? -1 : selectedIndex;
- else
- selectedIndex = --selectedIndex < -1 ? numSuggestions - 1 : selectedIndex;
- var apiHandle = getApiObjectHandle();
- if (selectedIndex == -1) {
- apiHandle.setValue(lastInputValue);
- } else {
- var newSelection = $('suggestionsBox').querySelector(
- '.suggestion:nth-of-type(' + (selectedIndex + 1) + ')');
- newSelection.classList.add('selected');
- apiHandle.setRestrictedValue(restrictedIds[selectedIndex]);
- }
-}
-
-// =============================================================================
-// Handlers / API stuff
-// =============================================================================
-
-/**
- * @return {Object} the handle to the searchBox API.
- */
- function getApiObjectHandle() {
- if (window.cideb)
- return window.cideb;
- if (window.navigator && window.navigator.embeddedSearch &&
- window.navigator.embeddedSearch.searchBox)
- return window.navigator.embeddedSearch.searchBox;
- if (window.chrome && window.chrome.embeddedSearch &&
- window.chrome.embeddedSearch.searchBox)
- return window.chrome.embeddedSearch.searchBox;
- return null;
-}
-
-/**
- * Updates suggestions in response to a onchange or onnativesuggestions call.
- */
-function updateSuggestions() {
- var apiHandle = getApiObjectHandle();
- lastInputValue = apiHandle.value;
-
- clearSuggestions();
- var nativeSuggestions = apiHandle.nativeSuggestions;
- if (nativeSuggestions.length) {
- nativeSuggestions.sort(function(a, b) {
- return b.rankingData.relevance - a.rankingData.relevance;
- });
- if (shouldSelectSuggestion(nativeSuggestions[0], apiHandle.verbatim))
- selectedIndex = 0;
- renderSuggestions(nativeSuggestions);
- }
-
- var height = getDropdownHeight();
- apiHandle.showOverlay(height);
-}
-
-/**
- * Appends a style node for suggestion properties that depend on apiHandle.
- */
-function appendSuggestionStyles() {
- var apiHandle = getApiObjectHandle();
- var isRtl = apiHandle.rtl;
- var startMargin = apiHandle.startMargin;
- var style = document.createElement('style');
- style.type = 'text/css';
- style.id = 'suggestionStyle';
- style.textContent =
- '.suggestion, ' +
- '.suggestion.search {' +
- ' background-position: ' +
- (isRtl ? '-webkit-calc(100% - 5px)' : '5px') + ' 4px;' +
- ' -webkit-margin-start: ' + startMargin + 'px;' +
- ' -webkit-margin-end: ' +
- (window.innerWidth - apiHandle.width - startMargin) + 'px;' +
- ' font: ' + apiHandle.fontSize + 'px "' + apiHandle.font + '";' +
- '}';
- document.querySelector('head').appendChild(style);
- window.removeEventListener('resize', appendSuggestionStyles);
-}
-
-/**
- * Extract the desired navigation behavior from a click button.
- * @param {number} button The Event#button property of a click event.
- * @return {WindowOpenDisposition} The desired behavior for
- * navigateContentWindow.
- */
-function getDispositionFromClickButton(button) {
- if (button == MIDDLE_MOUSE_BUTTON)
- return WindowOpenDisposition.NEW_BACKGROUND_TAB;
- return WindowOpenDisposition.CURRENT_TAB;
-}
-
-/**
- * Handles suggestion clicks.
- * @param {number} restrictedId The restricted id of the suggestion being
- * clicked.
- * @param {number} button The Event#button property of a click event.
- *
- */
-function handleSuggestionClick(restrictedId, button) {
- clearSuggestions();
- getApiObjectHandle().navigateContentWindow(
- restrictedId, getDispositionFromClickButton(button));
-}
-
-/**
- * chrome.searchBox.onkeypress implementation.
- * @param {Object} e The key being pressed.
- */
-function handleKeyPress(e) {
- switch (e.keyCode) {
- case 38: // Up arrow
- updateSelectedSuggestion(false);
- break;
- case 40: // Down arrow
- updateSelectedSuggestion(true);
- break;
- }
-}
-
-/**
- * Handles the postMessage calls from the result iframes.
- * @param {Object} message The message containing details of clicks the iframes.
- */
-function handleMessage(message) {
- if (message.origin != 'null' || !message.data ||
- message.data.eventType != 'click') {
- return;
- }
-
- var iframes = document.getElementsByClassName('contents');
- for (var i = 0; i < iframes.length; ++i) {
- if (iframes[i].contentWindow == message.source) {
- handleSuggestionClick(parseInt(iframes[i].id, 10),
- message.data.button);
- break;
- }
- }
-}
-
-/**
- * chrome.searchBox.embeddedSearch.onsubmit implementation.
- */
-function onSubmit() {
-}
-
-/**
- * Sets up the searchBox API.
- */
-function setUpApi() {
- var apiHandle = getApiObjectHandle();
- apiHandle.onnativesuggestions = updateSuggestions;
- apiHandle.onchange = updateSuggestions;
- apiHandle.onkeypress = handleKeyPress;
- apiHandle.onsubmit = onSubmit;
- $('suggestions-box-container').dir = apiHandle.rtl ? 'rtl' : 'ltr';
- // Delay adding these styles until the window width is available.
- window.addEventListener('resize', appendSuggestionStyles);
- if (apiHandle.nativeSuggestions.length)
- handleNativeSuggestions();
-}
-
-document.addEventListener('DOMContentLoaded', setUpApi);
-window.addEventListener('message', handleMessage, false);

Powered by Google App Engine
This is Rietveld 408576698