• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.
4 
5 #ifndef CONTENT_SHELL_RENDERER_TEST_RUNNER_WEB_FRAME_TEST_PROXY_H_
6 #define CONTENT_SHELL_RENDERER_TEST_RUNNER_WEB_FRAME_TEST_PROXY_H_
7 
8 #include "base/basictypes.h"
9 #include "content/shell/renderer/test_runner/TestInterfaces.h"
10 #include "content/shell/renderer/test_runner/WebTestDelegate.h"
11 #include "content/shell/renderer/test_runner/test_runner.h"
12 #include "content/shell/renderer/test_runner/web_test_proxy.h"
13 #include "content/test/test_media_stream_renderer_factory.h"
14 #include "third_party/WebKit/public/platform/WebString.h"
15 
16 namespace content {
17 
18 // Templetized wrapper around RenderFrameImpl objects, which implement
19 // the WebFrameClient interface.
20 template <class Base, typename P, typename R>
21 class WebFrameTestProxy : public Base {
22  public:
WebFrameTestProxy(P p,R r)23   WebFrameTestProxy(P p, R r) : Base(p, r), base_proxy_(NULL) {}
24 
~WebFrameTestProxy()25   virtual ~WebFrameTestProxy() {}
26 
set_base_proxy(WebTestProxyBase * proxy)27   void set_base_proxy(WebTestProxyBase* proxy) { base_proxy_ = proxy; }
28 
29   // WebFrameClient implementation.
createPlugin(blink::WebLocalFrame * frame,const blink::WebPluginParams & params)30   virtual blink::WebPlugin* createPlugin(blink::WebLocalFrame* frame,
31                                          const blink::WebPluginParams& params) {
32     blink::WebPlugin* plugin = base_proxy_->CreatePlugin(frame, params);
33     if (plugin) return plugin;
34     return Base::createPlugin(frame, params);
35   }
36 
didAddMessageToConsole(const blink::WebConsoleMessage & message,const blink::WebString & sourceName,unsigned sourceLine,const blink::WebString & stackTrace)37   virtual void didAddMessageToConsole(const blink::WebConsoleMessage& message,
38                                       const blink::WebString& sourceName,
39                                       unsigned sourceLine,
40                                       const blink::WebString& stackTrace) {
41     base_proxy_->DidAddMessageToConsole(message, sourceName, sourceLine);
42     Base::didAddMessageToConsole(message, sourceName, sourceLine, stackTrace);
43   }
44 
canCreatePluginWithoutRenderer(const blink::WebString & mimeType)45   virtual bool canCreatePluginWithoutRenderer(
46       const blink::WebString& mimeType) {
47     using blink::WebString;
48 
49     const CR_DEFINE_STATIC_LOCAL(WebString, suffix,
50                                  ("-can-create-without-renderer"));
51     return mimeType.utf8().find(suffix.utf8()) != std::string::npos;
52   }
53 
loadURLExternally(blink::WebLocalFrame * frame,const blink::WebURLRequest & request,blink::WebNavigationPolicy policy,const blink::WebString & suggested_name)54   virtual void loadURLExternally(blink::WebLocalFrame* frame,
55                                  const blink::WebURLRequest& request,
56                                  blink::WebNavigationPolicy policy,
57                                  const blink::WebString& suggested_name) {
58     base_proxy_->LoadURLExternally(frame, request, policy, suggested_name);
59     Base::loadURLExternally(frame, request, policy, suggested_name);
60   }
61 
didStartProvisionalLoad(blink::WebLocalFrame * frame)62   virtual void didStartProvisionalLoad(blink::WebLocalFrame* frame) {
63     base_proxy_->DidStartProvisionalLoad(frame);
64     Base::didStartProvisionalLoad(frame);
65   }
66 
didReceiveServerRedirectForProvisionalLoad(blink::WebLocalFrame * frame)67   virtual void didReceiveServerRedirectForProvisionalLoad(
68       blink::WebLocalFrame* frame) {
69     base_proxy_->DidReceiveServerRedirectForProvisionalLoad(frame);
70     Base::didReceiveServerRedirectForProvisionalLoad(frame);
71   }
72 
didFailProvisionalLoad(blink::WebLocalFrame * frame,const blink::WebURLError & error)73   virtual void didFailProvisionalLoad(blink::WebLocalFrame* frame,
74                                       const blink::WebURLError& error) {
75     // If the test finished, don't notify the embedder of the failed load,
76     // as we already destroyed the document loader.
77     if (base_proxy_->DidFailProvisionalLoad(frame, error)) return;
78     Base::didFailProvisionalLoad(frame, error);
79   }
80 
didCommitProvisionalLoad(blink::WebLocalFrame * frame,const blink::WebHistoryItem & item,blink::WebHistoryCommitType commit_type)81   virtual void didCommitProvisionalLoad(
82       blink::WebLocalFrame* frame, const blink::WebHistoryItem& item,
83       blink::WebHistoryCommitType commit_type) {
84     base_proxy_->DidCommitProvisionalLoad(frame, item, commit_type);
85     Base::didCommitProvisionalLoad(frame, item, commit_type);
86   }
87 
didReceiveTitle(blink::WebLocalFrame * frame,const blink::WebString & title,blink::WebTextDirection direction)88   virtual void didReceiveTitle(blink::WebLocalFrame* frame,
89                                const blink::WebString& title,
90                                blink::WebTextDirection direction) {
91     base_proxy_->DidReceiveTitle(frame, title, direction);
92     Base::didReceiveTitle(frame, title, direction);
93   }
94 
didChangeIcon(blink::WebLocalFrame * frame,blink::WebIconURL::Type iconType)95   virtual void didChangeIcon(blink::WebLocalFrame* frame,
96                              blink::WebIconURL::Type iconType) {
97     base_proxy_->DidChangeIcon(frame, iconType);
98     Base::didChangeIcon(frame, iconType);
99   }
100 
didFinishDocumentLoad(blink::WebLocalFrame * frame)101   virtual void didFinishDocumentLoad(blink::WebLocalFrame* frame) {
102     base_proxy_->DidFinishDocumentLoad(frame);
103     Base::didFinishDocumentLoad(frame);
104   }
105 
didHandleOnloadEvents(blink::WebLocalFrame * frame)106   virtual void didHandleOnloadEvents(blink::WebLocalFrame* frame) {
107     base_proxy_->DidHandleOnloadEvents(frame);
108     Base::didHandleOnloadEvents(frame);
109   }
110 
didFailLoad(blink::WebLocalFrame * frame,const blink::WebURLError & error)111   virtual void didFailLoad(blink::WebLocalFrame* frame,
112                            const blink::WebURLError& error) {
113     base_proxy_->DidFailLoad(frame, error);
114     Base::didFailLoad(frame, error);
115   }
116 
didFinishLoad(blink::WebLocalFrame * frame)117   virtual void didFinishLoad(blink::WebLocalFrame* frame) {
118     Base::didFinishLoad(frame);
119     base_proxy_->DidFinishLoad(frame);
120   }
121 
notificationPresenter()122   virtual blink::WebNotificationPresenter* notificationPresenter() {
123     return base_proxy_->GetNotificationPresenter();
124   }
125 
didChangeSelection(bool is_selection_empty)126   virtual void didChangeSelection(bool is_selection_empty) {
127     base_proxy_->DidChangeSelection(is_selection_empty);
128     Base::didChangeSelection(is_selection_empty);
129   }
130 
createColorChooser(blink::WebColorChooserClient * client,const blink::WebColor & initial_color,const blink::WebVector<blink::WebColorSuggestion> & suggestions)131   virtual blink::WebColorChooser* createColorChooser(
132       blink::WebColorChooserClient* client,
133       const blink::WebColor& initial_color,
134       const blink::WebVector<blink::WebColorSuggestion>& suggestions) {
135     return base_proxy_->CreateColorChooser(client, initial_color, suggestions);
136   }
137 
runModalAlertDialog(const blink::WebString & message)138   virtual void runModalAlertDialog(const blink::WebString& message) {
139     base_proxy_->delegate_->printMessage(std::string("ALERT: ") +
140                                          message.utf8().data() + "\n");
141   }
142 
runModalConfirmDialog(const blink::WebString & message)143   virtual bool runModalConfirmDialog(const blink::WebString& message) {
144     base_proxy_->delegate_->printMessage(std::string("CONFIRM: ") +
145                                          message.utf8().data() + "\n");
146     return true;
147   }
148 
runModalPromptDialog(const blink::WebString & message,const blink::WebString & defaultValue,blink::WebString *)149   virtual bool runModalPromptDialog(const blink::WebString& message,
150                                     const blink::WebString& defaultValue,
151                                     blink::WebString*) {
152     base_proxy_->delegate_->printMessage(
153         std::string("PROMPT: ") + message.utf8().data() + ", default text: " +
154         defaultValue.utf8().data() + "\n");
155     return true;
156   }
157 
runModalBeforeUnloadDialog(bool is_reload,const blink::WebString & message)158   virtual bool runModalBeforeUnloadDialog(bool is_reload,
159                                           const blink::WebString& message) {
160     base_proxy_->delegate_->printMessage(std::string("CONFIRM NAVIGATION: ") +
161                                          message.utf8().data() + "\n");
162     return !base_proxy_->test_interfaces_->testRunner()
163                 ->shouldStayOnPageAfterHandlingBeforeUnload();
164   }
165 
showContextMenu(const blink::WebContextMenuData & contextMenuData)166   virtual void showContextMenu(
167       const blink::WebContextMenuData& contextMenuData) {
168     base_proxy_->ShowContextMenu(Base::GetWebFrame()->toWebLocalFrame(),
169                                  contextMenuData);
170     Base::showContextMenu(contextMenuData);
171   }
172 
didDetectXSS(blink::WebLocalFrame * frame,const blink::WebURL & insecureURL,bool didBlockEntirePage)173   virtual void didDetectXSS(blink::WebLocalFrame* frame,
174                             const blink::WebURL& insecureURL,
175                             bool didBlockEntirePage) {
176     // This is not implemented in RenderFrameImpl, so need to explicitly call
177     // into the base proxy.
178     base_proxy_->DidDetectXSS(frame, insecureURL, didBlockEntirePage);
179     Base::didDetectXSS(frame, insecureURL, didBlockEntirePage);
180   }
181 
didDispatchPingLoader(blink::WebLocalFrame * frame,const blink::WebURL & url)182   virtual void didDispatchPingLoader(blink::WebLocalFrame* frame,
183                                      const blink::WebURL& url) {
184     // This is not implemented in RenderFrameImpl, so need to explicitly call
185     // into the base proxy.
186     base_proxy_->DidDispatchPingLoader(frame, url);
187     Base::didDispatchPingLoader(frame, url);
188   }
189 
willRequestResource(blink::WebLocalFrame * frame,const blink::WebCachedURLRequest & request)190   virtual void willRequestResource(blink::WebLocalFrame* frame,
191                                    const blink::WebCachedURLRequest& request) {
192     // This is not implemented in RenderFrameImpl, so need to explicitly call
193     // into the base proxy.
194     base_proxy_->WillRequestResource(frame, request);
195     Base::willRequestResource(frame, request);
196   }
197 
didCreateDataSource(blink::WebLocalFrame * frame,blink::WebDataSource * ds)198   virtual void didCreateDataSource(blink::WebLocalFrame* frame,
199                                    blink::WebDataSource* ds) {
200     Base::didCreateDataSource(frame, ds);
201   }
202 
willSendRequest(blink::WebLocalFrame * frame,unsigned identifier,blink::WebURLRequest & request,const blink::WebURLResponse & redirectResponse)203   virtual void willSendRequest(blink::WebLocalFrame* frame, unsigned identifier,
204                                blink::WebURLRequest& request,
205                                const blink::WebURLResponse& redirectResponse) {
206     Base::willSendRequest(frame, identifier, request, redirectResponse);
207     base_proxy_->WillSendRequest(frame, identifier, request, redirectResponse);
208   }
209 
didReceiveResponse(blink::WebLocalFrame * frame,unsigned identifier,const blink::WebURLResponse & response)210   virtual void didReceiveResponse(blink::WebLocalFrame* frame,
211                                   unsigned identifier,
212                                   const blink::WebURLResponse& response) {
213     base_proxy_->DidReceiveResponse(frame, identifier, response);
214     Base::didReceiveResponse(frame, identifier, response);
215   }
216 
didChangeResourcePriority(blink::WebLocalFrame * frame,unsigned identifier,const blink::WebURLRequest::Priority & priority,int intra_priority_value)217   virtual void didChangeResourcePriority(
218       blink::WebLocalFrame* frame, unsigned identifier,
219       const blink::WebURLRequest::Priority& priority,
220       int intra_priority_value) {
221     // This is not implemented in RenderFrameImpl, so need to explicitly call
222     // into the base proxy.
223     base_proxy_->DidChangeResourcePriority(frame, identifier, priority,
224                                            intra_priority_value);
225     Base::didChangeResourcePriority(frame, identifier, priority,
226                                     intra_priority_value);
227   }
228 
didFinishResourceLoad(blink::WebLocalFrame * frame,unsigned identifier)229   virtual void didFinishResourceLoad(blink::WebLocalFrame* frame,
230                                      unsigned identifier) {
231     base_proxy_->DidFinishResourceLoad(frame, identifier);
232     Base::didFinishResourceLoad(frame, identifier);
233   }
234 
decidePolicyForNavigation(blink::WebLocalFrame * frame,blink::WebDataSource::ExtraData * extraData,const blink::WebURLRequest & request,blink::WebNavigationType type,blink::WebNavigationPolicy defaultPolicy,bool isRedirect)235   virtual blink::WebNavigationPolicy decidePolicyForNavigation(
236       blink::WebLocalFrame* frame, blink::WebDataSource::ExtraData* extraData,
237       const blink::WebURLRequest& request, blink::WebNavigationType type,
238       blink::WebNavigationPolicy defaultPolicy, bool isRedirect) {
239     blink::WebNavigationPolicy policy = base_proxy_->DecidePolicyForNavigation(
240         frame, extraData, request, type, defaultPolicy, isRedirect);
241     if (policy == blink::WebNavigationPolicyIgnore) return policy;
242 
243     return Base::decidePolicyForNavigation(frame, extraData, request, type,
244                                            defaultPolicy, isRedirect);
245   }
246 
willStartUsingPeerConnectionHandler(blink::WebLocalFrame * frame,blink::WebRTCPeerConnectionHandler * handler)247   virtual void willStartUsingPeerConnectionHandler(
248       blink::WebLocalFrame* frame,
249       blink::WebRTCPeerConnectionHandler* handler) {
250     // RenderFrameImpl::willStartUsingPeerConnectionHandler can not be mocked.
251     // See http://crbug/363285.
252   }
253 
userMediaClient()254   virtual blink::WebUserMediaClient* userMediaClient() {
255     return base_proxy_->GetUserMediaClient();
256   }
257 
258 
webMIDIClient()259   virtual blink::WebMIDIClient* webMIDIClient() {
260     return base_proxy_->GetWebMIDIClient();
261   }
262 
willCheckAndDispatchMessageEvent(blink::WebLocalFrame * sourceFrame,blink::WebFrame * targetFrame,blink::WebSecurityOrigin target,blink::WebDOMMessageEvent event)263   virtual bool willCheckAndDispatchMessageEvent(
264       blink::WebLocalFrame* sourceFrame, blink::WebFrame* targetFrame,
265       blink::WebSecurityOrigin target, blink::WebDOMMessageEvent event) {
266     if (base_proxy_->WillCheckAndDispatchMessageEvent(sourceFrame, targetFrame,
267                                                       target, event))
268       return true;
269     return Base::willCheckAndDispatchMessageEvent(sourceFrame, targetFrame,
270                                                   target, event);
271   }
272 
didStopLoading()273   virtual void didStopLoading() {
274     base_proxy_->DidStopLoading();
275     Base::didStopLoading();
276   }
277 
278  private:
279   virtual scoped_ptr<MediaStreamRendererFactory>
CreateRendererFactory()280   CreateRendererFactory() OVERRIDE {
281     return scoped_ptr<MediaStreamRendererFactory>(
282         new TestMediaStreamRendererFactory());
283   }
284 
285   WebTestProxyBase* base_proxy_;
286 
287   DISALLOW_COPY_AND_ASSIGN(WebFrameTestProxy);
288 };
289 
290 }  // namespace content
291 
292 #endif  // CONTENT_SHELL_RENDERER_TEST_RUNNER_WEB_FRAME_TEST_PROXY_H_
293