blob: fffb20cbc7d04e0a063fed358c515b6157e4716e [file] [log] [blame]
// Copyright (c) 2011 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 "ppapi/proxy/ppapi_proxy_test.h"
#include "ppapi/c/pp_errors.h"
#include "ppapi/proxy/ppapi_messages.h"
namespace pp {
namespace proxy {
namespace {
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) {
return PP_OK;
}
void MockShutdownModuleFunc() {
}
} // 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);
GetDispatcher()->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_);
plugin_dispatcher_.reset(new PluginDispatcher(
base::Process::Current().handle(),
&MockGetInterface));
plugin_dispatcher_->InitWithTestSink(&sink());
plugin_dispatcher_->DidCreateInstance(pp_instance());
}
void PluginProxyTest::TearDown() {
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