WebKit:
[WebKit-https.git] / WebKit / mac / Plugins / WebBaseNetscapePluginView.h
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 #import <Cocoa/Cocoa.h>
31
32 #import <AGL/agl.h>
33 #import <WebKit/npfunctions.h>
34 #import <WebKit/npapi.h>
35 #import <WebKit/WebBasePluginPackage.h>
36 #import <wtf/HashMap.h>
37
38 @class DOMElement;
39 @class WebDataSource;
40 @class WebFrame;
41 @class WebNetscapePluginPackage;
42 @class WebNetscapePluginNullEventSender;
43 @class WebBaseNetscapePluginStream;
44 @class WebNetscapePluginStream;
45 @class WebView;
46
47 class PluginTimer;
48 class WebNetscapePluginEventHandler;
49
50 typedef union PluginPort {
51 #ifndef NP_NO_QUICKDRAW
52     NP_Port qdPort;
53 #endif        
54     NP_CGContext cgPort;
55     NP_GLContext aglPort;
56 } PluginPort;
57
58 typedef struct _NPPluginTextInputFuncs NPPluginTextInputFuncs;
59
60 @interface WebBaseNetscapePluginView : NSView <WebPluginManualLoader, NSTextInput>
61 {
62     WebNetscapePluginPackage *pluginPackage;
63     
64     NSURL *sourceURL;
65     WebFrame *_webFrame;
66     
67     BOOL _loadManually;
68     WebNetscapePluginStream *_manualStream;
69     unsigned _dataLengthReceived;
70     NSError *_error;
71     
72     int mode;
73     
74     unsigned argsCount;
75     char **cAttributes;
76     char **cValues;
77         
78     NPP plugin;
79     NPWindow window;
80     NPWindow lastSetWindow;
81     PluginPort nPort;
82     PluginPort lastSetPort;
83     NPDrawingModel drawingModel;
84     NPEventModel eventModel;
85     
86     // These are only valid when drawingModel is NPDrawingModelOpenGL
87     AGLContext aglContext;
88     NSWindow *aglWindow;
89
90 #ifndef NP_NO_QUICKDRAW
91     // This is only valid when drawingModel is NPDrawingModelQuickDraw
92     GWorldPtr offscreenGWorld;
93 #endif
94
95     WebNetscapePluginEventHandler *eventHandler;
96     
97     BOOL isStarted;
98     BOOL inSetWindow;
99     BOOL hasFocus;
100     BOOL isTransparent;
101     BOOL isCompletelyObscured;
102     BOOL shouldStopSoon;
103
104     BOOL shouldFireTimers;
105     uint32 currentTimerID;
106     HashMap<uint32, PluginTimer*>* timers;
107
108     unsigned pluginFunctionCallDepth;
109     
110     DOMElement *element;
111     
112     int32 specifiedHeight;
113     int32 specifiedWidth;
114             
115     NSString *MIMEType;
116     NSURL *baseURL;
117     NSTrackingRectTag trackingTag;
118     NSMutableArray *streams;
119     NSMutableDictionary *pendingFrameLoads;
120     
121     NPPluginTextInputFuncs *textInputFuncs;
122     
123     NPP_NewProcPtr NPP_New;
124     NPP_DestroyProcPtr NPP_Destroy;
125     NPP_SetWindowProcPtr NPP_SetWindow;
126     NPP_NewStreamProcPtr NPP_NewStream;
127     NPP_DestroyStreamProcPtr NPP_DestroyStream;
128     NPP_StreamAsFileProcPtr NPP_StreamAsFile;
129     NPP_WriteReadyProcPtr NPP_WriteReady;
130     NPP_WriteProcPtr NPP_Write;
131     NPP_PrintProcPtr NPP_Print;
132     NPP_HandleEventProcPtr NPP_HandleEvent;
133     NPP_URLNotifyProcPtr NPP_URLNotify;
134     NPP_GetValueProcPtr NPP_GetValue;
135     NPP_SetValueProcPtr NPP_SetValue;    
136 }
137
138 + (WebBaseNetscapePluginView *)currentPluginView;
139
140
141 - (id)initWithFrame:(NSRect)r
142       pluginPackage:(WebNetscapePluginPackage *)thePluginPackage
143                 URL:(NSURL *)URL
144             baseURL:(NSURL *)baseURL
145            MIMEType:(NSString *)MIME
146       attributeKeys:(NSArray *)keys
147     attributeValues:(NSArray *)values
148        loadManually:(BOOL)loadManually
149          DOMElement:(DOMElement *)anElement;
150
151
152 - (BOOL)start;
153 - (BOOL)isStarted;
154 - (void)stop;
155
156 - (WebFrame *)webFrame;
157 - (WebDataSource *)dataSource;
158 - (WebView *)webView;
159 - (NSWindow *)currentWindow;
160
161 - (NPP)plugin;
162
163 - (WebNetscapePluginPackage *)pluginPackage;
164 - (void)setPluginPackage:(WebNetscapePluginPackage *)thePluginPackage;
165 - (void)setMIMEType:(NSString *)theMIMEType;
166 - (void)setBaseURL:(NSURL *)theBaseURL;
167 - (void)setAttributeKeys:(NSArray *)keys andValues:(NSArray *)values;
168 - (void)setMode:(int)theMode;
169 - (void)viewWillMoveToHostWindow:(NSWindow *)hostWindow;
170 - (void)viewDidMoveToHostWindow;
171 - (void)disconnectStream:(WebBaseNetscapePluginStream*)stream;
172
173 // Returns the NPObject that represents the plugin interface.
174 // The return value is expected to be retained.
175 - (NPObject *)createPluginScriptableObject;
176
177 // -willCallPlugInFunction must be called before calling any of the NPP_* functions for this view's plugin.
178 // This is necessary to ensure that plug-ins are not destroyed while WebKit calls into them.  Some plug-ins (Flash
179 // at least) are written with the assumption that nothing they do in their plug-in functions can cause NPP_Destroy()
180 // to be called.  Unfortunately, this is not true, especially if the plug-in uses NPN_Invoke() to execute a
181 // document.write(), which clears the document and destroys the plug-in.
182 // See <rdar://problem/4480737>.
183 - (void)willCallPlugInFunction;
184
185 // -didCallPlugInFunction should be called after returning from a plug-in function.  It should be called exactly
186 // once for every call to -willCallPlugInFunction.
187 // See <rdar://problem/4480737>.
188 - (void)didCallPlugInFunction;
189
190 - (void)handleMouseMoved:(NSEvent *)event;
191
192 @end
193 #endif
194