1868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// found in the LICENSE file.
4868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
5868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#ifndef CONTENT_RENDERER_RENDER_FRAME_IMPL_H_
6868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define CONTENT_RENDERER_RENDER_FRAME_IMPL_H_
7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
8a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include <set>
9a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include <vector>
10a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/basictypes.h"
12a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "base/files/file_path.h"
13a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "base/observer_list.h"
14a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "base/process/process_handle.h"
15a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "base/strings/string16.h"
16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "content/public/renderer/render_frame.h"
17868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "ipc/ipc_message.h"
187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebDataSource.h"
197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebFrameClient.h"
20868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
21a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class TransportDIB;
22a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
23a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)namespace blink {
24a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class WebMouseEvent;
25a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)struct WebCompositionUnderline;
26a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)struct WebCursorInfo;
27a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
28a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
29a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)namespace gfx {
30a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class Range;
31a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class Rect;
32a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
33a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
34868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)namespace content {
35868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
36a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class PepperPluginInstanceImpl;
37a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class RendererPpapiHost;
38a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class RenderFrameObserver;
39868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class RenderViewImpl;
40a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class RenderWidget;
41a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class RenderWidgetFullscreenPepper;
42868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class CONTENT_EXPORT RenderFrameImpl
447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    : public RenderFrame,
45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      NON_EXPORTED_BASE(public blink::WebFrameClient) {
46868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) public:
47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Creates a new RenderFrame. |render_view| is the RenderView object that this
48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // frame belongs to.
49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  static RenderFrameImpl* Create(RenderViewImpl* render_view, int32 routing_id);
50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Used by content_layouttest_support to hook into the creation of
52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // RenderFrameImpls.
53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  static void InstallCreateHook(
54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      RenderFrameImpl* (*create_render_frame_impl)(RenderViewImpl*, int32));
55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
56868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  virtual ~RenderFrameImpl();
57868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
58a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // TODO(jam): this is a temporary getter until all the code is transitioned
59a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // to using RenderFrame instead of RenderView.
60a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  RenderViewImpl* render_view() { return render_view_; }
61a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
62a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Returns the RenderWidget associated with this frame.
63a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  RenderWidget* GetRenderWidget();
64a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
65a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(ENABLE_PLUGINS)
66a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Notification that a PPAPI plugin has been created.
67a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void PepperPluginCreated(RendererPpapiHost* host);
68a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
69a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Indicates that the given instance has been created.
70a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void PepperInstanceCreated(PepperPluginInstanceImpl* instance);
71a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
72a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Indicates that the given instance is being destroyed. This is called from
73a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // the destructor, so it's important that the instance is not dereferenced
74a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // from this call.
75a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void PepperInstanceDeleted(PepperPluginInstanceImpl* instance);
76a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
77a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Notifies that |instance| has changed the cursor.
78a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // This will update the cursor appearance if it is currently over the plugin
79a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // instance.
80a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void PepperDidChangeCursor(PepperPluginInstanceImpl* instance,
81a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                             const blink::WebCursorInfo& cursor);
82a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
83a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Notifies that |instance| has received a mouse event.
84a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void PepperDidReceiveMouseEvent(PepperPluginInstanceImpl* instance);
85a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
86a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Notification that the given plugin is focused or unfocused.
87a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void PepperFocusChanged(PepperPluginInstanceImpl* instance, bool focused);
88a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
89a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Informs the render view that a PPAPI plugin has changed text input status.
90a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void PepperTextInputTypeChanged(PepperPluginInstanceImpl* instance);
91a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void PepperCaretPositionChanged(PepperPluginInstanceImpl* instance);
92a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
93a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Cancels current composition.
94a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void PepperCancelComposition(PepperPluginInstanceImpl* instance);
95a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
96a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Informs the render view that a PPAPI plugin has changed selection.
97a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void PepperSelectionChanged(PepperPluginInstanceImpl* instance);
98a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
99a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Creates a fullscreen container for a pepper plugin instance.
100a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  RenderWidgetFullscreenPepper* CreatePepperFullscreenContainer(
101a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      PepperPluginInstanceImpl* plugin);
102a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
103a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  bool IsPepperAcceptingCompositionEvents() const;
104a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
105a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Notification that the given plugin has crashed.
106a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void PluginCrashed(const base::FilePath& plugin_path,
107a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                     base::ProcessId plugin_pid);
108a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
109a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // These map to virtual methods on RenderWidget that are used to call out to
110a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // RenderView.
111a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // TODO(jam): once we get rid of RenderView, RenderFrame will own RenderWidget
112a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // and methods would be on a delegate interface.
113a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void DidInitiatePaint();
114a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void DidFlushPaint();
115a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  PepperPluginInstanceImpl* GetBitmapForOptimizedPluginPaint(
116a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      const gfx::Rect& paint_bounds,
117a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      TransportDIB** dib,
118a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      gfx::Rect* location,
119a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      gfx::Rect* clip,
120a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      float* scale_factor);
121a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void PageVisibilityChanged(bool shown);
122a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void OnSetFocus(bool enable);
123a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void WillHandleMouseEvent(const blink::WebMouseEvent& event);
124a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
125a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Simulates IME events for testing purpose.
126a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void SimulateImeSetComposition(
127a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      const base::string16& text,
128a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      const std::vector<blink::WebCompositionUnderline>& underlines,
129a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      int selection_start,
130a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      int selection_end);
131a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void SimulateImeConfirmComposition(const base::string16& text,
132a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                     const gfx::Range& replacement_range);
133a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
134a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // TODO(jam): remove these once the IPC handler moves from RenderView to
135a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // RenderFrame.
136a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void OnImeSetComposition(
137a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    const base::string16& text,
138a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    const std::vector<blink::WebCompositionUnderline>& underlines,
139a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    int selection_start,
140a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    int selection_end);
141a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void OnImeConfirmComposition(
142a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    const base::string16& text,
143a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    const gfx::Range& replacement_range,
144a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    bool keep_selection);
145a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif  // ENABLE_PLUGINS
146a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
147868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // IPC::Sender
148868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  virtual bool Send(IPC::Message* msg) OVERRIDE;
149868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
150868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // IPC::Listener
151868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE;
152868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
153a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // RenderFrame implementation:
154a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual RenderView* GetRenderView() OVERRIDE;
155a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual int GetRoutingID() OVERRIDE;
156a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual WebPreferences& GetWebkitPreferences() OVERRIDE;
157a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual int ShowContextMenu(ContextMenuClient* client,
158a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                              const ContextMenuParams& params) OVERRIDE;
159a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual void CancelContextMenu(int request_id) OVERRIDE;
160a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual blink::WebPlugin* CreatePlugin(
161a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      blink::WebFrame* frame,
162a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      const WebPluginInfo& info,
163a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      const blink::WebPluginParams& params) OVERRIDE;
164a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual void LoadURLExternally(
165a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      blink::WebFrame* frame,
166a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      const blink::WebURLRequest& request,
167a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      blink::WebNavigationPolicy policy) OVERRIDE;
168a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
169f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // blink::WebFrameClient implementation -------------------------------------
170f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual blink::WebPlugin* createPlugin(
171f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebFrame* frame,
172f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const blink::WebPluginParams& params);
173f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual blink::WebMediaPlayer* createMediaPlayer(
174f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebFrame* frame,
175f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const blink::WebURL& url,
176f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebMediaPlayerClient* client);
177f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual blink::WebApplicationCacheHost* createApplicationCacheHost(
178f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebFrame* frame,
179f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebApplicationCacheHostClient* client);
180f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual blink::WebWorkerPermissionClientProxy*
181f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      createWorkerPermissionClientProxy(blink::WebFrame* frame);
182f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual blink::WebCookieJar* cookieJar(blink::WebFrame* frame);
183f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual blink::WebServiceWorkerProvider* createServiceWorkerProvider(
184f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebFrame* frame,
185f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebServiceWorkerProviderClient*);
186f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void didAccessInitialDocument(blink::WebFrame* frame);
187f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual blink::WebFrame* createChildFrame(blink::WebFrame* parent,
188f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                             const blink::WebString& name);
189f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void didDisownOpener(blink::WebFrame* frame);
190f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void frameDetached(blink::WebFrame* frame);
191f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void willClose(blink::WebFrame* frame);
192f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void didChangeName(blink::WebFrame* frame,
193f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                             const blink::WebString& name);
1944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual void didMatchCSS(
195f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebFrame* frame,
196f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const blink::WebVector<blink::WebString>& newly_matching_selectors,
197f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const blink::WebVector<blink::WebString>& stopped_matching_selectors);
198f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void loadURLExternally(blink::WebFrame* frame,
199f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                 const blink::WebURLRequest& request,
200f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                 blink::WebNavigationPolicy policy);
2017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  virtual void loadURLExternally(
202f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebFrame* frame,
203f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const blink::WebURLRequest& request,
204f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebNavigationPolicy policy,
205f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const blink::WebString& suggested_name);
206f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual blink::WebNavigationPolicy decidePolicyForNavigation(
207f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebFrame* frame,
208f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebDataSource::ExtraData* extra_data,
209f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const blink::WebURLRequest& request,
210f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebNavigationType type,
211f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebNavigationPolicy default_policy,
2123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      bool is_redirect);
2133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // DEPRECATED
214f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual blink::WebNavigationPolicy decidePolicyForNavigation(
215f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebFrame* frame,
216f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const blink::WebURLRequest& request,
217f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebNavigationType type,
218f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebNavigationPolicy default_policy,
2197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      bool is_redirect);
220f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void willSendSubmitEvent(blink::WebFrame* frame,
221f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                   const blink::WebFormElement& form);
222f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void willSubmitForm(blink::WebFrame* frame,
223f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                              const blink::WebFormElement& form);
224f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void didCreateDataSource(blink::WebFrame* frame,
225f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                   blink::WebDataSource* datasource);
226f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void didStartProvisionalLoad(blink::WebFrame* frame);
2277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  virtual void didReceiveServerRedirectForProvisionalLoad(
228f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebFrame* frame);
2297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  virtual void didFailProvisionalLoad(
230f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebFrame* frame,
231f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const blink::WebURLError& error);
232f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void didCommitProvisionalLoad(blink::WebFrame* frame,
233eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                        bool is_new_navigation);
234f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void didClearWindowObject(blink::WebFrame* frame);
235f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void didCreateDocumentElement(blink::WebFrame* frame);
236f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void didReceiveTitle(blink::WebFrame* frame,
237f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                               const blink::WebString& title,
238f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                               blink::WebTextDirection direction);
239f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void didChangeIcon(blink::WebFrame* frame,
240f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                             blink::WebIconURL::Type icon_type);
241f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void didFinishDocumentLoad(blink::WebFrame* frame);
242f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void didHandleOnloadEvents(blink::WebFrame* frame);
243f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void didFailLoad(blink::WebFrame* frame,
244f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                           const blink::WebURLError& error);
245f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void didFinishLoad(blink::WebFrame* frame);
246f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void didNavigateWithinPage(blink::WebFrame* frame,
247eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                     bool is_new_navigation);
248f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void didUpdateCurrentHistoryItem(blink::WebFrame* frame);
249f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void willRequestAfterPreconnect(blink::WebFrame* frame,
250f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                          blink::WebURLRequest& request);
2517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  virtual void willSendRequest(
252f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebFrame* frame,
2537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      unsigned identifier,
254f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebURLRequest& request,
255f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const blink::WebURLResponse& redirect_response);
2567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  virtual void didReceiveResponse(
257f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebFrame* frame,
2587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      unsigned identifier,
259f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const blink::WebURLResponse& response);
260f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void didFinishResourceLoad(blink::WebFrame* frame,
261eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                     unsigned identifier);
2627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  virtual void didLoadResourceFromMemoryCache(
263f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebFrame* frame,
264f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const blink::WebURLRequest& request,
265f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const blink::WebURLResponse& response);
266f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void didDisplayInsecureContent(blink::WebFrame* frame);
267f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void didRunInsecureContent(blink::WebFrame* frame,
268f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                     const blink::WebSecurityOrigin& origin,
269f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                     const blink::WebURL& target);
270f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void didAbortLoading(blink::WebFrame* frame);
2717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  virtual void didExhaustMemoryAvailableForScript(
272f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebFrame* frame);
273f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void didCreateScriptContext(blink::WebFrame* frame,
2747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                                      v8::Handle<v8::Context> context,
2757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                                      int extension_group,
276eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                      int world_id);
277f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void willReleaseScriptContext(blink::WebFrame* frame,
2787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                                        v8::Handle<v8::Context> context,
279eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                        int world_id);
280f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void didFirstVisuallyNonEmptyLayout(blink::WebFrame* frame);
281f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void didChangeContentsSize(blink::WebFrame* frame,
282f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                     const blink::WebSize& size);
283f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void didChangeScrollOffset(blink::WebFrame* frame);
284f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void willInsertBody(blink::WebFrame* frame);
2857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  virtual void reportFindInPageMatchCount(int request_id,
2867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                                          int count,
287eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                          bool final_update);
2887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  virtual void reportFindInPageSelection(int request_id,
2897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                                         int active_match_ordinal,
290f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                         const blink::WebRect& sel);
2917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  virtual void requestStorageQuota(
292f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebFrame* frame,
293f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebStorageQuotaType type,
2947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      unsigned long long requested_size,
295f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebStorageQuotaCallbacks* callbacks);
2967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  virtual void willOpenSocketStream(
297f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebSocketStreamHandle* handle);
2987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  virtual void willStartUsingPeerConnectionHandler(
299f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebFrame* frame,
300f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebRTCPeerConnectionHandler* handler);
3017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  virtual bool willCheckAndDispatchMessageEvent(
302f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebFrame* sourceFrame,
303f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebFrame* targetFrame,
304f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebSecurityOrigin targetOrigin,
305f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebDOMMessageEvent event);
306f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual blink::WebString userAgentOverride(
307f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebFrame* frame,
308f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const blink::WebURL& url);
309f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual blink::WebString doNotTrackValue(blink::WebFrame* frame);
310f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual bool allowWebGL(blink::WebFrame* frame, bool default_value);
311f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void didLoseWebGLContext(blink::WebFrame* frame,
312eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                   int arb_robustness_status_code);
3137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
314eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch protected:
315eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  RenderFrameImpl(RenderViewImpl* render_view, int32 routing_id);
316eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
317868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) private:
318a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  friend class RenderFrameObserver;
319a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
320a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Functions to add and remove observers for this object.
321a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void AddObserver(RenderFrameObserver* observer);
322a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void RemoveObserver(RenderFrameObserver* observer);
323424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
324868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  RenderViewImpl* render_view_;
325868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  int routing_id_;
326424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  bool is_swapped_out_;
327424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  bool is_detaching_;
328868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
329a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(ENABLE_PLUGINS)
330a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  typedef std::set<PepperPluginInstanceImpl*> PepperPluginSet;
331a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  PepperPluginSet active_pepper_instances_;
332a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
333a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Current text input composition text. Empty if no composition is in
334a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // progress.
335a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  base::string16 pepper_composition_text_;
336a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
337a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
338a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // All the registered observers.
339a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  ObserverList<RenderFrameObserver> observers_;
340a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
341868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(RenderFrameImpl);
342868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)};
343868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
344868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}  // namespace content
345868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
3467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif  // CONTENT_RENDERER_RENDER_FRAME_IMPL_H_
347