webengine/osswebengine/WebKit/s60/plugins/PluginSkin.h
changeset 0 dd21522fd290
child 5 10e98eab6f85
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webengine/osswebengine/WebKit/s60/plugins/PluginSkin.h	Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,479 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Represents the Object Widget From Webcore
+*
+*/
+
+
+#ifndef __PLUGINSKIN_H__
+#define __PLUGINSKIN_H__
+
+//  INCLUDES
+#include <e32base.h>
+#include <badesca.h>
+#include <wtf/Vector.h>
+#include <wtf/HashSet.h>
+#include <npupp.h>
+#include "WebCoreWidget.h"
+#include "WebCannedImages.h"
+#include "PluginPlayer.h"
+#include "WebFrame.h"
+#include "WebFrameView.h"
+#include "WebView.h"
+#include "MemoryManager.h"
+//#include <Element.h>
+
+// FORWARD DECLARATIONS
+class PluginWin;
+class PluginStream;
+class WebFrame;
+
+namespace WebCore {
+    class String;
+    class Element;
+}
+
+// LOCAL CONSTANTS AND MACROS
+// These are used to designate the handling of incoming content and loading Plugins
+// during intial construction of the plugin. We could add ELoadModeConstruct.
+// They are also used when a plugin requests to download additional content, and
+// the mapping of target (windowType) to content/plugin handling. 
+enum TPluginLoadMode
+    {
+    ELoadModeTop,
+    ELoadModeSaveAsFile,
+    ELoadModePlugin,
+    ELoadModeNew,
+    ELoadModeParent,
+    ELoadModeSelf,
+    ELoadModeNone
+    };
+ 
+ enum TWindowType
+    {
+    EWindowTypePlugin = 0,
+    EWindowTypeBlank,
+    EWindowTypeNew,
+    EWindowTypeSelf,
+    EWindowTypeCurrent,
+    EWindowTypeParent,
+    EWindowTypeTop,
+    EWindowTypeUnknown
+    };
+
+_LIT(KBlank, "_blank");
+_LIT(KNew, "_new");
+_LIT(KSelf, "_self");
+_LIT(KCurrent, "_current");
+_LIT(KParent, "_parent");
+_LIT(KTop, "_top");
+    
+/**
+*  PluginSkin
+*  Represents the Object Widget
+*  This class acts as an Adapter between the webcore and the plugin engines.
+*
+*  @lib plugin.dll
+*  @since 3.1
+*/
+
+class PluginSkin : public CBase,
+                   public MWebCoreObjectWidget,
+                   public MMemoryCollector
+
+  {
+    public: //  Constructors and destructor
+
+        /**
+        * Two-phased constructor.
+        */
+        static PluginSkin* NewL( WebFrame& frame,
+                                 const TPtrC8& url,
+                                 const Vector<WebCore::String>& attributesNames,
+                                 const Vector<WebCore::String>& attributeValues,
+                                 const TPtrC8& baseUrl,
+                                 const WebCore::String& mimeType,
+                                 TBool canInteract);
+
+        /**
+        * destructor.
+        */
+        virtual ~PluginSkin();
+
+    private:    // Constructors
+
+        /**
+        * C++ default constructor.
+        */
+        PluginSkin( WebFrame& webFrame );
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL( const WebCore::String& mimeType,
+                         const Vector<WebCore::String>& attributesNames,
+                         const Vector<WebCore::String>& attributeValues,
+                         const TPtrC8& url,
+                         const TPtrC8& baseUrl,
+                         TBool canInteract);
+
+
+    public:
+
+
+        /**
+        * PluginWin
+        * Returns a pointer to the CPluginWin object.
+        * @since 3.1
+        * @return The CPluginWin object
+        */
+        PluginWin* pluginWin() { return m_pluginwin;}
+
+
+        /**
+        * Frame
+        * Returns a pointer to WebKitFrame object.
+        * @since 3.1
+        * @return The WebKitControl object
+        */
+        WebFrame* frame() const { return m_frame; } 
+        
+        
+        /**
+        * 
+        * 
+        * @since 3.1
+        * @return 
+        */
+        void createPluginWinL(TDesC8& url, TDesC& mimetype);
+
+
+        /**
+        * 
+        * 
+        * @since 3.1
+        * @return 
+        */
+        void loadPluginL( const TDesC8& mimetype );
+
+        /**
+        * 
+        * 
+        * @since 3.1
+        * @return 
+        */
+        NPP getNPP(){return m_instance;}
+
+        /**
+        * 
+        * 
+        * @since 3.1
+        * @return 
+        */
+        NPPluginFuncs* getNPPluginFucs() {return m_pluginfuncs;}
+
+        /**
+        * 
+        * 
+        * @since 3.1
+        * @return 
+        */
+        void forceRedraw(bool drawNow = true);
+
+        /**
+        * 
+        * 
+        * @since 3.1
+        * @return 
+        */        
+        TBool isBrowserScheme(const TPtrC8& url);
+        
+        /**
+        *
+        * GetLoadMode
+        * Returns the load mode associated with the "window-type".
+        */
+        TPluginLoadMode GetLoadMode(const TDesC* aWindowType);
+        
+        /**
+        *
+        * GetWindowType
+        * Resolves the "window-type" string into a TWindowType.
+        */
+        TWindowType GetWindowType(const TDesC* aWindowType);
+
+    public: // Methods From MWebCoreObjectWidget
+
+        void setNeedsDisplay( TBool ) {}
+        
+        void setCursor( CursorTypes ) {}
+        /**
+        * Draw
+        * From MWebCoreObjectWidget
+        * Repaints the frame.
+        * @since 3.1
+        * @param TRect& aRect
+        * @return void
+        */
+        void draw( WebCoreGraphicsContext& gc,
+                   const TRect& rect );
+
+
+        /**
+        * IsVisible
+        * From MWebCoreObjectWidget
+        * Purpose:
+        * @since 3.1
+        * @return void
+        */
+        TBool isVisible() const;
+
+        /**
+        * SizeHint
+        * From MWebCoreObjectWidget
+        * Purpose
+        * @since 3.1
+        * @return TSize
+        */
+        TSize sizeHint() const;
+
+        /**
+        * IsFocused
+        * From MWebCoreObjectWidget
+        * Purpose
+        * @since 3.1
+        * @return TBool
+        */
+        TBool isFocused() const { return ETrue; }
+
+        /**
+        * MakeVisible
+        * From MWebCoreObjectWidget
+        * Purpose
+        * @since 3.0
+        * @param TBool aVisible
+        * @return void
+        */
+        void makeVisible(TBool visible) ;
+
+        /**
+        * SetFocus
+        * From MWebCoreObjectWidget
+        * Purpose
+        * @since 3.1
+        * @param TBool aFoucs
+        * @return void
+        */
+        void setFocus(TBool focus) ;
+
+        /**
+        * Activate
+        * From MWebCoreObjectWidget
+        * Purpose Activated the plugin
+        * @since 3.1
+        * @param TBool aFoucs
+        * @return void
+        */
+        void activate();
+
+        /**
+        * Rect
+        * From MWebCoreObjectWidget
+        * Purpose
+        * @since 3.1
+        * @return TRect
+        */
+        TRect rect() const;
+
+        /**
+        * SetRect
+        * From MWebCoreObjectWidget
+        * Purpose Sets the Rect
+        * @since 3.1
+        * @param TRect aRect
+        * @return void
+        */
+        void setRect(const TRect& rect);
+
+
+        /**
+        * IsFocusable
+        * From MWebCoreObjectWidget
+        * Purpose Check if the plugin is focusable
+        * @since 3.2
+        * @param TRect aRect
+        * @return void
+        */
+        TBool isFocusable() const;
+
+       /**
+        * SetParent
+        * From MWebCoreObjectWidget
+        * Set the CCoeControl parent for this WebKitBridge
+        * @since 3.0
+        * @return void
+        */
+        void setParent( MScrollView* /*aParent*/){/*iParent = aBrCtlInterface*/};
+
+       /**
+        * IsActive
+        * From MWebCoreObjectWidget
+        * Returns ETrue is plugin is active and receiving events
+        * @since 3.1
+        * @return void
+        */
+        TBool isActive() const { return m_active; }
+
+        /**
+        * Deactivate
+        * From MWebCoreObjectWidget
+        * Removes the plugin from control stack
+        * @since 3.1
+        * @return void
+        */
+        void deActivate();
+
+        /**
+        * SetFont
+        * From MWebCoreObjectWidget
+        * Sets the font
+        * @since 3.1
+        * @return void
+        */
+        void setFont(CFont* font);
+        
+        /**
+        * CanInteract
+        * Returns the m_canInteract flag
+        * @since 5.0
+        * @return TBool
+        */
+        TBool CanInteract() const 
+        {
+            return m_canInteract;
+        }
+        
+        /**
+        * pluginPlayer
+        * Returns the plugin player
+        * @since 5.0
+        * @return PluginPlayer*
+        */
+        PluginPlayer* pluginPlayer() const {
+            return m_frame->frameView()->topView()->pluginPlayer();
+        }
+        
+        
+        HBufC8* url() { return m_url; }
+        
+        void playPluginContent(const TDesC8& aRequestUrl) {};
+
+        void viewFocusChanged(TBool focused);
+        
+        void positionChanged();
+
+        void stopPluginContent(const TDesC8& aRequestUrl) {};
+
+        void *pluginScriptableObject(); 
+        
+        void pluginFocusChanged(TBool focus);
+        
+        TBool hasResized () {return m_resized; }
+
+        void resized();
+        
+        void ref() {++m_ref;};
+        
+        void deref() {if (--m_ref <= 0) delete this;};
+
+        TBool loadPluginL( const TDesC& mimetype);
+        
+        void openInViewerL();
+        
+        // stream manipulation
+        void addPluginStream(PluginStream*);
+        void removePluginStream(PluginStream*);      
+        
+  public:
+        //callbacks from NpnImplementation  
+        int getRequestL(const TDesC8& url, bool notify, void* notifydata,const TDesC* aWindowType);                          
+        int postRequestL(const TDesC8& url, const TDesC& buffer, bool fromfile, bool notify, void* notifydata,const TDesC* aWindowType);
+        bool isInteractive();
+        TRect getClipRect() const;
+        TRect getPluginWinRect() const;
+        void setClipRect(TRect rect);
+        TInt handleNetworkAccess() const;
+        WebCore::Element* getElement() {return m_element;}
+        void setElement(WebCore::Element* aElement) {m_element = aElement;}
+
+  public:  // from MMemoryCollector
+        TUint Collect(unsigned int aRequired);
+        void Restore()                          {}
+        TOOMPriority Priority()                 { return EOOM_PriorityLow; }
+        
+
+        /**
+        * Run javascript, possibly asynchronously.
+        *
+        * @since 3.2
+        * @return Bool.
+        */
+        TBool RunScript(); 
+        void handlePluginForeground(TBool focus);       
+  private:  // private member data
+        void setPluginWinClipedRect();
+        TRect frameVisibleRect() const;
+        void Close();
+        
+        // Window-owning CoeControl which wraps the CoeControl created by the plugin
+        PluginWin* m_pluginwin;
+        WebFrame* m_frame; // not owned
+        CFont* m_font;
+        HBufC8* m_url;
+        WebCore::Element* m_element;
+        
+        TBool m_visible;
+        TBool m_pluginSupported;
+        TBool m_pluginClosed;
+        TBool m_canInteract;
+        TBool m_focused;
+        TBool m_active;
+        TBool m_flashContent;
+        
+        TRect m_rect;
+        TRect m_pluginWinClipRect;        
+        int m_ref;
+
+        TCannedImageData m_cannedimg;
+        // Attribute lists - The plugin API expects a separate array for
+        // attribute names and values
+        CDesCArrayFlat *m_attributeNames;
+        CDesCArrayFlat *m_attributeValues;
+        //Active Object to run script
+        CIdle* iJavascriptTimer;
+        
+        //Javascript: url 
+        RPointerArray<HBufC> m_JSUrls;
+
+        WTF::HashSet<PluginStream*>  m_streams;
+
+public:
+        TInt m_handle;
+        NPP m_instance;    
+        NPPluginFuncs* m_pluginfuncs;
+        bool m_resized;
+        RPointerArray<HBufC> m_tempFilesArray;
+};
+
+#endif //  __PLUGINSKIN_H__