Don't show supervised user as "already on this device" while they're being imported.
[chromium-blink-merge.git] / chrome / browser / ui / omnibox / omnibox_controller.h
blob0fe6ac79b8e17b7a2fe175afe25165743530d770
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CHROME_BROWSER_UI_OMNIBOX_OMNIBOX_CONTROLLER_H_
6 #define CHROME_BROWSER_UI_OMNIBOX_OMNIBOX_CONTROLLER_H_
8 #include "base/basictypes.h"
9 #include "base/compiler_specific.h"
10 #include "base/memory/scoped_ptr.h"
11 #include "base/strings/string16.h"
12 #include "chrome/browser/autocomplete/autocomplete_controller.h"
13 #include "chrome/browser/autocomplete/autocomplete_controller_delegate.h"
14 #include "chrome/browser/bitmap_fetcher/bitmap_fetcher_service.h"
15 #include "components/omnibox/autocomplete_match.h"
17 class AUtocompleteInput;
18 struct AutocompleteMatch;
19 class AutocompleteResult;
20 class InstantController;
21 class OmniboxEditModel;
22 class OmniboxPopupModel;
23 class Profile;
25 namespace gfx {
26 class Rect;
29 // This class controls the various services that can modify the content
30 // for the omnibox, including AutocompleteController and InstantController. It
31 // is responsible of updating the omnibox content.
32 // TODO(beaudoin): Keep on expanding this class so that OmniboxEditModel no
33 // longer needs to hold any reference to AutocompleteController. Also make
34 // this the point of contact between InstantController and OmniboxEditModel.
35 // As the refactor progresses, keep the class comment up-to-date to
36 // precisely explain what this class is doing.
37 class OmniboxController : public AutocompleteControllerDelegate {
38 public:
39 OmniboxController(OmniboxEditModel* omnibox_edit_model,
40 Profile* profile);
41 ~OmniboxController() override;
43 // The |current_url| field of input is only set for mobile ports.
44 void StartAutocomplete(const AutocompleteInput& input) const;
46 // AutocompleteControllerDelegate:
47 void OnResultChanged(bool default_match_changed) override;
49 AutocompleteController* autocomplete_controller() {
50 return autocomplete_controller_.get();
53 // Set |current_match_| to an invalid value, indicating that we do not yet
54 // have a valid match for the current text in the omnibox.
55 void InvalidateCurrentMatch();
57 void set_popup_model(OmniboxPopupModel* popup_model) {
58 popup_ = popup_model;
61 // TODO(beaudoin): The edit and popup model should be siblings owned by the
62 // LocationBarView, making this accessor unnecessary.
63 OmniboxPopupModel* popup_model() const { return popup_; }
65 const AutocompleteMatch& current_match() const { return current_match_; }
67 // Turns off keyword mode for the current match.
68 void ClearPopupKeywordMode() const;
70 const AutocompleteResult& result() const {
71 return autocomplete_controller_->result();
74 // TODO(beaudoin): Make private once OmniboxEditModel no longer refers to it.
75 void DoPreconnect(const AutocompleteMatch& match);
77 // Stores the bitmap in the OmniboxPopupModel.
78 void SetAnswerBitmap(const SkBitmap& bitmap);
80 private:
81 // Weak, it owns us.
82 // TODO(beaudoin): Consider defining a delegate to ease unit testing.
83 OmniboxEditModel* omnibox_edit_model_;
85 Profile* profile_;
87 OmniboxPopupModel* popup_;
89 scoped_ptr<AutocompleteController> autocomplete_controller_;
91 // TODO(beaudoin): This AutocompleteMatch is used to let the OmniboxEditModel
92 // know what it should display. Not every field is required for that purpose,
93 // but the ones specifically needed are unclear. We should therefore spend
94 // some time to extract these fields and use a tighter structure here.
95 AutocompleteMatch current_match_;
97 BitmapFetcherService::RequestId request_id_;
99 base::WeakPtrFactory<OmniboxController> weak_ptr_factory_;
101 DISALLOW_COPY_AND_ASSIGN(OmniboxController);
104 #endif // CHROME_BROWSER_UI_OMNIBOX_OMNIBOX_CONTROLLER_H_