--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/webengine/osswebengine/WebKit/s60/plugins/PluginLoader.h Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,365 @@
+/*
+* 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: Loads the plugin content
+*
+*/
+
+#ifndef __PLUGINLOADER_H__
+#define __PLUGINLOADER_H__
+
+// INCLUDES
+#include <e32base.h>
+#include "ContentListener.h"
+#include "PluginWin.h"
+
+
+// FORWARD DECLARATIONS
+class CPluginLoadData;
+class CUrlResponseInfo;
+class CUrlResponseHeaderInfo;
+class CPluginSkin;
+class CWebKitFrame;
+class MContentLoaderInterface;
+
+/**
+* This is a plugin content loader class. It handles loading plugin content
+* @lib plugin.dll
+* @since 3.1
+*/
+class CPluginLoader: public CBase,
+ public MContentListener
+ {
+
+ public:
+ /**
+ * NewL
+ * Two phase constructor
+ * @param aPluginSkin The plugin skin object that creates the loader
+ * @param aWebKitBridge The webkitbridge
+ * @param aBaseUrl base url from which the plugin is loaded
+ * @return A newly created CPluginLoader object pointer
+ *
+ */
+ static CPluginLoader* NewL( CPluginSkin& aPluginSkin,
+ CWebKitFrame& aWebKitFrame,
+ const TDesC8& aBaseUrl );
+ /**
+ * ~CPluginLoader
+ * Destructor
+ *
+ */
+ virtual ~CPluginLoader();
+
+ /**
+ * LoadPluginContentL
+ * Load the plugin content from the given URL
+ * @since 3.1
+ * @param aUrl url to load the plugin content from
+ * @return void
+ */
+ void LoadPluginContentL( const TDesC8& aUrl, TPluginLoadMode aLoadMode );
+
+ /**
+ * LoadPluginContentL
+ * Load the plugin content from the given URL
+ * @since 3.1
+ * @param aUrl url to load the plugin content from
+ * @param aMethod url to load the plugin content from
+ * @param aLoadMode url to load the plugin content from
+ * @param aBody url to load the plugin content from
+ * @param aTrId url to load the plugin content from
+ * @return void
+ */
+ void LoadPluginContentL( const TDesC8& aUrl,
+ TUrlLoadMethod aMethod,
+ TPluginLoadMode aLoadMode,
+ const TPtr8& aBody, TInt &aTrId);
+
+ /**
+ * CancelAllTransactions
+ * Cancels all plugin transactions
+ * @since 3.1
+ * @return void
+ */
+ void CancelAllTransactions();
+
+ public: // Methods From CUrlLoadListener
+
+ /**
+ * HeadersL
+ * Invoked when headers arrive
+ * @since 3.1
+ * @param
+ * @return KErrNotSupported if it is not a native browser content
+ */
+ TInt HeadersL( TInt aTransactionId, CUrlResponseInfo& aResponse );
+
+ /**
+ * ResponseL
+ * Creates a PluginInst in response to first chunk and creates and writes to a stream
+ * to the plugin. On subsequent chunks it just writes to the stream
+ * @since 3.1
+ * @param
+ * @return void
+ */
+ void ResponseL( TInt aTransactionId, CUrlResponseInfo& aResponse );
+
+ /**
+ * Complete
+ * Closes the stream to the plugin since response is complete
+ * @since 3.1
+ * @param aTransactionId Transaction ID for the load request
+ * @param aError Error code for the transaction
+ * @return void
+ */
+ void Complete( TInt aTransactionId, CUrlResponseInfo& aResponse, TInt aError );
+
+ /**
+ * HandleError
+ * Handles any error
+ * @since 3.1
+ * @param aTransactionId Transaction ID for the load request
+ * @param aError Error ID for the load request
+ * @return void
+ */
+ void HandleError( TInt aTransactionId, TInt aError );
+
+ /**
+ * GetTransactionId
+ * Return transaction Id, using the request url
+ * @param aRequestUrl the request url
+ * @return TInt the transaction Id
+ */
+ TInt GetTransactionId( const TDesC8& aRequestUrl );
+
+ /**
+ * GetCompleteError
+ * Return the complete error using TrId as the index into the
+ * PluginLoadDataArray
+ * @param aTrId the transaction Id
+ * @return TInt the completion error
+ */
+ TInt GetCompleteError( TInt aTrId );
+
+ protected:
+
+ /**
+ * CPluginLoader
+ * Constructor
+ *
+ */
+ CPluginLoader( CPluginSkin& aPluginSkin, CWebKitFrame& aWebKitFrame );
+
+ /**
+ * ConstructL
+ * Constructor
+ *
+ */
+ void ConstructL(const TDesC8& aBaseUrl);
+
+ /**
+ * GetLoadData
+ * Gets the load mode corresponding to load requests transId
+ * @param aTrId the transaction Id
+ * @return load data for a given transaction ID
+ */
+ CPluginLoadData* GetPluginLoadData(TInt aTrId);
+
+ /**
+ * GetLoadMode
+ * Gets the load mode corresponding to load requests transId
+ * @param aTrId the transaction Id
+ * @return load mode for a given transaction ID
+ */
+ TPluginLoadMode CPluginLoader::GetLoadMode(TInt aTrId);
+
+ /**
+ * SaveCompleteError
+ * Save the complete error using TrId as the index into the
+ * PluginLoadDataArray
+ * @param aTrId the transaction Id
+ * @param aError the completion error
+ * @return true if successfully saved
+ */
+ TBool SaveCompleteError( TInt aTrId, TInt aError );
+
+ /**
+ * SaveResponseHeader
+ * Save the response header using TrId as the index into the
+ * PluginLoadDataArray
+ * @param aTrId the transaction Id
+ * @param aResponseHeader the response header structure
+ * @return true if successfully saved
+ */
+ TBool SaveResponseHeader( TInt aTrId, CUrlResponseHeaderInfo& aResponseHeader );
+
+ /**
+ * RemovePluginLoadData
+ *
+ * @return
+ */
+ void RemovePluginLoadData( TInt aTransactionId );
+
+ private:
+
+ //Pointer to the Webkitbridge; not owned
+ CWebKitFrame* iWebKitFrame;
+ //Pointer to the plugin skin; not owned
+ CPluginSkin* iPluginSkin;
+ //Base url of the plugin object; owned
+ HBufC8* iBaseUrl;
+ //Array of Plugin load data
+ CArrayFixFlat<CPluginLoadData>* iPluginLoadDataArray;
+ };
+
+/**
+* This is a plugin data holder class.
+* It maps the transaction to the load mode of the load request
+* An array of this datastructure is maintained by CPluginLoader
+* It is used for tracking load requests from plugin engines
+* @lib plugin.dll
+* @since 3.1
+*/
+class CPluginLoadData : public CBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CPluginLoadData* NewL(TInt aTrId);
+
+ /**
+ * Destructor.
+ */
+ ~CPluginLoadData();
+
+ private: // Constructors
+
+ /**
+ * C++ default constructor.
+ */
+ CPluginLoadData(TInt aTrId);
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL();
+
+ public: // New functions
+
+ /**
+ * TransactionId
+ * Get Transaction Id
+ * @since 3.1
+ * @return TInt TransactionId
+ */
+ TInt TransactionId() { return iTransId; }
+
+ /**
+ * GetHttpStatus
+ * Get HTTP status
+ * @since 3.1
+ * @return TInt iHttpStatus
+ */
+ TInt HttpStatus() { return iHttpStatus; }
+
+ /**
+ * SetHttpStatus
+ * Set HTTP status
+ * @since 3.1
+ * @param aHttpStatus
+ * @return void
+ */
+ void SetHttpStatus(TInt aHttpStatus);
+
+ /**
+ * SetLoadMode
+ * Save the load mode.
+ * @since 3.1
+ * @param aLoadMode the enum TPluginLoadMode load mode
+ * @return void
+ */
+ void SetLoadMode(TPluginLoadMode aLoadMode);
+
+ /**
+ * LoadMode
+ * Return the load mode
+ * @since 3.1
+ * @param aTrId the transaction Id
+ * @return TPluginLoadMode
+ */
+ TPluginLoadMode LoadMode() { return iLoadMode; }
+
+ /**
+ * SetCompleteError
+ * Save completion "error/reason" code from response complete
+ * @since 3.1
+ * @param aCompleteError the completion error code
+ * @return void
+ */
+ void SetCompleteError(TInt aCompleteError);
+
+ /**
+ * CompleteError
+ * Get completion "error/reason" code from response complete
+ * @since 3.1
+ * @return TInt completion error code
+ */
+ TInt CompleteError() { return iCompleteError; }
+
+ /**
+ * SetRequestUrlL
+ * Save request url. We take ownership of the url.
+ * @since 3.1
+ * @param aRequestUrl the request url
+ * @return void
+ */
+ void SetRequestUrlL(const TDesC8& aRequestUrl);
+
+ /**
+ * RequestUrlL
+ * Return the request url
+ * @since 3.1
+ * @return void
+ */
+ HBufC8* RequestUrlL() { return iRequestUrl; }
+
+ /**
+ * SetURLLoader
+ * Save request url. We take ownership of the url.
+ * @since 3.1
+ * @param aRequestUrl the request url
+ * @return void
+ */
+ void SetUrlLoader(MContentLoaderInterface* aUrlLoader);
+
+ /**
+ * UrlLoader
+ * Return the request url
+ * @since 3.1
+ * @return void
+ */
+ MContentLoaderInterface* UrlLoader() { return iUrlLoader; }
+
+ private: // members
+ TInt iTransId;
+ TPluginLoadMode iLoadMode;
+ TInt iCompleteError;
+ TInt iHttpStatus;
+ HBufC8* iRequestUrl;
+ MContentLoaderInterface* iUrlLoader;
+ };
+
+#endif
\ No newline at end of file