172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// Use of this source code is governed by a BSD-style license that can be 321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// found in the LICENSE file. 421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#ifndef CHROME_BROWSER_PRERENDER_PRERENDER_CONTENTS_H_ 621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#define CHROME_BROWSER_PRERENDER_PRERENDER_CONTENTS_H_ 721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#pragma once 821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include <string> 1021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include <vector> 1121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/scoped_ptr.h" 1372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "base/time.h" 14dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/prerender/prerender_final_status.h" 1521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/tab_contents/render_view_host_delegate_helper.h" 1621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/ui/app_modal_dialogs/js_modal_dialog.h" 1721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/common/view_types.h" 18dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/renderer_host/render_view_host_delegate.h" 19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_registrar.h" 20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/window_container_type.h" 2121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "webkit/glue/window_open_disposition.h" 2221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 2321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenclass TabContents; 24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenstruct FaviconURL; 2521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenstruct WebPreferences; 2621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenstruct ViewHostMsg_FrameNavigate_Params; 2721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 28dc0f95d653279beabeb9817299e2902918ba123eKristian Monsennamespace base { 29dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass ProcessMetrics; 30dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 31dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 3221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsennamespace gfx { 3321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenclass Rect; 3421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen} 3521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 36dc0f95d653279beabeb9817299e2902918ba123eKristian Monsennamespace prerender { 37dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 38dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass PrerenderManager; 39dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 4021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// This class is a peer of TabContents. It can host a renderer, but does not 4121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// have any visible display. Its navigation is not managed by a 4221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// NavigationController because is has no facility for navigating (other than 4321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// programatically view window.location.href) or RenderViewHostManager because 4421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// it is never allowed to navigate across a SiteInstance boundary. 4521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenclass PrerenderContents : public RenderViewHostDelegate, 4621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen public RenderViewHostDelegate::View, 4721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen public NotificationObserver, 4821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen public JavaScriptAppModalDialogDelegate { 4921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen public: 5072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // PrerenderContents::Create uses the currently registered Factory to create 5172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // the PrerenderContents. Factory is intended for testing. 5272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen class Factory { 5372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen public: 5472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen Factory() {} 5572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~Factory() {} 5672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 5772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual PrerenderContents* CreatePrerenderContents( 5872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen PrerenderManager* prerender_manager, Profile* profile, const GURL& url, 59dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::vector<GURL>& alias_urls, const GURL& referrer) = 0; 6072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 6172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen private: 6272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DISALLOW_COPY_AND_ASSIGN(Factory); 6372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen }; 6472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 6521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual ~PrerenderContents(); 6672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 6772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen static Factory* CreateFactory(); 6872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 6921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void StartPrerendering(); 7021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 71dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Verifies that the prerendering is not using too many resources, and kills 72dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // it if not. 73dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen void DestroyWhenUsingTooManyResources(); 74dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 7521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen RenderViewHost* render_view_host() { return render_view_host_; } 7621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // Allows replacing of the RenderViewHost owned by this class, including 7721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // replacing with a NULL value. When a caller uses this, the caller will 7821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // own (and is responsible for freeing) the old RVH. 7921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen void set_render_view_host(RenderViewHost* rvh) { render_view_host_ = rvh; } 8021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ViewHostMsg_FrameNavigate_Params* navigate_params() { 8121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen return navigate_params_.get(); 8221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } 8321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen string16 title() const { return title_; } 8421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen int32 page_id() const { return page_id_; } 8572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen GURL icon_url() const { return icon_url_; } 8672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen bool has_stopped_loading() const { return has_stopped_loading_; } 87ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool prerendering_has_started() const { return prerendering_has_started_; } 88ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 89ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Sets the parameter to the value of the associated RenderViewHost's child id 90ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // and returns a boolean indicating the validity of that id. 91ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual bool GetChildId(int* child_id) const; 92ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 93ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Sets the parameter to the value of the associated RenderViewHost's route id 94ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // and returns a boolean indicating the validity of that id. 95ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual bool GetRouteId(int* route_id) const; 9672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 9772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Set the final status for how the PrerenderContents was used. This 9872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // should only be called once, and should be called before the prerender 9972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // contents are destroyed. 10072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void set_final_status(FinalStatus final_status); 10172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen FinalStatus final_status() const; 10272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 10372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::TimeTicks load_start_time() const { return load_start_time_; } 10472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 10572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Indicates whether this prerendered page can be used for the provided 10672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // URL, i.e. whether there is a match. 10772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen bool MatchesURL(const GURL& url) const; 10821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 10921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // RenderViewHostDelegate implementation. 11021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual RenderViewHostDelegate::View* GetViewDelegate(); 11121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual const GURL& GetURL() const; 11221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual ViewType::Type GetRenderViewType() const; 11321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual int GetBrowserWindowID() const; 11421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void DidNavigate(RenderViewHost* render_view_host, 11521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const ViewHostMsg_FrameNavigate_Params& params); 11621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void UpdateTitle(RenderViewHost* render_view_host, 11721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen int32 page_id, 11821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const std::wstring& title); 11921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual WebPreferences GetWebkitPrefs(); 12021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void RunJavaScriptMessage(const std::wstring& message, 12121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const std::wstring& default_prompt, 12221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const GURL& frame_url, 12321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const int flags, 12421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen IPC::Message* reply_msg, 12521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen bool* did_suppress_message); 12621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void Close(RenderViewHost* render_view_host); 12772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void DidStopLoading(); 12821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual RendererPreferences GetRendererPrefs(Profile* profile) const; 12921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 13021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // RenderViewHostDelegate::View 13121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void CreateNewWindow( 13221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen int route_id, 13372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const ViewHostMsg_CreateWindow_Params& params); 13421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void CreateNewWidget(int route_id, WebKit::WebPopupType popup_type); 13572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void CreateNewFullscreenWidget(int route_id); 13621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void ShowCreatedWindow(int route_id, 13721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen WindowOpenDisposition disposition, 13821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const gfx::Rect& initial_pos, 13921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen bool user_gesture); 14021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void ShowCreatedWidget(int route_id, 14121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const gfx::Rect& initial_pos); 14221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void ShowCreatedFullscreenWidget(int route_id); 14321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void ShowContextMenu(const ContextMenuParams& params) {} 14421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void ShowPopupMenu(const gfx::Rect& bounds, 14521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen int item_height, 14621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen double item_font_size, 14721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen int selected_item, 14821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const std::vector<WebMenuItem>& items, 14921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen bool right_aligned) {} 15021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void StartDragging(const WebDropData& drop_data, 15121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen WebKit::WebDragOperationsMask allowed_operations, 15221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const SkBitmap& image, 15321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const gfx::Point& image_offset) {} 15421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void UpdateDragCursor(WebKit::WebDragOperation operation) {} 15521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void GotFocus() {} 15621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void TakeFocus(bool reverse) {} 15721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void LostCapture() {} 15821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void Activate() {} 15921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void Deactivate() {} 16021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual bool PreHandleKeyboardEvent(const NativeWebKeyboardEvent& event, 16121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen bool* is_keyboard_shortcut); 16221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void HandleKeyboardEvent(const NativeWebKeyboardEvent& event) {} 16321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void HandleMouseMove() {} 16421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void HandleMouseDown() {} 16521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void HandleMouseLeave() {} 16621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void HandleMouseUp() {} 16721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void HandleMouseActivate() {} 16821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void UpdatePreferredSize(const gfx::Size& new_size) {} 16921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 17021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // NotificationObserver 17121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void Observe(NotificationType type, 17221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const NotificationSource& source, 17321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const NotificationDetails& details); 17421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 17521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // Overridden from JavaScriptAppModalDialogDelegate: 17621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void OnMessageBoxClosed(IPC::Message* reply_msg, 17721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen bool success, 17821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const std::wstring& prompt); 17921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void SetSuppressMessageBoxes(bool suppress_message_boxes) {} 18021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual gfx::NativeWindow GetMessageBoxRootWindow(); 18121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual TabContents* AsTabContents(); 18221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual ExtensionHost* AsExtensionHost(); 18321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 18421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void UpdateInspectorSetting(const std::string& key, 18521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const std::string& value); 18621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void ClearInspectorSettings(); 18721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 188dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual void OnJSOutOfMemory(); 189dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual void RendererUnresponsive(RenderViewHost* render_view_host, 190dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen bool is_during_unload); 191dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 19272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen protected: 19372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen PrerenderContents(PrerenderManager* prerender_manager, Profile* profile, 194dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const GURL& url, const std::vector<GURL>& alias_urls, 195dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const GURL& referrer); 19672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 19772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // from RenderViewHostDelegate. 19872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual bool OnMessageReceived(const IPC::Message& message); 19972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 200ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const GURL& prerender_url() const { return prerender_url_; } 201ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 20221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen private: 20372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Needs to be able to call the constructor. 20472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen friend class PrerenderContentsFactoryImpl; 20572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 20672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Message handlers. 20772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void OnDidStartProvisionalLoadForFrame(int64 frame_id, 20872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen bool main_frame, 20972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const GURL& url); 210ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void OnUpdateFaviconURL(int32 page_id, const std::vector<FaviconURL>& urls); 211ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void OnMaybeCancelPrerenderForHTML5Media(); 21272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 213dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Adds an alias URL, for one of the many redirections. Returns whether 214dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // the URL is valid. 215dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen bool AddAliasURL(const GURL& url); 21672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 21772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Remove |this| from the PrerenderManager, set a final status, and 21872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // delete |this|. 21972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void Destroy(FinalStatus reason); 22072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 221dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Returns the ProcessMetrics for the render process, if it exists. 222dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen base::ProcessMetrics* MaybeGetProcessMetrics(); 223dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 22421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // The prerender manager owning this object. 22521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen PrerenderManager* prerender_manager_; 22621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 22721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // The host for our HTML content. 22821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen RenderViewHost* render_view_host_; 22921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 23021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // Common implementations of some RenderViewHostDelegate::View methods. 23121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen RenderViewHostDelegateViewHelper delegate_view_helper_; 23221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 23321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // The URL being prerendered. 23421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen GURL prerender_url_; 23521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 236dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // The referrer. 237dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen GURL referrer_; 238dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 23921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // The NavigationParameters of the finished navigation. 24021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen scoped_ptr<ViewHostMsg_FrameNavigate_Params> navigate_params_; 24121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 24221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // The profile being used 24321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen Profile* profile_; 24421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 24521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // Information about the title and URL of the page that this class as a 24621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // RenderViewHostDelegate has received from the RenderView. 24721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // Used to apply to the new RenderViewHost delegate that might eventually 24821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // own the contained RenderViewHost when the prerendered page is shown 24921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // in a TabContents. 25021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen string16 title_; 25121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen int32 page_id_; 25221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen GURL url_; 25372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen GURL icon_url_; 25421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen NotificationRegistrar registrar_; 25521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 25672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // A vector of URLs that this prerendered page matches against. 25772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // This array can contain more than element as a result of redirects, 25872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // such as HTTP redirects or javascript redirects. 25972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen std::vector<GURL> alias_urls_; 26072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 26172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen bool has_stopped_loading_; 26272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 26372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen FinalStatus final_status_; 26472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 265ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool prerendering_has_started_; 266ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 26772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Time at which we started to load the URL. This is used to compute 26872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // the time elapsed from initiating a prerender until the time the 26972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // (potentially only partially) prerendered page is shown to the user. 27072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::TimeTicks load_start_time_; 27172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 272dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Process Metrics of the render process associated with the 273dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // RenderViewHost for this object. 274dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen scoped_ptr<base::ProcessMetrics> process_metrics_; 275dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 276dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Maximum amount of private memory that may be used per PrerenderContents, 277dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // in MB. 278dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen static const int kMaxPrerenderPrivateMB = 100; 279dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 28021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen DISALLOW_COPY_AND_ASSIGN(PrerenderContents); 28121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen}; 28221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 283dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} // prerender 284dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 28521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#endif // CHROME_BROWSER_PRERENDER_PRERENDER_CONTENTS_H_ 286