1 // Copyright (c) 2012 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_view_host.h"
6
7 #include "base/memory/scoped_ptr.h"
8 #include "content/browser/dom_storage/dom_storage_context_wrapper.h"
9 #include "content/browser/dom_storage/session_storage_namespace_impl.h"
10 #include "content/browser/site_instance_impl.h"
11 #include "content/common/dom_storage/dom_storage_types.h"
12 #include "content/common/frame_messages.h"
13 #include "content/common/view_messages.h"
14 #include "content/public/browser/browser_context.h"
15 #include "content/public/browser/navigation_controller.h"
16 #include "content/public/browser/storage_partition.h"
17 #include "content/public/common/content_client.h"
18 #include "content/public/common/page_state.h"
19 #include "content/public/common/web_preferences.h"
20 #include "content/test/test_render_frame_host.h"
21 #include "content/test/test_web_contents.h"
22 #include "media/base/video_frame.h"
23 #include "ui/gfx/rect.h"
24
25 namespace content {
26
InitNavigateParams(FrameHostMsg_DidCommitProvisionalLoad_Params * params,int page_id,const GURL & url,ui::PageTransition transition)27 void InitNavigateParams(FrameHostMsg_DidCommitProvisionalLoad_Params* params,
28 int page_id,
29 const GURL& url,
30 ui::PageTransition transition) {
31 params->page_id = page_id;
32 params->url = url;
33 params->referrer = Referrer();
34 params->transition = transition;
35 params->redirects = std::vector<GURL>();
36 params->should_update_history = false;
37 params->searchable_form_url = GURL();
38 params->searchable_form_encoding = std::string();
39 params->security_info = std::string();
40 params->gesture = NavigationGestureUser;
41 params->was_within_same_page = false;
42 params->is_post = false;
43 params->page_state = PageState::CreateFromURL(url);
44 }
45
TestRenderWidgetHostView(RenderWidgetHost * rwh)46 TestRenderWidgetHostView::TestRenderWidgetHostView(RenderWidgetHost* rwh)
47 : rwh_(RenderWidgetHostImpl::From(rwh)),
48 is_showing_(false),
49 did_swap_compositor_frame_(false) {
50 rwh_->SetView(this);
51 }
52
~TestRenderWidgetHostView()53 TestRenderWidgetHostView::~TestRenderWidgetHostView() {
54 }
55
GetRenderWidgetHost() const56 RenderWidgetHost* TestRenderWidgetHostView::GetRenderWidgetHost() const {
57 return NULL;
58 }
59
GetLastScrollOffset() const60 gfx::Vector2dF TestRenderWidgetHostView::GetLastScrollOffset() const {
61 return gfx::Vector2dF();
62 }
63
GetNativeView() const64 gfx::NativeView TestRenderWidgetHostView::GetNativeView() const {
65 return NULL;
66 }
67
GetNativeViewId() const68 gfx::NativeViewId TestRenderWidgetHostView::GetNativeViewId() const {
69 return 0;
70 }
71
GetNativeViewAccessible()72 gfx::NativeViewAccessible TestRenderWidgetHostView::GetNativeViewAccessible() {
73 return NULL;
74 }
75
GetTextInputClient()76 ui::TextInputClient* TestRenderWidgetHostView::GetTextInputClient() {
77 return &text_input_client_;
78 }
79
HasFocus() const80 bool TestRenderWidgetHostView::HasFocus() const {
81 return true;
82 }
83
IsSurfaceAvailableForCopy() const84 bool TestRenderWidgetHostView::IsSurfaceAvailableForCopy() const {
85 return true;
86 }
87
Show()88 void TestRenderWidgetHostView::Show() {
89 is_showing_ = true;
90 }
91
Hide()92 void TestRenderWidgetHostView::Hide() {
93 is_showing_ = false;
94 }
95
IsShowing()96 bool TestRenderWidgetHostView::IsShowing() {
97 return is_showing_;
98 }
99
RenderProcessGone(base::TerminationStatus status,int error_code)100 void TestRenderWidgetHostView::RenderProcessGone(base::TerminationStatus status,
101 int error_code) {
102 delete this;
103 }
104
Destroy()105 void TestRenderWidgetHostView::Destroy() { delete this; }
106
GetViewBounds() const107 gfx::Rect TestRenderWidgetHostView::GetViewBounds() const {
108 return gfx::Rect();
109 }
110
CopyFromCompositingSurface(const gfx::Rect & src_subrect,const gfx::Size & dst_size,CopyFromCompositingSurfaceCallback & callback,const SkColorType color_type)111 void TestRenderWidgetHostView::CopyFromCompositingSurface(
112 const gfx::Rect& src_subrect,
113 const gfx::Size& dst_size,
114 CopyFromCompositingSurfaceCallback& callback,
115 const SkColorType color_type) {
116 callback.Run(false, SkBitmap());
117 }
118
CopyFromCompositingSurfaceToVideoFrame(const gfx::Rect & src_subrect,const scoped_refptr<media::VideoFrame> & target,const base::Callback<void (bool)> & callback)119 void TestRenderWidgetHostView::CopyFromCompositingSurfaceToVideoFrame(
120 const gfx::Rect& src_subrect,
121 const scoped_refptr<media::VideoFrame>& target,
122 const base::Callback<void(bool)>& callback) {
123 callback.Run(false);
124 }
125
CanCopyToVideoFrame() const126 bool TestRenderWidgetHostView::CanCopyToVideoFrame() const {
127 return false;
128 }
129
AcceleratedSurfaceInitialized(int host_id,int route_id)130 void TestRenderWidgetHostView::AcceleratedSurfaceInitialized(int host_id,
131 int route_id) {
132 }
133
AcceleratedSurfaceBuffersSwapped(const GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params & params,int gpu_host_id)134 void TestRenderWidgetHostView::AcceleratedSurfaceBuffersSwapped(
135 const GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params& params,
136 int gpu_host_id) {
137 }
138
AcceleratedSurfacePostSubBuffer(const GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params & params,int gpu_host_id)139 void TestRenderWidgetHostView::AcceleratedSurfacePostSubBuffer(
140 const GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params& params,
141 int gpu_host_id) {
142 }
143
AcceleratedSurfaceSuspend()144 void TestRenderWidgetHostView::AcceleratedSurfaceSuspend() {
145 }
146
HasAcceleratedSurface(const gfx::Size & desired_size)147 bool TestRenderWidgetHostView::HasAcceleratedSurface(
148 const gfx::Size& desired_size) {
149 return false;
150 }
151
152 #if defined(OS_MACOSX)
153
SetActive(bool active)154 void TestRenderWidgetHostView::SetActive(bool active) {
155 // <viettrungluu@gmail.com>: Do I need to do anything here?
156 }
157
SupportsSpeech() const158 bool TestRenderWidgetHostView::SupportsSpeech() const {
159 return false;
160 }
161
SpeakSelection()162 void TestRenderWidgetHostView::SpeakSelection() {
163 }
164
IsSpeaking() const165 bool TestRenderWidgetHostView::IsSpeaking() const {
166 return false;
167 }
168
StopSpeaking()169 void TestRenderWidgetHostView::StopSpeaking() {
170 }
171
PostProcessEventForPluginIme(const NativeWebKeyboardEvent & event)172 bool TestRenderWidgetHostView::PostProcessEventForPluginIme(
173 const NativeWebKeyboardEvent& event) {
174 return false;
175 }
176
177 #endif
178
GetBoundsInRootWindow()179 gfx::Rect TestRenderWidgetHostView::GetBoundsInRootWindow() {
180 return gfx::Rect();
181 }
182
OnSwapCompositorFrame(uint32 output_surface_id,scoped_ptr<cc::CompositorFrame> frame)183 void TestRenderWidgetHostView::OnSwapCompositorFrame(
184 uint32 output_surface_id,
185 scoped_ptr<cc::CompositorFrame> frame) {
186 did_swap_compositor_frame_ = true;
187 }
188
189
GetCompositingSurface()190 gfx::GLSurfaceHandle TestRenderWidgetHostView::GetCompositingSurface() {
191 return gfx::GLSurfaceHandle();
192 }
193
LockMouse()194 bool TestRenderWidgetHostView::LockMouse() {
195 return false;
196 }
197
UnlockMouse()198 void TestRenderWidgetHostView::UnlockMouse() {
199 }
200
201 #if defined(OS_WIN)
SetParentNativeViewAccessible(gfx::NativeViewAccessible accessible_parent)202 void TestRenderWidgetHostView::SetParentNativeViewAccessible(
203 gfx::NativeViewAccessible accessible_parent) {
204 }
205
GetParentForWindowlessPlugin() const206 gfx::NativeViewId TestRenderWidgetHostView::GetParentForWindowlessPlugin()
207 const {
208 return 0;
209 }
210 #endif
211
TestRenderViewHost(SiteInstance * instance,RenderViewHostDelegate * delegate,RenderWidgetHostDelegate * widget_delegate,int routing_id,int main_frame_routing_id,bool swapped_out)212 TestRenderViewHost::TestRenderViewHost(
213 SiteInstance* instance,
214 RenderViewHostDelegate* delegate,
215 RenderWidgetHostDelegate* widget_delegate,
216 int routing_id,
217 int main_frame_routing_id,
218 bool swapped_out)
219 : RenderViewHostImpl(instance,
220 delegate,
221 widget_delegate,
222 routing_id,
223 main_frame_routing_id,
224 swapped_out,
225 false /* hidden */),
226 render_view_created_(false),
227 delete_counter_(NULL),
228 simulate_fetch_via_proxy_(false),
229 simulate_history_list_was_cleared_(false),
230 contents_mime_type_("text/html"),
231 opener_route_id_(MSG_ROUTING_NONE),
232 main_render_frame_host_(NULL) {
233 // TestRenderWidgetHostView installs itself into this->view_ in its
234 // constructor, and deletes itself when TestRenderWidgetHostView::Destroy() is
235 // called.
236 new TestRenderWidgetHostView(this);
237 }
238
~TestRenderViewHost()239 TestRenderViewHost::~TestRenderViewHost() {
240 if (delete_counter_)
241 ++*delete_counter_;
242 }
243
CreateRenderView(const base::string16 & frame_name,int opener_route_id,int proxy_route_id,int32 max_page_id,bool window_was_created_with_opener)244 bool TestRenderViewHost::CreateRenderView(
245 const base::string16& frame_name,
246 int opener_route_id,
247 int proxy_route_id,
248 int32 max_page_id,
249 bool window_was_created_with_opener) {
250 DCHECK(!render_view_created_);
251 render_view_created_ = true;
252 opener_route_id_ = opener_route_id;
253 return true;
254 }
255
IsRenderViewLive() const256 bool TestRenderViewHost::IsRenderViewLive() const {
257 return render_view_created_;
258 }
259
IsFullscreen() const260 bool TestRenderViewHost::IsFullscreen() const {
261 return RenderViewHostImpl::IsFullscreen();
262 }
263
SendNavigate(int page_id,const GURL & url)264 void TestRenderViewHost::SendNavigate(int page_id, const GURL& url) {
265 main_render_frame_host_->SendNavigate(page_id, url);
266 }
267
SendFailedNavigate(int page_id,const GURL & url)268 void TestRenderViewHost::SendFailedNavigate(int page_id, const GURL& url) {
269 main_render_frame_host_->SendFailedNavigate(page_id, url);
270 }
271
SendNavigateWithTransition(int page_id,const GURL & url,ui::PageTransition transition)272 void TestRenderViewHost::SendNavigateWithTransition(
273 int page_id,
274 const GURL& url,
275 ui::PageTransition transition) {
276 main_render_frame_host_->SendNavigateWithTransition(page_id, url, transition);
277 }
278
SendNavigateWithOriginalRequestURL(int page_id,const GURL & url,const GURL & original_request_url)279 void TestRenderViewHost::SendNavigateWithOriginalRequestURL(
280 int page_id,
281 const GURL& url,
282 const GURL& original_request_url) {
283 main_render_frame_host_->SendNavigateWithOriginalRequestURL(
284 page_id, url, original_request_url);
285 }
286
SendNavigateWithFile(int page_id,const GURL & url,const base::FilePath & file_path)287 void TestRenderViewHost::SendNavigateWithFile(
288 int page_id,
289 const GURL& url,
290 const base::FilePath& file_path) {
291 main_render_frame_host_->SendNavigateWithFile(page_id, url, file_path);
292 }
293
SendNavigateWithParams(FrameHostMsg_DidCommitProvisionalLoad_Params * params)294 void TestRenderViewHost::SendNavigateWithParams(
295 FrameHostMsg_DidCommitProvisionalLoad_Params* params) {
296 main_render_frame_host_->SendNavigateWithParams(params);
297 }
298
SendNavigateWithTransitionAndResponseCode(int page_id,const GURL & url,ui::PageTransition transition,int response_code)299 void TestRenderViewHost::SendNavigateWithTransitionAndResponseCode(
300 int page_id,
301 const GURL& url,
302 ui::PageTransition transition,
303 int response_code) {
304 main_render_frame_host_->SendNavigateWithTransitionAndResponseCode(
305 page_id, url, transition, response_code);
306 }
307
SendNavigateWithParameters(int page_id,const GURL & url,ui::PageTransition transition,const GURL & original_request_url,int response_code,const base::FilePath * file_path_for_history_item)308 void TestRenderViewHost::SendNavigateWithParameters(
309 int page_id,
310 const GURL& url,
311 ui::PageTransition transition,
312 const GURL& original_request_url,
313 int response_code,
314 const base::FilePath* file_path_for_history_item) {
315
316 main_render_frame_host_->SendNavigateWithParameters(
317 page_id, url, transition, original_request_url, response_code,
318 file_path_for_history_item, std::vector<GURL>());
319 }
320
SendBeforeUnloadACK(bool proceed)321 void TestRenderViewHost::SendBeforeUnloadACK(bool proceed) {
322 // TODO(creis): Move this whole method to TestRenderFrameHost.
323 base::TimeTicks now = base::TimeTicks::Now();
324 main_render_frame_host_->OnBeforeUnloadACK(proceed, now, now);
325 }
326
SetContentsMimeType(const std::string & mime_type)327 void TestRenderViewHost::SetContentsMimeType(const std::string& mime_type) {
328 contents_mime_type_ = mime_type;
329 main_render_frame_host_->set_contents_mime_type(mime_type);
330 }
331
SimulateSwapOutACK()332 void TestRenderViewHost::SimulateSwapOutACK() {
333 OnSwappedOut(false);
334 }
335
SimulateWasHidden()336 void TestRenderViewHost::SimulateWasHidden() {
337 WasHidden();
338 }
339
SimulateWasShown()340 void TestRenderViewHost::SimulateWasShown() {
341 WasShown(ui::LatencyInfo());
342 }
343
TestOnStartDragging(const DropData & drop_data)344 void TestRenderViewHost::TestOnStartDragging(
345 const DropData& drop_data) {
346 blink::WebDragOperationsMask drag_operation = blink::WebDragOperationEvery;
347 DragEventSourceInfo event_info;
348 OnStartDragging(drop_data, drag_operation, SkBitmap(), gfx::Vector2d(),
349 event_info);
350 }
351
TestOnUpdateStateWithFile(int page_id,const base::FilePath & file_path)352 void TestRenderViewHost::TestOnUpdateStateWithFile(
353 int page_id,
354 const base::FilePath& file_path) {
355 OnUpdateState(page_id,
356 PageState::CreateForTesting(GURL("http://www.google.com"),
357 false,
358 "data",
359 &file_path));
360 }
361
set_simulate_fetch_via_proxy(bool proxy)362 void TestRenderViewHost::set_simulate_fetch_via_proxy(bool proxy) {
363 simulate_fetch_via_proxy_ = proxy;
364 }
365
set_simulate_history_list_was_cleared(bool cleared)366 void TestRenderViewHost::set_simulate_history_list_was_cleared(bool cleared) {
367 simulate_history_list_was_cleared_ = cleared;
368 main_render_frame_host_->set_simulate_history_list_was_cleared(cleared);
369 }
370
RenderViewHostImplTestHarness()371 RenderViewHostImplTestHarness::RenderViewHostImplTestHarness() {
372 std::vector<ui::ScaleFactor> scale_factors;
373 scale_factors.push_back(ui::SCALE_FACTOR_100P);
374 scoped_set_supported_scale_factors_.reset(
375 new ui::test::ScopedSetSupportedScaleFactors(scale_factors));
376 }
377
~RenderViewHostImplTestHarness()378 RenderViewHostImplTestHarness::~RenderViewHostImplTestHarness() {
379 }
380
test_rvh()381 TestRenderViewHost* RenderViewHostImplTestHarness::test_rvh() {
382 return contents()->GetRenderViewHost();
383 }
384
pending_test_rvh()385 TestRenderViewHost* RenderViewHostImplTestHarness::pending_test_rvh() {
386 return contents()->GetPendingMainFrame() ?
387 contents()->GetPendingMainFrame()->GetRenderViewHost() :
388 NULL;
389 }
390
active_test_rvh()391 TestRenderViewHost* RenderViewHostImplTestHarness::active_test_rvh() {
392 return static_cast<TestRenderViewHost*>(active_rvh());
393 }
394
main_test_rfh()395 TestRenderFrameHost* RenderViewHostImplTestHarness::main_test_rfh() {
396 return contents()->GetMainFrame();
397 }
398
contents()399 TestWebContents* RenderViewHostImplTestHarness::contents() {
400 return static_cast<TestWebContents*>(web_contents());
401 }
402
403 } // namespace content
404