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#ifndef CONTENT_TEST_TEST_WEB_CONTENTS_H_ 6#define CONTENT_TEST_TEST_WEB_CONTENTS_H_ 7 8#include "content/browser/web_contents/web_contents_impl.h" 9#include "content/public/common/page_transition_types.h" 10#include "content/public/test/web_contents_tester.h" 11#include "webkit/common/webpreferences.h" 12 13class SiteInstanceImpl; 14 15namespace content { 16 17class RenderViewHost; 18class TestRenderViewHost; 19class WebContentsTester; 20 21// Subclass WebContentsImpl to ensure it creates TestRenderViewHosts 22// and does not do anything involving views. 23class TestWebContents : public WebContentsImpl, public WebContentsTester { 24 public: 25 virtual ~TestWebContents(); 26 27 static TestWebContents* Create(BrowserContext* browser_context, 28 SiteInstance* instance); 29 30 // WebContentsTester implementation. 31 virtual void CommitPendingNavigation() OVERRIDE; 32 virtual RenderViewHost* GetPendingRenderViewHost() const OVERRIDE; 33 virtual void NavigateAndCommit(const GURL& url) OVERRIDE; 34 virtual void TestSetIsLoading(bool value) OVERRIDE; 35 virtual void ProceedWithCrossSiteNavigation() OVERRIDE; 36 virtual void TestDidNavigate(RenderViewHost* render_view_host, 37 int page_id, 38 const GURL& url, 39 PageTransition transition) OVERRIDE; 40 virtual void TestDidNavigateWithReferrer(RenderViewHost* render_view_host, 41 int page_id, 42 const GURL& url, 43 const Referrer& referrer, 44 PageTransition transition) OVERRIDE; 45 virtual WebPreferences TestGetWebkitPrefs() OVERRIDE; 46 47 TestRenderViewHost* pending_test_rvh() const; 48 49 // State accessor. 50 bool cross_navigation_pending() { 51 return render_manager_.cross_navigation_pending_; 52 } 53 54 // Overrides WebContentsImpl::ShouldTransitionCrossSite so that we can test 55 // both alternatives without using command-line switches. 56 bool ShouldTransitionCrossSite() { return transition_cross_site; } 57 58 // Prevent interaction with views. 59 virtual bool CreateRenderViewForRenderManager( 60 RenderViewHost* render_view_host, int opener_route_id) OVERRIDE; 61 virtual void UpdateRenderViewSizeForRenderManager() OVERRIDE {} 62 63 // Returns a clone of this TestWebContents. The returned object is also a 64 // TestWebContents. The caller owns the returned object. 65 virtual WebContents* Clone() OVERRIDE; 66 67 // Set by individual tests. 68 bool transition_cross_site; 69 70 // Allow mocking of the RenderViewHostDelegateView. 71 virtual RenderViewHostDelegateView* GetDelegateView() OVERRIDE; 72 void set_delegate_view(RenderViewHostDelegateView* view) { 73 delegate_view_override_ = view; 74 } 75 76 // Allows us to simulate this tab having an opener. 77 void SetOpener(TestWebContents* opener); 78 79 // Allows us to simulate that a contents was created via CreateNewWindow. 80 void AddPendingContents(TestWebContents* contents); 81 82 // Establish expected arguments for |SetHistoryLengthAndPrune()|. When 83 // |SetHistoryLengthAndPrune()| is called, the arguments are compared 84 // with the expected arguments specified here. 85 void ExpectSetHistoryLengthAndPrune(const SiteInstance* site_instance, 86 int history_length, 87 int32 min_page_id); 88 89 // Compares the arguments passed in with the expected arguments passed in 90 // to |ExpectSetHistoryLengthAndPrune()|. 91 virtual void SetHistoryLengthAndPrune(const SiteInstance* site_instance, 92 int history_length, 93 int32 min_page_id) OVERRIDE; 94 95 void TestDidFinishLoad(int64 frame_id, const GURL& url, bool is_main_frame); 96 void TestDidFailLoadWithError(int64 frame_id, 97 const GURL& url, 98 bool is_main_frame, 99 int error_code, 100 const string16& error_description); 101 102 protected: 103 // The deprecated WebContentsTester still needs to subclass this. 104 explicit TestWebContents(BrowserContext* browser_context); 105 106 private: 107 // WebContentsImpl overrides 108 virtual void CreateNewWindow( 109 int route_id, 110 int main_frame_route_id, 111 const ViewHostMsg_CreateWindow_Params& params, 112 SessionStorageNamespace* session_storage_namespace) OVERRIDE; 113 virtual void CreateNewWidget(int route_id, 114 WebKit::WebPopupType popup_type) OVERRIDE; 115 virtual void CreateNewFullscreenWidget(int route_id) OVERRIDE; 116 virtual void ShowCreatedWindow(int route_id, 117 WindowOpenDisposition disposition, 118 const gfx::Rect& initial_pos, 119 bool user_gesture) OVERRIDE; 120 virtual void ShowCreatedWidget(int route_id, 121 const gfx::Rect& initial_pos) OVERRIDE; 122 virtual void ShowCreatedFullscreenWidget(int route_id) OVERRIDE; 123 124 125 RenderViewHostDelegateView* delegate_view_override_; 126 127 // Expectations for arguments of |SetHistoryLengthAndPrune()|. 128 bool expect_set_history_length_and_prune_; 129 scoped_refptr<const SiteInstanceImpl> 130 expect_set_history_length_and_prune_site_instance_; 131 int expect_set_history_length_and_prune_history_length_; 132 int32 expect_set_history_length_and_prune_min_page_id_; 133}; 134 135} // namespace content 136 137#endif // CONTENT_TEST_TEST_WEB_CONTENTS_H_ 138