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