OLD | NEW |
---|---|
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 "webkit/plugins/npapi/webplugin_delegate_impl.h" | 5 #include "webkit/plugins/npapi/webplugin_delegate_impl.h" |
6 | 6 |
7 #include <map> | 7 #include <map> |
8 #include <string> | 8 #include <string> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
174 | 174 |
175 result = func(key, KeyNameInformation, buffer.get(), size, &size); | 175 result = func(key, KeyNameInformation, buffer.get(), size, &size); |
176 if (result != STATUS_SUCCESS) | 176 if (result != STATUS_SUCCESS) |
177 return L""; | 177 return L""; |
178 | 178 |
179 KEY_NAME_INFORMATION* info = | 179 KEY_NAME_INFORMATION* info = |
180 reinterpret_cast<KEY_NAME_INFORMATION*>(buffer.get()); | 180 reinterpret_cast<KEY_NAME_INFORMATION*>(buffer.get()); |
181 return std::wstring(info->Name, info->NameLength / sizeof(wchar_t)); | 181 return std::wstring(info->Name, info->NameLength / sizeof(wchar_t)); |
182 } | 182 } |
183 | 183 |
184 int GetPluginMajorVersion(const WebPluginInfo& plugin_info) { | |
185 int major_version = 0; | |
jam
2011/01/24 22:38:35
i think we want to use PluginGroup::CreateVersionF
| |
186 std::vector<std::wstring> version; | |
187 base::SplitString(plugin_info.version, L'.', &version); | |
188 if (version.size() > 0) { | |
189 base::StringToInt(version[0], &major_version); | |
190 } | |
191 return major_version; | |
192 } | |
193 | |
184 } // namespace | 194 } // namespace |
185 | 195 |
186 bool WebPluginDelegateImpl::IsPluginDelegateWindow(HWND window) { | 196 bool WebPluginDelegateImpl::IsPluginDelegateWindow(HWND window) { |
187 static const int kBufLen = 64; | 197 static const int kBufLen = 64; |
188 wchar_t class_name[kBufLen]; | 198 wchar_t class_name[kBufLen]; |
189 if (!GetClassNameW(window, class_name, kBufLen)) | 199 if (!GetClassNameW(window, class_name, kBufLen)) |
190 return false; | 200 return false; |
191 return wcscmp(class_name, kNativeWindowClassName) == 0; | 201 return wcscmp(class_name, kNativeWindowClassName) == 0; |
192 } | 202 } |
193 | 203 |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
283 filename == kFlashPlugin) { | 293 filename == kFlashPlugin) { |
284 // Flash only requests windowless plugins if we return a Mozilla user | 294 // Flash only requests windowless plugins if we return a Mozilla user |
285 // agent. | 295 // agent. |
286 instance_->set_use_mozilla_user_agent(); | 296 instance_->set_use_mozilla_user_agent(); |
287 quirks_ |= PLUGIN_QUIRK_THROTTLE_WM_USER_PLUS_ONE; | 297 quirks_ |= PLUGIN_QUIRK_THROTTLE_WM_USER_PLUS_ONE; |
288 quirks_ |= PLUGIN_QUIRK_PATCH_SETCURSOR; | 298 quirks_ |= PLUGIN_QUIRK_PATCH_SETCURSOR; |
289 quirks_ |= PLUGIN_QUIRK_ALWAYS_NOTIFY_SUCCESS; | 299 quirks_ |= PLUGIN_QUIRK_ALWAYS_NOTIFY_SUCCESS; |
290 quirks_ |= PLUGIN_QUIRK_HANDLE_MOUSE_CAPTURE; | 300 quirks_ |= PLUGIN_QUIRK_HANDLE_MOUSE_CAPTURE; |
291 } else if (filename == kAcrobatReaderPlugin) { | 301 } else if (filename == kAcrobatReaderPlugin) { |
292 // Check for the version number above or equal 9. | 302 // Check for the version number above or equal 9. |
293 std::vector<std::wstring> version; | 303 int major_version = GetPluginMajorVersion(plugin_info); |
294 base::SplitString(plugin_info.version, L'.', &version); | 304 if (major_version >= 9) { |
295 if (version.size() > 0) { | 305 quirks_ |= PLUGIN_QUIRK_DIE_AFTER_UNLOAD; |
296 int major; | 306 // 9.2 needs this. |
297 base::StringToInt(version[0], &major); | 307 quirks_ |= PLUGIN_QUIRK_SETWINDOW_TWICE; |
298 if (major >= 9) { | |
299 quirks_ |= PLUGIN_QUIRK_DIE_AFTER_UNLOAD; | |
300 | |
301 // 9.2 needs this. | |
302 quirks_ |= PLUGIN_QUIRK_SETWINDOW_TWICE; | |
303 } | |
304 } | 308 } |
305 quirks_ |= PLUGIN_QUIRK_BLOCK_NONSTANDARD_GETURL_REQUESTS; | 309 quirks_ |= PLUGIN_QUIRK_BLOCK_NONSTANDARD_GETURL_REQUESTS; |
306 } else if (plugin_info.name.find(L"Windows Media Player") != | 310 } else if (plugin_info.name.find(L"Windows Media Player") != |
307 std::wstring::npos) { | 311 std::wstring::npos) { |
308 // Windows Media Player needs two NPP_SetWindow calls. | 312 // Windows Media Player needs two NPP_SetWindow calls. |
309 quirks_ |= PLUGIN_QUIRK_SETWINDOW_TWICE; | 313 quirks_ |= PLUGIN_QUIRK_SETWINDOW_TWICE; |
310 | 314 |
311 // Windowless mode doesn't work in the WMP NPAPI plugin. | 315 // Windowless mode doesn't work in the WMP NPAPI plugin. |
312 quirks_ |= PLUGIN_QUIRK_NO_WINDOWLESS; | 316 quirks_ |= PLUGIN_QUIRK_NO_WINDOWLESS; |
313 | 317 |
314 // The media player plugin sets its size on the first NPP_SetWindow call | 318 // The media player plugin sets its size on the first NPP_SetWindow call |
315 // and never updates its size. We should call the underlying NPP_SetWindow | 319 // and never updates its size. We should call the underlying NPP_SetWindow |
316 // only when we have the correct size. | 320 // only when we have the correct size. |
317 quirks_ |= PLUGIN_QUIRK_IGNORE_FIRST_SETWINDOW_CALL; | 321 quirks_ |= PLUGIN_QUIRK_IGNORE_FIRST_SETWINDOW_CALL; |
318 | 322 |
319 if (filename == kOldWMPPlugin) { | 323 if (filename == kOldWMPPlugin) { |
320 // Non-admin users on XP couldn't modify the key to force the new UI. | 324 // Non-admin users on XP couldn't modify the key to force the new UI. |
321 quirks_ |= PLUGIN_QUIRK_PATCH_REGENUMKEYEXW; | 325 quirks_ |= PLUGIN_QUIRK_PATCH_REGENUMKEYEXW; |
322 } | 326 } |
323 } else if (instance_->mime_type() == "audio/x-pn-realaudio-plugin" || | 327 } else if (instance_->mime_type() == "audio/x-pn-realaudio-plugin" || |
324 filename == kRealPlayerPlugin) { | 328 filename == kRealPlayerPlugin) { |
325 quirks_ |= PLUGIN_QUIRK_DONT_CALL_WND_PROC_RECURSIVELY; | 329 quirks_ |= PLUGIN_QUIRK_DONT_CALL_WND_PROC_RECURSIVELY; |
326 } else if (plugin_info.name.find(L"VLC Multimedia Plugin") != | 330 } else if (plugin_info.name.find(L"VLC Multimedia Plugin") != |
327 std::wstring::npos || | 331 std::wstring::npos || |
328 plugin_info.name.find(L"VLC Multimedia Plug-in") != | 332 plugin_info.name.find(L"VLC Multimedia Plug-in") != |
329 std::wstring::npos) { | 333 std::wstring::npos) { |
330 // VLC hangs on NPP_Destroy if we call NPP_SetWindow with a null window | 334 // VLC hangs on NPP_Destroy if we call NPP_SetWindow with a null window |
331 // handle | 335 // handle |
332 quirks_ |= PLUGIN_QUIRK_DONT_SET_NULL_WINDOW_HANDLE_ON_DESTROY; | 336 quirks_ |= PLUGIN_QUIRK_DONT_SET_NULL_WINDOW_HANDLE_ON_DESTROY; |
333 // VLC 0.8.6d and 0.8.6e crash if multiple instances are created. | 337 int major_version = GetPluginMajorVersion(plugin_info); |
334 quirks_ |= PLUGIN_QUIRK_DONT_ALLOW_MULTIPLE_INSTANCES; | 338 if (major_version == 0) { |
339 // VLC 0.8.6d and 0.8.6e crash if multiple instances are created. | |
340 quirks_ |= PLUGIN_QUIRK_DONT_ALLOW_MULTIPLE_INSTANCES; | |
341 } | |
335 } else if (filename == kSilverlightPlugin) { | 342 } else if (filename == kSilverlightPlugin) { |
336 // Explanation for this quirk can be found in | 343 // Explanation for this quirk can be found in |
337 // WebPluginDelegateImpl::Initialize. | 344 // WebPluginDelegateImpl::Initialize. |
338 quirks_ |= PLUGIN_QUIRK_PATCH_SETCURSOR; | 345 quirks_ |= PLUGIN_QUIRK_PATCH_SETCURSOR; |
339 } else if (plugin_info.name.find(L"DivX Web Player") != | 346 } else if (plugin_info.name.find(L"DivX Web Player") != |
340 std::wstring::npos) { | 347 std::wstring::npos) { |
341 // The divx plugin sets its size on the first NPP_SetWindow call and never | 348 // The divx plugin sets its size on the first NPP_SetWindow call and never |
342 // updates its size. We should call the underlying NPP_SetWindow only when | 349 // updates its size. We should call the underlying NPP_SetWindow only when |
343 // we have the correct size. | 350 // we have the correct size. |
344 quirks_ |= PLUGIN_QUIRK_IGNORE_FIRST_SETWINDOW_CALL; | 351 quirks_ |= PLUGIN_QUIRK_IGNORE_FIRST_SETWINDOW_CALL; |
(...skipping 1060 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1405 ::ReleaseCapture(); | 1412 ::ReleaseCapture(); |
1406 break; | 1413 break; |
1407 | 1414 |
1408 default: | 1415 default: |
1409 break; | 1416 break; |
1410 } | 1417 } |
1411 } | 1418 } |
1412 | 1419 |
1413 } // namespace npapi | 1420 } // namespace npapi |
1414 } // namespace webkit | 1421 } // namespace webkit |
OLD | NEW |