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