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