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

Side by Side Diff: chrome/browser/instant/instant_controller.h

Issue 12386019: Instant: Use only one hidden WebContents per profile. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 7 years, 9 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef CHROME_BROWSER_INSTANT_INSTANT_CONTROLLER_H_ 5 #ifndef CHROME_BROWSER_INSTANT_INSTANT_CONTROLLER_H_
6 #define CHROME_BROWSER_INSTANT_INSTANT_CONTROLLER_H_ 6 #define CHROME_BROWSER_INSTANT_INSTANT_CONTROLLER_H_
7 7
8 #include <list>
9 #include <map>
10 #include <string>
11 #include <utility>
12 #include <vector> 8 #include <vector>
13 9
14 #include "base/basictypes.h" 10 #include "base/basictypes.h"
15 #include "base/gtest_prod_util.h"
16 #include "base/memory/scoped_ptr.h" 11 #include "base/memory/scoped_ptr.h"
17 #include "base/string16.h" 12 #include "base/string16.h"
18 #include "base/time.h"
19 #include "base/timer.h"
20 #include "chrome/browser/history/history_types.h"
21 #include "chrome/browser/instant/instant_commit_type.h" 13 #include "chrome/browser/instant/instant_commit_type.h"
22 #include "chrome/browser/instant/instant_overlay_model.h"
23 #include "chrome/browser/instant/instant_page.h" 14 #include "chrome/browser/instant/instant_page.h"
24 #include "chrome/browser/ui/omnibox/omnibox_edit_model.h" 15 #include "chrome/common/omnibox_types.h"
25 #include "chrome/common/instant_types.h"
26 #include "chrome/common/search_types.h"
27 #include "content/public/browser/notification_observer.h"
28 #include "content/public/browser/notification_registrar.h"
29 #include "content/public/common/page_transition_types.h"
30 #include "googleurl/src/gurl.h"
31 #include "ui/base/window_open_disposition.h"
32 #include "ui/gfx/native_widget_types.h" 16 #include "ui/gfx/native_widget_types.h"
33 #include "ui/gfx/rect.h"
34 17
35 struct AutocompleteMatch; 18 struct AutocompleteMatch;
36 class AutocompleteProvider; 19 class AutocompleteProvider;
37 class InstantNTP; 20 class InstantOverlayModel;
38 class InstantOverlay; 21 class InstantOverlayModelObserver;
39 class InstantTab; 22 class Profile;
40 class TemplateURL;
41 23
42 namespace chrome { 24 namespace chrome {
43 class BrowserInstantController; 25 class BrowserInstantController;
44 } 26 }
45 27
28 namespace chrome {
29 namespace search {
30 struct Mode;
31 }
32 }
33
46 namespace content { 34 namespace content {
47 class WebContents; 35 class WebContents;
48 } 36 }
49 37
50 // Macro used for logging debug events. |message| should be a std::string. 38 namespace gfx {
51 #define LOG_INSTANT_DEBUG_EVENT(controller, message) \ 39 class Rect;
52 controller->LogDebugEvent(message) 40 }
53 41
54 // InstantController drives Chrome Instant, i.e., the browser implementation of 42 // InstantController drives Chrome Instant, i.e., the browser implementation of
55 // the Embedded Search API (see http://dev.chromium.org/embeddedsearch). 43 // the Embedded Search API (see http://dev.chromium.org/embeddedsearch).
56 // 44 //
57 // In extended mode, InstantController maintains and coordinates three 45 // There are two concrete modes of operation: Regular (InstantControllerImpl)
58 // instances of InstantPage: 46 // and Extended (InstantControllerExtendedImpl).
59 // (1) An InstantOverlay instance that is used to show search suggestions and
60 // results in an overlay over a non-search page.
61 // (2) An InstantNTP instance which is a preloaded search page that will be
62 // swapped-in the next time the user navigates to the New Tab Page. It is
63 // never shown to the user in an uncommitted state.
64 // (3) An InstantTab instance which points to the currently active tab, if it
65 // supports the Embedded Search API.
66 // 47 //
67 // All three are backed by a WebContents. InstantOverlay and InstantNTP own 48 // In both modes, InstantController can show an overlay WebContents as the user
68 // their corresponding WebContents; InstantTab does not. In non-extended mode, 49 // types in the omnibox. In extended mode, InstantController can also use the
69 // only an InstantOverlay instance is kept. 50 // current active tab to drive the display of search suggestions and results.
70 // 51 //
71 // InstantController is owned by Browser via BrowserInstantController. 52 // InstantController is owned by Browser via BrowserInstantController.
72 class InstantController : public InstantPage::Delegate, 53 class InstantController : public InstantPage::Delegate {
73 public content::NotificationObserver {
74 public: 54 public:
75 InstantController(chrome::BrowserInstantController* browser, 55 // Creates and returns a new InstantController object.
76 bool extended_enabled); 56 static scoped_ptr<InstantController> Create(
57 chrome::BrowserInstantController* browser,
58 Profile* profile);
59
60 InstantController();
Jered 2013/03/26 16:36:42 Make this protected.
77 virtual ~InstantController(); 61 virtual ~InstantController();
78 62
79 // Invoked as the user types into the omnibox. |user_text| is what the user 63 // --------------------------------------------------------------------------
80 // has typed. |full_text| is what the omnibox is showing. These may differ if 64 // The OmniboxEditModel delivers the following events as the user interacts
81 // the user typed only some text, and the rest was inline autocompleted. If 65 // with the omnibox.
82 // |verbatim| is true, search results are shown for the exact omnibox text,
83 // rather than the best guess as to what the user means. Returns true if the
84 // update is accepted (i.e., if |match| is a search rather than a URL).
85 // |is_keyword_search| is true if keyword searching is in effect.
86 bool Update(const AutocompleteMatch& match,
87 const string16& user_text,
88 const string16& full_text,
89 size_t selection_start,
90 size_t selection_end,
91 bool verbatim,
92 bool user_input_in_progress,
93 bool omnibox_popup_is_open,
94 bool escape_pressed,
95 bool is_keyword_search);
96 66
97 // Releases and returns the NTP WebContents. May be NULL. Loads a new 67 // Called in most cases where the omnibox text has changed.
98 // WebContents for the NTP. 68 virtual bool Update(const AutocompleteMatch& match,
99 scoped_ptr<content::WebContents> ReleaseNTPContents() WARN_UNUSED_RESULT; 69 const string16& user_text,
70 const string16& full_text,
71 size_t selection_start,
72 size_t selection_end,
73 bool verbatim,
74 bool user_input_in_progress,
75 bool omnibox_popup_is_open,
76 bool escape_pressed,
77 bool is_keyword_search) = 0;
100 78
101 // Sets the bounds of the omnibox popup, in screen coordinates. 79 // Called when the autocomplete system has new results for the current text.
102 void SetPopupBounds(const gfx::Rect& bounds); 80 virtual void HandleAutocompleteResults(
81 const std::vector<AutocompleteProvider*>& providers) = 0;
103 82
104 // Sets the stored start-edge margin and width of the omnibox. 83 // Called when the user wants to traverse the suggestions list. |count| is
105 void SetOmniboxBounds(const gfx::Rect& bounds); 84 // positive to indicate moving down, negative for moving up.
85 virtual bool OnUpOrDownKeyPressed(int count) = 0;
106 86
107 // Send autocomplete results from |providers| to the overlay page. 87 // Called when the user hits Escape after traversing the suggestions list.
108 void HandleAutocompleteResults( 88 virtual void OnCancel(const AutocompleteMatch& match,
109 const std::vector<AutocompleteProvider*>& providers); 89 const string16& full_text) = 0;
110 90
111 // Called when the user presses up or down. |count| is a repeat count, 91 // --------------------------------------------------------------------------
112 // negative for moving up, positive for moving down. Returns true if Instant 92 // Methods dealing with the overlay, its model and the NTP.
113 // handled the key press.
114 bool OnUpOrDownKeyPressed(int count);
115 93
116 // Called when the user has arrowed into the suggestions but wants to cancel, 94 virtual bool IsOverlayingSearchResults() const = 0;
117 // typically by pressing ESC. The omnibox text is expected to have been
118 // reverted to |full_text| by the OmniboxEditModel prior to calling this.
119 // |match| is the match reverted to.
120 void OnCancel(const AutocompleteMatch& match,
121 const string16& full_text);
122 95
123 // The overlay WebContents. May be NULL. InstantController retains ownership. 96 virtual content::WebContents* GetOverlayContents() const = 0;
124 content::WebContents* GetOverlayContents() const;
125 97
126 // Returns true if Instant is showing a search results overlay. Returns false 98 virtual const InstantOverlayModel* model() const = 0;
Jered 2013/03/26 16:36:42 model() -> GetModel()
127 // if the overlay is not showing, or if it's showing only suggestions.
128 bool IsOverlayingSearchResults() const;
129 99
130 // If the overlay is showing search results, commits the overlay, calling 100 virtual void AddOverlayModelObserver(
131 // CommitInstant() on the browser, and returns true. Else, returns false. 101 InstantOverlayModelObserver* observer) = 0;
132 bool CommitIfPossible(InstantCommitType type);
133 102
134 // Called to indicate that the omnibox focus state changed with the given 103 virtual void RemoveOverlayModelObserver(
135 // |reason|. If |focus_state| is FOCUS_NONE, |view_gaining_focus| is set to 104 InstantOverlayModelObserver* observer) = 0;
136 // the view gaining focus.
137 void OmniboxFocusChanged(OmniboxFocusState focus_state,
138 OmniboxFocusChangeReason reason,
139 gfx::NativeView view_gaining_focus);
140 105
141 // The search mode in the active tab has changed. Pass the message down to 106 virtual bool CommitIfPossible(InstantCommitType type) = 0;
142 // the overlay which will notify the renderer. Create |instant_tab_| if the
143 // |new_mode| reflects an Instant search results page.
144 void SearchModeChanged(const chrome::search::Mode& old_mode,
145 const chrome::search::Mode& new_mode);
146 107
147 // The user switched tabs. Hide the overlay. Create |instant_tab_| if the 108 virtual scoped_ptr<content::WebContents> ReleaseNTPContents() = 0;
148 // newly active tab is an Instant search results page.
149 void ActiveTabChanged();
150 109
151 // The user is about to switch tabs. Commit the overlay if needed. 110 // --------------------------------------------------------------------------
152 void TabDeactivated(content::WebContents* contents); 111 // Information about the omnibox.
153 112
154 // Sets whether Instant should show result overlays. |use_local_overlay_only| 113 virtual void SetPopupBounds(const gfx::Rect& bounds) = 0;
155 // will force the use of kLocalOmniboxPopupURL as the Instant URL and is only
156 // applicable if |extended_enabled_| is true.
157 void SetInstantEnabled(bool instant_enabled, bool use_local_overlay_only);
158 114
159 // The theme has changed. Pass the message to the overlay page. 115 virtual void SetOmniboxBounds(const gfx::Rect& bounds) = 0;
160 void ThemeChanged(const ThemeBackgroundInfo& theme_info);
161 116
162 // Called when someone else swapped in a different contents in the |overlay_|. 117 // --------------------------------------------------------------------------
163 void SwappedOverlayContents(); 118 // Events sent as the user stops (or starts) interacting with the omnibox.
164 119
165 // Called when contents for |overlay_| received focus. 120 virtual void OmniboxFocusChanged(OmniboxFocusState state,
166 void FocusedOverlayContents(); 121 OmniboxFocusChangeReason reason,
122 gfx::NativeView view_gaining_focus) = 0;
167 123
168 // Called when the |overlay_| might be stale. If it's actually stale, and the 124 virtual void TabDeactivated(content::WebContents* contents) = 0;
169 // omnibox doesn't have focus, and the overlay isn't showing, the |overlay_|
170 // is deleted and recreated. Else the refresh is skipped.
171 void ReloadOverlayIfStale();
172 125
173 // Adds a new event to |debug_events_| and also DVLOG's it. Ensures that 126 virtual void SearchModeChanged(const chrome::search::Mode& old_mode,
174 // |debug_events_| doesn't get too large. 127 const chrome::search::Mode& new_mode) = 0;
175 void LogDebugEvent(const std::string& info) const;
176 128
177 // Resets list of debug events. 129 virtual void ActiveTabChanged() = 0;
178 void ClearDebugEvents();
179 130
180 // See comments for |debug_events_| below. 131 // --------------------------------------------------------------------------
181 const std::list<std::pair<int64, std::string> >& debug_events() { 132 // Calls from InstantOverlay. Not for general use.
182 return debug_events_;
183 }
184 133
185 // Returns the transition type of the last AutocompleteMatch passed to Update. 134 virtual void SwappedOverlayContents() = 0;
186 content::PageTransition last_transition_type() const {
187 return last_transition_type_;
188 }
189 135
190 // Non-const for Add/RemoveObserver only. Other model changes should only 136 virtual void FocusedOverlayContents() = 0;
191 // happen through the InstantController interface.
192 InstantOverlayModel* model() { return &model_; }
193 137
194 private: 138 private:
195 FRIEND_TEST_ALL_PREFIXES(InstantTest, OmniboxFocusLoadsInstant);
196 FRIEND_TEST_ALL_PREFIXES(InstantTest, SetWithTemplateURL);
197 FRIEND_TEST_ALL_PREFIXES(InstantTest, NonInstantSearchProvider);
198 FRIEND_TEST_ALL_PREFIXES(InstantTest, InstantOverlayRefresh);
199 FRIEND_TEST_ALL_PREFIXES(InstantExtendedTest, ExtendedModeIsOn);
200 FRIEND_TEST_ALL_PREFIXES(InstantExtendedTest, MostVisited);
201 FRIEND_TEST_ALL_PREFIXES(InstantExtendedTest, OmniboxFocusLoadsInstant);
202 FRIEND_TEST_ALL_PREFIXES(InstantExtendedTest,
203 OmniboxTextUponFocusedCommittedSERP);
204 FRIEND_TEST_ALL_PREFIXES(InstantExtendedTest,
205 MiddleClickOnSuggestionOpensInNewTab);
206 FRIEND_TEST_ALL_PREFIXES(InstantExtendedTest, NTPIsPreloaded);
207 FRIEND_TEST_ALL_PREFIXES(InstantExtendedTest, PreloadedNTPIsUsedInNewTab);
208 FRIEND_TEST_ALL_PREFIXES(InstantExtendedTest, PreloadedNTPIsUsedInSameTab);
209 FRIEND_TEST_ALL_PREFIXES(InstantExtendedTest, ProcessIsolation);
210 FRIEND_TEST_ALL_PREFIXES(InstantExtendedTest, UnrelatedSiteInstance);
211 FRIEND_TEST_ALL_PREFIXES(InstantExtendedTest,
212 OmniboxCommitsWhenShownFullHeight);
213
214 // Overridden from content::NotificationObserver:
215 virtual void Observe(int type,
216 const content::NotificationSource& source,
217 const content::NotificationDetails& details) OVERRIDE;
218
219 // Overridden from InstantPage::Delegate:
220 // TODO(shishir): We assume that the WebContent's current RenderViewHost is
221 // the RenderViewHost being created which is not always true. Fix this.
222 virtual void InstantPageRenderViewCreated(
223 const content::WebContents* contents) OVERRIDE;
224 virtual void InstantSupportDetermined(
225 const content::WebContents* contents,
226 bool supports_instant) OVERRIDE;
227 virtual void InstantPageRenderViewGone(
228 const content::WebContents* contents) OVERRIDE;
229 virtual void InstantPageAboutToNavigateMainFrame(
230 const content::WebContents* contents,
231 const GURL& url) OVERRIDE;
232 virtual void SetSuggestions(
233 const content::WebContents* contents,
234 const std::vector<InstantSuggestion>& suggestions) OVERRIDE;
235 virtual void ShowInstantOverlay(
236 const content::WebContents* contents,
237 InstantShownReason reason,
238 int height,
239 InstantSizeUnits units) OVERRIDE;
240 virtual void FocusOmnibox(const content::WebContents* contents) OVERRIDE;
241 virtual void StartCapturingKeyStrokes(
242 const content::WebContents* contents) OVERRIDE;
243 virtual void StopCapturingKeyStrokes(content::WebContents* contents) OVERRIDE;
244 virtual void NavigateToURL(
245 const content::WebContents* contents,
246 const GURL& url,
247 content::PageTransition transition,
248 WindowOpenDisposition disposition) OVERRIDE;
249
250 // Invoked by the InstantLoader when the Instant page wants to delete a
251 // Most Visited item.
252 virtual void DeleteMostVisitedItem(const GURL& url) OVERRIDE;
253
254 // Invoked by the InstantLoader when the Instant page wants to undo a
255 // Most Visited deletion.
256 virtual void UndoMostVisitedDeletion(const GURL& url) OVERRIDE;
257
258 // Invoked by the InstantLoader when the Instant page wants to undo all
259 // Most Visited deletions.
260 virtual void UndoAllMostVisitedDeletions() OVERRIDE;
261
262 // Helper for OmniboxFocusChanged. Commit or discard the overlay.
263 void OmniboxLostFocus(gfx::NativeView view_gaining_focus);
264
265 // Creates a new NTP, using the instant_url property of the default
266 // TemplateURL.
267 void ResetNTP();
268
269 // Ensures that |overlay_| uses the Instant URL returned by GetInstantURL(),
270 // creating a new overlay if necessary. In extended mode, will fallback to
271 // using the kLocalOmniboxPopupURL as the Instant URL in case GetInstantURL()
272 // returns false. Returns true if an Instant URL could be determined.
273 // For |ignore_blacklist| look at comments in |GetInstantURL|.
274 bool EnsureOverlayIsCurrent(bool ignore_blacklist);
275
276 // Recreates the |overlay_| with |instant_url|. Note that |overlay_| is
277 // deleted in this call.
278 void CreateOverlay(const std::string& instant_url,
279 const content::WebContents* active_tab);
280
281 // If the |overlay_| being used is in fallback mode, it will be switched back
282 // to the remote overlay if the overlay is not showing and the omnibox does
283 // not have focus.
284 void MaybeSwitchToRemoteOverlay();
285
286 // If the active tab is an Instant search results page, sets |instant_tab_| to
287 // point to it. Else, deletes any existing |instant_tab_|.
288 void ResetInstantTab();
289
290 // Hide the overlay. Also sends an onchange event (with blank query) to the
291 // overlay, telling it to clear out results for any old queries.
292 void HideOverlay();
293
294 // Like HideOverlay(), but doesn't call OnStaleOverlay(). Use HideOverlay()
295 // unless you are going to call overlay_.reset() yourself subsequently.
296 void HideInternal();
297
298 // Counterpart to HideOverlay(). Asks the |browser_| to display the overlay
299 // with the given |height| in |units|.
300 void ShowOverlay(InstantShownReason reason,
301 int height,
302 InstantSizeUnits units);
303
304 // Send the omnibox popup bounds to the page.
305 void SendPopupBoundsToPage();
306
307 // Determines the Instant URL based on a number of factors:
308 // If |extended_enabled_|:
309 // - If |use_local_overlay_only_| is true return kLocalOmniboxPopupURL, else
310 // - If the Instant URL is specified by command line, returns it, else
311 // - If the default Instant URL is present returns it.
312 // If !|extended_enabled_|:
313 // - If the Instant URL is specified by command line, returns it, else
314 // - If the default Instant URL is present returns it.
315 //
316 // If |ignore_blacklist| is set to true, Instant URLs are not filtered through
317 // the blacklist.
318 //
319 // Returns true if a valid Instant URL could be found that is not blacklisted.
320 bool GetInstantURL(Profile* profile,
321 bool ignore_blacklist,
322 std::string* instant_url) const;
323
324 // Adds the URL for the page to the blacklist. Deletes the contents held and
325 // recreates a new page.
326 void BlacklistAndResetOverlay();
327 void BlacklistAndResetNTP();
328
329 // Removes |url| from the blacklist.
330 void RemoveFromBlacklist(const std::string& url);
331
332 InstantOverlay* overlay() const { return overlay_.get(); }
333 InstantTab* instant_tab() const { return instant_tab_.get(); }
334 InstantNTP* ntp() const { return ntp_.get(); }
335
336 // Begin listening to change notifications from TopSites and fire off an
337 // initial request for most visited items.
338 void StartListeningToMostVisitedChanges();
339
340 // Fire off an async request for most visited items to the TopNav code.
341 void RequestMostVisitedItems();
342
343 // Called when we get new most visited items from the TopNav code,
344 // registered as an async callback. Parses them and sends them to the
345 // renderer via SendMostVisitedItems.
346 void OnMostVisitedItemsReceived(const history::MostVisitedURLList& data);
347
348 // Sends a collection of MostVisitedItems to the renderer process via
349 // the appropriate InstantPage subclass.
350 void SendMostVisitedItems(const std::vector<MostVisitedItem>& items);
351
352 chrome::BrowserInstantController* const browser_;
353
354 // Whether the extended API and regular API are enabled. If both are false,
355 // Instant is effectively disabled.
356 const bool extended_enabled_;
357 bool instant_enabled_;
358
359 // If true, the Instant URL is set to kLocalOmniboxPopupURL.
360 bool use_local_overlay_only_;
361
362 // The state of the overlay page, i.e., the page owned by |overlay_|. Ignored
363 // if |instant_tab_| is in use.
364 InstantOverlayModel model_;
365
366 // The three instances of InstantPage maintained by InstantController as
367 // described above. All three may be non-NULL in extended mode. If
368 // |instant_tab_| is not NULL, then |overlay_| is guaranteed to be hidden and
369 // messages will be sent to |instant_tab_| instead.
370 //
371 // In non-extended mode, only |overlay_| is ever non-NULL.
372 scoped_ptr<InstantOverlay> overlay_;
373 scoped_ptr<InstantNTP> ntp_;
374 scoped_ptr<InstantTab> instant_tab_;
375
376 // The most recent full_text passed to Update(). If empty, we'll not accept
377 // search suggestions from |overlay_| or |instant_tab_|.
378 string16 last_omnibox_text_;
379
380 // True if the last Update() had an inline autocompletion. Used only to make
381 // sure that we don't accidentally suggest gray text suggestion in that case.
382 bool last_omnibox_text_has_inline_autocompletion_;
383
384 // The most recent verbatim passed to Update(). Used only to ensure that we
385 // don't accidentally suggest an inline autocompletion.
386 bool last_verbatim_;
387
388 // The most recent suggestion received from the page, minus any prefix that
389 // the user has typed.
390 InstantSuggestion last_suggestion_;
391
392 // See comments on the getter above.
393 content::PageTransition last_transition_type_;
394
395 // True if the last match passed to Update() was a search (versus a URL).
396 // Used to ensure that the overlay page is committable.
397 bool last_match_was_search_;
398
399 // Omnibox focus state.
400 OmniboxFocusState omnibox_focus_state_;
401
402 // The search model mode for the active tab.
403 chrome::search::Mode search_mode_;
404
405 // Current omnibox popup bounds.
406 gfx::Rect popup_bounds_;
407
408 // Last popup bounds passed to the page.
409 gfx::Rect last_popup_bounds_;
410
411 // The start-edge margin and width of the omnibox, used by the page to align
412 // its suggestions with the omnibox.
413 gfx::Rect omnibox_bounds_;
414
415 // Timer used to update the bounds of the omnibox popup.
416 base::OneShotTimer<InstantController> update_bounds_timer_;
417
418 // For each key K => value N, the map says that we found that the search
419 // engine identified by Instant URL K didn't support the Instant API, or
420 // caused RenderView crashes in each of the last N times that we loaded it.
421 // If an Instant URL isn't present in the map at all or has a value 0,
422 // it means that search engine supports the Instant API (or we assume it does,
423 // since we haven't determined it doesn't) and it did not cause a crash.
424 std::map<std::string, int> blacklisted_urls_;
425
426 // Search terms extraction (for autocomplete history matches) doesn't work
427 // on Instant URLs. So, whenever the user commits an Instant search, we add
428 // an equivalent non-Instant search URL to history, so that the search shows
429 // up in autocomplete history matches.
430 // TODO(sreeram): Remove when http://crbug.com/155373 is fixed.
431 GURL url_for_history_;
432
433 // The timestamp at which query editing began. This value is used when the
434 // overlay is showed and cleared when the overlay is hidden.
435 base::Time first_interaction_time_;
436
437 // Whether to allow the overlay to show search suggestions. In general, the
438 // overlay is allowed to show search suggestions whenever |search_mode_| is
439 // MODE_SEARCH_SUGGESTIONS, except in those cases where this is false.
440 bool allow_overlay_to_show_search_suggestions_;
441
442 // List of events and their timestamps, useful in debugging Instant behaviour.
443 mutable std::list<std::pair<int64, std::string> > debug_events_;
444
445 // Used for Top Sites async retrieval.
446 base::WeakPtrFactory<InstantController> weak_ptr_factory_;
447
448 // Used to get notifications about Most Visted changes.
449 content::NotificationRegistrar registrar_;
450
451 DISALLOW_COPY_AND_ASSIGN(InstantController); 139 DISALLOW_COPY_AND_ASSIGN(InstantController);
452 }; 140 };
453 141
454 #endif // CHROME_BROWSER_INSTANT_INSTANT_CONTROLLER_H_ 142 #endif // CHROME_BROWSER_INSTANT_INSTANT_CONTROLLER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698