172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// found in the LICENSE file. 472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 5ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#ifndef CHROME_BROWSER_PRERENDER_PRERENDER_OBSERVER_H_ 6ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#define CHROME_BROWSER_PRERENDER_PRERENDER_OBSERVER_H_ 772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#pragma once 872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include <list> 1072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include <vector> 1172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h" 1372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "base/time.h" 14dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/tab_contents/tab_contents_observer.h" 1572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "googleurl/src/gurl.h" 1672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 1772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass PrerenderContents; 1872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass Profile; 1972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass TabContents; 2072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 21dc0f95d653279beabeb9817299e2902918ba123eKristian Monsennamespace prerender { 22dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass PrerenderManager; 24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// PrerenderObserver is responsible for recording perceived pageload times 2672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// to compare PLT's with prerendering enabled and disabled. 27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass PrerenderObserver : public TabContentsObserver { 2872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen public: 29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen explicit PrerenderObserver(TabContents* tab_contents); 30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual ~PrerenderObserver(); 3172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 3272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // TabContentsObserver implementation. 33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void ProvisionalChangeToMainFrameUrl(const GURL& url); 3472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual bool OnMessageReceived(const IPC::Message& message); 3572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 3672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Message handler. 3772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void OnDidStartProvisionalLoadForFrame(int64 frame_id, 3872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen bool main_frame, 3972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const GURL& url); 4072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 4172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void DidStopLoading(); 4272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 4372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen private: 44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Retrieves the PrerenderManager, or NULL, if none was found. 45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen PrerenderManager* MaybeGetPrerenderManager(); 46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 47ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Checks with the PrerenderManager if the specified URL has been preloaded, 48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // and if so, swap the RenderViewHost with the preload into this TabContents 49ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // object. 50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool MaybeUsePreloadedPage(const GURL& url); 51ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 5272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // System time at which the current load was started for the purpose of 5372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // the perceived page load time (PPLT). 5472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::TimeTicks pplt_load_start_; 5572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 56ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DISALLOW_COPY_AND_ASSIGN(PrerenderObserver); 5772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}; 5872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 59dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} // prerender 60dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 61ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#endif // CHROME_BROWSER_PRERENDER_PRERENDER_OBSERVER_H_ 62