OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/browser/plugin_loader_posix.h" | 5 #include "content/browser/plugin_loader_posix.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/file_path.h" | 8 #include "base/file_path.h" |
9 #include "base/memory/ref_counted.h" | 9 #include "base/memory/ref_counted.h" |
10 #include "base/message_loop.h" | 10 #include "base/message_loop.h" |
(...skipping 27 matching lines...) Expand all Loading... |
38 } | 38 } |
39 | 39 |
40 std::vector<webkit::WebPluginInfo>* internal_plugins() { | 40 std::vector<webkit::WebPluginInfo>* internal_plugins() { |
41 return &internal_plugins_; | 41 return &internal_plugins_; |
42 } | 42 } |
43 | 43 |
44 void RealLoadPluginsInternal() { | 44 void RealLoadPluginsInternal() { |
45 PluginLoaderPosix::LoadPluginsInternal(); | 45 PluginLoaderPosix::LoadPluginsInternal(); |
46 } | 46 } |
47 | 47 |
48 void TestOnPluginLoaded(const webkit::WebPluginInfo& plugin) { | 48 void TestOnPluginLoaded(size_t index, const webkit::WebPluginInfo& plugin) { |
49 OnPluginLoaded(plugin); | 49 OnPluginLoaded(index, plugin); |
50 } | 50 } |
51 | 51 |
52 void TestOnPluginLoadFailed(const FilePath& path) { | 52 void TestOnPluginLoadFailed(size_t index, const FilePath& path) { |
53 OnPluginLoadFailed(path); | 53 OnPluginLoadFailed(index, path); |
54 } | 54 } |
55 }; | 55 }; |
56 | 56 |
57 void VerifyCallback(int* run_count, const std::vector<webkit::WebPluginInfo>&) { | 57 void VerifyCallback(int* run_count, const std::vector<webkit::WebPluginInfo>&) { |
58 ++(*run_count); | 58 ++(*run_count); |
59 } | 59 } |
60 | 60 |
61 class PluginLoaderPosixTest : public testing::Test { | 61 class PluginLoaderPosixTest : public testing::Test { |
62 public: | 62 public: |
63 PluginLoaderPosixTest() | 63 PluginLoaderPosixTest() |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
108 EXPECT_EQ(2u, plugin_loader()->number_of_pending_callbacks()); | 108 EXPECT_EQ(2u, plugin_loader()->number_of_pending_callbacks()); |
109 | 109 |
110 EXPECT_CALL(*plugin_loader(), LoadPluginsInternal()).Times(1); | 110 EXPECT_CALL(*plugin_loader(), LoadPluginsInternal()).Times(1); |
111 message_loop()->RunAllPending(); | 111 message_loop()->RunAllPending(); |
112 | 112 |
113 plugin_loader()->canonical_list()->clear(); | 113 plugin_loader()->canonical_list()->clear(); |
114 plugin_loader()->canonical_list()->push_back(plugin1_.path); | 114 plugin_loader()->canonical_list()->push_back(plugin1_.path); |
115 | 115 |
116 EXPECT_EQ(0, did_callback); | 116 EXPECT_EQ(0, did_callback); |
117 | 117 |
118 plugin_loader()->TestOnPluginLoaded(plugin1_); | 118 plugin_loader()->TestOnPluginLoaded(0, plugin1_); |
119 message_loop()->RunAllPending(); | 119 message_loop()->RunAllPending(); |
120 | 120 |
121 EXPECT_EQ(2, did_callback); | 121 EXPECT_EQ(2, did_callback); |
122 EXPECT_EQ(0u, plugin_loader()->number_of_pending_callbacks()); | 122 EXPECT_EQ(0u, plugin_loader()->number_of_pending_callbacks()); |
123 } | 123 } |
124 | 124 |
125 TEST_F(PluginLoaderPosixTest, ThreeSuccessfulLoads) { | 125 TEST_F(PluginLoaderPosixTest, ThreeSuccessfulLoads) { |
126 int did_callback = 0; | 126 int did_callback = 0; |
127 PluginService::GetPluginsCallback callback = | 127 PluginService::GetPluginsCallback callback = |
128 base::Bind(&VerifyCallback, base::Unretained(&did_callback)); | 128 base::Bind(&VerifyCallback, base::Unretained(&did_callback)); |
129 | 129 |
130 plugin_loader()->LoadPlugins(message_loop()->message_loop_proxy(), callback); | 130 plugin_loader()->LoadPlugins(message_loop()->message_loop_proxy(), callback); |
131 | 131 |
132 EXPECT_CALL(*plugin_loader(), LoadPluginsInternal()).Times(1); | 132 EXPECT_CALL(*plugin_loader(), LoadPluginsInternal()).Times(1); |
133 message_loop()->RunAllPending(); | 133 message_loop()->RunAllPending(); |
134 | 134 |
135 AddThreePlugins(); | 135 AddThreePlugins(); |
136 | 136 |
137 EXPECT_EQ(0u, plugin_loader()->next_load_index()); | 137 EXPECT_EQ(0u, plugin_loader()->next_load_index()); |
138 | 138 |
139 const std::vector<webkit::WebPluginInfo>& plugins( | 139 const std::vector<webkit::WebPluginInfo>& plugins( |
140 plugin_loader()->loaded_plugins()); | 140 plugin_loader()->loaded_plugins()); |
141 | 141 |
142 plugin_loader()->TestOnPluginLoaded(plugin1_); | 142 plugin_loader()->TestOnPluginLoaded(0, plugin1_); |
143 EXPECT_EQ(1u, plugin_loader()->next_load_index()); | 143 EXPECT_EQ(1u, plugin_loader()->next_load_index()); |
144 EXPECT_EQ(1u, plugins.size()); | 144 EXPECT_EQ(1u, plugins.size()); |
145 EXPECT_EQ(plugin1_.name, plugins[0].name); | 145 EXPECT_EQ(plugin1_.name, plugins[0].name); |
146 | 146 |
147 message_loop()->RunAllPending(); | 147 message_loop()->RunAllPending(); |
148 EXPECT_EQ(0, did_callback); | 148 EXPECT_EQ(0, did_callback); |
149 | 149 |
150 plugin_loader()->TestOnPluginLoaded(plugin2_); | 150 plugin_loader()->TestOnPluginLoaded(1, plugin2_); |
151 EXPECT_EQ(2u, plugin_loader()->next_load_index()); | 151 EXPECT_EQ(2u, plugin_loader()->next_load_index()); |
152 EXPECT_EQ(2u, plugins.size()); | 152 EXPECT_EQ(2u, plugins.size()); |
153 EXPECT_EQ(plugin2_.name, plugins[1].name); | 153 EXPECT_EQ(plugin2_.name, plugins[1].name); |
154 | 154 |
155 message_loop()->RunAllPending(); | 155 message_loop()->RunAllPending(); |
156 EXPECT_EQ(0, did_callback); | 156 EXPECT_EQ(0, did_callback); |
157 | 157 |
158 plugin_loader()->TestOnPluginLoaded(plugin3_); | 158 plugin_loader()->TestOnPluginLoaded(2, plugin3_); |
159 EXPECT_EQ(3u, plugins.size()); | 159 EXPECT_EQ(3u, plugins.size()); |
160 EXPECT_EQ(plugin3_.name, plugins[2].name); | 160 EXPECT_EQ(plugin3_.name, plugins[2].name); |
161 | 161 |
162 message_loop()->RunAllPending(); | 162 message_loop()->RunAllPending(); |
163 EXPECT_EQ(1, did_callback); | 163 EXPECT_EQ(1, did_callback); |
164 } | 164 } |
165 | 165 |
166 TEST_F(PluginLoaderPosixTest, TwoFailures) { | 166 TEST_F(PluginLoaderPosixTest, TwoFailures) { |
167 int did_callback = 0; | 167 int did_callback = 0; |
168 PluginService::GetPluginsCallback callback = | 168 PluginService::GetPluginsCallback callback = |
169 base::Bind(&VerifyCallback, base::Unretained(&did_callback)); | 169 base::Bind(&VerifyCallback, base::Unretained(&did_callback)); |
170 | 170 |
171 plugin_loader()->LoadPlugins(message_loop()->message_loop_proxy(), callback); | 171 plugin_loader()->LoadPlugins(message_loop()->message_loop_proxy(), callback); |
172 | 172 |
173 EXPECT_CALL(*plugin_loader(), LoadPluginsInternal()).Times(1); | 173 EXPECT_CALL(*plugin_loader(), LoadPluginsInternal()).Times(1); |
174 message_loop()->RunAllPending(); | 174 message_loop()->RunAllPending(); |
175 | 175 |
176 AddThreePlugins(); | 176 AddThreePlugins(); |
177 | 177 |
178 EXPECT_EQ(0u, plugin_loader()->next_load_index()); | 178 EXPECT_EQ(0u, plugin_loader()->next_load_index()); |
179 | 179 |
180 const std::vector<webkit::WebPluginInfo>& plugins( | 180 const std::vector<webkit::WebPluginInfo>& plugins( |
181 plugin_loader()->loaded_plugins()); | 181 plugin_loader()->loaded_plugins()); |
182 | 182 |
183 plugin_loader()->TestOnPluginLoadFailed(plugin1_.path); | 183 plugin_loader()->TestOnPluginLoadFailed(0, plugin1_.path); |
184 EXPECT_EQ(1u, plugin_loader()->next_load_index()); | 184 EXPECT_EQ(1u, plugin_loader()->next_load_index()); |
185 EXPECT_EQ(0u, plugins.size()); | 185 EXPECT_EQ(0u, plugins.size()); |
186 | 186 |
187 message_loop()->RunAllPending(); | 187 message_loop()->RunAllPending(); |
188 EXPECT_EQ(0, did_callback); | 188 EXPECT_EQ(0, did_callback); |
189 | 189 |
190 plugin_loader()->TestOnPluginLoaded(plugin2_); | 190 plugin_loader()->TestOnPluginLoaded(1, plugin2_); |
191 EXPECT_EQ(2u, plugin_loader()->next_load_index()); | 191 EXPECT_EQ(2u, plugin_loader()->next_load_index()); |
192 EXPECT_EQ(1u, plugins.size()); | 192 EXPECT_EQ(1u, plugins.size()); |
193 EXPECT_EQ(plugin2_.name, plugins[0].name); | 193 EXPECT_EQ(plugin2_.name, plugins[0].name); |
194 | 194 |
195 message_loop()->RunAllPending(); | 195 message_loop()->RunAllPending(); |
196 EXPECT_EQ(0, did_callback); | 196 EXPECT_EQ(0, did_callback); |
197 | 197 |
198 plugin_loader()->TestOnPluginLoadFailed(plugin3_.path); | 198 plugin_loader()->TestOnPluginLoadFailed(2, plugin3_.path); |
199 EXPECT_EQ(1u, plugins.size()); | 199 EXPECT_EQ(1u, plugins.size()); |
200 | 200 |
201 message_loop()->RunAllPending(); | 201 message_loop()->RunAllPending(); |
202 EXPECT_EQ(1, did_callback); | 202 EXPECT_EQ(1, did_callback); |
203 } | 203 } |
204 | 204 |
205 TEST_F(PluginLoaderPosixTest, CrashedProcess) { | 205 TEST_F(PluginLoaderPosixTest, CrashedProcess) { |
206 int did_callback = 0; | 206 int did_callback = 0; |
207 PluginService::GetPluginsCallback callback = | 207 PluginService::GetPluginsCallback callback = |
208 base::Bind(&VerifyCallback, base::Unretained(&did_callback)); | 208 base::Bind(&VerifyCallback, base::Unretained(&did_callback)); |
209 | 209 |
210 plugin_loader()->LoadPlugins(message_loop()->message_loop_proxy(), callback); | 210 plugin_loader()->LoadPlugins(message_loop()->message_loop_proxy(), callback); |
211 | 211 |
212 EXPECT_CALL(*plugin_loader(), LoadPluginsInternal()).Times(1); | 212 EXPECT_CALL(*plugin_loader(), LoadPluginsInternal()).Times(1); |
213 message_loop()->RunAllPending(); | 213 message_loop()->RunAllPending(); |
214 | 214 |
215 AddThreePlugins(); | 215 AddThreePlugins(); |
216 | 216 |
217 EXPECT_EQ(0u, plugin_loader()->next_load_index()); | 217 EXPECT_EQ(0u, plugin_loader()->next_load_index()); |
218 | 218 |
219 const std::vector<webkit::WebPluginInfo>& plugins( | 219 const std::vector<webkit::WebPluginInfo>& plugins( |
220 plugin_loader()->loaded_plugins()); | 220 plugin_loader()->loaded_plugins()); |
221 | 221 |
222 plugin_loader()->TestOnPluginLoaded(plugin1_); | 222 plugin_loader()->TestOnPluginLoaded(0, plugin1_); |
223 EXPECT_EQ(1u, plugin_loader()->next_load_index()); | 223 EXPECT_EQ(1u, plugin_loader()->next_load_index()); |
224 EXPECT_EQ(1u, plugins.size()); | 224 EXPECT_EQ(1u, plugins.size()); |
225 EXPECT_EQ(plugin1_.name, plugins[0].name); | 225 EXPECT_EQ(plugin1_.name, plugins[0].name); |
226 | 226 |
227 message_loop()->RunAllPending(); | 227 message_loop()->RunAllPending(); |
228 EXPECT_EQ(0, did_callback); | 228 EXPECT_EQ(0, did_callback); |
229 | 229 |
230 EXPECT_CALL(*plugin_loader(), LoadPluginsInternal()).Times(1); | 230 EXPECT_CALL(*plugin_loader(), LoadPluginsInternal()).Times(1); |
231 plugin_loader()->OnProcessCrashed(42); | 231 plugin_loader()->OnProcessCrashed(42); |
232 EXPECT_EQ(1u, plugin_loader()->canonical_list()->size()); | 232 EXPECT_EQ(1u, plugin_loader()->canonical_list()->size()); |
(...skipping 17 matching lines...) Expand all Loading... |
250 AddThreePlugins(); | 250 AddThreePlugins(); |
251 | 251 |
252 plugin_loader()->internal_plugins()->clear(); | 252 plugin_loader()->internal_plugins()->clear(); |
253 plugin_loader()->internal_plugins()->push_back(plugin2_); | 253 plugin_loader()->internal_plugins()->push_back(plugin2_); |
254 | 254 |
255 EXPECT_EQ(0u, plugin_loader()->next_load_index()); | 255 EXPECT_EQ(0u, plugin_loader()->next_load_index()); |
256 | 256 |
257 const std::vector<webkit::WebPluginInfo>& plugins( | 257 const std::vector<webkit::WebPluginInfo>& plugins( |
258 plugin_loader()->loaded_plugins()); | 258 plugin_loader()->loaded_plugins()); |
259 | 259 |
260 plugin_loader()->TestOnPluginLoaded(plugin1_); | 260 plugin_loader()->TestOnPluginLoaded(0, plugin1_); |
261 EXPECT_EQ(1u, plugin_loader()->next_load_index()); | 261 EXPECT_EQ(1u, plugin_loader()->next_load_index()); |
262 EXPECT_EQ(1u, plugins.size()); | 262 EXPECT_EQ(1u, plugins.size()); |
263 EXPECT_EQ(plugin1_.name, plugins[0].name); | 263 EXPECT_EQ(plugin1_.name, plugins[0].name); |
264 | 264 |
265 message_loop()->RunAllPending(); | 265 message_loop()->RunAllPending(); |
266 EXPECT_EQ(0, did_callback); | 266 EXPECT_EQ(0, did_callback); |
267 | 267 |
268 // Internal plugins can fail to load if they're built-in with manual | 268 // Internal plugins can fail to load if they're built-in with manual |
269 // entrypoint functions. | 269 // entrypoint functions. |
270 plugin_loader()->TestOnPluginLoadFailed(plugin2_.path); | 270 plugin_loader()->TestOnPluginLoadFailed(1, plugin2_.path); |
271 EXPECT_EQ(2u, plugin_loader()->next_load_index()); | 271 EXPECT_EQ(2u, plugin_loader()->next_load_index()); |
272 EXPECT_EQ(2u, plugins.size()); | 272 EXPECT_EQ(2u, plugins.size()); |
273 EXPECT_EQ(plugin2_.name, plugins[1].name); | 273 EXPECT_EQ(plugin2_.name, plugins[1].name); |
274 EXPECT_EQ(0u, plugin_loader()->internal_plugins()->size()); | 274 EXPECT_EQ(0u, plugin_loader()->internal_plugins()->size()); |
275 | 275 |
276 message_loop()->RunAllPending(); | 276 message_loop()->RunAllPending(); |
277 EXPECT_EQ(0, did_callback); | 277 EXPECT_EQ(0, did_callback); |
278 | 278 |
279 plugin_loader()->TestOnPluginLoaded(plugin3_); | 279 plugin_loader()->TestOnPluginLoaded(2, plugin3_); |
280 EXPECT_EQ(3u, plugins.size()); | 280 EXPECT_EQ(3u, plugins.size()); |
281 EXPECT_EQ(plugin3_.name, plugins[2].name); | 281 EXPECT_EQ(plugin3_.name, plugins[2].name); |
282 | 282 |
283 message_loop()->RunAllPending(); | 283 message_loop()->RunAllPending(); |
284 EXPECT_EQ(1, did_callback); | 284 EXPECT_EQ(1, did_callback); |
285 } | 285 } |
286 | 286 |
287 TEST_F(PluginLoaderPosixTest, AllCrashed) { | 287 TEST_F(PluginLoaderPosixTest, AllCrashed) { |
288 int did_callback = 0; | 288 int did_callback = 0; |
289 PluginService::GetPluginsCallback callback = | 289 PluginService::GetPluginsCallback callback = |
(...skipping 19 matching lines...) Expand all Loading... |
309 &MockPluginLoaderPosix::RealLoadPluginsInternal)); | 309 &MockPluginLoaderPosix::RealLoadPluginsInternal)); |
310 plugin_loader()->OnProcessCrashed(42); | 310 plugin_loader()->OnProcessCrashed(42); |
311 plugin_loader()->OnProcessCrashed(42); | 311 plugin_loader()->OnProcessCrashed(42); |
312 plugin_loader()->OnProcessCrashed(42); | 312 plugin_loader()->OnProcessCrashed(42); |
313 | 313 |
314 message_loop()->RunAllPending(); | 314 message_loop()->RunAllPending(); |
315 EXPECT_EQ(1, did_callback); | 315 EXPECT_EQ(1, did_callback); |
316 | 316 |
317 EXPECT_EQ(0u, plugin_loader()->loaded_plugins().size()); | 317 EXPECT_EQ(0u, plugin_loader()->loaded_plugins().size()); |
318 } | 318 } |
OLD | NEW |