diff -r 79859ed3eea9 -r 919f36ff910f webengine/wmlengine/src/MVC/include/MVCShell.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/webengine/wmlengine/src/MVC/include/MVCShell.h Wed Sep 01 12:28:30 2010 +0100 @@ -0,0 +1,550 @@ +/* +* Copyright (c) 2000 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: +* +*/ + +#ifndef __MVCSHELL_H +#define __MVCSHELL_H + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include "BrsrStatusCodes.h" +#include "BrsrTypes.h" + +#include "HEDDocumentListener.h" +#include "httploader_mlinkresolvercallbacks.h" +#include "MSGMessageListener.h" +#include "MVCViewListener.h" +#include "nw_hed_appservices.h" +#include "nw_errnotify.h" +#include "nw_scrproxy.h" +#include "nw_wae.h" +#include "nwx_defs.h" +#include +#include "urlloader_urlresponse.h" +#include "EmbeddedDocExitObserver.h" +//R +#include "historystack.h" +//#include "webkitview.h" +#include "wmlcontrol.h" + +#ifdef __SERIES60_WIM +#include "WimUi.h" +#endif __SERIES60_WIM + +enum TUrlLoadState + { + // We are now loading the URL + EUrlLoadingProgressing, + + // The loading progress has finished because of successful + // finish, user cancel or some other reason. + EUrlLoadingStopped, + + // Reset iDoNotRestoreContentFlag in the BrowserUI + EResetDoNotRestoreContentFlag + }; + +class CDataLoadInfo; + +const TInt KPanicKmShellPanicBase = -10000; +const TInt KPanicKmShellSingletonAlreadyCreated = KPanicKmShellPanicBase - 1; +const TInt KPanicKmShellViewPtrIsNotSet = KPanicKmShellPanicBase - 2; + +class CView; +class CCnvCharacterSetConverter; +class CContentLoader; +class CBrCtl; + +NONSHARABLE_CLASS(CShell): public CBase, public MHttpLoader_LinkResolverCallbacks, + public MViewListener, public MHEDDocumentListener, public MMessageListener +{ + public: // Epoc constructor and destructor + + static CShell* NewL (CView* aEpoc32View, CBrCtl* aBrCtl, MWmlInterface* aWKWmlInterface, CWmlControl* aWmlControl); + + ~CShell(); + + + public: // Public exported methods + + /** + * + * Starts loading of content from given URL. + * + * @param URL to be loaded + * @return KErrNone if successfull, KErrGeneral on error + */ + TInt Load(const TDesC& aUrl, TInt aApId, NW_Cache_Mode_t cacheMode=NW_CACHE_NORMAL); + + TInt CancelAll(); + + TInt FreeConnection(); + TInt HistoryLoad(THistoryStackDirection aDirection); + + /** + * + * Process the Back event + * Now that we have multiple views (normal view and image map view), the processing + * of the back event may be different depending on which view we are in. If we + * are in the image map view, we will want to switch back to the normal view if the + * back button is selected. If we are in normal view, we will want to call HistoryLoad + * and load the previous page. + * + * @param None + * @return KErrNone if successfull, KErrUnknown on error + */ + TInt ProcessBack(); + + /** + * + * Switch to image map view + * Now that we have multiple views (normal view and image map view).If we select + * an image map we want to switch to image map view + * + * @param None + * @return KErrNone if successfull, KErrUnknown on error + */ + TInt SwitchToImgMapView(); + + /** + * + * Switch from image map view + * Now that we have multiple views (normal view and image map view).If we + * are in the image map view, we will want to switch back to the normal view. + * + * @param None + * @return KErrNone if successfull, KErrUnknown on error + */ + TInt SwitchFromImgMapViewIfNeeded(); + + void SetView(CView* aEpocView); // Does not take the ownership! + + TInt HandleDo( TUint32 aElemId ); + + /** + * + * Get a history list + * + * @param aUrls Descriptor array to append + * @return Error code + */ + TInt GetHistoryList (CArrayFix& aHistoryList); + + /** + * + * Gives current position in the history stack + * + * @return THistoryStackPosition enumeration + */ + TWmlEngineDefs::THistoryStackPosition HistoryStackPosition(); + + /** + * Loads page from history by given index + * + * @param history list + * @return KErrNone if found, otherwise KErrNotFound + */ + TInt LoadHistoryEntry( CArrayFix& aHistoryList ); + + /** + * + * Gets the current URL as HBufC*, Leaves on error + * Returns at least zero-length HBufC on success + * + * @return HBufC* Current URL + */ + + HBufC* GetCurrentUrlInHBufCL() const; + + /** + * + * Gets the current title of the content as HBufC*, leaves on error + * Returns at least zero-length HBufC on success + * + * @return HBufC* Current WML deck / XHTML Page element contents + */ + HBufC* GetCurrentTitleInHBufCL(TBool& aStripUrl) const; + + TUint16 SaveToFileL(TDesC& aFileName) const; + + /** + * + * Gets the WML of the domtree + * Returns pointer to HBufC + * + * @return HBufC* extracted WML MarkUp + */ + + HBufC8* GetPageAsWMLMarkUp(); + + + /** + * + * Gets the text of the domtree + * Returns pointer to HBufC + * + * @return HBufC* extracted text + */ + HBufC* GetPageAsTextL(); + + + /** + * + * Gets the charset from the domtree + * Returns pointer to the charset + * + * @return charset + */ + const NW_Uint8* GetCharsetFromResponse(); + + /** + * + * + */ + void ShowImagesL() const; + + /** + *it must be called when the browser view loses focus + */ + void LoseFocus(); + + /** + *it must be called when the browser view gains focus + */ + void GainFocus(); + + /** + *provide for browser to reset the history list, when close softkey is selected. + */ + void ClearHistoryList(); + + // Called when selected character set changes + void CharacterSetChangedL(TUint aSelectedCharacterSet); + + void* GetCertInfo(); + + public: // public not exported methods + + + /** + * From MHttpLoader_LinkResolverCallbacks Called to obtain the current URL. + * @since 2.8 + * @param + * @return The current URL + */ + HBufC* CurrentUrlLC(); + + /** + * From MHttpLoader_LinkResolverCallbacks Called to obtain a pointer to the Link Resolver + * @since 2.8 + * @return The Browser Control's Link Resolver + */ + MBrCtlLinkResolver* LinkResolver(); + + /** + * From MHttpLoader_LinkResolverCallbacks Called to check if the Host Application should be called to resolve the URL + * @since 2.8 + * @return ETrue if the Host Application will resolve the URL, EFalse otherwise + */ + TBool ShouldResolveUrl(TBool aIsTopLevel, NW_Uint8 aReason); + + /** + * From MHttpLoader_LinkResolverCallbacks Called to call LoadUrlL + * @since 3.0 + * @return void + */ + void LoadLinkUrl(const TDesC& aUrl, void* aHeaders ); + + /** + * From MHttpLoader_LinkResolverCallbacks Called to call PostUrlL + * @since 3.0 + * @return void + */ + void PostLinkUrl(TDesC& aUrl, TDesC8& aPostData, TDesC& aContentType); + + /** + * From MHttpLoader_LinkResolverCallbacks Called to load Embeded content + * @since 3.1 + * @return void + */ + CWmlResourceLoadListener* LoadEmbededUrl( const TDesC& aUrl, void *aLoadContext, + void* aPartialLoadCallback, TUint16 aTransId ); + + /** + * From MHttpLoader_LinkResolverCallbacks Called to set the OEB event + * @since 3.1 + * @return void + */ + void SetOnEnterBackwordReason(); + + /** + * From MHttpLoader_LinkResolverCallbacks Convert a charset from string to IANA encoding + * @since 2.8 + * @return IANA encoding of the charset + */ + TUint16 ConvertCharset(const TDesC8& aCharset); + + TUint ConvertFromForeignCharSetL(void* response); + TUint ConvertFromForeignChunkL( NW_Uint32 foreignEncoding, void* inBuf, TInt * numUnconvertible, TInt* indexFirstUnconvertible, void** outBuf); + static TBrowserStatusCode ConvertToForeignCharSet(void* ucsText); + TUint ConvertToForeignCharSetL(void* text); + NW_Text_t* ConvertToValidUrl (NW_Text_t* url, TBrowserStatusCode* status); + /** + * From MHttpLoader_ToUiCallbacks Called when the user need to be notified with an error + * @since 2.0 + * @return void + */ + void CoverageEvent (TInt aError); + CBrCtl* BrCtl() {return iBrCtl;} + /** + * From MHttpLoader_ToUiCallbacks Called after disconnect is complete. + * @since 2.0 + * @param + * @return void + */ + void Disconnect_Resp() {}; + + TBrowserStatusCode DocumentChanged (NW_HED_DocumentRoot_t* documentRoot, + CActive::TPriority aMessagePriority ); + + TBrowserStatusCode DocumentChangedPartial (NW_HED_DocumentRoot_t* documentRoot, + CActive::TPriority aMessagePriority ); + + NW_Uint32 GetCharsetUid(NW_Uint32 internalEncoding); + NW_Uint32 GetCharsetUid2(NW_Uint32 ianaEncoding); + NW_Uint32 GetUidFromCharset( NW_Uint8* charset, NW_Uint32 charsetLength ); + NW_Text_t* GetCurrentUrl (); + NW_Text_t* GetCurrentUrlL (); + const NW_Text_t* GetCurrentTitle (); + inline NW_HED_DocumentRoot_t* GetDocumentRoot() { return iDocumentRoot; }; + NW_LMgr_RootBox_t* GetRootBox (); + TBrowserStatusCode GetUseNumberBuf (NW_ADT_DynamicVector_t* dynamicVector, void** ptr ); + TBrowserStatusCode GetUseNumberContent (NW_ADT_DynamicVector_t *dynamicVector); + inline CView* GetView() { return iView; }; + TBool HandleDownloadL(RArray<TUint>* aTypeArray, CDesCArrayFlat* aDesArray); + void HandleError (TBrowserStatusCode status); + void FormattingComplete (); + void HandleMessage (NW_Msg_Message_t* message); + TBrowserStatusCode IsActive (NW_HED_DocumentRoot_t* documentRoot, NW_Bool state); + NW_Bool LoadEnd (NW_HED_DocumentRoot_t* documentRoot, NW_Int16 errorClass, NW_WaeError_t error); + TBrowserStatusCode LoadProgressOn (NW_Uint16 transactionId); + TBrowserStatusCode LoadProgressOff (NW_Uint16 transactionId); + void NewDocument (NW_HED_DocumentRoot_t* documentRoot, NW_HED_UrlRequest_t* urlRequest, NW_Bool aDestroyBoxTree); + void DestroyPreviousDocument(); + void RestoreDocument (); + void NotifyProgress (TBrCtlDefs::TBrCtlLoadEvent aEvent, TUint32 aSize, TUint16 aTransactionId); + MBrCtlSpecialLoadObserver* GetLoadObserver (); + static TBrowserStatusCode NW_Http_ConnNeeded (TInt* aConnectionPtr, TInt* aSockSvrHandle, TBool* aNewConn, TApBearerType* aBearerType); +// static TBrowserStatusCode NW_UI_AboutToLoadPageL( NW_Uint32 aNoteType ); + static TBrowserStatusCode NW_UI_ConvertFromForeignCharSet (void* ctx, NW_Url_Resp_t* response); + static TBrowserStatusCode NW_UI_ConvertToForeignCharSet (void* ctx, NW_String_t* text); + static TBrowserStatusCode NW_UI_ConvertFromForeignChunk ( void* ctx, NW_Uint32 foreignEncoding, void* inBuf, TInt * numUnconvertible, TInt* indexFirstUnconvertible, void** outBuf); + static void NW_UI_DialogListSelect (NW_Dlg_ListSelect_t* data, void* callbackCtx, NW_Dlg_ListSelectCB_t *callback ); + static void NW_UI_DialogPrompt (NW_Dlg_Prompt_t* data, void* callbackCtx, NW_Dlg_PromptCB_t *callback); + static void NW_UI_DialogInputPrompt (NW_Dlg_InputPrompt_t *data, void* callbackCtx, NW_Dlg_InputPromptCB_t *callback ); + static void NW_UI_DialogSelectOption (NW_Dlg_SelectData_t *data, void* callbackCtx, NW_Dlg_SelectCB_t* callback ); + /* Return localized string for 'back', 'reset', 'select', 'submit' */ + static NW_Ucs2* NW_UI_GetLocalizedString (NW_Uint32 type); + void NW_UI_GetUserAuthenticationDataL(const NW_Ucs2* aUri, const NW_Ucs2* aUsername, const NW_Ucs2* aRealm, + NW_Ucs2** aRetUsername, NW_Ucs2** aRetPassword, + TBool aBasicAuthentication = EFalse); + static void NW_UI_GetUserRedirectionData (void* wae, const NW_Ucs2* originalUrl, const NW_Ucs2* redirectedUrl, + void *callbackCtx, NW_Wae_UserRedirectionCB_t *callback); + static TBrowserStatusCode NW_UI_HttpError (void *userAgent, const NW_WaeHttpStatus_t httpError, + const NW_Ucs2 *uri, void *callback_ctx, NW_ErrorCB_t *callback); + /** + * + * Query if we are in image map view + * We have multiple views (image map view or normal view) + * + * @param None + * @return KErrNone if successfull, KErrUnknown on error + */ + static TBool NW_UI_IsImageMapView(); + static void NW_UI_NotifyCoverageEvent (TInt aError); + static TBrowserStatusCode NW_UI_NotifyError (void *userAgent, const TBrowserStatusCode status, void *callback_ctx, NW_ErrorCB_t *callback); + // Display the object info dialog box + static NW_Bool NW_UI_ShowObjectDialog(); + static void NW_UI_SoftKey_UpdateSoftKeys (NW_SoftKeyText_t softKeyText); + static TBrowserStatusCode NW_UI_StartContentLoad (void *userAgent, const NW_Ucs2* urlName); + static TBrowserStatusCode NW_UI_StopContentLoad (void *userAgent, const NW_Ucs2* urlName); + static TInt NW_UI_SwitchFromImgMapViewIfNeeded(); + static TInt NW_UI_SwitchToImgMapView(); + static TBrowserStatusCode NW_UI_UrlLoadProgressOn (void *wae, NW_Uint16 transactionId); + static void NW_UI_ViewImage (void* rawData, NW_Int32 length, NW_Bool isWbmp); + /* display a alert dialog to the user */ + static void NW_UI_WmlScriptDlgAlert (void* wae, const NW_Ucs2* message, void* callback_ctx, NW_ScrProxy_DlgAlertCB_t* callback ); + /* display a confirm dialog to the user */ + static void NW_UI_WmlScriptDlgConfirm (void *wae, const NW_Ucs2 *message, const NW_Ucs2 *yesMessage, + const NW_Ucs2 *noMessage, void *callback_ctx, NW_Dlg_ConfirmCB_t *callback ); + /* display a prompt dialog to the user */ + static void NW_UI_WmlScriptDlgPrompt (void *wae, const NW_Ucs2 *message, const NW_Ucs2 *defaultInput, + void *callback_ctx, NW_ScrProxy_DlgPromptCB_t *callback ); + void OptionListInit(); // just forwards call to CEpoc32View + void OptionListAddItem( const TText* aText, const TUint32 aElemID, const TInt aElType ); // just forwards call to CEpoc32View + NW_Bool ReportError (NW_HED_DocumentRoot_t* documentRoot, NW_Int16 errorClass, NW_WaeError_t error, + ReportErrorCallback* callback); + TBrowserStatusCode SendRedrawMsg (NW_Bool drawNow); + TBrowserStatusCode SendRelayoutMsg (NW_Bool createTabList); + TUint SelectedCharacterSet() const {return iSelectedCharacterSet;} + TBrowserStatusCode SetAnchorName (NW_Text_t* anchorName); + void SetFileOpenedByDocHandler( TBool aFileOpenedByDocHandler ); + TBrowserStatusCode ShowNamedBox (NW_LMgr_Box_t* boxTree, const NW_Text_t* targetName); + /** + * From MHttpLoader_ToUiCallbacks Called after shutdown is complete. + * @since 2.0 + * @param + * @return void + */ + void Shutdown_Resp() {}; + TBrowserStatusCode SwitchLayout (NW_Bool aVerticalLayout, NW_Bool aReformatBoxTree); + void UpdateSoftKeys(); + void UpdateTitle(); + void UrlLoadStateChanged (TBrCtlDefs::TBrCtlLoadEvent aEvent); + + // Following functions are for ECMAScript support + static void WindowAlert (void* browserApp_Ctx, NW_Ucs2* msg); + static NW_Bool WindowConfirm (void* browserApp_Ctx, NW_Ucs2* msg, NW_Ucs2* yesMsg, NW_Ucs2* noMsg); + static NW_Ucs2* WindowPrompt (void* browserApp_Ctx, NW_Ucs2* msg, NW_Ucs2* defaultVal); + + static NW_Ucs2* WindowPromptL (void* browserApp_Ctx, NW_Ucs2* msg, NW_Ucs2* defaultVal); + static void WindowOpen(void* browserApp_Ctx, NW_Ucs2* url, NW_Ucs2* target, NW_Uint32 reason); + + /** + * Request the host applicaion to open the URL in a new window + * @since 3.0 + * @param aUrl The Url of the request to be done in the new window + * @param aTargetName The name of the new window + * @param aReason The reason for opening the new window + * @param aMethod The method to be used for fetching the supplied url + * @param aContentType If the method is POST, this is the content type of the data to be posted + * @param aPostData If the method is POST, this is the data to be posted + * @param aBoundary The boundary used if the content is multipart/form-data + * @param aReserved For future use + * @return Return Value is for future reference and is currently ignored + */ + void WindowOpenAndPostL(TUint16* url, TUint16* target, TUint32 reason, + TUint16 method, TDesC8* contentType, TDesC8* postData, + TDesC8* aBoundary, void* reserved); + + /** + * + * @since 3.0 + * @param url + * @param target + * @param reason + */ + void WindowOpenL(TUint16* url, TUint16* target, TUint32 reason); + + TBool Exiting() {return iExiting;}; + + // Support for AboutToLoadPage and the UI + TBool SecureItemsInNonSecurePage() { return iSecureItemsInNonSecurePage; } + TBool NonSecureItemsInSecurePage() { return iNonSecureItemsInSecurePage; } + + TInt GetCharsetAndCharsetStringFromUid(TUint aUid, TUint16* aCharset, + const TUint8** aCharsetString); + TBrowserStatusCode StartDataLoad (TDesC& aUrl, CDataLoadInfo* aDataLoadInfo, + NW_MVC_ILoadListener_t* loadListener, TUint16* aTransId, + void* aOwner, void* aClientData, void* aLoadRecipient, TUint8 aLoadType); + + TBrowserStatusCode PostUrl(const TDesC& aUrl, + const TDesC8& aContentType, const TDesC8& aPostData, + const TDesC8* aBoundary, void* aReserved); + + static TInt RunBGTask(TAny* aShell); + void StartIdle() {if (!iIdle->IsActive()) iIdle->Start(TCallBack(RunBGTask, this));} + + /** + * Create observer to delete temp files when the embedded application exists + * @param TFilename Name and path for the temporary file + * @return NULL if creation failed; + */ + MApaEmbeddedDocObserver* CreateEmbeddedDocObserver( TFileName aFilename, RFs& aRfs); + + void WmlShellLoadUrlL( const TDesC& aUrl, TInt aAppId ); + public: // Public member variables + TBool iEmbedded; + TInt iApId; + CContentLoader* iContentLoader; + RFs iRfs; + + private: // Private methods + + CShell( CView* aEpoc32View, CBrCtl* aBrCtl ); + void ConstructL (TBool aUseWsp, MWmlInterface* aWmlInterface, CWmlControl* aWmlControl ); + TBrowserStatusCode DisplayDocument (); + void DisplayError (NW_Int16 errorClass, NW_WaeError_t error); + TBrowserStatusCode InitComponents (); + TBrowserStatusCode InitializeClass (const NW_Osu_Hwnd_t hWnd); + // check whether the charset is supported and whether its char converter is in the ROM + NW_Bool IsConversionSupported(NW_Uint32 uid, NW_Bool * ConverterAvailable); + static void NW_UI_DoDialogSelectOptionL( NW_Dlg_SelectData_t *data, void* callbackCtx, + NW_Dlg_SelectCB_t* callback ); + /* display a confirm dialog to the user */ + static void NW_UI_WmlScriptDlgConfirmL (void *wae, const NW_Ucs2 *message, const NW_Ucs2 *yesMessage, + const NW_Ucs2 *noMessage, void *callback_ctx, NW_Dlg_ConfirmCB_t *callback ); + static void NW_UI_WmlScriptDlgPromptL( void* wae, const NW_Ucs2 *message, const NW_Ucs2 *defaultInput, + HBufC*& aReturnedInput ); + TInt SetBoxTree( NW_LMgr_Box_t* aBoxTree ); // just forwards call to CEpoc32View + TBrowserStatusCode StartLoad (const NW_Text_t* url, NW_MVC_ILoadListener_t* loadListener, NW_Cache_Mode_t cacheMode); + + private: // Private member variables + + CView* iView; + CBrCtl* iBrCtl; + TBool iIsEpoc32ShellDestroyed;// The instance is set to true in the + // destructor, and is used not to delegate + CCnvCharacterSetConverter* iCharacterSetConverter; + TUint iSelectedCharacterSet; + TUint iCurrentConverter; + CArrayFix<CCnvCharacterSetConverter::SCharacterSet>* iArrayOfCharacterSetsAvailable; + + NW_MVC_ILoadListener_t* iLoadListener; + NW_Osu_Hwnd_t iHWnd; + NW_HED_DocumentRoot_t* iDocumentRoot; + NW_HED_DocumentNode_t* iPrevDocument; + NW_Uint16 iNumUpdates; + NW_Int16 iNumUpdatesPartial; + NW_Uint16 iNumRelayouts; + NW_Uint16 iNumRedraws; + NW_Bool iDisplayDocumentInvoked ; + TBool iSecureItemsInNonSecurePage; + TBool iNonSecureItemsInSecurePage; + + NW_LMgr_Box_t* iBoxTree; + + /* Do background tasks */ + CIdle* iIdle; + + CEmbeddedDocExitObserver* iDocExitObserver; + TBool iExiting; + + // flag to indicate the file processed by document handler + // e.g. unknowCH invoke docHanlder to open a .txt file + TBool iFileOpenedByDocHandler; + CWmlControl* iWmlControl; +}; + +#endif