browserui/browser/BrowserAppSrc/BrowserLoadObserver.cpp
changeset 51 48e827313edd
parent 37 481242ead638
child 53 f427d27b98d8
--- a/browserui/browser/BrowserAppSrc/BrowserLoadObserver.cpp	Tue Feb 02 00:12:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,645 +0,0 @@
-/*
-* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "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:  Handle special load events such as network connection,
-*                deal with non-http or non-html requests
-*
-*/
-
-
-
-// INCLUDE FILES
-#include "BrowserLoadObserver.h"
-#include "ApiProvider.h"
-#include "Display.h"
-#include "BrowserContentView.h"
-#include "CommonConstants.h"
-#include "BrowserAppUi.h"
-#include "logger.h"
-#include "BrowserWindow.h"
-#include "BrowserWindowManager.h"
-#include "BrowserDialogsProviderProxy.h"
-
-#include <FeatMgr.h>
-#include <mconnection.h>
-#include <browserdialogsprovider.h>
-
-#ifdef I__LOG_EVENT_TIME
-    // defines a local timer with name 'localTime'
-    #define START_TIMER( localTime )  TTime localTime;  localTime.HomeTime();
-    
-    // count the elapsed time based on timer 'localTime'
-    // and increment number of timers called ( numOfTimer )
-    #define STOP_TIMER( localTime, numOfTimer ) \
-        TTime locTime__a;  locTime__a.HomeTime(); \
-        TInt64 updateTime = locTime__a.MicroSecondsFrom( localTime ).Int64(); \
-        LOG_WRITE_FORMAT( "Update time: %d", updateTime ); \
-        ++numOfTimer; \
-        CBrowserLoadObserver::iTotalUpdateTime += updateTime;
-#else  // I__LOG_EVENT_TIME
-    // empty macros
-    #define START_TIMER( a )
-    #define STOP_TIMER( a, b )
-#endif  // I__LOG_EVENT_TIME
-
-// ---------------------------------------------------------
-// CBrowserLoadObserver::NewL()
-// ---------------------------------------------------------
-//
-CBrowserLoadObserver* CBrowserLoadObserver::NewL(
-        MApiProvider& aApiProvider,
-        CBrowserContentView& aContentView,
-        CBrowserWindow& aWindow )
-    {
-    CBrowserLoadObserver* self = 
-        new (ELeave) CBrowserLoadObserver( aApiProvider, aContentView, aWindow );
-    CleanupStack::PushL( self );
-    self->ConstructL( );
-    CleanupStack::Pop();    // self
-    return self;
-    }
-
-// ---------------------------------------------------------
-// CBrowserLoadObserver::~CBrowserLoadObserver()
-// ---------------------------------------------------------
-//
-CBrowserLoadObserver::~CBrowserLoadObserver()
-    {
-    	// iApiProvider, iContentView, iWindow not owned by CBRowserLoadObserver.
-		// invalidate pointer for a cleaner/clearer destruction
-        iApiProvider = NULL;
-        iContentView = NULL;
-		iWindow = NULL;
-    }
-
-// ----------------------------------------------------------------------------
-// CBrowserLoadObserver::HandleBrowserLoadEventL()
-// ----------------------------------------------------------------------------
-//
-void CBrowserLoadObserver::HandleBrowserLoadEventL(
-        TBrCtlDefs::TBrCtlLoadEvent aLoadEvent,
-        TUint aSize,
-        TUint16 aTransactionId)
-    {
-LOG_ENTERFN("CBrowserLoadObserver::HandleBrowserLoadEventL");
-LOG_WRITE_FORMAT(" LoadEvent: %d", aLoadEvent );
-LOG_WRITE_FORMAT("      Size: %d", aSize );
-LOG_WRITE_FORMAT("      TrId: %d", aTransactionId );
-LOG_WRITE_FORMAT(" LoadState: %d", iLoadState );
-LOG_WRITE_FORMAT("  LoadType: %d", iLoadUrlType );
-	if( aLoadEvent == TBrCtlDefs::EEventNewContentDisplayed )
-		{
-		iWindow->ResetPageOverviewLocalSettingL();
-		iWindow->SetImagesLoaded(EFalse);		
-        } 
-	HandleLoadEventOtherL( aLoadEvent, aSize, aTransactionId );
-    }
-
-// ----------------------------------------------------------------------------
-// CBrowserLoadObserver::HandleLoadEventOtherL()
-// ----------------------------------------------------------------------------
-//
-void CBrowserLoadObserver::HandleLoadEventOtherL(
-        TBrCtlDefs::TBrCtlLoadEvent aLoadEvent,
-        TUint aSize,
-        TUint16 aTransactionId )
-    {
-#define STATECHECK( a ) { if( (iLoadState & a) == 0 ) break; }
-    
-    TInt err( KErrNone );
-    switch( aLoadEvent )
-        {
-        case TBrCtlDefs::EEventLoadError:
-            {
-            if(LoadStatus( ELoadStatusSecurePage ))
-                {
-                UpdateSecureIndicatorL();
-                }
-            ClearStatus();
-            SetStatus( ELoadStatusMainError );
-            break;
-            }
-        case TBrCtlDefs::EEventEnteringSecurePage:
-            {
-            SetStatus( ELoadStatusSecurePage );
-            SetStatus( ELoadStatusAllItemIsSecure );
-            UpdateSecureIndicatorL();
-            break;
-            }
-        case TBrCtlDefs::EEventSomeItemsNotSecure:
-            {
-            ClearStatus( ELoadStatusAllItemIsSecure );
-            UpdateSecureIndicatorL();
-            break;
-            }
-        case TBrCtlDefs::EEventSecureItemInNonSecurePage:
-            {
-            SetStatus( ELoadStatusSecureItemNonSecurePage );
-            UpdateSecureIndicatorL();
-            break;
-            }
-        case TBrCtlDefs::EEventExitingSecurePage:
-        case TBrCtlDefs::EEventSubmittingToNonSecurePage:
-            {
-            ClearStatus( ELoadStatusSecurePage );
-            ClearStatus( ELoadStatusAllItemIsSecure );
-            SetStatus ( ELoadStatusSecurePageVisited );
-            UpdateSecureIndicatorL();
-            break;
-            }
-        case TBrCtlDefs::EEventTitleAvailable:
-            {
-            SetStatus( ELoadStatusTitleAvailable );
-            NewTitleAvailableL();
-            break;
-            }
-        case TBrCtlDefs::EEventNewContentStart:
-            {
-#ifdef I__LOG_EVENT_TIME
-            iStartDownloadTime.HomeTime();
-            iTotalUpdateTime = 0;
-            iNumberOfUpdates = 0;
-#endif  // I__LOG_EVENT_TIME
-            StateChange( ELoadStateResponseInProgress );
-            iApiProvider->SetProgressShown( ETrue );
-            iApiProvider->Display().StartProgressAnimationL();
-            
-            // in case we're in bookmarks view and a background page load is in
-            // progress, don't update the softkeys
-            if( iApiProvider->IsForeGround() && InBrowserContentView() )
-                {
-                if( CBrowserAppUi::Static()->ActiveView() )
-                    {
-                    CBrowserAppUi::Static()->ActiveView()->UpdateCbaL();
-                    }
-                }
-            iApiProvider->WindowMgr().NotifyObserversL( EWindowLoadStart, iWindow->WindowId() );
-            break;
-            }
-        case TBrCtlDefs::EEventUrlLoadingStart:
-            {
-            STATECHECK( ELoadStateResponseInProgress )
-            iApiProvider->Display().StartProgressAnimationL();
-
-            // If the load is not initiated from the bookmarks view (ie. engine initiated
-            // via some timer on a page like cnn.com) then don't change view to content view
-            if (iBrowserInitLoad)
-                {
-                iApiProvider->SetViewToBeActivatedIfNeededL(KUidBrowserContentViewId);
-                iBrowserInitLoad = EFalse;
-                }
-
-            // add transaction to ProgressBar
-            iApiProvider->Display().AddTransActIdL( aTransactionId );    
-            
-            // Display the status pane, while loading
-            if ( InBrowserContentView() && iContentView->FullScreenMode() )
-                {
-                iContentView->ShowFsStatusPane(ETrue);
-                }
-            break;
-            }
-        // first content chunk arrived
-        case TBrCtlDefs::EEventNewUrlContentArrived:
-            {
-            STATECHECK( ELoadStateResponseInProgress )
-            SetStatus( ELoadStatusFirstChunkArrived );
-            // set MaxData for this transaction
-            iApiProvider->Display().AddProgressDataL(
-                aTransactionId, 0, aSize );
-            break;
-            }
-        // additional content chunk arrived
-        case TBrCtlDefs::EEventMoreUrlContentArrived:
-            {
-            STATECHECK( ELoadStateResponseInProgress )
-            START_TIMER( t1 );
-            // set RecvdData for this transaction
-            iApiProvider->Display().AddProgressDataL(
-                aTransactionId, aSize, 0 );
-            if( iApiProvider->IsForeGround() )
-                {
-                iApiProvider->Display().NotifyProgress();
-                }
-            STOP_TIMER( t1, iNumberOfUpdates );
-            break;
-            }
-        // content is processed, new fetch is allowed.
-        // some more event may still remain
-        case TBrCtlDefs::EEventContentFinished:
-            {
-            StateChange( ELoadStateIdle );
-            if( !ContentDisplayed() )
-                {
-                SetContentDisplayed( ETrue );
-                }
-
-            if( !iApiProvider->ExitInProgress() && 
-                iApiProvider->IsForeGround() )
-                {
-                iApiProvider->Display().StopProgressAnimationL();
-                }
-            User::ResetInactivityTime();
-            
-            if( LoadUrlType() == ELoadUrlTypeEmbeddedBrowserWithUrl &&
-                !LoadStatus( ELoadStatusFirstChunkArrived ) && 
-                !iApiProvider->ExitInProgress() )
-                {
-                // Don't do anything; let the embedder close the browser
-                }
-            // No content to be shown, go back to where we came from
-            else if ( !iRestoreContentFlag  )
-                {
-                CBrowserAppUi::Static()->ActivateLocalViewL( 
-                                            iApiProvider->LastActiveViewId() );
-                if( iApiProvider->IsForeGround() )
-                    {
-                    if  ( CBrowserAppUi::Static()->ActiveView() )
-                        {
-                        CBrowserAppUi::Static()->ActiveView()->UpdateCbaL();
-                        }
-                    }
-                }                        
-            else
-                {
-                ContentArrivedL();
-                
-                // in case we're in bookmarks view and a background page load is in
-                // progress, don't update the softkeys
-                if( iApiProvider->IsForeGround() && InBrowserContentView() )
-                    {
-                    if  ( CBrowserAppUi::Static()->ActiveView() )
-                        {
-                        CBrowserAppUi::Static()->ActiveView()->UpdateCbaL();
-                        }
-                    }
-                }
-#ifdef I__LOG_EVENT_TIME
-            TTime endDownloadTime;
-            endDownloadTime.HomeTime();
-            TInt64 dlTime = endDownloadTime.MicroSecondsFrom(iStartDownloadTime).Int64();
-            LOG_WRITE_FORMAT( "Total download time: %d", dlTime );
-            LOG_WRITE_FORMAT( "Total update time: %d", iTotalUpdateTime );
-            LOG_WRITE_FORMAT( "Total number of updates: %d", iNumberOfUpdates );
-            if( iNumberOfUpdates )
-                {
-                LOG_WRITE_FORMAT( "Average update time: %d", 
-                    iTotalUpdateTime / iNumberOfUpdates );
-                }
-            if( dlTime )
-                {
-                LOG_WRITE_FORMAT( "Total update time (%% of download time): %d",
-                    iTotalUpdateTime / (dlTime / 100) );
-                }
-#endif  // I__LOG_EVENT_TIME
-            break;
-            }
-        // first chunk displayed, no parameter
-        case TBrCtlDefs::EEventNewContentDisplayed:
-            {
-            iApiProvider->WindowMgr().SetContentExist( ETrue );
-            SetStatus( ELoadStatusFirstChunkDisplayed );
-            SetRestoreContentFlag( ETrue );
-            ContentArrivedL();
-            if( !ContentDisplayed() )
-                {
-                SetContentDisplayed( ETrue );
-                }
-            break;
-            }
-        // additional chunk displayed, no parameter
-        case TBrCtlDefs::EEventMoreContentDisplayed:
-            {
-            SetStatus( ELoadStatusContentDisplayed );
-            SetRestoreContentFlag( ETrue );
-            ContentArrivedL();
-            break;
-            }
-        // last chunk arrived
-        case TBrCtlDefs::EEventUrlLoadingFinished:
-            {
-            iApiProvider->Display().TransActIdComplete( aTransactionId );
-			SetRestoreContentFlag( ETrue );
-            ContentArrivedL();
-			TRAP( err, iApiProvider->LogAccessToRecentUrlL( iWindow->BrCtlInterface() ) );            
-            break;
-            }
-        case TBrCtlDefs::EEventLoadFinished:
-            {
-            if( !iApiProvider->ExitInProgress() &&
-                iApiProvider->IsForeGround() )
-                {
-                iApiProvider->Display().StopProgressAnimationL();
-
-                // Turn off status pane, SK, and Cba 
-                // If in content view, set to fullscreen after download complete
-                if ( InBrowserContentView() && iContentView->FullScreenMode() )
-                    {
-                    iContentView->ShowFsStatusPane(EFalse);
-                    }
-                }
-            iApiProvider->WindowMgr().NotifyObserversL( EWindowLoadStop, iWindow->WindowId() );
-            break;
-            }
-        case TBrCtlDefs::EEventAuthenticationFailed:
-            {
-            // don't add url to Adaptive Bookmarks
-            ClearStatus( ELoadStatusFirstChunkArrived );
-            break;
-            }
-        // Large file upload events
-		case TBrCtlDefs::EEventUploadStart:
-			{
-			iMaxUploadContent = aSize;
-            iWindow->DialogsProviderProxy().UploadProgressNoteL( 
-                iMaxUploadContent, 0, EFalse, this );
-			break;
-			}
-		case TBrCtlDefs::EEventUploadIncrement:
-			{
-            iWindow->DialogsProviderProxy().UploadProgressNoteL( 
-                iMaxUploadContent, aSize, EFalse, this );
-			break;
-         	}
-		case TBrCtlDefs::EEventUploadFinished:
-			{
-            iWindow->DialogsProviderProxy().UploadProgressNoteL( 
-                iMaxUploadContent, aSize, ETrue, this ); 
-			break;         
-			}
-        default:
-            break;
-        }
-#undef STATECHECK
-    }
-
-// ----------------------------------------------------------------------------
-// CBrowserLoadObserver::CBrowserLoadObserver()
-// ----------------------------------------------------------------------------
-//
-CBrowserLoadObserver::CBrowserLoadObserver(
-        MApiProvider& aApiProvider,
-        CBrowserContentView& aContentView,
-        CBrowserWindow& aWindow ) :
-    iApiProvider( &aApiProvider ),
-    iContentView( &aContentView ),
-    iWindow( &aWindow ),
-    iLoadState( ELoadStateIdle ),
-    iLoadUrlType( ELoadUrlTypeOther ),
-    iStatus( 0 )
-    {
-    }
-
-// ----------------------------------------------------------------------------
-// CBrowserLoadObserver::ConstructL()
-// ----------------------------------------------------------------------------
-//
-void CBrowserLoadObserver::ConstructL()
-    {
-    }
-
-// ----------------------------------------------------------------------------
-// CBrowserLoadObserver::DoStartLoad()
-// ----------------------------------------------------------------------------
-//
-void CBrowserLoadObserver::DoStartLoad(
-        TBrowserLoadUrlType aLoadUrlType )
-    {
-/*
-LOG_WRITE("-------------------")
-LOG_WRITE_FORMAT(" UrlType: %d ", aLoadUrlType )
-*/
-    // __ASSERT_DEBUG instead of condition?
-    if( iLoadState == ELoadStateIdle )
-        {                
-        if (LoadStatus(ELoadStatusSecurePageVisited))
-            {
-            ClearStatus();  
-            SetStatus(ELoadStatusSecurePageVisited);  
-            }
-        else 
-            {
-            ClearStatus();            
-            }        
-        
-        iLoadUrlType = aLoadUrlType;
-        iRestoreContentFlag = EFalse;
-        }
-        
-    iBrowserInitLoad = ETrue;
-    }
-
-// ----------------------------------------------------------------------------
-// CBrowserLoadObserver::DoEndLoad()
-// ----------------------------------------------------------------------------
-//
-void CBrowserLoadObserver::DoEndLoad(
-        TBool aIsUserInitiated )
-    {
-// LOG_WRITE( "Cancelling.")
-    if( aIsUserInitiated)
-        {
-        // wait for the remaining load events
-        StateChange( ELoadStateLoadDone );
-        }
-    else  // don't wait for anything
-        {
-        StateChange( ELoadStateIdle );
-        }
-
-    // first arrives ContentFinished and then UrlLoadingFinished!
-    // what to do with status?
-    // updatesoftkeys()  done in appui
-
-    CBrowserViewBase* view = CBrowserAppUi::Static()->ActiveView();
-    if( view ) // just to be sure
-        {
-        TVwsViewId activeViewId = view->ViewId();
-        if( activeViewId.iViewUid == KUidBrowserBookmarksViewId)
-            {
-            SetRestoreContentFlag( EFalse );
-            }
-        }
-    }
-
-// ----------------------------------------------------------------------------
-// CBrowserLoadObserver::NewTitleAvailableL()
-// ----------------------------------------------------------------------------
-//
-void CBrowserLoadObserver::NewTitleAvailableL()
-    {
-    if( iWindow->IsWindowActive() )
-        {
-        CBrowserViewBase* view = CBrowserAppUi::Static()->ActiveView();        
-         if( view ) // just to be sure
-              {
-              TVwsViewId activeViewId = view->ViewId();
-              if( activeViewId.iViewUid == KUidBrowserContentViewId )
-                  {
-                  iContentView->UpdateTitleL( *iApiProvider );
-                  }
-              }
-        }
-    SetRestoreContentFlag( ETrue );
-    }
-    
-// ----------------------------------------------------------------------------
-// CBrowserLoadObserver::InBrowserContentView()
-// ----------------------------------------------------------------------------
-//
-TBool CBrowserLoadObserver::InBrowserContentView()
-    {
-    CBrowserViewBase* view = CBrowserAppUi::Static()->ActiveView();        
-    if( view ) // just to be sure
-        {
-        TVwsViewId activeViewId = view->ViewId();
-        return ( activeViewId.iViewUid == KUidBrowserContentViewId );
-        }
-        
-    return EFalse;
-    }
-
-
-// ----------------------------------------------------------------------------
-// CBrowserLoadObserver::ContentArrivedL()
-// ----------------------------------------------------------------------------
-//
-void CBrowserLoadObserver::ContentArrivedL()
-    {
-    if( iApiProvider->Connection().Connected()
-        && iApiProvider->Preferences().HttpSecurityWarningsStatSupressed() )
-        {
-        TInt secureUpdate = EAknIndicatorStateOff;
-        if( LoadStatus( ELoadStatusSecurePage ) )
-            {
-            if( LoadStatus( ELoadStatusAllItemIsSecure ) )
-                {
-                secureUpdate = EAknIndicatorStateOn;
-                }
-            }
-        iApiProvider->Display().UpdateSecureIndicatorL( secureUpdate );
-        }
-    }
-
-//-----------------------------------------------------------------------------
-// CBrowserLoadObserver::ReportDialogEvent
-//-----------------------------------------------------------------------------
-// Handles dialog provider events
-void CBrowserLoadObserver::ReportDialogEventL(
-        TInt aType,
-        TInt aFlags )
-    {
-    switch( aType )
-        {
-        case MBrowserDialogsProviderObserver::ENotifyError:
-            // aFlags contains error code
-            {
-            // If card not in deck error, go to first card of deck
-            SetRestoreContentFlag( aFlags == KBrsrWmlbrowserCardNotInDeck );
-            break;
-            }
-        case MBrowserDialogsProviderObserver::ENotifyHttpError:
-            // aFlags contains error code
-            {
-            SetRestoreContentFlag( EFalse );
-            break;
-            }
-        case MBrowserDialogsProviderObserver::EUserAuthentication:
-            {
-            SetRestoreContentFlag( aFlags ); // False == Cancelled
-            break;
-            }
-        case MBrowserDialogsProviderObserver::EConfirm:
-            // aFlags contains Cancel status
-            {
-            // if confirmation query was cancelled, step back to idle
-            if( !aFlags )
-                {
-                DoEndLoad( EFalse );
-                }
-            SetRestoreContentFlag( !aFlags );
-            break;
-            }
-        case MBrowserDialogsProviderObserver::EUploadProgress:
-            {
-            // Cancel fetching - dialog is cancelled
-            if ( aFlags == KErrCancel )
-                {
-                iWindow->BrCtlInterface().HandleCommandL( 
-                    (TInt)TBrCtlDefs::ECommandCancelFetch +
-                    (TInt)TBrCtlDefs::ECommandIdBase );
-                }
-            break;
-            }
-        default:
-            break;
-        }
-    }
-
-//-----------------------------------------------------------------------------
-// CBrowserLoadObserver::UpdateSecureIndicatorL
-//-----------------------------------------------------------------------------
-//
-void CBrowserLoadObserver::UpdateSecureIndicatorL()
-    {
-    TBool status = LoadStatus( ELoadStatusAllItemIsSecure );
-    iApiProvider->Display().UpdateSecureIndicatorL( 
-        status &&
-        !iApiProvider->Preferences().HttpSecurityWarningsStatSupressed() );
-    }
-
-//-----------------------------------------------------------------------------
-// CBrowserLoadObserver::LoadUrlType
-//-----------------------------------------------------------------------------
-//
-CBrowserLoadObserver::TBrowserLoadUrlType CBrowserLoadObserver::LoadUrlType() const
-    {
-    return iLoadUrlType;
-    }
-
-//-----------------------------------------------------------------------------
-// CBrowserLoadObserver::LoadState
-//-----------------------------------------------------------------------------
-//
-CBrowserLoadObserver::TBrowserLoadState CBrowserLoadObserver::LoadState() const
-    {
-    return iLoadState;
-    }
-//-----------------------------------------------------------------------------
-// CBrowserLoadObserver::StateChange
-//-----------------------------------------------------------------------------
-//
-void CBrowserLoadObserver::StateChange( TBrowserLoadState aNextState )
-    {
-    if( ELoadStateIdle == iLoadState &&
-        iLoadState != aNextState )
-       {
-          iNewContentDisplayed = EFalse;
-          iApiProvider->WindowMgr().NotifyObserversL( EWindowCntDisplayed, iWindow->WindowId() );
-       }
-    iLoadState = aNextState;
-    }
-
-//-----------------------------------------------------------------------------
-// CBrowserLoadObserver::SetContentDisplayed
-//-----------------------------------------------------------------------------
-//
-
-void CBrowserLoadObserver::SetContentDisplayed( TBool aValue )
-    { 
-    iNewContentDisplayed = aValue;
-    TRAP_IGNORE( iApiProvider->WindowMgr().NotifyObserversL( EWindowCntDisplayed, iWindow->WindowId()));
-    }
-
-
-// End of file