Home | History | Annotate | Download | only in test_runner
      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/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"
     16 
     17 namespace content {
     18 
     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 {
     23  public:
     24   WebFrameTestProxy(P p, R r) : Base(p, r), base_proxy_(NULL) {}
     25 
     26   virtual ~WebFrameTestProxy() {}
     27 
     28   void set_base_proxy(WebTestProxyBase* proxy) { base_proxy_ = proxy; }
     29 
     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);
     34     if (plugin)
     35       return plugin;
     36     return Base::createPlugin(frame, params);
     37   }
     38 
     39   virtual blink::WebScreenOrientationClient* webScreenOrientationClient() {
     40     return base_proxy_->GetScreenOrientationClientMock();
     41   }
     42 
     43   virtual void didAddMessageToConsole(const blink::WebConsoleMessage& message,
     44                                       const blink::WebString& source_name,
     45                                       unsigned source_line,
     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);
     50   }
     51 
     52   virtual bool canCreatePluginWithoutRenderer(
     53       const blink::WebString& mime_type) {
     54     using blink::WebString;
     55 
     56     const CR_DEFINE_STATIC_LOCAL(
     57         WebString, suffix, ("-can-create-without-renderer"));
     58     return mime_type.utf8().find(suffix.utf8()) != std::string::npos;
     59   }
     60 
     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);
     67   }
     68 
     69   virtual void didStartProvisionalLoad(blink::WebLocalFrame* frame,
     70                                        bool isTransitionNavigation) {
     71     base_proxy_->DidStartProvisionalLoad(frame);
     72     Base::didStartProvisionalLoad(frame, isTransitionNavigation);
     73   }
     74 
     75   virtual void didReceiveServerRedirectForProvisionalLoad(
     76       blink::WebLocalFrame* frame) {
     77     base_proxy_->DidReceiveServerRedirectForProvisionalLoad(frame);
     78     Base::didReceiveServerRedirectForProvisionalLoad(frame);
     79   }
     80 
     81   virtual void didFailProvisionalLoad(blink::WebLocalFrame* frame,
     82                                       const blink::WebURLError& error) {
     83     // If the test finished, don't notify the embedder of the failed load,
     84     // as we already destroyed the document loader.
     85     if (base_proxy_->DidFailProvisionalLoad(frame, error))
     86       return;
     87     Base::didFailProvisionalLoad(frame, error);
     88   }
     89 
     90   virtual void didCommitProvisionalLoad(
     91       blink::WebLocalFrame* frame,
     92       const blink::WebHistoryItem& item,
     93       blink::WebHistoryCommitType commit_type) {
     94     base_proxy_->DidCommitProvisionalLoad(frame, item, commit_type);
     95     Base::didCommitProvisionalLoad(frame, item, commit_type);
     96   }
     97 
     98   virtual void didReceiveTitle(blink::WebLocalFrame* frame,
     99                                const blink::WebString& title,
    100                                blink::WebTextDirection direction) {
    101     base_proxy_->DidReceiveTitle(frame, title, direction);
    102     Base::didReceiveTitle(frame, title, direction);
    103   }
    104 
    105   virtual void didChangeIcon(blink::WebLocalFrame* frame,
    106                              blink::WebIconURL::Type icon_type) {
    107     base_proxy_->DidChangeIcon(frame, icon_type);
    108     Base::didChangeIcon(frame, icon_type);
    109   }
    110 
    111   virtual void didFinishDocumentLoad(blink::WebLocalFrame* frame) {
    112     base_proxy_->DidFinishDocumentLoad(frame);
    113     Base::didFinishDocumentLoad(frame);
    114   }
    115 
    116   virtual void didHandleOnloadEvents(blink::WebLocalFrame* frame) {
    117     base_proxy_->DidHandleOnloadEvents(frame);
    118     Base::didHandleOnloadEvents(frame);
    119   }
    120 
    121   virtual void didFailLoad(blink::WebLocalFrame* frame,
    122                            const blink::WebURLError& error) {
    123     base_proxy_->DidFailLoad(frame, error);
    124     Base::didFailLoad(frame, error);
    125   }
    126 
    127   virtual void didFinishLoad(blink::WebLocalFrame* frame) {
    128     Base::didFinishLoad(frame);
    129     base_proxy_->DidFinishLoad(frame);
    130   }
    131 
    132   virtual blink::WebNotificationPresenter* notificationPresenter() {
    133     return base_proxy_->GetNotificationPresenter();
    134   }
    135 
    136   virtual void didChangeSelection(bool is_selection_empty) {
    137     base_proxy_->DidChangeSelection(is_selection_empty);
    138     Base::didChangeSelection(is_selection_empty);
    139   }
    140 
    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);
    146   }
    147 
    148   virtual void runModalAlertDialog(const blink::WebString& message) {
    149     base_proxy_->delegate_->PrintMessage(std::string("ALERT: ") +
    150                                          message.utf8().data() + "\n");
    151   }
    152 
    153   virtual bool runModalConfirmDialog(const blink::WebString& message) {
    154     base_proxy_->delegate_->PrintMessage(std::string("CONFIRM: ") +
    155                                          message.utf8().data() + "\n");
    156     return true;
    157   }
    158 
    159   virtual bool runModalPromptDialog(const blink::WebString& message,
    160                                     const blink::WebString& default_value,
    161                                     blink::WebString*) {
    162     base_proxy_->delegate_->PrintMessage(
    163         std::string("PROMPT: ") + message.utf8().data() + ", default text: " +
    164         default_value.utf8().data() + "\n");
    165     return true;
    166   }
    167 
    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();
    174   }
    175 
    176   virtual void showContextMenu(
    177       const blink::WebContextMenuData& context_menu_data) {
    178     base_proxy_->ShowContextMenu(Base::GetWebFrame(),
    179                                  context_menu_data);
    180     Base::showContextMenu(context_menu_data);
    181   }
    182 
    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);
    190   }
    191 
    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);
    198   }
    199 
    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);
    206   }
    207 
    208   virtual void didCreateDataSource(blink::WebLocalFrame* frame,
    209                                    blink::WebDataSource* ds) {
    210     Base::didCreateDataSource(frame, ds);
    211   }
    212 
    213   virtual void willSendRequest(blink::WebLocalFrame* frame,
    214                                unsigned identifier,
    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);
    219   }
    220 
    221   virtual void didReceiveResponse(blink::WebLocalFrame* frame,
    222                                   unsigned identifier,
    223                                   const blink::WebURLResponse& response) {
    224     base_proxy_->DidReceiveResponse(frame, identifier, response);
    225     Base::didReceiveResponse(frame, identifier, response);
    226   }
    227 
    228   virtual void didChangeResourcePriority(
    229       blink::WebLocalFrame* frame,
    230       unsigned identifier,
    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);
    239   }
    240 
    241   virtual void didFinishResourceLoad(blink::WebLocalFrame* frame,
    242                                      unsigned identifier) {
    243     base_proxy_->DidFinishResourceLoad(frame, identifier);
    244     Base::didFinishResourceLoad(frame, identifier);
    245   }
    246 
    247   virtual blink::WebNavigationPolicy decidePolicyForNavigation(
    248       const blink::WebFrameClient::NavigationPolicyInfo& info) {
    249     blink::WebNavigationPolicy policy = base_proxy_->DecidePolicyForNavigation(
    250         info);
    251     if (policy == blink::WebNavigationPolicyIgnore)
    252       return policy;
    253 
    254     return Base::decidePolicyForNavigation(info);
    255   }
    256 
    257   virtual void willStartUsingPeerConnectionHandler(
    258       blink::WebLocalFrame* frame,
    259       blink::WebRTCPeerConnectionHandler* handler) {
    260     // RenderFrameImpl::willStartUsingPeerConnectionHandler can not be mocked.
    261     // See http://crbug/363285.
    262   }
    263 
    264   virtual blink::WebUserMediaClient* userMediaClient() {
    265     return base_proxy_->GetUserMediaClient();
    266   }
    267 
    268   virtual blink::WebMIDIClient* webMIDIClient() {
    269     return base_proxy_->GetWebMIDIClient();
    270   }
    271 
    272   virtual bool willCheckAndDispatchMessageEvent(
    273       blink::WebLocalFrame* source_frame,
    274       blink::WebFrame* target_frame,
    275       blink::WebSecurityOrigin target,
    276       blink::WebDOMMessageEvent event) {
    277     if (base_proxy_->WillCheckAndDispatchMessageEvent(
    278             source_frame, target_frame, target, event))
    279       return true;
    280     return Base::willCheckAndDispatchMessageEvent(
    281         source_frame, target_frame, target, event);
    282   }
    283 
    284   virtual void didStopLoading() {
    285     base_proxy_->DidStopLoading();
    286     Base::didStopLoading();
    287   }
    288 
    289  private:
    290 #if defined(ENABLE_WEBRTC)
    291   virtual scoped_ptr<MediaStreamRendererFactory> CreateRendererFactory()
    292       OVERRIDE {
    293     return scoped_ptr<MediaStreamRendererFactory>(
    294         new TestMediaStreamRendererFactory());
    295   }
    296 #endif
    297 
    298   WebTestProxyBase* base_proxy_;
    299 
    300   DISALLOW_COPY_AND_ASSIGN(WebFrameTestProxy);
    301 };
    302 
    303 }  // namespace content
    304 
    305 #endif  // CONTENT_SHELL_RENDERER_TEST_RUNNER_WEB_FRAME_TEST_PROXY_H_
    306