Home | History | Annotate | Download | only in test
      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 #include "content/test/test_render_frame_host.h"
      6 
      7 #include "content/browser/frame_host/frame_tree.h"
      8 #include "content/browser/frame_host/render_frame_host_delegate.h"
      9 #include "content/common/frame_messages.h"
     10 #include "content/test/test_render_view_host.h"
     11 #include "net/base/load_flags.h"
     12 #include "third_party/WebKit/public/web/WebPageVisibilityState.h"
     13 #include "ui/base/page_transition_types.h"
     14 
     15 namespace content {
     16 
     17 TestRenderFrameHostCreationObserver::TestRenderFrameHostCreationObserver(
     18     WebContents* web_contents)
     19     : WebContentsObserver(web_contents), last_created_frame_(NULL) {
     20 }
     21 
     22 TestRenderFrameHostCreationObserver::~TestRenderFrameHostCreationObserver() {
     23 }
     24 
     25 void TestRenderFrameHostCreationObserver::RenderFrameCreated(
     26     RenderFrameHost* render_frame_host) {
     27   last_created_frame_ = render_frame_host;
     28 }
     29 
     30 TestRenderFrameHost::TestRenderFrameHost(RenderViewHostImpl* render_view_host,
     31                                          RenderFrameHostDelegate* delegate,
     32                                          FrameTree* frame_tree,
     33                                          FrameTreeNode* frame_tree_node,
     34                                          int routing_id,
     35                                          bool is_swapped_out)
     36     : RenderFrameHostImpl(render_view_host,
     37                           delegate,
     38                           frame_tree,
     39                           frame_tree_node,
     40                           routing_id,
     41                           is_swapped_out),
     42       child_creation_observer_(delegate ? delegate->GetAsWebContents() : NULL),
     43       contents_mime_type_("text/html"),
     44       simulate_history_list_was_cleared_(false) {
     45   // Allow TestRenderViewHosts to easily access their main frame RFH.
     46   if (frame_tree_node == frame_tree->root()) {
     47     static_cast<TestRenderViewHost*>(render_view_host)->
     48         set_main_render_frame_host(this);
     49   }
     50 }
     51 
     52 TestRenderFrameHost::~TestRenderFrameHost() {}
     53 
     54 TestRenderViewHost* TestRenderFrameHost::GetRenderViewHost() {
     55   return static_cast<TestRenderViewHost*>(
     56       RenderFrameHostImpl::GetRenderViewHost());
     57 }
     58 
     59 TestRenderFrameHost* TestRenderFrameHost::AppendChild(
     60     const std::string& frame_name) {
     61   OnCreateChildFrame(GetProcess()->GetNextRoutingID(), frame_name);
     62   return static_cast<TestRenderFrameHost*>(
     63       child_creation_observer_.last_created_frame());
     64 }
     65 
     66 void TestRenderFrameHost::SendNavigateWithTransition(
     67     int page_id,
     68     const GURL& url,
     69     ui::PageTransition transition) {
     70   SendNavigateWithTransitionAndResponseCode(page_id, url, transition, 200);
     71 }
     72 
     73 void TestRenderFrameHost::SendNavigate(int page_id, const GURL& url) {
     74   SendNavigateWithTransition(page_id, url, ui::PAGE_TRANSITION_LINK);
     75 }
     76 
     77 void TestRenderFrameHost::SendFailedNavigate(int page_id, const GURL& url) {
     78   SendNavigateWithTransitionAndResponseCode(
     79       page_id, url, ui::PAGE_TRANSITION_RELOAD, 500);
     80 }
     81 
     82 void TestRenderFrameHost::SendNavigateWithTransitionAndResponseCode(
     83     int page_id,
     84     const GURL& url, ui::PageTransition transition,
     85     int response_code) {
     86   // DidStartProvisionalLoad may delete the pending entry that holds |url|,
     87   // so we keep a copy of it to use in SendNavigateWithParameters.
     88   GURL url_copy(url);
     89   OnDidStartProvisionalLoadForFrame(url_copy, false);
     90   SendNavigateWithParameters(page_id, url_copy, transition, url_copy,
     91       response_code, 0, std::vector<GURL>());
     92 }
     93 
     94 void TestRenderFrameHost::SendNavigateWithOriginalRequestURL(
     95     int page_id,
     96     const GURL& url,
     97     const GURL& original_request_url) {
     98   OnDidStartProvisionalLoadForFrame(url, false);
     99   SendNavigateWithParameters(page_id, url, ui::PAGE_TRANSITION_LINK,
    100       original_request_url, 200, 0, std::vector<GURL>());
    101 }
    102 
    103 void TestRenderFrameHost::SendNavigateWithFile(
    104     int page_id,
    105     const GURL& url,
    106     const base::FilePath& file_path) {
    107   SendNavigateWithParameters(page_id, url, ui::PAGE_TRANSITION_LINK, url, 200,
    108       &file_path, std::vector<GURL>());
    109 }
    110 
    111 void TestRenderFrameHost::SendNavigateWithParams(
    112     FrameHostMsg_DidCommitProvisionalLoad_Params* params) {
    113   FrameHostMsg_DidCommitProvisionalLoad msg(GetRoutingID(), *params);
    114   OnDidCommitProvisionalLoad(msg);
    115 }
    116 
    117 void TestRenderFrameHost::SendNavigateWithRedirects(
    118     int page_id,
    119     const GURL& url,
    120     const std::vector<GURL>& redirects) {
    121   SendNavigateWithParameters(
    122       page_id, url, ui::PAGE_TRANSITION_LINK, url, 200, 0, redirects);
    123 }
    124 
    125 void TestRenderFrameHost::SendNavigateWithParameters(
    126     int page_id,
    127     const GURL& url,
    128     ui::PageTransition transition,
    129     const GURL& original_request_url,
    130     int response_code,
    131     const base::FilePath* file_path_for_history_item,
    132     const std::vector<GURL>& redirects) {
    133   FrameHostMsg_DidCommitProvisionalLoad_Params params;
    134   params.page_id = page_id;
    135   params.url = url;
    136   params.referrer = Referrer();
    137   params.transition = transition;
    138   params.redirects = redirects;
    139   params.should_update_history = true;
    140   params.searchable_form_url = GURL();
    141   params.searchable_form_encoding = std::string();
    142   params.security_info = std::string();
    143   params.gesture = NavigationGestureUser;
    144   params.contents_mime_type = contents_mime_type_;
    145   params.is_post = false;
    146   params.http_status_code = response_code;
    147   params.socket_address.set_host("2001:db8::1");
    148   params.socket_address.set_port(80);
    149   params.history_list_was_cleared = simulate_history_list_was_cleared_;
    150   params.original_request_url = original_request_url;
    151 
    152   url::Replacements<char> replacements;
    153   replacements.ClearRef();
    154   params.was_within_same_page = transition != ui::PAGE_TRANSITION_RELOAD &&
    155       transition != ui::PAGE_TRANSITION_TYPED &&
    156       url.ReplaceComponents(replacements) ==
    157           GetLastCommittedURL().ReplaceComponents(replacements);
    158 
    159   params.page_state = PageState::CreateForTesting(
    160       url,
    161       false,
    162       file_path_for_history_item ? "data" : NULL,
    163       file_path_for_history_item);
    164 
    165   FrameHostMsg_DidCommitProvisionalLoad msg(GetRoutingID(), params);
    166   OnDidCommitProvisionalLoad(msg);
    167 }
    168 
    169 void TestRenderFrameHost::SendBeginNavigationWithURL(const GURL& url) {
    170   FrameHostMsg_BeginNavigation_Params params;
    171   params.method = "GET";
    172   params.url = url;
    173   params.referrer = Referrer(GURL(), blink::WebReferrerPolicyDefault);
    174   params.load_flags = net::LOAD_NORMAL;
    175   params.has_user_gesture = false;
    176   params.transition_type = ui::PAGE_TRANSITION_LINK;
    177   params.should_replace_current_entry = false;
    178   params.allow_download = true;
    179   OnBeginNavigation(params);
    180 }
    181 
    182 void TestRenderFrameHost::DidDisownOpener() {
    183   OnDidDisownOpener();
    184 }
    185 
    186 }  // namespace content
    187