diff -r 6757f1e2efd2 -r 5b858729772b devicediagnostics/diagplugins/diagbrowserplugin/inc/diagbrowserpluginmodel.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/devicediagnostics/diagplugins/diagbrowserplugin/inc/diagbrowserpluginmodel.h Wed Sep 01 12:31:32 2010 +0100 @@ -0,0 +1,357 @@ +/* +* Copyright (c) 2007 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: This is the declaration of the Browser Test Plugin Model. +* +*/ + + +#ifndef DIAGBROWSERPLUGINMODEL_H +#define DIAGBROWSERPLUGINMODEL_H + +// System Include Files +#include // CActive +#include // TCommDbConnPref +#include // RSocketServ, RConnection +#include // RHTTPSession +#include // RHTTPTransaction +#include // MHTTPTransactionCallback +#include // CDiagResultsDatabaseItem +#include // MDiagLogEventEraserObserver +#include +// Forward Declarations +class MDiagBrowserPluginModelObserver; +class CPeriodic; +class CDiagLogEventEraser; +class RCmConnectionMethod; + +// Local Constants +const TInt KMaxStringLength = ( 512 ); + +/** + * Diagnostics Browser Test Plugin Model. + * This class defines the model for the browser test plugin. This class is + * used to validate end-to-end browser (HTTP) functionality. + * + * @lib euser.lib + * @lib commonengine.lib + * @lib centralrepository.lib + * @lib cmmanager.lib + * @lib commdb.lib + * @lib inetprotutil.lib + * @lib http.lib + * @lib esock.lib + * @lib flogger.lib + * @lib logcli.lib + * @lib diagframework.lib + */ +class CDiagBrowserPluginModel : public CActive, + public MHTTPTransactionCallback, + public MDiagLogEventEraserObserver, + public MProgressDialogCallback + { + +public: // New functions + + /** + * Two-phased constructor. + * + * @param aObserver The model observer to report events to. + * @return An instance of CDiagBrowserPluginModel. + */ + static CDiagBrowserPluginModel* NewL( + MDiagBrowserPluginModelObserver& aObserver ); + + /** + * Destructor. + */ + ~CDiagBrowserPluginModel(); + + /** + * Initiates the browser test. + */ + void RunBrowserTestL(); + + /** + * Returns the total number of execution steps. + * + * @return The total number of execution steps. + */ + static TUint TotalSteps(); + + +private: // Data types + + /** + * Enumerates the states in the browser test. These are also used to + * report test progress information. + */ + enum TDiagBrowserState + { + EDiagBrowserStateInitial = 0, + EDiagBrowserStateConnectingBearer, + EDiagBrowserStateConnectingServer, + EDiagBrowserStateErasingLog, + EDiagBrowserStateMax + }; + + /** + * Holds information about the connection methods used in the test. + */ + struct TBrowserConnectionMethodData + { + /** The access point of this connection method. */ + TBuf< KMaxStringLength > iApn; + + /** The name of this connection method. */ + TBuf< KMaxStringLength > iMethodName; + + /** The access point id of this connection method. */ + TUint iApId; + + /** Indicates if this connection method contains valid data. */ + TBool iIsValid; + + /** Indicates if this connection method was attempted. */ + TBool iUsed; + }; + + +private: // New functions + + /** + * The default constructor. + */ + CDiagBrowserPluginModel( MDiagBrowserPluginModelObserver& aObserver ); + + /** + * Two-phased constructor. + */ + void ConstructL(); + + /** + * Reads and stores the browser test's Central Repository Keys. + * + * @return ETrue if the operation succeeded, EFalse otherwise. + */ + TBool ReadCenRepKeysL(); + + /** + * Finds the connection method that corresponds to the data supplied in the + * argument. Updates the argument object with the connection method data. + * + * @param aData The connection method data to search with and update. + */ + void GetConnectionMethodL( TBrowserConnectionMethodData& aData ); + + /** + * Checks if the connection method matches the data supplied in the + * argument. Updates the argument object with the connection method data. + * + * @param aMethod The connection method to compare with. + * @param aData The connection method data to search with and update. + */ + void CheckConnectionMatchL( const RCmConnectionMethod& aMethod, + TBrowserConnectionMethodData& aData ) const; + + /** + * Starts or resets the connection timeout timer. + */ + void StartConnectionTimerL(); + + /** + * Updates the plugin's state and reports progress to the observer. + * + * @param aTargetState The new state to transition to. + */ + void SetStateL( TDiagBrowserState aTargetState ); + + /** + * Callback function for handling timer events. + * + * @param aPtr A pointer to the instance of the browser test model. + * @return An error code for the CPeriodic framework. + */ + static TInt TimerExpired( TAny* aPtr ); + + /** + * Opens the network connection. May be called multiple times if a retry + * is necessary. + * + * @return ETrue if the operation succeeded, EFalse otherwise. + */ + TBool OpenAndStartConnectionL(); + + /** + * Handles ending the test by deleting the logs, if necessary, and + * informing the observer. + * + * @param aResult The test result to complete with. + */ + void HandleTestEndL( CDiagResultsDatabaseItem::TResult aResult ); + + /** + * Retries the connection on the secondary access point, if available, or + * fails the test. + */ + void RetryConnectionL(); + + /** + * Wait Dialog + * + */ + void ShowProgressNoteL(); + void TimerCleanUp(); + +private: // from MProgressDialogCallback + + /** + * Called when the progress dialog is dismissed. + * + * @param aButtonId - indicate which button made dialog to dismiss + */ + virtual void DialogDismissedL( TInt aButtonId ); + +private: // From base class CActive + + /** + * From CActive. + * Handles active object completion events. + */ + virtual void RunL(); + + /** + * From CActive. + * Handles leaves in the active object's RunL function. + */ + virtual TInt RunError( TInt aError ); + + /** + * From CActive. + * Handle active object cancel event. + */ + virtual void DoCancel(); + + +private: // From base class MHTTPTransactionCallback + + /** + * From MHTTPTransactionCallback. + * Called when an event occurs on an HTTP transaction. + * + * @param aTransaction The transaction the event occured on. + * @param aEvent The event that occurred. + */ + virtual void MHFRunL( RHTTPTransaction aTransaction, + const THTTPEvent& aEvent ); + + /** + * From MHTTPTransactionCallback. + * Called when an error occurs on an HTTP transaction. + * + * @param aError The error code. + * @param aTransaction The transaction the error occured on. + * @param aEvent The event that occurred. + * @return An error code indicating if this error was handled. + */ + virtual TInt MHFRunError( TInt aError, + RHTTPTransaction aTransaction, + const THTTPEvent& aEvent ); + + +private: // From base class MDiagLogEventEraserObserver + + /** + * This function is called to check if the log event needs to be deleted. + * + * @param aEvent The event to check. + * @return ETrue if the log event should be deleted, EFalse otherwise. + */ + virtual TBool IsEventToBeDeleted( const CLogEvent& aEvent ); + + /** + * This function is called to notify that the erase operation is complete. + * + * @param aError Error code to indicate erase failure, or KErrNone. + */ + virtual void CompleteEventEraseL( TInt aError ); + + +private: // Data + + /** The socket server session used by the test. */ + RSocketServ iSocketServ; + + /** The network connection used by the test. */ + RConnection iConnection; + + /** The HTTP session used by the test. */ + RHTTPSession iHttpSession; + + /** The HTTP transaction used by the test. */ + RHTTPTransaction iHttpTransaction; + + /** The connection preferences, used to establish the data connection. */ + TCommDbConnPref iConnectionPrefs; + + /** The timeout timer. Own. */ + CPeriodic* iTimer; + + /** The log eraser, used to remove the data usage from the OS log. Own. */ + CDiagLogEventEraser* iLogEraser; + + /** The state of the test. */ + TDiagBrowserState iState; + + /** The time testing started. Used to filter logs for deletion. */ + TTime iStartTime; + + /** The primary connection method's data. */ + TBrowserConnectionMethodData iPrimaryConnection; + + /** The secondary connection method's data. */ + TBrowserConnectionMethodData iSecondaryConnection; + + /** The address of the proxy server to use (from CenRep). */ + TBuf< KMaxStringLength > iProxyAddress; + + /** The port of the proxy server to use (from CenRep). */ + TInt iProxyPort; + + /** The timeout value to use (from CenRep). */ + TInt iTimeoutValue; + + /** The web page to retrieve (from CenRep). */ + TBuf< KMaxStringLength > iUri; + + /** The test result to return. Used to hold the result while deleting logs + * asynchronously. + */ + CDiagResultsDatabaseItem::TResult iResult; + + /** The model's observer, where events are reported. */ + MDiagBrowserPluginModelObserver& iObserver; + // Retrycount + TInt iRetryCount,iTimerCalled; + + /** + * + * Wait Dialog + * + */ + + CAknWaitDialog* iWaitDialog; + TBool idialogOn,idialogDismissed; + }; + +#endif // DIAGBROWSERPLUGINMODEL_H