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

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

Powered by Google App Engine
This is Rietveld 408576698