--- /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 <e32def.h>
+#include <e32base.h>
+
+#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 <object> element is enclosed within a hyperlink
+ *
+ * @return If the <object> 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