diff -r 000000000000 -r dd21522fd290 webengine/osswebengine/WebKit/s60/plugins/PluginHandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/webengine/osswebengine/WebKit/s60/plugins/PluginHandler.h Mon Mar 30 12:54:55 2009 +0300 @@ -0,0 +1,366 @@ +/* +* 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: Plugin handling, manages the loading and unloading of the +* plugin. Initializes the CInfoArray that contains the plugin +* MIME-types supported. +* +*/ + +#ifndef PluginHandler_H +#define PluginHandler_H + +// INCLUDES +#include +#include +#include + +#include // ecom +#include "EcomBrowserPluginInterface.h" +#include "WebCorePluginHandler.h" + +// FORWARD DECLARATIONS +class PluginInfo; +class WebView; + + +// CLASS DECLARATION + +/** +* Primarily deals with the loading and unloading of plugins as well as +* other plugin utility functions. +* +* @lib Browser Engine +* @since 3.1 +*/ +class PluginHandler : public CBase + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + * @param aEnablePlugin flag to check for plugin support enabled by Browser Setting + * @param aWebKitView Pointer to the browser view + */ + static PluginHandler* NewL(TBool enablePlugin); + + /** + * Destructor. + */ + virtual ~PluginHandler(); + + + public: // New functions + + + /** + * Find a plugin by MIME type + * + * @since 3.1 + * @param aMIMEType The MIME type of the element. + * @return The handle of the plugin supporting the MIME type or KErrNotFound. + */ + TInt findPlugin(const TDesC& mimeType); + + /** + * Find a plugin by file extension + * + * @since 3.1 + * @param aFileName The url of the element data. + * @return The handle of the plugin supporting the file name or KErrNotFound. + */ + TInt findPluginByExtension(const TDesC8& url); + + /** + * Load a plugin if not yet loaded + * + * @since 3.1 + * @param aHandle The handle of the plugin, returned from FindPlugin. + * @param aPluginFuncs Upon success it contains the associated + * plugin's function table. + * @return void + */ + + void loadPluginL(TInt handle, NPPluginFuncs** retFuncs); + + /** + * Unload a plugin. If this is the last instance, the library is unloaded. + * + * @since 3.1 + * @param aHandle The handle of the plugin, returned from FindPlugin. + * @return void + */ + void unloadPlugin(TInt handle); + + /** + * Get the index of plugin info from its handle. + * + * @since 3.1 + * @param aHandle The handle of the plugin, returned from FindPlugin. + * @return the index of the plugin info. + */ + TUint getIndexFromHandle(TInt handle); + + public: //From MWebCorePluginHandler + + TInt getPluginCount(); + TBool pluginSupportsMIMEType(const TDesC& mimeType); + TBool objectAtIndex(TInt index, TWebCorePluginInfo& aPluginInfo ); + void refreshPlugins(TBool reload); + HBufC8* extensionsForMIMEType(TInt index, TDesC& mimeType); + HBufC* descriptionForMIMEType(TInt index, TDesC& mimeType); + + /** + * Determines whether a given content-type of dot-extension has a cooresponding + * plugin or external application. aContentType and aUrl can be NULL, but at least + * one must be non-NULL (otherwise it will always return EFalse). If aHandlerType + * is EPlugin then it returns ETrue only if their is a supported plugin. If aHandlerType + * is EExternalApp then it returns ETrue only if their is a supported external + * application. If aHandlerType is EBoth then it returns ETrue only if their is a + * supported plugin or external application. + * + * @since 3.1 + * @param aContentType the content type to compare against, may be NULL. + * @param aUrl the url to extract the dot-extension and to compare against, may be NULL. + * + * @return ETrue or EFalse. + */ + TBool isSupported(const TDesC& contType, const TDesC8& url); + + private: // New functions + + /** + * Scans for new plugins. + * + * @since 3.1 + * @param aReloadPages if ETrue the current page is reloaded. + * @return void. + */ + void reloadPluginsL(TBool reload); + + /** + * C++ default constructor. + * @param aEnablePlugin flag to check if plugin support is enabled by Browser Settings + * @param aWebKitView pointer to CWebKitView + */ + PluginHandler(TBool enablePlugin); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + /** + * Initializes the PluginHandler, possibly asynchronously. + * + * @since 3.1 + * @return void. + */ + static TBool initialize(TAny* pluginHandler); + + /** + * Loads all the plugins and query them for details. Used during + * initialization. + * + * @since 3.1 + * @return void. + */ + TBool loadPluginsL(); + + private: // Data + + // Array of information about existing plugins + RPointerArray m_pluginInfoArray; + TInt m_nextHandle; + TBool m_pluginsLoaded; + TBool m_enablePlugins; + TBool m_asyncLoading; //ETrue for Async scanning of drives + //EFalse for sync scanning and loading + + CIdle* m_idle; //Active Object to initailise + //the plugins from drives + }; + + +/** +* A private helper class used by PluginHandler which is used +* to interact with individual plugins. +* +* @lib Browser Engine +* @since 3.1 +*/ +class PluginInfo : public CBase + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + static PluginInfo* NewL(const TDesC& mimeDescription, const TDesC& name, + const TDesC& description, const TDesC& fileName, const TDesC& pathName); + + /** + * Destructor. + */ + virtual ~PluginInfo(); + + + public: // New functions + + /** + * Returns ETrue if the plugin should be loaded. + * + * @since 3.1 + * @return ETrue or EFalse + */ + TBool shouldLoad(); + + /** + * Returns ETrue if the plugin should be unloaded. + * + * @since 3.1 + * @return ETrue or EFalse + */ + TBool shouldUnload(); + + /** + * Increments the PluginInfo's reference count. + * + * @since 3.1 + * @return void + */ + void loadInstance(); + + /** + * Decrements the PluginInfo's reference count. + * + * @since 3.1 + * @return void + */ + void unloadInstance(); + + /** + * Copy the mimetypes and file extention from one PluginInfo to another. + * Called after a rescan of the file system. + * + * @since 3.1 + * @param aPluginInfo the instance to move mimetypes and file extentions from. + * @return void. + */ + void copyMimeDescription(PluginInfo& pluginInfo); + + /** + * Getter function. + * + * @since 3.1 + * @return The mime types supported by this plugin + */ + + const RPointerArray & mimeTypes() {return m_mimeTypes;} + + /** + * Getter function. + * + * @since 3.1 + * @return The mime extensions supported by this plugin + */ + + const RPointerArray & mimeFileExtensions() {return m_mimeFileExtensions;} + + /** + * Getter function. + * + * @since 3.1 + * @return The mime descriptions supported by this plugin + */ + + const RPointerArray & mimeDescriptions() {return m_mimeDescriptions;} + + /** + * Getter function. + * + * @since 3.1 + * @return The list of mimeExtensions given the mimeType supported by this plugin + * The list of mimeExtensions is a comma-delimited string. For example, given + * the mimeType "text/html", you will receive "html,htm". + */ + + HBufC8* getMimeExtensionsL(const TDesC& mimeType); + + /** + * Getter function. + * + * @since 3.1 + * @return The name of this plugin + */ + HBufC* name() {return m_name;} + + /** + * Getter function. + * + * @since 3.1 + * @return The description of this plugin + */ + HBufC* description() {return m_description;} + + /** + * Getter function. + * + * @since 3.1 + * @return The file name of this plugin + */ + HBufC* fileName() {return m_filename;} + + void parseDefaultDataL(const TDesC8& mimeDescription); + void parseDisplayNameL(const TDesC& pluginDescription); + + private: // Private Methods + + /** + * C++ default constructor. + */ + PluginInfo(); + + /** + * By default Symbian 2nd phase constructor is private. + */ + public: //Data + CImplementationInformation* m_pluginInfo; // ECom plugin implementation info + + private: // Data + + RPointerArray m_mimeTypes; + RPointerArray m_mimeFileExtensions; + RPointerArray m_mimeExtensionToTypeMap; + RPointerArray m_mimeDescriptions; + + + HBufC* m_name; + HBufC* m_description; + TInt m_ref; + TInt m_handle; + NPPluginFuncs* m_nppFuncs; + HBufC* m_filename; + + TUid m_uid; + CEcomBrowserPluginInterface* m_pluginInterface; + + private: // Friend classes + + friend class PluginHandler; + }; + +#endif // PluginHandler_H + +// End of File +