1 // Copyright 2014 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.
5 #ifndef CONTENT_SHELL_RENDERER_TEST_RUNNER_WEB_FRAME_TEST_PROXY_H_
6 #define CONTENT_SHELL_RENDERER_TEST_RUNNER_WEB_FRAME_TEST_PROXY_H_
8 #include "base/basictypes.h"
9 #include "content/shell/renderer/test_runner/mock_screen_orientation_client.h"
10 #include "content/shell/renderer/test_runner/test_interfaces.h"
11 #include "content/shell/renderer/test_runner/test_runner.h"
12 #include "content/shell/renderer/test_runner/web_test_delegate.h"
13 #include "content/shell/renderer/test_runner/web_test_proxy.h"
14 #include "content/test/test_media_stream_renderer_factory.h"
15 #include "third_party/WebKit/public/platform/WebString.h"
19 // Templetized wrapper around RenderFrameImpl objects, which implement
20 // the WebFrameClient interface.
21 template <class Base
, typename P
, typename R
>
22 class WebFrameTestProxy
: public Base
{
24 WebFrameTestProxy(P p
, R r
) : Base(p
, r
), base_proxy_(NULL
) {}
26 virtual ~WebFrameTestProxy() {}
28 void set_base_proxy(WebTestProxyBase
* proxy
) { base_proxy_
= proxy
; }
30 // WebFrameClient implementation.
31 virtual blink::WebPlugin
* createPlugin(blink::WebLocalFrame
* frame
,
32 const blink::WebPluginParams
& params
) {
33 blink::WebPlugin
* plugin
= base_proxy_
->CreatePlugin(frame
, params
);
36 return Base::createPlugin(frame
, params
);
39 virtual blink::WebScreenOrientationClient
* webScreenOrientationClient() {
40 return base_proxy_
->GetScreenOrientationClientMock();
43 virtual void didAddMessageToConsole(const blink::WebConsoleMessage
& message
,
44 const blink::WebString
& source_name
,
46 const blink::WebString
& stack_trace
) {
47 base_proxy_
->DidAddMessageToConsole(message
, source_name
, source_line
);
48 Base::didAddMessageToConsole(
49 message
, source_name
, source_line
, stack_trace
);
52 virtual bool canCreatePluginWithoutRenderer(
53 const blink::WebString
& mime_type
) {
54 using blink::WebString
;
56 const CR_DEFINE_STATIC_LOCAL(
57 WebString
, suffix
, ("-can-create-without-renderer"));
58 return mime_type
.utf8().find(suffix
.utf8()) != std::string::npos
;
61 virtual void loadURLExternally(blink::WebLocalFrame
* frame
,
62 const blink::WebURLRequest
& request
,
63 blink::WebNavigationPolicy policy
,
64 const blink::WebString
& suggested_name
) {
65 base_proxy_
->LoadURLExternally(frame
, request
, policy
, suggested_name
);
66 Base::loadURLExternally(frame
, request
, policy
, suggested_name
);
69 virtual void didStartProvisionalLoad(blink::WebLocalFrame
* frame
,
70 double triggeringEventTime
) {
71 base_proxy_
->DidStartProvisionalLoad(frame
);
72 Base::didStartProvisionalLoad(
73 frame
, triggeringEventTime
);
76 virtual void didReceiveServerRedirectForProvisionalLoad(
77 blink::WebLocalFrame
* frame
) {
78 base_proxy_
->DidReceiveServerRedirectForProvisionalLoad(frame
);
79 Base::didReceiveServerRedirectForProvisionalLoad(frame
);
82 virtual void didFailProvisionalLoad(
83 blink::WebLocalFrame
* frame
,
84 const blink::WebURLError
& error
,
85 blink::WebHistoryCommitType commit_type
) {
86 // If the test finished, don't notify the embedder of the failed load,
87 // as we already destroyed the document loader.
88 if (base_proxy_
->DidFailProvisionalLoad(frame
, error
, commit_type
))
90 Base::didFailProvisionalLoad(frame
, error
, commit_type
);
93 virtual void didCommitProvisionalLoad(
94 blink::WebLocalFrame
* frame
,
95 const blink::WebHistoryItem
& item
,
96 blink::WebHistoryCommitType commit_type
) {
97 base_proxy_
->DidCommitProvisionalLoad(frame
, item
, commit_type
);
98 Base::didCommitProvisionalLoad(frame
, item
, commit_type
);
101 virtual void didReceiveTitle(blink::WebLocalFrame
* frame
,
102 const blink::WebString
& title
,
103 blink::WebTextDirection direction
) {
104 base_proxy_
->DidReceiveTitle(frame
, title
, direction
);
105 Base::didReceiveTitle(frame
, title
, direction
);
108 virtual void didChangeIcon(blink::WebLocalFrame
* frame
,
109 blink::WebIconURL::Type icon_type
) {
110 base_proxy_
->DidChangeIcon(frame
, icon_type
);
111 Base::didChangeIcon(frame
, icon_type
);
114 virtual void didFinishDocumentLoad(blink::WebLocalFrame
* frame
) {
115 base_proxy_
->DidFinishDocumentLoad(frame
);
116 Base::didFinishDocumentLoad(frame
);
119 virtual void didHandleOnloadEvents(blink::WebLocalFrame
* frame
) {
120 base_proxy_
->DidHandleOnloadEvents(frame
);
121 Base::didHandleOnloadEvents(frame
);
124 virtual void didFailLoad(blink::WebLocalFrame
* frame
,
125 const blink::WebURLError
& error
,
126 blink::WebHistoryCommitType commit_type
) {
127 base_proxy_
->DidFailLoad(frame
, error
, commit_type
);
128 Base::didFailLoad(frame
, error
, commit_type
);
131 virtual void didFinishLoad(blink::WebLocalFrame
* frame
) {
132 Base::didFinishLoad(frame
);
133 base_proxy_
->DidFinishLoad(frame
);
136 virtual void didChangeSelection(bool is_selection_empty
) {
137 base_proxy_
->DidChangeSelection(is_selection_empty
);
138 Base::didChangeSelection(is_selection_empty
);
141 virtual blink::WebColorChooser
* createColorChooser(
142 blink::WebColorChooserClient
* client
,
143 const blink::WebColor
& initial_color
,
144 const blink::WebVector
<blink::WebColorSuggestion
>& suggestions
) {
145 return base_proxy_
->CreateColorChooser(client
, initial_color
, suggestions
);
148 virtual void runModalAlertDialog(const blink::WebString
& message
) {
149 base_proxy_
->delegate_
->PrintMessage(std::string("ALERT: ") +
150 message
.utf8().data() + "\n");
153 virtual bool runModalConfirmDialog(const blink::WebString
& message
) {
154 base_proxy_
->delegate_
->PrintMessage(std::string("CONFIRM: ") +
155 message
.utf8().data() + "\n");
159 virtual bool runModalPromptDialog(const blink::WebString
& message
,
160 const blink::WebString
& default_value
,
162 base_proxy_
->delegate_
->PrintMessage(
163 std::string("PROMPT: ") + message
.utf8().data() + ", default text: " +
164 default_value
.utf8().data() + "\n");
168 virtual bool runModalBeforeUnloadDialog(bool is_reload
,
169 const blink::WebString
& message
) {
170 base_proxy_
->delegate_
->PrintMessage(std::string("CONFIRM NAVIGATION: ") +
171 message
.utf8().data() + "\n");
172 return !base_proxy_
->test_interfaces_
->GetTestRunner()
173 ->shouldStayOnPageAfterHandlingBeforeUnload();
176 virtual void showContextMenu(
177 const blink::WebContextMenuData
& context_menu_data
) {
178 base_proxy_
->ShowContextMenu(Base::GetWebFrame(),
180 Base::showContextMenu(context_menu_data
);
183 virtual void didDetectXSS(blink::WebLocalFrame
* frame
,
184 const blink::WebURL
& insecure_url
,
185 bool did_block_entire_page
) {
186 // This is not implemented in RenderFrameImpl, so need to explicitly call
187 // into the base proxy.
188 base_proxy_
->DidDetectXSS(frame
, insecure_url
, did_block_entire_page
);
189 Base::didDetectXSS(frame
, insecure_url
, did_block_entire_page
);
192 virtual void didDispatchPingLoader(blink::WebLocalFrame
* frame
,
193 const blink::WebURL
& url
) {
194 // This is not implemented in RenderFrameImpl, so need to explicitly call
195 // into the base proxy.
196 base_proxy_
->DidDispatchPingLoader(frame
, url
);
197 Base::didDispatchPingLoader(frame
, url
);
200 virtual void willRequestResource(blink::WebLocalFrame
* frame
,
201 const blink::WebCachedURLRequest
& request
) {
202 // This is not implemented in RenderFrameImpl, so need to explicitly call
203 // into the base proxy.
204 base_proxy_
->WillRequestResource(frame
, request
);
205 Base::willRequestResource(frame
, request
);
208 virtual void didCreateDataSource(blink::WebLocalFrame
* frame
,
209 blink::WebDataSource
* ds
) {
210 Base::didCreateDataSource(frame
, ds
);
213 virtual void willSendRequest(blink::WebLocalFrame
* frame
,
215 blink::WebURLRequest
& request
,
216 const blink::WebURLResponse
& redirect_response
) {
217 Base::willSendRequest(frame
, identifier
, request
, redirect_response
);
218 base_proxy_
->WillSendRequest(frame
, identifier
, request
, redirect_response
);
221 virtual void didReceiveResponse(blink::WebLocalFrame
* frame
,
223 const blink::WebURLResponse
& response
) {
224 base_proxy_
->DidReceiveResponse(frame
, identifier
, response
);
225 Base::didReceiveResponse(frame
, identifier
, response
);
228 virtual void didChangeResourcePriority(
229 blink::WebLocalFrame
* frame
,
231 const blink::WebURLRequest::Priority
& priority
,
232 int intra_priority_value
) {
233 // This is not implemented in RenderFrameImpl, so need to explicitly call
234 // into the base proxy.
235 base_proxy_
->DidChangeResourcePriority(
236 frame
, identifier
, priority
, intra_priority_value
);
237 Base::didChangeResourcePriority(
238 frame
, identifier
, priority
, intra_priority_value
);
241 virtual void didFinishResourceLoad(blink::WebLocalFrame
* frame
,
242 unsigned identifier
) {
243 base_proxy_
->DidFinishResourceLoad(frame
, identifier
);
244 Base::didFinishResourceLoad(frame
, identifier
);
247 virtual blink::WebNavigationPolicy
decidePolicyForNavigation(
248 const blink::WebFrameClient::NavigationPolicyInfo
& info
) {
249 blink::WebNavigationPolicy policy
= base_proxy_
->DecidePolicyForNavigation(
251 if (policy
== blink::WebNavigationPolicyIgnore
)
254 return Base::decidePolicyForNavigation(info
);
257 virtual void willStartUsingPeerConnectionHandler(
258 blink::WebLocalFrame
* frame
,
259 blink::WebRTCPeerConnectionHandler
* handler
) {
260 // RenderFrameImpl::willStartUsingPeerConnectionHandler can not be mocked.
261 // See http://crbug/363285.
264 virtual blink::WebUserMediaClient
* userMediaClient() {
265 return base_proxy_
->GetUserMediaClient();
268 virtual bool willCheckAndDispatchMessageEvent(
269 blink::WebLocalFrame
* source_frame
,
270 blink::WebFrame
* target_frame
,
271 blink::WebSecurityOrigin target
,
272 blink::WebDOMMessageEvent event
) {
273 if (base_proxy_
->WillCheckAndDispatchMessageEvent(
274 source_frame
, target_frame
, target
, event
))
276 return Base::willCheckAndDispatchMessageEvent(
277 source_frame
, target_frame
, target
, event
);
280 virtual void didStopLoading() {
281 base_proxy_
->DidStopLoading();
282 Base::didStopLoading();
286 #if defined(ENABLE_WEBRTC)
287 scoped_ptr
<MediaStreamRendererFactory
> CreateRendererFactory() override
{
288 return scoped_ptr
<MediaStreamRendererFactory
>(
289 new TestMediaStreamRendererFactory());
293 WebTestProxyBase
* base_proxy_
;
295 DISALLOW_COPY_AND_ASSIGN(WebFrameTestProxy
);
298 } // namespace content
300 #endif // CONTENT_SHELL_RENDERER_TEST_RUNNER_WEB_FRAME_TEST_PROXY_H_