--- /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;
+ }
+