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