Index: content/browser/renderer_host/test_render_view_host.h |
diff --git a/content/browser/renderer_host/test_render_view_host.h b/content/browser/renderer_host/test_render_view_host.h |
index 79251dafddc1eeb142d603276ccdc514d5cbf69b..354b0fe6b491f4c7d5f35869af955f2e8c77e84c 100644 |
--- a/content/browser/renderer_host/test_render_view_host.h |
+++ b/content/browser/renderer_host/test_render_view_host.h |
@@ -8,14 +8,11 @@ |
#include "base/basictypes.h" |
#include "base/gtest_prod_util.h" |
-#include "base/message_loop.h" |
#include "build/build_config.h" |
-#include "content/browser/renderer_host/mock_render_process_host.h" |
-#include "content/browser/renderer_host/render_view_host_factory.h" |
#include "content/browser/renderer_host/render_view_host_impl.h" |
#include "content/browser/renderer_host/render_widget_host_view_base.h" |
#include "content/public/common/page_transition_types.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
+#include "content/test/test_renderer_host.h" |
// This file provides a testing framework for mocking out the RenderProcessHost |
// layer. It allows you to test RenderViewHost, TabContents, |
@@ -24,19 +21,7 @@ |
// |
// To use, derive your test base class from RenderViewHostTestHarness. |
-#if defined(USE_AURA) |
-namespace aura { |
-class RootWindow; |
-namespace test { |
-class TestStackingClient; |
-} |
-} |
-#endif |
- |
namespace content { |
-class BrowserContext; |
-class NavigationController; |
-class RenderProcessHostFactory; |
class SiteInstance; |
} |
@@ -44,7 +29,6 @@ namespace gfx { |
class Rect; |
} |
-class TestTabContents; |
struct ViewHostMsg_FrameNavigate_Params; |
namespace content { |
@@ -197,37 +181,56 @@ class TestRenderWidgetHostView : public RenderWidgetHostViewBase { |
// TODO(brettw) this should use a TestTabContents which should be generalized |
// from the TabContents test. We will probably also need that class' version of |
// CreateRenderViewForRenderManager when more complicate tests start using this. |
-class TestRenderViewHost : public RenderViewHostImpl { |
+// |
+// Note that users outside of content must use this class by getting |
+// the separate content::RenderViewHostTester interface via |
+// RenderViewHostTester::For(rvh) on the RenderViewHost they want to |
+// drive tests on. |
+// |
+// Users within content may directly static_cast from a |
+// RenderViewHost* to a TestRenderViewHost*. |
+// |
+// The reasons we do it this way rather than extending the parallel |
+// inheritance hierarchy we have for RenderWidgetHost/RenderViewHost |
+// vs. RenderWidgetHostImpl/RenderViewHostImpl are: |
+// |
+// a) Extending the parallel class hierarchy further would require |
+// more classes to use virtual inheritance. This is a complexity that |
+// is better to avoid, especially when it would be introduced in the |
+// production code solely to facilitate testing code. |
+// |
+// b) While users outside of content only need to drive tests on a |
+// RenderViewHost, content needs a test version of the full |
+// RenderViewHostImpl so that it can test all methods on that concrete |
+// class (e.g. overriding a method such as |
+// RenderViewHostImpl::CreateRenderView). This would have complicated |
+// the dual class hierarchy even further. |
+// |
+// The reason we do it this way instead of using composition is |
+// similar to (b) above, essentially it gets very tricky. By using |
+// the split interface we avoid complexity within content and maintain |
+// reasonable utility for embedders. |
+class TestRenderViewHost |
+ : public RenderViewHostImpl, |
+ public RenderViewHostTester { |
public: |
- // If the given TabContnets has a pending RVH, returns it, otherwise NULL. |
- static TestRenderViewHost* GetPendingForController( |
- NavigationController* controller); |
- |
TestRenderViewHost(SiteInstance* instance, |
RenderViewHostDelegate* delegate, |
int routing_id); |
virtual ~TestRenderViewHost(); |
- // Testing functions --------------------------------------------------------- |
- |
- // Calls the RenderViewHosts' private OnMessageReceived function with the |
- // given message. |
- bool TestOnMessageReceived(const IPC::Message& msg); |
- |
- // 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. |
- void SendNavigate(int page_id, const GURL& url); |
- |
- // 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. |
- void SendNavigateWithTransition(int page_id, const GURL& url, |
- PageTransition transition); |
- |
- // Calls OnMsgShouldCloseACK on the RenderViewHost with the given parameter. |
- void SendShouldCloseACK(bool proceed); |
+ // RenderViewHostTester implementation. Note that CreateRenderView |
+ // is not specified since it is synonymous with the one from |
+ // RenderViewHostImpl, see below. |
+ virtual void SendNavigate(int page_id, const GURL& url) OVERRIDE; |
+ virtual void SendNavigateWithTransition(int page_id, const GURL& url, |
+ PageTransition transition) OVERRIDE; |
+ virtual void SendShouldCloseACK(bool proceed) OVERRIDE; |
+ virtual void SetContentsMimeType(const std::string& mime_type) OVERRIDE; |
+ virtual void SimulateSwapOutACK() OVERRIDE; |
+ virtual void SimulateWasHidden() OVERRIDE; |
+ virtual void SimulateWasRestored() OVERRIDE; |
+ virtual bool TestOnMessageReceived(const IPC::Message& msg) OVERRIDE; |
void TestOnMsgStartDragging(const WebDropData& drop_data); |
@@ -266,25 +269,12 @@ class TestRenderViewHost : public RenderViewHostImpl { |
// False by default. |
void set_simulate_fetch_via_proxy(bool proxy); |
- // If set, future loads will have |mime_type| set as the mime type. |
- // If not set, the mime type will default to "text/html". |
- void set_contents_mime_type(const std::string& mime_type); |
- |
// RenderViewHost overrides -------------------------------------------------- |
virtual bool CreateRenderView(const string16& frame_name, |
int32 max_page_id) OVERRIDE; |
virtual bool IsRenderViewLive() const OVERRIDE; |
- // This removes the need to expose |
- // RenderViewHostImpl::is_swapped_out() outside of content. |
- static bool IsRenderViewHostSwappedOut(RenderViewHost* rwh); |
- |
- // This removes the need to expose |
- // RenderViewHostImpl::set_send_accessibility_updated_notifications() |
- // outside of content. |
- static void EnableAccessibilityUpdatedNotifications(RenderViewHost* rwh); |
- |
private: |
FRIEND_TEST_ALL_PREFIXES(RenderViewHostTest, FilterNavigate); |
@@ -298,7 +288,7 @@ class TestRenderViewHost : public RenderViewHostImpl { |
// See set_simulate_fetch_via_proxy() above. |
bool simulate_fetch_via_proxy_; |
- // See set_contents_mime_type() above. |
+ // See SetContentsMimeType() above. |
std::string contents_mime_type_; |
DISALLOW_COPY_AND_ASSIGN(TestRenderViewHost); |
@@ -308,97 +298,20 @@ class TestRenderViewHost : public RenderViewHostImpl { |
#pragma warning(pop) |
#endif |
-} // namespace content |
- |
-// TestRenderViewHostFactory --------------------------------------------------- |
- |
-// Manages creation of the RenderViewHosts using our special subclass. This |
-// automatically registers itself when it goes in scope, and unregisters itself |
-// when it goes out of scope. Since you can't have more than one factory |
-// registered at a time, you can only have one of these objects at a time. |
-class TestRenderViewHostFactory : public RenderViewHostFactory { |
+// Adds methods to get straight at the impl classes. |
+class RenderViewHostImplTestHarness : public RenderViewHostTestHarness { |
public: |
- explicit TestRenderViewHostFactory( |
- content::RenderProcessHostFactory* rph_factory); |
- virtual ~TestRenderViewHostFactory(); |
- |
- virtual void set_render_process_host_factory( |
- content::RenderProcessHostFactory* rph_factory); |
- virtual content::RenderViewHost* CreateRenderViewHost( |
- content::SiteInstance* instance, |
- content::RenderViewHostDelegate* delegate, |
- int routing_id, |
- content::SessionStorageNamespace* session_storage) OVERRIDE; |
+ RenderViewHostImplTestHarness(); |
+ virtual ~RenderViewHostImplTestHarness(); |
- private: |
- // This is a bit of a hack. With the current design of the site instances / |
- // browsing instances, it's difficult to pass a RenderProcessHostFactory |
- // around properly. |
- // |
- // Instead, we set it right before we create a new RenderViewHost, which |
- // happens before the RenderProcessHost is created. This way, the instance |
- // has the correct factory and creates our special RenderProcessHosts. |
- content::RenderProcessHostFactory* render_process_host_factory_; |
- |
- DISALLOW_COPY_AND_ASSIGN(TestRenderViewHostFactory); |
-}; |
- |
-// RenderViewHostTestHarness --------------------------------------------------- |
- |
-class RenderViewHostTestHarness : public testing::Test { |
- public: |
- RenderViewHostTestHarness(); |
- virtual ~RenderViewHostTestHarness(); |
- |
- content::NavigationController& controller(); |
- virtual TestTabContents* contents(); |
- content::TestRenderViewHost* rvh(); |
- content::TestRenderViewHost* pending_rvh(); |
- content::TestRenderViewHost* active_rvh(); |
- content::BrowserContext* browser_context(); |
- MockRenderProcessHost* process(); |
- |
- // Frees the current tab contents for tests that want to test destruction. |
- void DeleteContents(); |
- |
- // Sets the current tab contents for tests that want to alter it. Takes |
- // ownership of the TestTabContents passed. |
- virtual void SetContents(TestTabContents* contents); |
- |
- // Creates a new TestTabContents. Ownership passes to the caller. |
- TestTabContents* CreateTestTabContents(); |
- |
- // Cover for |contents()->NavigateAndCommit(url)|. See |
- // TestTabContents::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; |
- |
- // 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<content::BrowserContext> browser_context_; |
- |
- MessageLoopForUI message_loop_; |
- |
- MockRenderProcessHostFactory rph_factory_; |
- TestRenderViewHostFactory rvh_factory_; |
+ TestRenderViewHost* test_rvh(); |
+ TestRenderViewHost* pending_test_rvh(); |
+ TestRenderViewHost* active_test_rvh(); |
private: |
- scoped_ptr<TestTabContents> contents_; |
-#if defined(USE_AURA) |
- scoped_ptr<aura::RootWindow> root_window_; |
- scoped_ptr<aura::test::TestStackingClient> test_stacking_client_; |
-#endif |
- |
- DISALLOW_COPY_AND_ASSIGN(RenderViewHostTestHarness); |
+ DISALLOW_COPY_AND_ASSIGN(RenderViewHostImplTestHarness); |
}; |
+} // namespace content |
+ |
#endif // CONTENT_BROWSER_RENDERER_HOST_TEST_RENDER_VIEW_HOST_H_ |