prerender_contents.h revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
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 { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RenderViewHost; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SessionStorageNamespace; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebContents; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace history { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct HistoryAddPageArgs; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace prerender { 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PrerenderHandle; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PrerenderManager; 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class PrerenderResourceThrottle; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PrerenderContents : public content::NotificationObserver, 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public content::WebContentsObserver { 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // PrerenderContents::Create uses the currently registered Factory to create 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the PrerenderContents. Factory is intended for testing. 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class Factory { 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Factory() {} 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~Factory() {} 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ownership is not transfered through this interface as prerender_manager, 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // prerender_tracker, and profile are stored as weak pointers. 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual PrerenderContents* CreatePrerenderContents( 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrerenderManager* prerender_manager, 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::Referrer& referrer, 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Origin origin, 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint8 experiment_id) = 0; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(Factory); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class Observer { 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Signals that the prerender has started running. 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnPrerenderStart(PrerenderContents* contents) = 0; 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Signals that the prerender has had its load event. 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnPrerenderStopLoading(PrerenderContents* contents); 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Signals that the prerender has had its 'DOMContentLoaded' event. 815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void OnPrerenderDomContentLoaded(PrerenderContents* contents); 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Signals that the prerender has stopped running. A PrerenderContents with 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // an unset final status will always call OnPrerenderStop before being 855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // destroyed. 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnPrerenderStop(PrerenderContents* contents) = 0; 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Signals that this prerender has just become a MatchComplete replacement. 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnPrerenderCreatedMatchCompleteReplacement( 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrerenderContents* contents, PrerenderContents* replacement); 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Observer(); 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~Observer() = 0; 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Indicates how this PrerenderContents relates to MatchComplete. This is to 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // figure out which histograms to use to record the FinalStatus, Match (record 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // all prerenders and control group prerenders) or MatchComplete (record 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // running prerenders only in the way they would have been recorded in the 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // control group). 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum MatchCompleteStatus { 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A regular prerender which will be recorded both in Match and 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // MatchComplete. 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MATCH_COMPLETE_DEFAULT, 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A prerender that used to be a regular prerender, but has since been 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // replaced by a MatchComplete dummy. Therefore, we will record this only 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for Match, but not for MatchComplete. 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MATCH_COMPLETE_REPLACED, 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A prerender that is a MatchComplete dummy replacing a regular prerender. 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // In the control group, our prerender never would have been canceled, so 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // we record in MatchComplete but not Match. 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MATCH_COMPLETE_REPLACEMENT, 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A prerender that is a MatchComplete dummy, early in the process of being 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // created. This prerender should not fail. Record for MatchComplete, but 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // not Match. 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MATCH_COMPLETE_REPLACEMENT_PENDING, 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~PrerenderContents(); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // All observers of a PrerenderContents are removed after the OnPrerenderStop 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // event is sent, so there is no need to call RemoveObserver() in the normal 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // use case. 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void AddObserver(Observer* observer); 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void RemoveObserver(Observer* observer); 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // For MatchComplete correctness, create a dummy replacement prerender 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // contents to stand in for this prerender contents that (which we are about 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to destroy). 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrerenderContents* CreateMatchCompleteReplacement(); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool Init(); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static Factory* CreateFactory(); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Returns a PrerenderContents from the given web_contents, if it's used for 1385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // prerendering. Otherwise returns NULL. Handles a NULL input for 1395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // convenience. 1405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) static PrerenderContents* FromWebContents(content::WebContents* web_contents); 1415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Start rendering the contents in the prerendered state. If 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |is_control_group| is true, this will go through some of the mechanics of 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // starting a prerender, without actually creating the RenderView. 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |creator_child_id| is the id of the child process that caused the prerender 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to be created, and is needed so that the prerendered URLs can be sent to it 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // so render-initiated navigations will swap in the prerendered page. |size| 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // indicates the rectangular dimensions that the prerendered page should be. 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |session_storage_namespace| indicates the namespace that the prerendered 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // page should be part of. 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void StartPrerendering( 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int creator_child_id, 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Size& size, 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::SessionStorageNamespace* session_storage_namespace); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verifies that the prerendering is not using too many resources, and kills 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // it if not. 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DestroyWhenUsingTooManyResources(); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderViewHost* GetRenderViewHostMutable(); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::RenderViewHost* GetRenderViewHost() const; 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrerenderManager* prerender_manager() { return prerender_manager_; } 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 165a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 title() const { return title_; } 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 page_id() const { return page_id_; } 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& prerender_url() const { return prerender_url_; } 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::Referrer& referrer() const { return referrer_; } 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool has_stopped_loading() const { return has_stopped_loading_; } 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool has_finished_loading() const { return has_finished_loading_; } 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool prerendering_has_started() const { return prerendering_has_started_; } 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MatchCompleteStatus match_complete_status() const { 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return match_complete_status_; 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_match_complete_status(MatchCompleteStatus status) { 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) match_complete_status_ = status; 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets the parameter to the value of the associated RenderViewHost's child id 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and returns a boolean indicating the validity of that id. 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool GetChildId(int* child_id) const; 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets the parameter to the value of the associated RenderViewHost's route id 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and returns a boolean indicating the validity of that id. 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool GetRouteId(int* route_id) const; 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FinalStatus final_status() const { return final_status_; } 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Origin origin() const { return origin_; } 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint8 experiment_id() const { return experiment_id_; } 1914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int child_id() const { return child_id_; } 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeTicks load_start_time() const { return load_start_time_; } 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Indicates whether this prerendered page can be used for the provided 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |url| and |session_storage_namespace|. 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool Matches( 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::SessionStorageNamespace* session_storage_namespace) const; 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // content::WebContentsObserver implementation. 202a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void RenderFrameCreated( 203a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) content::RenderFrameHost* render_frame_host) OVERRIDE; 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DidStopLoading( 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderViewHost* render_view_host) OVERRIDE; 2065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void DocumentLoadedInFrame( 2075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int64 frame_id, content::RenderViewHost* render_view_host) OVERRIDE; 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DidStartProvisionalLoadForFrame( 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 frame_id, 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 parent_frame_id, 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_main_frame, 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& validated_url, 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_error_page, 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_iframe_srcdoc, 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderViewHost* render_view_host) OVERRIDE; 2165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void DidCommitProvisionalLoadForFrame( 2175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int64 frame_id, 2185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::string16& frame_unique_name, 2195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool is_main_frame, 2205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const GURL& url, 2215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::PageTransition transition_type, 2225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::RenderViewHost* render_view_host) OVERRIDE; 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DidFinishLoad( 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 frame_id, 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& validated_url, 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_main_frame, 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderViewHost* render_view_host) OVERRIDE; 2280f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) virtual void DidNavigateMainFrame( 2290f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) const content::LoadCommittedDetails& details, 2300f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) const content::FrameNavigateParams& params) OVERRIDE; 2311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual void DidGetRedirectForResourceRequest( 2325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::RenderViewHost* render_view_host, 2331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const content::ResourceRedirectDetails& details) OVERRIDE; 2348bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void RenderProcessGone(base::TerminationStatus status) OVERRIDE; 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // content::NotificationObserver 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Observe(int type, 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationSource& source, 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationDetails& details) OVERRIDE; 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2430f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // Checks that a URL may be prerendered, for one of the many redirections. If 2440f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // the URL can not be prerendered - for example, it's an ftp URL - |this| will 2450f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // be destroyed and false is returned. Otherwise, true is returned. 2460f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) virtual bool CheckURL(const GURL& url); 2470f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 2480f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // Adds an alias URL. If the URL can not be prerendered, |this| will be 2490f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // destroyed and false is returned. 2500f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) bool AddAliasURL(const GURL& url); 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The prerender WebContents (may be NULL). 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WebContents* prerender_contents() const { 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return prerender_contents_.get(); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WebContents* ReleasePrerenderContents(); 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets the final status, calls OnDestroy and adds |this| to the 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // PrerenderManager's pending deletes list. 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Destroy(FinalStatus reason); 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called by the history tab helper with the information that it woudl have 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // added to the history service had this web contents not been used for 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // prerendering. 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DidNavigate(const history::HistoryAddPageArgs& add_page_args); 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Applies all the URL history encountered during prerendering to the 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // new tab. 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void CommitHistory(content::WebContents* tab); 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Value* GetAsValue() const; 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns whether a pending cross-site navigation is happening. 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This could happen with renderer-issued navigations, such as a 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // MouseEvent being dispatched by a link to a website installed as an app. 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsCrossSiteNavigationPending() const; 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Marks prerender as used and releases any throttled resource requests. 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void PrepareForUse(); 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) content::SessionStorageNamespace* GetSessionStorageNamespace() const; 2834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Cookie events 2855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) enum CookieEvent { 2865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) COOKIE_EVENT_SEND = 0, 2875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) COOKIE_EVENT_CHANGE = 1, 2885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) COOKIE_EVENT_MAX 2895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }; 2905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Record a cookie transaction for this prerender contents. 2925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // In the event of cookies being sent, |earliest_create_date| contains 2935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // the time that the earliest of the cookies sent was created. 2945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void RecordCookieEvent(CookieEvent event, 2955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool main_frame_http_request, 2965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Time earliest_create_date); 2975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) static const int kNumCookieStatuses; 2995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Called when a PrerenderResourceThrottle defers a request. If the prerender 3015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // is used it'll be resumed on the IO thread, otherwise they will get 3025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // cancelled automatically if prerendering is cancelled. 3035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void AddResourceThrottle( 3045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::WeakPtr<PrerenderResourceThrottle>& throttle); 3055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Increments the number of bytes fetched over the network for this prerender. 3075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void AddNetworkBytes(int64 bytes); 3085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrerenderContents(PrerenderManager* prerender_manager, 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::Referrer& referrer, 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Origin origin, 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint8 experiment_id); 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Set the final status for how the PrerenderContents was used. This 3185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // should only be called once, and should be called before the prerender 3195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // contents are destroyed. 3205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void SetFinalStatus(FinalStatus final_status); 3215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // These call out to methods on our Observers, using our observer_list_. Note 3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // that NotifyPrerenderStop() also clears the observer list. 3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void NotifyPrerenderStart(); 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void NotifyPrerenderStopLoading(); 3265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void NotifyPrerenderDomContentLoaded(); 3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void NotifyPrerenderStop(); 3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void NotifyPrerenderCreatedMatchCompleteReplacement( 3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrerenderContents* replacement); 3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called whenever a RenderViewHost is created for prerendering. Only called 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // once the RenderViewHost has a RenderView and RenderWidgetHostView. 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnRenderViewHostCreated( 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderViewHost* new_render_view_host); 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationRegistrar& notification_registrar() { 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return notification_registrar_; 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool prerendering_has_been_cancelled() const { 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return prerendering_has_been_cancelled_; 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::WebContents* CreateWebContents( 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::SessionStorageNamespace* session_storage_namespace); 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool prerendering_has_started_; 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Time at which we started to load the URL. This is used to compute 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the time elapsed from initiating a prerender until the time the 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // (potentially only partially) prerendered page is shown to the user. 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeTicks load_start_time_; 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 354a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // The prerendered WebContents; may be null. 355a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) scoped_ptr<content::WebContents> prerender_contents_; 356a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 3575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The session storage namespace id for use in matching. We must save it 3585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // rather than get it from the RenderViewHost since in the control group 3595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // we won't have a RenderViewHost. 3605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int64 session_storage_namespace_id_; 3615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The time at which we started prerendering, for the purpose of comparing 3635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // cookie creation times. 3645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Time start_time_; 3655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 3672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class WebContentsDelegateImpl; 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Needs to be able to call the constructor. 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class PrerenderContentsFactoryImpl; 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the ProcessMetrics for the render process, if it exists. 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ProcessMetrics* MaybeGetProcessMetrics(); 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3758bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // Message handlers. 3768bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) void OnCancelPrerenderForPrinting(); 3778bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ObserverList<Observer> observer_list_; 3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The prerender manager owning this object. 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrerenderManager* prerender_manager_; 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The URL being prerendered. 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL prerender_url_; 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The referrer. 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::Referrer referrer_; 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The profile being used 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile_; 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Information about the title and URL of the page that this class as a 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // RenderViewHostDelegate has received from the RenderView. 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Used to apply to the new RenderViewHost delegate that might eventually 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // own the contained RenderViewHost when the prerendered page is shown 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // in a WebContents. 397a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 title_; 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 page_id_; 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url_; 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationRegistrar notification_registrar_; 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A vector of URLs that this prerendered page matches against. 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This array can contain more than element as a result of redirects, 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // such as HTTP redirects or javascript redirects. 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<GURL> alias_urls_; 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool has_stopped_loading_; 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // True when the main frame has finished loading. 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool has_finished_loading_; 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This must be the same value as the PrerenderTracker has recorded for 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |this|, when |this| has a RenderView. 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FinalStatus final_status_; 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The MatchComplete status of the prerender, indicating how it relates 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to being a MatchComplete dummy (see definition of MatchCompleteStatus 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // above). 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MatchCompleteStatus match_complete_status_; 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tracks whether or not prerendering has been cancelled by calling Destroy. 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Used solely to prevent double deletion. 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool prerendering_has_been_cancelled_; 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Process Metrics of the render process associated with the 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // RenderViewHost for this object. 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::ProcessMetrics> process_metrics_; 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<WebContentsDelegateImpl> web_contents_delegate_; 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // These are -1 before a RenderView is created. 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int child_id_; 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int route_id_; 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Origin for this prerender. 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Origin origin_; 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Experiment during which this prerender is performed. 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint8 experiment_id_; 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The process that created the child id. 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int creator_child_id_; 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Main frame ID of last committed page. 4455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int64 main_frame_id_; 4465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The size of the WebView from the launching page. 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Size size_; 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef std::vector<history::HistoryAddPageArgs> AddPageVector; 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Caches pages to be added to the history. 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddPageVector add_page_vector_; 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // The alias session storage namespace for this prerender. 456f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_refptr<content::SessionStorageNamespace> 457f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) alias_session_storage_namespace; 458f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 4595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Indicates what internal cookie events (see prerender_contents.cc) have 4605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // occurred, using 1 bit for each possible InternalCookieEvent. 4615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int cookie_status_; 4625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Resources that are throttled, pending a prerender use. Can only access a 4645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // throttle on the IO thread. 4655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::vector<base::WeakPtr<PrerenderResourceThrottle> > resource_throttles_; 4665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // A running tally of the number of bytes this prerender has caused to be 4685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // transferred over the network for resources. Updated with AddNetworkBytes. 4695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int64 network_bytes_; 470a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(PrerenderContents); 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace prerender 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_PRERENDER_PRERENDER_CONTENTS_H_ 477