Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(102)

Side by Side Diff: webkit/glue/plugins/plugin_host.cc

Issue 453015: Update the Pepper APIs to the latest spec for the 2D demo plugin.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/deps/reference_builds/
Patch Set: '' Created 11 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « webkit/glue/plugins/nphostapi.h ('k') | webkit/glue/webplugin_delegate.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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 // Pepper API support should be turned on for this module. 5 // Pepper API support should be turned on for this module.
6 #define PEPPER_APIS_ENABLED 6 #define PEPPER_APIS_ENABLED
7 7
8 #include "webkit/glue/plugins/plugin_host.h" 8 #include "webkit/glue/plugins/plugin_host.h"
9 9
10 #include "base/file_util.h" 10 #include "base/file_util.h"
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "base/scoped_ptr.h" 12 #include "base/scoped_ptr.h"
13 #include "base/string_piece.h" 13 #include "base/string_piece.h"
14 #include "base/string_util.h" 14 #include "base/string_util.h"
15 #include "base/sys_string_conversions.h" 15 #include "base/sys_string_conversions.h"
16 #include "net/base/net_util.h" 16 #include "net/base/net_util.h"
17 #include "third_party/WebKit/WebKit/chromium/public/WebBindings.h" 17 #include "third_party/WebKit/WebKit/chromium/public/WebBindings.h"
18 #include "webkit/default_plugin/default_plugin_shared.h" 18 #include "webkit/default_plugin/default_plugin_shared.h"
19 #include "webkit/glue/glue_util.h" 19 #include "webkit/glue/glue_util.h"
20 #include "webkit/glue/webplugininfo.h" 20 #include "webkit/glue/webplugininfo.h"
21 #include "webkit/glue/webplugin_delegate.h" 21 #include "webkit/glue/webplugin_delegate.h"
22 #include "webkit/glue/webkit_glue.h" 22 #include "webkit/glue/webkit_glue.h"
23 #include "webkit/glue/pepper/pepper.h"
24 #include "webkit/glue/plugins/plugin_instance.h" 23 #include "webkit/glue/plugins/plugin_instance.h"
25 #include "webkit/glue/plugins/plugin_lib.h" 24 #include "webkit/glue/plugins/plugin_lib.h"
26 #include "webkit/glue/plugins/plugin_list.h" 25 #include "webkit/glue/plugins/plugin_list.h"
27 #include "webkit/glue/plugins/plugin_stream_url.h" 26 #include "webkit/glue/plugins/plugin_stream_url.h"
27 #include "third_party/npapi/bindings/npapi_extensions.h"
28 #include "third_party/npapi/bindings/npruntime.h" 28 #include "third_party/npapi/bindings/npruntime.h"
29 29
30 using WebKit::WebBindings; 30 using WebKit::WebBindings;
31 31
32 namespace NPAPI 32 namespace NPAPI
33 { 33 {
34 scoped_refptr<PluginHost> PluginHost::singleton_; 34 scoped_refptr<PluginHost> PluginHost::singleton_;
35 35
36 PluginHost::PluginHost() { 36 PluginHost::PluginHost() {
37 InitializeHostFuncs(); 37 InitializeHostFuncs();
(...skipping 621 matching lines...) Expand 10 before | Expand all | Expand 10 after
659 // plugin is responsible fro saving the current HDC settings, setting up 659 // plugin is responsible fro saving the current HDC settings, setting up
660 // its own environment, drawing, and restoring the HDC to the previous 660 // its own environment, drawing, and restoring the HDC to the previous
661 // settings. The HDC settings must be restored whenever control returns 661 // settings. The HDC settings must be restored whenever control returns
662 // back to the browser, either before returning from NPP_HandleEvent or 662 // back to the browser, either before returning from NPP_HandleEvent or
663 // before calling a drawing-related netscape method. 663 // before calling a drawing-related netscape method.
664 664
665 NOTIMPLEMENTED(); 665 NOTIMPLEMENTED();
666 } 666 }
667 667
668 #if defined(PEPPER_APIS_ENABLED) 668 #if defined(PEPPER_APIS_ENABLED)
669 static NPError InitializeRenderContext(NPP id, 669 // Pepper 2D device API --------------------------------------------------------
670 NPRenderType type, 670
671 NPRenderContext* context) { 671 static NPError Device2DQueryCapability(NPP id, int32 capability, int32* value) {
672 scoped_refptr<NPAPI::PluginInstance> plugin = FindInstance(id); 672 scoped_refptr<NPAPI::PluginInstance> plugin = FindInstance(id);
673 if (plugin) { 673 if (plugin) {
674 webkit_glue::WebPluginDelegate* delegate = plugin->webplugin()->delegate(); 674 plugin->webplugin()->delegate()->Device2DQueryCapability(capability, value);
675 // Set up the renderer for the specified type. 675 return NPERR_NO_ERROR;
676 return delegate->InitializeRenderContext(type, context); 676 } else {
677 return NPERR_GENERIC_ERROR;
678 }
679 }
680
681 static NPError Device2DQueryConfig(NPP id,
682 const NPDeviceConfig* request,
683 NPDeviceConfig* obtain) {
684 scoped_refptr<NPAPI::PluginInstance> plugin = FindInstance(id);
685 if (plugin) {
686 return plugin->webplugin()->delegate()->Device2DQueryConfig(
687 static_cast<const NPDeviceContext2DConfig*>(request),
688 static_cast<NPDeviceContext2DConfig*>(obtain));
677 } 689 }
678 return NPERR_GENERIC_ERROR; 690 return NPERR_GENERIC_ERROR;
679 } 691 }
680 692
681 static NPError FlushRenderContext(NPP id, 693 static NPError Device2DInitializeContext(NPP id,
682 NPRenderContext* context, 694 const NPDeviceConfig* config,
683 NPFlushRenderContextCallbackPtr callback, 695 NPDeviceContext* context) {
684 void* user_data) {
685 scoped_refptr<NPAPI::PluginInstance> plugin = FindInstance(id); 696 scoped_refptr<NPAPI::PluginInstance> plugin = FindInstance(id);
686 if (plugin) { 697 if (plugin) {
687 webkit_glue::WebPluginDelegate* delegate = plugin->webplugin()->delegate(); 698 return plugin->webplugin()->delegate()->Device2DInitializeContext(
688 // Do the flush. 699 static_cast<const NPDeviceContext2DConfig*>(config),
689 NPError err = delegate->FlushRenderContext(context); 700 static_cast<NPDeviceContext2D*>(context));
701 }
702 return NPERR_GENERIC_ERROR;
703 }
704
705 static NPError Device2DSetStateContext(NPP id,
706 NPDeviceContext* context,
707 int32 state,
708 int32 value) {
709 scoped_refptr<NPAPI::PluginInstance> plugin = FindInstance(id);
710 if (plugin) {
711 return plugin->webplugin()->delegate()->Device2DSetStateContext(
712 static_cast<NPDeviceContext2D*>(context), state, value);
713 }
714 return NPERR_GENERIC_ERROR;
715 }
716
717 static NPError Device2DGetStateContext(NPP id,
718 NPDeviceContext* context,
719 int32 state,
720 int32* value) {
721 scoped_refptr<NPAPI::PluginInstance> plugin = FindInstance(id);
722 if (plugin) {
723 return plugin->webplugin()->delegate()->Device2DGetStateContext(
724 static_cast<NPDeviceContext2D*>(context), state, value);
725 }
726 return NPERR_GENERIC_ERROR;
727 }
728
729 static NPError Device2DFlushContext(NPP id,
730 NPDeviceContext* context,
731 NPDeviceFlushContextCallbackPtr callback,
732 void* user_data) {
733 scoped_refptr<NPAPI::PluginInstance> plugin = FindInstance(id);
734 if (plugin) {
735 NPError err = plugin->webplugin()->delegate()->Device2DFlushContext(
736 static_cast<NPDeviceContext2D*>(context), callback, user_data);
690 737
691 // Invoke the callback to inform the caller the work was done. 738 // Invoke the callback to inform the caller the work was done.
739 // TODO(brettw) this is probably not how we want this to work, this should
740 // happen when the frame is painted so the plugin knows when it can draw
741 // the next frame.
692 if (callback != NULL) 742 if (callback != NULL)
693 (*callback)(context, err, user_data); 743 (*callback)(id, context, err, user_data);
694 744
695 // Return any errors. 745 // Return any errors.
696 return err; 746 return err;
697 } 747 }
698 return NPERR_GENERIC_ERROR; 748 return NPERR_GENERIC_ERROR;
699 } 749 }
700 750
701 static NPError DestroyRenderContext(NPP id, 751 static NPError Device2DDestroyContext(NPP id,
702 NPRenderContext* context) { 752 NPDeviceContext* context) {
703 scoped_refptr<NPAPI::PluginInstance> plugin = FindInstance(id); 753 scoped_refptr<NPAPI::PluginInstance> plugin = FindInstance(id);
704 if (plugin) { 754 if (plugin) {
705 webkit_glue::WebPluginDelegate* delegate = plugin->webplugin()->delegate(); 755 return plugin->webplugin()->delegate()->Device2DDestroyContext(
706 return delegate->DestroyRenderContext(context); 756 static_cast<NPDeviceContext2D*>(context));
707 } 757 }
708 return NPERR_GENERIC_ERROR; 758 return NPERR_GENERIC_ERROR;
709 } 759 }
710 760
711 static NPError OpenFileInSandbox(NPP id, const char* file_name, void** handle) { 761 // -----------------------------------------------------------------------------
712 scoped_refptr<NPAPI::PluginInstance> plugin = FindInstance(id); 762
713 if (!plugin) 763 static NPDevice* AcquireDevice(NPP id, NPDeviceID device_id) {
714 return NPERR_GENERIC_ERROR; 764 static NPDevice device_2d = {
715 webkit_glue::WebPluginDelegate* delegate = plugin->webplugin()->delegate(); 765 Device2DQueryCapability,
716 return delegate->OpenFileInSandbox(file_name, handle); 766 Device2DQueryConfig,
767 Device2DInitializeContext,
768 Device2DSetStateContext,
769 Device2DGetStateContext,
770 Device2DFlushContext,
771 Device2DDestroyContext,
772 };
773 switch (device_id) {
774 case NPPepper2DDevice:
775 return const_cast<NPDevice*>(&device_2d);
776 default:
777 return NULL;
778 }
717 } 779 }
780
718 #endif // defined(PEPPER_APIS_ENABLED) 781 #endif // defined(PEPPER_APIS_ENABLED)
719 782
720 NPError NPN_GetValue(NPP id, NPNVariable variable, void *value) { 783 NPError NPN_GetValue(NPP id, NPNVariable variable, void *value) {
721 // Allows the plugin to query the browser for information 784 // Allows the plugin to query the browser for information
722 // 785 //
723 // Variables: 786 // Variables:
724 // NPNVxDisplay (unix only) 787 // NPNVxDisplay (unix only)
725 // NPNVxtAppContext (unix only) 788 // NPNVxtAppContext (unix only)
726 // NPNVnetscapeWindow (win only) - Gets the native window on which the 789 // NPNVnetscapeWindow (win only) - Gets the native window on which the
727 // plug-in drawing occurs, returns HWND 790 // plug-in drawing occurs, returns HWND
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
865 // we do not support these drawing and event models. 928 // we do not support these drawing and event models.
866 NPBool* supports_model = reinterpret_cast<NPBool*>(value); 929 NPBool* supports_model = reinterpret_cast<NPBool*>(value);
867 *supports_model = FALSE; 930 *supports_model = FALSE;
868 rv = NPERR_NO_ERROR; 931 rv = NPERR_NO_ERROR;
869 break; 932 break;
870 } 933 }
871 #endif 934 #endif
872 #if defined(PEPPER_APIS_ENABLED) 935 #if defined(PEPPER_APIS_ENABLED)
873 case NPNVPepperExtensions: 936 case NPNVPepperExtensions:
874 { 937 {
875 static const NPPepperExtensions kExtensions = { 938 static const NPExtensions kExtensions = {
876 InitializeRenderContext, 939 AcquireDevice,
877 FlushRenderContext,
878 DestroyRenderContext,
879 OpenFileInSandbox,
880 }; 940 };
881 // Return a pointer to the canonical function table. 941 // Return a pointer to the canonical function table.
882 NPPepperExtensions* extensions = 942 NPExtensions* extensions = const_cast<NPExtensions*>(&kExtensions);
883 const_cast<NPPepperExtensions*>(&kExtensions); 943 NPExtensions** exts = reinterpret_cast<NPExtensions**>(value);
884 NPPepperExtensions** exts = reinterpret_cast<NPPepperExtensions**>(value);
885 *exts = extensions; 944 *exts = extensions;
886 rv = NPERR_NO_ERROR; 945 rv = NPERR_NO_ERROR;
887 break; 946 break;
888 } 947 }
889 #endif // defined(PEPPER_APIS_ENABLED) 948 #endif // defined(PEPPER_APIS_ENABLED)
890 default: 949 default:
891 { 950 {
892 // TODO: implement me 951 // TODO: implement me
893 DLOG(INFO) << "NPN_GetValue(" << variable << ") is not implemented yet."; 952 DLOG(INFO) << "NPN_GetValue(" << variable << ") is not implemented yet.";
894 break; 953 break;
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
1124 1183
1125 return plugin->ScheduleTimer(interval, repeat, func); 1184 return plugin->ScheduleTimer(interval, repeat, func);
1126 } 1185 }
1127 1186
1128 void NPN_UnscheduleTimer(NPP id, uint32 timer_id) { 1187 void NPN_UnscheduleTimer(NPP id, uint32 timer_id) {
1129 scoped_refptr<NPAPI::PluginInstance> plugin = FindInstance(id); 1188 scoped_refptr<NPAPI::PluginInstance> plugin = FindInstance(id);
1130 if (plugin) 1189 if (plugin)
1131 plugin->UnscheduleTimer(timer_id); 1190 plugin->UnscheduleTimer(timer_id);
1132 } 1191 }
1133 } // extern "C" 1192 } // extern "C"
OLDNEW
« no previous file with comments | « webkit/glue/plugins/nphostapi.h ('k') | webkit/glue/webplugin_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698