Home | History | Annotate | Download | only in Plugins
      1 /*
      2  * Copyright (C) 2010 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  * 1. Redistributions of source code must retain the above copyright
      8  *    notice, this list of conditions and the following disclaimer.
      9  * 2. Redistributions in binary form must reproduce the above copyright
     10  *    notice, this list of conditions and the following disclaimer in the
     11  *    documentation and/or other materials provided with the distribution.
     12  *
     13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
     14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
     15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
     17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
     23  * THE POSSIBILITY OF SUCH DAMAGE.
     24  */
     25 
     26 #ifndef Plugin_h
     27 #define Plugin_h
     28 
     29 #include <WebCore/GraphicsLayer.h>
     30 #include <WebCore/KURL.h>
     31 #include <wtf/RefCounted.h>
     32 #include <wtf/Vector.h>
     33 
     34 struct NPObject;
     35 
     36 namespace CoreIPC {
     37     class ArgumentEncoder;
     38     class ArgumentDecoder;
     39 }
     40 
     41 namespace WebCore {
     42     class GraphicsContext;
     43     class IntRect;
     44 }
     45 
     46 namespace WebKit {
     47 
     48 class ShareableBitmap;
     49 class WebKeyboardEvent;
     50 class WebMouseEvent;
     51 class WebWheelEvent;
     52 
     53 class PluginController;
     54 
     55 class Plugin : public RefCounted<Plugin> {
     56 public:
     57     struct Parameters {
     58         WebCore::KURL url;
     59         Vector<String> names;
     60         Vector<String> values;
     61         String mimeType;
     62         bool loadManually;
     63 
     64         void encode(CoreIPC::ArgumentEncoder*) const;
     65         static bool decode(CoreIPC::ArgumentDecoder*, Parameters&);
     66     };
     67 
     68     virtual ~Plugin();
     69 
     70     // Initializes the plug-in. If the plug-in fails to initialize this should return false.
     71     virtual bool initialize(PluginController*, const Parameters&) = 0;
     72 
     73     // Destroys the plug-in.
     74     virtual void destroy() = 0;
     75 
     76     // Tells the plug-in to paint itself into the given graphics context. The passed-in context and
     77     // dirty rect are in window coordinates. The context is saved/restored by the caller.
     78     virtual void paint(WebCore::GraphicsContext*, const WebCore::IntRect& dirtyRect) = 0;
     79 
     80     // Tells the plug-in to draw itself into a bitmap, and return that.
     81     virtual PassRefPtr<ShareableBitmap> snapshot() = 0;
     82 
     83 #if PLATFORM(MAC)
     84     // If a plug-in is using the Core Animation drawing model, this returns its plug-in layer.
     85     virtual PlatformLayer* pluginLayer() = 0;
     86 #endif
     87 
     88     // Returns whether the plug-in is transparent or not.
     89     virtual bool isTransparent() = 0;
     90 
     91     // Tells the plug-in that either the plug-ins frame rect or its clip rect has changed. Both rects are in window coordinates.
     92     virtual void geometryDidChange(const WebCore::IntRect& frameRect, const WebCore::IntRect& clipRect) = 0;
     93 
     94     // Tells the plug-in that a frame load request that the plug-in made by calling PluginController::loadURL has finished.
     95     virtual void frameDidFinishLoading(uint64_t requestID) = 0;
     96 
     97     // Tells the plug-in that a frame load request that the plug-in made by calling PluginController::loadURL has failed.
     98     virtual void frameDidFail(uint64_t requestID, bool wasCancelled) = 0;
     99 
    100     // Tells the plug-in that a request to evaluate JavaScript (using PluginController::loadURL) has been fulfilled and passes
    101     // back the result. If evaluating the script failed, result will be null.
    102     virtual void didEvaluateJavaScript(uint64_t requestID, const String& requestURLString, const String& result) = 0;
    103 
    104     // Tells the plug-in that a stream has received its HTTP response.
    105     virtual void streamDidReceiveResponse(uint64_t streamID, const WebCore::KURL& responseURL, uint32_t streamLength,
    106                                           uint32_t lastModifiedTime, const String& mimeType, const String& headers) = 0;
    107 
    108     // Tells the plug-in that a stream did receive data.
    109     virtual void streamDidReceiveData(uint64_t streamID, const char* bytes, int length) = 0;
    110 
    111     // Tells the plug-in that a stream has finished loading.
    112     virtual void streamDidFinishLoading(uint64_t streamID) = 0;
    113 
    114     // Tells the plug-in that a stream has failed to load, either because of network errors or because the load was cancelled.
    115     virtual void streamDidFail(uint64_t streamID, bool wasCancelled) = 0;
    116 
    117     // Tells the plug-in that the manual stream has received its HTTP response.
    118     virtual void manualStreamDidReceiveResponse(const WebCore::KURL& responseURL, uint32_t streamLength,
    119                                                 uint32_t lastModifiedTime, const String& mimeType, const String& headers) = 0;
    120 
    121     // Tells the plug-in that the manual stream did receive data.
    122     virtual void manualStreamDidReceiveData(const char* bytes, int length) = 0;
    123 
    124     // Tells the plug-in that a stream has finished loading.
    125     virtual void manualStreamDidFinishLoading() = 0;
    126 
    127     // Tells the plug-in that a stream has failed to load, either because of network errors or because the load was cancelled.
    128     virtual void manualStreamDidFail(bool wasCancelled) = 0;
    129 
    130     // Tells the plug-in to handle the passed in mouse event. The plug-in should return true if it processed the event.
    131     virtual bool handleMouseEvent(const WebMouseEvent&) = 0;
    132 
    133     // Tells the plug-in to handle the passed in wheel event. The plug-in should return true if it processed the event.
    134     virtual bool handleWheelEvent(const WebWheelEvent&) = 0;
    135 
    136     // Tells the plug-in to handle the passed in mouse over event. The plug-in should return true if it processed the event.
    137     virtual bool handleMouseEnterEvent(const WebMouseEvent&) = 0;
    138 
    139     // Tells the plug-in to handle the passed in mouse leave event. The plug-in should return true if it processed the event.
    140     virtual bool handleMouseLeaveEvent(const WebMouseEvent&) = 0;
    141 
    142     // Tells the plug-in to handle the passed in keyboard event. The plug-in should return true if it processed the event.
    143     virtual bool handleKeyboardEvent(const WebKeyboardEvent&) = 0;
    144 
    145     // Tells the plug-in about focus changes.
    146     virtual void setFocus(bool) = 0;
    147 
    148     // Get the NPObject that corresponds to the plug-in's scriptable object. Returns a retained object.
    149     virtual NPObject* pluginScriptableNPObject() = 0;
    150 
    151 #if PLATFORM(MAC)
    152     // Tells the plug-in about window focus changes.
    153     virtual void windowFocusChanged(bool) = 0;
    154 
    155     // Tells the plug-in about window and plug-in frame changes.
    156     virtual void windowAndViewFramesChanged(const WebCore::IntRect& windowFrameInScreenCoordinates, const WebCore::IntRect& viewFrameInWindowCoordinates) = 0;
    157 
    158     // Tells the plug-in about window visibility changes.
    159     virtual void windowVisibilityChanged(bool) = 0;
    160 
    161     // Get the per complex text input identifier.
    162     virtual uint64_t pluginComplexTextInputIdentifier() const = 0;
    163 
    164     // Send the complex text input to the plug-in.
    165     virtual void sendComplexTextInput(const String& textInput) = 0;
    166 #endif
    167 
    168     // Called when the private browsing state for this plug-in changes.
    169     virtual void privateBrowsingStateChanged(bool) = 0;
    170 
    171     // Returns the plug-in controller for this plug-in.
    172     // FIXME: We could just have the controller be a member variable of Plugin.
    173     virtual PluginController* controller() = 0;
    174 
    175 protected:
    176     Plugin();
    177 };
    178 
    179 } // namespace WebKit
    180 
    181 #endif // Plugin_h
    182