Revision: 201024 RCL_3
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 15 Jul 2010 18:57:30 +0300
branchRCL_3
changeset 24 99ea7534c5ab
parent 22 ad2863178d17
child 25 50c53e893c3f
Revision: 201024 Kit: 2010127
commondrm/drmrightsmanagerui/src/DRMRightsMgrAppUi.cpp
commondrm/drmrightsmanagerui/src/DRMRightsMgrDetailsView.cpp
commondrm/drmutility/src/DrmUiHandlingImpl.cpp
drm_plat/drm_common_api/tsrc/data/mmc/DRM/content.dcf
drm_plat/drm_rights_api/tsrc/data/c/content.dcf
drm_pub/oma_drm_caf_agent_api/tsrc/bc/DRM_CAF/data/content.dcf
omadrm/drmplugins/drmromtm/group/RoMtmUi.mmp
omadrm/drmplugins/drmromtm/ui/inc/RoMtmUi.h
omadrm/drmplugins/drmromtm/ui/inc/drmmsgwatcherobserver.h
omadrm/drmplugins/drmromtm/ui/src/RoMtmUi.cpp
omadrm/drmplugins/drmromtm/ui/src/drmmsgwatcherobserver.cpp
--- a/commondrm/drmrightsmanagerui/src/DRMRightsMgrAppUi.cpp	Mon Jun 21 15:58:55 2010 +0300
+++ b/commondrm/drmrightsmanagerui/src/DRMRightsMgrAppUi.cpp	Thu Jul 15 18:57:30 2010 +0300
@@ -33,6 +33,8 @@
 #include <barsread.h>  // for resource reader
 #include <centralrepository.h>
 #include <coeutils.h>
+#include <eikserverapp.h>
+
 
 #include <starterclient.h>
 
@@ -241,7 +243,8 @@
 //
 void CDRMRightsMgrAppUi::HandleCommandL( TInt aCommand )
     {
-
+    CEikAppServer* server = iEikonEnv->AppServer();
+ 
     switch ( aCommand )
         {
         case EEikCmdExit:
@@ -250,6 +253,17 @@
             Exit();
             break;
             }
+        case EAknSoftkeyClose:
+            {
+
+            if (server)
+                {
+                server->NotifyServerExit(EAknSoftkeyClose);
+                }
+                
+            Exit();
+            break;
+            }    
         default:
             break;
         }
--- a/commondrm/drmrightsmanagerui/src/DRMRightsMgrDetailsView.cpp	Mon Jun 21 15:58:55 2010 +0300
+++ b/commondrm/drmrightsmanagerui/src/DRMRightsMgrDetailsView.cpp	Thu Jul 15 18:57:30 2010 +0300
@@ -184,7 +184,7 @@
 
     if ( aCommand == EAknSoftkeyOk )
         {
-            appUi.HandleCommandL( EEikCmdExit ); // Ok softkey was pressed
+            appUi.HandleCommandL( EAknSoftkeyClose ); // Ok softkey was pressed
         }
     else
         {
--- a/commondrm/drmutility/src/DrmUiHandlingImpl.cpp	Mon Jun 21 15:58:55 2010 +0300
+++ b/commondrm/drmutility/src/DrmUiHandlingImpl.cpp	Thu Jul 15 18:57:30 2010 +0300
@@ -50,6 +50,10 @@
 #include <AiwGenericParam.h>
 #include <apgcli.h>
 
+// DCF repository
+#include <DcfRep.h>
+#include <DcfEntry.h>
+
 // character conversions
 #include <utf.h>
 
@@ -180,6 +184,70 @@
     return iapIdOfDest;
     }
 
+// ---------------------------------------------------------
+// UpdateDCFRepositoryL()
+// Update saved file to DCFRepository
+// ---------------------------------------------------------
+
+LOCAL_C void UpdateDCFRepositoryL( TDesC& aFullFileName )
+    {
+    CDcfEntry* dcfEntry( NULL );
+    CDcfRep* dcfRep( NULL );
+    
+    dcfEntry = CDcfEntry::NewL();
+    CleanupStack::PushL( dcfEntry );
+
+    dcfRep = CDcfRep::NewL();
+    CleanupStack::PushL( dcfRep );
+
+    dcfEntry->SetLocationL( aFullFileName, 0 );
+    dcfRep->UpdateL( dcfEntry );
+    CleanupStack::PopAndDestroy( dcfRep );
+    CleanupStack::PopAndDestroy( dcfEntry );
+    }
+
+// ---------------------------------------------------------
+// FindFullFileNameAndUpdateDCFRepositoryL()
+// Find full file name for the content and update saved 
+// file to DCFRepository
+// ---------------------------------------------------------
+
+LOCAL_C void FindFullFileNameAndUpdateDCFRepositoryL(
+    const RFile& aFileHandle )
+    {
+    HBufC* fullPath( NULL );
+    TPtr fullPathPtr( NULL, 0 );
+        
+    fullPath = HBufC::NewLC( KUrlMaxLen );
+    fullPathPtr.Set( fullPath->Des() );
+    
+    aFileHandle.FullName( fullPathPtr );
+    UpdateDCFRepositoryL( fullPathPtr );
+    CleanupStack::PopAndDestroy( fullPath );
+    }
+
+// ---------------------------------------------------------
+// FindFullFileNameAndUpdateDCFRepositoryL()
+// Find full file name for the content and update saved 
+// file to DCFRepository
+// ---------------------------------------------------------
+
+LOCAL_C void FindFullFileNameAndUpdateDCFRepositoryL(
+    const ContentAccess::CData& aFileData  )
+    {
+    HBufC* fullPath( NULL );
+    TPtr fullPathPtr( NULL, 0 );
+    
+    fullPath = HBufC::NewLC( KUrlMaxLen );
+    fullPathPtr.Set( fullPath->Des() );
+                
+    aFileData.GetStringAttribute( DRM::EDrmFullName, 
+        fullPathPtr );
+    
+    UpdateDCFRepositoryL( fullPathPtr );
+    CleanupStack::PopAndDestroy( fullPath );    
+    }
+
 // ============================ MEMBER FUNCTIONS ===============================
 
 // -----------------------------------------------------------------------------
@@ -1420,6 +1488,9 @@
     if ( ( !agent.Compare( DRM::KDrmOmaAgentName ) ) || ( iOmaBasedAgentName
         && !agent.Compare( *iOmaBasedAgentName ) ) )
         {
+        // To embed Domain RO in superdistribution case, register the content
+        TRAP_IGNORE( FindFullFileNameAndUpdateDCFRepositoryL( *aData.iFile ) );
+        
         HandleOmaErrorL( *content, aData.iIntent, aData.iError,
             aData.iErrorObserver, aData.iOperationId );
         }
@@ -1441,6 +1512,7 @@
 void DRM::CDrmUiHandlingImpl::PerformHandleErrorDataL(
     DRM::CDrmUiHandlingData& aData )
     {
+    
     DRM::TDrmAgentUid agentUid( DRM::EDrmOmaAgent );
     IsProtectedL( aData.iFileData, agentUid );
     IsProperErrorL( aData.iError );
@@ -1449,7 +1521,11 @@
     switch ( agentUid )
         {
         case DRM::EDrmOmaAgent:
-
+            
+            // To embed Domain RO in superdistribution case, register the content
+            TRAP_IGNORE( FindFullFileNameAndUpdateDCFRepositoryL( 
+                *aData.iFileData ) );
+            
             HandleOmaErrorL( *aData.iFileData, aData.iIntent, aData.iError,
                 aData.iErrorObserver, aData.iOperationId );
 
@@ -1557,7 +1633,10 @@
     HBufC* riUrl( NULL );
     HBufC* domainRiUrl( NULL );
     DRM::TDrmUiUrlType urlType( DRM::EUHRightsIssuerUrl );
-
+            
+    // To embed Domain RO in superdistribution case, register the content
+    TRAP_IGNORE( FindFullFileNameAndUpdateDCFRepositoryL( aContent ) );
+    
     User::LeaveIfError( GetContentIdLC( aContent, contentId ) );
     GetOmaSilentRightsUrlLC( aContent, silentUrl );
     GetOmaRightsIssuerLC( aContent, riUrl );
@@ -1714,7 +1793,7 @@
     TInt previewType( ContentAccess::ENoPreview );
     TUint32 reason( 0 );
     TBool handled( EFalse );
-
+    
     User::LeaveIfError( GetContentIdLC( aContent, contentId ) );
 
     // Check that this really is an error situation
--- a/omadrm/drmplugins/drmromtm/group/RoMtmUi.mmp	Mon Jun 21 15:58:55 2010 +0300
+++ b/omadrm/drmplugins/drmromtm/group/RoMtmUi.mmp	Thu Jul 15 18:57:30 2010 +0300
@@ -28,6 +28,7 @@
 
 SOURCEPATH      ../ui/src
 SOURCE          RoMtmUi.cpp
+SOURCE          drmmsgwatcherobserver.cpp
 
 USERINCLUDE     ../inc
 USERINCLUDE     ../ui/inc
--- a/omadrm/drmplugins/drmromtm/ui/inc/RoMtmUi.h	Mon Jun 21 15:58:55 2010 +0300
+++ b/omadrm/drmplugins/drmromtm/ui/inc/RoMtmUi.h	Thu Jul 15 18:57:30 2010 +0300
@@ -207,12 +207,12 @@
         CMsvOperation* CompletedOperationL( TRequestStatus& aObserverStatus );
         TBool ShowQueryL( TDesC16& aFile );
         TInt CheckTriggerTypeL( TDesC16& aFile );
+
     private:
         TMessageType iType;
-        CDocumentHandler* iDocHandler;
         RFs iFs;
         CEikProcess* iHostProcess;
-    CAknLaunchAppService* iOpenService;
+    
     };
 
 #endif      // RIGHTSOBJECTMTMUI_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadrm/drmplugins/drmromtm/ui/inc/drmmsgwatcherobserver.h	Thu Jul 15 18:57:30 2010 +0300
@@ -0,0 +1,129 @@
+/*
+* 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:  
+*     Msv operation for drm view closing
+*
+*/
+
+
+#ifndef C_DRMMSGWATCHEROBSERVER_H
+#define C_DRMMSGWATCHEROBSERVER_H
+
+
+
+#include <msvapi.h>        // CMsvOperation
+#include <AknServerApp.h>  // MAknServerAppExitObserver
+#include <AknLaunchAppService.h> // app service
+#include <DocumentHandler.h> // Document handler
+
+class CDocumentHandler;
+
+// CLASS DECLARATION
+
+/**
+* CDrmMsgWatcherObserver
+* Simple operation class which watches a service (drm),
+* completing when that thread closes.
+*
+* The passed CMsvSession is not used (merely required to base-construct
+* a CMsvOperation).
+*/
+NONSHARABLE_CLASS( CDrmMsgWatcherObserver ) : public CMsvOperation, public MAknServerAppExitObserver			
+    { 
+    public:
+
+	    static CDrmMsgWatcherObserver* NewL( 
+            CMsvSession& aMsvSession,
+            TInt aPriority,
+            TRequestStatus& aObserverRequestStatus,
+            TUid aMtm,
+            CAiwGenericParamList* aParamList );
+
+
+	    static CDrmMsgWatcherObserver* NewL( 
+            CMsvSession& aMsvSession,
+            TInt aPriority,
+            TRequestStatus& aObserverRequestStatus,
+            TUid aMtm,
+            const TDesC& aFileName,
+            TDataType& aDataType );
+	    
+        /**
+        * C++ constructor
+        */
+        CDrmMsgWatcherObserver(
+            CMsvSession& aMsvSession,
+            TInt aPriority,
+            TRequestStatus& aObserverRequestStatus,
+            TUid aMtm );
+
+        /**
+        * Destructor.
+        */
+        ~CDrmMsgWatcherObserver();
+
+    private: // From MApaServerAppExitObserver
+        void HandleServerAppExit( TInt aReason );
+		
+    protected:
+        
+        
+        /**
+        * From CMsvOperation
+        */
+        virtual const TDesC8& ProgressL();
+
+        /**
+        * From CMsvOperation
+        */
+        virtual const TDesC8& FinalProgress();
+                
+        /**
+        * From CActive
+        */
+        virtual void RunL();
+
+        /**
+        * From CActive
+        */
+        virtual void DoCancel();
+
+        /**
+        *
+        */
+        void Start();
+
+    private:
+        void ConstructL( CAiwGenericParamList* aParamList );
+        void ConstructL( const TDesC& aFileName, TDataType& aDataType );
+        
+        /**
+        * Completes observer with the completion code
+        * @param aCode: Completion code
+        */
+        void CompleteObserver( TInt aCode );
+
+
+    protected:// Data
+        HBufC8*     iProgress;
+
+    private:
+        CAknLaunchAppService* iService;
+        CDocumentHandler* iDocHandler;
+
+    };
+    
+#endif // C_DRMMSGWATCHEROBSERVER_H   
+
+// End of file
--- a/omadrm/drmplugins/drmromtm/ui/src/RoMtmUi.cpp	Mon Jun 21 15:58:55 2010 +0300
+++ b/omadrm/drmplugins/drmromtm/ui/src/RoMtmUi.cpp	Thu Jul 15 18:57:30 2010 +0300
@@ -50,6 +50,8 @@
 #include <StringLoader.h> //StringLoader
 #include <ConeResLoader.h> //rconeresloader
 #include <RoMtmUi.rsg> // test
+#include "drmmsgwatcherobserver.h"
+
 // EXTERNAL DATA STRUCTURES
 // EXTERNAL FUNCTION PROTOTYPES
 // CONSTANTS
@@ -230,8 +232,6 @@
 CRightsObjectMtmUi::CRightsObjectMtmUi( CBaseMtm& aBaseMtm , CRegisteredMtmDll& aRegisteredMtmDll )
     :   CBaseMtmUi( aBaseMtm , aRegisteredMtmDll )
     {
-    iOpenService = NULL;
-    iDocHandler = NULL;
     iHostProcess = NULL;
     iType = ERo;
     }
@@ -272,9 +272,6 @@
     TRAP(err,WriteL(_L8("~CRightsObjectMtmUi")));
 #endif
     iFs.Close();
-
-  delete iOpenService;
-    delete iDocHandler;
     }
 
 
@@ -568,15 +565,11 @@
     BaseMtm().LoadMessageL();
     CRichText& body = BaseMtm().Body();
     TPtrC ptr16( body.Read(0) );
-    const TUid KUidDRMUI = { 0x101f85c7 };
+    //const TUid KUidDRMUI = { 0x101f85c7 };
+    CDrmMsgWatcherObserver* operation = NULL;
 
     if ( iType == ERoapTrigger || iType == ERoapTriggerRoAcquisition )
         {
-
-#ifdef _DRM_TESTING
-        WriteL(_L8("LaunchEditorApplicationL-iDocHandler"));
-#endif
-
         _LIT8( KRoapTriggerMimeType, "application/vnd.oma.drm.roap-trigger+xml" );
         TDataType type = TDataType( KRoapTriggerMimeType );
         HBufC* filename = NULL;
@@ -593,60 +586,33 @@
             return CompletedOperationL( aStatus );
             }
 
-#ifdef _DRM_TESTING
-        WriteL(ptr,ptr.Length());
-#endif
-        if (iDocHandler)
-            {
-            delete iDocHandler;
-            iDocHandler = NULL;
-            }
-#ifdef _DRM_TESTING
-        WriteL(_L8("LaunchEditorApplicationL-iDocHandler-NewL"));
-#endif
-        iDocHandler = CDocumentHandler::NewL();
-#ifdef _DRM_TESTING
-        WriteL(_L8("LaunchEditorApplicationL-iDocHandler-SetExitObserver"));
-#endif
-        iDocHandler->SetExitObserver(this);
-#ifdef _DRM_TESTING
-        WriteL(_L8("LaunchEditorApplicationL-iDocHandler-OpenFileEmbeddedL"));
-#endif
-        iDocHandler->OpenFileEmbeddedL(ptr,type);
-        CleanupStack::PopAndDestroy(filename);
-#ifdef _DRM_TESTING
-        WriteL(_L8("LaunchEditorApplicationL-iDocHandler-End"));
-#endif
+	operation = CDrmMsgWatcherObserver::NewL( 
+            Session(),
+            CActive::EPriorityStandard,
+            aStatus,
+            Type(),
+            ptr,
+            type );
         }
     else
         {
-        if ( iOpenService )
-            {
-            delete iOpenService;
-            iOpenService = NULL;
-            }
-#ifdef _DRM_TESTING
-        WriteL(_L8("LaunchEditorApplicationL-CAknOpenFileService::NewL"));
-#endif
 
         CAiwGenericParamList* paramList = CAiwGenericParamList::NewLC();
         TAiwVariant variantObject( ptr16 );
         TAiwGenericParam param( EGenericParamFile, variantObject );
         paramList->AppendL( param );
 
-        TRAPD( err, iOpenService = CAknLaunchAppService::NewL( KUidDRMUI, this, paramList ) );
-        if (err != KErrNone)
-            {
-            // just return to Inbox
-            }
+	operation = CDrmMsgWatcherObserver::NewL( 
+            Session(),
+            CActive::EPriorityStandard,
+            aStatus,
+            Type(),
+            paramList );
 
         CleanupStack::PopAndDestroy( paramList ); // paramList
         }
 
-#ifdef _DRM_TESTING
-    WriteL(_L8("LaunchEditorApplicationL-End"));
-#endif
-    return CompletedOperationL( aStatus );
+    return operation;
     }
 
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadrm/drmplugins/drmromtm/ui/src/drmmsgwatcherobserver.cpp	Thu Jul 15 18:57:30 2010 +0300
@@ -0,0 +1,244 @@
+/*
+* 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:  
+*     Msv operation for drm viewing
+*
+*/
+
+
+
+#include "drmmsgwatcherobserver.h"
+
+
+// CONSTANTS
+const TInt KiProgressBufferSize = 1;
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// ---------------------------------------------------------
+// CDrmMsgWatcherObserver::NewL
+// ---------------------------------------------------------
+//
+CDrmMsgWatcherObserver* CDrmMsgWatcherObserver::NewL( 
+	CMsvSession& aMsvSession,
+    TInt aPriority,
+    TRequestStatus& aObserverRequestStatus,
+    TUid aMtm,
+    CAiwGenericParamList* aParamList)
+	{
+	CDrmMsgWatcherObserver* self = 
+		new(ELeave) CDrmMsgWatcherObserver( 
+			aMsvSession,
+			aPriority,
+			aObserverRequestStatus,
+			aMtm);
+	CleanupStack::PushL(self);
+    self->ConstructL( aParamList );
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// ---------------------------------------------------------
+// CDrmMsgWatcherObserver::NewL
+// ---------------------------------------------------------
+//
+CDrmMsgWatcherObserver* CDrmMsgWatcherObserver::NewL( 
+	CMsvSession& aMsvSession,
+    TInt aPriority,
+    TRequestStatus& aObserverRequestStatus,
+    TUid aMtm,
+    const TDesC& aFileName,
+    TDataType& aDataType )
+	{
+	CDrmMsgWatcherObserver* self = 
+		new(ELeave) CDrmMsgWatcherObserver( 
+			aMsvSession,
+			aPriority,
+			aObserverRequestStatus,
+			aMtm);
+	CleanupStack::PushL(self);
+    self->ConstructL( aFileName, aDataType );
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+
+// ---------------------------------------------------------
+// CDrmMsgWatcherObserver::ConstructL
+// ---------------------------------------------------------
+//
+void CDrmMsgWatcherObserver::ConstructL( CAiwGenericParamList* aParamList )
+    {
+    const TUid KUidDRMUI = { 0x101f85c7 };        
+    iService = CAknLaunchAppService::NewL( KUidDRMUI, this, aParamList );        
+    iObserverRequestStatus = KRequestPending;
+    Start();
+    }
+
+// ---------------------------------------------------------
+// CDrmMsgWatcherObserver::ConstructL
+// ---------------------------------------------------------
+//
+void CDrmMsgWatcherObserver::ConstructL( const TDesC& aFileName, TDataType& aDataType )
+    {
+    iDocHandler = CDocumentHandler::NewL();
+
+    iDocHandler->SetExitObserver(this);
+
+    iDocHandler->OpenFileEmbeddedL(aFileName, aDataType);
+     
+    iObserverRequestStatus = KRequestPending;
+    Start();
+    }
+
+// ---------------------------------------------------------
+// CDrmMsgWatcherObserver::CDrmMsgWatcherObserver
+// ---------------------------------------------------------
+//
+CDrmMsgWatcherObserver::CDrmMsgWatcherObserver
+	(
+    CMsvSession& aMsvSession, 
+    TInt aPriority, 
+    TRequestStatus& aObserverRequestStatus, 
+    TUid aMtm
+    )
+    :   
+    CMsvOperation(
+    aMsvSession, 
+    aPriority, 
+    aObserverRequestStatus )
+    {
+    iMtm = aMtm;        
+    }
+
+// ---------------------------------------------------------
+// CDrmMsgWatcherObserver::~CDrmMsgWatcherObserver
+// ---------------------------------------------------------
+//
+CDrmMsgWatcherObserver::~CDrmMsgWatcherObserver()
+    {
+    Cancel();
+    if( iService )
+        {
+        delete iService;
+        iService = NULL;
+        } 
+    if( iDocHandler )
+        {
+        delete iDocHandler;
+        iDocHandler = NULL;
+        }         
+    delete iProgress;    
+    }
+
+// -----------------------------------------------------------------------------
+// CDrmMsgWatcherObserver::DoCancel
+// From CActive
+// -----------------------------------------------------------------------------
+//
+void CDrmMsgWatcherObserver::DoCancel()
+    {
+    if ( iStatus == KRequestPending )
+        {
+        TRequestStatus* pstat = &iStatus;
+        User::RequestComplete( pstat, KErrCancel );
+        }
+    CompleteObserver( KErrCancel );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMsgEditorServerWatchingOperation::ProgressL
+// From CMsvOperation
+// -----------------------------------------------------------------------------
+//
+const TDesC8& CDrmMsgWatcherObserver::ProgressL()
+    {
+    if ( !iProgress )
+        {
+        iProgress = HBufC8::NewL( KiProgressBufferSize );
+        }
+    return *iProgress;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMsgEditorServerWatchingOperation::FinalProgress
+// From CMsvOperation
+// -----------------------------------------------------------------------------
+//
+const TDesC8& CDrmMsgWatcherObserver::FinalProgress()
+    {
+    return *iProgress;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CDrmMsgWatcherObserver::RunL
+// From CActive
+// -----------------------------------------------------------------------------
+//
+void CDrmMsgWatcherObserver::RunL()
+    {
+    CompleteObserver( iStatus.Int( ) );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CDrmMsgWatcherObserver::Start
+//
+// -----------------------------------------------------------------------------
+//
+void CDrmMsgWatcherObserver::Start()
+    {
+    CActiveScheduler::Add( this );
+    iStatus = KRequestPending;
+    SetActive();
+    }
+
+
+// -----------------------------------------------------------------------------
+// CDrmMsgWatcherObserver::CompleteObserver
+// Completes observer with the completion code
+// -----------------------------------------------------------------------------
+//
+void CDrmMsgWatcherObserver::CompleteObserver( TInt aCode )
+    {
+    TRequestStatus* status = &iObserverRequestStatus;
+    
+    if( ( *status ) == KRequestPending )
+        {
+        User::RequestComplete( status, aCode );
+        }
+    }
+
+
+
+// ---------------------------------------------------------
+// CDrmMsgWatcherObserver::HandleServerAppExit
+// ---------------------------------------------------------
+//
+void CDrmMsgWatcherObserver::HandleServerAppExit( TInt aReason )
+	{
+    TInt exitMode = aReason;
+    if ( iStatus == KRequestPending )
+    	{
+    	TRequestStatus* pstat = &iStatus;
+    	User::RequestComplete( pstat, exitMode );
+    	}
+	MAknServerAppExitObserver::HandleServerAppExit( aReason );	
+	}
+
+// End of file