|  | // 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. | 
|  |  | 
|  | #include "content/test/ppapi_unittest.h" | 
|  |  | 
|  | #include "base/message_loop/message_loop.h" | 
|  | #include "content/renderer/pepper/gfx_conversion.h" | 
|  | #include "content/renderer/pepper/host_globals.h" | 
|  | #include "content/renderer/pepper/pepper_plugin_instance_impl.h" | 
|  | #include "content/renderer/pepper/plugin_module.h" | 
|  | #include "ppapi/c/pp_errors.h" | 
|  | #include "ppapi/c/pp_var.h" | 
|  | #include "ppapi/c/ppp_instance.h" | 
|  | #include "ppapi/shared_impl/ppapi_globals.h" | 
|  | #include "ppapi/shared_impl/ppapi_permissions.h" | 
|  |  | 
|  | namespace content { | 
|  |  | 
|  | namespace { | 
|  |  | 
|  | PpapiUnittest* current_unittest = NULL; | 
|  |  | 
|  | const void* MockGetInterface(const char* interface_name) { | 
|  | return current_unittest->GetMockInterface(interface_name); | 
|  | } | 
|  |  | 
|  | int MockInitializeModule(PP_Module, PPB_GetInterface) { | 
|  | return PP_OK; | 
|  | } | 
|  |  | 
|  | // PPP_Instance implementation ------------------------------------------------ | 
|  |  | 
|  | PP_Bool Instance_DidCreate(PP_Instance pp_instance, | 
|  | uint32_t argc, | 
|  | const char* argn[], | 
|  | const char* argv[]) { | 
|  | return PP_TRUE; | 
|  | } | 
|  |  | 
|  | void Instance_DidDestroy(PP_Instance instance) { | 
|  | } | 
|  |  | 
|  | void Instance_DidChangeView(PP_Instance pp_instance, PP_Resource view) { | 
|  | } | 
|  |  | 
|  | void Instance_DidChangeFocus(PP_Instance pp_instance, PP_Bool has_focus) { | 
|  | } | 
|  |  | 
|  | PP_Bool Instance_HandleDocumentLoad(PP_Instance pp_instance, | 
|  | PP_Resource pp_url_loader) { | 
|  | return PP_FALSE; | 
|  | } | 
|  |  | 
|  | static PPP_Instance mock_instance_interface = { | 
|  | &Instance_DidCreate, | 
|  | &Instance_DidDestroy, | 
|  | &Instance_DidChangeView, | 
|  | &Instance_DidChangeFocus, | 
|  | &Instance_HandleDocumentLoad | 
|  | }; | 
|  |  | 
|  | }  // namespace | 
|  |  | 
|  | // PpapiUnittest -------------------------------------------------------------- | 
|  |  | 
|  | PpapiUnittest::PpapiUnittest() { | 
|  | DCHECK(!current_unittest); | 
|  | current_unittest = this; | 
|  | } | 
|  |  | 
|  | PpapiUnittest::~PpapiUnittest() { | 
|  | DCHECK(current_unittest == this); | 
|  | current_unittest = NULL; | 
|  | } | 
|  |  | 
|  | void PpapiUnittest::SetUp() { | 
|  | message_loop_.reset(new base::MessageLoop()); | 
|  |  | 
|  | // Initialize the mock module. | 
|  | module_ = new PluginModule("Mock plugin", "1.0", base::FilePath(), | 
|  | ppapi::PpapiPermissions()); | 
|  | ppapi::PpapiGlobals::Get()->ResetMainThreadMessageLoopForTesting(); | 
|  | PepperPluginInfo::EntryPoints entry_points; | 
|  | entry_points.get_interface = &MockGetInterface; | 
|  | entry_points.initialize_module = &MockInitializeModule; | 
|  | ASSERT_TRUE(module_->InitAsInternalPlugin(entry_points)); | 
|  |  | 
|  | // Initialize the mock instance. | 
|  | instance_ = PepperPluginInstanceImpl::Create(NULL, module(), NULL, GURL()); | 
|  | } | 
|  |  | 
|  | void PpapiUnittest::TearDown() { | 
|  | instance_ = NULL; | 
|  | module_ = NULL; | 
|  | message_loop_.reset(); | 
|  | PluginModule::ResetHostGlobalsForTest(); | 
|  | } | 
|  |  | 
|  | const void* PpapiUnittest::GetMockInterface(const char* interface_name) const { | 
|  | if (strcmp(interface_name, PPP_INSTANCE_INTERFACE_1_0) == 0) | 
|  | return &mock_instance_interface; | 
|  | return NULL; | 
|  | } | 
|  |  | 
|  | void PpapiUnittest::ShutdownModule() { | 
|  | DCHECK(instance_->HasOneRef()); | 
|  | instance_ = NULL; | 
|  | DCHECK(module_->HasOneRef()); | 
|  | module_ = NULL; | 
|  | } | 
|  |  | 
|  | void PpapiUnittest::SetViewSize(int width, int height) const { | 
|  | instance_->view_data_.rect = PP_FromGfxRect(gfx::Rect(0, 0, width, height)); | 
|  | instance_->view_data_.clip_rect = instance_->view_data_.rect; | 
|  | } | 
|  |  | 
|  | }  // namespace content |