1635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/*
2635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Copyright (C) 2005, 2007 Apple Inc. All rights reserved.
3635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *
4635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Redistribution and use in source and binary forms, with or without
5635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * modification, are permitted provided that the following conditions
6635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * are met:
7635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *
8635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 1.  Redistributions of source code must retain the above copyright
9635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *     notice, this list of conditions and the following disclaimer.
10635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 2.  Redistributions in binary form must reproduce the above copyright
11635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *     notice, this list of conditions and the following disclaimer in the
12635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *     documentation and/or other materials provided with the distribution.
13635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
14635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *     its contributors may be used to endorse or promote products derived
15635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *     from this software without specific prior written permission.
16635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *
17635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
18635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
21635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project */
28635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
29635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#if ENABLE(NETSCAPE_PLUGIN_API)
30635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
31635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#import "WebBaseNetscapePluginView.h"
32635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#import "WebNetscapeContainerCheckPrivate.h"
34635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#import <WebKit/npfunctions.h>
35635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#import <WebKit/npapi.h>
36635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#import <wtf/HashMap.h>
37635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#import <wtf/HashSet.h>
38635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#import <wtf/OwnPtr.h>
39635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
40635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project@class WebDataSource;
41635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project@class WebFrame;
42635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project@class WebNetscapePluginPackage;
43635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project@class WebView;
44635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
45635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectclass PluginTimer;
46635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectclass WebNetscapePluginStream;
47635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectclass WebNetscapePluginEventHandler;
48635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
49635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projecttypedef union PluginPort {
50635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#ifndef NP_NO_QUICKDRAW
51635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    NP_Port qdPort;
52635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif
53635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    NP_CGContext cgPort;
54635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} PluginPort;
55635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
56635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project// Because the Adobe 7.x Acrobat plug-in has a hard coded check for a view named
57635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project// "WebNetscapePluginDocumentView", this class must retain the old name in order
58635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project// for the plug-in to function correctly. (rdar://problem/4699455)
59635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#define WebNetscapePluginView WebNetscapePluginDocumentView
60635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch@interface WebNetscapePluginView : WebBaseNetscapePluginView<WebPluginManualLoader, WebPluginContainerCheckController>
62635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{
63635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    RefPtr<WebNetscapePluginStream> _manualStream;
64635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#ifndef BUILDING_ON_TIGER
65635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    RetainPtr<CALayer> _pluginLayer;
66635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif
67635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    unsigned _dataLengthReceived;
68635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    RetainPtr<NSError> _error;
69635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
70635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    unsigned argsCount;
71635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    char **cAttributes;
72635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    char **cValues;
73635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
74635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    NPP plugin;
75635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    NPWindow window;
76635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    NPWindow lastSetWindow;
77635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    PluginPort nPort;
78635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    PluginPort lastSetPort;
79635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    NPDrawingModel drawingModel;
80635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    NPEventModel eventModel;
81635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
82635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#ifndef NP_NO_QUICKDRAW
83635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    // This is only valid when drawingModel is NPDrawingModelQuickDraw
84635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    GWorldPtr offscreenGWorld;
85635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif
86635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
87635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    OwnPtr<WebNetscapePluginEventHandler> _eventHandler;
88635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
89635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    BOOL inSetWindow;
90635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    BOOL shouldStopSoon;
91635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
9221939df44de1705786c545cd1bf519d47250322dBen Murdoch    uint32_t currentTimerID;
9321939df44de1705786c545cd1bf519d47250322dBen Murdoch    HashMap<uint32_t, PluginTimer*>* timers;
94635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
95635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    unsigned pluginFunctionCallDepth;
96635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
9721939df44de1705786c545cd1bf519d47250322dBen Murdoch    int32_t specifiedHeight;
9821939df44de1705786c545cd1bf519d47250322dBen Murdoch    int32_t specifiedWidth;
99635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
100635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    HashSet<RefPtr<WebNetscapePluginStream> > streams;
101635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    RetainPtr<NSMutableDictionary> _pendingFrameLoads;
102635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
103563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    BOOL _isFlash;
104635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    BOOL _isSilverlight;
1050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    NSMutableDictionary *_containerChecksInProgress;
10721939df44de1705786c545cd1bf519d47250322dBen Murdoch    uint32_t _currentContainerCheckRequestID;
108635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}
109635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
110635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project+ (WebNetscapePluginView *)currentPluginView;
111635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
112635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
113635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (id)initWithFrame:(NSRect)r
114635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project      pluginPackage:(WebNetscapePluginPackage *)thePluginPackage
115635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                URL:(NSURL *)URL
116635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project            baseURL:(NSURL *)baseURL
117635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project           MIMEType:(NSString *)MIME
118635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project      attributeKeys:(NSArray *)keys
119635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    attributeValues:(NSArray *)values
120635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project       loadManually:(BOOL)loadManually
121563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark            element:(PassRefPtr<WebCore::HTMLPlugInElement>)element;
122635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
123635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
124635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (NPP)plugin;
125635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
126635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (void)disconnectStream:(WebNetscapePluginStream*)stream;
127635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
128635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project// Returns the NPObject that represents the plugin interface.
129635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project// The return value is expected to be retained.
130635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (NPObject *)createPluginScriptableObject;
131635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
132635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project// -willCallPlugInFunction must be called before calling any of the NPP_* functions for this view's plugin.
133635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project// This is necessary to ensure that plug-ins are not destroyed while WebKit calls into them.  Some plug-ins (Flash
134635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project// at least) are written with the assumption that nothing they do in their plug-in functions can cause NPP_Destroy()
135635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project// to be called.  Unfortunately, this is not true, especially if the plug-in uses NPN_Invoke() to execute a
136635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project// document.write(), which clears the document and destroys the plug-in.
137635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project// See <rdar://problem/4480737>.
138635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (void)willCallPlugInFunction;
139635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
140635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project// -didCallPlugInFunction should be called after returning from a plug-in function.  It should be called exactly
141635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project// once for every call to -willCallPlugInFunction.
142635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project// See <rdar://problem/4480737>.
143635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (void)didCallPlugInFunction;
144635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
145635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (void)handleMouseMoved:(NSEvent *)event;
146692e5dbf12901edacf14812a6fae25462920af42Steve Block- (void)handleMouseEntered:(NSEvent *)event;
147692e5dbf12901edacf14812a6fae25462920af42Steve Block- (void)handleMouseExited:(NSEvent *)event;
148692e5dbf12901edacf14812a6fae25462920af42Steve Block
14921939df44de1705786c545cd1bf519d47250322dBen Murdoch- (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;
15021939df44de1705786c545cd1bf519d47250322dBen Murdoch- (void)cancelCheckIfAllowedToLoadURL:(uint32_t)checkID;
151635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
152635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project@end
153635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
154635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project@interface WebNetscapePluginView (WebInternal)
155635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (BOOL)sendEvent:(void*)event isDrawRect:(BOOL)eventIsDrawRect;
156635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (NPEventModel)eventModel;
157d0825bca7fe65beaee391d30da42e937db621564Steve Block#ifndef BUILDING_ON_TIGER
158d0825bca7fe65beaee391d30da42e937db621564Steve Block- (CALayer *)pluginLayer;
159d0825bca7fe65beaee391d30da42e937db621564Steve Block#endif
160635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (NPError)loadRequest:(NSURLRequest *)request inTarget:(NSString *)target withNotifyData:(void *)notifyData sendNotification:(BOOL)sendNotification;
161635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (NPError)getURLNotify:(const char *)URL target:(const char *)target notifyData:(void *)notifyData;
162635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (NPError)getURL:(const char *)URL target:(const char *)target;
163635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (NPError)postURLNotify:(const char *)URL target:(const char *)target len:(UInt32)len buf:(const char *)buf file:(NPBool)file notifyData:(void *)notifyData;
164635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (NPError)postURL:(const char *)URL target:(const char *)target len:(UInt32)len buf:(const char *)buf file:(NPBool)file;
165635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (NPError)newStream:(NPMIMEType)type target:(const char *)target stream:(NPStream**)stream;
166635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (NPError)write:(NPStream*)stream len:(SInt32)len buffer:(void *)buffer;
167635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (NPError)destroyStream:(NPStream*)stream reason:(NPReason)reason;
168635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (void)status:(const char *)message;
169635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (const char *)userAgent;
170635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (void)invalidateRect:(NPRect *)invalidRect;
171635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (void)invalidateRegion:(NPRegion)invalidateRegion;
172635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (void)forceRedraw;
173635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (NPError)getVariable:(NPNVariable)variable value:(void *)value;
174635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (NPError)setVariable:(NPPVariable)variable value:(void *)value;
17521939df44de1705786c545cd1bf519d47250322dBen Murdoch- (uint32_t)scheduleTimerWithInterval:(uint32_t)interval repeat:(NPBool)repeat timerFunc:(void (*)(NPP npp, uint32_t timerID))timerFunc;
17621939df44de1705786c545cd1bf519d47250322dBen Murdoch- (void)unscheduleTimer:(uint32_t)timerID;
177635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (NPError)popUpContextMenu:(NPMenu *)menu;
17821939df44de1705786c545cd1bf519d47250322dBen Murdoch- (NPError)getVariable:(NPNURLVariable)variable forURL:(const char*)url value:(char**)value length:(uint32_t*)length;
17921939df44de1705786c545cd1bf519d47250322dBen Murdoch- (NPError)setVariable:(NPNURLVariable)variable forURL:(const char*)url value:(const char*)value length:(uint32_t)length;
18021939df44de1705786c545cd1bf519d47250322dBen Murdoch- (NPError)getAuthenticationInfoWithProtocol:(const char*) protocol host:(const char*)host port:(int32_t)port scheme:(const char*)scheme realm:(const char*)realm
18121939df44de1705786c545cd1bf519d47250322dBen Murdoch                                    username:(char**)username usernameLength:(uint32_t*)usernameLength
18221939df44de1705786c545cd1bf519d47250322dBen Murdoch                                    password:(char**)password passwordLength:(uint32_t*)passwordLength;
1830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (char*)resolveURL:(const char*)url forTarget:(const char*)target;
184635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project@end
185635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
1860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochWKNBrowserContainerCheckFuncs *browserContainerCheckFuncs();
1870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
188635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif
189635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
190