diff -r 000000000000 -r dd21522fd290 webengine/wmlengine/src/xhtml/include/XhtmlObjectElementHandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/webengine/wmlengine/src/xhtml/include/XhtmlObjectElementHandler.h Mon Mar 30 12:54:55 2009 +0300 @@ -0,0 +1,339 @@ +/* +* Copyright (c) 2003 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: Handles object tags in XHTML documents. +* +*/ + + + +#ifndef CXHTMLOBJECTELEMENTHANDLER__H +#define CXHTMLOBJECTELEMENTHANDLER__H + +// INCLUDES +#include +#include + +#include "nwx_defs.h" +#include "nw_dom_node.h" + +#include "HedLoadObserver.h" +#include "LMgrBoxDestructionListener.h" +#include "ObjectUtils.h" + +// CONSTANTS + +// MACROS + +// DATA TYPES + +// FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +typedef struct NW_HED_ContentHandler_s NW_HED_ContentHandler_t; +typedef struct NW_XHTML_ContentHandler_s NW_XHTML_ContentHandler_t; +typedef struct NW_XHTML_ElementHandler_s NW_XHTML_ElementHandler_t; +typedef struct NW_LMgr_ContainerBox_s NW_LMgr_ContainerBox_t; +typedef struct NW_LMgr_Box_s NW_LMgr_Box_t; +typedef struct NW_Evt_Event_s NW_Evt_Event_t; +typedef struct NW_Text_Abstract_s NW_Text_t; + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +// CLASS DECLARATION + +// TODO: This class should be derived from CElementHandler once the browser is +// converted to c++. + +class CXHTMLObjectElementHandler : public CBase, public MLMgrBoxDestructionListener, + public MHEDLoadObserver + { + public: // Constructors and destructor + /** + * Two-phased constructor. + */ + static CXHTMLObjectElementHandler* NewL(const NW_XHTML_ElementHandler_t* aElementHandler, + NW_XHTML_ContentHandler_t* aContentHandler, NW_DOM_ElementNode_t* aElementNode); + + /** + * Destructor. + */ + virtual ~CXHTMLObjectElementHandler(); + + + public: // Functions from MLMgrBoxDestructionListener + /** + * Recieves notifications when the box has been destroyed. + * + * @since 2.6 + * @return void + */ + void Destroyed(); + + + public: // MHEDLoadObserver + /** + * Passes a HEAD response to the observer. + * + * @param aTransactionId the transaction id. + * @param aResponse the HEAD response to be processed. + * @param aUrlRequest the url request. + * @param aClientData the client data past with the request. + * @return void. + */ + void HeadCompleted(TUint16 aTransactionId, const NW_Url_Resp_t& aResponse, + const NW_HED_UrlRequest_t& aUrlRequest, void* aClientData); + + /** + * Passes a chunk of a response to the observer. + * + * @param aTransactionId the transaction id. + * @param aChunkIndex the chunk count of this call, aChunkIndex > 0 + * @param aResponse the HEAD response to be processed. + * @param aUrlRequest the url request. + * @param aClientData the client data past with the request. + * @return void. + */ + void ChunkReceived(TUint16 aTransactionId, TUint32 aChunkIndex, + const NW_Url_Resp_t& aResponse, const NW_HED_UrlRequest_t& aUrlRequest, + void* aClientData); + + /** + * Called when a response completes successfully or in error. + * + * @param aStatusClass the type of status-code found in aStatus -- + BRSR_STAT_CLASS_HTTP or BRSR_STAT_CLASS_GENERAL. + * @param aStatus the final load status of the request. + * @param aTransactionId the transaction id. + * @param aUrlRequest the url request. + * @param aClientData the client data past with the request. + * @return void. + */ + void LoadCompleted(TInt16 aStatusClass, TBrowserStatusCode aStatus, + TUint16 aTransactionId, const NW_HED_UrlRequest_t& aUrlRequest, + void* aClientData); + + + public: // New Methods + /** + * Initializes the ElementHandler. + * + * @return status code + */ + virtual TBrowserStatusCode Initialize(void); + + /** + * Creates the box-tree associated with the tag. + * + * @param aParentBox the parent to attach the new box-tree to. + * @return status code + */ + virtual TBrowserStatusCode CreateBoxTree(NW_LMgr_ContainerBox_t& aParentBox); + + /** + * Processes events targeted at boxes created by the ElementHandler. + * + * @param aBox the target box. + * @param aEvent the event. + * @return NW_LMgr_EventAbsorbed or NW_LMgr_EventNotAbsorbed + */ + virtual NW_Uint8 ProcessEvent(const NW_LMgr_Box_t& aBox, const NW_Evt_Event_t& aEvent); + + /** + * This is a special purpose method to get the element node + * associated with this handler. + * + * @return the elementNode associated with this handler. + */ + const NW_DOM_ElementNode_t* ElementNode(void) const; + + /** + * This is a special purpose method to get the "selected" element. + * See the comment on SelectElement. + * + * @return the selected elementNode. + */ + const NW_DOM_ElementNode_t* SelectedElementNode(void) const; + + /** + * Applies the content type and length properties on the given box. This is + * used in the download dialog box. + * + * @param aBox the box to apply the properties on. + * @return status code. + */ + TBrowserStatusCode ApplyInfoProperties(NW_LMgr_Box_t& aBox); + + + private: // Private Methods + /** + * C++ default constructor. + */ + CXHTMLObjectElementHandler(const NW_XHTML_ElementHandler_t* aElementHandler, + NW_XHTML_ContentHandler_t* aContentHandler, NW_DOM_ElementNode_t* aElementNode); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(void); + + /** + * Loads the resource associated with object tag. + * + * @param aType the mime-type of the of the resource or NULL + * if the type isn't known. + * @param aUrl the url of the of the resource or NULL. + * @param aHandlerType Type of the load + * @return status code + */ + TBrowserStatusCode LoadObjectResource(const TDesC* aType, + const TDesC* aUrl, ObjectUtils::THandlerType aHandlerType); + + /** + * Loads the HEAD information of the resource associated with object tag. + * + * @return status code + */ + TBrowserStatusCode LoadObjectInfo(void); + + /** + * Returns the associated content handler or NULL if one isn't found. + * + * @return the associated content handler + */ + NW_HED_ContentHandler_t* AssociatedContentHandler(void); + + /** + * Set the place-holder text to the given descriptor. + * + * @param aObjectBox the Object box. + * @param aPlaceHolderText the string. + * + * @return status code + */ + TBrowserStatusCode SetPlaceHolderText(NW_LMgr_Box_t& aObjectBox, + const TDesC& aPlaceHolderText); + + /** + * Set the place-holder text to the given resource id. + * + * @param aObjectBox the Object box. + * @param aResourceId the string's resource id. + * + * @return status code + */ + TBrowserStatusCode SetPlaceHolderText(NW_LMgr_Box_t& aObjectBox, + TInt aResourceId); + + /** + * Removes the place holder -- puts the Object box in the active state. + * + * @param aObjectBox the Object box. + * + * @return void + */ + void RemovePlaceHolder(NW_LMgr_Box_t& aObjectBox); + + /** + * CXHTMLObjectElementHandler::SelectElement + * + * Embedded resources are specified in an xhtml document using the object tag. + * This tag can be very simple to quite complex. See the cpp file for some examples. + * This method determines if iElementNode or one of its descendants can be selected + * and displayed. Once an element is selected it is stored in iSelectedElementNode. + * iSelectedElementNode is used in GetAttribute to extract attribute values from + * the selected element. + * + * @return status code. + */ + TBrowserStatusCode SelectElement(void); + + /** + * Gets the value of the given attribute as a descriptor. + * + * @param aToken identifies the attribute to get. + * @param aValue upon success it equals the value of the attribute. + * The caller adopts aValue. + * @return status code + */ + TBrowserStatusCode GetAttribute(TInt16 aToken, TDesC** aValue); + + /** + * Gets the value of the source attribute as a descriptor. + * + * @param aValue upon success it equals the value of the src attribute. + * The caller adopts aValue. + * @return status code + */ + TBrowserStatusCode GetSrcAttribute(TDesC** aValue); + + /** + * Gets the value of the content-type attribute as a descriptor. + * + * @param aValue upon success it equals the value of the src attribute. + * The caller adopts aValue. + * @return status code + */ + TBrowserStatusCode GetTypeAttribute(TDesC** aValue); + + /** + * Gets the value of the source attribute by using the classId attribute, + * the cooresponding param element and the object attribute mappings table. + * + * @param aValue upon success it equals the value of the src attribute. + * The caller adopts aValue. + * @return status code + */ + TBrowserStatusCode GetObjectAttributeMapSrc(TDesC** aValue); + + /** + * Returns the cooresponding value (either param-name or content-type) given + * the class-id. + * + * @param aClassId the class-id used to map to the requested value. + * @param aValueSelector used to select the cooresponding value + * (either KParamName or KContentType) + * @return the value or NULL on out of memory. + */ + TDesC* GetObjectAttributeMappedValue(const TDesC& aClassId, TInt aValueSelector); + + /** + * Returns if the element is enclosed within a hyperlink + * + * @return If the element is enclosed within a hyperlink + */ + TBool InHyperLink(); + + private: // Data + const NW_XHTML_ElementHandler_t* iElementHandler; + NW_XHTML_ContentHandler_t* iContentHandler; + NW_DOM_ElementNode_t* iElementNode; + NW_DOM_ElementNode_t* iSelectedElementNode; + + NW_LMgr_Box_t* iObjectBox; + ObjectUtils::THandlerType iLoadedHandlerType; + TBool iIsDownloading; + + TBool iObjectInfoValidated; + HBufC* iContentType; + HBufC* iContentLength; + TInt16 iTransactionId; + }; + +#endif // CXHTMLOBJECTELEMENTHANDLER__H