WebKit/mac/Plugins/WebNetscapePluginView.h
changeset 0 4f2f89ce4247
equal deleted inserted replaced
-1:000000000000 0:4f2f89ce4247
       
     1 /*
       
     2  * Copyright (C) 2005, 2007 Apple 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 
       
    31 #import "WebBaseNetscapePluginView.h"
       
    32 
       
    33 #import "WebNetscapeContainerCheckPrivate.h"
       
    34 #import <WebKit/npfunctions.h>
       
    35 #import <WebKit/npapi.h>
       
    36 #import <wtf/HashMap.h>
       
    37 #import <wtf/HashSet.h>
       
    38 #import <wtf/OwnPtr.h>
       
    39 
       
    40 @class WebDataSource;
       
    41 @class WebFrame;
       
    42 @class WebNetscapePluginPackage;
       
    43 @class WebView;
       
    44 
       
    45 class PluginTimer;
       
    46 class WebNetscapePluginStream;
       
    47 class WebNetscapePluginEventHandler;
       
    48 
       
    49 typedef union PluginPort {
       
    50 #ifndef NP_NO_QUICKDRAW
       
    51     NP_Port qdPort;
       
    52 #endif        
       
    53     NP_CGContext cgPort;
       
    54 } PluginPort;
       
    55 
       
    56 // Because the Adobe 7.x Acrobat plug-in has a hard coded check for a view named 
       
    57 // "WebNetscapePluginDocumentView", this class must retain the old name in order 
       
    58 // for the plug-in to function correctly. (rdar://problem/4699455)
       
    59 #define WebNetscapePluginView WebNetscapePluginDocumentView
       
    60 
       
    61 @interface WebNetscapePluginView : WebBaseNetscapePluginView<WebPluginManualLoader, WebPluginContainerCheckController>
       
    62 {
       
    63     RefPtr<WebNetscapePluginStream> _manualStream;
       
    64 #ifndef BUILDING_ON_TIGER
       
    65     RetainPtr<CALayer> _pluginLayer;
       
    66 #endif
       
    67     unsigned _dataLengthReceived;
       
    68     RetainPtr<NSError> _error;
       
    69         
       
    70     unsigned argsCount;
       
    71     char **cAttributes;
       
    72     char **cValues;
       
    73         
       
    74     NPP plugin;
       
    75     NPWindow window;
       
    76     NPWindow lastSetWindow;
       
    77     PluginPort nPort;
       
    78     PluginPort lastSetPort;
       
    79     NPDrawingModel drawingModel;
       
    80     NPEventModel eventModel;
       
    81     
       
    82 #ifndef NP_NO_QUICKDRAW
       
    83     // This is only valid when drawingModel is NPDrawingModelQuickDraw
       
    84     GWorldPtr offscreenGWorld;
       
    85 #endif
       
    86 
       
    87     OwnPtr<WebNetscapePluginEventHandler> _eventHandler;
       
    88     
       
    89     BOOL inSetWindow;
       
    90     BOOL shouldStopSoon;
       
    91 
       
    92     uint32_t currentTimerID;
       
    93     HashMap<uint32_t, PluginTimer*>* timers;
       
    94 
       
    95     unsigned pluginFunctionCallDepth;
       
    96     
       
    97     int32_t specifiedHeight;
       
    98     int32_t specifiedWidth;
       
    99             
       
   100     HashSet<RefPtr<WebNetscapePluginStream> > streams;
       
   101     RetainPtr<NSMutableDictionary> _pendingFrameLoads;
       
   102     
       
   103     BOOL _isFlash;
       
   104     BOOL _isSilverlight;
       
   105     
       
   106     NSMutableDictionary *_containerChecksInProgress;
       
   107     uint32_t _currentContainerCheckRequestID;
       
   108 }
       
   109 
       
   110 + (WebNetscapePluginView *)currentPluginView;
       
   111 
       
   112 
       
   113 - (id)initWithFrame:(NSRect)r
       
   114       pluginPackage:(WebNetscapePluginPackage *)thePluginPackage
       
   115                 URL:(NSURL *)URL
       
   116             baseURL:(NSURL *)baseURL
       
   117            MIMEType:(NSString *)MIME
       
   118       attributeKeys:(NSArray *)keys
       
   119     attributeValues:(NSArray *)values
       
   120        loadManually:(BOOL)loadManually
       
   121             element:(PassRefPtr<WebCore::HTMLPlugInElement>)element;
       
   122 
       
   123 
       
   124 - (NPP)plugin;
       
   125 
       
   126 - (void)disconnectStream:(WebNetscapePluginStream*)stream;
       
   127 
       
   128 // Returns the NPObject that represents the plugin interface.
       
   129 // The return value is expected to be retained.
       
   130 - (NPObject *)createPluginScriptableObject;
       
   131 
       
   132 // -willCallPlugInFunction must be called before calling any of the NPP_* functions for this view's plugin.
       
   133 // This is necessary to ensure that plug-ins are not destroyed while WebKit calls into them.  Some plug-ins (Flash
       
   134 // at least) are written with the assumption that nothing they do in their plug-in functions can cause NPP_Destroy()
       
   135 // to be called.  Unfortunately, this is not true, especially if the plug-in uses NPN_Invoke() to execute a
       
   136 // document.write(), which clears the document and destroys the plug-in.
       
   137 // See <rdar://problem/4480737>.
       
   138 - (void)willCallPlugInFunction;
       
   139 
       
   140 // -didCallPlugInFunction should be called after returning from a plug-in function.  It should be called exactly
       
   141 // once for every call to -willCallPlugInFunction.
       
   142 // See <rdar://problem/4480737>.
       
   143 - (void)didCallPlugInFunction;
       
   144 
       
   145 - (void)handleMouseMoved:(NSEvent *)event;
       
   146 - (void)handleMouseEntered:(NSEvent *)event;
       
   147 - (void)handleMouseExited:(NSEvent *)event;
       
   148 
       
   149 - (uint32_t)checkIfAllowedToLoadURL:(const char*)urlCString frame:(const char*)frameNameCString callbackFunc:(void (*)(NPP npp, uint32_t checkID, NPBool allowed, void* context))callbackFunc context:(void*)context;
       
   150 - (void)cancelCheckIfAllowedToLoadURL:(uint32_t)checkID;
       
   151 
       
   152 @end
       
   153 
       
   154 @interface WebNetscapePluginView (WebInternal)
       
   155 - (BOOL)sendEvent:(void*)event isDrawRect:(BOOL)eventIsDrawRect;
       
   156 - (NPEventModel)eventModel;
       
   157 #ifndef BUILDING_ON_TIGER
       
   158 - (CALayer *)pluginLayer;
       
   159 #endif
       
   160 - (NPError)loadRequest:(NSURLRequest *)request inTarget:(NSString *)target withNotifyData:(void *)notifyData sendNotification:(BOOL)sendNotification;
       
   161 - (NPError)getURLNotify:(const char *)URL target:(const char *)target notifyData:(void *)notifyData;
       
   162 - (NPError)getURL:(const char *)URL target:(const char *)target;
       
   163 - (NPError)postURLNotify:(const char *)URL target:(const char *)target len:(UInt32)len buf:(const char *)buf file:(NPBool)file notifyData:(void *)notifyData;
       
   164 - (NPError)postURL:(const char *)URL target:(const char *)target len:(UInt32)len buf:(const char *)buf file:(NPBool)file;
       
   165 - (NPError)newStream:(NPMIMEType)type target:(const char *)target stream:(NPStream**)stream;
       
   166 - (NPError)write:(NPStream*)stream len:(SInt32)len buffer:(void *)buffer;
       
   167 - (NPError)destroyStream:(NPStream*)stream reason:(NPReason)reason;
       
   168 - (void)status:(const char *)message;
       
   169 - (const char *)userAgent;
       
   170 - (void)invalidateRect:(NPRect *)invalidRect;
       
   171 - (void)invalidateRegion:(NPRegion)invalidateRegion;
       
   172 - (void)forceRedraw;
       
   173 - (NPError)getVariable:(NPNVariable)variable value:(void *)value;
       
   174 - (NPError)setVariable:(NPPVariable)variable value:(void *)value;
       
   175 - (uint32_t)scheduleTimerWithInterval:(uint32_t)interval repeat:(NPBool)repeat timerFunc:(void (*)(NPP npp, uint32_t timerID))timerFunc;
       
   176 - (void)unscheduleTimer:(uint32_t)timerID;
       
   177 - (NPError)popUpContextMenu:(NPMenu *)menu;
       
   178 - (NPError)getVariable:(NPNURLVariable)variable forURL:(const char*)url value:(char**)value length:(uint32_t*)length;
       
   179 - (NPError)setVariable:(NPNURLVariable)variable forURL:(const char*)url value:(const char*)value length:(uint32_t)length;
       
   180 - (NPError)getAuthenticationInfoWithProtocol:(const char*) protocol host:(const char*)host port:(int32_t)port scheme:(const char*)scheme realm:(const char*)realm
       
   181                                     username:(char**)username usernameLength:(uint32_t*)usernameLength 
       
   182                                     password:(char**)password passwordLength:(uint32_t*)passwordLength;
       
   183 - (char*)resolveURL:(const char*)url forTarget:(const char*)target;
       
   184 @end
       
   185 
       
   186 WKNBrowserContainerCheckFuncs *browserContainerCheckFuncs();
       
   187 
       
   188 #endif
       
   189