Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1599)

Unified Diff: ppapi/proxy/ppapi_proxy_test.h

Issue 7189045: Make o.o.p. proxy handle PPP_Instance versions 0.4 and 0.5. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: merged Created 9 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ppapi/proxy/plugin_var_tracker.h ('k') | ppapi/proxy/ppapi_proxy_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ppapi/proxy/ppapi_proxy_test.h
diff --git a/ppapi/proxy/ppapi_proxy_test.h b/ppapi/proxy/ppapi_proxy_test.h
index 2c1ae1fb3299b20acdb53f0444bf773e158d1dbb..5067c965a1c367ee6fdd9ac049d75c1fa6ccb333 100644
--- a/ppapi/proxy/ppapi_proxy_test.h
+++ b/ppapi/proxy/ppapi_proxy_test.h
@@ -5,7 +5,10 @@
#include <map>
#include <string>
+#include "base/message_loop.h"
#include "base/memory/scoped_ptr.h"
+#include "base/synchronization/waitable_event.h"
+#include "base/threading/thread.h"
#include "ipc/ipc_test_sink.h"
#include "ppapi/c/pp_instance.h"
#include "ppapi/proxy/host_dispatcher.h"
@@ -17,12 +20,12 @@
namespace pp {
namespace proxy {
-// Base class for plugin and host tests. Tests will not use this directly.
-// Instead, use the Plugin or HostProxyTest.
-class ProxyTestBase : public testing::Test {
+// Base class for plugin and host test harnesses. Tests will not use this
+// directly. Instead, use the PluginProxyTest, HostProxyTest, or TwoWayTest.
+class ProxyTestHarnessBase {
public:
- ProxyTestBase();
- virtual ~ProxyTestBase();
+ ProxyTestHarnessBase();
+ virtual ~ProxyTestHarnessBase();
PP_Module pp_module() const { return pp_module_; }
PP_Instance pp_instance() const { return pp_instance_; }
@@ -31,6 +34,17 @@ class ProxyTestBase : public testing::Test {
// Returns either the plugin or host dispatcher, depending on the test.
virtual Dispatcher* GetDispatcher() = 0;
+ // Set up the harness using an IPC::TestSink to capture messages.
+ virtual void SetUpHarness() = 0;
+
+ // Set up the harness using a real IPC channel.
+ virtual void SetUpHarnessWithChannel(const IPC::ChannelHandle& channel_handle,
+ base::MessageLoopProxy* ipc_message_loop,
+ base::WaitableEvent* shutdown_event,
+ bool is_client) = 0;
+
+ virtual void TearDownHarness() = 0;
+
// Implementation of GetInterface for the dispatcher. This will
// return NULL for all interfaces unless one is registered by calling
// RegisterTestInterface();
@@ -58,44 +72,165 @@ class ProxyTestBase : public testing::Test {
};
// Test harness for the plugin side of the proxy.
-class PluginProxyTest : public ProxyTestBase {
+class PluginProxyTestHarness : public ProxyTestHarnessBase {
public:
- PluginProxyTest();
- virtual ~PluginProxyTest();
+ PluginProxyTestHarness();
+ virtual ~PluginProxyTestHarness();
PluginDispatcher* plugin_dispatcher() { return plugin_dispatcher_.get(); }
PluginResourceTracker& resource_tracker() { return resource_tracker_; }
PluginVarTracker& var_tracker() { return var_tracker_; }
- // ProxyTestBase implementation.
+ // ProxyTestHarnessBase implementation.
virtual Dispatcher* GetDispatcher();
-
- // testing::Test implementation.
- virtual void SetUp();
- virtual void TearDown();
+ virtual void SetUpHarness();
+ virtual void SetUpHarnessWithChannel(const IPC::ChannelHandle& channel_handle,
+ base::MessageLoopProxy* ipc_message_loop,
+ base::WaitableEvent* shutdown_event,
+ bool is_client);
+ virtual void TearDownHarness();
+
+ class PluginDelegateMock : public PluginDispatcher::PluginDelegate {
+ public:
+ PluginDelegateMock() : ipc_message_loop_(NULL), shutdown_event_() {}
+ virtual ~PluginDelegateMock() {}
+
+ void Init(base::MessageLoopProxy* ipc_message_loop,
+ base::WaitableEvent* shutdown_event) {
+ ipc_message_loop_ = ipc_message_loop;
+ shutdown_event_ = shutdown_event;
+ }
+
+ // ProxyChannel::Delegate implementation.
+ virtual base::MessageLoopProxy* GetIPCMessageLoop();
+ virtual base::WaitableEvent* GetShutdownEvent();
+
+ // PluginDispatcher::PluginDelegate implementation.
+ virtual std::set<PP_Instance>* GetGloballySeenInstanceIDSet();
+ virtual ppapi::WebKitForwarding* GetWebKitForwarding();
+ virtual void PostToWebKitThread(const tracked_objects::Location& from_here,
+ const base::Closure& task);
+ virtual bool SendToBrowser(IPC::Message* msg);
+
+ private:
+ base::MessageLoopProxy* ipc_message_loop_; // Weak
+ base::WaitableEvent* shutdown_event_; // Weak
+ std::set<PP_Instance> instance_id_set_;
+
+ DISALLOW_COPY_AND_ASSIGN(PluginDelegateMock);
+ };
private:
PluginResourceTracker resource_tracker_;
PluginVarTracker var_tracker_;
scoped_ptr<PluginDispatcher> plugin_dispatcher_;
+ PluginDelegateMock plugin_delegate_mock_;
};
-class HostProxyTest : public ProxyTestBase {
+class PluginProxyTest : public PluginProxyTestHarness, public testing::Test {
public:
- HostProxyTest();
- virtual ~HostProxyTest();
+ PluginProxyTest();
+ virtual ~PluginProxyTest();
+
+ // testing::Test implementation.
+ virtual void SetUp();
+ virtual void TearDown();
+};
+
+class HostProxyTestHarness : public ProxyTestHarnessBase {
+ public:
+ HostProxyTestHarness();
+ virtual ~HostProxyTestHarness();
HostDispatcher* host_dispatcher() { return host_dispatcher_.get(); }
// ProxyTestBase implementation.
virtual Dispatcher* GetDispatcher();
+ virtual void SetUpHarness();
+ virtual void SetUpHarnessWithChannel(const IPC::ChannelHandle& channel_handle,
+ base::MessageLoopProxy* ipc_message_loop,
+ base::WaitableEvent* shutdown_event,
+ bool is_client);
+ virtual void TearDownHarness();
+
+ class DelegateMock : public ProxyChannel::Delegate {
+ public:
+ DelegateMock() : ipc_message_loop_(NULL), shutdown_event_(NULL) {
+ }
+ virtual ~DelegateMock() {}
+
+ void Init(base::MessageLoopProxy* ipc_message_loop,
+ base::WaitableEvent* shutdown_event) {
+ ipc_message_loop_ = ipc_message_loop;
+ shutdown_event_ = shutdown_event;
+ }
+
+ // ProxyChannel::Delegate implementation.
+ virtual base::MessageLoopProxy* GetIPCMessageLoop();
+ virtual base::WaitableEvent* GetShutdownEvent();
+
+ private:
+ base::MessageLoopProxy* ipc_message_loop_; // Weak
+ base::WaitableEvent* shutdown_event_; // Weak
+
+ DISALLOW_COPY_AND_ASSIGN(DelegateMock);
+ };
+
+ private:
+ scoped_ptr<HostDispatcher> host_dispatcher_;
+ DelegateMock delegate_mock_;
+};
+
+class HostProxyTest : public HostProxyTestHarness, public testing::Test {
+ public:
+ HostProxyTest();
+ virtual ~HostProxyTest();
+
+ // testing::Test implementation.
+ virtual void SetUp();
+ virtual void TearDown();
+};
+
+// Use this base class to test both sides of a proxy.
+class TwoWayTest : public testing::Test {
+ public:
+ enum TwoWayTestMode {
+ TEST_PPP_INTERFACE,
+ TEST_PPB_INTERFACE
+ };
+ TwoWayTest(TwoWayTestMode test_mode);
+ virtual ~TwoWayTest();
+
+ HostProxyTestHarness& host() { return host_; }
+ PluginProxyTestHarness& plugin() { return plugin_; }
+ PP_Module pp_module() const { return host_.pp_module(); }
+ PP_Instance pp_instance() const { return host_.pp_instance(); }
+ TwoWayTestMode test_mode() { return test_mode_; }
// testing::Test implementation.
virtual void SetUp();
virtual void TearDown();
private:
- scoped_ptr<HostDispatcher> host_dispatcher_;
+ TwoWayTestMode test_mode_;
+ HostProxyTestHarness host_;
+ PluginProxyTestHarness plugin_;
+ // In order to use sync IPC, we need to have an IO thread.
+ base::Thread io_thread_;
+ // The plugin side of the proxy runs on its own thread.
+ base::Thread plugin_thread_;
+ // The message loop for the main (host) thread.
+ MessageLoop message_loop_;
+
+ // Aliases for the host and plugin harnesses; if we're testing a PPP
+ // interface, remote_harness will point to plugin_, and local_harness
+ // will point to host_. This makes it convenient when we're starting and
+ // stopping the harnesses.
+ ProxyTestHarnessBase* remote_harness_;
+ ProxyTestHarnessBase* local_harness_;
+
+ base::WaitableEvent channel_created_;
+ base::WaitableEvent shutdown_event_;
};
} // namespace proxy
« no previous file with comments | « ppapi/proxy/plugin_var_tracker.h ('k') | ppapi/proxy/ppapi_proxy_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698