diff -r 1221b68b8a5f -r 1481bf457703 wmdrm/camese/wmdrmdlaapp/src/wmdrmdlabrowserview.cpp --- a/wmdrm/camese/wmdrmdlaapp/src/wmdrmdlabrowserview.cpp Tue Aug 31 15:29:38 2010 +0300 +++ b/wmdrm/camese/wmdrmdlaapp/src/wmdrmdlabrowserview.cpp Wed Sep 01 12:21:16 2010 +0100 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 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" @@ -22,13 +22,15 @@ #include #include #include -#include +#include +#include #include #include "wmdrmdlabrowserview.h" #include "wmdrmdlabrowsercontainer.h" #include "wmdrmdlaappconstants.h" // CONTANTS +_LIT( KDataTypeLicenseResponse, "application/vnd.ms-wmdrm.lic-resp" ); // ======== LOCAL FUNCTIONS ======== @@ -89,6 +91,46 @@ } // --------------------------------------------------------------------------- +// CWmDrmDlaBrowserView::SetIAP +// --------------------------------------------------------------------------- +// + +void CWmDrmDlaBrowserView::SetIAP( TInt aIap ) + { + iIap = aIap; + } + +// --------------------------------------------------------------------------- +// CWmDrmDlaBrowserView::PostL +// --------------------------------------------------------------------------- +// +void CWmDrmDlaBrowserView::PostL( + MBrowserViewLicenseReceivedCallback* aCallback, + const TDesC& aPostUrl, + const TDesC8& aPostContentType, + const TDesC8& aPostData, + const TDesC8& aPostContentBoundary ) + { + iCallback = aCallback; + iContainer->BrCtlInterface()->PostUrlL( aPostUrl, + aPostContentType, + aPostData, + &aPostContentBoundary, + (TAny*)iContainer ); + iContainer->BrCtlInterface()->SetFocus( ETrue, EDrawNow ); + } + +// --------------------------------------------------------------------------- +// CWmDrmDlaBrowserView::LicenseResponse +// --------------------------------------------------------------------------- +// + +HBufC8* CWmDrmDlaBrowserView::LicenseResponse() + { + return iLicenseResponse; + } + +// --------------------------------------------------------------------------- // CWmDrmDlaBrowserView::Id // --------------------------------------------------------------------------- // @@ -98,6 +140,28 @@ } // --------------------------------------------------------------------------- +// CWmDrmDlaBrowserView::HandleCommandL +// --------------------------------------------------------------------------- +// +void CWmDrmDlaBrowserView::HandleCommandL( + TInt aCommand ) + { + if ( aCommand >= TBrCtlDefs::ECommandIdBase + + TBrCtlDefs::ECommandIdWMLBase && + aCommand <= TBrCtlDefs::ECommandIdBase + + TBrCtlDefs::ECommandIdRange ) + { + BrCtlHandleCommandL( aCommand ); + } + else + { + iContainer->BrCtlInterface()->HandleCommandL( (TInt)TBrCtlDefs::ECommandCancelFetch + + (TInt)TBrCtlDefs::ECommandIdBase ); + AppUi()->HandleCommandL( aCommand ); + } + } + +// --------------------------------------------------------------------------- // CWmDrmDlaBrowserView::DoActivateL // --------------------------------------------------------------------------- // @@ -139,6 +203,8 @@ void CWmDrmDlaBrowserView::CreateContainerL() { RemoveContainer(); + iContainer = CWmDrmDlaBrowserContainer::NewL( this, this ); + iContainer->SetMopParent( this ); } // --------------------------------------------------------------------------- @@ -154,3 +220,105 @@ iContainer = NULL; } } + +// --------------------------------------------------------------------------- +// CWmDrmDlaBrowserView::BrCtlHandleCommandL +// --------------------------------------------------------------------------- +// +void CWmDrmDlaBrowserView::BrCtlHandleCommandL( TInt aCommand ) + { + iContainer->BrCtlInterface()->HandleCommandL( aCommand ); + } + +// --------------------------------------------------------------------------- +// CWmDrmDlaBrowserView::NetworkConnectionNeededL +// --------------------------------------------------------------------------- +// +void CWmDrmDlaBrowserView::NetworkConnectionNeededL( + TInt* aConnectionPtr, + TInt* aSockSvrHandle, + TBool* aNewConn, + TApBearerType* aBearerType ) + { + TInt ret( 0 ); + // If not connected, try to start a new connection + if ( !iConMgr->Connected() ) + { + iConMgr->SetRequestedAP( iIap ); + ret = iConMgr->StartConnectionL( ETrue ); + } + + // If connected, return needed info to framework + if ( !ret ) + { + *aConnectionPtr = reinterpret_cast(&iConMgr->Connection() ); + *aSockSvrHandle = iConMgr->SocketServer().Handle(); + *aNewConn = EFalse; + *aBearerType = EApBearerTypeAllBearers; + } + else + { + User::Leave( KErrCancel ); + } + } + +// --------------------------------------------------------------------------- +// CWmDrmDlaBrowserView::HandleRequestL +// --------------------------------------------------------------------------- +// +TBool CWmDrmDlaBrowserView::HandleRequestL( + RArray* /*aTypeArray*/, + CDesCArrayFlat* /*aDesArray*/ ) + { + return EFalse; + } + +// --------------------------------------------------------------------------- +// CWmDrmDlaBrowserView::HandleDownloadL +// --------------------------------------------------------------------------- +// +TBool CWmDrmDlaBrowserView::HandleDownloadL( + RArray* aTypeArray, + CDesCArrayFlat* aDesArray ) + { + //Check that content type and local file name exists + //There must be both, because download manager downloads POST-content + //in advance calling this function + TInt contentTypeIndex( aTypeArray->Find( EParamReceivedContentType ) ); + TInt fileNameIndex( aTypeArray->Find( EParamLocalFileName ) ); + if ( contentTypeIndex != KErrNotFound && + fileNameIndex != KErrNotFound && + contentTypeIndex < aDesArray->Count() && + fileNameIndex < aDesArray->Count() ) + { + //Check that the downloaded content is license response + TPtrC16 dataTypePtr( (*aDesArray)[contentTypeIndex] ); + if ( dataTypePtr.CompareF( KDataTypeLicenseResponse ) == 0 ) + { + //Get the path to the license response, + //read the response, delete the file and + //make a license received - callback + TPtrC16 filePathPtr( (*aDesArray)[fileNameIndex] ); + RFs fs; + User::LeaveIfError( fs.Connect() ); + CleanupClosePushL( fs ); + RFile file; + TInt size( 0 ); + User::LeaveIfError( file.Open( fs, filePathPtr, EFileRead ) ); + CleanupClosePushL( file ); + User::LeaveIfError( file.Size( size ) ); + delete iLicenseResponse; + iLicenseResponse = NULL; + iLicenseResponse = HBufC8::NewL( size ); + TPtr8 licensePtr( iLicenseResponse->Des() ); + User::LeaveIfError( file.Read( 0, licensePtr, size ) ); + CleanupStack::PopAndDestroy( &file ); + User::LeaveIfError( fs.Delete( filePathPtr ) ); + CleanupStack::PopAndDestroy( &fs ); + iCallback->LicenseReceived(); + return ETrue; + } + } + return EFalse; + } +