diff options
| author | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-04 14:45:50 +0000 |
|---|---|---|
| committer | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-04 14:45:50 +0000 |
| commit | b1e3f20a987493e568ec36fdae0b1bebb816833e (patch) | |
| tree | ddf406197a133615dd9663a23606ef0d6d1c163c /content/public/test/test_renderer_host.h | |
| parent | efec4f974d787da702c1564518903f3847db42f0 (diff) | |
| download | chromium_src-b1e3f20a987493e568ec36fdae0b1bebb816833e.zip chromium_src-b1e3f20a987493e568ec36fdae0b1bebb816833e.tar.gz chromium_src-b1e3f20a987493e568ec36fdae0b1bebb816833e.tar.bz2 | |
Move the rest of the content\test headers that are used by embedders to content\public\test. This way we can enforce that internal content headers don't leak to embedders.
BUG=98716
TBR=phajdan.jr
Review URL: https://chromiumcodereview.appspot.com/10483003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@140287 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/public/test/test_renderer_host.h')
| -rw-r--r-- | content/public/test/test_renderer_host.h | 187 |
1 files changed, 187 insertions, 0 deletions
diff --git a/content/public/test/test_renderer_host.h b/content/public/test/test_renderer_host.h new file mode 100644 index 0000000..3203544 --- /dev/null +++ b/content/public/test/test_renderer_host.h @@ -0,0 +1,187 @@ +// 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_PUBLIC_TEST_TEST_RENDERER_HOST_H_ +#define CONTENT_PUBLIC_TEST_TEST_RENDERER_HOST_H_ +#pragma once + +#include "base/memory/scoped_ptr.h" +#include "base/message_loop.h" +#include "content/public/browser/render_view_host.h" +#include "content/public/common/page_transition_types.h" +#include "testing/gtest/include/gtest/gtest.h" + +#if defined(USE_AURA) +#include "ui/aura/test/aura_test_helper.h" +#endif + +namespace aura { +namespace test { +class AuraTestHelper; +} +} + +namespace content { + +class BrowserContext; +class MockRenderProcessHost; +class MockRenderProcessHostFactory; +class NavigationController; +class RenderProcessHostFactory; +class RenderViewHostDelegate; +class TestRenderViewHostFactory; +class WebContents; + +// An interface and utility for driving tests of RenderViewHost. +class RenderViewHostTester { + public: + // Retrieves the RenderViewHostTester that drives the specified + // RenderViewHost. The RenderViewHost must have been created while + // RenderViewHost testing was enabled; use a + // RenderViewHostTestEnabler instance (see below) to do this. + static RenderViewHostTester* For(RenderViewHost* host); + + // This removes the need to expose + // RenderViewHostImpl::set_send_accessibility_updated_notifications() + // outside of content. + static void EnableAccessibilityUpdatedNotifications(RenderViewHost* host); + + // If the given WebContentsImpl has a pending RVH, returns it, otherwise NULL. + static RenderViewHost* GetPendingForController( + NavigationController* controller); + + // This removes the need to expose + // RenderViewHostImpl::is_swapped_out() outside of content. + // + // This is safe to call on any RenderViewHost, not just ones + // constructed while a RenderViewHostTestEnabler is in play. + static bool IsRenderViewHostSwappedOut(RenderViewHost* rvh); + + // Calls the RenderViewHosts' private OnMessageReceived function with the + // given message. + static bool TestOnMessageReceived(RenderViewHost* rvh, + const IPC::Message& msg); + + virtual ~RenderViewHostTester() {} + + // Gives tests access to RenderViewHostImpl::CreateRenderView. + virtual bool CreateRenderView(const string16& frame_name, + int opener_route_id, + int32 max_page_id, + const std::string& embedder_channel_name, + int embedder_container_id) = 0; + + // Calls OnMsgNavigate on the RenderViewHost with the given information, + // setting the rest of the parameters in the message to the "typical" values. + // This is a helper function for simulating the most common types of loads. + virtual void SendNavigate(int page_id, const GURL& url) = 0; + + // Calls OnMsgNavigate on the RenderViewHost with the given information, + // including a custom PageTransition. Sets the rest of the + // parameters in the message to the "typical" values. This is a helper + // function for simulating the most common types of loads. + virtual void SendNavigateWithTransition(int page_id, const GURL& url, + PageTransition transition) = 0; + + // Calls OnMsgShouldCloseACK on the RenderViewHost with the given parameter. + virtual void SendShouldCloseACK(bool proceed) = 0; + + // If set, future loads will have |mime_type| set as the mime type. + // If not set, the mime type will default to "text/html". + virtual void SetContentsMimeType(const std::string& mime_type) = 0; + + // Simulates the SwapOut_ACK that fires if you commit a cross-site + // navigation without making any network requests. + virtual void SimulateSwapOutACK() = 0; + + // Makes the WasHidden/WasRestored calls to the RenderWidget that + // tell it it has been hidden or restored from having been hidden. + virtual void SimulateWasHidden() = 0; + virtual void SimulateWasRestored() = 0; +}; + +// You can instantiate only one class like this at a time. During its +// lifetime, RenderViewHost objects created may be used via +// RenderViewHostTester. +class RenderViewHostTestEnabler { + public: + RenderViewHostTestEnabler(); + ~RenderViewHostTestEnabler(); + + private: + DISALLOW_COPY_AND_ASSIGN(RenderViewHostTestEnabler); + friend class RenderViewHostTestHarness; + + scoped_ptr<MockRenderProcessHostFactory> rph_factory_; + scoped_ptr<TestRenderViewHostFactory> rvh_factory_; +}; + +// RenderViewHostTestHarness --------------------------------------------------- +class RenderViewHostTestHarness : public testing::Test { + public: + RenderViewHostTestHarness(); + virtual ~RenderViewHostTestHarness(); + + NavigationController& controller(); + virtual WebContents* web_contents(); + RenderViewHost* rvh(); + RenderViewHost* pending_rvh(); + RenderViewHost* active_rvh(); + BrowserContext* browser_context(); + MockRenderProcessHost* process(); + + // Frees the current WebContents for tests that want to test destruction. + void DeleteContents(); + + // Sets the current WebContents for tests that want to alter it. Takes + // ownership of the WebContents passed. + virtual void SetContents(WebContents* contents); + + // Creates a new test-enabled WebContents. Ownership passes to the + // caller. + WebContents* CreateTestWebContents(); + + // Cover for |contents()->NavigateAndCommit(url)|. See + // WebContentsTester::NavigateAndCommit for details. + void NavigateAndCommit(const GURL& url); + + // Simulates a reload of the current page. + void Reload(); + + protected: + // testing::Test + virtual void SetUp() OVERRIDE; + virtual void TearDown() OVERRIDE; + +#if defined(USE_AURA) + aura::RootWindow* root_window() { return aura_test_helper_->root_window(); } +#endif + + // Replaces the RPH being used. + void SetRenderProcessHostFactory(RenderProcessHostFactory* factory); + + // This browser context will be created in SetUp if it has not already been + // created. This allows tests to override the browser context if they so + // choose in their own SetUp function before calling the base class's (us) + // SetUp(). + scoped_ptr<BrowserContext> browser_context_; + + MessageLoopForUI message_loop_; + + private: + // It is important not to use this directly in the implementation as + // web_contents() and SetContents() are virtual and may be + // overridden by subclasses. + scoped_ptr<WebContents> contents_; +#if defined(USE_AURA) + scoped_ptr<aura::test::AuraTestHelper> aura_test_helper_; +#endif + RenderViewHostTestEnabler rvh_test_enabler_; + + DISALLOW_COPY_AND_ASSIGN(RenderViewHostTestHarness); +}; + +} // namespace content + +#endif // CONTENT_PUBLIC_TEST_TEST_RENDERER_HOST_H_ |
