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