commondrm/drmutility/inc/DrmUiHandlingImpl.h
changeset 0 95b198f216e5
child 18 8a03a285ab14
child 19 7c1aa284cf3b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/commondrm/drmutility/inc/DrmUiHandlingImpl.h	Thu Dec 17 08:52:27 2009 +0200
@@ -0,0 +1,888 @@
+/*
+* Copyright (c) 2006-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:  Implementation class of DRM UI Handling
+*
+*/
+
+
+#ifndef C_CDRMUIHANDLINGIMPL_H
+#define C_CDRMUIHANDLINGIMPL_H
+
+//*** system include files go here:
+#include <e32base.h>
+#include <f32file.h>
+#include <aknserverapp.h>
+#include <caf/caftypes.h>
+#include <caf/caferr.h>
+#include <drmagents.h>
+#include <drmrightsclient.h>
+#include <drmutilitytypes.h>
+
+//*** forward declarations go here:
+class CCoeEnv;
+class CDRMConstraint;
+class CSchemeHandler;
+
+namespace ContentAccess
+    {
+    class CData;
+    }
+
+namespace DRM
+{
+
+    //*** forward declarations go here:
+    class CDrmUtility;
+    class CDrmUiHandlingData;
+    class CDrmUtilityCommon;
+    class CDrmUtilityUI;
+    class MDrmAsyncObserver;
+    class MDrmUiCheckRightsObserver;
+    class MDrmHandleErrorObserver;
+    class MDrmUtilityWMDrmWrapper;
+    class CDrmUtilityWMDrm;
+
+/**
+ *  Implementation class for CDrmUiHandling class
+ *
+ *  @lib drmuihandlingimpl.lib
+ *  @since S60 v5.0
+ */
+NONSHARABLE_CLASS( CDrmUiHandlingImpl ) : public CActive, public MAknServerAppExitObserver
+    {
+
+public:
+
+    /** Error codes that are handled by HandleError */
+    enum TDrmUiError
+        {
+        ENoPermission = KErrCANoPermission,
+        ENoRights = KErrCANoRights,
+        EPendingRights = KErrCAPendingRights
+        };
+
+public:
+
+    /**
+    * Two-phased constructor.
+    */
+    IMPORT_C static CDrmUiHandlingImpl* NewL( CDrmUtility* aDrmUtility, CCoeEnv* aCoeEnv = NULL );
+    IMPORT_C static CDrmUiHandlingImpl* NewLC( CDrmUtility* aDrmUtility, CCoeEnv* aCoeEnv = NULL );
+
+    /**
+     * Destructor.
+     */
+    virtual ~CDrmUiHandlingImpl();
+
+    /**
+     * Check how much rights there are left for the content.
+     * This method also displays appropriate notes, which observer can
+     * override, if rights are invalid. Asynchronous version, all errors
+     * are signalled using request status.
+     *
+     * @since S60 v5.0
+     * @param[in]   aFile       file of which rights are checked.
+     * @param[in]   aIntent     the CAF intent to be used for checking
+     * @param[in]   aObserver   reference to observer
+     *
+     * @return Operation Identifier for the async request
+     *         required for cancelling an operation and
+     *         identifying which request has been completed
+     *
+     * @leave System wide error code
+     *        KErrArgument  if file is not DRM protected.
+     *
+     * @see MDrmUiCheckRightsObserver
+     */
+    IMPORT_C TInt CheckRightsAmountAsyncL(
+        RFile& aFile,
+        ContentAccess::TIntent aIntent,
+        MDrmUiCheckRightsObserver& aObserver );
+
+     /**
+     * Check how much rights there are left for the content.
+     * This method also displays appropriate notes, which observer can
+     * override, if rights are invalid. Synchronous version, leaves in case
+     * of error.
+     *
+     * @since S60 v5.0
+     * @param[in]   aFile       file of which rights are checked.
+     * @param[in]   aIntent     the CAF intent to be used for checking
+     * @param[in]   aObserver   pointer to observer, NULL if no observer
+     *
+     * @return none
+     * @leave System wide error code
+     *        KErrArgument  if file is not DRM protected.
+     *
+     * @see MDrmUiCheckRightsObserver
+     */
+    IMPORT_C void CheckRightsAmountL(
+        RFile& aFile,
+        ContentAccess::TIntent aIntent,
+        MDrmUiCheckRightsObserver* aObserver );
+
+    /**
+     * Check how much rights there are left for the content.
+     * This method also displays appropriate notes, which observer can
+     * override, if rights are invalid. Asynchronous version, all errors
+     * are signalled using request status.
+     *
+     * @since S60 v5.0
+     * @param[in]   aFile       content of which rights are checked.
+     * @param[in]   aIntent     the CAF intent to be used for checking
+     * @param[in]   aObserver   reference to observer
+     *
+     * @return Operation Identifier for the async request
+     *         required for cancelling an operation and
+     *         identifying which request has been completed
+     *
+     * @leave System wide error code
+     *        KErrArgument  if file is not DRM protected.
+     *
+     * @see MDrmUiCheckRightsObserver
+     */
+    IMPORT_C TInt CheckRightsAmountAsyncL(
+        ContentAccess::CData& aFile,
+        ContentAccess::TIntent aIntent,
+        MDrmUiCheckRightsObserver& aObserver );
+
+     /**
+     * Check how much rights there are left for the content.
+     * This method also displays appropriate notes, which observer can
+     * override, if rights are invalid. Synchronous version, leaves in case
+     * of error.
+     *
+     * @since S60 v5.0
+     * @param[in]   aFile       content of which rights are checked.
+     * @param[in]   aIntent     the CAF intent to be used for checking
+     * @param[in]   aObserver   pointer to observer, NULL if no observer
+     * @return none
+     * @leave System wide error code
+     *        KErrArgument  if file is not DRM protected.
+     *
+     * @see MDrmUiCheckRightsObserver
+     */
+    IMPORT_C void CheckRightsAmountL(
+        ContentAccess::CData& aFile,
+        ContentAccess::TIntent aIntent,
+        MDrmUiCheckRightsObserver* aObserver );
+
+    /**
+     * Displays information about rights for given content.
+     * Asynchronous version.
+     *
+     * @since S60 v5.0
+     * @param[in]   aFile           file for which rights details are
+     *                              displayed.
+     * @param[in]   aObserver       reference to observer
+     *
+     * @return Operation Identifier for the async request
+     *         required for cancelling an operation and
+     *         identifying which request has been completed
+     *
+     * @leave   System wide error code
+     */
+    IMPORT_C TInt ShowDetailsViewAsyncL(
+        RFile& aFile,
+        MDrmAsyncObserver& aObserver );
+
+    /**
+     * Displays information about rights for given content.
+     * Synchronous version, leaves in case of error.
+     *
+     * @since S60 v5.0
+     * @param[in]   aFile       file for which rights details are
+     *                          displayed.
+     *
+     * @leave   KErrArgument    File is not DRM protected.
+     * @leave   KErrCANoRights  Rights object does not exist.
+     *
+     * @see caferr.h
+     */
+    IMPORT_C void ShowDetailsViewL(
+        RFile& aFile );
+
+    /**
+     * Displays information about rights for given content.
+     * Asynchronous version.
+     *
+     * @since S60 v5.0
+     * @param[in]   aFile       content for which rights details are
+     *                          displayed.
+     * @param[in]   aObserver   reference to observer
+     *
+     * @return Operation Identifier for the async request
+     *         required for cancelling an operation and
+     *         identifying which request has been completed
+     *
+     * @leave System wide error code
+     */
+    IMPORT_C TInt ShowDetailsViewAsyncL(
+        ContentAccess::CData& aFile,
+        MDrmAsyncObserver& aObserver );
+
+     /**
+     * Displays information about rights for given content.
+     * Synchronous version, leaves in case of error.
+     *
+     * @since S60 v5.0
+     * @param[in]   aFile   content for which rights details are displayed.
+     *
+     * @leave   KErrArgument    Content is not DRM protected.
+     * @leave   KErrCANoRights  Rights object does not exist.
+     * @leave   System wide error code
+     *
+     * @see caferr.h
+     */
+    IMPORT_C void ShowDetailsViewL(
+        ContentAccess::CData& aFile );
+
+     /**
+     * Handle the specific url defined by the file, such as InfoUrl
+     * Asynchronous method
+     *
+     * @since S60 v5.0
+     * @param[in]   aFile           file whose url is being handled
+     * @param[in]   aType           type of the requested url,
+     *                              only a single url may be requested
+     *                              at a time
+     * @param[in]   aObserver       reference to observer
+     *
+     * @return Operation Identifier for the async request
+     *         required for cancelling an operation and
+     *         identifying which request has been completed
+     *
+     * @leave   KErrArgument        File is not DRM protected.
+     * @leave   KErrNotSupported    Url type is not supported for the file
+     */
+    IMPORT_C TInt HandleUrlAsyncL(
+        RFile& aFile,
+        TDrmUiUrlType aType,
+        MDrmAsyncObserver& aObserver );
+
+
+     /**
+     * Handle the specific url defined by the file, such as InfoUrl
+     *
+     * @since S60 v5.0
+     * @param[in]   aFile        file whose url is being handled
+     * @param[in]   aType        type of the requested url,
+     *                           only a single url may be requested
+     *                           at a time
+     *
+     * @leave   KErrArgument     File is not DRM protected.
+     * @leave   KErrNotSupported Url type is not supported for the file
+     */
+    IMPORT_C void HandleUrlL(
+        RFile& aFile,
+        TDrmUiUrlType aType );
+
+     /**
+     * Handle the specific url defined by the file, such as InfoUrl
+     * Asynchronous method
+     *
+     * @since S60 v5.0
+     * @param[in]   aFile           content whose url is being handled
+     * @param[in]   aType           type of the requested url,
+     *                              only a single url may be requested
+     *                              at a time
+     * @param[in]   aObserver       reference to observer
+     *
+     * @return Operation Identifier for the async request
+     *         required for cancelling an operation and
+     *         identifying which request has been completed
+     *
+     * @leave   KErrArgument        File is not DRM protected,
+     *                              or multiple url:s were requested
+     * @leave   KErrNotSupported    Url type is not supported for the file
+     */
+    IMPORT_C TInt HandleUrlAsyncL(
+        ContentAccess::CData& aFile,
+        TDrmUiUrlType aType,
+        MDrmAsyncObserver& aObserver );
+
+     /**
+     * Handle the specific url defined by the file, such as InfoUrl
+     *
+     * @since S60 v5.0
+     * @param[in]   aFile        content whose url is being handled
+     * @param[in]   aType        type of the requested url,
+     *                           only a single url may be requested
+     *                           at a time
+     *
+     * @leave   KErrArgument     File is not DRM protected.
+     * @leave   KErrNotSupported Url type is not supported for the file
+     */
+    IMPORT_C void HandleUrlL(
+        ContentAccess::CData& aFile,
+        TDrmUiUrlType aType );
+
+
+     /**
+     * Get information of the available urls
+     * Asynchronous method
+     *
+     * @since S60 v5.0
+     * @param[in]   aFile           file whose url is being handled
+     * @param[out]  aType           A bitmask of the supported url types
+     * @param[in]   aObserver       reference to observer
+     *
+     * @return Operation Identifier for the async request
+     *         required for cancelling an operation and
+     *         identifying which request has been completed
+     *
+     * @leave   KErrArgument        File is not DRM protected.
+     */
+    IMPORT_C TInt AvailableUrlsAsyncL(
+        RFile& aFile,
+        TDrmUiUrlType& aType,
+        MDrmAsyncObserver& aObserver );
+
+     /**
+     * Get information of the available urls
+     *
+     * @since S60 v5.0
+     * @param[in]   aFile           file whose url is being handled
+     * @param[out]  aType           A bitmask of the supported url types
+     *
+     * @leave   KErrArgument        File is not DRM protected.
+     */
+    IMPORT_C void AvailableUrlsL(
+        RFile& aFile,
+        TDrmUiUrlType& aType );
+
+
+     /**
+     * Get information of the available urls
+     * Asynchronous method
+     *
+     * @since S60 v5.0
+     * @param[in]   aFile           content whose url is being handled
+     * @param[out]  aType           A bitmask of the supported url types
+     * @param[in]   aObserver       reference to observer
+     *
+     * @return Operation Identifier for the async request
+     *         required for cancelling an operation and
+     *         identifying which request has been completed
+     *
+     * @leave   KErrArgument        File is not DRM protected.
+     */
+    IMPORT_C TInt AvailableUrlsAsyncL(
+        ContentAccess::CData& aFile,
+        TDrmUiUrlType& aType,
+        MDrmAsyncObserver& aObserver );
+
+     /**
+     * Get information of the available urls
+     *
+     * @since S60 v5.0
+     * @param[in]   aFile           content whose url is being handled
+     * @param[out]  aType           A bitmask of the supported url types
+     *
+     * @leave   KErrArgument        File is not DRM protected.
+     */
+    IMPORT_C void AvailableUrlsL(
+        ContentAccess::CData& aFile,
+        TDrmUiUrlType& aType );
+
+
+    /**
+     * Handles DRM error situations related to invalid rights.
+     * This method displays appropriate notes, which observer can override,
+     * to the user and acquires new rights if needed. Asynchronous version,
+     * all errors are signalled using request status.
+     *
+     * @since S60 v5.0
+     * @param[in]   aFile       file for which the error happened
+     * @param[in]   aIntent     the CAF intent which was used to recieve
+     *                          the error
+     * @param[in]   aError      error code
+     * @param[in]   aObserver   reference to observer
+     *
+     * @return Operation Identifier for the async request
+     *         required for cancelling an operation and
+     *         identifying which request has been completed
+     *
+     * @see MDrmHandleErrorObserver
+     */
+    IMPORT_C TInt HandleErrorAsyncL(
+        RFile& aFile,
+        ContentAccess::TIntent aIntent,
+        TInt aError,
+        MDrmHandleErrorObserver& aObserver );
+
+     /**
+     * Handles DRM error situations related to invalid rights.
+     * This method displays appropriate notes, which observer can override,
+     * to the user and acquires new rights if needed. Synchronous version,
+     * leaves in case of error.
+     *
+     * @since S60 v5.0
+     * @param[in]   aFile       file for which the error happened
+     * @param[in]   aIntent     the CAF intent which was used to recieve
+     *                          the error
+     * @param[in]   aError      error code
+     * @param[in]   aObserver   pointer to observer, NULL if no observer
+     *
+     * @leave   KErrArgument    File is not DRM protected.
+     *
+     * @see MDrmHandleErrorObserver
+     */
+    IMPORT_C void HandleErrorL(
+        RFile& aFile,
+        ContentAccess::TIntent aIntent,
+        TInt aError,
+        MDrmHandleErrorObserver* aObserver );
+
+    /**
+     * Handles DRM error situations related to invalid rights.
+     * This method displays appropriate notes, which observer can override,
+     * to the user and acquires new rights if needed. Asynchronous version,
+     * all errors are signalled using request status.
+     *
+     * @since S60 v5.0
+     * @param[in]   aFile       content for which the error happened
+     * @param[in]   aIntent     the CAF intent which was used to recieve
+     *                          the error
+     * @param[in]   aError      error code
+     * @param[in]   aObserver   reference to observer
+     *
+     * @return Operation Identifier for the async request
+     *         required for cancelling an operation and
+     *         identifying which request has been completed
+     *
+     * @see MDrmHandleErrorObserver
+     */
+    IMPORT_C TInt HandleErrorAsyncL(
+        ContentAccess::CData& aFile,
+        ContentAccess::TIntent aIntent,
+        TInt aError,
+        MDrmHandleErrorObserver& aObserver );
+
+    /**
+     * Handles DRM error situations related to invalid rights.
+     * This method displays appropriate notes, which observer can override,
+     * to the user and acquires new rights if needed. Synchronous version,
+     * leaves in case of error.
+     *
+     * @since S60 v5.0
+     * @param[in]   aFile       content for which the error happened
+     * @param[in]   aIntent     the CAF intent which was used to recieve
+     *                          the error
+     * @param[in]   aError      error code
+     * @param[in]   aObserver   pointer to observer, NULL if no observer
+     *
+     * @leave   KErrArgument    File is not DRM protected.
+     *
+     * @see MDrmHandleErrorObserver
+     */
+    IMPORT_C void HandleErrorL(
+        ContentAccess::CData& aFile,
+        ContentAccess::TIntent aIntent,
+        TInt aError,
+        MDrmHandleErrorObserver* aObserver );
+
+
+    /**
+     * Cancel an asyncronous operation
+     *
+     * @since S60 v5.0
+     * @param[in]   aOperationId    identifier of the async operation
+     *                              to be cancelled
+     * @return KErrNotFound if the operation has already been executed
+     *         or it does not exist
+     */
+    IMPORT_C TInt CancelOperation( TInt aOperationId );
+
+public: //From base classes
+
+
+protected: // Functions from base classes
+
+    /**
+    * From CActive Cancels async request.
+    */
+    void DoCancel();
+
+    /**
+    * From CActive Called when async request completes.
+    */
+	void RunL();
+
+    /**
+    * From CActive Called when RunL leaves
+    */
+	TInt RunError( TInt aError );
+
+private:
+
+    /**
+    * C++ default constructor.
+    */
+    CDrmUiHandlingImpl( CDrmUtility* aDrmUtility, CCoeEnv* aCoeEnv );
+
+    void ConstructL();
+
+    void Activate( TRequestStatus*& aStatus );
+
+    void PerformCheckRightsAmountFileL( CDrmUiHandlingData& aData );
+
+    void PerformCheckRightsAmountDataL( CDrmUiHandlingData& aData );
+
+    void PerformShowDetailsViewFileL( CDrmUiHandlingData& aData );
+
+    void PerformShowDetailsViewDataL( CDrmUiHandlingData& aData );
+
+    void PerformHandleUrlFileL( CDrmUiHandlingData& aData );
+
+    void PerformHandleUrlDataL( CDrmUiHandlingData& aData );
+
+    void PerformAvailableUrlsFileL( CDrmUiHandlingData& aData );
+
+    void PerformAvailableUrlsDataL( CDrmUiHandlingData& aData );
+
+    void PerformHandleErrorFileL( CDrmUiHandlingData& aData );
+
+    void PerformHandleErrorDataL( CDrmUiHandlingData& aData );
+
+    void IsProtectedL( RFile& aFile, TPtrC& aAgent );
+
+    void IsProtectedL( ContentAccess::CData* aContent,
+                       TDrmAgentUid& aAgentUid );
+
+    void IsProperErrorL( TInt aError );
+
+    void CheckOmaRightsAmountL( ContentAccess::CData& aContent,
+                                ContentAccess::TIntent aIntent,
+                                MDrmUiCheckRightsObserver* aObserver,
+                                TInt aOperationId );
+
+    void DoCheckOmaRightsAmountL( ContentAccess::CData& aContent,
+                                  HBufC8*& aContentUri,
+                                  ContentAccess::TIntent aIntent,
+                                  const HBufC* aRightsUrl,
+                                  TDrmUiUrlType aUrlType,
+                                  const HBufC8* aSilentUrl,
+                                  MDrmUiCheckRightsObserver* aObserver,
+                                  TInt aOperationId );
+
+    void HandleOmaErrorL( ContentAccess::CData& aContent,
+                          ContentAccess::TIntent aIntent,
+                          TInt aError,
+                          MDrmHandleErrorObserver* aObserver,
+                          TInt aOperationId );
+
+
+    void CheckOmaBasedRightsAmountL( ContentAccess::CData& aContent,
+                                     ContentAccess::TIntent aIntent,
+                                     MDrmUiCheckRightsObserver* aObserver,
+                                     TInt aOperationId );
+
+    void DoCheckOmaBasedRightsAmountL( ContentAccess::CData& aContent,
+                                       const HBufC8* aContentUri,
+                                       ContentAccess::TIntent aIntent,
+                                       const HBufC* aRightsUrl,
+                                       TDrmUiUrlType aUrlType,
+                                       MDrmUiCheckRightsObserver* aObserver,
+                                       TInt aOperationId );
+
+    void GetOmaBasedEndTimeL( ContentAccess::CData& aData, TTime& aEndTime );
+
+    TInt OmaBasedHeaderParserL( TInt aOffset, TPtr8 aHeaderPtr, TTime& aEndTime );
+
+    void ShowDetailsViewL( const HBufC8* aContentId,
+                           const HBufC* aFullPath );
+
+    void ShowDetailsViewL( const HBufC* aFullPath );
+
+    void DoHandleOmaUrlL( ContentAccess::CData& aContent,
+                          TDrmUiUrlType aType );
+
+    void GetAvailableOmaUrlsL( ContentAccess::CData& aContent,
+                               TDrmUiUrlType& aType );
+
+    TInt GetContentIdLC( const ContentAccess::CData& aContent,
+                         HBufC8*& aId );
+
+    TInt GetOmaRightsIssuerLC( const ContentAccess::CData& aContent,
+                              HBufC*& aIssuer );
+
+    TInt GetOmaDomainRightsIssuerLC( const ContentAccess::CData& aContent,
+                                    HBufC*& aIssuer );
+
+    TInt GetOmaPreviewInfoLC( const ContentAccess::CData& aContent,
+                             HBufC*& aPreviewUrl,
+                             TInt& aPreviewType );
+
+    TInt GetOmaSilentRightsUrlLC( const ContentAccess::CData& aContent,
+                                  HBufC8*& aSilentUrl );
+
+    TInt GetOmaInfoUrlLC( const ContentAccess::CData& aContent,
+                         HBufC*& aInfoUrl );
+
+    TInt GetOmaPendingRightsInfoLC( const ContentAccess::CData& aContent,
+                                   HBufC*& aEta );
+
+    TInt GetContentLocationLC( const ContentAccess::CData& aContent,
+                               HBufC*& aPath );
+
+    void SelectOmaRightsUrlL( const ContentAccess::CData& aContent,
+                              const HBufC* aDomainRiUrl,
+                              TDrmUiUrlType& aUrlType );
+
+    void CallRightsNotValidL( MDrmUiCheckRightsObserver* aObserver,
+                              TInt aOperationId,
+                              TCheckRightsStatus aRightsStatus,
+                              TUint32 aReason,
+                              ContentAccess::CData& aContent,
+                              const HBufC8* aContentUri,
+                              CDRMConstraint* aConstraint,
+                              const HBufC* aRightsUrl,
+                              TDrmUiUrlType aUrlType,
+                              const HBufC8* aSilentUrl,
+                              ContentAccess::TIntent aIntent );
+
+    void CallRightsLeftL( MDrmUiCheckRightsObserver* aObserver,
+                          TInt aOperationId,
+                          TBool aUnconstrained,
+                          TTimeIntervalSeconds aTime,
+                          TInt aCounts,
+                          TTimeIntervalSeconds aAccumulated,
+                          const HBufC8* aContentUri,
+                          const HBufC* aRightsUrl,
+                          const HBufC8* aSilentUrl,
+                          CData& aData,
+                          ContentAccess::TIntent aIntent );
+
+    void CallEmbeddedPreviewAvailableL( MDrmHandleErrorObserver* aObserver,
+                                        TInt aOperationId,
+                                        ContentAccess::CData& aContent,
+                                        const HBufC* aPreviewUrl,
+                                        TDrmRightsInfo aRightsStatus,
+                                        TUint32 aReason,
+                                        const HBufC* aRightsUrl,
+                                        const HBufC8* aContentUri,
+                                        ContentAccess::TIntent aIntent );
+
+    void CallPreviewRightsUrlAvailableL( MDrmHandleErrorObserver* aObserver,
+                                         TInt aOperationId,
+                                         ContentAccess::CData& aContent,
+                                         const HBufC* aPreviewUrl,
+                                         TDrmRightsInfo aRightsStatus,
+                                         TUint32 aReason,
+                                         const HBufC* aRightsUrl,
+                                         const HBufC8* aContentUri,
+                                         ContentAccess::TIntent aIntent );
+
+    void CallSilentRightsUrlAvailableL( MDrmHandleErrorObserver* aObserver,
+                                        TInt aOperationId,
+                                        const HBufC8* aSilentUrl,
+                                        TDrmRightsInfo aRightsStatus,
+                                        TUint32 aReason,
+                                        const HBufC* aRightsUrl,
+                                        const HBufC8* aContentUri,
+                                        ContentAccess::TIntent aIntent );
+
+    void CallRightsUrlAvailableL( MDrmHandleErrorObserver* aObserver,
+                                  TInt aOperationId,
+                                  TDrmRightsInfo aRightsStatus,
+                                  TUint32 aReason,
+                                  CDRMConstraint* aConstraint,
+                                  ContentAccess::CData& aContent,
+                                  const HBufC8* aContentUri,
+                                  const HBufC* aRightsUrl,
+                                  TDrmUiUrlType aUrlType,
+                                  ContentAccess::TIntent aIntent,
+                                  TInt aError );
+
+    void CallPreviewRightsAvailable( MDrmHandleErrorObserver* aObserver,
+                                     TInt aOperationId,
+                                     TInt aError );
+
+    void CallSilentRightsAvailable( MDrmHandleErrorObserver* aObserver,
+                                    TInt aOperationId,
+                                    TInt aError );
+
+    void CallRightsAvailable( MDrmHandleErrorObserver* aObserver,
+                              TInt aOperationId,
+                              TInt aError );
+
+    void CallPlayEmbeddedPreviewSelected( MDrmHandleErrorObserver* aObserver,
+                                          TInt aOperationId,
+                                          const HBufC* aPreviewUrl );
+
+    /**
+    * @return ETrue if rights renewal wanted, EFalse  otherwise
+    */
+    TBool ShowNoRightsNoteL( ContentAccess::CData& aContent,
+                             TDrmRightsInfo aRightsStatus,
+                             TUint32 aReason,
+                             CDRMConstraint* aConstraint,
+                             const HBufC* aRightsUrl,
+                             TDrmUiUrlType aUrlType,
+                             TInt aError );
+
+    TInt GetOmaConstraintInfo( CDRMConstraint* aConstraint,
+                               TUint32& aCountsLeft,
+                               TTime& aEndTime );
+
+    TInt RejectReason( TUint32 aReason );
+
+    TDrmRightsInfo RightsInfoStatus( TCheckRightsStatus aStatus );
+
+    void CheckOmaDomainStatusL( const ContentAccess::CData& aContent,
+                                const HBufC* aDomainRiUrl,
+                                TInt& aIsRegistered,
+                                TInt& aIsJoined );
+
+    /**
+    * Launch rights manager UI
+    */
+    void LaunchRightsManagerUiL( const TDesC& aParam16 );
+
+    /**
+    * Form string needed to launch rights manager UI embedded.
+    */
+    void CreateLaunchParamL( const HBufC8* aUrl,
+                             HBufC*& aLaunchParam,
+                             const HBufC* aFullPath );
+
+    void CreateLaunchParamL( const HBufC* aFullPath,
+                             HBufC*& aLaunchParam );
+
+    /**
+    * Launch browser. Return ETrue if embedded launch
+    */
+    TBool LaunchBrowserL( const HBufC8* aUrl );
+    TBool LaunchBrowserL( const HBufC* aUrl );
+
+    /**
+    * Get rights silently, if notes are not intended to be shown, put aShowNotes to EFalse 
+    */
+    TInt GetSilentRightsL( const TDesC8& aUrl, const TBool aShowNotes );
+
+    /**
+    * Check if the user has allowed silent rights
+    */
+    TBool SilentRightsAllowedL();
+
+    /**
+    * Check if browser AP has been defined
+    */
+    TBool BrowserAPDefinedL();
+
+    /**
+    * Returns the number of access points on phone
+    */
+    TInt APCountL();
+
+    /**
+    * Handles exit from service
+    * from MAknServerAppExitObserver
+    */
+	void HandleServerAppExit(TInt aReason);
+
+    /**
+     * Appends new async request data to async operation queue.
+     *
+     * @param[in]   aData: The data set in/out.
+     * @return none
+     */
+    void AppendToQueue( CDrmUiHandlingData* aData );
+
+    /**
+     * Gets the next async request data from async operation queue
+     *
+     * @param[in]   none
+     * @return next request data
+     */
+    CDrmUiHandlingData* PopFront();
+
+    void GetOmaBasedInfoL();
+
+    /**
+    * Gets SilentRights and
+    * checks status after 
+    * CallSilentAvailble after right
+    * @return Etrue, if silent RO rerieval led to usable content
+    */
+    TBool CDrmUiHandlingImpl::GetSilentAndCallL(
+        MDrmHandleErrorObserver* aObserver,
+        TInt aOperationId,
+        const ContentAccess::TIntent aIntent,
+        const HBufC8* aContentUri,
+        const HBufC8* aSilentUrl,
+        const TBool aShowNotes );
+
+    /**
+    * Gets Rights and
+    * checks status if launched embedded.
+    * CallRightsAvailable, if launched embedded or righsUrl not present
+    */
+    void CDrmUiHandlingImpl::GetRightsAndCallL(
+        MDrmHandleErrorObserver* aObserver,
+        TInt aOperationId,
+        const ContentAccess::TIntent aIntent,
+        const HBufC8* aContentUri,
+        const HBufC* aRightsUrl );
+private: // data
+
+    // Control environment
+    CCoeEnv* iCoeEnv;
+
+    // DrmUtility
+    CDrmUtility* iDrmUtility;
+
+    // DrmUtilityCommon
+    CDrmUtilityCommon* iDrmUtilityCommon;
+
+    // DrmUtilityUI
+    CDrmUtilityUI* iDrmUtilityUi;
+
+    // Oma Drm client
+    RDRMRightsClient iOmaClient;
+
+    // WM Drm Wrapper - Owned
+    CDrmUtilityWMDrm* iWrapperLoader;
+
+    // WM Drm Client - Not Owned
+    MDrmUtilityWMDrmWrapper* iWmClient;
+
+    // Async observer and current operation id for async operations
+    MDrmAsyncObserver* iObserver;
+    TInt iOperationId;
+
+    // Wait for the notes and queries
+    CActiveSchedulerWait iWait;
+
+    // Schemehandler for url handling
+    CSchemeHandler* iSchemeHandler;
+
+    // Operation Queue:
+    CDrmUiHandlingData* iFirst;
+    CDrmUiHandlingData* iLast;
+
+    // To prevent queue handling from being messed up by threads
+    RSemaphore iSemaphore;
+
+    // Oma based extensions
+    HBufC* iOmaBasedAgentName;
+    TInt iOmaBasedUid;
+    HBufC8* iOmaBasedMimeType;
+
+    };
+
+}
+
+#endif // C_CDRMUIHANDLINGIMPL_H