// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CONTENT_TEST_TEST_WEB_CONTENTS_H_
#define CONTENT_TEST_TEST_WEB_CONTENTS_H_
#include "content/browser/web_contents/web_contents_impl.h"
#include "content/public/common/page_transition_types.h"
#include "content/public/test/web_contents_tester.h"
#include "webkit/common/webpreferences.h"
class SiteInstanceImpl;
namespace content {
class RenderViewHost;
class TestRenderViewHost;
class WebContentsTester;
// Subclass WebContentsImpl to ensure it creates TestRenderViewHosts
// and does not do anything involving views.
class TestWebContents : public WebContentsImpl, public WebContentsTester {
public:
virtual ~TestWebContents();
static TestWebContents* Create(BrowserContext* browser_context,
SiteInstance* instance);
// WebContentsTester implementation.
virtual void CommitPendingNavigation() OVERRIDE;
virtual RenderViewHost* GetPendingRenderViewHost() const OVERRIDE;
virtual void NavigateAndCommit(const GURL& url) OVERRIDE;
virtual void TestSetIsLoading(bool value) OVERRIDE;
virtual void ProceedWithCrossSiteNavigation() OVERRIDE;
virtual void TestDidNavigate(RenderViewHost* render_view_host,
int page_id,
const GURL& url,
PageTransition transition) OVERRIDE;
virtual void TestDidNavigateWithReferrer(RenderViewHost* render_view_host,
int page_id,
const GURL& url,
const Referrer& referrer,
PageTransition transition) OVERRIDE;
virtual WebPreferences TestGetWebkitPrefs() OVERRIDE;
TestRenderViewHost* pending_test_rvh() const;
// State accessor.
bool cross_navigation_pending() {
return GetRenderManager()->cross_navigation_pending_;
}
// Overrides WebContentsImpl::ShouldTransitionCrossSite so that we can test
// both alternatives without using command-line switches.
bool ShouldTransitionCrossSite() { return transition_cross_site; }
// Prevent interaction with views.
virtual bool CreateRenderViewForRenderManager(
RenderViewHost* render_view_host, int opener_route_id) OVERRIDE;
virtual void UpdateRenderViewSizeForRenderManager() OVERRIDE {}
// Returns a clone of this TestWebContents. The returned object is also a
// TestWebContents. The caller owns the returned object.
virtual WebContents* Clone() OVERRIDE;
// Set by individual tests.
bool transition_cross_site;
// Allow mocking of the RenderViewHostDelegateView.
virtual RenderViewHostDelegateView* GetDelegateView() OVERRIDE;
void set_delegate_view(RenderViewHostDelegateView* view) {
delegate_view_override_ = view;
}
// Allows us to simulate this tab having an opener.
void SetOpener(TestWebContents* opener);
// Allows us to simulate that a contents was created via CreateNewWindow.
void AddPendingContents(TestWebContents* contents);
// Establish expected arguments for |SetHistoryLengthAndPrune()|. When
// |SetHistoryLengthAndPrune()| is called, the arguments are compared
// with the expected arguments specified here.
void ExpectSetHistoryLengthAndPrune(const SiteInstance* site_instance,
int history_length,
int32 min_page_id);
// Compares the arguments passed in with the expected arguments passed in
// to |ExpectSetHistoryLengthAndPrune()|.
virtual void SetHistoryLengthAndPrune(const SiteInstance* site_instance,
int history_length,
int32 min_page_id) OVERRIDE;
void TestDidFinishLoad(int64 frame_id, const GURL& url, bool is_main_frame);
void TestDidFailLoadWithError(int64 frame_id,
const GURL& url,
bool is_main_frame,
int error_code,
const base::string16& error_description);
protected:
// The deprecated WebContentsTester still needs to subclass this.
explicit TestWebContents(BrowserContext* browser_context);
private:
// WebContentsImpl overrides
virtual void CreateNewWindow(
int render_process_id,
int route_id,
int main_frame_route_id,
const ViewHostMsg_CreateWindow_Params& params,
SessionStorageNamespace* session_storage_namespace) OVERRIDE;
virtual void CreateNewWidget(int render_process_id,
int route_id,
blink::WebPopupType popup_type) OVERRIDE;
virtual void CreateNewFullscreenWidget(int render_process_id,
int route_id) OVERRIDE;
virtual void ShowCreatedWindow(int route_id,
WindowOpenDisposition disposition,
const gfx::Rect& initial_pos,
bool user_gesture) OVERRIDE;
virtual void ShowCreatedWidget(int route_id,
const gfx::Rect& initial_pos) OVERRIDE;
virtual void ShowCreatedFullscreenWidget(int route_id) OVERRIDE;
RenderViewHostDelegateView* delegate_view_override_;
// Expectations for arguments of |SetHistoryLengthAndPrune()|.
bool expect_set_history_length_and_prune_;
scoped_refptr<const SiteInstanceImpl>
expect_set_history_length_and_prune_site_instance_;
int expect_set_history_length_and_prune_history_length_;
int32 expect_set_history_length_and_prune_min_page_id_;
};
} // namespace content
#endif // CONTENT_TEST_TEST_WEB_CONTENTS_H_