// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_PRERENDER_PRERENDER_TAB_HELPER_H_ #define CHROME_BROWSER_PRERENDER_PRERENDER_TAB_HELPER_H_ #include "base/memory/scoped_ptr.h" #include "base/time.h" #include "content/public/browser/web_contents_observer.h" #include "content/public/browser/web_contents_user_data.h" #include "googleurl/src/gurl.h" namespace prerender { class PrerenderManager; // PrerenderTabHelper is responsible for recording perceived pageload times // to compare PLT's with prerendering enabled and disabled. class PrerenderTabHelper : public content::WebContentsObserver, public content::WebContentsUserData { public: virtual ~PrerenderTabHelper(); // content::WebContentsObserver implementation. virtual void ProvisionalChangeToMainFrameUrl( const GURL& url, const GURL& opener_url, content::RenderViewHost* render_view_host) OVERRIDE; virtual void DidStopLoading( content::RenderViewHost* render_view_host) OVERRIDE; virtual void DidStartProvisionalLoadForFrame( int64 frame_id, int64 parent_frame_id, bool is_main_frame, const GURL& validated_url, bool is_error_page, content::RenderViewHost* render_view_host) OVERRIDE; virtual void DidCommitProvisionalLoadForFrame( int64 frame_id, bool is_main_frame, const GURL& validated_url, content::PageTransition transition_type, content::RenderViewHost* render_view_host) OVERRIDE; // Called when this prerendered TabContents has just been swapped in. void PrerenderSwappedIn(); private: explicit PrerenderTabHelper(content::WebContents* web_contents); friend class content::WebContentsUserData; // Helper class to compute pixel-based stats on the paint progress // between when a prerendered page is swapped in and when the onload event // fires. class PixelStats; scoped_ptr pixel_stats_; // Retrieves the PrerenderManager, or NULL, if none was found. PrerenderManager* MaybeGetPrerenderManager() const; // Returns whether the WebContents being observed is currently prerendering. bool IsPrerendering(); // Returns whether the WebContents being observed was prerendered. bool IsPrerendered(); // System time at which the current load was started for the purpose of // the perceived page load time (PPLT). base::TimeTicks pplt_load_start_; // System time at which the actual pageload started (pre-swapin), if // a applicable (in cases when a prerender that was still loading was // swapped in). base::TimeTicks actual_load_start_; // Current URL being loaded. GURL url_; DISALLOW_COPY_AND_ASSIGN(PrerenderTabHelper); }; } // namespace prerender #endif // CHROME_BROWSER_PRERENDER_PRERENDER_TAB_HELPER_H_