1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Use of this source code is governed by a BSD-style license that can be
3bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// found in the LICENSE file.
4bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
5731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#ifndef CHROME_BROWSER_INSTANT_INSTANT_LOADER_H_
6731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#define CHROME_BROWSER_INSTANT_INSTANT_LOADER_H_
7bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#pragma once
8bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
9bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/basictypes.h"
10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h"
11bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/string16.h"
12bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/timer.h"
13731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/browser/instant/instant_commit_type.h"
14bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/search_engines/template_url_id.h"
15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/common/instant_types.h"
16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_observer.h"
17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_registrar.h"
18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/page_transition_types.h"
19bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "googleurl/src/gurl.h"
2072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/gfx/rect.h"
21bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
22731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickclass InstantLoaderDelegate;
23731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickclass InstantLoaderManagerTest;
24bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass TabContents;
25201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochclass TabContentsWrapper;
26731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickclass TemplateURL;
27bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
28731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// InstantLoader does the loading of a particular URL for InstantController.
29731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// InstantLoader notifies its delegate, which is typically InstantController, of
30731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// all interesting events.
31bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen//
32731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// InstantLoader is created with a TemplateURLID. If non-zero InstantLoader
33731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// first determines if the site actually supports instant. If it doesn't, the
34731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// delegate is notified by way of |InstantLoaderDoesntSupportInstant|.
35731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick//
36731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// If the TemplateURLID supplied to the constructor is zero, then the url is
37731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// loaded as is.
384a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass InstantLoader : public NotificationObserver {
39bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public:
40731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  InstantLoader(InstantLoaderDelegate* delegate, TemplateURLID id);
414a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual ~InstantLoader();
42bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
43731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Invoked to load a URL. |tab_contents| is the TabContents the preview is
44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // going to be shown on top of and potentially replace. Returns true if the
45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // arguments differ from the last call to |Update|.
46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  bool Update(TabContentsWrapper* tab_contents,
47731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick              const TemplateURL* template_url,
48731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick              const GURL& url,
49731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick              PageTransition::Type transition_type,
50bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen              const string16& user_text,
51201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch              bool verbatim,
52bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen              string16* suggested_text);
53bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
54bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Sets the bounds of the omnibox (in screen coordinates). The bounds are
55bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // remembered until the preview is committed or destroyed. This is only used
56bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // when showing results for a search provider that supports instant.
57bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  void SetOmniboxBounds(const gfx::Rect& bounds);
58bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
59bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Returns true if the mouse is down as the result of activating the preview
60bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // content.
61bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  bool IsMouseDownFromActivate();
62bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
63bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Releases the preview TabContents passing ownership to the caller. This is
64bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // intended to be called when the preview TabContents is committed. This does
65bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // not notify the delegate.
66201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  TabContentsWrapper* ReleasePreviewContents(InstantCommitType type);
67bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
68731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Calls through to method of same name on delegate.
69731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  bool ShouldCommitInstantOnMouseUp();
70731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  void CommitInstantLoader();
71731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
72dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // NotificationObserver:
734a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual void Observe(NotificationType type,
744a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                       const NotificationSource& source,
75dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                       const NotificationDetails& details) OVERRIDE;
764a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
77bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // The preview TabContents; may be null.
78201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  TabContentsWrapper* preview_contents() const {
79201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    return preview_contents_.get();
80201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  }
81bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
82731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Returns true if the preview TabContents is ready to be shown.
83731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  bool ready() const { return ready_; }
84bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
85ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Returns true if the current load returned a 200.
86ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  bool http_status_ok() const { return http_status_ok_; }
87ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
88ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Returns true if the url needs to be reloaded. This is set to true for
89ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // downloads.
90ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  bool needs_reload() const { return needs_reload_; }
91ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
92bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  const GURL& url() const { return url_; }
93bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
94201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  bool verbatim() const { return verbatim_; }
95201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
96bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Are we showing instant results?
97bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  bool is_showing_instant() const { return template_url_id_ != 0; }
98bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
99731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // If we're showing instant this returns non-zero.
100731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  TemplateURLID template_url_id() const { return template_url_id_; }
101731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
102731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // See description above field.
103731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  const string16& user_text() const { return user_text_; }
104731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
105bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen private:
106731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  friend class InstantLoaderManagerTest;
10772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  friend class InstantTest;
108bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  class FrameLoadObserver;
109bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  class PaintObserverImpl;
110bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  class TabContentsDelegateImpl;
111bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
112bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Invoked when the page wants to update the suggested text. If |user_text_|
113bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // starts with |suggested_text|, then the delegate is notified of the change,
114bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // which results in updating the omnibox.
115ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  void SetCompleteSuggestedText(const string16& suggested_text,
116ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                                InstantCompleteBehavior behavior);
117bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
118731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Invoked when the page paints.
119731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  void PreviewPainted();
120731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
121ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Invoked when the http status code changes. This may notify the delegate.
122ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  void SetHTTPStatusOK(bool is_ok);
123ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
124bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Invoked to show the preview. This is invoked in two possible cases: when
125bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // the renderer paints, or when an auth dialog is shown. This notifies the
126bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // delegate the preview is ready to be shown.
127bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  void ShowPreview();
128bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
129bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Invoked once the page has finished loading and the script has been sent.
130bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  void PageFinishedLoading();
131bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
132bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Returns the bounds of the omnibox in terms of the preview tab contents.
133bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  gfx::Rect GetOmniboxBoundsInTermsOfPreview();
134bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
135bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Are we waiting for the preview page to finish loading?
136bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  bool is_waiting_for_load() const {
137bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    return frame_load_observer_.get() != NULL;
138bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  }
139bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
140731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Invoked if it the page doesn't really support instant when we thought it
141731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // did. If |needs_reload| is true, the text changed since the first load and
142731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // the page needs to be reloaded.
143731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  void PageDoesntSupportInstant(bool needs_reload);
144731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
145201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // Invokes |SetBoundsToPage(false)|. This is called from the timer.
146731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  void ProcessBoundsChange();
147bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
148201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // Notifes the page of the omnibox bounds. If |force_if_loading| is true the
149201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // bounds are sent down even if we're waiting on the load, otherwise if we're
150201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // waiting on the load and |force_if_loading| is false this does nothing.
151201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  void SendBoundsToPage(bool force_if_loading);
152201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
153201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // Creates and sets the preview TabContentsWrapper.
154201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  void CreatePreviewContents(TabContentsWrapper* tab_contents);
155201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
156731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  InstantLoaderDelegate* delegate_;
157731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
158731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // If we're showing instant results this is the ID of the TemplateURL driving
159731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // the results. A value of 0 means there is no TemplateURL.
160201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  const TemplateURLID template_url_id_;
161bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
162bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // The url we're displaying.
163bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  GURL url_;
164bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
165bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Delegate of the preview TabContents. Used to detect when the user does some
166bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // gesture on the TabContents and the preview needs to be activated.
167bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  scoped_ptr<TabContentsDelegateImpl> preview_tab_contents_delegate_;
168bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
169bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // The preview TabContents; may be null.
170201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  scoped_ptr<TabContentsWrapper> preview_contents_;
171bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
172731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Is the preview_contents ready to be shown?
173731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  bool ready_;
174bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
175ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Was the last status code a 200?
176ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  bool http_status_ok_;
177ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
178201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // The text the user typed in the omnibox, stripped of the leading ?, if any.
179bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  string16 user_text_;
180bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
181bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // The latest suggestion from the page.
182bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  string16 complete_suggested_text_;
183bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
184201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // The latest suggestion (suggested text less the user text).
185201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  string16 last_suggestion_;
186201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
187bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // See description above setter.
188bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  gfx::Rect omnibox_bounds_;
189bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
190731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Last bounds passed to the page.
191731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  gfx::Rect last_omnibox_bounds_;
192bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
193731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  scoped_ptr<FrameLoadObserver> frame_load_observer_;
194bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
195731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Transition type of the match last passed to Update.
196bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  PageTransition::Type last_transition_type_;
197bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
198731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Timer used to update the bounds of the omnibox.
199731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  base::OneShotTimer<InstantLoader> update_bounds_timer_;
200731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
2014a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Used to get notifications about renderers coming and going.
2024a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  NotificationRegistrar registrar_;
2034a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
204201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // Last value of verbatim passed to |Update|.
205201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  bool verbatim_;
206201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
207ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // True if the page needs to be reloaded.
208ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  bool needs_reload_;
209ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
210731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  DISALLOW_COPY_AND_ASSIGN(InstantLoader);
211bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen};
212bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
213731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#endif  // CHROME_BROWSER_INSTANT_INSTANT_LOADER_H_
214