--- a/wlanutilities/wlansniffer/model/src/wsfapplauncher.cpp Thu Aug 19 10:59:40 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,518 +0,0 @@
-/*
-* Copyright (c) 2007-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: Implementation of CWsfAppLauncher
-*
-*/
-
-
-
-
-// EXTERNAL INCLUDES
-#include <apgtask.h>
-#include <apgcli.h>
-#include <centralrepository.h>
-#include <browseruisdkcrkeys.h>
-#include <cmmanager.h>
-#include <cmconnectionmethod.h>
-
-// CLASS HEADER
-#include "wsfapplauncher.h"
-
-// INTERNAL INCLUDES
-#include "wsfbrowserlaunchobserver.h"
-#include "wsflogger.h"
-
-
-// LOCAL DEFINITIONS
-/**
-* Delay that we wait for the browser to start or terminate
-*/
-static const TInt KTimerTickInterval = 2 * 1000 * 1000;
-
-/**
-* Repository key ID for the browser's homepage URL
-*/
-static const TUint32 KBrowserNGHomepageURL = 0x00000030;
-
-
-#ifdef _DEBUG
- _LIT( KBrowserLauncherPanic, "CWsfAppLauncher" );
- #define _ASSERTD( cond ) __ASSERT_DEBUG( (cond), \
- User::Panic( KBrowserLauncherPanic, __LINE__) )
-#else
- #define _ASSERTD( cond ) {}
-#endif //_DEBUG
-
-
-// ---------------------------------------------------------------------------
-// CWsfAppLauncher::NewL
-// ---------------------------------------------------------------------------
-//
-EXPORT_C CWsfAppLauncher* CWsfAppLauncher::NewL()
- {
- CWsfAppLauncher* self = CWsfAppLauncher::NewLC();
- CleanupStack::Pop( self );
- return self;
- }
-
-
-// ---------------------------------------------------------------------------
-// CWsfAppLauncher::NewLC
-// ---------------------------------------------------------------------------
-//
-EXPORT_C CWsfAppLauncher* CWsfAppLauncher::NewLC()
- {
- CWsfAppLauncher* self = new( ELeave ) CWsfAppLauncher();
- CleanupStack::PushL( self );
- self->ConstructL();
- return self;
- }
-
-
-// ---------------------------------------------------------------------------
-// CWsfAppLauncher::~CWsfAppLauncher
-// ---------------------------------------------------------------------------
-//
-CWsfAppLauncher::~CWsfAppLauncher()
- {
- Cancel();
- delete iURL;
- delete iRepository;
- iTimer.Close();
- iWsSession.Close();
- }
-
-
-// ---------------------------------------------------------------------------
-// CWsfAppLauncher::CWsfAppLauncher
-// ---------------------------------------------------------------------------
-//
-CWsfAppLauncher::CWsfAppLauncher():
- CActive( CActive::EPriorityStandard ),
- iIapId( 0 ),
- iLaunchState( EIdle ),
- iLaunchBookMarks( EFalse )
- {
- }
-
-
-// ---------------------------------------------------------------------------
-// CWsfAppLauncher::ConstructL
-// ---------------------------------------------------------------------------
-//
-void CWsfAppLauncher::ConstructL()
- {
- LOG_ENTERFN( "CWsfAppLauncher::ConstructL" );
- iBrowserUid = KCRUidBrowser;
- iHomepageKey = KBrowserNGHomepageURL;
- iBrowserStartingPageKey = KBrowserNGHomepageType;
-
- // Common settings for both browsers
- iRepository = CRepository::NewL( KCRUidBrowser );
-
- User::LeaveIfError( iWsSession.Connect() );
- User::LeaveIfError( iTimer.CreateLocal() );
-
- iURL = KNullDesC().AllocL();
- CActiveScheduler::Add( this );
- }
-
-
-// ---------------------------------------------------------------------------
-// CWsfAppLauncher::LaunchBrowserL
-// ---------------------------------------------------------------------------
-//
-void CWsfAppLauncher::LaunchBrowserL( MWsfBrowserLaunchObserver& aObserver,
- TUint aIapId,
- const TDesC& aURL )
- {
- LOG_ENTERFN( "CWsfAppLauncher::LaunchBrowserL_3" );
- Cancel();
- LOG_WRITE( "CWsfAppLauncher::LaunchBrowserL_3 -->> afer cancel" );
- iObserver = &aObserver;
- iIapId = aIapId;
- HBufC* url = aURL.AllocL();
- delete iURL;
- iURL = url;
-
- iLaunchState = EIdle;
- LOG_WRITE( "CWsfAppLauncher::LaunchBrowserL_3 -->> before set active" );
- SetActive();
- TRequestStatus* status = &iStatus;
- User::RequestComplete( status, KErrNone );
- }
-
-
-// ---------------------------------------------------------------------------
-// CWsfAppLauncher::LaunchBrowserL
-// ---------------------------------------------------------------------------
-//
-void CWsfAppLauncher::LaunchBrowserL( MWsfBrowserLaunchObserver& aObserver,
- TUint aIapId )
- {
- LOG_ENTERFN( "CWsfAppLauncher::LaunchBrowserL_2" );
- LOG_WRITEF( "CWsfAppLauncher::LaunchBrowserL_2 -->> iIapid %d", aIapId );
- HBufC* url = HBufC::NewLC(
- NCentralRepositoryConstants::KMaxUnicodeStringLength );
- TPtr urlPtr( url->Des() );
-
- iLaunchBookMarks = EFalse;
-
- RCmManager cmManager;
-
- cmManager.OpenL();
- LOG_WRITE( "CWsfAppLauncher::LaunchBrowserL_2 -->> cmmanager opened" );
- CleanupClosePushL( cmManager );
-
- RCmConnectionMethod plugin;
- CleanupClosePushL( plugin );
- LOG_WRITE( "CWsfAppLauncher::LaunchBrowserL_2 -->> cm before open" );
- LOG_WRITEF( "CWsfAppLauncher::LaunchBrowserL_2 -->> iIapid %d", aIapId );
- plugin = cmManager.ConnectionMethodL( aIapId );
- LOG_WRITE( "CWsfAppLauncher::LaunchBrowserL_2 -->> cm after open" );
-
- // do we have start page for Access Point?
- HBufC* apHomepage = NULL;
- apHomepage = plugin.GetStringAttributeL( CMManager::ECmStartPage );
- LOG_WRITE( "CWsfAppLauncher::LaunchBrowserL_2 -->> String Attrib got" );
- CleanupStack::PushL( apHomepage );
-
- if( apHomepage->Length() == 0 )
- {
- LOG_WRITE( "CWsfAppLauncher::LaunchBrowserL_2 -->> hplength = 0" );
- // if we can't have Access Point URL then
- // we try to get browser homepage URL
- TInt err = BrowserHomepage( urlPtr );
-
- // if browser homepage is not defined either,
- // launch bookmarks view
- if ( err || url->Length() == 0 )
- {
- LOG_WRITE(
- "CWsfAppLauncher::LaunchBrowserL_2 -->> err in url length" );
- iLaunchBookMarks = ETrue;
- }
- }
- else
- {
- LOG_WRITE( "CWsfAppLauncher::LaunchBrowserL_2 -->> hplength>0" );
- url->Des().Copy( *apHomepage );
- }
-
- LaunchBrowserL( aObserver, aIapId, *url );
-
- LOG_WRITE( "CWsfAppLauncher::LaunchBrowserL_2 -->> after launch _3" );
- CleanupStack::PopAndDestroy( apHomepage );
- CleanupStack::PopAndDestroy( &plugin );
- CleanupStack::PopAndDestroy( &cmManager );
- CleanupStack::PopAndDestroy( url );
- }
-
-
-// ---------------------------------------------------------------------------
-// CWsfAppLauncher::DoLaunchBrowserL
-// ---------------------------------------------------------------------------
-//
-void CWsfAppLauncher::DoLaunchBrowserL()
- {
- LOG_ENTERFN( "CWsfAppLauncher::DoLaunchBrowserL" );
- _LIT( KFormatCommand, "%d %S" );
- const TInt KBrowserFirstParamUrlFollows = 4;
-
- iLaunchState = EStartingUp;
- HBufC* param = NULL;
- if ( iLaunchBookMarks )
- {
- param = KNullDesC().AllocLC();
- }
- else
- {
- param = HBufC::NewLC( KFormatCommand().Length() + iURL->Length() );
- param->Des().Format( KFormatCommand,
- KBrowserFirstParamUrlFollows, iURL );
- }
-
- RApaLsSession appArcSession;
- User::LeaveIfError( appArcSession.Connect() ); // connect to AppArc server
- CleanupClosePushL( appArcSession );
-
- User::LeaveIfError( appArcSession.StartDocument( *param, iBrowserUid,
- iThreadId ) );
-
- CleanupStack::PopAndDestroy( &appArcSession );
- CleanupStack::PopAndDestroy( param );
-
-
- iTimer.Cancel();
- iTimer.After( iStatus, KTimerTickInterval );
- SetActive();
- }
-
-
-// ---------------------------------------------------------------------------
-// CWsfAppLauncher::BrowserExists
-// ---------------------------------------------------------------------------
-//
-TBool CWsfAppLauncher::BrowserExists()
- {
- LOG_ENTERFN( "CWsfAppLauncher::BrowserExists" );
- TApaTaskList taskList( iWsSession );
- TApaTask startedtask = taskList.FindApp( iBrowserUid );
- return startedtask.Exists();
- }
-
-
-// ---------------------------------------------------------------------------
-// CWsfAppLauncher::BrowserHomepage
-// ---------------------------------------------------------------------------
-//
-TInt CWsfAppLauncher::BrowserHomepage( TDes& aHomePageURL )
- {
- LOG_ENTERFN( "CWsfAppLauncher::BrowserHomepage" );
- CRepository* repository( iRepository );
-
- // get the default starting page setting
- TInt startingPageMode( 0 );
- TInt err = repository->Get( iBrowserStartingPageKey, startingPageMode );
- if ( err == KErrNone )
- {
- switch ( startingPageMode )
- {
- case 1:
- case 2:
- {
- // user defined or current page
- err = repository->Get( iHomepageKey, aHomePageURL );
- break;
- }
- default:
- {
- aHomePageURL.Zero();
- }
- }
- }
-
- return err;
- }
-
-
-// ---------------------------------------------------------------------------
-// CWsfAppLauncher::KillBrowserIfAlreadyExists
-// ---------------------------------------------------------------------------
-//
-TBool CWsfAppLauncher::KillBrowserIfAlreadyExists()
- {
- LOG_ENTERFN( "CWsfAppLauncher::KillBrowserIfAlreadyExists" );
- _ASSERTD( iLaunchState == EIdle);
- _ASSERTD( !IsActive() );
-
- TBool killing = EFalse;
-
- TApaTaskList taskList( iWsSession );
- TApaTask task = taskList.FindApp( iBrowserUid );
-
- if ( task.Exists() )
- {
- // kill the browser...
- task.EndTask();
- killing = ETrue;
-
- iTimer.Cancel();
- iTimer.After( iStatus, KTimerTickInterval );
- }
- else
- {
- TRequestStatus* status = &iStatus;
- User::RequestComplete( status, KErrNone );
- }
-
- SetActive();
- iLaunchState = EShuttingDown;
- return killing;
- }
-
-
-// ---------------------------------------------------------------------------
-// CWsfAppLauncher::ContinueBrowsingL
-// ---------------------------------------------------------------------------
-//
-void CWsfAppLauncher::ContinueBrowsingL()
- {
- LOG_ENTERFN( "CWsfAppLauncher::ContinueBrowsingL_0" );
- //Check if the application is already running
- TBool exists = BrowserExists();
- if ( exists )
- {
- TApaTaskList taskList( iWsSession );
- TApaTask task = taskList.FindApp( iBrowserUid );
- task.BringToForeground();
- }
- else
- {
- User::Leave( KErrNotFound );
- }
- }
-
-
-// ---------------------------------------------------------------------------
-// CWsfAppLauncher::ContinueBrowsingL
-// ---------------------------------------------------------------------------
-//
-void CWsfAppLauncher::ContinueBrowsingL( MWsfBrowserLaunchObserver& aObserver,
- TUint aIapId )
- {
- LOG_ENTERFN( "CWsfAppLauncher::ContinueBrowsingL_2" );
- //Check if the application is already running
- TBool exists = BrowserExists();
- if ( exists )
- {
- TApaTaskList taskList( iWsSession );
- TApaTask task = taskList.FindApp( iBrowserUid );
- task.BringToForeground();
- }
- else // browser not running - launch browser
- {
- LaunchBrowserL( aObserver, aIapId );
- }
- }
-
-
-// ---------------------------------------------------------------------------
-// CWsfAppLauncher::Launching
-// ---------------------------------------------------------------------------
-//
-TWsfLaunchState CWsfAppLauncher::Launching()
- {
- LOG_ENTERFN( "CWsfAppLauncher::Launching" );
- return iLaunchState;
- }
-
-
-// ---------------------------------------------------------------------------
-// CWsfAppLauncher::BrowserIap
-// ---------------------------------------------------------------------------
-//
-TUint32 CWsfAppLauncher::BrowserIap() const
- {
- return iIapId;
- }
-
-
-// ---------------------------------------------------------------------------
-// CWsfAppLauncher::DoCancel
-// ---------------------------------------------------------------------------
-//
-void CWsfAppLauncher::DoCancel()
- {
- LOG_ENTERFN( "CWsfAppLauncher::DoCancel" );
- iThread.LogonCancel( iStatus );
-
- iThread.Close();
- iTimer.Cancel();
- iLaunchState = EIdle;
- }
-
-
-// ---------------------------------------------------------------------------
-// CWsfAppLauncher::RunL
-// ---------------------------------------------------------------------------
-//
-void CWsfAppLauncher::RunL()
- {
- LOG_ENTERFN( "CWsfAppLauncher::RunL" );
- _ASSERTD( iObserver );
- User::LeaveIfError( iStatus.Int() );
-
- switch( iLaunchState )
- {
- case EIdle: // Starting to launch
- {
- LOG_WRITE( "CWsfAppLauncher::RunL -->> EIdle" );
- KillBrowserIfAlreadyExists();
- break;
- }
- case EShuttingDown: // Existing browser was succesfully closed
- {
- LOG_WRITE( "CWsfAppLauncher::RunL -->> EShuttingDown" );
- DoLaunchBrowserL();
- break;
- }
- case EStartingUp: // Start-up completed, check browser exists
- {
- LOG_WRITE( "CWsfAppLauncher::RunL -->> EStartingUp" );
- TBool exists = BrowserExists();
- TInt err = exists ? KErrNone : KErrNotFound;
- iLaunchState = ECompleted;
- TRequestStatus* status = &iStatus;
- User::RequestComplete( status, err );
- SetActive();
- break;
- }
- case ECompleted: //Browser exists, notify observer about completion
- {
- LOG_WRITE( "CWsfAppLauncher::RunL -->> ECompleted" );
- iLaunchState = EFinished;
- LOG_WRITE( "CWsfAppLauncher::RunL -->> Before thread open" );
- User::LeaveIfError( iThread.Open( iThreadId, EOwnerProcess ) );
- LOG_WRITE( "CWsfAppLauncher::RunL -->> Thread opened" );
- iObserver->BrowserLaunchCompleteL();
- TRequestStatus* status = &iStatus;
- iThread.Logon( *status );
- SetActive();
- break;
- }
- case EFinished: //Browser exists, notify observer about completion
- {
- LOG_WRITE( "CWsfAppLauncher::RunL -->> EFinished" );
- iObserver->BrowserExitL();
- iLaunchState = EIdle;
- break;
- }
- default:
- {
- _ASSERTD( EFalse );
- }
- }
- }
-
-// ---------------------------------------------------------------------------
-// CWsfAppLauncher::RunError
-// ---------------------------------------------------------------------------
-//
-TInt CWsfAppLauncher::RunError( TInt aError )
- {
- LOG_ENTERFN( "CWsfAppLauncher::RunError" );
- _ASSERTD( iObserver );
-
- switch( iLaunchState )
- {
- case EIdle: //
- case EShuttingDown: // Shuttind down existing browser failed
- case EStartingUp: // Starting up new browser failed
- case ECompleted: // Starting up new browser failed
- {
- iObserver->BrowserLaunchFailed( aError );
- break;
- }
- default:
- {
- _ASSERTD( EFalse );
- }
- }
-
- iLaunchState = EIdle;
- return aError;
- }
-
-