[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 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 | |
jochen | 73e711c | 2015-06-03 10:01:46 | [diff] [blame] | 5 | #ifndef COMPONENTS_TEST_RUNNER_WEB_FRAME_TEST_PROXY_H_ |
| 6 | #define COMPONENTS_TEST_RUNNER_WEB_FRAME_TEST_PROXY_H_ |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 7 | |
| 8 | #include "base/basictypes.h" |
jochen | 73e711c | 2015-06-03 10:01:46 | [diff] [blame] | 9 | #include "components/test_runner/mock_screen_orientation_client.h" |
jochen | 73e711c | 2015-06-03 10:01:46 | [diff] [blame] | 10 | #include "components/test_runner/web_test_delegate.h" |
jochen | 746754c5 | 2015-06-05 16:40:41 | [diff] [blame] | 11 | #include "components/test_runner/web_test_interfaces.h" |
jochen | 73e711c | 2015-06-03 10:01:46 | [diff] [blame] | 12 | #include "components/test_runner/web_test_proxy.h" |
jochen | 746754c5 | 2015-06-05 16:40:41 | [diff] [blame] | 13 | #include "components/test_runner/web_test_runner.h" |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 14 | #include "third_party/WebKit/public/platform/WebString.h" |
| 15 | |
jochen | f5f3175 | 2015-06-03 12:06:34 | [diff] [blame] | 16 | namespace test_runner { |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 17 | |
| 18 | // Templetized wrapper around RenderFrameImpl objects, which implement |
| 19 | // the WebFrameClient interface. |
jochen | 664198b | 2015-06-25 14:13:00 | [diff] [blame] | 20 | template <class Base, typename P> |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 21 | class WebFrameTestProxy : public Base { |
| 22 | public: |
jochen | 664198b | 2015-06-25 14:13:00 | [diff] [blame] | 23 | explicit WebFrameTestProxy(P p) : Base(p), base_proxy_(NULL) {} |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 24 | |
| 25 | virtual ~WebFrameTestProxy() {} |
| 26 | |
| 27 | void set_base_proxy(WebTestProxyBase* proxy) { base_proxy_ = proxy; } |
| 28 | |
| 29 | // WebFrameClient implementation. |
| 30 | virtual blink::WebPlugin* createPlugin(blink::WebLocalFrame* frame, |
| 31 | const blink::WebPluginParams& params) { |
| 32 | blink::WebPlugin* plugin = base_proxy_->CreatePlugin(frame, params); |
[email protected] | 67ca3c6 | 2014-07-22 23:44:14 | [diff] [blame] | 33 | if (plugin) |
| 34 | return plugin; |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 35 | return Base::createPlugin(frame, params); |
| 36 | } |
| 37 | |
[email protected] | a2ca003 | 2014-06-27 02:28:08 | [diff] [blame] | 38 | virtual blink::WebScreenOrientationClient* webScreenOrientationClient() { |
| 39 | return base_proxy_->GetScreenOrientationClientMock(); |
| 40 | } |
| 41 | |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 42 | virtual void didAddMessageToConsole(const blink::WebConsoleMessage& message, |
[email protected] | 67ca3c6 | 2014-07-22 23:44:14 | [diff] [blame] | 43 | const blink::WebString& source_name, |
| 44 | unsigned source_line, |
| 45 | const blink::WebString& stack_trace) { |
| 46 | base_proxy_->DidAddMessageToConsole(message, source_name, source_line); |
| 47 | Base::didAddMessageToConsole( |
| 48 | message, source_name, source_line, stack_trace); |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 49 | } |
| 50 | |
| 51 | virtual bool canCreatePluginWithoutRenderer( |
[email protected] | 67ca3c6 | 2014-07-22 23:44:14 | [diff] [blame] | 52 | const blink::WebString& mime_type) { |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 53 | using blink::WebString; |
| 54 | |
[email protected] | 67ca3c6 | 2014-07-22 23:44:14 | [diff] [blame] | 55 | const CR_DEFINE_STATIC_LOCAL( |
| 56 | WebString, suffix, ("-can-create-without-renderer")); |
| 57 | return mime_type.utf8().find(suffix.utf8()) != std::string::npos; |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 58 | } |
| 59 | |
| 60 | virtual void loadURLExternally(blink::WebLocalFrame* frame, |
| 61 | const blink::WebURLRequest& request, |
| 62 | blink::WebNavigationPolicy policy, |
| 63 | const blink::WebString& suggested_name) { |
| 64 | base_proxy_->LoadURLExternally(frame, request, policy, suggested_name); |
| 65 | Base::loadURLExternally(frame, request, policy, suggested_name); |
| 66 | } |
| 67 | |
[email protected] | 0c3c54f | 2014-07-31 01:29:00 | [diff] [blame] | 68 | virtual void didStartProvisionalLoad(blink::WebLocalFrame* frame, |
japhet | 69a0630 | 2014-12-12 19:37:14 | [diff] [blame] | 69 | double triggeringEventTime) { |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 70 | base_proxy_->DidStartProvisionalLoad(frame); |
japhet | 69a0630 | 2014-12-12 19:37:14 | [diff] [blame] | 71 | Base::didStartProvisionalLoad( |
dglazkov | cd24f7e | 2015-05-18 20:00:00 | [diff] [blame] | 72 | frame, triggeringEventTime); |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 73 | } |
| 74 | |
| 75 | virtual void didReceiveServerRedirectForProvisionalLoad( |
| 76 | blink::WebLocalFrame* frame) { |
| 77 | base_proxy_->DidReceiveServerRedirectForProvisionalLoad(frame); |
| 78 | Base::didReceiveServerRedirectForProvisionalLoad(frame); |
| 79 | } |
| 80 | |
avi | 31b6fa4 | 2015-03-31 16:09:09 | [diff] [blame] | 81 | virtual void didFailProvisionalLoad( |
| 82 | blink::WebLocalFrame* frame, |
| 83 | const blink::WebURLError& error, |
| 84 | blink::WebHistoryCommitType commit_type) { |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 85 | // If the test finished, don't notify the embedder of the failed load, |
| 86 | // as we already destroyed the document loader. |
avi | 31b6fa4 | 2015-03-31 16:09:09 | [diff] [blame] | 87 | if (base_proxy_->DidFailProvisionalLoad(frame, error, commit_type)) |
[email protected] | 67ca3c6 | 2014-07-22 23:44:14 | [diff] [blame] | 88 | return; |
avi | 31b6fa4 | 2015-03-31 16:09:09 | [diff] [blame] | 89 | Base::didFailProvisionalLoad(frame, error, commit_type); |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 90 | } |
| 91 | |
| 92 | virtual void didCommitProvisionalLoad( |
[email protected] | 67ca3c6 | 2014-07-22 23:44:14 | [diff] [blame] | 93 | blink::WebLocalFrame* frame, |
| 94 | const blink::WebHistoryItem& item, |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 95 | blink::WebHistoryCommitType commit_type) { |
| 96 | base_proxy_->DidCommitProvisionalLoad(frame, item, commit_type); |
| 97 | Base::didCommitProvisionalLoad(frame, item, commit_type); |
| 98 | } |
| 99 | |
| 100 | virtual void didReceiveTitle(blink::WebLocalFrame* frame, |
| 101 | const blink::WebString& title, |
| 102 | blink::WebTextDirection direction) { |
| 103 | base_proxy_->DidReceiveTitle(frame, title, direction); |
| 104 | Base::didReceiveTitle(frame, title, direction); |
| 105 | } |
| 106 | |
| 107 | virtual void didChangeIcon(blink::WebLocalFrame* frame, |
[email protected] | 67ca3c6 | 2014-07-22 23:44:14 | [diff] [blame] | 108 | blink::WebIconURL::Type icon_type) { |
| 109 | base_proxy_->DidChangeIcon(frame, icon_type); |
| 110 | Base::didChangeIcon(frame, icon_type); |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 111 | } |
| 112 | |
japhet | 0ee02e6e5 | 2015-07-17 18:27:37 | [diff] [blame] | 113 | virtual void didFinishDocumentLoad(blink::WebLocalFrame* frame, bool empty) { |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 114 | base_proxy_->DidFinishDocumentLoad(frame); |
japhet | 0ee02e6e5 | 2015-07-17 18:27:37 | [diff] [blame] | 115 | Base::didFinishDocumentLoad(frame, empty); |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 116 | } |
| 117 | |
| 118 | virtual void didHandleOnloadEvents(blink::WebLocalFrame* frame) { |
| 119 | base_proxy_->DidHandleOnloadEvents(frame); |
| 120 | Base::didHandleOnloadEvents(frame); |
| 121 | } |
| 122 | |
| 123 | virtual void didFailLoad(blink::WebLocalFrame* frame, |
avi | 31b6fa4 | 2015-03-31 16:09:09 | [diff] [blame] | 124 | const blink::WebURLError& error, |
| 125 | blink::WebHistoryCommitType commit_type) { |
| 126 | base_proxy_->DidFailLoad(frame, error, commit_type); |
| 127 | Base::didFailLoad(frame, error, commit_type); |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 128 | } |
| 129 | |
| 130 | virtual void didFinishLoad(blink::WebLocalFrame* frame) { |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 131 | Base::didFinishLoad(frame); |
[email protected] | 3b397acb | 2014-06-05 21:13:23 | [diff] [blame] | 132 | base_proxy_->DidFinishLoad(frame); |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 133 | } |
| 134 | |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 135 | virtual void didChangeSelection(bool is_selection_empty) { |
| 136 | base_proxy_->DidChangeSelection(is_selection_empty); |
| 137 | Base::didChangeSelection(is_selection_empty); |
| 138 | } |
| 139 | |
| 140 | virtual blink::WebColorChooser* createColorChooser( |
| 141 | blink::WebColorChooserClient* client, |
| 142 | const blink::WebColor& initial_color, |
| 143 | const blink::WebVector<blink::WebColorSuggestion>& suggestions) { |
| 144 | return base_proxy_->CreateColorChooser(client, initial_color, suggestions); |
| 145 | } |
| 146 | |
| 147 | virtual void runModalAlertDialog(const blink::WebString& message) { |
jochen | 746754c5 | 2015-06-05 16:40:41 | [diff] [blame] | 148 | base_proxy_->GetDelegate()->PrintMessage(std::string("ALERT: ") + |
| 149 | message.utf8().data() + "\n"); |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 150 | } |
| 151 | |
| 152 | virtual bool runModalConfirmDialog(const blink::WebString& message) { |
jochen | 746754c5 | 2015-06-05 16:40:41 | [diff] [blame] | 153 | base_proxy_->GetDelegate()->PrintMessage(std::string("CONFIRM: ") + |
| 154 | message.utf8().data() + "\n"); |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 155 | return true; |
| 156 | } |
| 157 | |
| 158 | virtual bool runModalPromptDialog(const blink::WebString& message, |
[email protected] | 67ca3c6 | 2014-07-22 23:44:14 | [diff] [blame] | 159 | const blink::WebString& default_value, |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 160 | blink::WebString*) { |
jochen | 746754c5 | 2015-06-05 16:40:41 | [diff] [blame] | 161 | base_proxy_->GetDelegate()->PrintMessage( |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 162 | std::string("PROMPT: ") + message.utf8().data() + ", default text: " + |
[email protected] | 67ca3c6 | 2014-07-22 23:44:14 | [diff] [blame] | 163 | default_value.utf8().data() + "\n"); |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 164 | return true; |
| 165 | } |
| 166 | |
| 167 | virtual bool runModalBeforeUnloadDialog(bool is_reload, |
| 168 | const blink::WebString& message) { |
jochen | 746754c5 | 2015-06-05 16:40:41 | [diff] [blame] | 169 | base_proxy_->GetDelegate()->PrintMessage( |
| 170 | std::string("CONFIRM NAVIGATION: ") + message.utf8().data() + "\n"); |
| 171 | return !base_proxy_->GetInterfaces() |
| 172 | ->TestRunner() |
| 173 | ->ShouldStayOnPageAfterHandlingBeforeUnload(); |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 174 | } |
| 175 | |
| 176 | virtual void showContextMenu( |
[email protected] | 67ca3c6 | 2014-07-22 23:44:14 | [diff] [blame] | 177 | const blink::WebContextMenuData& context_menu_data) { |
jochen | ea29d8ad | 2015-07-02 15:15:01 | [diff] [blame] | 178 | base_proxy_->ShowContextMenu(context_menu_data); |
[email protected] | 67ca3c6 | 2014-07-22 23:44:14 | [diff] [blame] | 179 | Base::showContextMenu(context_menu_data); |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 180 | } |
| 181 | |
| 182 | virtual void didDetectXSS(blink::WebLocalFrame* frame, |
[email protected] | 67ca3c6 | 2014-07-22 23:44:14 | [diff] [blame] | 183 | const blink::WebURL& insecure_url, |
| 184 | bool did_block_entire_page) { |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 185 | // This is not implemented in RenderFrameImpl, so need to explicitly call |
| 186 | // into the base proxy. |
[email protected] | 67ca3c6 | 2014-07-22 23:44:14 | [diff] [blame] | 187 | base_proxy_->DidDetectXSS(frame, insecure_url, did_block_entire_page); |
| 188 | Base::didDetectXSS(frame, insecure_url, did_block_entire_page); |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 189 | } |
| 190 | |
| 191 | virtual void didDispatchPingLoader(blink::WebLocalFrame* frame, |
| 192 | const blink::WebURL& url) { |
| 193 | // This is not implemented in RenderFrameImpl, so need to explicitly call |
| 194 | // into the base proxy. |
| 195 | base_proxy_->DidDispatchPingLoader(frame, url); |
| 196 | Base::didDispatchPingLoader(frame, url); |
| 197 | } |
| 198 | |
| 199 | virtual void willRequestResource(blink::WebLocalFrame* frame, |
| 200 | const blink::WebCachedURLRequest& request) { |
| 201 | // This is not implemented in RenderFrameImpl, so need to explicitly call |
| 202 | // into the base proxy. |
| 203 | base_proxy_->WillRequestResource(frame, request); |
| 204 | Base::willRequestResource(frame, request); |
| 205 | } |
| 206 | |
| 207 | virtual void didCreateDataSource(blink::WebLocalFrame* frame, |
| 208 | blink::WebDataSource* ds) { |
| 209 | Base::didCreateDataSource(frame, ds); |
| 210 | } |
| 211 | |
[email protected] | 67ca3c6 | 2014-07-22 23:44:14 | [diff] [blame] | 212 | virtual void willSendRequest(blink::WebLocalFrame* frame, |
| 213 | unsigned identifier, |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 214 | blink::WebURLRequest& request, |
[email protected] | 67ca3c6 | 2014-07-22 23:44:14 | [diff] [blame] | 215 | const blink::WebURLResponse& redirect_response) { |
| 216 | Base::willSendRequest(frame, identifier, request, redirect_response); |
| 217 | base_proxy_->WillSendRequest(frame, identifier, request, redirect_response); |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 218 | } |
| 219 | |
| 220 | virtual void didReceiveResponse(blink::WebLocalFrame* frame, |
| 221 | unsigned identifier, |
| 222 | const blink::WebURLResponse& response) { |
| 223 | base_proxy_->DidReceiveResponse(frame, identifier, response); |
| 224 | Base::didReceiveResponse(frame, identifier, response); |
| 225 | } |
| 226 | |
| 227 | virtual void didChangeResourcePriority( |
[email protected] | 67ca3c6 | 2014-07-22 23:44:14 | [diff] [blame] | 228 | blink::WebLocalFrame* frame, |
| 229 | unsigned identifier, |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 230 | const blink::WebURLRequest::Priority& priority, |
| 231 | int intra_priority_value) { |
| 232 | // This is not implemented in RenderFrameImpl, so need to explicitly call |
| 233 | // into the base proxy. |
[email protected] | 67ca3c6 | 2014-07-22 23:44:14 | [diff] [blame] | 234 | base_proxy_->DidChangeResourcePriority( |
| 235 | frame, identifier, priority, intra_priority_value); |
| 236 | Base::didChangeResourcePriority( |
| 237 | frame, identifier, priority, intra_priority_value); |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 238 | } |
| 239 | |
| 240 | virtual void didFinishResourceLoad(blink::WebLocalFrame* frame, |
| 241 | unsigned identifier) { |
| 242 | base_proxy_->DidFinishResourceLoad(frame, identifier); |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 243 | } |
| 244 | |
| 245 | virtual blink::WebNavigationPolicy decidePolicyForNavigation( |
[email protected] | 0c3c54f | 2014-07-31 01:29:00 | [diff] [blame] | 246 | const blink::WebFrameClient::NavigationPolicyInfo& info) { |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 247 | blink::WebNavigationPolicy policy = base_proxy_->DecidePolicyForNavigation( |
[email protected] | 0c3c54f | 2014-07-31 01:29:00 | [diff] [blame] | 248 | info); |
[email protected] | 67ca3c6 | 2014-07-22 23:44:14 | [diff] [blame] | 249 | if (policy == blink::WebNavigationPolicyIgnore) |
| 250 | return policy; |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 251 | |
[email protected] | 0c3c54f | 2014-07-31 01:29:00 | [diff] [blame] | 252 | return Base::decidePolicyForNavigation(info); |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 253 | } |
| 254 | |
| 255 | virtual void willStartUsingPeerConnectionHandler( |
| 256 | blink::WebLocalFrame* frame, |
| 257 | blink::WebRTCPeerConnectionHandler* handler) { |
| 258 | // RenderFrameImpl::willStartUsingPeerConnectionHandler can not be mocked. |
| 259 | // See http://crbug/363285. |
| 260 | } |
| 261 | |
| 262 | virtual blink::WebUserMediaClient* userMediaClient() { |
| 263 | return base_proxy_->GetUserMediaClient(); |
| 264 | } |
| 265 | |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 266 | virtual bool willCheckAndDispatchMessageEvent( |
[email protected] | 67ca3c6 | 2014-07-22 23:44:14 | [diff] [blame] | 267 | blink::WebLocalFrame* source_frame, |
| 268 | blink::WebFrame* target_frame, |
| 269 | blink::WebSecurityOrigin target, |
| 270 | blink::WebDOMMessageEvent event) { |
| 271 | if (base_proxy_->WillCheckAndDispatchMessageEvent( |
| 272 | source_frame, target_frame, target, event)) |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 273 | return true; |
[email protected] | 67ca3c6 | 2014-07-22 23:44:14 | [diff] [blame] | 274 | return Base::willCheckAndDispatchMessageEvent( |
| 275 | source_frame, target_frame, target, event); |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 276 | } |
| 277 | |
| 278 | virtual void didStopLoading() { |
| 279 | base_proxy_->DidStopLoading(); |
| 280 | Base::didStopLoading(); |
| 281 | } |
| 282 | |
jochen | 56b35361 | 2015-07-02 15:57:53 | [diff] [blame] | 283 | virtual void postAccessibilityEvent(const blink::WebAXObject& object, |
| 284 | blink::WebAXEvent event) { |
| 285 | base_proxy_->PostAccessibilityEvent(object, event); |
| 286 | Base::postAccessibilityEvent(object, event); |
| 287 | } |
| 288 | |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 289 | private: |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 290 | WebTestProxyBase* base_proxy_; |
| 291 | |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 292 | DISALLOW_COPY_AND_ASSIGN(WebFrameTestProxy); |
| 293 | }; |
| 294 | |
jochen | f5f3175 | 2015-06-03 12:06:34 | [diff] [blame] | 295 | } // namespace test_runner |
[email protected] | a1640e4 | 2014-05-14 13:43:32 | [diff] [blame] | 296 | |
jochen | 73e711c | 2015-06-03 10:01:46 | [diff] [blame] | 297 | #endif // COMPONENTS_TEST_RUNNER_WEB_FRAME_TEST_PROXY_H_ |