appfw/apparchitecture/tef/t_sisfileinstaller.cpp
branchRCL_3
changeset 62 924385140d98
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appfw/apparchitecture/tef/t_sisfileinstaller.cpp	Tue Aug 31 15:24:25 2010 +0300
@@ -0,0 +1,199 @@
+// Copyright (c) 2010 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:
+// The following test case is used to test if apparctestserver 
+// can return app data for a specific app by caching that data when requested.
+// 
+//
+
+/**
+ @file
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <apgcli.h>
+#include "T_SisFileInstaller.h"
+#include <usif/scr/screntries.h>
+#include <usif/usiferror.h>
+
+using namespace Usif;
+
+CSisFileInstaller::CSisFileInstaller()
+    {   
+    }
+
+CSisFileInstaller::~CSisFileInstaller()
+    {
+    iSif.Close();
+    }
+
+TInt CSisFileInstaller::InstallSisAndWaitForAppListUpdateL(const TDesC& aFileName)
+{
+ RApaLsSession ls;
+ User::LeaveIfError(ls.Connect());
+ CleanupClosePushL(ls);
+ TRequestStatus status;
+ ls.SetNotify(EFalse, status);
+ InstallSisL(aFileName);
+ User::WaitForRequest(status);
+ CleanupStack::PopAndDestroy();
+ return KErrNone;
+}
+
+TInt CSisFileInstaller::UninstallSisAndWaitForAppListUpdateL(const TDesC& aComponentName)
+{
+ RApaLsSession ls;
+ User::LeaveIfError(ls.Connect());
+ CleanupClosePushL(ls);
+ TRequestStatus status;
+ ls.SetNotify(EFalse, status);
+ UninstallSisL(aComponentName);
+ User::WaitForRequest(status);
+ CleanupStack::PopAndDestroy();
+ return KErrNone;
+}
+
+TInt CSisFileInstaller::InstallSisL(const TDesC& aFileName)
+    {
+    TBuf<256> buf;
+    buf.Copy(aFileName);
+    HBufC* as = buf.AllocL();        
+    TPtr16 sisFileName = as->Des();
+    CleanupStack::PushL(as);
+    
+    RFs fs;
+    RFile file;
+    User::LeaveIfError(fs.Connect());
+    fs.ShareProtected();
+    CleanupClosePushL(fs);
+    User::LeaveIfError(file.Open(fs, sisFileName, EFileRead | EFileShareReadersOnly));
+    CleanupClosePushL(file);
+    User::LeaveIfError(iSif.Connect()); 
+    CleanupClosePushL(iSif);  
+    TInt err=KErrNone;
+     do
+         {
+         iSif.Install(aFileName, iStatus, ETrue);
+         User::WaitForRequest(iStatus);
+         err=iStatus.Int();
+         }
+     while( err == KErrScrReadOperationInProgress);
+     
+    User::LeaveIfError(err);
+     
+    CleanupStack::PopAndDestroy(4, as);
+    return KErrNone;
+    }
+
+
+TInt CSisFileInstaller::UninstallSisL(const TDesC& aComponentName)
+    {    
+    _LIT(KSisComponentVendor, "Nokia India Pvt Ltd");   
+    
+    RFs fs;
+    RFile file;
+    User::LeaveIfError(fs.Connect());
+    fs.ShareProtected();
+    CleanupClosePushL(fs);     
+
+    User::LeaveIfError(iSif.Connect());
+    CleanupClosePushL(iSif);
+    
+    TBuf<256> buf;
+    buf.Copy(aComponentName);
+    HBufC* as1 = buf.AllocL();        
+    TPtr16 componentName = as1->Des();
+    HBufC* as2 = KSisComponentVendor().AllocL();
+    TPtr16 componentVendor = as2->Des();
+    iComponentId = FindComponentInScrL(componentName, componentVendor); 
+
+    TInt err=KErrNone;
+     do
+         {
+         iSif.Uninstall(iComponentId, iStatus, ETrue);
+         User::WaitForRequest(iStatus);
+         err=iStatus.Int();
+         }
+     while( err == KErrScrReadOperationInProgress);
+     
+    //Leave if sis file uninstllation failed.
+    User::LeaveIfError(err);
+    
+    delete as1;
+    delete as2;
+    as1 = NULL;
+    as2 = NULL;  
+    CleanupStack::PopAndDestroy(2, &fs); 
+    return KErrNone;
+    }
+
+
+void CSisFileInstaller::CancelInstallation()
+    {
+    iSif.CancelOperation();
+    }
+
+void CSisFileInstaller::Close()
+    {
+    iSif.Close();
+    }
+
+TInt CSisFileInstaller::InstallSisAsynchronouslyL(const TDesC& aFileName, TRequestStatus& status)
+{
+    TBuf<256> buf;
+    buf.Copy(aFileName);
+    HBufC* as = buf.AllocL();        
+    TPtr16 sisFileName = as->Des();
+    CleanupStack::PushL(as);
+    
+    RFs fs;
+    RFile file;
+    User::LeaveIfError(fs.Connect());
+    fs.ShareProtected();
+    CleanupClosePushL(fs);
+    User::LeaveIfError(file.Open(fs, sisFileName, EFileRead | EFileShareReadersOnly));
+    CleanupClosePushL(file);
+    CleanupStack::PopAndDestroy(3, as);
+    
+    User::LeaveIfError(iSif.Connect()); 
+    
+    iSif.Install(aFileName, status, ETrue);
+    return KErrNone;
+}
+
+TInt CSisFileInstaller::FindComponentInScrL(const TDesC& aComponentName, const TDesC& aVendor)
+    {
+    RSoftwareComponentRegistry scr;
+    User::LeaveIfError(scr.Connect());
+    CleanupClosePushL(scr);
+
+    RSoftwareComponentRegistryView scrView;
+    CComponentFilter* filter = CComponentFilter::NewLC();
+    filter->SetNameL(aComponentName);
+    filter->SetVendorL(aVendor);
+
+    scrView.OpenViewL(scr, filter);
+    CleanupClosePushL(scrView);
+
+    CComponentEntry* component = scrView.NextComponentL();
+    TInt componentId = 0;
+    if (component != NULL)
+        {
+        componentId = component->ComponentId();
+        delete component;
+        }
+
+    CleanupStack::PopAndDestroy(3, &scr);    
+    return componentId; 
+    }
+