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

Unified Diff: chrome/browser/instant/instant_loader.h

Issue 11824050: InstantExtended: Committed NTP (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase. Created 7 years, 11 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/instant/instant_loader.h
diff --git a/chrome/browser/instant/instant_loader.h b/chrome/browser/instant/instant_loader.h
index 185d2ff53e9317c3b7838c66ac3adf826f2e5c61..5c83e7333db1457e272c4de567892e11318abe95 100644
--- a/chrome/browser/instant/instant_loader.h
+++ b/chrome/browser/instant/instant_loader.h
@@ -5,150 +5,97 @@
#ifndef CHROME_BROWSER_INSTANT_INSTANT_LOADER_H_
#define CHROME_BROWSER_INSTANT_INSTANT_LOADER_H_
-#include <string>
-#include <vector>
-
#include "base/basictypes.h"
#include "base/compiler_specific.h"
#include "base/memory/scoped_ptr.h"
-#include "base/string16.h"
-#include "chrome/browser/history/history_types.h"
-#include "chrome/browser/instant/instant_client.h"
+#include "base/timer.h"
#include "content/public/browser/notification_observer.h"
#include "content/public/browser/notification_registrar.h"
-struct InstantAutocompleteResult;
-class InstantController;
-struct ThemeBackgroundInfo;
-
-namespace chrome {
-namespace search {
-struct Mode;
-}
-}
+class GURL;
+class Profile;
namespace content {
class WebContents;
}
-namespace gfx {
-class Rect;
-}
-
-// InstantLoader is used to communicate with a preview WebContents that it owns
-// and loads the "Instant URL" into. This preview can appear and disappear at
-// will as the user types in the omnibox (compare: InstantTab, which talks to a
-// committed tab on the tab strip).
-class InstantLoader : public InstantClient::Delegate,
- public content::NotificationObserver {
+// InstantLoader is used to create and maintain a WebContents where we can
+// preload a page into. It is used by InstantOverlay and InstantNTP to
+// preloading an instant page.
+class InstantLoader : public content::NotificationObserver {
public:
- // Returns the Instant loader for |contents| if it's used for Instant.
- static InstantLoader* FromWebContents(const content::WebContents* contents);
-
- // Doesn't take ownership of |controller|.
- InstantLoader(InstantController* controller, const std::string& instant_url);
+ // InstantLoader calls these methods on its delegate in response to certain
+ // changes in the underlying contents.
+ class Delegate {
+ public:
+ // Called when someone else tries to swap a different contents for ours. The
+ // contents currently held is released and returned.
+ virtual content::WebContents* ReplaceAndReleaseContents(
dhollowa 2013/01/22 22:34:58 Return type should be scoped_ptr<content::WebConte
samarth 2013/01/25 21:08:40 Done.
+ content::WebContents* new_contents) = 0;
+
+ // Called when the underlying contents receive focus.
+ virtual void OnFocus() = 0;
+
+ // Called when a URL is about to be opened using the underlying contents
+ // (see WebContentsDelegate::OpenURLFromTab). If true is returned, we try to
+ // open the URL using whatever delegate is attached to the contents;
+ // otherwise, the URL is not opened.
+ virtual bool OnOpenURL() = 0;
+
+ // Called when the mouse pointer is down.
+ virtual void OnPointerDown() = 0;
dhollowa 2013/01/22 22:34:58 How about the terms "mouse down" / "mouse up"? Or
samarth 2013/01/25 21:08:40 Done.
+
+ // Called when the mouse pointer is released (or a drag event ends).
+ virtual void OnPointerRelease() = 0;
+
+ // Called when the specified amount of time has passed since the page was
+ // loaded.
+ virtual void OnStalePage() = 0;
+
+ protected:
+ ~Delegate();
+ };
+
+ // Does not take ownership of |delegate|.
+ explicit InstantLoader(Delegate* delegate);
virtual ~InstantLoader();
- // The preview WebContents. InstantLoader retains ownership. This will be
- // non-NULL after InitFromContents(), and until ReleaseContents() is called.
+ // Loads |instant_url| in a new WebContents in context of |profile|. Uses
+ // |active_contents|, if non-NULL, to intialize the size of the new contents.
+ // OnStalePage() will be called on the delegate after |expirationDurationMS|.
+ // Any existing contents held will be deleted.
+ void Load(const GURL& instant_url,
+ Profile* profile,
+ const content::WebContents* active_contents,
+ int expirationDurationMS);
+
+ // Returns the contents currently held. May be NULL.
content::WebContents* contents() const { return contents_.get(); }
- // Creates a new WebContents and loads |instant_url_| into it. |active_tab| is
- // the page the preview will be shown on top of and potentially replace.
- void InitContents(const content::WebContents* active_tab);
+ // Replaces the contents held with |contents|. Any existing contents is
+ // deleted. The expiration timer is not restarted.
+ void SetContents(content::WebContents* contents);
dhollowa 2013/01/22 22:34:58 arg: scoped_ptr<WebContents> contents
samarth 2013/01/25 21:08:40 Done.
- // Releases the preview WebContents passing ownership to the caller. This
- // should be called when the preview is committed.
+ // Releases the contents currently held. Must only be called if contents() is
+ // not NULL.
content::WebContents* ReleaseContents() WARN_UNUSED_RESULT;
- // Returns the URL that we're loading.
- const std::string& instant_url() const { return instant_url_; }
-
- // Returns true if the preview is known to support the Instant API. This
- // starts out false, and becomes true whenever we get any message from the
- // page. Once true, it never becomes false (the page isn't expected to drop
- // Instant API support suddenly).
- bool supports_instant() const { return supports_instant_; }
-
- // Returns true if the mouse or a touch pointer is down due to activating the
- // preview contents.
- bool is_pointer_down_from_activate() const {
- return is_pointer_down_from_activate_;
- }
-
- // Returns info about the last navigation by the Instant page. If the page
- // hasn't navigated since the last Update(), the URL is empty.
- const history::HistoryAddPageArgs& last_navigation() const {
- return last_navigation_;
- }
-
- // Called by the history tab helper with information that it would have added
- // to the history service had this WebContents not been used for Instant.
- void DidNavigate(const history::HistoryAddPageArgs& add_page_args);
-
- // Returns true if the loader is using
- // InstantController::kLocalOmniboxPopupURL as the |instant_url_|.
- bool IsUsingLocalPreview() const;
-
- // Calls through to methods of the same name on InstantClient.
- void Update(const string16& text,
- size_t selection_start,
- size_t selection_end,
- bool verbatim);
- void Submit(const string16& text);
- void Cancel(const string16& text);
- void SetPopupBounds(const gfx::Rect& bounds);
- void SetMarginSize(int start, int end);
- void SendAutocompleteResults(
- const std::vector<InstantAutocompleteResult>& results);
- void UpOrDownKeyPressed(int count);
- void SearchModeChanged(const chrome::search::Mode& mode);
- void SendThemeBackgroundInfo(const ThemeBackgroundInfo& theme_info);
- void SendThemeAreaHeight(int height);
- void SetDisplayInstantResults(bool display_instant_results);
- void KeyCaptureChanged(bool is_key_capture_enabled);
-
private:
class WebContentsDelegateImpl;
- // Overridden from InstantClient::Delegate:
- virtual void SetSuggestions(
- const std::vector<InstantSuggestion>& suggestions) OVERRIDE;
- virtual void InstantSupportDetermined(bool supports_instant) OVERRIDE;
- virtual void ShowInstantPreview(InstantShownReason reason,
- int height,
- InstantSizeUnits units) OVERRIDE;
- virtual void StartCapturingKeyStrokes() OVERRIDE;
- virtual void StopCapturingKeyStrokes() OVERRIDE;
- virtual void RenderViewGone() OVERRIDE;
- virtual void AboutToNavigateMainFrame(const GURL& url) OVERRIDE;
- virtual void NavigateToURL(const GURL& url,
- content::PageTransition transition) OVERRIDE;
-
// Overridden from content::NotificationObserver:
virtual void Observe(int type,
const content::NotificationSource& source,
const content::NotificationDetails& details) OVERRIDE;
- void SetupPreviewContents();
- void CleanupPreviewContents();
- void ReplacePreviewContents(content::WebContents* old_contents,
- content::WebContents* new_contents);
-
- InstantClient client_;
- InstantController* const controller_;
-
- // Delegate of the preview WebContents. Used when the user does some gesture
- // on the preview and it needs to be activated.
- scoped_ptr<WebContentsDelegateImpl> delegate_;
+ Delegate* const delegate_;
scoped_ptr<content::WebContents> contents_;
+ scoped_ptr<WebContentsDelegateImpl> contents_delegate_;
dhollowa 2013/01/22 22:34:58 Can this be a direct data member instead of a scop
samarth 2013/01/25 21:08:40 Got rid of this entirely and just folded it into I
- const std::string instant_url_;
- bool supports_instant_;
- bool is_pointer_down_from_activate_;
- history::HistoryAddPageArgs last_navigation_;
+ // Used to mark when the page is stale.
+ base::OneShotTimer<InstantLoader::Delegate> stale_page_timer_;
- // Used to get notifications about renderers coming and going.
+ // Used to get notifications about renderers.
content::NotificationRegistrar registrar_;
DISALLOW_COPY_AND_ASSIGN(InstantLoader);

Powered by Google App Engine
This is Rietveld 408576698