OLD | NEW |
| (Empty) |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "webkit/plugins/ppapi/ppapi_unittest.h" | |
6 | |
7 #include "base/message_loop/message_loop.h" | |
8 #include "ppapi/c/pp_var.h" | |
9 #include "ppapi/c/ppp_instance.h" | |
10 #include "ppapi/shared_impl/ppapi_globals.h" | |
11 #include "ppapi/shared_impl/ppapi_permissions.h" | |
12 #include "webkit/plugins/ppapi/gfx_conversion.h" | |
13 #include "webkit/plugins/ppapi/host_globals.h" | |
14 #include "webkit/plugins/ppapi/mock_plugin_delegate.h" | |
15 #include "webkit/plugins/ppapi/plugin_module.h" | |
16 #include "webkit/plugins/ppapi/ppapi_interface_factory.h" | |
17 #include "webkit/plugins/ppapi/ppapi_plugin_instance_impl.h" | |
18 | |
19 namespace webkit { | |
20 namespace ppapi { | |
21 | |
22 namespace { | |
23 | |
24 PpapiUnittest* current_unittest = NULL; | |
25 | |
26 const void* MockGetInterface(const char* interface_name) { | |
27 return current_unittest->GetMockInterface(interface_name); | |
28 } | |
29 | |
30 int MockInitializeModule(PP_Module, PPB_GetInterface) { | |
31 return PP_OK; | |
32 } | |
33 | |
34 // PPP_Instance implementation ------------------------------------------------ | |
35 | |
36 PP_Bool Instance_DidCreate(PP_Instance pp_instance, | |
37 uint32_t argc, | |
38 const char* argn[], | |
39 const char* argv[]) { | |
40 return PP_TRUE; | |
41 } | |
42 | |
43 void Instance_DidDestroy(PP_Instance instance) { | |
44 } | |
45 | |
46 void Instance_DidChangeView(PP_Instance pp_instance, PP_Resource view) { | |
47 } | |
48 | |
49 void Instance_DidChangeFocus(PP_Instance pp_instance, PP_Bool has_focus) { | |
50 } | |
51 | |
52 PP_Bool Instance_HandleDocumentLoad(PP_Instance pp_instance, | |
53 PP_Resource pp_url_loader) { | |
54 return PP_FALSE; | |
55 } | |
56 | |
57 static PPP_Instance mock_instance_interface = { | |
58 &Instance_DidCreate, | |
59 &Instance_DidDestroy, | |
60 &Instance_DidChangeView, | |
61 &Instance_DidChangeFocus, | |
62 &Instance_HandleDocumentLoad | |
63 }; | |
64 | |
65 } // namespace | |
66 | |
67 // PpapiUnittest -------------------------------------------------------------- | |
68 | |
69 PpapiUnittest::PpapiUnittest() { | |
70 DCHECK(!current_unittest); | |
71 current_unittest = this; | |
72 } | |
73 | |
74 PpapiUnittest::~PpapiUnittest() { | |
75 DCHECK(current_unittest == this); | |
76 current_unittest = NULL; | |
77 } | |
78 | |
79 void PpapiUnittest::SetUp() { | |
80 message_loop_.reset(new base::MessageLoop()); | |
81 delegate_.reset(NewPluginDelegate()); | |
82 | |
83 // Initialize the mock module. | |
84 module_ = new PluginModule("Mock plugin", base::FilePath(), this, | |
85 ::ppapi::PpapiPermissions()); | |
86 ::ppapi::PpapiGlobals::Get()->ResetMainThreadMessageLoopForTesting(); | |
87 PluginModule::EntryPoints entry_points; | |
88 entry_points.get_interface = &MockGetInterface; | |
89 entry_points.initialize_module = &MockInitializeModule; | |
90 ASSERT_TRUE(module_->InitAsInternalPlugin(entry_points)); | |
91 | |
92 // Initialize the mock instance. | |
93 instance_ = PluginInstanceImpl::Create( | |
94 delegate_.get(), NULL, module(), NULL, GURL()); | |
95 } | |
96 | |
97 void PpapiUnittest::TearDown() { | |
98 instance_ = NULL; | |
99 module_ = NULL; | |
100 message_loop_.reset(); | |
101 PluginModule::ResetHostGlobalsForTest(); | |
102 } | |
103 | |
104 MockPluginDelegate* PpapiUnittest::NewPluginDelegate() { | |
105 return new MockPluginDelegate; | |
106 } | |
107 | |
108 const void* PpapiUnittest::GetMockInterface(const char* interface_name) const { | |
109 if (strcmp(interface_name, PPP_INSTANCE_INTERFACE_1_0) == 0) | |
110 return &mock_instance_interface; | |
111 return NULL; | |
112 } | |
113 | |
114 void PpapiUnittest::ShutdownModule() { | |
115 DCHECK(instance_->HasOneRef()); | |
116 instance_ = NULL; | |
117 DCHECK(module_->HasOneRef()); | |
118 module_ = NULL; | |
119 } | |
120 | |
121 void PpapiUnittest::SetViewSize(int width, int height) const { | |
122 instance_->view_data_.rect = PP_FromGfxRect(gfx::Rect(0, 0, width, height)); | |
123 instance_->view_data_.clip_rect = instance_->view_data_.rect; | |
124 } | |
125 | |
126 void PpapiUnittest::PluginModuleDead(PluginModule* /* dead_module */) { | |
127 // Nothing needed (this is necessary to make the module compile). | |
128 } | |
129 | |
130 // Tests whether custom PPAPI interface factories are called when PPAPI | |
131 // interfaces are requested. | |
132 class PpapiCustomInterfaceFactoryTest : public PpapiUnittest { | |
133 public: | |
134 PpapiCustomInterfaceFactoryTest() {} | |
135 virtual ~PpapiCustomInterfaceFactoryTest() {} | |
136 | |
137 bool result() { | |
138 return result_; | |
139 } | |
140 | |
141 void reset_result() { | |
142 result_ = false; | |
143 } | |
144 | |
145 static const void* InterfaceFactory(const std::string& interface_name) { | |
146 result_ = true; | |
147 return NULL; | |
148 } | |
149 | |
150 private: | |
151 static bool result_; | |
152 }; | |
153 | |
154 bool PpapiCustomInterfaceFactoryTest::result_ = false; | |
155 | |
156 // This test validates whether custom PPAPI interface factories are invoked in | |
157 // response to PluginModule::GetPluginInterface calls. | |
158 TEST_F(PpapiCustomInterfaceFactoryTest, BasicFactoryTest) { | |
159 PpapiInterfaceFactoryManager::GetInstance()->RegisterFactory( | |
160 PpapiCustomInterfaceFactoryTest::InterfaceFactory); | |
161 (*PluginModule::GetLocalGetInterfaceFunc())("DummyInterface"); | |
162 EXPECT_TRUE(result()); | |
163 | |
164 reset_result(); | |
165 PpapiInterfaceFactoryManager::GetInstance()->UnregisterFactory( | |
166 PpapiCustomInterfaceFactoryTest::InterfaceFactory); | |
167 | |
168 (*PluginModule::GetLocalGetInterfaceFunc())("DummyInterface"); | |
169 EXPECT_FALSE(result()); | |
170 } | |
171 | |
172 } // namespace ppapi | |
173 } // namespace webkit | |
OLD | NEW |