| Index: ppapi/proxy/ppapi_proxy_test.cc
|
| ===================================================================
|
| --- ppapi/proxy/ppapi_proxy_test.cc (revision 74021)
|
| +++ ppapi/proxy/ppapi_proxy_test.cc (working copy)
|
| @@ -11,8 +11,14 @@
|
|
|
| namespace {
|
|
|
| -const void* MockGetInterface(const char*) {
|
| - return NULL;
|
| +ProxyTestBase* current_test = NULL;
|
| +
|
| +const void* MockGetInterface(const char* name) {
|
| + if (!current_test) {
|
| + NOTREACHED();
|
| + return NULL;
|
| + }
|
| + return current_test->GetInterface(name);
|
| }
|
|
|
| int32_t MockInitModule(PP_Module, Dispatcher::GetInterfaceFunc) {
|
| @@ -24,36 +30,109 @@
|
|
|
| } // namespace
|
|
|
| +// ProxyTestBase ---------------------------------------------------------------
|
| +
|
| +ProxyTestBase::ProxyTestBase() : pp_module_(0x98765), pp_instance_(0x12345) {
|
| + DCHECK(!current_test);
|
| + current_test = this;
|
| +}
|
| +
|
| +ProxyTestBase::~ProxyTestBase() {
|
| + DCHECK(current_test == this);
|
| + current_test = NULL;
|
| +}
|
| +
|
| +const void* ProxyTestBase::GetInterface(const char* name) {
|
| + return registered_interfaces_[name];
|
| +}
|
| +
|
| +void ProxyTestBase::RegisterTestInterface(const char* name,
|
| + const void* interface) {
|
| + registered_interfaces_[name] = interface;
|
| +}
|
| +
|
| +bool ProxyTestBase::SupportsInterface(const char* name) {
|
| + sink().ClearMessages();
|
| +
|
| + // IPC doesn't actually write to this when we send a message manually
|
| + // not actually using IPC.
|
| + bool unused_result = false;
|
| + PpapiMsg_SupportsInterface msg(name, &unused_result);
|
| + plugin_dispatcher()->OnMessageReceived(msg);
|
| +
|
| + const IPC::Message* reply_msg =
|
| + sink().GetUniqueMessageMatching(IPC_REPLY_ID);
|
| + EXPECT_TRUE(reply_msg);
|
| + if (!reply_msg)
|
| + return false;
|
| +
|
| + TupleTypes<PpapiMsg_SupportsInterface::ReplyParam>::ValueTuple reply_data;
|
| + EXPECT_TRUE(PpapiMsg_SupportsInterface::ReadReplyParam(
|
| + reply_msg, &reply_data));
|
| +
|
| + sink().ClearMessages();
|
| + return reply_data.a;
|
| +}
|
| +
|
| +// PluginProxyTest -------------------------------------------------------------
|
| +
|
| PluginProxyTest::PluginProxyTest() {
|
| }
|
|
|
| PluginProxyTest::~PluginProxyTest() {
|
| }
|
|
|
| +Dispatcher* PluginProxyTest::GetDispatcher() {
|
| + return plugin_dispatcher_.get();
|
| +}
|
| +
|
| void PluginProxyTest::SetUp() {
|
| // These must be first since the dispatcher set-up uses them.
|
| PluginResourceTracker::SetInstanceForTest(&resource_tracker_);
|
| PluginVarTracker::SetInstanceForTest(&var_tracker_);
|
|
|
| - pp_instance_ = 0x1234;
|
| plugin_dispatcher_.reset(new PluginDispatcher(
|
| base::Process::Current().handle(),
|
| &MockGetInterface,
|
| &MockInitModule,
|
| &MockShutdownModuleFunc));
|
| - plugin_dispatcher_->InitWithTestSink(&sink_);
|
| - // When the plugin dispatcher is per-instance, this is the line to use:
|
| - // PluginDispatcher::SetForInstance(pp_instance_, plugin_dispatcher_.get());
|
| - PluginDispatcher::SetGlobal(plugin_dispatcher_.get());
|
| + plugin_dispatcher_->InitWithTestSink(&sink());
|
| + plugin_dispatcher_->DidCreateInstance(pp_instance());
|
| }
|
|
|
| void PluginProxyTest::TearDown() {
|
| - PluginDispatcher::SetGlobal(NULL);
|
| + plugin_dispatcher_->DidDestroyInstance(pp_instance());
|
| plugin_dispatcher_.reset();
|
|
|
| PluginVarTracker::SetInstanceForTest(NULL);
|
| PluginResourceTracker::SetInstanceForTest(NULL);
|
| }
|
|
|
| +// HostProxyTest ---------------------------------------------------------------
|
| +
|
| +HostProxyTest::HostProxyTest() {
|
| +}
|
| +
|
| +HostProxyTest::~HostProxyTest() {
|
| +}
|
| +
|
| +Dispatcher* HostProxyTest::GetDispatcher() {
|
| + return host_dispatcher_.get();
|
| +}
|
| +
|
| +void HostProxyTest::SetUp() {
|
| + host_dispatcher_.reset(new HostDispatcher(
|
| + base::Process::Current().handle(),
|
| + pp_module(),
|
| + &MockGetInterface));
|
| + host_dispatcher_->InitWithTestSink(&sink());
|
| + HostDispatcher::SetForInstance(pp_instance(), host_dispatcher_.get());
|
| +}
|
| +
|
| +void HostProxyTest::TearDown() {
|
| + HostDispatcher::RemoveForInstance(pp_instance());
|
| + host_dispatcher_.reset();
|
| +}
|
| +
|
| } // namespace proxy
|
| } // namespace pp
|
|
|