diff -r 000000000000 -r dd21522fd290 webengine/osswebengine/WebKit/s60/plugins/PluginSkin.h --- /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 +#include +#include +#include +#include +#include "WebCoreWidget.h" +#include "WebCannedImages.h" +#include "PluginPlayer.h" +#include "WebFrame.h" +#include "WebFrameView.h" +#include "WebView.h" +#include "MemoryManager.h" +//#include + +// 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& attributesNames, + const Vector& 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& attributesNames, + const Vector& 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 m_JSUrls; + + WTF::HashSet m_streams; + +public: + TInt m_handle; + NPP m_instance; + NPPluginFuncs* m_pluginfuncs; + bool m_resized; + RPointerArray m_tempFilesArray; +}; + +#endif // __PLUGINSKIN_H__