WebKit/mac/Plugins/npapi.mm
changeset 0 4f2f89ce4247
equal deleted inserted replaced
-1:000000000000 0:4f2f89ce4247
       
     1 /*
       
     2  * Copyright (C) 2005 Apple Computer, Inc.  All rights reserved.
       
     3  *
       
     4  * Redistribution and use in source and binary forms, with or without
       
     5  * modification, are permitted provided that the following conditions
       
     6  * are met:
       
     7  *
       
     8  * 1.  Redistributions of source code must retain the above copyright
       
     9  *     notice, this list of conditions and the following disclaimer. 
       
    10  * 2.  Redistributions in binary form must reproduce the above copyright
       
    11  *     notice, this list of conditions and the following disclaimer in the
       
    12  *     documentation and/or other materials provided with the distribution. 
       
    13  * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
       
    14  *     its contributors may be used to endorse or promote products derived
       
    15  *     from this software without specific prior written permission. 
       
    16  *
       
    17  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
       
    18  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
       
    19  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
       
    20  * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
       
    21  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
       
    22  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
       
    23  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
       
    24  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
       
    25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
       
    26  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
       
    27  */
       
    28 
       
    29 #if ENABLE(NETSCAPE_PLUGIN_API)
       
    30 #import <WebKit/npapi.h>
       
    31 
       
    32 #import "WebNetscapePluginView.h"
       
    33 #import "WebKitLogging.h"
       
    34 #import <WebCore/PluginMainThreadScheduler.h>
       
    35 
       
    36 using namespace WebCore;
       
    37 
       
    38 WebNetscapePluginView *pluginViewForInstance(NPP instance);
       
    39 
       
    40 // general plug-in to browser functions
       
    41 
       
    42 void* NPN_MemAlloc(uint32_t size)
       
    43 {
       
    44     return malloc(size);
       
    45 }
       
    46 
       
    47 void NPN_MemFree(void* ptr)
       
    48 {
       
    49     free(ptr);
       
    50 }
       
    51 
       
    52 uint32_t NPN_MemFlush(uint32_t size)
       
    53 {
       
    54     LOG(Plugins, "NPN_MemFlush");
       
    55     return size;
       
    56 }
       
    57 
       
    58 void NPN_ReloadPlugins(NPBool reloadPages)
       
    59 {
       
    60     LOG(Plugins, "NPN_ReloadPlugins");
       
    61 }
       
    62 
       
    63 NPError NPN_RequestRead(NPStream* stream, NPByteRange* rangeList)
       
    64 {
       
    65     LOG(Plugins, "NPN_RequestRead");
       
    66     return NPERR_GENERIC_ERROR;
       
    67 }
       
    68 
       
    69 // instance-specific functions
       
    70 // The plugin view is always the ndata of the instance. Sometimes, plug-ins will call an instance-specific function
       
    71 // with a NULL instance. To workaround this, call the last plug-in view that made a call to a plug-in.
       
    72 // Currently, the current plug-in view is only set before NPP_New in [WebNetscapePluginView start].
       
    73 // This specifically works around Flash and Shockwave. When we call NPP_New, they call NPN_UserAgent with a NULL instance.
       
    74 WebNetscapePluginView *pluginViewForInstance(NPP instance)
       
    75 {
       
    76     if (instance && instance->ndata)
       
    77         return (WebNetscapePluginView *)instance->ndata;
       
    78     else
       
    79         return [WebNetscapePluginView currentPluginView];
       
    80 }
       
    81 
       
    82 NPError NPN_GetURLNotify(NPP instance, const char* URL, const char* target, void* notifyData)
       
    83 {
       
    84     return [pluginViewForInstance(instance) getURLNotify:URL target:target notifyData:notifyData];
       
    85 }
       
    86 
       
    87 NPError NPN_GetURL(NPP instance, const char* URL, const char* target)
       
    88 {
       
    89     return [pluginViewForInstance(instance) getURL:URL target:target];
       
    90 }
       
    91 
       
    92 NPError NPN_PostURLNotify(NPP instance, const char* URL, const char* target, uint32_t len, const char* buf, NPBool file, void* notifyData)
       
    93 {
       
    94     return [pluginViewForInstance(instance) postURLNotify:URL target:target len:len buf:buf file:file notifyData:notifyData];
       
    95 }
       
    96 
       
    97 NPError NPN_PostURL(NPP instance, const char* URL, const char* target, uint32_t len, const char* buf, NPBool file)
       
    98 {
       
    99     return [pluginViewForInstance(instance) postURL:URL target:target len:len buf:buf file:file];
       
   100 }
       
   101 
       
   102 NPError NPN_NewStream(NPP instance, NPMIMEType type, const char* target, NPStream** stream)
       
   103 {
       
   104     return [pluginViewForInstance(instance) newStream:type target:target stream:stream];
       
   105 }
       
   106 
       
   107 int32_t NPN_Write(NPP instance, NPStream* stream, int32_t len, void* buffer)
       
   108 {
       
   109     return [pluginViewForInstance(instance) write:stream len:len buffer:buffer];
       
   110 }
       
   111 
       
   112 NPError NPN_DestroyStream(NPP instance, NPStream* stream, NPReason reason)
       
   113 {
       
   114     return [pluginViewForInstance(instance) destroyStream:stream reason:reason];
       
   115 }
       
   116 
       
   117 const char* NPN_UserAgent(NPP instance)
       
   118 {
       
   119     return [pluginViewForInstance(instance) userAgent];
       
   120 }
       
   121 
       
   122 void NPN_Status(NPP instance, const char* message)
       
   123 {
       
   124     [pluginViewForInstance(instance) status:message];
       
   125 }
       
   126 
       
   127 void NPN_InvalidateRect(NPP instance, NPRect *invalidRect)
       
   128 {
       
   129     [pluginViewForInstance(instance) invalidateRect:invalidRect];
       
   130 }
       
   131 
       
   132 void NPN_InvalidateRegion(NPP instance, NPRegion invalidRegion)
       
   133 {
       
   134     [pluginViewForInstance(instance) invalidateRegion:invalidRegion];
       
   135 }
       
   136 
       
   137 void NPN_ForceRedraw(NPP instance)
       
   138 {
       
   139     [pluginViewForInstance(instance) forceRedraw];
       
   140 }
       
   141 
       
   142 NPError NPN_GetValue(NPP instance, NPNVariable variable, void *value)
       
   143 {
       
   144     return [pluginViewForInstance(instance) getVariable:variable value:value];
       
   145 }
       
   146 
       
   147 NPError NPN_SetValue(NPP instance, NPPVariable variable, void *value)
       
   148 {
       
   149     return [pluginViewForInstance(instance) setVariable:variable value:value];
       
   150 }
       
   151 
       
   152 // Unsupported functions
       
   153 
       
   154 void* NPN_GetJavaEnv(void)
       
   155 {
       
   156     LOG(Plugins, "NPN_GetJavaEnv");
       
   157     return NULL;
       
   158 }
       
   159 
       
   160 void* NPN_GetJavaPeer(NPP instance)
       
   161 {
       
   162     LOG(Plugins, "NPN_GetJavaPeer");
       
   163     return NULL;
       
   164 }
       
   165 
       
   166 void NPN_PushPopupsEnabledState(NPP instance, NPBool enabled)
       
   167 {
       
   168 }
       
   169 
       
   170 void NPN_PopPopupsEnabledState(NPP instance)
       
   171 {
       
   172 }
       
   173 
       
   174 void NPN_PluginThreadAsyncCall(NPP instance, void (*func) (void *), void *userData)
       
   175 {
       
   176     PluginMainThreadScheduler::scheduler().scheduleCall(instance, func, userData);
       
   177 }
       
   178 
       
   179 uint32_t NPN_ScheduleTimer(NPP instance, uint32_t interval, NPBool repeat, void (*timerFunc)(NPP npp, uint32_t timerID))
       
   180 {
       
   181     return [pluginViewForInstance(instance) scheduleTimerWithInterval:interval repeat:repeat timerFunc:timerFunc];
       
   182 }
       
   183 
       
   184 void NPN_UnscheduleTimer(NPP instance, uint32_t timerID)
       
   185 {
       
   186     [pluginViewForInstance(instance) unscheduleTimer:timerID];
       
   187 }
       
   188 
       
   189 NPError NPN_PopUpContextMenu(NPP instance, NPMenu *menu)
       
   190 {
       
   191     return [pluginViewForInstance(instance) popUpContextMenu:menu];
       
   192 }
       
   193 
       
   194 NPError NPN_GetValueForURL(NPP instance, NPNURLVariable variable, const char* url, char** value, uint32_t* len)
       
   195 {
       
   196     return [pluginViewForInstance(instance) getVariable:variable forURL:url value:value length:len];
       
   197 }
       
   198 
       
   199 NPError NPN_SetValueForURL(NPP instance, NPNURLVariable variable, const char* url, const char* value, uint32_t len)
       
   200 {
       
   201     return [pluginViewForInstance(instance) setVariable:variable forURL:url value:value length:len];
       
   202 }
       
   203 
       
   204 NPError NPN_GetAuthenticationInfo(NPP instance, const char* protocol, const char* host, int32_t port, const char* scheme, const char *realm, char** username, uint32_t* ulen, char** password, uint32_t* plen)
       
   205 {
       
   206     return [pluginViewForInstance(instance) getAuthenticationInfoWithProtocol:protocol 
       
   207                                                                          host:host 
       
   208                                                                          port:port
       
   209                                                                        scheme:scheme
       
   210                                                                         realm:realm
       
   211                                                                      username:username usernameLength:ulen
       
   212                                                                      password:password passwordLength:plen];
       
   213 }
       
   214 
       
   215 NPBool NPN_ConvertPoint(NPP instance, double sourceX, double sourceY, NPCoordinateSpace sourceSpace, double *destX, double *destY, NPCoordinateSpace destSpace)
       
   216 {
       
   217     return [pluginViewForInstance(instance) convertFromX:sourceX andY:sourceY space:sourceSpace toX:destX andY:destY space:destSpace];
       
   218 }
       
   219 
       
   220 uint32_t WKN_CheckIfAllowedToLoadURL(NPP instance, const char* url, const char* frame, void (*callbackFunc)(NPP npp, uint32_t, NPBool, void*), void* context)
       
   221 {
       
   222     return [pluginViewForInstance(instance) checkIfAllowedToLoadURL:url frame:frame callbackFunc:callbackFunc context:context];
       
   223 }
       
   224 
       
   225 void WKN_CancelCheckIfAllowedToLoadURL(NPP instance, uint32_t checkID)
       
   226 {
       
   227     [pluginViewForInstance(instance) cancelCheckIfAllowedToLoadURL:checkID];
       
   228 }
       
   229 
       
   230 char* WKN_ResolveURL(NPP instance, const char* url, const char* target)
       
   231 {
       
   232     return [pluginViewForInstance(instance) resolveURL:url forTarget:target];
       
   233 }
       
   234 
       
   235 #endif