diff -r 5dedbccec665 -r 5c11946e75b3 browserui/browser/BrowserAppSrc/BrowserAppUi.cpp --- a/browserui/browser/BrowserAppSrc/BrowserAppUi.cpp Mon Mar 15 12:40:52 2010 +0200 +++ b/browserui/browser/BrowserAppSrc/BrowserAppUi.cpp Wed Mar 31 21:35:49 2010 +0300 @@ -107,6 +107,12 @@ #include "BrowserPushMtmObserver.h" +#ifdef BRDO_IAD_UPDATE_ENABLED_FF +#include +#include +#include +#endif + //CONSTANTS const TUint KBookmarkId = 1; const TUint KUrlId = 4; @@ -124,6 +130,14 @@ const TInt KMinimumCDriveDiskSpace = 512 * 1024; +const TInt KRetryConnectivityTimeout( 2*1000*1000 ); // 2 seconds + +#ifdef BRDO_IAD_UPDATE_ENABLED_FF +const TUint KBrowser8xUID = 0x200267CC; +_LIT( KUpdateFileName, "lastupdatechecked.txt" ); +const TInt64 KMaxTimeToPostponeUpdate = 604800000000; +#endif + // ================= MEMBER FUNCTIONS ======================= // ----------------------------------------------------------------------------- @@ -158,6 +172,10 @@ { LOG_ENTERFN("CBrowserAppUi::~CBrowserAppUi"); +#ifdef BRDO_IAD_UPDATE_ENABLED_FF + iFs.Close(); +#endif + SetExitInProgress( ETrue ); if(iBrowserAsyncExit) { @@ -234,6 +252,9 @@ iFavouritesSess.Close(); LOG_WRITE( " iFavouritesSess.Close() deleted" ); +#ifdef BRDO_IAD_UPDATE_ENABLED_FF + CleanUpdateParams(); +#endif } // ----------------------------------------------------------------------------- @@ -264,11 +285,159 @@ iStartedUp = EFalse; LOG_WRITE( "Browser started embedded" ); } - +#ifdef BRDO_IAD_UPDATE_ENABLED_FF + User::LeaveIfError(iFs.Connect()); + // Check updates from IAD, continue UI launching even if something fails there + TRAP_IGNORE( CheckUpdatesL() ); +#endif + PERFLOG_STOP_WRITE("BrowserUI::ConstructL"); } - +#ifdef BRDO_IAD_UPDATE_ENABLED_FF +// --------------------------------------------------------- +// CBrowserAppUi::CheckUpdatesL +// --------------------------------------------------------- +void CBrowserAppUi::CheckUpdatesL() + { + LOG_ENTERFN("CBrowserAppUi::CheckUpdatesL"); + LOG_WRITE( "CBrowserAppUi::CheckUpdatesL() entering" ); + if ( FeatureManager::FeatureSupported( KFeatureIdIAUpdate ) ) + { + LOG_WRITE( "CBrowserAppUi::CheckUpdatesL() IAD Update supported" ); + TRAP_IGNORE( iUpdate = CIAUpdate::NewL( *this ) ); + LOG_WRITE( "CBrowserAppUi::CheckUpdatesL() IAD Update Client Created" ); + if ( iUpdate ) + { + LOG_WRITE( "CBrowserAppUi::CheckUpdatesL() creating IAD Update paramentes" ); + iParameters = CIAUpdateParameters::NewL(); + // Search for updates using SIS package UID + iParameters->SetUid( TUid::Uid( KBrowser8xUID ) ); + //check the updates + iUpdate->CheckUpdates( *iParameters ); + } + } + LOG_WRITE( "CBrowserAppUi::CheckUpdatesL() exiting" ); + } + +// --------------------------------------------------------- +// CBrowserAppUi::CheckUpdatesComplete +// rest of the details commented in the header +// --------------------------------------------------------- +// +void CBrowserAppUi::CheckUpdatesComplete( TInt aErrorCode, TInt aAvailableUpdates ) + { + LOG_ENTERFN("CBrowserAppUi::CheckUpdatesComplete"); + LOG_WRITE( "CBrowserAppUi::CheckUpdatesComplete - Entry" ); + TInt err; + TBool result; + TBool showDialog = EFalse; + + if ( aErrorCode == KErrNone ) + { + if ( aAvailableUpdates > 0 ) + { + LOG_WRITE( "CBrowserAppUi::CheckUpdatesComplete - update available" ); + //Check if the file is available in folder or not + if(CheckUpdateFileAvailable()) + { + LOG_WRITE( "CBrowserAppUi::CheckUpdatesComplete - update file available" ); + TTime timenow; + timenow.HomeTime(); + TInt64 time = timenow.Int64(); + TInt64 dataValue = ReadUpdateFile(); + //If the diference of the current time and the Previous Check time is more than 1 Week + //then show the dialog + if((time - dataValue)>KMaxTimeToPostponeUpdate) + { + LOG_WRITE( "CBrowserAppUi::CheckUpdatesComplete - diference of the current time and the time available in th file is more than 7 days" ); + showDialog = ETrue; + } + } + else + { + LOG_WRITE( "CBrowserAppUi::CheckUpdatesComplete - update file is not available" ); + showDialog = ETrue; + } + + if(showDialog) + { + HBufC* message = StringLoader::LoadLC(R_INSTALL_ADDON_BROWSER); + HBufC* lsc_now = StringLoader::LoadLC(R_INSTALL_BROWSER_NOW); + HBufC* rsc_later = StringLoader::LoadLC(R_INSTALL_BROWSER_LATER); + + TRAPD(err, result = iDialogsProvider->DialogConfirmL(_L(""), + *message, + *lsc_now, + *rsc_later)); + + CleanupStack::PopAndDestroy(3); //message, lsc_now, rsc_later + + if (err != KErrNone) + { + return ; + } + if ( result ) // user selected NOW + { + LOG_WRITE( "CBrowserAppUi::CheckUpdatesComplete - if file exists, just delete it." ); + // if file exists, just delete it. + DeleteUpdateFile(); + iUpdate->ShowUpdates( *iParameters ); + } + if ( !result ) // user selected LATER + { + LOG_WRITE( "CBrowserAppUi::CheckUpdatesComplete - create the file and store the current time." ); + //create the file and store the current time. + WriteUpdateFile(); + } + } + LOG_WRITE( "CBrowserAppUi::CheckUpdatesComplete - update available" ); + } + else + { + LOG_WRITE( "CBrowserAppUi::CheckUpdatesComplete - no update available" ); + // The answer was 'Later'. CIAUpdate object could be deleted + CleanUpdateParams(); + } + } + LOG_WRITE( "CBrowserAppUi::CheckUpdatesComplete - Exit" ); + } + +// ----------------------------------------------------------------------------- +// CBrowserAppUi::CleanUpdateParams +// ----------------------------------------------------------------------------- +// +void CBrowserAppUi::CleanUpdateParams() + { + LOG_ENTERFN("CBrowserAppUi::CleanUpdateParams"); + LOG_WRITE( "CBrowserAppUi::CleanUpdateParams() entering" ); + if(iUpdate) + { + delete iUpdate; + iUpdate = NULL; + } + if(iParameters) + { + delete iParameters; + iParameters = NULL; + } + LOG_WRITE( "CBrowserAppUi::CleanUpdateParams() exiting" ); + } + +// --------------------------------------------------------- +// CBrowserAppUi::UpdateComplete +// rest of the details commented in the header +// --------------------------------------------------------- +// +void CBrowserAppUi::UpdateComplete( TInt aErrorCode, CIAUpdateResult* aResult ) + { + LOG_ENTERFN("CBrowserAppUi::UpdateComplete"); + LOG_WRITE( "CBrowserAppUi::UpdateComplete - Entry" ); + delete aResult; // Ownership was transferred, so this must be deleted by the client + CleanUpdateParams(); + LOG_WRITE( "CBrowserAppUi::UpdateComplete - Exit" ); + } +#endif // ----------------------------------------------------------------------------- // CBrowserAppUi::InitBrowser() // ----------------------------------------------------------------------------- @@ -362,6 +531,10 @@ PERFLOG_STOPWATCH_START; iConnStageNotifier = CConnectionStageNotifierWCB::NewL(); + + //this is required, browser's connection oberver should be hit first. (incase of netscape plgins, transactions will be closed.) + iConnStageNotifier->SetPriority(CActive::EPriorityHigh); + PERFLOG_STOP_WRITE("\t StageNotif NewL"); BROWSER_LOG( ( _L( "StageNofier up" ) ) ); @@ -483,6 +656,9 @@ iPushMtmObserver = CBrowserPushMtmObserver::NewL( this ); iPushMtmObserver->StartObserver(); +#ifdef BRDO_OCC_ENABLED_FF + iRetryConnectivity = CPeriodic::NewL(CActive::EPriorityStandard); +#endif } //if (iStartedUp) } @@ -1274,12 +1450,6 @@ (Preferences().AccessPointSelectionMode() == EAlwaysAsk) ) { iRequestedAp = Preferences().DefaultAccessPoint(); -#ifdef BRDO_OCC_ENABLED_FF //Setting ap should not be taken if OCC is enabled, instead bookmark ap should be taken -#ifndef __WINS__ - iRequestedAp = aAccessPoint.ApId(); - BROWSER_LOG( ( _L( "Bookmark Iap id : %d" ), iRequestedAp ) ); -#endif -#endif } else if ( Preferences().AccessPointSelectionMode() == EDestination ) { @@ -2375,6 +2545,8 @@ return; } + BROWSER_LOG( ( _L( " CBrowserAppUi::ConnNeededStatusL First Stop Connection Observer" ) ) ); + StopConnectionObserving(); //Need to stop the connection observer first if ( !iConnStageNotifier->IsActive() ) @@ -2382,8 +2554,9 @@ BROWSER_LOG( ( _L( " CBrowserAppUi::ConnNeededStatusL Starting Connection Observer" ) ) ); TName* connectionName = Connection().ConnectionNameL(); CleanupStack::PushL( connectionName ); - iConnStageNotifier->StartNotificationL( - connectionName, KConnectionUninitialised, this); + + iConnStageNotifier->StartNotificationL(connectionName, KLinkLayerClosed, this); + CleanupStack::PopAndDestroy(); //connectionName } } @@ -2432,7 +2605,88 @@ } return buf; } - + +#ifdef BRDO_OCC_ENABLED_FF +// ----------------------------------------------------------------------------- +// CBrowserContentView::SetRetryFlag +// ----------------------------------------------------------------------------- +// +void CBrowserAppUi::SetRetryFlag(TBool flag) + { + LOG_ENTERFN("CBrowserAppUi::SetRetryFlag"); + BROWSER_LOG( ( _L(" CBrowserAppUi::SetRetryFlag flag: %d"), flag ) ); + reConnectivityFlag = flag; + } + +// ----------------------------------------------------------------------------- +// CBrowserContentView::GetRetryFlag +// ----------------------------------------------------------------------------- +// + TBool CBrowserAppUi::GetRetryFlag() + { + LOG_ENTERFN("CBrowserAppUi::GetRetryFlag"); + BROWSER_LOG( ( _L(" CBrowserAppUi::GetRetryFlag flag: %d"), reConnectivityFlag ) ); + return reConnectivityFlag; + } + +// ----------------------------------------------------------------------------- +// CBrowserContentView::RetryConnectivity +// ----------------------------------------------------------------------------- +// +TInt CBrowserAppUi::RetryConnectivity(TAny* aCBrowserAppUi) + { + LOG_ENTERFN("CBrowserAppUi::RetryConnectivity"); + __ASSERT_DEBUG(aCBrowserAppUi, Util::Panic( Util::EUninitializedData )); + + TInt err = ((CBrowserAppUi*)aCBrowserAppUi)->RetryInternetConnection(); + + BROWSER_LOG( ( _L(" CBrowserAppUi::RetryConnectivity Error: %d"), err ) ); + return err; + } + +TInt CBrowserAppUi::RetryInternetConnection() + { + LOG_ENTERFN("CBrowserAppUi::RetryInternetConnection"); + //First cancel the timer + if ( iRetryConnectivity && iRetryConnectivity->IsActive() ) + { + iRetryConnectivity->Cancel(); + BROWSER_LOG( ( _L( "CBrowserAppUi::RetryInternetConnection Timer Cancelled successfully " ) ) ); + } + TInt err = KErrNone; + if ( !iConnection->Connected() ) + { + TRAP_IGNORE( err = iConnection->StartConnectionL( ETrue ) ); + } + if( err == KErrNone ) + { + BROWSER_LOG( ( _L( "CBrowserAppUi::RetryInternetConnection Connection restablished successfully " ) ) ); + + BROWSER_LOG( ( _L( "CBrowserAppUi::RetryInternetConnection UNSET retry flags " ) ) ); + TRAP_IGNORE( BrCtlInterface().HandleCommandL( (TInt)TBrCtlDefs::ECommandUnSetRetryConnectivityFlag + (TInt)TBrCtlDefs::ECommandIdBase ) ); + SetRetryFlag(EFalse); + + TRAP_IGNORE(ConnNeededStatusL(err)); //Start the observer again + TRAP_IGNORE( BrCtlInterface().HandleCommandL( (TInt)TBrCtlDefs::ECommandRetryTransactions + (TInt)TBrCtlDefs::ECommandIdBase ) ); + //Let download manager knows about this new connection + TRAP_IGNORE( BrCtlInterface().HandleCommandL( (TInt)TBrCtlDefs::ECommandConnToDownloadManager + (TInt)TBrCtlDefs::ECommandIdBase ) ); + } + else + { + BROWSER_LOG( ( _L( "CBrowserAppUi::RetryInternetConnection Connection failed " ) ) ); + BROWSER_LOG( ( _L( "CBrowserAppUi::RetryInternetConnection unset retry flags " ) ) ); + TRAP_IGNORE( BrCtlInterface().HandleCommandL( (TInt)TBrCtlDefs::ECommandUnSetRetryConnectivityFlag + (TInt)TBrCtlDefs::ECommandIdBase ) ); + SetRetryFlag(EFalse); + BROWSER_LOG( ( _L( "CBrowserAppUi::RetryInternetConnection clear queued transactions " ) ) ); + TRAP_IGNORE( BrCtlInterface().HandleCommandL( (TInt)TBrCtlDefs::ECommandClearQuedTransactions + (TInt)TBrCtlDefs::ECommandIdBase ) ); + Display().StopProgressAnimationL(); //Stop Progress animation + iDialogsProvider->UploadProgressNoteL(0, 0, ETrue, (MBrowserDialogsProviderObserver *)this ); //Close the uploading dialog. + iDialogsProvider->CancelAll(); //connection has been lost, so cancel the authentication dialog. + } + + return err; + } +#endif // ----------------------------------------------------------------------------- // CBrowserAppUi::ConnectionStageAchievedL() @@ -2440,6 +2694,24 @@ // void CBrowserAppUi::ConnectionStageAchievedL() { +#ifdef BRDO_OCC_ENABLED_FF + LOG_ENTERFN("CBrowserAppUi::ConnectionStageAchievedL"); + //Disconnect first + BROWSER_LOG( ( _L( "CBrowserAppUi::ConnectionStageAchievedL Disconnecting..." ) ) ); + iConnection->Disconnect(); + + BROWSER_LOG( ( _L( "CBrowserAppUi::ConnectionStageAchievedL Some transactions are on-going. Need to reconnect. " ) ) ); + BROWSER_LOG( ( _L( "CBrowserAppUi::ConnectionStageAchievedL Set retry flags " ) ) ); + TRAP_IGNORE( BrCtlInterface().HandleCommandL( (TInt)TBrCtlDefs::ECommandSetRetryConnectivityFlag + (TInt)TBrCtlDefs::ECommandIdBase ) ); + SetRetryFlag(ETrue); + + if( iRetryConnectivity && iRetryConnectivity->IsActive()) + { + iRetryConnectivity->Cancel(); + } + iRetryConnectivity->Start(KRetryConnectivityTimeout, 0,TCallBack(RetryConnectivity,this)); + +#else // this function is called only when network is lost // because we set notifier for KAgentUnconnected only Display().StopProgressAnimationL(); @@ -2456,6 +2728,7 @@ // not needed as by that point HTTPSession was already shutdown by executing disconnect menu option // will cause a crash when user tries to quickly reconnect right after disconnecting, as HTTP session // is starting to initialize, while this call is trying to close it. +#endif } @@ -4205,5 +4478,102 @@ CloseContentViewL(); } } - +#ifdef BRDO_IAD_UPDATE_ENABLED_FF +// --------------------------------------------------------- +// CBrowserAppUi::CheckUpdateFileAvailable +// --------------------------------------------------------- +TBool CBrowserAppUi::CheckUpdateFileAvailable() + { + TBuf privatePath; + TBuf updateFileName; + iFs.PrivatePath( privatePath ); + updateFileName.Copy( privatePath ); + updateFileName.Append( KUpdateFileName ); + RFile updatefile; + TInt err = updatefile.Open( iFs, updateFileName, EFileRead ); + if ( err == KErrNotFound ) + { + LOG_WRITE( "CBrowserAppUi::CheckUpdateFileAvailable - update file not available" ); + return EFalse; + } + else + { + LOG_WRITE( "CBrowserAppUi::CheckUpdateFileAvailable - update file available" ); + updatefile.Close(); + } + return ETrue; + } + +// --------------------------------------------------------- +// CBrowserAppUi::WriteUpdateFile +// --------------------------------------------------------- +void CBrowserAppUi::WriteUpdateFile() + { + TBuf privatePath; + TBuf updateFileName; + iFs.PrivatePath( privatePath ); + updateFileName.Copy( privatePath ); + updateFileName.Append( KUpdateFileName ); + RFile updatefile; + TInt err = updatefile.Open( iFs, updateFileName, EFileWrite | EFileShareExclusive ); + if(err == KErrNotFound) + { + LOG_WRITE( "CBrowserAppUi::WriteUpdateFile - update file not available so create it" ); + err = updatefile.Create( iFs, updateFileName, EFileWrite | EFileShareExclusive ); + } + //Get the current time + TTime timenow; + timenow.HomeTime(); + TInt64 time = timenow.Int64(); + TBuf8<50> data; + data.AppendNum(time); + LOG_WRITE( "CBrowserAppUi::WriteUpdateFile - write the current time in update file" ); + updatefile.Write(data); + updatefile.Close(); + } + +// --------------------------------------------------------- +// CBrowserAppUi::DeleteUpdateFile +// --------------------------------------------------------- +void CBrowserAppUi::DeleteUpdateFile() + { + TBuf privatePath; + TBuf updateFileName; + iFs.PrivatePath( privatePath ); + updateFileName.Copy( privatePath ); + updateFileName.Append( KUpdateFileName ); + iFs.Delete(updateFileName); + } + +// --------------------------------------------------------- +// CBrowserAppUi::ReadUpdateFile +// --------------------------------------------------------- +TInt64 CBrowserAppUi::ReadUpdateFile() + { + TBool returnvalue = ETrue; + TBuf privatePath; + TBuf updateFileName; + //Get the private path then append the filename + iFs.PrivatePath( privatePath ); + updateFileName.Copy( privatePath ); + updateFileName.Append( KUpdateFileName ); + RFile updatefile; + TInt err = updatefile.Open( iFs, updateFileName, EFileRead ); + TInt64 dataValue = 0; + //If file is found + if ( err != KErrNotFound ) + { + TBuf8<50> readBuf; + err = updatefile.Read(readBuf); + updatefile.Close(); + if((err == KErrNone) && (readBuf.Length()>NULL)) + { + //Convert from TBuf8 to TInt64 + TLex8 lex(readBuf); + lex.Val(dataValue); + } + } + return dataValue; + } +#endif // End of File