165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch/* 265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Copyright (C) 2010 Apple Inc. All rights reserved. 365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Redistribution and use in source and binary forms, with or without 565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * modification, are permitted provided that the following conditions 665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * are met: 765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 1. Redistributions of source code must retain the above copyright 865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * notice, this list of conditions and the following disclaimer. 965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 2. Redistributions in binary form must reproduce the above copyright 1065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * notice, this list of conditions and the following disclaimer in the 1165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * documentation and/or other materials provided with the distribution. 1265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 1365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' 1465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 1565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 1665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS 1765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 1865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 1965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 2265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 2365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THE POSSIBILITY OF SUCH DAMAGE. 2465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch */ 2565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 2665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#ifndef Plugin_h 2765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#define Plugin_h 2865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 2965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/GraphicsLayer.h> 3065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/KURL.h> 3165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <wtf/RefCounted.h> 3265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <wtf/Vector.h> 3365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 3465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochstruct NPObject; 3565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 3665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochnamespace CoreIPC { 3765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch class ArgumentEncoder; 3865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch class ArgumentDecoder; 3965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 4065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 4165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochnamespace WebCore { 4265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch class GraphicsContext; 4365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch class IntRect; 4465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 4565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 4665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochnamespace WebKit { 4765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 4881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochclass ShareableBitmap; 4965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochclass WebKeyboardEvent; 5065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochclass WebMouseEvent; 5165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochclass WebWheelEvent; 5265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 5365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochclass PluginController; 5465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 5565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochclass Plugin : public RefCounted<Plugin> { 5665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochpublic: 5765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch struct Parameters { 5865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch WebCore::KURL url; 5965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch Vector<String> names; 6065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch Vector<String> values; 6165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch String mimeType; 6265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch bool loadManually; 6365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 6465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch void encode(CoreIPC::ArgumentEncoder*) const; 6565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch static bool decode(CoreIPC::ArgumentDecoder*, Parameters&); 6665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch }; 6765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 6865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch virtual ~Plugin(); 6965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 7065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Initializes the plug-in. If the plug-in fails to initialize this should return false. 7165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch virtual bool initialize(PluginController*, const Parameters&) = 0; 7265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 7365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Destroys the plug-in. 7465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch virtual void destroy() = 0; 7565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 7665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Tells the plug-in to paint itself into the given graphics context. The passed-in context and 7765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // dirty rect are in window coordinates. The context is saved/restored by the caller. 7865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch virtual void paint(WebCore::GraphicsContext*, const WebCore::IntRect& dirtyRect) = 0; 7965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 8081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // Tells the plug-in to draw itself into a bitmap, and return that. 8181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch virtual PassRefPtr<ShareableBitmap> snapshot() = 0; 8281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 8365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if PLATFORM(MAC) 8465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // If a plug-in is using the Core Animation drawing model, this returns its plug-in layer. 8565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch virtual PlatformLayer* pluginLayer() = 0; 8665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 872bde8e466a4451c7319e3a072d118917957d6554Steve Block 882bde8e466a4451c7319e3a072d118917957d6554Steve Block // Returns whether the plug-in is transparent or not. 892bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual bool isTransparent() = 0; 9065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 9165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Tells the plug-in that either the plug-ins frame rect or its clip rect has changed. Both rects are in window coordinates. 9265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch virtual void geometryDidChange(const WebCore::IntRect& frameRect, const WebCore::IntRect& clipRect) = 0; 9365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 9465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Tells the plug-in that a frame load request that the plug-in made by calling PluginController::loadURL has finished. 9565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch virtual void frameDidFinishLoading(uint64_t requestID) = 0; 9665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 9765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Tells the plug-in that a frame load request that the plug-in made by calling PluginController::loadURL has failed. 9865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch virtual void frameDidFail(uint64_t requestID, bool wasCancelled) = 0; 9965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 10065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Tells the plug-in that a request to evaluate JavaScript (using PluginController::loadURL) has been fulfilled and passes 10165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // back the result. If evaluating the script failed, result will be null. 10265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch virtual void didEvaluateJavaScript(uint64_t requestID, const String& requestURLString, const String& result) = 0; 10365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 10465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Tells the plug-in that a stream has received its HTTP response. 10565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch virtual void streamDidReceiveResponse(uint64_t streamID, const WebCore::KURL& responseURL, uint32_t streamLength, 10665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch uint32_t lastModifiedTime, const String& mimeType, const String& headers) = 0; 10765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 10865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Tells the plug-in that a stream did receive data. 10965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch virtual void streamDidReceiveData(uint64_t streamID, const char* bytes, int length) = 0; 11065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 11165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Tells the plug-in that a stream has finished loading. 11265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch virtual void streamDidFinishLoading(uint64_t streamID) = 0; 11365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 11465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Tells the plug-in that a stream has failed to load, either because of network errors or because the load was cancelled. 11565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch virtual void streamDidFail(uint64_t streamID, bool wasCancelled) = 0; 11665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 11765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Tells the plug-in that the manual stream has received its HTTP response. 11865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch virtual void manualStreamDidReceiveResponse(const WebCore::KURL& responseURL, uint32_t streamLength, 11965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch uint32_t lastModifiedTime, const String& mimeType, const String& headers) = 0; 12065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 12165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Tells the plug-in that the manual stream did receive data. 12265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch virtual void manualStreamDidReceiveData(const char* bytes, int length) = 0; 12365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 12465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Tells the plug-in that a stream has finished loading. 12565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch virtual void manualStreamDidFinishLoading() = 0; 12665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 12765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Tells the plug-in that a stream has failed to load, either because of network errors or because the load was cancelled. 12865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch virtual void manualStreamDidFail(bool wasCancelled) = 0; 12965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 13065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Tells the plug-in to handle the passed in mouse event. The plug-in should return true if it processed the event. 13165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch virtual bool handleMouseEvent(const WebMouseEvent&) = 0; 13265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 13365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Tells the plug-in to handle the passed in wheel event. The plug-in should return true if it processed the event. 13465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch virtual bool handleWheelEvent(const WebWheelEvent&) = 0; 13565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 13665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Tells the plug-in to handle the passed in mouse over event. The plug-in should return true if it processed the event. 13765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch virtual bool handleMouseEnterEvent(const WebMouseEvent&) = 0; 13865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 13965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Tells the plug-in to handle the passed in mouse leave event. The plug-in should return true if it processed the event. 14065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch virtual bool handleMouseLeaveEvent(const WebMouseEvent&) = 0; 14165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 14265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Tells the plug-in to handle the passed in keyboard event. The plug-in should return true if it processed the event. 14365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch virtual bool handleKeyboardEvent(const WebKeyboardEvent&) = 0; 14465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 14565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Tells the plug-in about focus changes. 14665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch virtual void setFocus(bool) = 0; 14765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 14865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Get the NPObject that corresponds to the plug-in's scriptable object. Returns a retained object. 14965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch virtual NPObject* pluginScriptableNPObject() = 0; 15065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 15165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if PLATFORM(MAC) 15265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Tells the plug-in about window focus changes. 15365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch virtual void windowFocusChanged(bool) = 0; 15465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 15565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Tells the plug-in about window and plug-in frame changes. 15665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch virtual void windowAndViewFramesChanged(const WebCore::IntRect& windowFrameInScreenCoordinates, const WebCore::IntRect& viewFrameInWindowCoordinates) = 0; 15765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 15865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Tells the plug-in about window visibility changes. 15965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch virtual void windowVisibilityChanged(bool) = 0; 16065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 16165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Get the per complex text input identifier. 16265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch virtual uint64_t pluginComplexTextInputIdentifier() const = 0; 16365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 16465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Send the complex text input to the plug-in. 16565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch virtual void sendComplexTextInput(const String& textInput) = 0; 16665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 16765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 16865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Called when the private browsing state for this plug-in changes. 16965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch virtual void privateBrowsingStateChanged(bool) = 0; 17065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 17165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Returns the plug-in controller for this plug-in. 17265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // FIXME: We could just have the controller be a member variable of Plugin. 17365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch virtual PluginController* controller() = 0; 17465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 17565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochprotected: 17665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch Plugin(); 17765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}; 17865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 17965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} // namespace WebKit 18065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 18165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif // Plugin_h 182