15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_UI_WEBUI_OMNIBOX_OMNIBOX_UI_HANDLER_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_UI_WEBUI_OMNIBOX_OMNIBOX_UI_HANDLER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/autocomplete/autocomplete_controller_delegate.h" 135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/ui/webui/mojo_web_ui_handler.h" 145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/ui/webui/omnibox/omnibox.mojom.h" 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/omnibox/autocomplete_input.h" 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/omnibox/autocomplete_match.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AutocompleteController; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Profile; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Implementation of OmniboxUIHandlerMojo. StartOmniboxQuery() calls to a 225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// private AutocompleteController. It also listens for updates from the 235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// AutocompleteController to OnResultChanged() and passes those results to 245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// the OmniboxPage. 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class OmniboxUIHandler : public AutocompleteControllerDelegate, 260de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles) public mojo::InterfaceImpl<OmniboxUIHandlerMojo>, 275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu public MojoWebUIHandler { 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 290de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles) explicit OmniboxUIHandler(Profile* profile); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~OmniboxUIHandler(); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // AutocompleteControllerDelegate overrides: 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnResultChanged(bool default_match_changed) OVERRIDE; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 350de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles) // ErrorHandler overrides: 360de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles) virtual void OnConnectionError() OVERRIDE { 370de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles) // TODO(darin): How should we handle connection error? 380de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles) } 390de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles) 405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // OmniboxUIHandlerMojo overrides: 415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual void StartOmniboxQuery(const mojo::String& input_string, 425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu int32_t cursor_position, 435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu bool prevent_inline_autocomplete, 445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu bool prefer_keyword, 455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu int32_t page_classification) OVERRIDE; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Looks up whether the hostname is a typed host (i.e., has received 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // typed visits). Return true if the lookup succeeded; if so, the 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // value of |is_typed_host| is set appropriately. 51a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool LookupIsTypedHost(const base::string16& host, bool* is_typed_host) const; 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Re-initializes the AutocompleteController in preparation for the 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // next query. 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void ResetController(); 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The omnibox AutocompleteController that collects/sorts/dup- 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // eliminates the results as they come in. 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<AutocompleteController> controller_; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Time the user's input was sent to the omnibox to start searching. 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Needed because we also pass timing information in the object we 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // hand back to the javascript. 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time time_omnibox_started_; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // The input used when starting the AutocompleteController. 675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu AutocompleteInput input_; 685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The Profile* handed to us in our constructor. 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile* profile_; 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(OmniboxUIHandler); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_UI_WEBUI_OMNIBOX_OMNIBOX_UI_HANDLER_H_ 76