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 13 class SiteInstanceImpl; 14 15 namespace content { 16 17 class RenderViewHost; 18 class TestRenderViewHost; 19 class WebContentsTester; 20 21 // Subclass WebContentsImpl to ensure it creates TestRenderViewHosts 22 // and does not do anything involving views. 23 class 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 GetRenderManager()->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 base::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 render_process_id, 110 int route_id, 111 int main_frame_route_id, 112 const ViewHostMsg_CreateWindow_Params& params, 113 SessionStorageNamespace* session_storage_namespace) OVERRIDE; 114 virtual void CreateNewWidget(int render_process_id, 115 int route_id, 116 blink::WebPopupType popup_type) OVERRIDE; 117 virtual void CreateNewFullscreenWidget(int render_process_id, 118 int route_id) OVERRIDE; 119 virtual void ShowCreatedWindow(int route_id, 120 WindowOpenDisposition disposition, 121 const gfx::Rect& initial_pos, 122 bool user_gesture) OVERRIDE; 123 virtual void ShowCreatedWidget(int route_id, 124 const gfx::Rect& initial_pos) OVERRIDE; 125 virtual void ShowCreatedFullscreenWidget(int route_id) OVERRIDE; 126 127 128 RenderViewHostDelegateView* delegate_view_override_; 129 130 // Expectations for arguments of |SetHistoryLengthAndPrune()|. 131 bool expect_set_history_length_and_prune_; 132 scoped_refptr<const SiteInstanceImpl> 133 expect_set_history_length_and_prune_site_instance_; 134 int expect_set_history_length_and_prune_history_length_; 135 int32 expect_set_history_length_and_prune_min_page_id_; 136 }; 137 138 } // namespace content 139 140 #endif // CONTENT_TEST_TEST_WEB_CONTENTS_H_ 141