| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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/plugin_host.h" | 5 #include "webkit/plugins/npapi/plugin_host.h" |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/file_util.h" | 8 #include "base/file_util.h" |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 83 PluginHost::~PluginHost() { | 83 PluginHost::~PluginHost() { |
| 84 } | 84 } |
| 85 | 85 |
| 86 PluginHost *PluginHost::Singleton() { | 86 PluginHost *PluginHost::Singleton() { |
| 87 CR_DEFINE_STATIC_LOCAL(scoped_refptr<PluginHost>, singleton, ()); | 87 CR_DEFINE_STATIC_LOCAL(scoped_refptr<PluginHost>, singleton, ()); |
| 88 if (singleton.get() == NULL) { | 88 if (singleton.get() == NULL) { |
| 89 singleton = new PluginHost(); | 89 singleton = new PluginHost(); |
| 90 } | 90 } |
| 91 | 91 |
| 92 DCHECK(singleton.get() != NULL); | 92 DCHECK(singleton.get() != NULL); |
| 93 return singleton; | 93 return singleton.get(); |
| 94 } | 94 } |
| 95 | 95 |
| 96 void PluginHost::InitializeHostFuncs() { | 96 void PluginHost::InitializeHostFuncs() { |
| 97 memset(&host_funcs_, 0, sizeof(host_funcs_)); | 97 memset(&host_funcs_, 0, sizeof(host_funcs_)); |
| 98 host_funcs_.size = sizeof(host_funcs_); | 98 host_funcs_.size = sizeof(host_funcs_); |
| 99 host_funcs_.version = (NP_VERSION_MAJOR << 8) | (NP_VERSION_MINOR); | 99 host_funcs_.version = (NP_VERSION_MAJOR << 8) | (NP_VERSION_MINOR); |
| 100 | 100 |
| 101 // The "basic" functions | 101 // The "basic" functions |
| 102 host_funcs_.geturl = &NPN_GetURL; | 102 host_funcs_.geturl = &NPN_GetURL; |
| 103 host_funcs_.posturl = &NPN_PostURL; | 103 host_funcs_.posturl = &NPN_PostURL; |
| (...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 337 WebKit::resetPluginCache(reload_pages ? true : false); | 337 WebKit::resetPluginCache(reload_pages ? true : false); |
| 338 } | 338 } |
| 339 | 339 |
| 340 // Requests a range of bytes for a seekable stream. | 340 // Requests a range of bytes for a seekable stream. |
| 341 NPError NPN_RequestRead(NPStream* stream, NPByteRange* range_list) { | 341 NPError NPN_RequestRead(NPStream* stream, NPByteRange* range_list) { |
| 342 if (!stream || !range_list) | 342 if (!stream || !range_list) |
| 343 return NPERR_GENERIC_ERROR; | 343 return NPERR_GENERIC_ERROR; |
| 344 | 344 |
| 345 scoped_refptr<PluginInstance> plugin( | 345 scoped_refptr<PluginInstance> plugin( |
| 346 reinterpret_cast<PluginInstance*>(stream->ndata)); | 346 reinterpret_cast<PluginInstance*>(stream->ndata)); |
| 347 if (!plugin) | 347 if (!plugin.get()) |
| 348 return NPERR_GENERIC_ERROR; | 348 return NPERR_GENERIC_ERROR; |
| 349 | 349 |
| 350 plugin->RequestRead(stream, range_list); | 350 plugin->RequestRead(stream, range_list); |
| 351 return NPERR_NO_ERROR; | 351 return NPERR_NO_ERROR; |
| 352 } | 352 } |
| 353 | 353 |
| 354 // Generic form of GetURL for common code between GetURL and GetURLNotify. | 354 // Generic form of GetURL for common code between GetURL and GetURLNotify. |
| 355 static NPError GetURLNotify(NPP id, | 355 static NPError GetURLNotify(NPP id, |
| 356 const char* url, | 356 const char* url, |
| 357 const char* target, | 357 const char* target, |
| 358 bool notify, | 358 bool notify, |
| 359 void* notify_data) { | 359 void* notify_data) { |
| 360 if (!url) | 360 if (!url) |
| 361 return NPERR_INVALID_URL; | 361 return NPERR_INVALID_URL; |
| 362 | 362 |
| 363 scoped_refptr<PluginInstance> plugin(FindInstance(id)); | 363 scoped_refptr<PluginInstance> plugin(FindInstance(id)); |
| 364 if (!plugin) { | 364 if (!plugin.get()) { |
| 365 return NPERR_GENERIC_ERROR; | 365 return NPERR_GENERIC_ERROR; |
| 366 } | 366 } |
| 367 | 367 |
| 368 plugin->RequestURL(url, "GET", target, NULL, 0, notify, notify_data); | 368 plugin->RequestURL(url, "GET", target, NULL, 0, notify, notify_data); |
| 369 return NPERR_NO_ERROR; | 369 return NPERR_NO_ERROR; |
| 370 } | 370 } |
| 371 | 371 |
| 372 // Requests creation of a new stream with the contents of the | 372 // Requests creation of a new stream with the contents of the |
| 373 // specified URL; gets notification of the result. | 373 // specified URL; gets notification of the result. |
| 374 NPError NPN_GetURLNotify(NPP id, | 374 NPError NPN_GetURLNotify(NPP id, |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 418 const char* target, | 418 const char* target, |
| 419 uint32_t len, | 419 uint32_t len, |
| 420 const char* buf, | 420 const char* buf, |
| 421 NPBool file, | 421 NPBool file, |
| 422 bool notify, | 422 bool notify, |
| 423 void* notify_data) { | 423 void* notify_data) { |
| 424 if (!url) | 424 if (!url) |
| 425 return NPERR_INVALID_URL; | 425 return NPERR_INVALID_URL; |
| 426 | 426 |
| 427 scoped_refptr<PluginInstance> plugin(FindInstance(id)); | 427 scoped_refptr<PluginInstance> plugin(FindInstance(id)); |
| 428 if (!plugin) { | 428 if (!plugin.get()) { |
| 429 NOTREACHED(); | 429 NOTREACHED(); |
| 430 return NPERR_GENERIC_ERROR; | 430 return NPERR_GENERIC_ERROR; |
| 431 } | 431 } |
| 432 | 432 |
| 433 std::string post_file_contents; | 433 std::string post_file_contents; |
| 434 | 434 |
| 435 if (file) { | 435 if (file) { |
| 436 // Post data to be uploaded from a file. This can be handled in two | 436 // Post data to be uploaded from a file. This can be handled in two |
| 437 // ways. | 437 // ways. |
| 438 // 1. Read entire file and send the contents as if it was a post data | 438 // 1. Read entire file and send the contents as if it was a post data |
| (...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 676 // plug-in drawing occurs, returns HWND | 676 // plug-in drawing occurs, returns HWND |
| 677 // NPNVjavascriptEnabledBool: tells whether Javascript is enabled | 677 // NPNVjavascriptEnabledBool: tells whether Javascript is enabled |
| 678 // NPNVasdEnabledBool: tells whether SmartUpdate is enabled | 678 // NPNVasdEnabledBool: tells whether SmartUpdate is enabled |
| 679 // NPNVOfflineBool: tells whether offline-mode is enabled | 679 // NPNVOfflineBool: tells whether offline-mode is enabled |
| 680 | 680 |
| 681 NPError rv = NPERR_GENERIC_ERROR; | 681 NPError rv = NPERR_GENERIC_ERROR; |
| 682 | 682 |
| 683 switch (static_cast<int>(variable)) { | 683 switch (static_cast<int>(variable)) { |
| 684 case NPNVWindowNPObject: { | 684 case NPNVWindowNPObject: { |
| 685 scoped_refptr<PluginInstance> plugin(FindInstance(id)); | 685 scoped_refptr<PluginInstance> plugin(FindInstance(id)); |
| 686 if (!plugin) { | 686 if (!plugin.get()) { |
| 687 NOTREACHED(); | 687 NOTREACHED(); |
| 688 return NPERR_INVALID_INSTANCE_ERROR; | 688 return NPERR_INVALID_INSTANCE_ERROR; |
| 689 } | 689 } |
| 690 NPObject *np_object = plugin->webplugin()->GetWindowScriptNPObject(); | 690 NPObject *np_object = plugin->webplugin()->GetWindowScriptNPObject(); |
| 691 // Return value is expected to be retained, as | 691 // Return value is expected to be retained, as |
| 692 // described here: | 692 // described here: |
| 693 // <http://www.mozilla.org/projects/plugins/npruntime.html#browseraccess> | 693 // <http://www.mozilla.org/projects/plugins/npruntime.html#browseraccess> |
| 694 if (np_object) { | 694 if (np_object) { |
| 695 WebBindings::retainObject(np_object); | 695 WebBindings::retainObject(np_object); |
| 696 void **v = (void **)value; | 696 void **v = (void **)value; |
| 697 *v = np_object; | 697 *v = np_object; |
| 698 rv = NPERR_NO_ERROR; | 698 rv = NPERR_NO_ERROR; |
| 699 } else { | 699 } else { |
| 700 NOTREACHED(); | 700 NOTREACHED(); |
| 701 } | 701 } |
| 702 break; | 702 break; |
| 703 } | 703 } |
| 704 case NPNVPluginElementNPObject: { | 704 case NPNVPluginElementNPObject: { |
| 705 scoped_refptr<PluginInstance> plugin(FindInstance(id)); | 705 scoped_refptr<PluginInstance> plugin(FindInstance(id)); |
| 706 if (!plugin) { | 706 if (!plugin.get()) { |
| 707 NOTREACHED(); | 707 NOTREACHED(); |
| 708 return NPERR_INVALID_INSTANCE_ERROR; | 708 return NPERR_INVALID_INSTANCE_ERROR; |
| 709 } | 709 } |
| 710 NPObject *np_object = plugin->webplugin()->GetPluginElement(); | 710 NPObject *np_object = plugin->webplugin()->GetPluginElement(); |
| 711 // Return value is expected to be retained, as | 711 // Return value is expected to be retained, as |
| 712 // described here: | 712 // described here: |
| 713 // <http://www.mozilla.org/projects/plugins/npruntime.html#browseraccess> | 713 // <http://www.mozilla.org/projects/plugins/npruntime.html#browseraccess> |
| 714 if (np_object) { | 714 if (np_object) { |
| 715 WebBindings::retainObject(np_object); | 715 WebBindings::retainObject(np_object); |
| 716 void** v = static_cast<void**>(value); | 716 void** v = static_cast<void**>(value); |
| 717 *v = np_object; | 717 *v = np_object; |
| 718 rv = NPERR_NO_ERROR; | 718 rv = NPERR_NO_ERROR; |
| 719 } else { | 719 } else { |
| 720 NOTREACHED(); | 720 NOTREACHED(); |
| 721 } | 721 } |
| 722 break; | 722 break; |
| 723 } | 723 } |
| 724 #if !defined(OS_MACOSX) // OS X doesn't have windowed plugins. | 724 #if !defined(OS_MACOSX) // OS X doesn't have windowed plugins. |
| 725 case NPNVnetscapeWindow: { | 725 case NPNVnetscapeWindow: { |
| 726 scoped_refptr<PluginInstance> plugin = FindInstance(id); | 726 scoped_refptr<PluginInstance> plugin = FindInstance(id); |
| 727 if (!plugin) { | 727 if (!plugin.get()) { |
| 728 NOTREACHED(); | 728 NOTREACHED(); |
| 729 return NPERR_INVALID_INSTANCE_ERROR; | 729 return NPERR_INVALID_INSTANCE_ERROR; |
| 730 } | 730 } |
| 731 gfx::PluginWindowHandle handle = plugin->window_handle(); | 731 gfx::PluginWindowHandle handle = plugin->window_handle(); |
| 732 *((void**)value) = (void*)handle; | 732 *((void**)value) = (void*)handle; |
| 733 rv = NPERR_NO_ERROR; | 733 rv = NPERR_NO_ERROR; |
| 734 break; | 734 break; |
| 735 } | 735 } |
| 736 #endif | 736 #endif |
| 737 case NPNVjavascriptEnabledBool: { | 737 case NPNVjavascriptEnabledBool: { |
| (...skipping 16 matching lines...) Expand all Loading... |
| 754 #endif | 754 #endif |
| 755 case NPNVSupportsWindowless: { | 755 case NPNVSupportsWindowless: { |
| 756 NPBool* supports_windowless = reinterpret_cast<NPBool*>(value); | 756 NPBool* supports_windowless = reinterpret_cast<NPBool*>(value); |
| 757 *supports_windowless = true; | 757 *supports_windowless = true; |
| 758 rv = NPERR_NO_ERROR; | 758 rv = NPERR_NO_ERROR; |
| 759 break; | 759 break; |
| 760 } | 760 } |
| 761 case NPNVprivateModeBool: { | 761 case NPNVprivateModeBool: { |
| 762 NPBool* private_mode = reinterpret_cast<NPBool*>(value); | 762 NPBool* private_mode = reinterpret_cast<NPBool*>(value); |
| 763 scoped_refptr<PluginInstance> plugin(FindInstance(id)); | 763 scoped_refptr<PluginInstance> plugin(FindInstance(id)); |
| 764 if (!plugin) { | 764 if (!plugin.get()) { |
| 765 NOTREACHED(); | 765 NOTREACHED(); |
| 766 return NPERR_INVALID_INSTANCE_ERROR; | 766 return NPERR_INVALID_INSTANCE_ERROR; |
| 767 } | 767 } |
| 768 *private_mode = plugin->webplugin()->IsOffTheRecord(); | 768 *private_mode = plugin->webplugin()->IsOffTheRecord(); |
| 769 rv = NPERR_NO_ERROR; | 769 rv = NPERR_NO_ERROR; |
| 770 break; | 770 break; |
| 771 } | 771 } |
| 772 #if defined(OS_MACOSX) | 772 #if defined(OS_MACOSX) |
| 773 case NPNVpluginDrawingModel: { | 773 case NPNVpluginDrawingModel: { |
| 774 // return the drawing model that was negotiated when we initialized. | 774 // return the drawing model that was negotiated when we initialized. |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 829 DVLOG(1) << "NPN_GetValue(" << variable << ") is not implemented yet."; | 829 DVLOG(1) << "NPN_GetValue(" << variable << ") is not implemented yet."; |
| 830 break; | 830 break; |
| 831 } | 831 } |
| 832 return rv; | 832 return rv; |
| 833 } | 833 } |
| 834 | 834 |
| 835 NPError NPN_SetValue(NPP id, NPPVariable variable, void* value) { | 835 NPError NPN_SetValue(NPP id, NPPVariable variable, void* value) { |
| 836 // Allows the plugin to set various modes | 836 // Allows the plugin to set various modes |
| 837 | 837 |
| 838 scoped_refptr<PluginInstance> plugin(FindInstance(id)); | 838 scoped_refptr<PluginInstance> plugin(FindInstance(id)); |
| 839 if (!plugin) { | 839 if (!plugin.get()) { |
| 840 NOTREACHED(); | 840 NOTREACHED(); |
| 841 return NPERR_INVALID_INSTANCE_ERROR; | 841 return NPERR_INVALID_INSTANCE_ERROR; |
| 842 } | 842 } |
| 843 switch(variable) { | 843 switch(variable) { |
| 844 case NPPVpluginWindowBool: { | 844 case NPPVpluginWindowBool: { |
| 845 // Sets windowless mode for display of the plugin | 845 // Sets windowless mode for display of the plugin |
| 846 // Note: the documentation at | 846 // Note: the documentation at |
| 847 // http://developer.mozilla.org/en/docs/NPN_SetValue is wrong. When | 847 // http://developer.mozilla.org/en/docs/NPN_SetValue is wrong. When |
| 848 // value is NULL, the mode is set to true. This is the same way Mozilla | 848 // value is NULL, the mode is set to true. This is the same way Mozilla |
| 849 // works. | 849 // works. |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 913 } | 913 } |
| 914 | 914 |
| 915 void* NPN_GetJavaPeer(NPP) { | 915 void* NPN_GetJavaPeer(NPP) { |
| 916 // TODO: implement me | 916 // TODO: implement me |
| 917 DVLOG(1) << "NPN_GetJavaPeer is not implemented."; | 917 DVLOG(1) << "NPN_GetJavaPeer is not implemented."; |
| 918 return NULL; | 918 return NULL; |
| 919 } | 919 } |
| 920 | 920 |
| 921 void NPN_PushPopupsEnabledState(NPP id, NPBool enabled) { | 921 void NPN_PushPopupsEnabledState(NPP id, NPBool enabled) { |
| 922 scoped_refptr<PluginInstance> plugin(FindInstance(id)); | 922 scoped_refptr<PluginInstance> plugin(FindInstance(id)); |
| 923 if (plugin) | 923 if (plugin.get()) |
| 924 plugin->PushPopupsEnabledState(enabled ? true : false); | 924 plugin->PushPopupsEnabledState(enabled ? true : false); |
| 925 } | 925 } |
| 926 | 926 |
| 927 void NPN_PopPopupsEnabledState(NPP id) { | 927 void NPN_PopPopupsEnabledState(NPP id) { |
| 928 scoped_refptr<PluginInstance> plugin(FindInstance(id)); | 928 scoped_refptr<PluginInstance> plugin(FindInstance(id)); |
| 929 if (plugin) | 929 if (plugin.get()) |
| 930 plugin->PopPopupsEnabledState(); | 930 plugin->PopPopupsEnabledState(); |
| 931 } | 931 } |
| 932 | 932 |
| 933 void NPN_PluginThreadAsyncCall(NPP id, | 933 void NPN_PluginThreadAsyncCall(NPP id, |
| 934 void (*func)(void*), | 934 void (*func)(void*), |
| 935 void* user_data) { | 935 void* user_data) { |
| 936 scoped_refptr<PluginInstance> plugin(FindInstance(id)); | 936 scoped_refptr<PluginInstance> plugin(FindInstance(id)); |
| 937 if (plugin) | 937 if (plugin.get()) |
| 938 plugin->PluginThreadAsyncCall(func, user_data); | 938 plugin->PluginThreadAsyncCall(func, user_data); |
| 939 } | 939 } |
| 940 | 940 |
| 941 NPError NPN_GetValueForURL(NPP id, | 941 NPError NPN_GetValueForURL(NPP id, |
| 942 NPNURLVariable variable, | 942 NPNURLVariable variable, |
| 943 const char* url, | 943 const char* url, |
| 944 char** value, | 944 char** value, |
| 945 uint32_t* len) { | 945 uint32_t* len) { |
| 946 if (!id) | 946 if (!id) |
| 947 return NPERR_INVALID_PARAM; | 947 return NPERR_INVALID_PARAM; |
| 948 | 948 |
| 949 if (!url || !*url || !len) | 949 if (!url || !*url || !len) |
| 950 return NPERR_INVALID_URL; | 950 return NPERR_INVALID_URL; |
| 951 | 951 |
| 952 *len = 0; | 952 *len = 0; |
| 953 std::string result; | 953 std::string result; |
| 954 | 954 |
| 955 switch (variable) { | 955 switch (variable) { |
| 956 case NPNURLVProxy: { | 956 case NPNURLVProxy: { |
| 957 result = "DIRECT"; | 957 result = "DIRECT"; |
| 958 scoped_refptr<PluginInstance> plugin(FindInstance(id)); | 958 scoped_refptr<PluginInstance> plugin(FindInstance(id)); |
| 959 if (!plugin) | 959 if (!plugin.get()) |
| 960 return NPERR_GENERIC_ERROR; | 960 return NPERR_GENERIC_ERROR; |
| 961 | 961 |
| 962 WebPlugin* webplugin = plugin->webplugin(); | 962 WebPlugin* webplugin = plugin->webplugin(); |
| 963 if (!webplugin) | 963 if (!webplugin) |
| 964 return NPERR_GENERIC_ERROR; | 964 return NPERR_GENERIC_ERROR; |
| 965 | 965 |
| 966 if (!webplugin->FindProxyForUrl(GURL(std::string(url)), &result)) | 966 if (!webplugin->FindProxyForUrl(GURL(std::string(url)), &result)) |
| 967 return NPERR_GENERIC_ERROR; | 967 return NPERR_GENERIC_ERROR; |
| 968 break; | 968 break; |
| 969 } | 969 } |
| 970 case NPNURLVCookie: { | 970 case NPNURLVCookie: { |
| 971 scoped_refptr<PluginInstance> plugin(FindInstance(id)); | 971 scoped_refptr<PluginInstance> plugin(FindInstance(id)); |
| 972 if (!plugin) | 972 if (!plugin.get()) |
| 973 return NPERR_GENERIC_ERROR; | 973 return NPERR_GENERIC_ERROR; |
| 974 | 974 |
| 975 WebPlugin* webplugin = plugin->webplugin(); | 975 WebPlugin* webplugin = plugin->webplugin(); |
| 976 if (!webplugin) | 976 if (!webplugin) |
| 977 return NPERR_GENERIC_ERROR; | 977 return NPERR_GENERIC_ERROR; |
| 978 | 978 |
| 979 // Bypass third-party cookie blocking by using the url as the | 979 // Bypass third-party cookie blocking by using the url as the |
| 980 // first_party_for_cookies. | 980 // first_party_for_cookies. |
| 981 GURL cookies_url((std::string(url))); | 981 GURL cookies_url((std::string(url))); |
| 982 result = webplugin->GetCookies(cookies_url, cookies_url); | 982 result = webplugin->GetCookies(cookies_url, cookies_url); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1002 uint32_t len) { | 1002 uint32_t len) { |
| 1003 if (!id) | 1003 if (!id) |
| 1004 return NPERR_INVALID_PARAM; | 1004 return NPERR_INVALID_PARAM; |
| 1005 | 1005 |
| 1006 if (!url || !*url) | 1006 if (!url || !*url) |
| 1007 return NPERR_INVALID_URL; | 1007 return NPERR_INVALID_URL; |
| 1008 | 1008 |
| 1009 switch (variable) { | 1009 switch (variable) { |
| 1010 case NPNURLVCookie: { | 1010 case NPNURLVCookie: { |
| 1011 scoped_refptr<PluginInstance> plugin(FindInstance(id)); | 1011 scoped_refptr<PluginInstance> plugin(FindInstance(id)); |
| 1012 if (!plugin) | 1012 if (!plugin.get()) |
| 1013 return NPERR_GENERIC_ERROR; | 1013 return NPERR_GENERIC_ERROR; |
| 1014 | 1014 |
| 1015 WebPlugin* webplugin = plugin->webplugin(); | 1015 WebPlugin* webplugin = plugin->webplugin(); |
| 1016 if (!webplugin) | 1016 if (!webplugin) |
| 1017 return NPERR_GENERIC_ERROR; | 1017 return NPERR_GENERIC_ERROR; |
| 1018 | 1018 |
| 1019 std::string cookie(value, len); | 1019 std::string cookie(value, len); |
| 1020 GURL cookies_url((std::string(url))); | 1020 GURL cookies_url((std::string(url))); |
| 1021 webplugin->SetCookie(cookies_url, cookies_url, cookie); | 1021 webplugin->SetCookie(cookies_url, cookies_url, cookie); |
| 1022 return NPERR_NO_ERROR; | 1022 return NPERR_NO_ERROR; |
| (...skipping 25 matching lines...) Expand all Loading... |
| 1048 | 1048 |
| 1049 // TODO: implement me (bug 23928) | 1049 // TODO: implement me (bug 23928) |
| 1050 return NPERR_GENERIC_ERROR; | 1050 return NPERR_GENERIC_ERROR; |
| 1051 } | 1051 } |
| 1052 | 1052 |
| 1053 uint32_t NPN_ScheduleTimer(NPP id, | 1053 uint32_t NPN_ScheduleTimer(NPP id, |
| 1054 uint32_t interval, | 1054 uint32_t interval, |
| 1055 NPBool repeat, | 1055 NPBool repeat, |
| 1056 void (*func)(NPP id, uint32_t timer_id)) { | 1056 void (*func)(NPP id, uint32_t timer_id)) { |
| 1057 scoped_refptr<PluginInstance> plugin(FindInstance(id)); | 1057 scoped_refptr<PluginInstance> plugin(FindInstance(id)); |
| 1058 if (!plugin) | 1058 if (!plugin.get()) |
| 1059 return 0; | 1059 return 0; |
| 1060 | 1060 |
| 1061 return plugin->ScheduleTimer(interval, repeat, func); | 1061 return plugin->ScheduleTimer(interval, repeat, func); |
| 1062 } | 1062 } |
| 1063 | 1063 |
| 1064 void NPN_UnscheduleTimer(NPP id, uint32_t timer_id) { | 1064 void NPN_UnscheduleTimer(NPP id, uint32_t timer_id) { |
| 1065 scoped_refptr<PluginInstance> plugin(FindInstance(id)); | 1065 scoped_refptr<PluginInstance> plugin(FindInstance(id)); |
| 1066 if (plugin) | 1066 if (plugin.get()) |
| 1067 plugin->UnscheduleTimer(timer_id); | 1067 plugin->UnscheduleTimer(timer_id); |
| 1068 } | 1068 } |
| 1069 | 1069 |
| 1070 NPError NPN_PopUpContextMenu(NPP id, NPMenu* menu) { | 1070 NPError NPN_PopUpContextMenu(NPP id, NPMenu* menu) { |
| 1071 if (!menu) | 1071 if (!menu) |
| 1072 return NPERR_INVALID_PARAM; | 1072 return NPERR_INVALID_PARAM; |
| 1073 | 1073 |
| 1074 scoped_refptr<PluginInstance> plugin(FindInstance(id)); | 1074 scoped_refptr<PluginInstance> plugin(FindInstance(id)); |
| 1075 if (plugin) { | 1075 if (plugin.get()) { |
| 1076 return plugin->PopUpContextMenu(menu); | 1076 return plugin->PopUpContextMenu(menu); |
| 1077 } | 1077 } |
| 1078 NOTREACHED(); | 1078 NOTREACHED(); |
| 1079 return NPERR_GENERIC_ERROR; | 1079 return NPERR_GENERIC_ERROR; |
| 1080 } | 1080 } |
| 1081 | 1081 |
| 1082 NPBool NPN_ConvertPoint(NPP id, double sourceX, double sourceY, | 1082 NPBool NPN_ConvertPoint(NPP id, double sourceX, double sourceY, |
| 1083 NPCoordinateSpace sourceSpace, | 1083 NPCoordinateSpace sourceSpace, |
| 1084 double *destX, double *destY, | 1084 double *destX, double *destY, |
| 1085 NPCoordinateSpace destSpace) { | 1085 NPCoordinateSpace destSpace) { |
| 1086 scoped_refptr<PluginInstance> plugin(FindInstance(id)); | 1086 scoped_refptr<PluginInstance> plugin(FindInstance(id)); |
| 1087 if (plugin) { | 1087 if (plugin.get()) { |
| 1088 return plugin->ConvertPoint(sourceX, sourceY, sourceSpace, | 1088 return plugin->ConvertPoint( |
| 1089 destX, destY, destSpace); | 1089 sourceX, sourceY, sourceSpace, destX, destY, destSpace); |
| 1090 } | 1090 } |
| 1091 NOTREACHED(); | 1091 NOTREACHED(); |
| 1092 return false; | 1092 return false; |
| 1093 } | 1093 } |
| 1094 | 1094 |
| 1095 NPBool NPN_HandleEvent(NPP id, void *event, NPBool handled) { | 1095 NPBool NPN_HandleEvent(NPP id, void *event, NPBool handled) { |
| 1096 // TODO: Implement advanced key handling: http://crbug.com/46578 | 1096 // TODO: Implement advanced key handling: http://crbug.com/46578 |
| 1097 NOTIMPLEMENTED(); | 1097 NOTIMPLEMENTED(); |
| 1098 return false; | 1098 return false; |
| 1099 } | 1099 } |
| 1100 | 1100 |
| 1101 NPBool NPN_UnfocusInstance(NPP id, NPFocusDirection direction) { | 1101 NPBool NPN_UnfocusInstance(NPP id, NPFocusDirection direction) { |
| 1102 // TODO: Implement advanced key handling: http://crbug.com/46578 | 1102 // TODO: Implement advanced key handling: http://crbug.com/46578 |
| 1103 NOTIMPLEMENTED(); | 1103 NOTIMPLEMENTED(); |
| 1104 return false; | 1104 return false; |
| 1105 } | 1105 } |
| 1106 | 1106 |
| 1107 void NPN_URLRedirectResponse(NPP instance, void* notify_data, NPBool allow) { | 1107 void NPN_URLRedirectResponse(NPP instance, void* notify_data, NPBool allow) { |
| 1108 scoped_refptr<PluginInstance> plugin(FindInstance(instance)); | 1108 scoped_refptr<PluginInstance> plugin(FindInstance(instance)); |
| 1109 if (plugin) { | 1109 if (plugin.get()) { |
| 1110 plugin->URLRedirectResponse(!!allow, notify_data); | 1110 plugin->URLRedirectResponse(!!allow, notify_data); |
| 1111 } | 1111 } |
| 1112 } | 1112 } |
| 1113 | 1113 |
| 1114 } // extern "C" | 1114 } // extern "C" |
| OLD | NEW |