diff -r 000000000000 -r 2f259fa3e83a commonuis/CommonUi/src/DocAppInstHandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/commonuis/CommonUi/src/DocAppInstHandler.cpp Tue Feb 02 01:00:49 2010 +0200 @@ -0,0 +1,212 @@ +/* +* Copyright (c) 2002-2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "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: Implementation of app installer handler. +* +*/ + + +// INCLUDE FILES +#include "DocAppInstHandler.h" +#include "DocAppInstLauncher.h" +#include +#include + + +// ================= MEMBER FUNCTIONS ======================= + +// C++ default constructor can NOT contain any code, that +// might leave. +// +CDocAppInstHandler::CDocAppInstHandler( + const TDataType& aDataType, + const TUid& aUid, + CDocumentHandler* aDocDispatcher, + TDocServiceMode aServiceMode ) : + CDocDefaultHandler( aDataType, aUid, aDocDispatcher, aServiceMode ), + iCallWithParams( EFalse ), + iHeapURL( NULL ), + iParamDescriptor( NULL ), + iUseDescriptor( EFalse ) + { + } + +// Two-phased constructor. +// +CDocAppInstHandler* CDocAppInstHandler::NewL( + const TDataType& aDataType, + const TUid& aUid, + CDocumentHandler* aDocDispatcher, + TDocServiceMode aServiceMode ) + { + CDocAppInstHandler *self = + new ( ELeave ) CDocAppInstHandler( aDataType, + aUid, aDocDispatcher, + aServiceMode ); + CleanupStack::PushL( self ); + self->BaseConstructL(); + CleanupStack::Pop(); + return self; + } + +// Destructor +// +CDocAppInstHandler::~CDocAppInstHandler() + { + if ( iLauncher ) + { + iLauncher->Cancel(); + } + delete iLauncher; + delete iParamPckg; + delete iHeapURL; //URL + delete iParamDescriptor; //Params+URL + } + + +// --------------------------------------------------------- +// CDocAppInstHandler::AddToParamListL() +// Add parameters (gives as parameter) to installer spesific parameter list +// --------------------------------------------------------- +// +void CDocAppInstHandler::AddToParamListL(const CAiwGenericParamList& aParams) + { + TInt index = 0; + const TAiwGenericParam* param = NULL; + SwiUI::TInstallReq params; + + iCallWithParams = EFalse; + iUseDescriptor = EFalse; + + // Installer wants some parameters from Browser. Convert parameters + // (if there are any) from aParams to installer used format. + if ( aParams.Count() ) + { + //TInstallReq.iCharsetId + param = aParams.FindFirst(index, EGenericParamCharSet, EVariantTypeDesC); + if (index >= 0 && param) + { + TPtrC charset; + param->Value().Get(charset); + + HBufC8* charset8 = CnvUtfConverter::ConvertFromUnicodeToUtf8L( charset ); + + CCnvCharacterSetConverter* conv = CCnvCharacterSetConverter::NewLC(); + params.iCharsetId = conv->ConvertStandardNameOfCharacterSetToIdentifierL( *charset8, iFs ); + CleanupStack::PopAndDestroy(); // conv + + delete charset8; + iCallWithParams = ETrue; + } + //TInstallReq.iIAP; + index = 0; + param = aParams.FindFirst(index, EGenericParamAccessPoint, EVariantTypeTInt32); + if (index >= 0 && param) + { + TInt32 accesspoint; + param->Value().Get(accesspoint); + params.iIAP = accesspoint; + iCallWithParams = ETrue; + } + //TInstallReq.iSourceURL; + index = 0; + param = aParams.FindFirst(index, EGenericParamURL, EVariantTypeDesC); + if (index >= 0 && param) + { + TPtrC sourceURL; + param->Value().Get(sourceURL); + // params.iSourceURL = sourceURL; // removed because TSW JROL-7B8K6H + iCallWithParams = ETrue; + // Alloc URL from heap. + iHeapURL = sourceURL.AllocL(); + iUseDescriptor = ETrue; + } + //TInstallReq.iMIME; + if ( iCallWithParams ) + { + params.iMIME = iDataType.Des8(); + } + + // Ok we have all params + url in the descriptor. + if ( iUseDescriptor ) + { + // Set params to pckg buffer. + SwiUI::TInstallReqPckg regPckg( params ); + // Alloc heap buffer: 800bytes + 4bytes + size of URL + iParamDescriptor = HBufC8::NewL( + sizeof( regPckg ) + + sizeof( TInt32 ) + + iHeapURL->Size() ); + + TPtr8 iParamDesPtr = iParamDescriptor->Des(); + // Copy parameters to 8-bit descriptor + RDesWriteStream stream( iParamDesPtr ); + CleanupClosePushL( stream ); + stream.WriteL( regPckg ); + // Note length must be set always. Even if it is zero. + stream.WriteInt32L( iHeapURL->Length() ); + stream.WriteL( *iHeapURL ); + CleanupStack::PopAndDestroy( &stream ); + } + } + iParamPckg = new ( ELeave ) SwiUI::TInstallReqPckg (params); + } + +// --------------------------------------------------------- +// CDocAppInstHandler::OpenFileEmbeddedL(RFile& aFileHandle) +// +// --------------------------------------------------------- +// +TInt CDocAppInstHandler::OpenFileEmbeddedL(RFile& aFileHandle) + { + // Installer won't be embedded -> Forward to stand-alone version + return OpenFileL(aFileHandle); + } + +// --------------------------------------------------------- +// CDocAppInstHandler::OpenFileEmbeddedL(RFile& aFileHandle) +// +// --------------------------------------------------------- +// +TInt CDocAppInstHandler::OpenFileL(RFile& aFileHandle) + { + #ifdef _DEBUG + RDebug::Print( _L("DocumentHandler: CDocAppInstHandler::OpenFileL Called")); + #endif + + iLauncher = CDocAppInstLauncher::NewL(); + iLauncher->SetExitObserver( this ); + + if ( iCallWithParams ) + { + if ( iUseDescriptor ) + { + iLauncher->InstallL( aFileHandle, *iParamDescriptor ); + } + else + { + iLauncher->InstallL( aFileHandle, *iParamPckg ); + } + } + else + { + iLauncher->InstallL( aFileHandle ); + } + + #ifdef _DEBUG + RDebug::Print( _L("DocumentHandler: CDocAppInstHandler::OpenFileL Returns.")) ; + #endif + return SetAndReturnStatus( KErrNone ); // If we're still here, everything is ok. + } + +// End of File