diff -r 000000000000 -r 79c6a41cd166 homescreenpluginsrv/hspsmanager/inc/hspsclientrequesthandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenpluginsrv/hspsmanager/inc/hspsclientrequesthandler.h Thu Dec 17 08:54:17 2009 +0200 @@ -0,0 +1,454 @@ +/* +* Copyright (c) 2008 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: ChspsClientRequestHandler is a server-side implementation for +* retrieving configurations from the HSPS's Definition Repository. +* Configurations are binary presentations of a manifest, XML and +* resource files - actually, instances of the hspsODT class. +* Due to perfomance aspects, instead of the binary files, a file +* handle is returned over the IPC channel, and on client side, +* the handle is then used for internalizing the requested +* configuration. +* +* +*/ + + +#ifndef __hspsCLIENTREQUESTHANDLER_H__ +#define __hspsCLIENTREQUESTHANDLER_H__ + +#include + +#include "hspscenreplistener.h" +#include "hspsreqnotifparam.h" + +class MhspsClientRequestService; +class ChspsSecurityEnforcer; +class CRepository; +class ChspsODT; +class ChspsFileAccess; +class ChspsResource; +class ChspsThemeServer; +class ChspsResult; +class ChspsRequestNotifcationParams; + +#ifdef HSPS_LOG_ACTIVE +class ChspsLogBus; +#endif + +/** +* +* Class ChspsClientRequestHandler. ChspsClientRequestHandler performs all Xuikon Client Request Service +* related functionality of Xuikon Theme Mangement Service APIs. +* Xuikon Client Request Service API is intended to serve Rendering Engines with Application Themes +* and their associated resources. ChspsClientRequestHandler will provide access to +* Xuikon's Application Theme database maintained by Xuikon Definition Repository. +* Definition Repository maintains Application Themes in ChspsODT-objects. +* Themes can have resources like bitmaps etc. Resources can be accessed through this API also. +* Every individual resource has corresponding ChspsResource-object. hspsResource-object is delivered +* to the client side in a resource list which is associated to the theme. +* Resource list is included in ODT as well as DOM-document which contains UI-definition. +* There can be only one theme activated for a specific application at one time. +* The information of activation of themes is stored in Symbian Central Repository -object. +* The Central Repository is requested on every theme request that Rendering Engine commences. +* +* Class inheritance: +* ================== +* ChspsClientRequestHandler derives CTimer for active timer functionality. It implements +* MhspsClientRequestService-interface for Xuikon Client Request Service API functionality, +* and MhspsDefinitionRepositoryObserver for listening to the definition repository events. +* +* Functionality: +* ============== +* To initiate theme usage, Rendering Engine must call hspsGetODT(). +* +* hspsGetODT() returns one of the following codes: +* - EhspsGetODTSuccess. Theme was received successfully. Client can start its rendering. +* - EhspsGetODTFailed. Theme was not received. Check Additional Return Code in hspsResult-object +* for the exact reason. Theme load can fail for e.g. for missing rights. +* - EhspsGetODTLowMemoryStrategy. Possible memory low to create chunk. Client should +* implement some low memory strategy. In version 3.1, +* the low-memory stategy is use direct file handle in +* accessing ODT. System can be configured to use +* low-memory strategy only. +* +* After receiving the theme, Rendering Engine may subscribe the theme related events. +* These events may concern the changes of the theme status (meaning that some other theme is +* activated), or that the theme is updated. In both cases, client should reload the theme and do +* the rendering again. To act as a subscriber of these events, client must implement the interface +* MhspsClientRequestServiceObserver. Subscription is applied by calling hspsGetODTUpdate(). +* This function returns immediately one of the following codes: +* - EhspsGetODTUpdateSuccess - The subscription of the theme updates and/or status changes was + successful. The cient must start observe the server events. +* - EhspsGetODTUpdateFailed - The subscription of the theme updates and status changes was failed. +* +* Once success-response was received, the observation of the Client Request Service events can +* return one of the following codes: +* +* - EhspsGetODTUpdateStatus - Theme status was changed. Client must reset rendering and request theme +* again. +* - EhspsGetODTUpdateHot - Theme was updated. Client should reload the theme and then do the +* rendering again. +* +* Rendering Engine can get information of the theme resources through the ChspsResource-objects +* delivered on the resource list in ODT. When ChspsODT-object's DOM-document has a reference to +* some resource-URL, the access method to the resource can be found in ChspsResource-object. +* When access-method is resolved, client should call hspsAccessResourceFile() function with resource +* file path and empty RFile-handle. In successful cases, valid file handle to the associated +* resource file is returned. +* This functionality is arranged by the means of Symbian 9.0 EKA2 Kernel's support for Platform +* Security Concept. The return code can be one of the following: +* - EhspsAccessResourceFileSuccess - request to get access to a theme resource file was successful. +* - EhspsAccessResourceFileFailed - request to get access to a theme resource file was unsuccessful +* possible in due to a security fault. +* +* Client Request Service functions may also return one of the following codes: +* - EhspsServiceRequestSheduled, or +* - EhspsServiceRequestError. +* +* For explanation of the meanings of these messages, see ThspsServiceCompletedMessage-documentation. +* +* @ingroup group_hspsserversession +* @lib hspsThemeServer.exe +* @since S60 5.0 +*/ +class ChspsClientRequestHandler : public CBase, + public MhspsClientRequestService, + public MhspsDefinitionRepositoryObserver, + public MhspsCenRepObserver + + { + public: // Constructors and destructor + /** + * NewL + * + * @since S60 5.0 + */ + static ChspsClientRequestHandler* NewL( ChspsThemeServer& aThemeServer ); + /** + * NewLC + * + * @since S60 5.0 + */ + static ChspsClientRequestHandler* NewLC( ChspsThemeServer& aThemeServer ); + + /** + * ~ChspsClientRequestHandler + * Destructor. + */ + ~ChspsClientRequestHandler(); + + public: // New functions + /** + * ServiceGetOdtL + * + * @since S60 5.0 + * @param aMessage contains the data received from the client + */ + void ServiceGetOdtL(const RMessage2& aMessage); + /** + * ServiceGetOdtUpdateL + * + * @since S60 5.0 + * @param aMessage contains the data received from the client + */ + void ServiceGetOdtUpdateL(const RMessage2& aMessage); + /** + * ServiceAccessResourceFileL + * + * @since S60 5.0 + * @param aMessage contains the data received from the client + */ + void ServiceAccessResourceFileL(const RMessage2& aMessage); + + /** + * Finnishes installation of application configurations + * @since S60 5.0 + * @param aAppODT is an ODT instance of an application configuration + */ + void HandlePluginReferencesL( + ChspsODT& aAppODT ); + +#ifdef HSPS_LOG_ACTIVE + /** + * SetLogBus + * + * @since S60 5.0 + * @param aLogBus Log bus to be set. + */ + void SetLogBus( ChspsLogBus* aLogBus ); +#endif + + public: // From MhspsClientRequestService + + /** + * From MhspsClientRequestService hspsGetODT + * @since S60 3.1 + * @param aAppUid is the UID of the application for which the theme is requested for. + * @param aODT is an empty ChspsODT-object in where the theme is expected to be placed when + * the call returns. + * @return ThspsServiceCompletedMessage expressing the result of the call. + */ + ThspsServiceCompletedMessage hspsGetODT(TInt aAppUid, ChspsODT& aODT); + + /** + * From MhspsClientRequestService hspsGetODT + * @since S60 3.1 + * @param aAppUid is the UID of the application for which the theme is requested for. + * @param aODT is an empty ChspsODT-object in where the theme is expected to be placed when + * the call returns. + * @param aResourceList is an empty list-object able to contain ChspsResource-objects. + * On return of the call, every resource object on the list will describe a resource + * belonging to the theme in hand. + * @return ThspsServiceCompletedMessage expressing the result of the call. + * + * DEPRECATED + */ + ThspsServiceCompletedMessage hspsGetODT(TInt aAppUid, ChspsODT& aODT, + CArrayPtrSeg& aResourceList); + + /** + * From MhspsClientRequestService hspsGetODTUpdate + * @since S60 3.1 + * @return ThspsServiceCompletedMessage expressing the result of the call. + */ + ThspsServiceCompletedMessage hspsGetODTUpdate(); + + /** + * From MhspsClientRequestService hspsCancelGetODTUpdate + * @since S60 3.1 + * @return ThspsServiceCompletedMessage telling the result of the call. + */ + ThspsServiceCompletedMessage hspsCancelGetODTUpdate(); + + /** + * From MhspsClientRequestService hspsAccessResourceFile + * @since S60 3.1 + * @param aResourceFileName is the path for resource file to requested. Resource file name is + * given in every ChspsResource-object listed on the resource list. + * @param aFile is an empty RFile object which a valid file handle to the resourec file will + * be placed on return. + * The file access is arranged by means of Symbian 9.0 EKA2 Platform Security file + * handle sharing concept. + * @return ThspsServiceCompletedMessage expressing the result of the call. + */ + ThspsServiceCompletedMessage hspsAccessResourceFile( + const TDesC& /*aResourceFileName*/, + const ThspsConfiguration& /*aConfiguration*/, + RFile& /*aFile*/ ); + + public: // from MhspsDefinitioRepositoryObserver + + TBool HandleDefinitionRespositoryEvent( ThspsRepositoryInfo aRepositoryInfo ); + + public: // from MhspsCenRepObserver + + void HandleCenRepChangeL( const TUint32 aId ); + + protected: + /** + * ChspsClientRequestHandler + * C++ default constructor. + * @since S60 5.0 + */ + ChspsClientRequestHandler( ChspsThemeServer& aThemeServer ); + + /** + * ConstructL + * By default Symbian 2nd phase constructor is private + * @since S60 5.0 + */ + void ConstructL(); + + private: + + /** + * RestoreDefaultL + * + * @since S60 3.1 + */ + void RestoreDefaultL( ChspsODT& aOdt ); + + /** + * CallGetODTPathL + * + * @since S60 5.0 + */ + void CallGetODTPathL( ChspsODT& aSearchMask, TDes& aODTPath ); + + /** + * CompleteRequest + * + * @since S60 5.0 + */ + void CompleteRequestL(const ThspsServiceCompletedMessage aReturnMessage, + RMessagePtr2& aMessagePtr, const TDesC8& aHeaderData = KNullDesC8 ); + + /** + * RestoreValidThemeL + * Restores operator/licensee default theme + * @since S60 3.1 + * @param aCorruptedOdt Odt which failed to render + */ + void RestoreValidThemeL(ChspsODT& aCorruptedOdt); + + /** + * HandleDefinitionRespositoryEventL + * + * @since S60 5.0 + */ + + TBool HandleDefinitionRespositoryEventL( ThspsRepositoryInfo aRepositoryInfo ); + + /** + * Finds plug-in references from the provided application configuration and append + * XML document with plug-ins specific XML. + * Applies to plug-in configurations of type "application configuration" only. + * @param aAppODT is an ODT instance of an application configuration + */ + void AppendPluginConfigurationsL( + ChspsODT& aAppODT ); + + /** + * Appends missing plugin with a dummy configuration where status="Error" + * @since S60 5.0 + * @param aAppDom is a DOM of an application configuration + * @param aMissingPluginNode is a plug-in node which was not found from the Plugin Repository + * @param aPluginUid is an UID of the missing plugin + */ + void AddErrorConfigurationL( + ChspsDomDocument& aAppDom, + ChspsDomNode& aMissingPluginNode, + const TInt aPluginUid ); + + /** + * Prepare given ChspsRequestNotificationParams for sending. + * + * @since S60 5.0 + * @param aInfo Info to build params from. + * @param aMessage Completed message. + */ + void PrepareAndCompleteRequestL( const ThspsRepositoryInfo& aInfo, + const ThspsServiceCompletedMessage& aMessage ); + + /** + * Finds plug-in's initial settings from the provided root configuration and modify + * plugin specific settings with these initial settings. + * + * @since S60 5.0 + * @param aAppODT is an ODT instance of an application configuration + * @return KErNone if succeed + */ + TInt AppendInitialSettingsL( ChspsODT& aAppODT ); + + /** + * Parse initial settings items. + * + * @since S60 5.0 + * @param aInitialSettingsNode Initial settings node to be parsed(source node). + * @param aSettingsNode Actual settings node(target node) where to initial settings needs to be copied. + * @return KErNone if succeed + */ + TInt ParseInitialSettingsItemsL( ChspsDomNode& aInitialSettingsNode,ChspsDomNode& aSettingsNode); + + /** + * Handling initial settings property nodes. + * + * @since S60 5.0 + * @param aPropertyNode Initial settings property node(property source node). + * @param aNode Target node. + * @return KErNone if succeed + */ + TInt HandlePropertyNodeL( ChspsDomNode& aPropertyNode,ChspsDomNode& aNode ); + + /** + * Handling attributes. + * + * @since S60 5.0 + * @param aAttrName Attribute name. + * @param aAttrValue Attribute value. + * @param aNode Target property node. + * @return KErNone if succeed. + */ + TInt HandlePropertyAttributesL(const TDesC8& aAttrName, + const TDesC8& aAttrValue, + ChspsDomNode& aNode ); + + /** + * Finds a root node for liw structure from dom document by identifier + * + * @since S60 5.0 + * @param aNodeIdentifier An Tag. + * @param aNodeIdentifier An Identifier. + * @param aNode A Dom Node where the node is searched from. + * @return Result node. + */ + ChspsDomNode& FindRootNodeByIdentifierL( const TDesC8& aNodeTag, + const TDesC8& aNodeIdentifier, + ChspsDomNode& aNode ); + + protected: // Functions from base classes + + + private: // Data + // the next member variables should be used in asynchronous message handling only + RMessagePtr2 iMessagePtr; + TFileName iODTPath; + + // tells to restore default in repeated theme load cases + TBool iRestoreDefault; + ChspsResult* iResult; + TBuf8 iResultData; + ChspsRequestNotificationParams* iReqNotifParams; + TBuf8 iReqNotifData; + HBufC8* iRequestData; + + // Index of the requested function + ThspsServiceRequestMessage iRequestMessage; + + ThspsServiceCompletedMessage iCompletedMessage; + TTime iLastHeaderListUpdateTime; + TTime iLastSuccessThemeLoadTime; + // application or interface uid + TUint iRootUid; + // theme uid from the most recent request + TUint iActiveThemeUid; + TUint iSecureId; + ChspsODT* iOdt; + RFs iFs; + TInt iThemeLoadRepeatCount; + // ownership of the next objects is held by ChspsThemeServer + ChspsThemeServer& iThemeServer; + // Reference to central repository + CRepository& iCentralRepository; + // Pointer to Central Repository Listener + ChspsCenRepListener* iCenRepListener; + // Reference to definition repository + ChspsDefinitionRepository& iDefinitionRepository; + // Reference to security enforcer + ChspsSecurityEnforcer& iSecurityEnforcer; + // header list cache + CArrayPtrSeg& iHeaderListCache; + // Reserved pointer for future extension + TAny* iReserved; + +#ifdef HSPS_LOG_ACTIVE + // Log bus to be used. Not owned. + ChspsLogBus* iLogBus; +#endif + }; + +#endif //__hspsCLIENTREQUESTHANDLER_H__ + +// end of file +