diff -r f9e827349359 -r b023a8d2866a photosgallery/viewframework/drmutility/src/glxdrmutility.cpp --- a/photosgallery/viewframework/drmutility/src/glxdrmutility.cpp Mon Jun 21 15:40:32 2010 +0300 +++ b/photosgallery/viewframework/drmutility/src/glxdrmutility.cpp Thu Jul 15 18:39:01 2010 +0300 @@ -1,27 +1,21 @@ /* -* Copyright (c) 2008-2009 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: DRM utility implementation -* -*/ + * Copyright (c) 2008-2009 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: DRM utility implementation + * + */ - - -/** - * @internal reviewed 03/07/2007 by Rowland Cook - */ - // INCLUDES #include "glxdrmutility.h" @@ -36,6 +30,7 @@ #include #include #include "glxtracer.h" +#include "glxlog.h" const TInt KGlxDRMThumbnailHeight = 120; const TInt KGlxDRMThumbnailWidth = 90; @@ -50,12 +45,12 @@ */ struct CGlxDrmTls { - CGlxDrmTls(CGlxDRMUtility* aUtility) + CGlxDrmTls(CGlxDRMUtility* aUtility) { iDrmUtility = aUtility; iRefCount = 0; } - + CGlxDRMUtility* iDrmUtility; TInt iRefCount; }; @@ -66,38 +61,38 @@ EXPORT_C CGlxDRMUtility* CGlxDRMUtility::InstanceL() { TRACER("CGlxDRMUtility::InstanceL()"); - CGlxDrmTls* tls = reinterpret_cast(Dll::Tls()); - - if ( !tls ) + CGlxDrmTls* tls = reinterpret_cast (Dll::Tls()); + + if (!tls) { - CGlxDRMUtility* drmutil = new(ELeave)CGlxDRMUtility(); + CGlxDRMUtility* drmutil = new (ELeave) CGlxDRMUtility(); CleanupStack::PushL(drmutil); drmutil->ConstructL(); - + tls = new (ELeave) CGlxDrmTls(drmutil); - + CleanupStack::Pop(drmutil); - - Dll::SetTls( reinterpret_cast(tls)); + + Dll::SetTls(reinterpret_cast (tls)); } - + tls->iRefCount++; - + return tls->iDrmUtility; } - + //============================================================================ // Close //============================================================================ EXPORT_C void CGlxDRMUtility::Close() { TRACER("CGlxDRMUtility::Close()"); - CGlxDrmTls* tls = reinterpret_cast(Dll::Tls()); - - if ( tls ) + CGlxDrmTls* tls = reinterpret_cast (Dll::Tls()); + + if (tls) { tls->iRefCount--; - + // Delete the tls pointer and list manager instance if this was the // last reference if (tls->iRefCount == 0) @@ -119,37 +114,45 @@ delete iDrmHelper; delete iLastConsumedItemUri; } - + //============================================================================ // ItemRightsValidityCheckL // for checking DRM rights validity for item. // is called before right is consumed and for all items (focused or unfocused). //============================================================================ -EXPORT_C TBool CGlxDRMUtility::ItemRightsValidityCheckL( const TDesC& aUri, - TBool aCheckViewRights ) +EXPORT_C TBool CGlxDRMUtility::ItemRightsValidityCheckL(const TDesC& aUri, + TBool aCheckViewRights) { - TRACER("CGlxDRMUtility::ItemRightsValidityCheckL()"); + TRACER("CGlxDRMUtility::ItemRightsValidityCheckL(URI)"); +#ifdef _DEBUG + TTime startTime; + startTime.HomeTime(); +#endif // When checking current rights for a URI - //Allow to Open if rights for a URI was just consumed (i.e. same as stored URI) - if ( iLastConsumedItemUri->Length() > 0 ) - { - if ( aUri.CompareF( *iLastConsumedItemUri ) == 0 ) - { - return ETrue; - } - } + if (iLastConsumedItemUri->Length() > 0) + { + if (aUri.CompareF(*iLastConsumedItemUri) == 0) + { + return ETrue; + } + } - //Else for uri of non-focused uri, just check validity rights + //Else for uri of non-focused uri, just check validity rights TBool rightsValid = EFalse; - TVirtualPathPtr path( aUri, KDefaultContentObject() ); + TVirtualPathPtr path(aUri, KDefaultContentObject()); - ContentAccess::TAttribute attr = + ContentAccess::TAttribute attr = aCheckViewRights ? ContentAccess::ECanView : ContentAccess::ECanPlay; // rightsValid is not updated if an error occurs - iCManager->GetAttribute( attr, rightsValid, path ); - + iCManager->GetAttribute(attr, rightsValid, path); +#ifdef _DEBUG + TTime stopTime; + stopTime.HomeTime(); + GLX_DEBUG2("CGlxDRMUtility::ItemRightsValidityCheckL(URI) took <%d> us", + (TInt) stopTime.MicroSecondsFrom(startTime).Int64()); +#endif return rightsValid; } @@ -158,15 +161,28 @@ // for checking DRM rights validity for item. // is called before right is consumed and for all items (focused or unfocused). //============================================================================ -EXPORT_C TBool CGlxDRMUtility::ItemRightsValidityCheckL( RFile& aFileHandle, - TBool aCheckViewRights ) +EXPORT_C TBool CGlxDRMUtility::ItemRightsValidityCheckL(RFile& aFileHandle, + TBool aCheckViewRights) { - TRACER("CGlxDRMUtility::ItemRightsValidityCheckL()"); + TRACER("CGlxDRMUtility::ItemRightsValidityCheckL(RFile)"); +#ifdef _DEBUG + TTime startTime; + startTime.HomeTime(); +#endif TBool rightsValid = EFalse; + ContentAccess::TAttribute attrib = + aCheckViewRights ? ContentAccess::ECanView : ContentAccess::ECanPlay; - ContentAccess::CContent* content = ContentAccess::CContent::NewLC( aFileHandle ); - TInt err( content->GetAttribute( ContentAccess::ECanView, rightsValid ) ); - CleanupStack::PopAndDestroy( content ); + ContentAccess::CContent* content = ContentAccess::CContent::NewLC( + aFileHandle); + TInt err(content->GetAttribute(attrib, rightsValid)); + CleanupStack::PopAndDestroy(content); +#ifdef _DEBUG + TTime stopTime; + stopTime.HomeTime(); + GLX_DEBUG2("CGlxDRMUtility::ItemRightsValidityCheckL(RFile) took <%d> us", + (TInt) stopTime.MicroSecondsFrom(startTime).Int64()); +#endif return rightsValid; } @@ -174,15 +190,15 @@ // DisplayItemRightsCheckL // is called after right is consumed and for only focused/displayed item. //============================================================================ -EXPORT_C TBool CGlxDRMUtility::DisplayItemRightsCheckL( const TDesC& aUri, - TBool aCheckViewRights ) +EXPORT_C TBool CGlxDRMUtility::DisplayItemRightsCheckL(const TDesC& aUri, + TBool aCheckViewRights) { - TRACER("CGlxDRMUtility::DisplayItemRightsCheckL()"); + TRACER("CGlxDRMUtility::DisplayItemRightsCheckL(URI)"); // Allow to display if rights for a URI was just consumed (i.e. same as stored URI) - if ( iLastConsumedItemUri->Length() > 0 ) + if (iLastConsumedItemUri->Length() > 0) { - if ( aUri.CompareF( *iLastConsumedItemUri ) == 0 ) + if (aUri.CompareF(*iLastConsumedItemUri) == 0) { return ETrue; } @@ -192,33 +208,33 @@ ClearLastConsumedItemUriL(); // Otherwise, check current rights for the URI of newly focused item - return ItemRightsValidityCheckL( aUri, aCheckViewRights ); + return ItemRightsValidityCheckL(aUri, aCheckViewRights); } //============================================================================ // DisplayItemRightsCheckL // is called after right is consumed and for only focused/displayed item. //============================================================================ -EXPORT_C TBool CGlxDRMUtility::DisplayItemRightsCheckL( RFile& aFileHandle, - TBool aCheckViewRights ) +EXPORT_C TBool CGlxDRMUtility::DisplayItemRightsCheckL(RFile& aFileHandle, + TBool aCheckViewRights) { - TRACER("CGlxDRMUtility::DisplayItemRightsCheckL()"); + TRACER("CGlxDRMUtility::DisplayItemRightsCheckL(RFile)"); // Otherwise, check current rights for the URI of newly focused item - return ItemRightsValidityCheckL( aFileHandle, aCheckViewRights ); + return ItemRightsValidityCheckL(aFileHandle, aCheckViewRights); } - //============================================================================ // ConsumeRightsL //============================================================================ EXPORT_C TBool CGlxDRMUtility::ConsumeRightsL(const TDesC& aUri) { - TRACER("CGlxDRMUtility::ConsumeRightsL()"); - TVirtualPathPtr path( aUri, KDefaultContentObject() ); + TRACER("CGlxDRMUtility::ConsumeRightsL(URI)"); + TVirtualPathPtr path(aUri, KDefaultContentObject()); // Create a CData object to read the content // Tell the agent we are planning to display the content - CData* data = CData::NewLC(path, ContentAccess::EView, EContentShareReadOnly); + CData* data = CData::NewLC(path, ContentAccess::EView, + EContentShareReadOnly); //When consuming rights for a URI, clear stored URI ClearLastConsumedItemUriL(); @@ -226,12 +242,12 @@ // Execute the intent, tell the agent that we plan to display the content // It is at this point that any stateful rights will be decremented TInt err = data->ExecuteIntent(ContentAccess::EView); - if ( err == KErrNone ) + if (err == KErrNone) { //Update stored URI - iLastConsumedItemUri = iLastConsumedItemUri->ReAllocL( aUri.Length() ); + iLastConsumedItemUri = iLastConsumedItemUri->ReAllocL(aUri.Length()); TPtr newPtr = iLastConsumedItemUri->Des(); - newPtr.Copy( aUri ); + newPtr.Copy(aUri); } CleanupStack::PopAndDestroy(data); @@ -239,16 +255,15 @@ return (err == KErrNone); } - //============================================================================ // ConsumeRightsL //============================================================================ EXPORT_C TBool CGlxDRMUtility::ConsumeRightsL(RFile& aFileHandle) { - TRACER("CGlxDRMUtility::ConsumeRightsL(RFile& aFileHandle)"); - CData* data = CData::NewLC( aFileHandle, KDefaultContentObject(), EPeek ); + TRACER("CGlxDRMUtility::ConsumeRightsL(RFile)"); + CData* data = CData::NewLC(aFileHandle, KDefaultContentObject(), EPeek); TInt err = data->ExecuteIntent(ContentAccess::EView); - CleanupStack::PopAndDestroy( data ); + CleanupStack::PopAndDestroy(data); return (err == KErrNone); } @@ -256,12 +271,13 @@ //Clears Last Consumed Uri //============================================================================ EXPORT_C void CGlxDRMUtility::ClearLastConsumedItemUriL() - { - //clears the stored uri - TPtr ptr = iLastConsumedItemUri->Des(); - ptr.Zero(); - iLastConsumedItemUri = iLastConsumedItemUri->ReAllocL( 0 ); - } + { + TRACER("CGlxDRMUtility::ClearLastConsumedItemUriL()"); + //clears the stored uri + TPtr ptr = iLastConsumedItemUri->Des(); + ptr.Zero(); + iLastConsumedItemUri = iLastConsumedItemUri->ReAllocL(0); + } //============================================================================ // Test whether a media item is OMA DRM 2.0 protected and has an associated @@ -273,11 +289,12 @@ TBool canShowInfoOnline = EFalse; HBufC8* urlBuf = NULL; - canShowInfoOnline = iDrmHelper->HasInfoUrlL( const_cast(aUri) , urlBuf); + canShowInfoOnline = iDrmHelper->HasInfoUrlL(const_cast (aUri), + urlBuf); // discard buf we don't need it delete urlBuf; - + return canShowInfoOnline; } @@ -287,27 +304,29 @@ EXPORT_C void CGlxDRMUtility::ShowInfoOnlineL(const TDesC& aUri) { TRACER("CGlxDRMUtility::ShowInfoOnlineL()"); - iDrmHelper->OpenInfoUrlL( const_cast(aUri) ); + iDrmHelper->OpenInfoUrlL(const_cast (aUri)); } //============================================================================ // Test whether a media item can be set as automated content. //============================================================================ -EXPORT_C TBool CGlxDRMUtility::CanSetAsAutomatedL(const TDesC& aUri, - TGlxDrmAutomatedType aType) +EXPORT_C TBool CGlxDRMUtility::CanSetAsAutomatedL(const TDesC& aUri, + TGlxDrmAutomatedType aType) { TRACER("CGlxDRMUtility::CanSetAsAutomatedL()"); TBool canSetAutomated = EFalse; - switch(aType) - { - case EGlxDrmAutomatedTypeWallpaper: + switch (aType) { - User::LeaveIfError(iDrmHelper->SetAutomatedType(CDRMHelper::EAutomatedTypeWallpaper)); - User::LeaveIfError(iDrmHelper->CanSetAutomated(aUri, canSetAutomated)); - break; - } - default: - break; + case EGlxDrmAutomatedTypeWallpaper: + { + User::LeaveIfError(iDrmHelper->SetAutomatedType( + CDRMHelper::EAutomatedTypeWallpaper)); + User::LeaveIfError(iDrmHelper->CanSetAutomated(aUri, + canSetAutomated)); + break; + } + default: + break; }; return canSetAutomated; } @@ -315,44 +334,45 @@ //============================================================================ // SetAsAutomatedL //============================================================================ -EXPORT_C void CGlxDRMUtility::SetAsAutomatedL(const TDesC& aUri, - TGlxDrmAutomatedType aType) +EXPORT_C void CGlxDRMUtility::SetAsAutomatedL(const TDesC& aUri, + TGlxDrmAutomatedType aType) { TRACER("CGlxDRMUtility::SetAsAutomatedL()"); - switch(aType) + switch (aType) { - case EGlxDrmAutomatedTypeWallpaper: - { - TInt error = iDrmHelper->SetAutomatedType(CDRMHelper::EAutomatedTypeWallpaper); - if(KErrNone==error) + case EGlxDrmAutomatedTypeWallpaper: { - error= iDrmHelper->SetAutomatedPassive(aUri); - if(KErrNone!=error) + TInt error = iDrmHelper->SetAutomatedType( + CDRMHelper::EAutomatedTypeWallpaper); + if (KErrNone == error) { - iDrmHelper->HandleErrorL(error, aUri); + error = iDrmHelper->SetAutomatedPassive(aUri); + if (KErrNone != error) + { + iDrmHelper->HandleErrorL(error, aUri); + } } + + break; } - - break; - } - default: - break; + default: + break; }; } //============================================================================ // ShowDRMDetailsPane //============================================================================ -EXPORT_C void CGlxDRMUtility::ShowDRMDetailsPaneL( const TDesC& aUri ) +EXPORT_C void CGlxDRMUtility::ShowDRMDetailsPaneL(const TDesC& aUri) { - TRACER("CGlxDRMUtility::ShowDRMDetailsPaneL()"); + TRACER("CGlxDRMUtility::ShowDRMDetailsPaneL(URI)"); TRAPD( err, iDrmHelper->LaunchDetailsViewEmbeddedL( aUri ) ); // if no rights ask user to re-activate - if( err == KErrCANoRights ) + if (err == KErrCANoRights) { HBufC* buf = aUri.AllocLC(); - iDrmHelper->ActivateContentL( *buf ); - CleanupStack::PopAndDestroy( buf ); + iDrmHelper->ActivateContentL(*buf); + CleanupStack::PopAndDestroy(buf); } } @@ -362,14 +382,13 @@ //============================================================================ EXPORT_C void CGlxDRMUtility::ShowDRMDetailsPaneL(RFile& aFileHandle) { - TRACER("CGlxDRMUtility::ShowDRMDetailsPaneL()"); + TRACER("CGlxDRMUtility::ShowDRMDetailsPaneL(RFile)"); TRAPD( err, iDrmHelper->LaunchDetailsViewEmbeddedL( aFileHandle ) ); // if no rights ask user to re-activate - if( err == KErrCANoRights ) + if (err == KErrCANoRights) { //need to check if we need to handle. } - } //============================================================================ @@ -379,30 +398,31 @@ { TRACER("CGlxDRMUtility::IsForwardLockedL()"); TBool forwardLocked = EFalse; - TVirtualPathPtr path( aUri, KDefaultContentObject() ); + TVirtualPathPtr path(aUri, KDefaultContentObject()); // forwardLocked is not updated if an error occurs - iCManager->GetAttribute( ContentAccess::EIsForwardable, forwardLocked, path ); + iCManager->GetAttribute(ContentAccess::EIsForwardable, forwardLocked, + path); return forwardLocked; } - -//============================================================================ -// ShowRightsInfoL -//============================================================================ -EXPORT_C void CGlxDRMUtility::ShowRightsInfoL(const TDesC& aUri) - { - TRACER("CGlxDRMUtility::ShowRightsInfoL()"); - iDrmHelper->CheckRightsAmountL( aUri ); - } //============================================================================ // ShowRightsInfoL //============================================================================ -EXPORT_C void CGlxDRMUtility::ShowRightsInfoL(RFile& aFileHandle) +EXPORT_C void CGlxDRMUtility::ShowRightsInfoL(const TDesC& aUri) { - TRACER("CGlxDRMUtility::ShowRightsInfoL(aFileHandle)"); - iDrmHelper->CheckRightsAmountL( aFileHandle ); + TRACER("CGlxDRMUtility::ShowRightsInfoL(URI)"); + iDrmHelper->CheckRightsAmountL(aUri); + } + +//============================================================================ +// ShowRightsInfoL +//============================================================================ +EXPORT_C void CGlxDRMUtility::ShowRightsInfoL(RFile& aFileHandle) + { + TRACER("CGlxDRMUtility::ShowRightsInfoL(RFile)"); + iDrmHelper->CheckRightsAmountL(aFileHandle); } //============================================================================ @@ -412,17 +432,17 @@ { TRACER("CGlxDRMUtility::DRMThumbnailSize()"); TSize thumbnailSize(KGlxDRMThumbnailWidth, KGlxDRMThumbnailHeight); - - if((aSize.iWidth*aSize.iHeight)/4 < - KGlxDRMThumbnailWidth * KGlxDRMThumbnailHeight) + + if ((aSize.iWidth * aSize.iHeight) / 4 < KGlxDRMThumbnailWidth + * KGlxDRMThumbnailHeight) { - thumbnailSize.iWidth = aSize.iWidth/2; - thumbnailSize.iHeight = aSize.iHeight/2; + thumbnailSize.iWidth = aSize.iWidth / 2; + thumbnailSize.iHeight = aSize.iHeight / 2; } - + return thumbnailSize; } - + /** * C++ default constructor. */ @@ -442,5 +462,4 @@ iLastConsumedItemUri = HBufC::NewL(0); } - // End of File