prerender_contents.h revision eb525c5499e34cc9c4b825d6d9e75bb07cc06ace
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_PRERENDER_PRERENDER_CONTENTS_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_PRERENDER_PRERENDER_CONTENTS_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <utility> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_vector.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/weak_ptr.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/observer_list.h" 16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prerender/prerender_final_status.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prerender/prerender_origin.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_observer.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_registrar.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents_observer.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/referrer.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/size.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Profile; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ProcessMetrics; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct FaviconURL; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RenderViewHost; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SessionStorageNamespace; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebContents; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace history { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct HistoryAddPageArgs; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace prerender { 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PrerenderHandle; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PrerenderManager; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PrerenderRenderViewHostObserver; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PrerenderContents : public content::NotificationObserver, 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public content::WebContentsObserver { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // PrerenderContents::Create uses the currently registered Factory to create 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the PrerenderContents. Factory is intended for testing. 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class Factory { 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Factory() {} 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~Factory() {} 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ownership is not transfered through this interface as prerender_manager, 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // prerender_tracker, and profile are stored as weak pointers. 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual PrerenderContents* CreatePrerenderContents( 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrerenderManager* prerender_manager, 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::Referrer& referrer, 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Origin origin, 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint8 experiment_id) = 0; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(Factory); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class Observer { 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Signals that the prerender has started running. 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnPrerenderStart(PrerenderContents* contents) = 0; 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Signals that the prerender has had its load event. 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnPrerenderStopLoading(PrerenderContents* contents); 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Signals that the prerender has stopped running. 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnPrerenderStop(PrerenderContents* contents) = 0; 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Signals that this prerender has just become a MatchComplete replacement. 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnPrerenderCreatedMatchCompleteReplacement( 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrerenderContents* contents, PrerenderContents* replacement); 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Observer(); 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~Observer() = 0; 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // A container for extra data on pending prerenders. 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) struct PendingPrerenderInfo { 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PendingPrerenderInfo( 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::WeakPtr<PrerenderHandle> weak_prerender_handle, 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Origin origin, 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL& url, 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const content::Referrer& referrer, 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Size& size); 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ~PendingPrerenderInfo(); 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::WeakPtr<PrerenderHandle> weak_prerender_handle; 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Origin origin; 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL url; 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::Referrer referrer; 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Size size; 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Indicates how this PrerenderContents relates to MatchComplete. This is to 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // figure out which histograms to use to record the FinalStatus, Match (record 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // all prerenders and control group prerenders) or MatchComplete (record 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // running prerenders only in the way they would have been recorded in the 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // control group). 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum MatchCompleteStatus { 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A regular prerender which will be recorded both in Match and 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // MatchComplete. 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MATCH_COMPLETE_DEFAULT, 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A prerender that used to be a regular prerender, but has since been 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // replaced by a MatchComplete dummy. Therefore, we will record this only 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for Match, but not for MatchComplete. 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MATCH_COMPLETE_REPLACED, 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A prerender that is a MatchComplete dummy replacing a regular prerender. 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // In the control group, our prerender never would have been canceled, so 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // we record in MatchComplete but not Match. 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MATCH_COMPLETE_REPLACEMENT, 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A prerender that is a MatchComplete dummy, early in the process of being 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // created. This prerender should not fail. Record for MatchComplete, but 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // not Match. 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MATCH_COMPLETE_REPLACEMENT_PENDING, 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~PrerenderContents(); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // All observers of a PrerenderContents are removed after the OnPrerenderStop 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // event is sent, so there is no need to call RemoveObserver() in the normal 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // use case. 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void AddObserver(Observer* observer); 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void RemoveObserver(Observer* observer); 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // For MatchComplete correctness, create a dummy replacement prerender 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // contents to stand in for this prerender contents that (which we are about 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to destroy). 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrerenderContents* CreateMatchCompleteReplacement(); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool Init(); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static Factory* CreateFactory(); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Start rendering the contents in the prerendered state. If 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |is_control_group| is true, this will go through some of the mechanics of 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // starting a prerender, without actually creating the RenderView. 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |creator_child_id| is the id of the child process that caused the prerender 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to be created, and is needed so that the prerendered URLs can be sent to it 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // so render-initiated navigations will swap in the prerendered page. |size| 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // indicates the rectangular dimensions that the prerendered page should be. 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |session_storage_namespace| indicates the namespace that the prerendered 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // page should be part of. 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void StartPrerendering( 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int creator_child_id, 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Size& size, 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::SessionStorageNamespace* session_storage_namespace); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verifies that the prerendering is not using too many resources, and kills 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // it if not. 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DestroyWhenUsingTooManyResources(); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderViewHost* GetRenderViewHostMutable(); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::RenderViewHost* GetRenderViewHost() const; 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrerenderManager* prerender_manager() { return prerender_manager_; } 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 title() const { return title_; } 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 page_id() const { return page_id_; } 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL icon_url() const { return icon_url_; } 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& prerender_url() const { return prerender_url_; } 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::Referrer& referrer() const { return referrer_; } 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool has_stopped_loading() const { return has_stopped_loading_; } 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool has_finished_loading() const { return has_finished_loading_; } 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool prerendering_has_started() const { return prerendering_has_started_; } 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MatchCompleteStatus match_complete_status() const { 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return match_complete_status_; 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_match_complete_status(MatchCompleteStatus status) { 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) match_complete_status_ = status; 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets the parameter to the value of the associated RenderViewHost's child id 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and returns a boolean indicating the validity of that id. 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool GetChildId(int* child_id) const; 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets the parameter to the value of the associated RenderViewHost's route id 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and returns a boolean indicating the validity of that id. 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool GetRouteId(int* route_id) const; 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set the final status for how the PrerenderContents was used. This 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // should only be called once, and should be called before the prerender 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // contents are destroyed. 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetFinalStatus(FinalStatus final_status); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FinalStatus final_status() const { return final_status_; } 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Origin origin() const { return origin_; } 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint8 experiment_id() const { return experiment_id_; } 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeTicks load_start_time() const { return load_start_time_; } 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Indicates whether this prerendered page can be used for the provided 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |url| and |session_storage_namespace|. 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool Matches( 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::SessionStorageNamespace* session_storage_namespace) const; 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // content::WebContentsObserver implementation. 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DidStopLoading( 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderViewHost* render_view_host) OVERRIDE; 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DidStartProvisionalLoadForFrame( 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 frame_id, 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 parent_frame_id, 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_main_frame, 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& validated_url, 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_error_page, 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_iframe_srcdoc, 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderViewHost* render_view_host) OVERRIDE; 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DidFinishLoad( 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 frame_id, 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& validated_url, 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_main_frame, 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderViewHost* render_view_host) OVERRIDE; 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DidUpdateFaviconURL(int32 page_id, 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::vector<content::FaviconURL>& urls) OVERRIDE; 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void RenderViewGone(base::TerminationStatus status) OVERRIDE; 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // content::NotificationObserver 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Observe(int type, 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationSource& source, 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationDetails& details) OVERRIDE; 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Adds an alias URL, for one of the many redirections. If the URL can not 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // be prerendered - for example, it's an ftp URL - |this| will be destroyed 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and false is returned. Otherwise, true is returned and the alias is 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // remembered. 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool AddAliasURL(const GURL& url); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The prerender WebContents (may be NULL). 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WebContents* prerender_contents() const { 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return prerender_contents_.get(); 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WebContents* ReleasePrerenderContents(); 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets the final status, calls OnDestroy and adds |this| to the 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // PrerenderManager's pending deletes list. 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Destroy(FinalStatus reason); 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called by the history tab helper with the information that it woudl have 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // added to the history service had this web contents not been used for 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // prerendering. 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DidNavigate(const history::HistoryAddPageArgs& add_page_args); 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Applies all the URL history encountered during prerendering to the 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // new tab. 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void CommitHistory(content::WebContents* tab); 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Value* GetAsValue() const; 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns whether a pending cross-site navigation is happening. 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This could happen with renderer-issued navigations, such as a 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // MouseEvent being dispatched by a link to a website installed as an app. 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsCrossSiteNavigationPending() const; 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Adds a pending prerender to the list. If |weak_prerender_handle| still 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // exists when this page is made visible, it will be launched. 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AddPendingPrerender( 2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<PendingPrerenderInfo> pending_prerender_info); 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Reissues any pending prerender requests from the prerendered page. Also 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // clears the list of pending requests. Sends notifications. 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void PrepareForUse(); 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrerenderContents(PrerenderManager* prerender_manager, 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::Referrer& referrer, 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Origin origin, 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint8 experiment_id); 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // These call out to methods on our Observers, using our observer_list_. Note 2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // that NotifyPrerenderStop() also clears the observer list. 2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void NotifyPrerenderStart(); 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void NotifyPrerenderStopLoading(); 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void NotifyPrerenderStop(); 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void NotifyPrerenderCreatedMatchCompleteReplacement( 2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrerenderContents* replacement); 2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called whenever a RenderViewHost is created for prerendering. Only called 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // once the RenderViewHost has a RenderView and RenderWidgetHostView. 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnRenderViewHostCreated( 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderViewHost* new_render_view_host); 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationRegistrar& notification_registrar() { 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return notification_registrar_; 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t pending_prerender_count() const; 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool prerendering_has_been_cancelled() const { 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return prerendering_has_been_cancelled_; 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual content::WebContents* CreateWebContents( 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::SessionStorageNamespace* session_storage_namespace); 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool prerendering_has_started_; 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Time at which we started to load the URL. This is used to compute 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the time elapsed from initiating a prerender until the time the 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // (potentially only partially) prerendered page is shown to the user. 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeTicks load_start_time_; 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class WebContentsDelegateImpl; 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Needs to be able to call the constructor. 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class PrerenderContentsFactoryImpl; 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class PrerenderRenderViewHostObserver; 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the ProcessMetrics for the render process, if it exists. 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ProcessMetrics* MaybeGetProcessMetrics(); 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ObserverList<Observer> observer_list_; 3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The prerender manager owning this object. 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrerenderManager* prerender_manager_; 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The URL being prerendered. 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL prerender_url_; 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The referrer. 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::Referrer referrer_; 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The profile being used 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile_; 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Information about the title and URL of the page that this class as a 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // RenderViewHostDelegate has received from the RenderView. 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Used to apply to the new RenderViewHost delegate that might eventually 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // own the contained RenderViewHost when the prerendered page is shown 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // in a WebContents. 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 title_; 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 page_id_; 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url_; 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL icon_url_; 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationRegistrar notification_registrar_; 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A vector of URLs that this prerendered page matches against. 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This array can contain more than element as a result of redirects, 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // such as HTTP redirects or javascript redirects. 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<GURL> alias_urls_; 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The session storage namespace id for use in matching. We must save it 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // rather than get it from the RenderViewHost since in the control group 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // we won't have a RenderViewHost. 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 session_storage_namespace_id_; 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool has_stopped_loading_; 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // True when the main frame has finished loading. 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool has_finished_loading_; 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This must be the same value as the PrerenderTracker has recorded for 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |this|, when |this| has a RenderView. 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FinalStatus final_status_; 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The MatchComplete status of the prerender, indicating how it relates 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to being a MatchComplete dummy (see definition of MatchCompleteStatus 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // above). 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MatchCompleteStatus match_complete_status_; 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tracks whether or not prerendering has been cancelled by calling Destroy. 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Used solely to prevent double deletion. 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool prerendering_has_been_cancelled_; 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Process Metrics of the render process associated with the 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // RenderViewHost for this object. 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::ProcessMetrics> process_metrics_; 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The prerendered WebContents; may be null. 3932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<content::WebContents> prerender_contents_; 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<PrerenderRenderViewHostObserver> render_view_host_observer_; 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<WebContentsDelegateImpl> web_contents_delegate_; 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // These are -1 before a RenderView is created. 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int child_id_; 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int route_id_; 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Origin for this prerender. 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Origin origin_; 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Experiment during which this prerender is performed. 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint8 experiment_id_; 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Prerenders that the prerendered page has tried to prerender. They remain 4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // pending until this page is displayed. 4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedVector<PendingPrerenderInfo> pending_prerenders_; 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The process that created the child id. 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int creator_child_id_; 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The size of the WebView from the launching page. 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Size size_; 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef std::vector<history::HistoryAddPageArgs> AddPageVector; 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Caches pages to be added to the history. 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddPageVector add_page_vector_; 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(PrerenderContents); 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace prerender 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_PRERENDER_PRERENDER_CONTENTS_H_ 430