1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#ifndef CHROME_BROWSER_UI_OMNIBOX_OMNIBOX_CONTROLLER_H_ 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define CHROME_BROWSER_UI_OMNIBOX_OMNIBOX_CONTROLLER_H_ 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/basictypes.h" 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/compiler_specific.h" 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string16.h" 1290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/autocomplete/autocomplete_controller.h" 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/autocomplete/autocomplete_controller_delegate.h" 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/omnibox/autocomplete_match.h" 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 16116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass AUtocompleteInput; 1790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)struct AutocompleteMatch; 1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class AutocompleteResult; 19868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class InstantController; 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class OmniboxEditModel; 2190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class OmniboxPopupModel; 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class Profile; 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace gfx { 2590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class Rect; 2690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 2790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// This class controls the various services that can modify the content 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// for the omnibox, including AutocompleteController and InstantController. It 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// is responsible of updating the omnibox content. 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// TODO(beaudoin): Keep on expanding this class so that OmniboxEditModel no 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// longer needs to hold any reference to AutocompleteController. Also make 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// this the point of contact between InstantController and OmniboxEditModel. 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// As the refactor progresses, keep the class comment up-to-date to 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// precisely explain what this class is doing. 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class OmniboxController : public AutocompleteControllerDelegate { 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 38868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) OmniboxController(OmniboxEditModel* omnibox_edit_model, 39868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) Profile* profile); 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ~OmniboxController(); 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // The |current_url| field of input is only set for mobile ports. 435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void StartAutocomplete(const AutocompleteInput& input) const; 44868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // AutocompleteControllerDelegate: 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void OnResultChanged(bool default_match_changed) OVERRIDE; 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutocompleteController* autocomplete_controller() { 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return autocomplete_controller_.get(); 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Set |current_match_| to an invalid value, indicating that we do not yet 537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // have a valid match for the current text in the omnibox. 547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void InvalidateCurrentMatch(); 557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 5690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void set_popup_model(OmniboxPopupModel* popup_model) { 5790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) popup_ = popup_model; 5890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 5990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 6090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // TODO(beaudoin): The edit and popup model should be siblings owned by the 6190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // LocationBarView, making this accessor unnecessary. 6290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) OmniboxPopupModel* popup_model() const { return popup_; } 6390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const AutocompleteMatch& current_match() const { return current_match_; } 657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 6690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Turns off keyword mode for the current match. 6790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void ClearPopupKeywordMode() const; 6890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 6990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const AutocompleteResult& result() const { 7090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return autocomplete_controller_->result(); 7190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 7290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 7390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // TODO(beaudoin): Make private once OmniboxEditModel no longer refers to it. 7490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void DoPreconnect(const AutocompleteMatch& match); 7590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Weak, it owns us. 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // TODO(beaudoin): Consider defining a delegate to ease unit testing. 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OmniboxEditModel* omnibox_edit_model_; 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 8190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) Profile* profile_; 8290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 8390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) OmniboxPopupModel* popup_; 8490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<AutocompleteController> autocomplete_controller_; 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // TODO(beaudoin): This AutocompleteMatch is used to let the OmniboxEditModel 887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // know what it should display. Not every field is required for that purpose, 897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // but the ones specifically needed are unclear. We should therefore spend 907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // some time to extract these fields and use a tighter structure here. 917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) AutocompleteMatch current_match_; 927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(OmniboxController); 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif // CHROME_BROWSER_UI_OMNIBOX_OMNIBOX_CONTROLLER_H_ 97