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

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..4945ddb181140d5dc236faf83eaf48398fc840f7 100644
--- a/chrome/browser/instant/instant_loader.h
+++ b/chrome/browser/instant/instant_loader.h
@@ -5,150 +5,112 @@
#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 "chrome/browser/ui/tab_contents/core_tab_helper_delegate.h"
#include "content/public/browser/notification_observer.h"
#include "content/public/browser/notification_registrar.h"
+#include "content/public/browser/web_contents_delegate.h"
-struct InstantAutocompleteResult;
-class InstantController;
-struct ThemeBackgroundInfo;
-
-namespace chrome {
-namespace search {
-struct Mode;
-}
-}
-
-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 {
- public:
- // Returns the Instant loader for |contents| if it's used for Instant.
- static InstantLoader* FromWebContents(const content::WebContents* contents);
+class GURL;
+class Profile;
- // Doesn't take ownership of |controller|.
- InstantLoader(InstantController* controller, const std::string& instant_url);
+// 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 content::WebContentsDelegate,
+ public CoreTabHelperDelegate {
+ public:
+ // 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.
dhollowa 2013/01/29 02:37:53 The phrase "...is released and returned." is a bit
samarth 2013/01/29 05:42:01 Done.
+ virtual scoped_ptr<content::WebContents> ReplaceAndReleaseContents(
+ scoped_ptr<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 OnMouseDown() = 0;
+
+ // Called when the mouse pointer is released (or a drag event ends).
+ virtual void OnMouseUp() = 0;
+
+ protected:
+ ~Delegate();
+ };
+
+ // Does not take ownership of |delegate|.
dhollowa 2013/01/29 02:37:53 It is rare for a class to own its delegate. So th
samarth 2013/01/29 05:42:01 Oh yeah, meant to remove all of these after switch
+ 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.
+ // Any existing contents held will be deleted. |on_stale_callback| will be
+ // called after the designated amount of time has elapsed.
+ void Load(const GURL& instant_url,
+ Profile* profile,
+ const content::WebContents* active_contents,
+ const base::Closure& on_stale_callback);
+
+ // 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);
-
- // Releases the preview WebContents passing ownership to the caller. This
- // should be called when the preview is committed.
- 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);
+ // Replaces the contents held with |contents|. Any existing contents is
+ // deleted. The expiration timer is not restarted.
+ void SetContents(scoped_ptr<content::WebContents> contents);
- 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;
+ // Releases the contents currently held. Must only be called if contents() is
+ // not NULL.
+ scoped_ptr<content::WebContents> ReleaseContents() WARN_UNUSED_RESULT;
+ private:
// 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_;
+ // Overridden from CoreTabHelperDelegate:
+ virtual void SwapTabContents(content::WebContents* old_contents,
+ content::WebContents* new_contents) OVERRIDE;
+
+ // Overridden from content::WebContentsDelegate:
+ virtual bool ShouldSuppressDialogs() OVERRIDE;
+ virtual bool ShouldFocusPageAfterCrash() OVERRIDE;
+ virtual void LostCapture() OVERRIDE;
+ virtual void WebContentsFocused(content::WebContents* contents) OVERRIDE;
+ virtual bool CanDownload(content::RenderViewHost* render_view_host,
+ int request_id,
+ const std::string& request_method) OVERRIDE;
+ virtual void HandleMouseDown() OVERRIDE;
+ virtual void HandleMouseUp() OVERRIDE;
+ virtual void HandlePointerActivate() OVERRIDE;
+ virtual void HandleGestureEnd() OVERRIDE;
+ virtual void DragEnded() OVERRIDE;
+ virtual bool OnGoToEntryOffset(int offset) OVERRIDE;
+ virtual content::WebContents* OpenURLFromTab(
+ content::WebContents* source,
+ const content::OpenURLParams& params) OVERRIDE;
+
+ Delegate* const delegate_;
scoped_ptr<content::WebContents> contents_;
- 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::Timer 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