summaryrefslogtreecommitdiffstats
path: root/content/browser/web_contents/test_web_contents.cc
diff options
context:
space:
mode:
Diffstat (limited to 'content/browser/web_contents/test_web_contents.cc')
-rw-r--r--content/browser/web_contents/test_web_contents.cc181
1 files changed, 181 insertions, 0 deletions
diff --git a/content/browser/web_contents/test_web_contents.cc b/content/browser/web_contents/test_web_contents.cc
new file mode 100644
index 0000000..36292b7
--- /dev/null
+++ b/content/browser/web_contents/test_web_contents.cc
@@ -0,0 +1,181 @@
+// 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.
+
+#include "content/browser/web_contents/test_web_contents.h"
+
+#include <utility>
+
+#include "content/browser/browser_url_handler_impl.h"
+#include "content/browser/renderer_host/render_view_host_impl.h"
+#include "content/browser/renderer_host/test_render_view_host.h"
+#include "content/browser/site_instance_impl.h"
+#include "content/browser/web_contents/navigation_entry_impl.h"
+#include "content/common/view_messages.h"
+#include "content/public/common/page_transition_types.h"
+#include "content/test/mock_render_process_host.h"
+#include "webkit/forms/password_form.h"
+#include "webkit/glue/webkit_glue.h"
+
+namespace content {
+
+TestWebContents::TestWebContents(BrowserContext* browser_context,
+ SiteInstance* instance)
+ : TabContents(browser_context, instance, MSG_ROUTING_NONE, NULL, NULL),
+ transition_cross_site(false),
+ delegate_view_override_(NULL),
+ expect_set_history_length_and_prune_(false),
+ expect_set_history_length_and_prune_site_instance_(NULL),
+ expect_set_history_length_and_prune_history_length_(0),
+ expect_set_history_length_and_prune_min_page_id_(-1) {
+}
+
+TestWebContents::~TestWebContents() {
+}
+
+RenderViewHost* TestWebContents::GetPendingRenderViewHost() const {
+ return render_manager_.pending_render_view_host_;
+}
+
+TestRenderViewHost* TestWebContents::pending_test_rvh() const {
+ return static_cast<TestRenderViewHost*>(GetPendingRenderViewHost());
+}
+
+void TestWebContents::TestDidNavigate(RenderViewHost* render_view_host,
+ int page_id,
+ const GURL& url,
+ PageTransition transition) {
+ TestDidNavigateWithReferrer(render_view_host,
+ page_id,
+ url,
+ Referrer(),
+ transition);
+}
+
+void TestWebContents::TestDidNavigateWithReferrer(
+ RenderViewHost* render_view_host,
+ int page_id,
+ const GURL& url,
+ const Referrer& referrer,
+ PageTransition transition) {
+ ViewHostMsg_FrameNavigate_Params params;
+
+ params.page_id = page_id;
+ params.url = url;
+ params.referrer = referrer;
+ params.transition = transition;
+ params.redirects = std::vector<GURL>();
+ params.should_update_history = false;
+ params.searchable_form_url = GURL();
+ params.searchable_form_encoding = std::string();
+ params.password_form = webkit::forms::PasswordForm();
+ params.security_info = std::string();
+ params.gesture = NavigationGestureUser;
+ params.was_within_same_page = false;
+ params.is_post = false;
+ params.content_state = webkit_glue::CreateHistoryStateForURL(GURL(url));
+
+ DidNavigate(render_view_host, params);
+}
+
+WebPreferences TestWebContents::TestGetWebkitPrefs() {
+ return GetWebkitPrefs();
+}
+
+bool TestWebContents::CreateRenderViewForRenderManager(
+ RenderViewHost* render_view_host) {
+ // This will go to a TestRenderViewHost.
+ static_cast<RenderViewHostImpl*>(
+ render_view_host)->CreateRenderView(string16(), -1);
+ return true;
+}
+
+WebContents* TestWebContents::Clone() {
+ TabContents* tc = new TestWebContents(
+ GetBrowserContext(),
+ SiteInstance::Create(GetBrowserContext()));
+ tc->GetControllerImpl().CopyStateFrom(controller_);
+ return tc;
+}
+
+void TestWebContents::NavigateAndCommit(const GURL& url) {
+ GetController().LoadURL(
+ url, Referrer(), PAGE_TRANSITION_LINK, std::string());
+ GURL loaded_url(url);
+ bool reverse_on_redirect = false;
+ BrowserURLHandlerImpl::GetInstance()->RewriteURLIfNecessary(
+ &loaded_url, GetBrowserContext(), &reverse_on_redirect);
+
+ // LoadURL created a navigation entry, now simulate the RenderView sending
+ // a notification that it actually navigated.
+ CommitPendingNavigation();
+}
+
+void TestWebContents::CommitPendingNavigation() {
+ // If we are doing a cross-site navigation, this simulates the current RVH
+ // notifying that it has unloaded so the pending RVH is resumed and can
+ // navigate.
+ ProceedWithCrossSiteNavigation();
+ RenderViewHost* old_rvh = render_manager_.current_host();
+ TestRenderViewHost* rvh =
+ static_cast<TestRenderViewHost*>(GetPendingRenderViewHost());
+ if (!rvh)
+ rvh = static_cast<TestRenderViewHost*>(old_rvh);
+
+ const NavigationEntry* entry = GetController().GetPendingEntry();
+ DCHECK(entry);
+ int page_id = entry->GetPageID();
+ if (page_id == -1) {
+ // It's a new navigation, assign a never-seen page id to it.
+ page_id = GetMaxPageIDForSiteInstance(rvh->GetSiteInstance()) + 1;
+ }
+ rvh->SendNavigate(page_id, entry->GetURL());
+
+ // Simulate the SwapOut_ACK that fires if you commit a cross-site navigation
+ // without making any network requests.
+ if (old_rvh != rvh)
+ static_cast<RenderViewHostImpl*>(old_rvh)->OnSwapOutACK();
+}
+
+int TestWebContents::GetNumberOfFocusCalls() {
+ NOTREACHED();
+ return 0;
+}
+
+void TestWebContents::ProceedWithCrossSiteNavigation() {
+ if (!GetPendingRenderViewHost())
+ return;
+ TestRenderViewHost* rvh = static_cast<TestRenderViewHost*>(
+ render_manager_.current_host());
+ rvh->SendShouldCloseACK(true);
+}
+
+RenderViewHostDelegate::View* TestWebContents::GetViewDelegate() {
+ if (delegate_view_override_)
+ return delegate_view_override_;
+ return TabContents::GetViewDelegate();
+}
+
+void TestWebContents::ExpectSetHistoryLengthAndPrune(
+ const SiteInstance* site_instance,
+ int history_length,
+ int32 min_page_id) {
+ expect_set_history_length_and_prune_ = true;
+ expect_set_history_length_and_prune_site_instance_ =
+ static_cast<const SiteInstanceImpl*>(site_instance);
+ expect_set_history_length_and_prune_history_length_ = history_length;
+ expect_set_history_length_and_prune_min_page_id_ = min_page_id;
+}
+
+void TestWebContents::SetHistoryLengthAndPrune(
+ const SiteInstance* site_instance, int history_length,
+ int32 min_page_id) {
+ EXPECT_TRUE(expect_set_history_length_and_prune_);
+ expect_set_history_length_and_prune_ = false;
+ EXPECT_EQ(expect_set_history_length_and_prune_site_instance_, site_instance);
+ EXPECT_EQ(expect_set_history_length_and_prune_history_length_,
+ history_length);
+ EXPECT_EQ(expect_set_history_length_and_prune_min_page_id_, min_page_id);
+}
+
+} // namespace content