contentmgmt/referencedrmagent/tcaf/source/CafutilsStep.cpp
changeset 108 ca9a0fc2f082
parent 85 1efb81185f1c
--- a/contentmgmt/referencedrmagent/tcaf/source/CafutilsStep.cpp	Wed Oct 06 11:09:48 2010 +0530
+++ b/contentmgmt/referencedrmagent/tcaf/source/CafutilsStep.cpp	Sat Oct 30 16:29:23 2010 +0530
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 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"
@@ -61,6 +61,8 @@
 	
 	CDirStreamable *newFileList = CDirStreamable::NewL(*fileList);
 	delete fileList;
+
+	CleanupStack::PushL(newFileList);
 	
 	// Create a buffer
 	CBufFlat* buf = CBufFlat::NewL(50);
@@ -96,7 +98,8 @@
 	
 	CleanupStack::PopAndDestroy(buf);
 	
-	delete newFileList;
+	CleanupStack::PopAndDestroy(newFileList); 
+
 	delete streamDir;
 	CleanupStack::PopAndDestroy(manager);
 	
@@ -124,14 +127,14 @@
 	__UHEAP_MARK;
 	
 
-	RAttributeSet aSet;
-	CleanupClosePushL(aSet);
-	aSet.AddL(EIsProtected);
-	aSet.AddL(EIsForwardable);
-	aSet.AddL(EIsForwardable);
+	RAttributeSet tempSet;
+	CleanupClosePushL(tempSet);
+	tempSet.AddL(EIsProtected);
+	tempSet.AddL(EIsForwardable);
+	tempSet.AddL(EIsForwardable);
 	
-	aSet.SetValue(EIsProtected, (TInt) ETrue, KErrNone);
-	aSet.SetValue(EIsForwardable, (TInt) EFalse, KErrNone);
+	tempSet.SetValue(EIsProtected, (TInt) ETrue, KErrNone);
+	tempSet.SetValue(EIsForwardable, (TInt) EFalse, KErrNone);
 		
 	// Create a buffer
 	CBufFlat* buf = CBufFlat::NewL(50);
@@ -142,7 +145,7 @@
 	CleanupClosePushL(writeStream);
 
 	// write the directory to the stream
-	aSet.ExternalizeL(writeStream);
+	tempSet.ExternalizeL(writeStream);
 	CleanupStack::PopAndDestroy(&writeStream);
 
 	// create read stream
@@ -155,16 +158,16 @@
 	bSet.InternalizeL(readStream);
 		
 	TInt valueA, valueB;
-	if(aSet.Count() != bSet.Count())
+	if(tempSet.Count() != bSet.Count())
 		{
 		SetTestStepResult(EFail);
 		}
 	
-	for(TInt i = 0; i < aSet.Count(); i++)
+	for(TInt i = 0; i < tempSet.Count(); i++)
 		{
 		valueA = -1;
 		valueB = -1;
-		if(aSet.GetValue(aSet[i],valueA) != bSet.GetValue(aSet[i],valueB))
+		if(tempSet.GetValue(tempSet[i],valueA) != bSet.GetValue(tempSet[i],valueB))
 			{
 			SetTestStepResult(EFail);
 			}
@@ -178,7 +181,7 @@
 	CleanupStack::PopAndDestroy(&bSet);
 	CleanupStack::PopAndDestroy(&readStream);
 	CleanupStack::PopAndDestroy(buf);
-	CleanupStack::PopAndDestroy(&aSet);
+	CleanupStack::PopAndDestroy(&tempSet);
 	
 	__UHEAP_MARKEND;
 
@@ -206,14 +209,14 @@
 
 	__UHEAP_MARK;
 	
-	RStringAttributeSet aSet;
-	CleanupClosePushL(aSet);
-	aSet.AddL(EMimeType);
-	aSet.AddL(EDescription);
+	RStringAttributeSet tempSet;
+	CleanupClosePushL(tempSet);
+	tempSet.AddL(EMimeType);
+	tempSet.AddL(EDescription);
 	
 	// Set some values, normally be done by the agent
-	aSet.SetValue(EMimeType, KMimeType(), KErrNone);	
-	aSet.SetValue(EDescription, KNullDesC(), KErrNotSupported);	
+	tempSet.SetValue(EMimeType, KMimeType(), KErrNone);	
+	tempSet.SetValue(EDescription, KNullDesC(), KErrNotSupported);	
 	
 	// Create a buffer
 	CBufFlat* buf = CBufFlat::NewL(50);
@@ -224,7 +227,7 @@
 	CleanupClosePushL(writeStream);
 
 	// write the directory to the stream
-	aSet.ExternalizeL(writeStream);
+	tempSet.ExternalizeL(writeStream);
 	CleanupStack::PopAndDestroy(&writeStream);
 
 	// create read stream
@@ -238,16 +241,16 @@
 		
 	TBuf <1024> valueA;
 	TBuf <1024> valueB;
-	if(aSet.Count() != bSet.Count())
+	if(tempSet.Count() != bSet.Count())
 		{
 		SetTestStepResult(EFail);
 		}
 	
-	for(TInt i = 0; i < aSet.Count(); i++)
+	for(TInt i = 0; i < tempSet.Count(); i++)
 		{
 		valueA.SetLength(0);
 		valueB.SetLength(0);
-		if(aSet.GetValue(aSet[i],valueA) != bSet.GetValue(aSet[i],valueB))
+		if(tempSet.GetValue(tempSet[i],valueA) != bSet.GetValue(tempSet[i],valueB))
 			{
 			SetTestStepResult(EFail);
 			}
@@ -261,7 +264,7 @@
 	CleanupStack::PopAndDestroy(&bSet);
 	CleanupStack::PopAndDestroy(&readStream);
 	CleanupStack::PopAndDestroy(buf);
-	CleanupStack::PopAndDestroy(&aSet);
+	CleanupStack::PopAndDestroy(&tempSet);
 	
 	__UHEAP_MARKEND;
 
@@ -293,6 +296,8 @@
 	__UHEAP_MARK;
 	
 	CSupplierOutputFile *outputFile = CSupplierOutputFile::NewL(KDummyName(), EContent, KDummyType());
+
+	CleanupStack::PushL(outputFile);
 	
 	// Create a buffer
 	CBufFlat* buf = CBufFlat::NewL(50);
@@ -313,6 +318,8 @@
 	// construct a new CSupplierOutputFile from the stream
 	CSupplierOutputFile *outputFile2= CSupplierOutputFile::NewL(readStream);
 	CleanupStack::PopAndDestroy(&readStream);
+
+	CleanupStack::PushL(outputFile2);
 	
 	if(outputFile->FileName() != outputFile2->FileName())
 			{
@@ -327,10 +334,7 @@
 			SetTestStepResult(EFail);
 			}
 	
-	CleanupStack::PopAndDestroy(buf);
-	
-	delete outputFile;
-	delete outputFile2;
+	CleanupStack::PopAndDestroy(3); // Relinquishes buf, outputFile and outputFile2.	
 	
 	__UHEAP_MARKEND;
 
@@ -454,7 +458,8 @@
 
 	__UHEAP_MARK;
 	
-	CEmbeddedObject *aObject = CEmbeddedObject::NewL(KTestUniqueId(), KTestName(), KTestMimeType(), EContentObject);
+    CEmbeddedObject *tempObject = CEmbeddedObject::NewL(KTestUniqueId(), KTestName(), KTestMimeType(), EContentObject);
+    CleanupStack::PushL(tempObject);
 	
 	// Create a buffer
 	CBufFlat* buf = CBufFlat::NewL(50);
@@ -465,7 +470,7 @@
 	CleanupClosePushL(writeStream);
 
 	// write the directory to the stream
-	aObject->ExternalizeL(writeStream);
+    tempObject ->ExternalizeL(writeStream);
 	CleanupStack::PopAndDestroy(&writeStream);
 
 	// create read stream
@@ -477,26 +482,27 @@
 	CleanupStack::PopAndDestroy(&readStream);
 	
 	
-	if(aObject->UniqueId() != bObject->UniqueId())
+    if(tempObject ->UniqueId() != bObject->UniqueId())
 			{
 			SetTestStepResult(EFail);
 			}
 			
-	if(aObject->Name() != bObject->Name())
+    if(tempObject ->Name() != bObject->Name())
 			{
 			SetTestStepResult(EFail);
 			}			
-	if(aObject->Type() != bObject->Type())
+    if(tempObject ->Type() != bObject->Type())
 			{
 			SetTestStepResult(EFail);
 			}			
-	if(aObject->MimeType() != bObject->MimeType())
+    if(tempObject ->MimeType() != bObject->MimeType())
 			{
 			SetTestStepResult(EFail);
 			}			
 	
 	CleanupStack::PopAndDestroy(buf);
-	delete aObject;
+
+    CleanupStack::PopAndDestroy(tempObject );
 	delete bObject;
 	
 	__UHEAP_MARKEND;
@@ -617,8 +623,9 @@
 		}
 
 
-	CVirtualPath *aPath= CVirtualPath::NewL(KTestUri(), KTestUniqueId());
+	CVirtualPath *tempPath= CVirtualPath::NewL(KTestUri(), KTestUniqueId());
 	
+	CleanupStack::PushL(tempPath);
 	// Create a buffer
 	CBufFlat* buf = CBufFlat::NewL(50);
 	CleanupStack::PushL(buf);
@@ -628,7 +635,7 @@
 	CleanupClosePushL(writeStream);
 
 	// write the directory to the stream
-	aPath->ExternalizeL(writeStream);
+	tempPath->ExternalizeL(writeStream);
 	CleanupStack::PopAndDestroy(&writeStream);
 
 	// create read stream
@@ -639,26 +646,27 @@
 	CVirtualPath *bPath= CVirtualPath::NewL(readStream);
 	CleanupStack::PopAndDestroy(&readStream);
 	
+	CleanupStack::PushL(bPath);  
 	
-	if(aPath->UniqueId() != bPath->UniqueId())
+	if(tempPath->UniqueId() != bPath->UniqueId())
 			{
 			SetTestStepResult(EFail);
 			}
 			
-	if(aPath->URI() != bPath->URI())
+	if(tempPath->URI() != bPath->URI())
 			{
 			SetTestStepResult(EFail);
 			}			
 
 	// Test that if a uniqueID of length greater than ContentAccess::KMaxCafUniqueId
 	// is given then it will not treat it as a valid uniqueID
-	HBufC* longUID = HBufC::NewLC(aPath->UniqueId().Length() * 100+aPath->URI().Length()+1);
-	longUID->Des().Append(aPath->URI());
+	HBufC* longUID = HBufC::NewLC(tempPath->UniqueId().Length() * 100+tempPath->URI().Length()+1);
+	longUID->Des().Append(tempPath->URI());
 	longUID->Des().Append(KCafVirtualPathSeparator);
 	// create a very long concatenated URI and UniqueID
 	for ( i = 0; i < 100; ++i )
 		{
-		longUID->Des().Append(aPath->UniqueId());
+		longUID->Des().Append(tempPath->UniqueId());
 		}
 	// create a TVirtualPathPtr with the concatenated URI and UniqueID
 	TVirtualPathPtr longPath(longUID->Des());
@@ -672,10 +680,7 @@
 		SetTestStepResult(EFail);
 		}
 		
-	CleanupStack::PopAndDestroy(longUID);
-	CleanupStack::PopAndDestroy(buf);
-	delete aPath;
-	delete bPath;
+	CleanupStack::PopAndDestroy(4);	// Relinquishes longUID, bPath, buf, tempPath.
 	
 	
 	__UHEAP_MARKEND;
@@ -707,8 +712,9 @@
 
 	__UHEAP_MARK;
 	
-	CRightsInfo *aRights= CRightsInfo::NewL(KTestDescription(), KTestUniqueId(), ERightsTypeConsumable, ERightsStatusNone);
-	
+	CRightsInfo *tempRights= CRightsInfo::NewL(KTestDescription(), KTestUniqueId(), ERightsTypeConsumable, ERightsStatusNone);
+
+	CleanupStack::PushL(tempRights);	
 	
 	// Create a buffer
 	CBufFlat* buf = CBufFlat::NewL(50);
@@ -719,7 +725,7 @@
 	CleanupClosePushL(writeStream);
 
 	// write the directory to the stream
-	aRights->ExternalizeL(writeStream);
+	tempRights->ExternalizeL(writeStream);
 	CleanupStack::PopAndDestroy(&writeStream);
 
 	// create read stream
@@ -731,28 +737,30 @@
 	CleanupStack::PopAndDestroy(&readStream);
 	
 	
-	if(aRights->UniqueId() != bRights->UniqueId())
+	if(tempRights->UniqueId() != bRights->UniqueId())
 			{
 			SetTestStepResult(EFail);
 			}
 			
-	if(aRights->Description() != bRights->Description())
+	if(tempRights->Description() != bRights->Description())
 			{
 			SetTestStepResult(EFail);
 			}			
 
-	if(aRights->RightsType() != bRights->RightsType())
+	if(tempRights->RightsType() != bRights->RightsType())
 			{
 			SetTestStepResult(EFail);
 			}			
 
-	if(aRights->RightsStatus() != bRights->RightsStatus())
+	if(tempRights->RightsStatus() != bRights->RightsStatus())
 			{
 			SetTestStepResult(EFail);
 			}			
 	
 	CleanupStack::PopAndDestroy(buf);
-	delete aRights;
+
+	CleanupStack::PopAndDestroy(tempRights); 
+
 	delete bRights;
 	
 	__UHEAP_MARKEND;
@@ -785,15 +793,23 @@
 	__UHEAP_MARK;
 	
 	RStreamablePtrArray <CEmbeddedObject> array;
-	
-	CEmbeddedObject *aObject = CEmbeddedObject::NewL(KTestUniqueId(), KTestName(), KTestMimeType(), EContentObject);
-	CEmbeddedObject *bObject = CEmbeddedObject::NewL(KTestUniqueId(), KTestName(), KTestMimeType(), EContentObject);
-	CEmbeddedObject *cObject = CEmbeddedObject::NewL(KTestUniqueId(), KTestName(), KTestMimeType(), EContentObject);
+
+	CleanupClosePushL(array); // This itself is a resource. So need to be pushed in advance.
 	
-	array.AppendL(aObject);
-	array.AppendL(bObject);
-	array.AppendL(cObject);
-	
+	CEmbeddedObject *e1Object = CEmbeddedObject::NewL(KTestUniqueId(), KTestName(), KTestMimeType(), EContentObject);
+	CleanupStack::PushL(e1Object);
+	array.AppendL(e1Object);
+	CleanupStack::Pop(e1Object); // Immediately pop off, since the ownership has been transferred to "array".
+
+	CEmbeddedObject *e2Object = CEmbeddedObject::NewL(KTestUniqueId(), KTestName(), KTestMimeType(), EContentObject);
+	CleanupStack::PushL(e2Object);
+	array.AppendL(e2Object);
+	CleanupStack::Pop(e2Object); // Immediately pop off, since the ownership has been transferred to "array".
+
+	CEmbeddedObject *e3Object = CEmbeddedObject::NewL(KTestUniqueId(), KTestName(), KTestMimeType(), EContentObject);
+	CleanupStack::PushL(e3Object);
+	array.AppendL(e3Object);
+	CleanupStack::Pop(e3Object); // Immediately pop off, since the ownership has been transferred to "array".
 
 	// Create a buffer
 	CBufFlat* buf = CBufFlat::NewL(50);
@@ -807,12 +823,14 @@
 	array.ExternalizeL(writeStream);
 	CleanupStack::PopAndDestroy(&writeStream);
 
+	// Construct a new CSupplierOutputFile from the read stream
+	// being constructed in the next step.
+	RStreamablePtrArray <CEmbeddedObject> bArray;
+	CleanupClosePushL(bArray);
+
 	// create read stream
 	RBufReadStream readStream(*buf);
 	CleanupClosePushL(readStream);
-
-	// construct a new CSupplierOutputFile from the stream
-	RStreamablePtrArray <CEmbeddedObject> bArray;
 	bArray.InternalizeL(readStream);
 	CleanupStack::PopAndDestroy(&readStream);
 	
@@ -833,16 +851,17 @@
 			SetTestStepResult(EFail);
 			}			
 		}
-	
+
+	CleanupStack::PopAndDestroy(&bArray);
 	CleanupStack::PopAndDestroy(buf);
-	array.Close();
-	bArray.Close();
-	
+	CleanupStack::PopAndDestroy(&array); // Relinquishes array consisting of 
+										// e1Object, e2Object and e3Object.
 	__UHEAP_MARKEND;
 
 	return TestStepResult();
 	}
 
+
 #ifdef SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT
 
 CCafHelperStep::~CCafHelperStep()