diff -r 7165f928e888 -r 31c16e0c5e3e classicui_plat/document_handler_api/inc/DocumentHandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/classicui_plat/document_handler_api/inc/DocumentHandler.h Wed Aug 18 10:02:14 2010 +0300 @@ -0,0 +1,872 @@ +/* +* Copyright (c) 2002-2005 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: Definition of CDocumentHandler class. +* The purpose of the Documenthandler is to offer to applications +* - wrapper for application embedding +* - temporary file utility to support data caging for platform security +* +* +*/ + + +#ifndef DOCUMENTHANDLER_H +#define DOCUMENTHANDLER_H + +// INCLUDES +#include +#include + +// CONSTANTS + +// App UIDs for handlers. Handlers are identified by the handler application's +// UID. E.g. The handler for WMLC (binary format of Wireless Markup Language) +// is responsible for launching the WMLBrowser. The data type +// application/wap.vnd.wmlc is therefore mapped to the browser's UID, +// 0x10008D39. + +const TInt KTextHandler = 0x1000599d; // Notepad viever +const TInt KWmlcHandler = 0x10008D39; // WML Browser +const TInt KJamHandler = 0x100009C1; // JAM +const TInt KAppInstHandler = 0x101F875A; // Installer +const TInt KBioViewerAppHandler = 0x0FC99F01; // BVA +const TInt KImageViewerHandler = 0x101f4d90; // Image viever +const TInt KCertSaveAppHandler = 0x100059D2; // Cert response handler app +const TInt KCODHandler = 0x10008d4a; // COD handler +const TInt KDDhandler = 0x10008d3f; // DD Handler + +// A global external mime type for all nokia games. +_LIT8(KGameMimeType, "application/x-NokiaGameData"); +_LIT8(KDataTypeODM,"application/vnd.oma.drm.message"); // Not supported by DocumentHandler +_LIT8(KDataTypeDCF,"application/vnd.oma.drm.content"); // Deprecated, do not use from here + +// Fail reasons +const TInt KBadMimeType = -12002; // Mime type conflict etc. +const TInt KMimeNotSupported = -12003; // No handler found +const TInt KNullContent = -12005; // Empty content +const TInt KDataDirNotFound = -12006; // Deprecated - not used +const TInt KExecNotAllowed = -12007; // Executables not allowed +const TInt KNoHostProcess = -12008; // Deprecated - not used +const TInt KNotInitialized = -12009; // Not initialized +const TInt KUserCancel = -12010; // User cancelled operation +const TInt KDRMErrSession = -12011; // DRM session error. +const TInt KDRMErrNoRights = -12012; // Invalid DRM rights. +const TInt KDRMErrRightsDBCorrupted = -12013; // DRM rights db corrupted. +const TInt KDRMErrInvalidVersion = -12014; // Invalid DRM version. +const TInt KDRMErrPreviewRights = -12015; // Preview DRM rights. + + +// DATA TYPES + +// API operations to inform special handlers of the entry function. +enum TDocOperation + { + EDocCopy, // CopyL( aFileNameOld, aNameNew, aDataType, aAttr) + EDocSave, // SaveL( aContent, aDataType, aAttr ) + EDocSaveAs, // SaveL( aContent, aDataType,aFileName, aAttr ) + EDocOpenFile, // OpenFileL( aFileName, aDataType ) + EDocOpenFileEmb, // OpenFileEmbeddedL( aFileName, aDataType) + EDocMove, // MoveL( aFileNameOld, aNameNew, aDataType, aAttr) + EDocSilentMove, // SilentMoveL( aFileNameOld, aNameNew, aRootPaht, aDataType, aAttr) + EDocSaveTemp, // SaveTempFileL( aContent, aDataType, aFileName, aSharableFile) + }; + +// FORWARD DECLARATIONS +class CDocHandlerBase; // Base class for handlers +class CEikProcess; // The host process +class MAknServerAppExitObserver; // Viewer app exit observer +class TDataType; // Mime type handling +class RApaLsSession; // App list server session +class CAiwGenericParamList; // Generic parameter list + +// CLASS DECLARATION + +/** +* Utility class for opening and saving any supported content. +* This class declares an interface for the DocumentHandler, a +* common component in Series60. +* +* The CDocumentHandler class will not itself implement any content +* handling routines. It's responsible for finding out which application +* can handle given data type and constructing a correct handler implementation +* for that application. If the given data type is supported by the system +* but no specific handler is found, the CDocDefaltHandler is then constructed. +* The default handler is an implementation of the CDoCDocHandlerBase class with +* standard "Epoc-style" content handling. +* +* The handler application can be lauched standalone or embedded. The +* Embedded launching is preferred way in Series60. +* Standalone launching means that the application will run in +* it's own process. Embedded launching means that the UI of an +* application, which is responsible for handling given data type, +* is embedded into the parent application. There will be only +* parent applications icon shown in the fast swap window when an +* application is embedded. +* +* Link your application against CommonUI.lib. +* +* An example: +*
 
+* #include 
+*
+* // Define DocHandler
+* CDocumentHandler* iDocHandler;
+* 
+* // Construct DocHandler
+* void ConstructL()
+*    {
+*    iDocHandler = CDocumentHandler::NewL();
+*
+*    // I want to be notified when exit happends. Because I
+*    // pass "this" pointer, I have to derive from
+*    // MAknServerAppExitObserver class.
+*    iDocHandler->SetExitObserver(this)     
+*    }
+*
+* // delete DocHandler
+* void ~Myapp()
+*    {
+*    delete iDocHandler;
+*    }
+*
+*
+* // and use like this
+*
+* void OpenAttachmentL( RFile& aFile,           // A file to be open
+*                       TDataType& aDataType )  // DataType can be empty
+*   {
+*   TInt error = KErrNone;
+*   TFileName path;
+*
+*   
+*   // Leaves on system wide errors like disk full, out of memory etc.
+*   error = iDocHandler->OpenFileEmbeddedL( aFile, aDataType );
+*   // The status code can be either KErrNone or KUserCancel
+*
+*    }
+* 
+* +*/ +NONSHARABLE_CLASS(CDocumentHandler) : public CBase + { + public: // Constructors and destructor + + /** + * Two-phased constructor. Leaves on failure. + * + * @param aProcess The host process, which will be + * used for embedded launching. + * + * @return The constructed CDocumentHandler + * @deprecated in Series60 3.0, instead use NewL without CEikProcess parameter + */ + IMPORT_C static CDocumentHandler* NewL( CEikProcess* aProcess ); + + /** + * Two-phased constructor. Leaves on failure. + * + * @param aProcess The host process, which will be + * used for embedded launching. + * + * @return The constructed CDocumentHandler + * @deprecated in Series60 3.0, instead use NewL without CEikProcess parameter + */ + IMPORT_C static CDocumentHandler* NewLC( CEikProcess* aProcess ); + + /** + * Two-phased constructor. Leaves on failure. + * + * + * @return The constructed CDocumentHandler + * @since Series 60 3.0 + */ + IMPORT_C static CDocumentHandler* NewL( ); + + /** + * Two-phased constructor. Leaves on failure. + * + * + * @return The constructed CDocumentHandler + * @since Series 60 3.0 + */ + IMPORT_C static CDocumentHandler* NewLC( ); + + /** + * Destructor. + */ + IMPORT_C virtual ~CDocumentHandler(); + + private: // Constructors and destructor + + /** + * C++ default constructor. + */ + CDocumentHandler( ); + + /** + * C++ copy constructor + */ + CDocumentHandler( const CDocumentHandler& ); + + /** + * By default EPOC constructor is private. + */ + void ConstructL(); + + public: // New functions, data caging + + /** + * Utility method for opening filehandle from existing file for OpenFileL + * calls. The created file handle is meant to be shared across process + * boundaries. + * + * This function can leave in some system wide error situation. + * E.g. out of memory, not enough space in filesystem etc. These + * errors are usually trapped by the application framework. + * + * NOTE! Caller is responsible of closing opened file handle. + * + * @param aFileName Name (including directory information) for file. + * This file should exist allready, otherwise this + * function leaves with KErrNotFound. + * @param aSharableFile Returned file handle that can be shared. + * @since Series 60 3.0 + */ + IMPORT_C void OpenTempFileL( + const TDesC& aFileName, + RFile &aSharableFile); + + /** + * Utility method for save aContent with aDataType temporarily + * for OpenFileL calls. The created file handle is meant to be shared + * across process boundaries. + * + * This temporary file will be saved to process private temp directory. + * Temporary directory will be created if not existing yet. + * + * This function can leave in some system wide error situation. + * E.g. out of memory, not enough space in filesystem etc. These + * errors are usually trapped by the application framework. + * + * NOTE! Caller is responsible of closing opened file handle! + * Created temporary file will be deleted in destructor of + * DocumentHandler, but caller can delete it self as well. + * + * @param aContent A content data buffer. Narrow descriptor that + * can contain any kind of data. + * @param aDataType A data type for the content of the file. If empty + * the DocumentHandler tries to recognize the content. + * @param aFileName Use this name for saving. The name must not + * contain any directory information. + * @param aSharableFile Returned file handle that can be shared. + * @since Series 60 3.0 + */ + IMPORT_C void SaveTempFileL( + const TDesC8& aContent, + TDataType& aDataType, + const TDesC& aFileName, + RFile &aSharableFile); + + public: // New functions, parameter handling + + /** + * Returns an empty instance of CAiwGenericParamList class. It can be + * used for example as an input parameter list for API methods. + * This is just a convinience method and doesn't have + * to be used. If consumer wants to create input list by itself + * it is ok. If this method is used, service handler takes care + * of deleting returned generic parameter list. + * + * @return An empty instance of CAiwGenericParameter list. + * @since Series 60 3.0 + */ + IMPORT_C CAiwGenericParamList& InParamListL(); + + /** + * Returns a list of possible output parameters handler application + * may have set after executing the service. The caller is responsible + * for deleting the parameter instance if not null. + * + * @return List of output parameters, NULL if nothing set. + * @deprecated + */ + IMPORT_C const CAiwGenericParamList* OutParamList(); + + public: // New functions, open file with filehandle + + /** + * Launches an application in standalone capable of handling + * data in aSharableFile (using aDatatype if available). + * Doesn't save data from the file. In case of DRM protected + * files with restricted rights, there will be query asking + * if user want open file. + * + * This function can leave in some system wide error situation. + * E.g. out of memory, not enough space in filesystem etc. See + * also possible error codes from documenthandler.h header file. + * + * @param aSharableFile A sharable file handle to be passed to + * the launched application + * @param aDataType A data type for the content of the file. If empty + * the DocumentHandler tries to recognize the content. + * @return KErrNone if success. KUserCancel if the user + * cancelled the operation. + * @since Series 60 3.0 + */ + IMPORT_C TInt OpenFileL( + RFile& aSharableFile, + TDataType& aDataType); + + /** + * Launches an application in embedded (if possible) capable of + * handling data in aSharableFile (using aDatatype if available). + * Doesn't save data from the file. In case of DRM protected + * files with restricted rights, there will be query asking + * if user want open file. + * + * This function can leave in some system wide error situation. + * E.g. out of memory, not enough space in filesystem etc. See + * also possible error codes from documenthandler.h header file. + * + * @param aSharableFile A sharable file handle to be passed to + * the launched application. + * @param aDataType A data type for the content of the file. If empty + * the DocumentHandler tries to recognize the content. + * @param aParamList Parameter list to be passed to handler application. + * @return KErrNone if success. KUserCancel if the user + * cancelled the operation. + * @since Series 60 3.0 + */ + IMPORT_C TInt OpenFileEmbeddedL( + RFile& aSharableFile, + TDataType& aDataType, + const CAiwGenericParamList& aParamList); + + /** + * Launches an application in embedded (if possible) capable of + * handling data in aSharableFile (using aDatatype if available). + * Doesn't save data from the file. In case of DRM protected + * files with restricted rights, there will be query asking + * if user want open file. + * + * This function can leave in some system wide error situation. + * E.g. out of memory, not enough space in filesystem etc. See + * also possible error codes from documenthandler.h header file. + * + * @param aSharableFile A sharable file handle to be passed to + * the launched application. + * @param aDataType A data type for the content of the file. If empty + * the DocumentHandler tries to recognize the content. + * @return KErrNone if success. KUserCancel if the user + * cancelled the operation. + * @since Series 60 3.0 + */ + IMPORT_C TInt OpenFileEmbeddedL( + RFile& aSharableFile, + TDataType& aDataType); + + public: // open file with filename + + /** + * Launches an application standalone capable of handling + * data in aFilename, with aDataType. Doesn't copy data + * from the file. + * + * This function can leave in some system wide error situation. + * E.g. out of memory, not enough space in filesystem etc. See + * also possible error codes from documenthandler.h header file. + * + * @param aFileName Name of the file. Directory path included. + * @param aDataType A data type for the content of the file. If empty + * the DocumentHandler tries to recognize the content. + * @return KErrNone if success. KUserCancel if the user + * cancelled the operation. + */ + IMPORT_C TInt OpenFileL( + const TDesC& aFileName, + TDataType& aDataType ); + + /** + * Launches an application embedded capable of handling data in + * aFilename with aDataType. Doesn't copy data from the file. + * + * This function can leave in some system wide error situation. + * E.g. out of memory, not enough space in filesystem etc. See + * also possible error codes from documenthandler.h header file. + * + * @param aFileName Name of the file. Directory path included. + * @param aDataType A data type for the content of the file. If empty + * the DocumentHandler tries to recognize the content. + * @return KErrNone if success. KUserCancel if the user + * cancelled the operation. + */ + IMPORT_C TInt OpenFileEmbeddedL( + const TDesC& aFileName, + TDataType& aDataType ); + + public: // data saving + + /** + * Save aContent with aDataType using aAttr to a correct directory. + * Generates a new name for saving. The storage is usually a filesystem, + * but can be anything from application spesific data structures to + * a database. + * + * This function can leave in some system wide error situation. + * E.g. out of memory, not enough space in filesystem etc. See + * also possible error codes from documenthandler.h header file. + * + * @param aContent A content data buffer. Narrow descriptor that + * can contain any kind of data. + * @param aDataType A data type for the content of the file. If empty + * the DocumentHandler tries to recognize the content. + * @param aAttr Use these file attributes for saving. Your can + * find these attributes from + * \epoc32\include\f32file.h header file. + * If the storage is not a filesystem these + * attributes are ignored. + * @return KErrNone if success. KUserCancel if the user + * cancelled the operation. + */ + IMPORT_C TInt SaveL( + const TDesC8& aContent, + TDataType& aDataType, + const TUint aAttr ); + + /** + * Save aBuffer with aDataType using aAttr to a correct storage with a + * supplied name. The storage is usually a filesystem, but can be + * anything from application spesific data structures to a database. + * + * This function can leave in some system wide error situation. + * E.g. out of memory, not enough space in filesystem etc. See + * also possible error codes from documenthandler.h header file. + * + * @param aContent A content data buffer. Narrow descriptor that + * can contain any kind of data. + * @param aDataType A data type for the content of the file. If empty + * the DocumentHandler tries to recognize the content. + * @param aName Use this name for saving. The name must not + * contain any directory information. + * @param aAttr Use these file attributes for saving. Your can + * find these attributes from + * \epoc32\include\f32file.h header file. + * If the storage is not a filesystem these + * attributes are ignored. + * @return KErrNone if success. KUserCancel if the user + * cancelled the operation. + */ + IMPORT_C TInt SaveL( + const TDesC8& aContent, + TDataType& aDataType, + const TDesC& aName, + const TUint aAttr ); + + /** + * Copy a file named aFileNameOld to the correct storage using + * name aNameNew and aFileAttr. If aNameNew is empty, use + * the old name. + * + * This function can leave in some system wide error situation. + * E.g. out of memory, not enough space in filesystem etc. See + * also possible error codes from documenthandler.h header file. + * + * @param aFileNameOld Name of the file being copied. + * @param aNameNew Name of the new file. If null, use the + * old name. + * @param aDataType A data type for the file. If empty the + * DocumentHandler tries to recognize type. + * @param aAttr Use these file attributes for saving. + * ReadOnly, ReadWrite. + * @return KErrNone if success. KUserCancel if the user + * cancelled the operation. + */ + IMPORT_C TInt CopyL( + const TDesC& aFileNameOld, + const TDesC& aNameNew, + TDataType& aDataType, + const TUint aAttr ); + + /** + * Copy a file with handle aFileOld to the correct storage using + * name aNameNew and aFileAttr. If aNameNew is empty, use + * the old name. + * + * This function can leave in some system wide error situation. + * E.g. out of memory, not enough space in filesystem etc. See + * also possible error codes from documenthandler.h header file. + * + * @param aFileOld Handle of the file being copied. + * @param aNameNew Name of the new file. If null, use the + * old name. + * @param aDataType A data type for the file. If empty the + * DocumentHandler tries to recognize type. + * @param aAttr Use these file attributes for saving. + * ReadOnly, ReadWrite. + * @return KErrNone if success. KUserCancel if the user + * cancelled the operation. + */ + IMPORT_C TInt CopyL( + const RFile& aFileOld, + const TDesC& aNameNew, + TDataType& aDataType, + const TUint aAttr ); + + /** + * Move a file named aFileNameOld to the correct storage using + * name aNameNew and aFileAttr. Note that file in the old location + * (aFileNameOld) will be removed during this operation. + * + * This function can leave in some system wide error situation. + * E.g. out of memory, not enough space in filesystem etc. See + * also possible error codes from documenthandler.h header file. + * + * @param aFileNameOld Name of the file being copied. + * @param aNameNew Name of the new file. If null, use the + * default name for this mime-type. + * @param aDataType A data type for the file. If empty the + * DocumentHandler tries to recognize type. + * @param aAttr Use these file attributes for saving. + * ReadOnly, ReadWrite. + * @return KErrNone if success. KUserCancel if the user + * cancelled the operation. + * @since Series60 2.8 + */ + IMPORT_C TInt MoveL( + const TDesC& aFileNameOld, + const TDesC& aNameNew, + TDataType& aDataType, + const TUint aAttr ); + + /** + * Move a file named aFileNameOld to the correct storage using + * name aNameNew and aFileAttr. This method operates silently, so + * nothing will be asked from user. Caller should give root path of + * the selected memory. Unique file name will be created automatically + * without user interaction. Note that file in the old location + * (aFileNameOld) will be removed during this operation. + * + * This function can leave in some system wide error situation. + * E.g. out of memory, not enough space in filesystem etc. See + * also possible error codes from documenthandler.h header file. + * + * @param aFileNameOld Name of the file being copied. + * @param aNameNew Name of the new file. If null, use the + * default name for this mime-type. + * @param aRootPath Root path of the selected memory where file + * should be moved. + * @param aDataType A data type for the file. If empty the + * DocumentHandler tries to recognize type. + * @param aAttr Use these file attributes for saving. + * ReadOnly, ReadWrite. + * @return KErrNone if success. + * @since Series60 3.0 + */ + IMPORT_C TInt SilentMoveL( + const TDesC& aFileNameOld, + const TDesC& aNameNew, + const TDesC& aRootPath, + TDataType& aDataType, + const TUint aAttr ); + + + public: // query functions + + /** + * Is the aDataType supported by the system. + * + * @param aDataType Data type for content. + * + * @return True if there is an application capable of handling + * aDataType. False if no application can handle + * this mime type. + */ + IMPORT_C TBool CanHandleL( const TDataType& aDataType ); + + /** + * Is opening of aDataType supported by the system. + * + * @param aDataType Data type for content. + * + * @return True if there is an application capable of handling + * aDataType. False if no application can handle + * this mime type. + */ + IMPORT_C TBool CanOpenL( const TDataType& aDataType ); + + /** + * Is saving aDataType supported by the system. + * + * @param aDataType Data type for content. + * + * @return True if there is an application capable of handling + * aDataType. False if no application can handle + * this mime type. + */ + IMPORT_C TBool CanSaveL( const TDataType& aDataType ); + + /** + * Get the whole path including filename where the content was saved. + * If the content was not saved to a file, this function returns + * a name that represents the saved object. + * + * It may not be possible to open the object with the returned + * value, if it's not a real file in the filesystem. This situation + * may happen when e.g. the handler application stores it's contents in + * some weird data structure. + * + * @param aPath The path of the saved content. + * + * @return KErrNone if the path was found. KNotInitialised if the + * handler is not initialised. + */ + IMPORT_C TInt GetPath( TDes& aPath ); + + /** + * Get the uid of handler application. In case of media files uid is + * Media Gallery's uid. This method should be called only succesfully + * completed DocumentHandler operations. + * + * @param aUid Uid of the handler application for the content. + * + * @return KErrNone if the uid was found. KNotInitialised if the + * handler is not initialised. + * @since Series 60 2.8 + */ + IMPORT_C TInt HandlerAppUid( TUid& aUid ); + + /** + * Set an observer for embedded application exit events. + * DocumentHandler will delegate embedding applications exit + * events to aObserver if it's not NULL: + * + * @param aObserver Exit observer + * @since Series 60 3.0 + */ + IMPORT_C void SetExitObserver( MAknServerAppExitObserver* aObserver ); + + /** + * Utility method for appending a correct file name extension for some + * content. This method should be called if wanted quarantee that file + * extension of aFileName is correct with aDataType. + * + * This method uses internal mapping table to find correct file + * extension to aFileName. Mapping table contains mainly extensions + * and datatypes, which cannot be recognized based on the data it self + * (No header information etc.). + * + * This method replaces existing extension with correct one at aFileName + * if needed. If aDatatype is not found from mapping table or aDatatype + * is not supported by any application, aFileName will remain unchanged. + * + * @param aFileName Append extension to this filename. + * @param aDataType The content type of the file. + * @since Series 60 3.0 + */ + IMPORT_C void CheckFileNameExtension( + TDes& aFileName, + const TDataType& aDatatype ); + + /** + * Get the RApaLsSession. + * + * @return Pointer to RApaLsSession + */ + RApaLsSession* ApaLs(); + + /** + * Get the exit observer. + * + * @return Pointer to exit observer + * @since Series 60 3.0 + */ + MAknServerAppExitObserver* ServerAppExitObserver() const; + + /** + * Get the operation code of the api entry function. + */ + TDocOperation DocOperation() const; + + /** + * Close sharable FileSession. + */ + void CloseSharableFS(); + + /** + * Set temporary file, which will be deleted in destructor. + */ + void SetTempFile( const TDesC& aTempFile); + + /** + * Utility method to find out if there are any applications that + * support progressive downloading for a given data type. + * + * The decision is based on configuration made in central repository. + * + * @param aDataType The content type of the file. + * @param aUid An Uid of the applications for the given data type. + * @return ETrue if progressive download was supported for the given + * data type. Otherwise EFalse. + * @since Series 60 3.1 + */ + IMPORT_C TBool CanHandleProgressivelyL( + const TDataType& aDataType, + TUid& aUid ); + + /** + * Utility method to provide a list of applications that support + * progressive downloading. + * + * The list of applications uids is configured central repository. + * + * @param aUidList A list of app Uids + * @since Series 60 3.2 + */ + IMPORT_C void GetProgressiveDownloadAppUidsL( RArray& aUidList ); + + private: // New functions + + /** + * Construct a handler for a given data type. A previous handler will + * be destroyed and the new one is constructed. + * + * The desicion of which handler implementation to use is + * based on Apparc's AppForDataType query. If the app uid is + * found for aDataType and there is a hardcoded handler for it, + * the right handler will be constucted. If the app uid is not found + * try to match a data type for some handler. The default handler is + * constructed if no handler entry is found. + * + * @param aUid UID of the handler application. + * @return Error code + */ + TInt FindHandlerL( + const TDataType& aDataType, + const TUid& aUid); + + /** + * Try to find a handler for aUid. Constructs iHandler if found. + * + * @param aDataType A data type to pass to a handler + * @param aUid An uid to search a handler for + */ + void FindHandlerByUidL( + const TUid& aUid, + const TDataType& aDataType); + + /** + * Try to find a handler for aDataType. Constructs iHandler if found. + * + * @param aUid An Uid for handler application. + * @param aDataType A data type to search a handler for. + */ + void FindHandlerByMimeTypeL( + const TUid& aUid, + const TDataType& aDataType); + + /** + * Makes all the nesessary security checks and maps aDataType to + * an UID of the handler application. If system is not able to handle + * the content type, or file is DRM protectedfile, aDataType and aUid + * will left empty. + * + * @param aFileName Filename + * @param aDataType Data type for the file + * @param aUid An application UID will be returned if a handler + * was found. + * @return KErrNone if success, error code if failure. + */ + TInt RecognizeAndCheckFileL( + const TDesC& aFileName, + TDataType& aDataType, + TUid& aUid ); + + /** + * Makes all the nesessary security checks and maps aDataType to + * an UID of the handler application. If system is not able to handle + * the content type, or file is DRM protectedfile, aDataType and aUid + * will left empty. + * + * @param aFileHandle Filehandle + * @param aDataType Data type for the file + * @param aUid An application UID will be returned if a handler + * was found. + * @return KErrNone if success, error code if failure. + */ + TInt RecognizeAndCheckFileL( + RFile& aFileHandle, + TDataType& aDataType, + TUid& aUid ); + + /** + * This method lists all supported mime-types of system using + * RDebug::Print. On UREL mode this method do nothing. + */ + void ListSupportedMimeTypesL(); + + /** + * Prohibit the assignment operation + */ + CDocumentHandler operator=( const CDocumentHandler& ) const; + + /** + * Convert a hex string to 32-bit integer. + */ + TInt ConvertHexStringToInt32( + const TDesC& aHexString, + TInt32& aInt ); + + private: // Data + + /** + * The entry operation. Handlers can query about the entry function + * when they need to implement some special behaviour. + */ + TDocOperation iOperation; + + /** + * A handler providing operations. + */ + CDocHandlerBase* iHandler; + + /** + * A ApaLs session client. + */ + RApaLsSession* iApaLs; + + /** + * Notify embedded app's exit event to this observer. + */ + MAknServerAppExitObserver* iServerAppExitObserver; + + /** + * Holds sharable Fileserver session + */ + RFs iSharableFS; + + /** + * Parameter list created using InParamListL function + */ + CAiwGenericParamList* iInParams; + + /** + * Filename of temporary saved file. This file will be deleted + * in destructor of documenthandler + */ + TFileName iTempFileName; + + }; + +#endif // DOCUMENTHANDLER_H + +// End of File