1// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CHROME_BROWSER_PRERENDER_PRERENDER_OBSERVER_H_ 6#define CHROME_BROWSER_PRERENDER_PRERENDER_OBSERVER_H_ 7#pragma once 8 9#include <list> 10#include <vector> 11 12#include "base/memory/scoped_ptr.h" 13#include "base/time.h" 14#include "content/browser/tab_contents/tab_contents_observer.h" 15#include "googleurl/src/gurl.h" 16 17class PrerenderContents; 18class Profile; 19class TabContents; 20 21namespace prerender { 22 23class PrerenderManager; 24 25// PrerenderObserver is responsible for recording perceived pageload times 26// to compare PLT's with prerendering enabled and disabled. 27class PrerenderObserver : public TabContentsObserver { 28 public: 29 explicit PrerenderObserver(TabContents* tab_contents); 30 virtual ~PrerenderObserver(); 31 32 // TabContentsObserver implementation. 33 virtual void ProvisionalChangeToMainFrameUrl(const GURL& url); 34 virtual bool OnMessageReceived(const IPC::Message& message); 35 36 // Message handler. 37 void OnDidStartProvisionalLoadForFrame(int64 frame_id, 38 bool main_frame, 39 const GURL& url); 40 41 virtual void DidStopLoading(); 42 43 private: 44 // Retrieves the PrerenderManager, or NULL, if none was found. 45 PrerenderManager* MaybeGetPrerenderManager(); 46 47 // Checks with the PrerenderManager if the specified URL has been preloaded, 48 // and if so, swap the RenderViewHost with the preload into this TabContents 49 // object. 50 bool MaybeUsePreloadedPage(const GURL& url); 51 52 // System time at which the current load was started for the purpose of 53 // the perceived page load time (PPLT). 54 base::TimeTicks pplt_load_start_; 55 56 DISALLOW_COPY_AND_ASSIGN(PrerenderObserver); 57}; 58 59} // prerender 60 61#endif // CHROME_BROWSER_PRERENDER_PRERENDER_OBSERVER_H_ 62