render_frame_impl.h revision 424c4d7b64af9d0d8fd9624f381f469654d5e3d2
1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CONTENT_RENDERER_RENDER_FRAME_IMPL_H_
6#define CONTENT_RENDERER_RENDER_FRAME_IMPL_H_
7
8#include "base/basictypes.h"
9#include "content/public/renderer/render_frame.h"
10#include "ipc/ipc_message.h"
11#include "third_party/WebKit/public/web/WebDataSource.h"
12#include "third_party/WebKit/public/web/WebFrameClient.h"
13
14namespace content {
15
16class RenderViewImpl;
17
18class CONTENT_EXPORT RenderFrameImpl
19    : public RenderFrame,
20      NON_EXPORTED_BASE(public WebKit::WebFrameClient) {
21 public:
22  // Creates a new RenderFrame. |render_view| is the RenderView object that this
23  // frame belongs to.
24  static RenderFrameImpl* Create(RenderViewImpl* render_view, int32 routing_id);
25
26  // Used by content_layouttest_support to hook into the creation of
27  // RenderFrameImpls.
28  static void InstallCreateHook(
29      RenderFrameImpl* (*create_render_frame_impl)(RenderViewImpl*, int32));
30
31  virtual ~RenderFrameImpl();
32
33  // IPC::Sender
34  virtual bool Send(IPC::Message* msg) OVERRIDE;
35
36  // IPC::Listener
37  virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE;
38
39  // WebKit::WebFrameClient implementation -------------------------------------
40  virtual WebKit::WebPlugin* createPlugin(
41      WebKit::WebFrame* frame,
42      const WebKit::WebPluginParams& params);
43  virtual WebKit::WebSharedWorker* createSharedWorker(
44      WebKit::WebFrame* frame,
45      const WebKit::WebURL& url,
46      const WebKit::WebString& name,
47      unsigned long long document_id);
48  virtual WebKit::WebMediaPlayer* createMediaPlayer(
49      WebKit::WebFrame* frame,
50      const WebKit::WebURL& url,
51      WebKit::WebMediaPlayerClient* client);
52  virtual WebKit::WebApplicationCacheHost* createApplicationCacheHost(
53      WebKit::WebFrame* frame,
54      WebKit::WebApplicationCacheHostClient* client);
55  virtual WebKit::WebCookieJar* cookieJar(WebKit::WebFrame* frame);
56  virtual void didAccessInitialDocument(WebKit::WebFrame* frame);
57  virtual void didCreateFrame(WebKit::WebFrame* parent,
58                              WebKit::WebFrame* child);
59  virtual void didDisownOpener(WebKit::WebFrame* frame);
60  virtual void frameDetached(WebKit::WebFrame* frame);
61  virtual void willClose(WebKit::WebFrame* frame);
62  virtual void didChangeName(WebKit::WebFrame* frame,
63                             const WebKit::WebString& name);
64  virtual void loadURLExternally(WebKit::WebFrame* frame,
65                                 const WebKit::WebURLRequest& request,
66                                 WebKit::WebNavigationPolicy policy);
67  virtual void loadURLExternally(
68      WebKit::WebFrame* frame,
69      const WebKit::WebURLRequest& request,
70      WebKit::WebNavigationPolicy policy,
71      const WebKit::WebString& suggested_name);
72  virtual WebKit::WebNavigationPolicy decidePolicyForNavigation(
73      WebKit::WebFrame* frame,
74      WebKit::WebDataSource::ExtraData* extra_data,
75      const WebKit::WebURLRequest& request,
76      WebKit::WebNavigationType type,
77      WebKit::WebNavigationPolicy default_policy,
78      bool is_redirect);
79  // DEPRECATED
80  virtual WebKit::WebNavigationPolicy decidePolicyForNavigation(
81      WebKit::WebFrame* frame,
82      const WebKit::WebURLRequest& request,
83      WebKit::WebNavigationType type,
84      WebKit::WebNavigationPolicy default_policy,
85      bool is_redirect);
86  virtual void willSendSubmitEvent(WebKit::WebFrame* frame,
87                                   const WebKit::WebFormElement& form);
88  virtual void willSubmitForm(WebKit::WebFrame* frame,
89                              const WebKit::WebFormElement& form);
90  virtual void didCreateDataSource(WebKit::WebFrame* frame,
91                                   WebKit::WebDataSource* datasource);
92  virtual void didStartProvisionalLoad(WebKit::WebFrame* frame);
93  virtual void didReceiveServerRedirectForProvisionalLoad(
94      WebKit::WebFrame* frame);
95  virtual void didFailProvisionalLoad(
96      WebKit::WebFrame* frame,
97      const WebKit::WebURLError& error);
98  virtual void didCommitProvisionalLoad(WebKit::WebFrame* frame,
99                                        bool is_new_navigation);
100  virtual void didClearWindowObject(WebKit::WebFrame* frame);
101  virtual void didCreateDocumentElement(WebKit::WebFrame* frame);
102  virtual void didReceiveTitle(WebKit::WebFrame* frame,
103                               const WebKit::WebString& title,
104                               WebKit::WebTextDirection direction);
105  virtual void didChangeIcon(WebKit::WebFrame* frame,
106                             WebKit::WebIconURL::Type icon_type);
107  virtual void didFinishDocumentLoad(WebKit::WebFrame* frame);
108  virtual void didHandleOnloadEvents(WebKit::WebFrame* frame);
109  virtual void didFailLoad(WebKit::WebFrame* frame,
110                           const WebKit::WebURLError& error);
111  virtual void didFinishLoad(WebKit::WebFrame* frame);
112  virtual void didNavigateWithinPage(WebKit::WebFrame* frame,
113                                     bool is_new_navigation);
114  virtual void didUpdateCurrentHistoryItem(WebKit::WebFrame* frame);
115  virtual void willRequestAfterPreconnect(WebKit::WebFrame* frame,
116                                          WebKit::WebURLRequest& request);
117  virtual void willSendRequest(
118      WebKit::WebFrame* frame,
119      unsigned identifier,
120      WebKit::WebURLRequest& request,
121      const WebKit::WebURLResponse& redirect_response);
122  virtual void didReceiveResponse(
123      WebKit::WebFrame* frame,
124      unsigned identifier,
125      const WebKit::WebURLResponse& response);
126  virtual void didFinishResourceLoad(WebKit::WebFrame* frame,
127                                     unsigned identifier);
128  virtual void didLoadResourceFromMemoryCache(
129      WebKit::WebFrame* frame,
130      const WebKit::WebURLRequest& request,
131      const WebKit::WebURLResponse& response);
132  virtual void didDisplayInsecureContent(WebKit::WebFrame* frame);
133  virtual void didRunInsecureContent(WebKit::WebFrame* frame,
134                                     const WebKit::WebSecurityOrigin& origin,
135                                     const WebKit::WebURL& target);
136  virtual void didExhaustMemoryAvailableForScript(
137      WebKit::WebFrame* frame);
138  virtual void didCreateScriptContext(WebKit::WebFrame* frame,
139                                      v8::Handle<v8::Context> context,
140                                      int extension_group,
141                                      int world_id);
142  virtual void willReleaseScriptContext(WebKit::WebFrame* frame,
143                                        v8::Handle<v8::Context> context,
144                                        int world_id);
145  virtual void didFirstVisuallyNonEmptyLayout(WebKit::WebFrame* frame);
146  virtual void didChangeContentsSize(WebKit::WebFrame* frame,
147                                     const WebKit::WebSize& size);
148  virtual void didChangeScrollOffset(WebKit::WebFrame* frame);
149  virtual void willInsertBody(WebKit::WebFrame* frame);
150  virtual void reportFindInPageMatchCount(int request_id,
151                                          int count,
152                                          bool final_update);
153  virtual void reportFindInPageSelection(int request_id,
154                                         int active_match_ordinal,
155                                         const WebKit::WebRect& sel);
156  virtual void requestStorageQuota(
157      WebKit::WebFrame* frame,
158      WebKit::WebStorageQuotaType type,
159      unsigned long long requested_size,
160      WebKit::WebStorageQuotaCallbacks* callbacks);
161  virtual void willOpenSocketStream(
162      WebKit::WebSocketStreamHandle* handle);
163  virtual void willStartUsingPeerConnectionHandler(
164      WebKit::WebFrame* frame,
165      WebKit::WebRTCPeerConnectionHandler* handler);
166  virtual bool willCheckAndDispatchMessageEvent(
167      WebKit::WebFrame* sourceFrame,
168      WebKit::WebFrame* targetFrame,
169      WebKit::WebSecurityOrigin targetOrigin,
170      WebKit::WebDOMMessageEvent event);
171  virtual WebKit::WebString userAgentOverride(
172      WebKit::WebFrame* frame,
173      const WebKit::WebURL& url);
174  virtual WebKit::WebString doNotTrackValue(WebKit::WebFrame* frame);
175  virtual bool allowWebGL(WebKit::WebFrame* frame, bool default_value);
176  virtual void didLoseWebGLContext(WebKit::WebFrame* frame,
177                                   int arb_robustness_status_code);
178
179 protected:
180  RenderFrameImpl(RenderViewImpl* render_view, int32 routing_id);
181
182 private:
183  int GetRoutingID() const;
184
185  RenderViewImpl* render_view_;
186  int routing_id_;
187  bool is_swapped_out_;
188  bool is_detaching_;
189
190  DISALLOW_COPY_AND_ASSIGN(RenderFrameImpl);
191};
192
193}  // namespace content
194
195#endif  // CONTENT_RENDERER_RENDER_FRAME_IMPL_H_
196