Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / content / test / test_render_frame_host.cc
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