# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1270066600 -10800 # Node ID c711bdda59f44011b3a7bb67730813ee4ac1ceb0 # Parent 1f3c3f2f5b0a3e7eb900224acea7c18c9110f0e8 Revision: 201012 Kit: 201013 diff -r 1f3c3f2f5b0a -r c711bdda59f4 brdo.layers.sysdef.xml --- a/brdo.layers.sysdef.xml Mon Mar 15 12:44:50 2010 +0200 +++ b/brdo.layers.sysdef.xml Wed Mar 31 23:16:40 2010 +0300 @@ -18,6 +18,7 @@ + diff -r 1f3c3f2f5b0a -r c711bdda59f4 browserutilities/browserdialogsprovider/Src/BrowserDialogsProvider.cpp --- a/browserutilities/browserdialogsprovider/Src/BrowserDialogsProvider.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/browserutilities/browserdialogsprovider/Src/BrowserDialogsProvider.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -690,11 +690,14 @@ HBufC*& aReturnedInput ) { TBool retVal; - - // defInput is not modified by the dialog. - TPtr defInput( (TUint16*) aDefaultInput.Ptr(), aDefaultInput.Length(), - KMaxAltTextLength ); - + TInt length = aDefaultInput.Length(); + if ( aDefaultInput.Length() > KMaxAltTextLength ) + { + length = KMaxAltTextLength; + } + // defInput is not modified by the dialog.Truncate if length is greater than KMaxAltTextLength + TPtr defInput( (TUint16*) aDefaultInput.Ptr(), length, KMaxAltTextLength ); + CBrowserScriptPromptDialog* dialog = new (ELeave) CBrowserScriptPromptDialog( defInput, aReturnedInput ); diff -r 1f3c3f2f5b0a -r c711bdda59f4 browserutilities/connectionmanager/Src/ConnManActiveConnector.cpp --- a/browserutilities/connectionmanager/Src/ConnManActiveConnector.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/browserutilities/connectionmanager/Src/ConnManActiveConnector.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -87,8 +87,9 @@ } else { - CLOG_WRITE( "CConnManActiveConnector:StartConnection Using Internet Snap"); - extPref.SetSnapPurpose(CMManager::ESnapPurposeInternet); + CLOG_WRITE( "CConnManActiveConnector:StartConnection Popup ap dialog"); + extPref.SetSnapPurpose(CMManager::ESnapPurposeUnknown); + extPref.SetConnSelectionDialog(ETrue); } #endif //__WINS__ @@ -140,8 +141,16 @@ #else //For hardware - CLOG_WRITE( "CConnManActiveConnector:StartConnection Using Internet Snap"); - extPref.SetSnapPurpose(CMManager::ESnapPurposeInternet); + if( aSettings->Snap() == 0 ) + { + CLOG_WRITE( "CConnManActiveConnector:StartConnection Using Internet Snap"); + extPref.SetSnapPurpose(CMManager::ESnapPurposeInternet); + } + else + { + CLOG_WRITE( "CConnManActiveConnector:StartConnection Using given Snap"); + extPref.SetSnapId(aSettings->Snap()); + } #endif //__WINS__ diff -r 1f3c3f2f5b0a -r c711bdda59f4 browserutilities/connectionmanager/Src/ConnectionObservers.cpp --- a/browserutilities/connectionmanager/Src/ConnectionObservers.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/browserutilities/connectionmanager/Src/ConnectionObservers.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -21,7 +21,7 @@ #include #include #include - +#include #include #include "ConnectionManagerLogger.h" @@ -110,7 +110,12 @@ if( !iMultiObserver ) { - if ( iProgressBuf().iStage == iStageToObserve ) + CLOG_WRITE( "CConnectionStageNotifierWCB Browser UI" ); + #ifdef BRDO_OCC_ENABLED_FF //This is only for emulator testing. It should be #ifdef + if ( iProgressBuf().iStage == iStageToObserve && (iProgressBuf().iError == KErrDisconnected || iProgressBuf().iError == KErrTimedOut) ) + #else + if ( iProgressBuf().iStage == iStageToObserve ) + #endif { CLOG_WRITE( "Stage achived" ); DoCloseAgent(); @@ -125,6 +130,7 @@ } else { + CLOG_WRITE( "CConnectionStageNotifierWCB Connection Manager" ); if( IsAnyStageReached( iProgressBuf().iStage ) ) { iMultiObserver->ConnectionStageAchievedL( iProgressBuf().iStage ); diff -r 1f3c3f2f5b0a -r c711bdda59f4 browserutilities/connectionmanager/Src/InternetConnectionManager.cpp --- a/browserutilities/connectionmanager/Src/InternetConnectionManager.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/browserutilities/connectionmanager/Src/InternetConnectionManager.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -75,7 +75,10 @@ // CONSTANTS _LIT(KConnectionResourceFile, "\\resource\\ConnectionManager.rsc"); - +#ifdef BRDO_OCC_ENABLED_FF +//As per OCC, number of Connection observer states +const TInt KMaxOccStages = 1; +#endif // ============================ MEMBER FUNCTIONS =============================== //-------------------------------------------------------------------------- //CInternetConnectionManager::ConnectL( TUint32 aIAPId1, TUint32 aIAPId2 ) @@ -652,7 +655,7 @@ if( iConnected ) { CLOG_WRITE( "StopConnectionL() Stop the Connection" ); - iConnection.Stop(RConnection::EStopAuthoritative); + iConnection.Close(); } // iServ.Close(); @@ -1336,12 +1339,17 @@ TName* name = ConnectionNameL(); __ASSERT_DEBUG( name, User::Panic( KNullDesC, KErrCorrupt ) ); CleanupStack::PushL( name ); - + +#ifdef BRDO_OCC_ENABLED_FF + iSatges[0] = KLinkLayerClosed; + iStageNotifier->StartNotificationL( name,iSatges,KMaxOccStages,this, ETrue ); +#else iSatges[0] = KConnectionUninitialised; iSatges[1] = KConnectionClosed; iSatges[2] = KLinkLayerClosed; iStageNotifier->StartNotificationL( name,iSatges,KMaxStages,this, ETrue ); +#endif CleanupStack::PopAndDestroy( name ); } @@ -1371,7 +1379,7 @@ { // this is a connection closed event CLOG_WRITE( "ConnectionStageAchievedL() Stoping the connection instead of closing" ); - iConnection.Stop(); + iConnection.Close(); iConnected = EFalse; if( !iSilentMode ) @@ -1701,7 +1709,6 @@ CLOG_WRITE_1( "CInternetConnectionManager::SetConnectionType - %d", aConnectionType ); iConnectionType = aConnectionType; } - //------------------------------------------------------------------- //CInternetConnectionManager::SetRequestedSnap //------------------------------------------------------------------- @@ -2016,7 +2023,6 @@ { User::LeaveIfError( iServ.Connect() ); } - CLOG_WRITE( "Fully initialized" ); iInitialized = ETrue; } @@ -2039,16 +2045,37 @@ #ifndef __WINS__ if( KErrNone == connErr ) { - TUint32 iIapID; - TBuf<20> query; - query.Format( _L("%s\\%s"), IAP, COMMDB_ID ); - if( iConnection.GetIntSetting( query, iIapID ) == KErrNone ) - { - CLOG_WRITE_1( "ConnectWithSnapId::AccessPoint - %d", iIapID ); - CApAccessPointItem* ap = APItemFromIAPIdLC( iIapID ); - UpdateCurrentAPL( *ap, EFalse ); - CleanupStack::PopAndDestroy(); // ap - } + if( iSilentMode ) + // Temp fix for CDMA + { + TUint32 iapId; + TBuf<20> query; + TBuf<40> val; + + query.Format( _L("%s\\%s"), IAP, COMMDB_ID ); + User::LeaveIfError( iConnection.GetIntSetting( query, iapId ) ); + iCurrentAP = (CApAccessPointItem*)iapId; + + query.Format(_L("%s\\%s"), IAP, COMMDB_NAME); + User::LeaveIfError( iConnection.GetDesSetting( query, val ) ); + + iConnName = val.AllocL(); + CLOG_WRITE_1( "Iap id used : %d", iapId ); + CLOG_WRITE_1( "Conn name : %S", iConnName); + } + else + { + TUint32 iIapID; + TBuf<20> query; + query.Format( _L("%s\\%s"), IAP, COMMDB_ID ); + if( iConnection.GetIntSetting( query, iIapID ) == KErrNone ) + { + CLOG_WRITE_1( "ConnectWithSnapId::AccessPoint - %d", iIapID ); + CApAccessPointItem* ap = APItemFromIAPIdLC( iIapID ); + UpdateCurrentAPL( *ap, EFalse ); + CleanupStack::PopAndDestroy(); // ap + } + } } #endif diff -r 1f3c3f2f5b0a -r c711bdda59f4 browserutilities/downloadmgr/DownloadMgrServEng/Group/HttpDMServEng.mmp --- a/browserutilities/downloadmgr/DownloadMgrServEng/Group/HttpDMServEng.mmp Mon Mar 15 12:44:50 2010 +0200 +++ b/browserutilities/downloadmgr/DownloadMgrServEng/Group/HttpDMServEng.mmp Wed Mar 31 23:16:40 2010 +0300 @@ -48,6 +48,10 @@ USERINCLUDE ../inc +#ifdef DOWNLOADMGR_PATH_PLUGIN_ENABLED_FF +SYSTEMINCLUDE /epoc32/include/ecom +#endif + SOURCE HttpDownloadManagerServerEngine.cpp SOURCE HttpClientApp.cpp SOURCE HttpClientAppInstance.cpp diff -r 1f3c3f2f5b0a -r c711bdda59f4 browserutilities/downloadmgr/DownloadMgrServEng/Inc/HttpConnHandler.h --- a/browserutilities/downloadmgr/DownloadMgrServEng/Inc/HttpConnHandler.h Mon Mar 15 12:44:50 2010 +0200 +++ b/browserutilities/downloadmgr/DownloadMgrServEng/Inc/HttpConnHandler.h Wed Mar 31 23:16:40 2010 +0300 @@ -353,6 +353,8 @@ */ void ShutDown( TBool aFromDestructor = EFalse ); + void RetryNeeded(TBool aRetry) { iRetryNeeded = aRetry;} + protected: // New functions /** @@ -433,6 +435,7 @@ private: // Data TBool iNewConnection; + TBool iRetryNeeded; // Reserved pointer for future extension //TAny* iReserved; diff -r 1f3c3f2f5b0a -r c711bdda59f4 browserutilities/downloadmgr/DownloadMgrServEng/Inc/HttpDownload.h --- a/browserutilities/downloadmgr/DownloadMgrServEng/Inc/HttpDownload.h Mon Mar 15 12:44:50 2010 +0200 +++ b/browserutilities/downloadmgr/DownloadMgrServEng/Inc/HttpDownload.h Wed Mar 31 23:16:40 2010 +0300 @@ -52,8 +52,9 @@ class CFileMan; class CHeaderField; class CHttpStorage; - - +#ifdef DOWNLOADMGR_PATH_PLUGIN_ENABLED_FF +class CDownloadPathHandler; +#endif /** * ?one_line_short_description. * ?other_description_lines @@ -459,6 +460,8 @@ void Suspended(); void Disconnected(); void ConnectionFailed( TInt aError ); + void SetRetryFlag(TBool aFlag){ iRetryFlag = aFlag; } + TBool GetRetryFlag(){ return iRetryFlag;} protected: // New functions @@ -976,7 +979,16 @@ void CHttpDownload::ConvertDownloadNameUniqueL( HBufC*& filePath, HBufC*& fileName, HBufC*& fileExtn); - +#ifdef DOWNLOADMGR_PATH_PLUGIN_ENABLED_FF + /* + * Gets the instance of CDownloadPathHandler from the Plugin implementaion, if present + */ + CDownloadPathHandler* GetDownloadPathPluginInstanceL(); + /* + * Get Updated path from the Plugin Implementation + */ + void GetUpdatedPathFromPluginL(CDownloadPathHandler* downloadPathPlugin,TFileName& rootPath, TPtr& fileNamePtr); +#endif public: // Data // ?one_line_short_description_of_data //?data_declaration; @@ -1111,6 +1123,7 @@ TInt iActivePlayedDownload; // Currenlty actively played Cod Download TInt iMOMoved; // index for bulk move TBool iMoDownloadCompleted; //MO download Completed.But Move will be issued by PD Client + TBool iRetryFlag; public: // Friend classes //?friend_class_declaration; diff -r 1f3c3f2f5b0a -r c711bdda59f4 browserutilities/downloadmgr/DownloadMgrServEng/Src/HttpClientAppInstance.cpp --- a/browserutilities/downloadmgr/DownloadMgrServEng/Src/HttpClientAppInstance.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/browserutilities/downloadmgr/DownloadMgrServEng/Src/HttpClientAppInstance.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -560,6 +560,23 @@ case EDlMgrConnectionName: { iConnHandler->SetConnectionNameL( aValue ); + //resume Download if paused by OCC + CArrayPtrFlat* downloads = iClientApp->Downloads(); + + for( TInt i = 0; i < downloads->Count() ; ++i ) + { + if( (*downloads)[i]->ClientAppInstance() == this ) + { + // this won't surely leave on this call + if((*downloads)[i]->GetRetryFlag()) + { + TRAP_IGNORE( (*downloads)[i]->StartL() ); + (*downloads)[i]->SetRetryFlag(EFalse); + } + + } + } + } break; diff -r 1f3c3f2f5b0a -r c711bdda59f4 browserutilities/downloadmgr/DownloadMgrServEng/Src/HttpConnHandler.cpp --- a/browserutilities/downloadmgr/DownloadMgrServEng/Src/HttpConnHandler.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/browserutilities/downloadmgr/DownloadMgrServEng/Src/HttpConnHandler.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -248,10 +248,12 @@ if( iStatus == KErrNone ) { TInt stage = iProgressBuf().iStage; - + if ( iProgressBuf().iStage == KLinkLayerClosed && iProgressBuf().iError == KErrDisconnected ) + iConnHandler->RetryNeeded(ETrue); + iConnHandler->ConnectionStageChanged( stage ); - if( stage > KConnectionUninitialised ) + if( stage != KLinkLayerClosed ) // connection is still alive { iConnHandler->Connection().ProgressNotification( iProgressBuf, iStatus ); @@ -300,6 +302,7 @@ //Set it to zero iIapId = 0; + iRetryNeeded = EFalse; } // ----------------------------------------------------------------------------- @@ -764,7 +767,7 @@ iConnStage = aStage; - if( iConnStage == KConnectionUninitialised || + if( iConnStage == KLinkLayerClosed || iConnStage == KDataTransferTemporarilyBlocked ) { @@ -772,24 +775,33 @@ CArrayPtrFlat* downloads = iClientApp->Downloads(); for( TInt i = 0; i < downloads->Count(); ++i ) - { + { + if(iRetryNeeded && ((*downloads)[i]->State() == EHttpDlMultipleMOFailed || + (*downloads)[i]->State() == EHttpDlInprogress )) + { + (*downloads)[i]->SetRetryFlag(ETrue); + } + } + + for( TInt i = 0; i < downloads->Count(); ++i ) + { if( (*downloads)[i]->ConnHandler() == this ) { - if( iConnStage == KConnectionUninitialised ) + if( iConnStage == KLinkLayerClosed ) { // from now on this name is invalid -> forget it! - delete iConnName; iConnName = NULL; - - (*downloads)[i]->Disconnected(); + delete iConnName; iConnName = NULL; + (*downloads)[i]->Disconnected(); + } else - { + { (*downloads)[i]->Suspended(); } } } - if( iConnStage == KConnectionUninitialised ) + if( iConnStage == KLinkLayerClosed ) { ShutDown(); } @@ -803,6 +815,7 @@ { Connected(); } + iRetryNeeded = EFalse; } // ----------------------------------------------------------------------------- diff -r 1f3c3f2f5b0a -r c711bdda59f4 browserutilities/downloadmgr/DownloadMgrServEng/Src/HttpDownload.cpp --- a/browserutilities/downloadmgr/DownloadMgrServEng/Src/HttpDownload.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/browserutilities/downloadmgr/DownloadMgrServEng/Src/HttpDownload.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -46,6 +46,9 @@ #include +#ifdef DOWNLOADMGR_PATH_PLUGIN_ENABLED_FF +#include +#endif // EXTERNAL DATA STRUCTURES //extern ?external_data; @@ -6771,6 +6774,14 @@ TBool needToUpdatePath( ETrue ); CLOG_WRITE_1( " entering fileName: %S", fileName ); +#ifdef DOWNLOADMGR_PATH_PLUGIN_ENABLED_FF + CDownloadPathHandler* downloadPathPlugin = NULL; + downloadPathPlugin = GetDownloadPathPluginInstanceL(); + if( downloadPathPlugin ) + { + CleanupStack::PushL( downloadPathPlugin ); + } +#endif #ifdef RD_MULTIPLE_DRIVE HBufC8* drivesDynList = iClientApp->Engine()->QueryDynDriveListLC(); TPtrC8 drives( *drivesDynList ); @@ -6786,7 +6797,14 @@ } if( drive == currentDrive )//if the current path is same as the path in cenrep then no need to update.The diff is because we must have not known size before hand { +#ifdef DOWNLOADMGR_PATH_PLUGIN_ENABLED_FF + if( !downloadPathPlugin ) + { + needToUpdatePath = EFalse; + } +#else needToUpdatePath = EFalse; +#endif break; } else @@ -6822,8 +6840,23 @@ // Setting RootPath for new Destination file fileNamePtr.Insert( 0, rootPath ); +#ifdef DOWNLOADMGR_PATH_PLUGIN_ENABLED_FF + if( downloadPathPlugin ) + { + GetUpdatedPathFromPluginL(downloadPathPlugin,rootPath,fileNamePtr); + CleanupStack::PopAndDestroy( downloadPathPlugin ); + } + else + { + // Setting KDownloadPath + fileNamePtr.Insert( rootPath.Length(), KDownloadPath ); + } +#else // Setting KDownloadPath fileNamePtr.Insert( rootPath.Length(), KDownloadPath ); + +#endif + #else TChar driveChar; fs.DriveToChar(drive, driveChar); @@ -7190,4 +7223,43 @@ CleanupStack::PushL(fileName); } +#ifdef DOWNLOADMGR_PATH_PLUGIN_ENABLED_FF + +// ----------------------------------------------------------------------------- +// CHttpDownload::GetDownloadPathPluginInstanceL +// ----------------------------------------------------------------------------- +// +CDownloadPathHandler* CHttpDownload::GetDownloadPathPluginInstanceL() + { + CDownloadPathHandler* downloadPathPlugin = NULL; + if ( iContentType ) + { + TRAPD( kErr, downloadPathPlugin = CDownloadPathHandler::NewL( *iContentType ) ); + if( kErr != KErrNone ) + { + downloadPathPlugin = NULL; + } + } + return downloadPathPlugin; + + } + +// ----------------------------------------------------------------------------- +// CHttpDownload::GetUpdatedPathFromPluginL +// ----------------------------------------------------------------------------- +// +void CHttpDownload::GetUpdatedPathFromPluginL(CDownloadPathHandler* downloadPathPlugin,TFileName& rootPath, TPtr& fileNamePtr) + { + HBufC16* locFileName ; + locFileName = iStorage->LocalFilename(); + + // Gets the updated path for the music content from Plugin + TRAPD( kErr, downloadPathPlugin->GetUpdatedPathL( *locFileName, fileNamePtr ) ); + if( kErr != KErrNone ) + { + // Setting to KDownloadPath + fileNamePtr.Insert( rootPath.Length(), KDownloadPath ); + } + } +#endif // End of File diff -r 1f3c3f2f5b0a -r c711bdda59f4 browserutilities/downloadmgr/DownloadMgrUiLib/Src/CDownloadMgrUiUserInteractions.cpp --- a/browserutilities/downloadmgr/DownloadMgrUiLib/Src/CDownloadMgrUiUserInteractions.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/browserutilities/downloadmgr/DownloadMgrUiLib/Src/CDownloadMgrUiUserInteractions.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -1044,8 +1044,8 @@ // found one. if ( handlerI->DownloadConfirmationShown() ) { + iEventHandlerArray->Remove( handlerI ); delete handlerI; - iEventHandlerArray->Remove( handlerI ); --i; --handlerCount; } diff -r 1f3c3f2f5b0a -r c711bdda59f4 browserutilities/feedsengine/FeedsServer/Api/src/FeedsEntity.cpp --- a/browserutilities/feedsengine/FeedsServer/Api/src/FeedsEntity.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/browserutilities/feedsengine/FeedsServer/Api/src/FeedsEntity.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -354,6 +354,7 @@ case EFolderTokenItemEnd: isMiniItem = EFalse; + if(miniItem) miniItem->SetFeedInterface (iFeedInterface); // folderItem->AddMiniItem(miniItem); User::LeaveIfError (currentFolder->iChildren.Append (miniItem)); diff -r 1f3c3f2f5b0a -r c711bdda59f4 browserutilities/feedsengine/FeedsServer/Api/src/Transaction.cpp --- a/browserutilities/feedsengine/FeedsServer/Api/src/Transaction.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/browserutilities/feedsengine/FeedsServer/Api/src/Transaction.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -104,7 +104,6 @@ delete iRequestBuff; delete iAutoDelete; - delete iFeedsEntity; delete iSettingsResponseBuffer; } diff -r 1f3c3f2f5b0a -r c711bdda59f4 browserutilities/feedsengine/FeedsServer/UrlHandler/src/ServerHttpConnection.cpp --- a/browserutilities/feedsengine/FeedsServer/UrlHandler/src/ServerHttpConnection.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/browserutilities/feedsengine/FeedsServer/UrlHandler/src/ServerHttpConnection.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -16,6 +16,7 @@ */ +#include "browser_platform_variant.hrh" #include #include @@ -98,9 +99,14 @@ // If need be establish the connection. if(!IsConnected()) { +#ifdef BRDO_OCC_ENABLED_FF + TUint32 snapId = 0; //Defaults connects to Internet snap + iConMgr->SetConnectionType(CMManager::EDestination); + iConMgr->SetRequestedSnap(snapId); +#else // Set the default access point. iConMgr->SetRequestedAP( iDefaultAccessPoint ); - +#endif // Open a connection. TRAP(err, err = iConMgr->StartConnectionL(ETrue)); if (err != KErrNone) diff -r 1f3c3f2f5b0a -r c711bdda59f4 browserutilities/schemehandler/SchemeDispatcher/src/MmsHandler.cpp --- a/browserutilities/schemehandler/SchemeDispatcher/src/MmsHandler.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/browserutilities/schemehandler/SchemeDispatcher/src/MmsHandler.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -16,7 +16,7 @@ * * */ - + // INCLUDE FILES #include "MmsHandler.h" diff -r 1f3c3f2f5b0a -r c711bdda59f4 browserutilities/schemehandler/SchemeDispatcher/src/RtspHandler.cpp --- a/browserutilities/schemehandler/SchemeDispatcher/src/RtspHandler.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/browserutilities/schemehandler/SchemeDispatcher/src/RtspHandler.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -18,7 +18,7 @@ */ // INCLUDE FILES - + #include "RtspHandler.h" #include "SchemeDispLogger.h" #include // For REComSession diff -r 1f3c3f2f5b0a -r c711bdda59f4 browserutilities/webutils/conf/webutils.confml Binary file browserutilities/webutils/conf/webutils.confml has changed diff -r 1f3c3f2f5b0a -r c711bdda59f4 codhandler/codeng/group/CodEng.mmp --- a/codhandler/codeng/group/CodEng.mmp Mon Mar 15 12:44:50 2010 +0200 +++ b/codhandler/codeng/group/CodEng.mmp Wed Mar 31 23:16:40 2010 +0300 @@ -70,6 +70,10 @@ USERINCLUDE ../inc +#ifdef DOWNLOADMGR_PATH_PLUGIN_ENABLED_FF +SYSTEMINCLUDE /epoc32/include/ecom +#endif + MW_LAYER_SYSTEMINCLUDE OS_LAYER_ESTLIB_SYSTEMINCLUDE #if defined(__PLATFORM_VERSION_S60_50__) || defined(__PLATFORM_VERSION_5250__) diff -r 1f3c3f2f5b0a -r c711bdda59f4 codhandler/codeng/inc/FileSaver.h --- a/codhandler/codeng/inc/FileSaver.h Mon Mar 15 12:44:50 2010 +0200 +++ b/codhandler/codeng/inc/FileSaver.h Wed Mar 31 23:16:40 2010 +0300 @@ -33,6 +33,9 @@ class CDrmHandler; class CCodBuffStorage; class CCodData; +#ifdef DOWNLOADMGR_PATH_PLUGIN_ENABLED_FF +class CDownloadPathHandler; +#endif // CLASS DECLARATION @@ -210,7 +213,20 @@ * Writes Buffer data to file */ void FlushL(); - +#ifdef DOWNLOADMGR_PATH_PLUGIN_ENABLED_FF + private: + /* + * Gets the instance of CDownloadPathHandler from the Plugin implementaion, if present + */ + CDownloadPathHandler* GetDownloadPathPluginInstanceL(TPtrC8& mimetype); + /* + * Get Updated path from the Plugin Implementation + * @param downloadPathPlugin instance of CDownloadPathHandler + * @param fname indicates filename + * @param fileNamePtr + */ + void GetUpdatedPathFromPluginL(CDownloadPathHandler* downloadPathPlugin,TFileName& fname , TPtr& fileNamePtr); +#endif protected: // data diff -r 1f3c3f2f5b0a -r c711bdda59f4 codhandler/codeng/src/FileSaver.cpp --- a/codhandler/codeng/src/FileSaver.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/codhandler/codeng/src/FileSaver.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -42,6 +42,9 @@ #include #include +#ifdef DOWNLOADMGR_PATH_PLUGIN_ENABLED_FF +#include +#endif const TInt KDefaultStorageBufferSize = 128 * 1024; const TInt KDefaultStorageBufferSizePD = 16 * 1024; @@ -350,15 +353,42 @@ CleanupClosePushL(fs); CFileMan* file=CFileMan::NewL(fs); CleanupStack::PushL(file); - - +#ifdef DOWNLOADMGR_PATH_PLUGIN_ENABLED_FF + CDownloadPathHandler* downloadPathPlugin = NULL; + + if ( aData.Count() ) + { + // Get the mime type of the first media object + TPtrC8 mimeType = (*aData[1]).Type(); + downloadPathPlugin = GetDownloadPathPluginInstanceL( mimeType ); + + if( downloadPathPlugin ) + { + CleanupStack::PushL( downloadPathPlugin ); + } + } +#endif for( TInt i = 1; i <= aData.Count() ; ++i ) { HBufC* filename = HBufC::NewLC(KMaxFileName); TPtr filenamePtr = filename->Des(); filenamePtr = (*aData[i]).iRootPath; - - filenamePtr.Append(_L("download\\")); + +#ifdef DOWNLOADMGR_PATH_PLUGIN_ENABLED_FF + if( downloadPathPlugin ) + { + TFileName iTempFlName = (*aData[i]).iFullName->Des(); + GetUpdatedPathFromPluginL( downloadPathPlugin,iTempFlName, filenamePtr ); + } + else + { + filenamePtr.Append( _L( "download\\" ) ); + } +#else + filenamePtr.Append( _L( "download\\" ) ); + +#endif + TInt error = fs.MkDirAll(filenamePtr); if (error!=KErrNone && error!=KErrAlreadyExists) { @@ -384,6 +414,12 @@ (*aData[i]).iFullName = NameL(); CleanupStack::PopAndDestroy(filename); } +#ifdef DOWNLOADMGR_PATH_PLUGIN_ENABLED_FF + if( downloadPathPlugin ) + { + CleanupStack::PopAndDestroy( downloadPathPlugin ); + } +#endif CleanupStack::PopAndDestroy(file); CleanupStack::PopAndDestroy(&fs); @@ -425,7 +461,26 @@ HBufC* filename = HBufC::NewLC(KMaxFileName); TPtr filenamePtr = filename->Des(); filenamePtr = iRootPath; - filenamePtr.Append(_L("download\\")); +#ifdef DOWNLOADMGR_PATH_PLUGIN_ENABLED_FF + // Get the mime type of the content + TPtrC8 mimeType( iType.Des8() ); + CDownloadPathHandler* downloadPathPlugin = NULL; + downloadPathPlugin = GetDownloadPathPluginInstanceL( mimeType ); + + if( downloadPathPlugin ) + { + CleanupStack::PushL( downloadPathPlugin ); + GetUpdatedPathFromPluginL( downloadPathPlugin,iFname, filenamePtr ); + CleanupStack::PopAndDestroy( downloadPathPlugin ); + } + else + { + filenamePtr.Append( _L( "download\\" ) ); + } +#else + filenamePtr.Append( _L( "download\\" ) ); + +#endif User::LeaveIfError( fs.Connect() ); CleanupClosePushL(fs); CFileMan* file=CFileMan::NewL(fs); @@ -752,3 +807,37 @@ { return iFname.AllocL(); } +#ifdef DOWNLOADMGR_PATH_PLUGIN_ENABLED_FF + +// --------------------------------------------------------- +// CFileSaver::GetDownloadPathPluginInstanceL +// --------------------------------------------------------- +CDownloadPathHandler* CFileSaver::GetDownloadPathPluginInstanceL(TPtrC8& mimetype ) + { + CDownloadPathHandler* downloadPathPlugin = NULL; + TRAPD( kErr, downloadPathPlugin = CDownloadPathHandler::NewL( mimetype ) ); + if( kErr != KErrNone ) + { + downloadPathPlugin = NULL; + } + return downloadPathPlugin; + } + +// --------------------------------------------------------- +// CFileSaver::GetUpdatedPathFromPluginL +// --------------------------------------------------------- +void CFileSaver::GetUpdatedPathFromPluginL(CDownloadPathHandler* downloadPathPlugin,TFileName& fname, TPtr& fileNamePtr) + { + TRAPD( kErr, downloadPathPlugin->GetUpdatedPathL( fname, fileNamePtr ) ); + if( kErr == KErrNone ) + { + fileNamePtr.Append( _L( "\\" ) ); + } + else + { + fileNamePtr.Append( _L( "download\\" ) ); + } + } +#endif + +//EOF diff -r 1f3c3f2f5b0a -r c711bdda59f4 package_definition.xml --- a/package_definition.xml Mon Mar 15 12:44:50 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,180 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 1f3c3f2f5b0a -r c711bdda59f4 web_plat/browser_platform_api/inc/Browser_platform_variant.hrh --- a/web_plat/browser_platform_api/inc/Browser_platform_variant.hrh Mon Mar 15 12:44:50 2010 +0200 +++ b/web_plat/browser_platform_api/inc/Browser_platform_variant.hrh Wed Mar 31 23:16:40 2010 +0300 @@ -166,11 +166,21 @@ //To provide WidgetSIDChecker support #define APP_SID_CHECK_SUPPORT_FF +//AT&T DownloadMgr path support flag +#define DOWNLOADMGR_PATH_PLUGIN_ENABLED_FF + // One Click Connectivity support flag #define BRDO_OCC_ENABLED_FF //Single click flag #define BRDO_SINGLE_CLICK_ENABLED_FF + +//Video player 2, surface aware controller, +#define BRDO_VIDEOPLAYER2_ENABLED_FF + +//To enable for IAD Update (For add-on Browser) +#define BRDO_IAD_UPDATE_ENABLED_FF + /* * =================== * S60 3.23 @@ -178,12 +188,22 @@ */ #if defined(__PLATFORM_VERSION_32__) +//Video player 2, surface aware controller, +#undef BRDO_VIDEOPLAYER2_ENABLED_FF + + //OCC support #undef BRDO_OCC_ENABLED_FF +//AT&T DownloadMgr path support flag +#undef DOWNLOADMGR_PATH_PLUGIN_ENABLED_FF + //Single click support #undef BRDO_SINGLE_CLICK_ENABLED_FF +//To enable for IAD Update (For add-on Browser) +#undef BRDO_IAD_UPDATE_ENABLED_FF + //To provide WidgetSIDChecker support #undef APP_SID_CHECK_SUPPORT_FF @@ -257,11 +277,22 @@ */ #elif defined(__PLATFORM_VERSION_S60_50__) + +//Video player 2, surface aware controller, +#undef BRDO_VIDEOPLAYER2_ENABLED_FF + //OCC support #undef BRDO_OCC_ENABLED_FF + +//AT&T DownloadMgr path support flag +#undef DOWNLOADMGR_PATH_PLUGIN_ENABLED_FF + //Single click support #undef BRDO_SINGLE_CLICK_ENABLED_FF +//To enable for IAD Update (For add-on Browser) +#undef BRDO_IAD_UPDATE_ENABLED_FF + // Flag for Multi touch enable #undef BRDO_MULTITOUCH_ENABLED_FF //To provide WidgetSIDChecker support @@ -326,11 +357,22 @@ */ #elif defined(__PLATFORM_VERSION_5250__) +//Video player 2, surface aware controller, +#undef BRDO_VIDEOPLAYER2_ENABLED_FF + +//AT&T DownloadMgr path support flag +#undef DOWNLOADMGR_PATH_PLUGIN_ENABLED_FF + //OCC support #undef BRDO_OCC_ENABLED_FF + //Single click support #undef BRDO_SINGLE_CLICK_ENABLED_FF +//To enable for IAD Update (For add-on Browser) +#define BRDO_IAD_UPDATE_ENABLED_FF + + // Flag for Multi touch enable #undef BRDO_MULTITOUCH_ENABLED_FF @@ -369,11 +411,20 @@ */ #elif defined(__PLATFORM_VERSION_51__) +//Video player 2, surface aware controller, +#undef BRDO_VIDEOPLAYER2_ENABLED_FF + +//AT&T DownloadMgr path support flag +#undef DOWNLOADMGR_PATH_PLUGIN_ENABLED_FF + //OCC support #undef BRDO_OCC_ENABLED_FF //Single click support #undef BRDO_SINGLE_CLICK_ENABLED_FF +//To enable for IAD Update (For add-on Browser) +#undef BRDO_IAD_UPDATE_ENABLED_FF + // Flag for Multi touch enable #undef BRDO_MULTITOUCH_ENABLED_FF @@ -405,15 +456,24 @@ #undef BRDO_STATIC_DATA_CLEANUP_SUPPORT_FF #elif defined(__PLATFORM_VERSION_52_TB92__) +//Video player 2, surface aware controller, +#define BRDO_VIDEOPLAYER2_ENABLED_FF + // Defines whether SAPI Security Manager Prompt Enhancement is available #undef BRDO_SEC_MGR_PROMPT_ENHANCEMENT_FF //Defines One Click Connectivity support #define BRDO_OCC_ENABLED_FF +//AT&T DownloadMgr path support flag +#define DOWNLOADMGR_PATH_PLUGIN_ENABLED_FF + //Single click support #define BRDO_SINGLE_CLICK_ENABLED_FF +//To enable for IAD Update (For add-on Browser) +#define BRDO_IAD_UPDATE_ENABLED_FF + #define BRDO_BROWSER_50_FF #define BRDO_BROWSER_51_FF #define BRDO_BROWSER_52_FF diff -r 1f3c3f2f5b0a -r c711bdda59f4 web_plat/download_path_plugin_api/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web_plat/download_path_plugin_api/group/bld.inf Wed Mar 31 23:16:40 2010 +0300 @@ -0,0 +1,33 @@ +/* +* ============================================================================== +* Name : bld.inf +* Part of : web_plat / download_path_plugin_api +* Description : Build information file for download path plugin api +* Version : %version: sd1s60p2#1 % << Don't touch! Updated by Synergy at check-out. +* +* Copyright (c) 2010 Nokia Corporation. +* This material, including documentation and any related +* computer programs, is protected by copyright controlled by +* Nokia Corporation. All rights are reserved. Copying, +* including reproducing, storing, adapting or translating, any +* or all of this material requires the prior written consent of +* Nokia Corporation. This material also contains confidential +* information which may not be disclosed to others without the +* prior written consent of Nokia Corporation. +* ============================================================================== +*/ + +#include +#include "../../browser_platform_api/inc/browser_platform_variant.hrh" + +PRJ_PLATFORMS +DEFAULT + +PRJ_EXPORTS +../inc/DownloadPathHandler.h MW_LAYER_PLATFORM_EXPORT_PATH( DownloadPathHandler.h ) +../inc/DownloadPathHandler.inl MW_LAYER_PLATFORM_EXPORT_PATH( DownloadPathHandler.inl ) + +PRJ_MMPFILES + + +// End of File diff -r 1f3c3f2f5b0a -r c711bdda59f4 web_plat/download_path_plugin_api/inc/DownloadPathHandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web_plat/download_path_plugin_api/inc/DownloadPathHandler.h Wed Mar 31 23:16:40 2010 +0300 @@ -0,0 +1,113 @@ +/***************************************************************************** + File : DownloadPathHandler.h + Part of : web_plat / download_path_plugin_api + Description : Download path handler plugin interface definition file + Version : %version: 1 % << Don't touch! Updated by Synergy at check-out. + + Copyright (c) 2010 Nokia Corporation. + This material, including documentation and any related + computer programs, is protected by copyright controlled by + Nokia Corporation. All rights are reserved. Copying, + including reproducing, storing, adapting or translating, any + or all of this material requires the prior written consent of + Nokia Corporation. This material also contains confidential + information which may not be disclosed to others without the + prior written consent of Nokia Corporation. + + ***************************************************************************** + Declaration of the CDownloadPathHandler class + *****************************************************************************/ + +#ifndef DOWNLOADPATHHANDLER_H +#define DOWNLOADPATHHANDLER_H + +// INCLUDES +#include +#include +#include + +// FORWARD DECLARATIONS + +// UID of this interface +const TUid KCDownloadPathHandlerUid = { 0x2002682B }; + +/** +* +* @class CDownloadPathHandler DownloadPathHandler.h +* @brief This is an interface of the Music Download Path Handler ECOM plugin +* +* @version 1.0 +* +*/ +class CDownloadPathHandler : public CBase + { + public: + + /** + * Instantiates an object of this type + * using the aMatchString as the resolver parameter. + * @param aMatchString - 8 bit resolver parameter (content mime type) + * @return CDownloadPathHandler instance + */ + static CDownloadPathHandler* NewL( const TDesC8& aMatchString ); + + /** + * Instantiates an object of this type + * using the aMatchString as the resolver parameter. + * Leaves the pointer to the object on the cleanup stack. + * @param aMatchString - 8 bit resolver parameter (content mime type) + * @return CDownloadPathHandler instance + */ + static CDownloadPathHandler* NewLC( const TDesC8& aMatchString ); + + /** + * Instantiates an object of this type + * using the aMatchString as the resolver parameter. + * @param aMatchString - 16 bit resolver parameter (content mime type) + * @return CDownloadPathHandler instance + */ + static CDownloadPathHandler* NewL( const TDesC& aMatchString ); + + /** + * Instantiates an object of this type + * using the aMatchString as the resolver parameter. + * Leaves the pointer to the object on the cleanup stack. + * @param aMatchString - 16 bit resolver parameter (content mime type) + * @return CDownloadPathHandler instance + */ + static CDownloadPathHandler* NewLC( const TDesC& aMatchString ); + + /** + * Destructor. + */ + virtual ~CDownloadPathHandler(); + + /** + * Request a list of all available implementations which + * satisfy this given interface. + * @param aImplInfoArray - array to be filled in + * @return none + */ + static void ListAllImplementationsL( RImplInfoPtrArray& aImplInfoArray ); + + /** + * Gets the updated destination path to store downloaded content. + * @param aFileName File name with path. + * @param aDestPath Destination path of the content. + */ + virtual void GetUpdatedPathL( const TDesC& aFileName, TDes& aDestPath ) = 0; + + protected: + /** + * Default C++ c'tor + */ + inline CDownloadPathHandler(); + + private: + // Unique instance identifier key + TUid iDtor_ID_Key; + }; + +#include "DownloadPathHandler.inl" + +#endif /* DownloadPathHandler_H */ diff -r 1f3c3f2f5b0a -r c711bdda59f4 web_plat/download_path_plugin_api/inc/DownloadPathHandler.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web_plat/download_path_plugin_api/inc/DownloadPathHandler.inl Wed Mar 31 23:16:40 2010 +0300 @@ -0,0 +1,110 @@ +/***************************************************************************** + File : DownloadPathHandler.inl + Part of : web_plat / download_path_plugin_api + Description : Music path plugin interface inline implementation file + Version : %version: 1 % << Don't touch! Updated by Synergy at check-out. + + Copyright (c) 2010 Nokia Corporation. + This material, including documentation and any related + computer programs, is protected by copyright controlled by + Nokia Corporation. All rights are reserved. Copying, + including reproducing, storing, adapting or translating, any + or all of this material requires the prior written consent of + Nokia Corporation. This material also contains confidential + information which may not be disclosed to others without the + prior written consent of Nokia Corporation. + + ***************************************************************************** + Definition of the CDownloadPathHandler inline functions + *****************************************************************************/ + +// ----------------------------------------------------------------------------- +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +inline CDownloadPathHandler::CDownloadPathHandler() + { + } + +// ----------------------------------------------------------------------------- +// Destructor only uses the ECOM framework and the private member iDtor_ID_Key +// to destroy the instance +// ----------------------------------------------------------------------------- +// +inline CDownloadPathHandler::~CDownloadPathHandler() + { + // Destroy any instance variables and then + // inform the framework that this specific + // instance of the interface has been destroyed. + REComSession::DestroyedImplementation( iDtor_ID_Key ); + } + +// ----------------------------------------------------------------------------- +// This factory uses a resolver parameter to find appropriate type of the +// instance to be returned +// ----------------------------------------------------------------------------- +// +inline CDownloadPathHandler* CDownloadPathHandler::NewL( const TDesC& aMatchString ) + { + CDownloadPathHandler* handler = CDownloadPathHandler::NewLC( aMatchString ); + CleanupStack::Pop( handler ); + return handler; + } + +// ----------------------------------------------------------------------------- +// This factory uses a resolver parameter to find appropriate type of the +// instance to be returned. Leaves pointer on the cleanup stack. +// ----------------------------------------------------------------------------- +// +inline CDownloadPathHandler* CDownloadPathHandler::NewLC( const TDesC& aMatchString ) + { + HBufC8* matchString8 = HBufC8::NewLC( aMatchString.Length() ); + matchString8->Des().Copy( aMatchString ); + CDownloadPathHandler* handler = CDownloadPathHandler::NewLC( matchString8->Des() ); + CleanupStack::PopAndDestroy( matchString8 ); + return handler; + } + +// ----------------------------------------------------------------------------- +// This factory uses a resolver parameter to find appropriate type of the +// instance to be returned +// ----------------------------------------------------------------------------- +// +inline CDownloadPathHandler* CDownloadPathHandler::NewL( const TDesC8& aMatchString ) + { + CDownloadPathHandler* handler = CDownloadPathHandler::NewLC( aMatchString ); + CleanupStack::Pop( handler ); + return handler; + } + +// ----------------------------------------------------------------------------- +// This factory uses a resolver parameter to find appropriate type of the +// instance to be returned. Leaves pointer on the cleanup stack. +// ----------------------------------------------------------------------------- +// +inline CDownloadPathHandler* CDownloadPathHandler::NewLC( const TDesC8& aMatchString ) + { + // Set up the interface find for the default resolver. + TEComResolverParams resolverParams; + resolverParams.SetDataType( aMatchString ); + resolverParams.SetWildcardMatch( ETrue ); // Allow wildcard matching + + TAny* ptr = REComSession::CreateImplementationL( KCDownloadPathHandlerUid, + _FOFF( CDownloadPathHandler,iDtor_ID_Key ), + resolverParams ); + CleanupStack::PushL( ptr ); + return REINTERPRET_CAST( CDownloadPathHandler*, ptr ); + } + +// ----------------------------------------------------------------------------- +// This function lists all the implementations currently present in the +// ECOM framework. +// ----------------------------------------------------------------------------- +// +inline void CDownloadPathHandler::ListAllImplementationsL( RImplInfoPtrArray& aImplInfoArray ) + { + REComSession::ListImplementationsL( KCDownloadPathHandlerUid, aImplInfoArray ); + } + +// End of file diff -r 1f3c3f2f5b0a -r c711bdda59f4 web_plat/group/bld.inf --- a/web_plat/group/bld.inf Mon Mar 15 12:44:50 2010 +0200 +++ b/web_plat/group/bld.inf Wed Mar 31 23:16:40 2010 +0300 @@ -25,6 +25,9 @@ #include "../connection_manager_api/group/bld.inf" #include "../cxml_library_api/group/bld.inf" #include "../download_mgr_client_api_extn/group/bld.inf" +#ifdef DOWNLOADMGR_PATH_PLUGIN_ENABLED_FF +#include "../download_path_plugin_api/group/bld.inf" +#endif #include "../feeds_engine_api/group/bld.inf" #include "../launcher_api/group/bld.inf" #ifdef BRDO_MULTIPART_PARSER_FF diff -r 1f3c3f2f5b0a -r c711bdda59f4 web_plat/widget_registry_api/inc/WidgetRegistryConstants.h --- a/web_plat/widget_registry_api/inc/WidgetRegistryConstants.h Mon Mar 15 12:44:50 2010 +0200 +++ b/web_plat/widget_registry_api/inc/WidgetRegistryConstants.h Wed Mar 31 23:16:40 2010 +0300 @@ -29,6 +29,8 @@ const TUid KWidgetRegistryServerUid = { 0x10282F06 }; const TUid KUidWidgetUi = { 0x10282822 }; const TUid KUidWidgetLauncher = { 0x10282821 }; +const TUid KUidWgtWidgetLauncher = { 0x200267DC }; + #define WIDGETPROPERTYLISTVERSION 4 @@ -73,6 +75,7 @@ _LIT( KWidgetRegistryImage, "WidgetRegistry" ); // DLL/EXE name _LIT8( KWidgetMime, "application/x-nokia-widget"); _LIT( KLauncherApp, "widgetlauncher.exe" ); +_LIT( KWgtLauncherApp, "wgtwidgetlauncher.exe" ); // Enumerations diff -r 1f3c3f2f5b0a -r c711bdda59f4 web_pub/browser_control_api/inc/BrCtlDefs.h --- a/web_pub/browser_control_api/inc/BrCtlDefs.h Mon Mar 15 12:44:50 2010 +0200 +++ b/web_pub/browser_control_api/inc/BrCtlDefs.h Wed Mar 31 23:16:40 2010 +0300 @@ -18,7 +18,7 @@ #ifndef BRCTLDEFS_H #define BRCTLDEFS_H - +#include // INCLUDES // DATA TYPES @@ -207,6 +207,14 @@ ECommandLeaveFullscreenBrowsing, ECommandZoomIn, ECommandZoomOut +#ifdef BRDO_OCC_ENABLED_FF + , + ECommandRetryTransactions, + ECommandSetRetryConnectivityFlag, + ECommandUnSetRetryConnectivityFlag, + ECommandClearQuedTransactions, + ECommandConnToDownloadManager +#endif }; /** * The load event that occurred. diff -r 1f3c3f2f5b0a -r c711bdda59f4 web_pub/browser_control_api/tsrc/data/ui_browser_control_api.cfg --- a/web_pub/browser_control_api/tsrc/data/ui_browser_control_api.cfg Mon Mar 15 12:44:50 2010 +0200 +++ b/web_pub/browser_control_api/tsrc/data/ui_browser_control_api.cfg Wed Mar 31 23:16:40 2010 +0300 @@ -312,14 +312,7 @@ delete container [Endtest] -[Test] -title HandleCommandShowHistory BC Test -create BrCtlApiTest container -container CreateBrowserControl -container HandleCommand ShowHistory -container DestroyBrowserControl -delete container -[Endtest] + [Test] title HandleCommandDisconnect2 BC Test @@ -375,14 +368,7 @@ delete container [Endtest] -[Test] -title HandleCommandRemoveFileName BC Test -create BrCtlApiTest container -container CreateBrowserControl -container HandleCommand RemoveFileName -container DestroyBrowserControl -delete container -[Endtest] + [Test] title HandleCommandShowImages BC Test diff -r 1f3c3f2f5b0a -r c711bdda59f4 webengine/device/src/DeviceLiwBinding.cpp --- a/webengine/device/src/DeviceLiwBinding.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/webengine/device/src/DeviceLiwBinding.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -1149,13 +1149,16 @@ } CWidgetPropertyValue* displayname = widgetregistry.GetWidgetPropertyValueL(m_Uid, EBundleDisplayName ); + if(displayname) + { + CleanupStack::PushL(displayname); + if(displayname->iType == EWidgetPropTypeString) + m_scriptSession->SetApplicationNameL(*displayname); + CleanupStack::PopAndDestroy(); // displayname + } + User::LeaveIfError(widgetregistry.Disconnect()); - CleanupStack::PopAndDestroy(); //widgetregistry - - if ( displayname && displayname->iType == EWidgetPropTypeString ) - { - m_scriptSession->SetApplicationNameL(*displayname); - } + CleanupStack::PopAndDestroy(); // widgetregistry ); } #endif diff -r 1f3c3f2f5b0a -r c711bdda59f4 webengine/osswebengine/WebCore/bridge/EditorClient.h --- a/webengine/osswebengine/WebCore/bridge/EditorClient.h Mon Mar 15 12:44:50 2010 +0200 +++ b/webengine/osswebengine/WebCore/bridge/EditorClient.h Wed Mar 31 23:16:40 2010 +0300 @@ -138,9 +138,7 @@ virtual bool spellingUIIsShowing() = 0; virtual void getGuessesForWord(const String&, Vector& guesses) = 0; virtual void setInputMethodState(bool enabled) = 0; -#if PLATFORM(SYMBIAN) - virtual void preFocusChange(Node* oldNode, Node* newNode) = 0; -#endif + }; } diff -r 1f3c3f2f5b0a -r c711bdda59f4 webengine/osswebengine/WebCore/page/FocusController.cpp --- a/webengine/osswebengine/WebCore/page/FocusController.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/webengine/osswebengine/WebCore/page/FocusController.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -268,10 +268,7 @@ if (oldFocusedNode && oldFocusedNode->rootEditableElement() == oldFocusedNode && !relinquishesEditingFocus(oldFocusedNode)) return false; -#if PLATFORM(SYMBIAN) - m_page->editorClient()->preFocusChange(oldFocusedNode,node); -#endif - + clearSelectionIfNeeded(oldFocusedFrame.get(), newFocusedFrame.get(), node); if (!node) { diff -r 1f3c3f2f5b0a -r c711bdda59f4 webengine/osswebengine/WebCore/page/symbian/WebCoreFrameBridge.cpp --- a/webengine/osswebengine/WebCore/page/symbian/WebCoreFrameBridge.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/webengine/osswebengine/WebCore/page/symbian/WebCoreFrameBridge.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -162,7 +162,8 @@ bool userChosen = !encoding.isNull() && !encoding.isEmpty(); if (encoding.isNull()||encoding.isEmpty()) encoding = textEncodingName; - m_frame->loader()->setEncoding(encoding, userChosen); + if (m_frame && m_frame->loader()) + m_frame->loader()->setEncoding(encoding, userChosen); addData(data, length); } diff -r 1f3c3f2f5b0a -r c711bdda59f4 webengine/osswebengine/WebCore/platform/network/symbian/HttpConnection.cpp --- a/webengine/osswebengine/WebCore/platform/network/symbian/HttpConnection.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/webengine/osswebengine/WebCore/platform/network/symbian/HttpConnection.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -709,7 +709,12 @@ const TDesC8& fragment = uriParser.Extract( EUriFragment ); delete m_frag; m_frag = NULL; - m_frag = fragment.AllocL(); + //Browser does not allow fragment size of greater than 2083 bytes + TInt32 maxbyte = fragment.Length(); + if ( maxbyte <= 2083) + { + m_frag = fragment.AllocL(); + } } HandleSpecialEvent(aEvent.iStatus); break; @@ -721,7 +726,10 @@ default: { // error handling - handleError(aEvent.iStatus); + if(aEvent.iStatus == KErrNotReady || aEvent.iStatus == KErrDisconnected ) + StaticObjectsContainer::instance()->resourceLoaderDelegate()->httpSessionManager()->setRetryConnectivityFlag(); + else + handleError(aEvent.iStatus); break; } } @@ -779,6 +787,13 @@ void HttpConnection::complete(int error) { + TBool retryFlag = StaticObjectsContainer::instance()->resourceLoaderDelegate()->httpSessionManager()->getRetryConnectivityFlag(); + if( retryFlag ) + { + //m_cancelled = false; //for flash + return; + } + if (m_defersData) { m_defersData->m_done = true; m_defersData->m_error = error; @@ -814,6 +829,7 @@ m_MultipartContentHandler->MarkupContent(), m_maxSize, this); } delete m_MultipartContentHandler; + m_IsMultipart = false; } if (!error) { // Spawn active object for call to return immediately, to avoid blocking diff -r 1f3c3f2f5b0a -r c711bdda59f4 webengine/osswebengine/WebCore/platform/network/symbian/HttpSessionManager.cpp --- a/webengine/osswebengine/WebCore/platform/network/symbian/HttpSessionManager.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/webengine/osswebengine/WebCore/platform/network/symbian/HttpSessionManager.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -37,6 +37,7 @@ #include "ResourceHandleManagerSymbian.h" #include "StaticObjectsContainer.h" #include "WebFrame.h" +#include "ResourceHandleClient.h" // CONSTANTS _LIT8( KHttpProtString, "HTTP/TCP" ); @@ -58,6 +59,7 @@ m_httpDownload = NULL; m_SelfDownloadContentHandler = NULL; m_SelfDownloadContentTypes = KNullStr().Alloc(); + retryConnectivityFlag = EFalse; } HttpSessionManager::~HttpSessionManager() @@ -256,6 +258,28 @@ } } +void HttpSessionManager::retryTransactions() +{ + Vector requests; + + for(HashMap::iterator tmpit = m_pendingHttpRequests.begin(); + tmpit != m_pendingHttpRequests.end(); ++tmpit) + { + ResourceHandle *tmp = tmpit->second; + ResourceHandleClient* client = tmp->client(); + if(!client->isLoadingPlugins()) + requests.append(tmpit->first); + } + //Cancel all transactions first + //Submit them again + for (int i=0; iHttpTransaction()->Cancel(); + requests[i]->HttpTransaction()->SubmitL(); + } + +} + HttpConnection* HttpSessionManager::firstHttpConnection() { HashMap::const_iterator it = m_pendingHttpRequests.begin(); diff -r 1f3c3f2f5b0a -r c711bdda59f4 webengine/osswebengine/WebCore/platform/network/symbian/HttpSessionManager.h --- a/webengine/osswebengine/WebCore/platform/network/symbian/HttpSessionManager.h Mon Mar 15 12:44:50 2010 +0200 +++ b/webengine/osswebengine/WebCore/platform/network/symbian/HttpSessionManager.h Wed Mar 31 23:16:40 2010 +0300 @@ -95,7 +95,12 @@ void UpdateCacheL( const WebCore::String& url, const WebCore::String &equiv, const WebCore::String &content ); void ResetOutstandingSelfDl() {m_OutstandingSelfDl = false; } const RPointerArray& ClientAcceptHeaders() const { return m_ClientAcceptHeaders; } - + void retryTransactions(); + void setRetryConnectivityFlag(){ retryConnectivityFlag = ETrue; } + TBool getRetryConnectivityFlag(){ return retryConnectivityFlag; } + void unSetRetryConnectivityFlag(){ retryConnectivityFlag = EFalse; } + TUint pendingTransactionsCount(){ return m_pendingHttpRequests.size(); } + private: void updateFilters(bool initializing = false); int count(); @@ -128,6 +133,8 @@ HBufC* m_SelfDownloadContentTypes; bool m_OutstandingSelfDl; RPointerArray m_ClientAcceptHeaders; + TBool retryConnectivityFlag; + }; #endif // __HTTPSESSIONMANAGER_H__ // end of file diff -r 1f3c3f2f5b0a -r c711bdda59f4 webengine/osswebengine/WebCore/platform/network/symbian/HttpUiCallbacks.cpp --- a/webengine/osswebengine/WebCore/platform/network/symbian/HttpUiCallbacks.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/webengine/osswebengine/WebCore/platform/network/symbian/HttpUiCallbacks.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -245,7 +245,9 @@ } // If the user selected "No" or "Cancel", we are cancelling the load if ( !result ) - { + { //Update history view Index also here... + if( brctl->historyHandler()->historyController()->historyViewEnabled() ) + brctl->historyHandler()->historyController()->rollBackIndex(); brctl->HandleBrowserLoadEventL(TBrCtlDefs::EEventContentFinished,0,0); return KErrCancel; } diff -r 1f3c3f2f5b0a -r c711bdda59f4 webengine/osswebengine/WebCore/platform/symbian/FontCacheSymbian.cpp --- a/webengine/osswebengine/WebCore/platform/symbian/FontCacheSymbian.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/webengine/osswebengine/WebCore/platform/symbian/FontCacheSymbian.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -161,6 +161,8 @@ return iDeviceDefaultFont; } +const double KFontZoomStepSize = 0.05; +const double KFontZoomBeginValue = 1.00; CFont* PlatformFontCache::CreateFont(const ZoomedSpec& spec) { CFont* font = 0; @@ -174,15 +176,26 @@ } } - if (spec.m_spec.iTypeface.iName == KPlatformDefaultFontFamily) { // fall back to platform default fonts by using TAknFontFamily font = AknFontAccess::GetClosestFont(*iScreenDevice, spec.m_spec.iFontStyle, spec.m_spec.iHeight * spec.m_zoom/100, (AknFontAccess::TAknFontFamily)0); } else { font = AknFontAccess::GetClosestFont(*iScreenDevice, spec.m_spec.iFontStyle, spec.m_spec.iHeight * spec.m_zoom/100, spec.m_spec.iTypeface.iName); + + if(spec.m_zoom != 100) { + CFont *fontAt100Zoom = AknFontAccess::GetClosestFont(*iScreenDevice, spec.m_spec.iFontStyle, spec.m_spec.iHeight, spec.m_spec.iTypeface.iName); + + double zoomout = KFontZoomBeginValue; + /* When width zoom ratio exceeds the expected zoom value, adjust it by reducing the font size*/ + while((font->MaxCharWidthInPixels() * 100.0)/fontAt100Zoom->MaxCharWidthInPixels() > spec.m_zoom) { + zoomout = zoomout - KFontZoomStepSize; + ReleaseFont(font); + font = AknFontAccess::GetClosestFont(*iScreenDevice, spec.m_spec.iFontStyle, (spec.m_spec.iHeight * spec.m_zoom * zoomout)/100, spec.m_spec.iTypeface.iName); + } + ReleaseFont(fontAt100Zoom); + } } - if (font) { ZoomedSpec newSpec(spec); diff -r 1f3c3f2f5b0a -r c711bdda59f4 webengine/osswebengine/WebCore/platform/symbian/RenderThemeSymbian.cpp --- a/webengine/osswebengine/WebCore/platform/symbian/RenderThemeSymbian.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/webengine/osswebengine/WebCore/platform/symbian/RenderThemeSymbian.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -480,7 +480,9 @@ image = m_selectArrow; break; } - CMaskedBitmap* maskedBitmap = image->getMaskedBitmap(); + CMaskedBitmap* maskedBitmap = NULL; + if(image) + maskedBitmap = image->getMaskedBitmap(); if (!maskedBitmap) User::Leave(KErrGeneral); // should not really happen TSize size = maskedBitmap->SizeInPixels(); size.iWidth = (size.iWidth * scalingFactor) / 100; diff -r 1f3c3f2f5b0a -r c711bdda59f4 webengine/osswebengine/WebCore/rendering/RenderFrameSet.cpp --- a/webengine/osswebengine/WebCore/rendering/RenderFrameSet.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/webengine/osswebengine/WebCore/rendering/RenderFrameSet.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -474,8 +474,10 @@ // make the top level frameset at least 800*600 wide/high calcPrefWidths(); m_width = max(m_width, m_minPrefWidth); +#ifndef PLATFORM(SYMBIAN) if (!v->frame()->ownerElement()) m_height = max(m_height, 600); +#endif } } @@ -518,9 +520,11 @@ if (!flattenFrameset()) return; +#ifndef PLATFORM(SYMBIAN) // make the top level frameset at least 800*600 wide/high if (!parent()->isFrameSet() && !element()->document()->frame()->ownerElement()) m_minPrefWidth = max(m_minPrefWidth, 800); +#endif m_maxPrefWidth = m_minPrefWidth; diff -r 1f3c3f2f5b0a -r c711bdda59f4 webengine/osswebengine/WebCore/rendering/RenderLayer.cpp --- a/webengine/osswebengine/WebCore/rendering/RenderLayer.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/webengine/osswebengine/WebCore/rendering/RenderLayer.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -1298,9 +1298,15 @@ static Image* resizeCornerImage; if (!resizeCornerImage) resizeCornerImage = Image::loadPlatformResource("textAreaResizeCorner"); - IntPoint imagePoint(scrollCorner.right() - resizeCornerImage->width(), scrollCorner.bottom() - resizeCornerImage->height()); - p->drawImage(resizeCornerImage, imagePoint); - +#if PLATFORM(SYMBIAN) + if(resizeCornerImage){ + IntPoint imagePoint(scrollCorner.right() - resizeCornerImage->width(), scrollCorner.bottom() - resizeCornerImage->height()); + p->drawImage(resizeCornerImage, imagePoint); + } +#else + IntPoint imagePoint(scrollCorner.right() - resizeCornerImage->width(), scrollCorner.bottom() - resizeCornerImage->height()); + p->drawImage(resizeCornerImage, imagePoint); +#endif // Draw a frame around the resizer (1px grey line) if there are any scrollbars present. // Clipping will exclude the right and bottom edges of this frame. if (m_hBar || m_vBar) { diff -r 1f3c3f2f5b0a -r c711bdda59f4 webengine/osswebengine/WebCore/rendering/bidi.cpp --- a/webengine/osswebengine/WebCore/rendering/bidi.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/webengine/osswebengine/WebCore/rendering/bidi.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -760,6 +760,8 @@ int maxTextWidth = v->frameView()->frame()->bridge()->maxBidiWidth(); maxTextWidth = max(maxTextWidth - leftOffset(m_height), 0); availableWidth = min(availableWidth, maxTextWidth); + //total width is more then availaible width.Dont justify based on screen width + availableWidth = totWidth > availableWidth ? lineWidth(m_height) : availableWidth ; } #endif spaceAdd = (availableWidth - totWidth)*spaces/numSpaces; diff -r 1f3c3f2f5b0a -r c711bdda59f4 webengine/osswebengine/WebKit/s60/plugins/PluginSkin.cpp --- a/webengine/osswebengine/WebKit/s60/plugins/PluginSkin.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/webengine/osswebengine/WebKit/s60/plugins/PluginSkin.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -44,6 +44,8 @@ #include "ResourceRequest.h" #include "Widget.h" #include "PlatformScrollBar.h" +#include "Page.h" +#include "FocusController.h" #include #include @@ -52,6 +54,7 @@ #include "WidgetExtension.h" #include + // CONSTANTS using namespace WebCore; // scheme for RTSP url @@ -195,8 +198,11 @@ #endif TInt uid = wdgtExt->GetWidgetId(); + CWidgetPropertyValue* AccessValue = widgetregistry.GetWidgetPropertyValueL(TUid::Uid(uid), EAllowNetworkAccess ); - TInt networkAccess = *AccessValue; + TInt networkAccess = AccessValue && *AccessValue; + delete AccessValue; + const TDesC& allowNetworkAccess = KAllowNetworkAccess(); NPN_GenericElement NetworkAccess(allowNetworkAccess,networkAccess); iGenericElementArray->AppendL(NetworkAccess); @@ -566,6 +572,7 @@ { m_active = ETrue; m_frame->frameView()->topView()->setFocusedElementType(TBrCtlDefs::EElementActivatedObjectBox); + control(m_frame)->webView()->page()->focusController()->setFocusedNode(getElement(), control(m_frame)->webView()->page()->focusController()->focusedOrMainFrame()); pluginHandler->setActivePlugin(this); pluginHandler->setPluginToActivate(NULL); } @@ -805,7 +812,7 @@ if (url.Ptr() == NULL ) { return KErrArgument; } - _LIT8(KSwfExtn, ".swf"); + _LIT8(KJs, "javascript:"); if ((url.Length() > KJs().Length() ) &&(url.Left(KJs().Length()).FindF(KJs) == 0)) { HBufC* pBuffer = HBufC::NewL(url.Length()); @@ -827,8 +834,8 @@ HBufC8* absoluteUrl = makeAbsoluteUrlL(m_url, docUrl, url); CleanupStack::PushL(absoluteUrl); - if( (loadmode == ELoadModePlugin ) || (url.FindF(KSwfExtn)!= KErrNotFound) ){ - + PluginHandler* pluginHandler = StaticObjectsContainer::instance()->pluginHandler(); + if( (loadmode == ELoadModePlugin ) || (loadmode == ELoadModeTop && (pluginHandler->pluginMimeByExtention(url) != NULL)) ){ if (m_instance && m_pluginfuncs) { NetscapePlugInStreamLoaderClient* pluginloader = NetscapePlugInStreamLoaderClient::NewL(url, this, core(m_frame), notifydata, notify); @@ -1198,3 +1205,40 @@ return EWindowTypeUnknown; } + +void PluginSkin::reCreatePlugin() +{ + //destroy the plugin + + Vector streams; + for (HashSet::iterator it = m_streams.begin(); it != m_streams.end(); ++it) { + streams.append(*it); + } + for (int i=0; iclose(); + } + m_streams.clear(); + + if (m_instance && m_pluginfuncs && m_pluginfuncs->destroy) { + m_pluginfuncs->destroy(m_instance, NULL); + } + User::Free(m_instance); m_instance = 0; + delete m_pluginwin; m_pluginwin = 0; + delete iJavascriptTimer; iJavascriptTimer = 0; + + RFs& rfs = StaticObjectsContainer::instance()->fsSession(); + for(TInt i=0; i < m_tempFilesArray.Count(); i++) + { + rfs.Delete(m_tempFilesArray[i]->Des()); + } + + m_tempFilesArray.ResetAndDestroy(); + + + //create/load the destroyed plugin again + + NetscapePlugInStreamLoaderClient* pluginloader = NetscapePlugInStreamLoaderClient::NewL(m_url->Des(), this, core(m_frame)); + if (pluginloader) { + pluginloader->start(); + } +} diff -r 1f3c3f2f5b0a -r c711bdda59f4 webengine/osswebengine/WebKit/s60/plugins/PluginSkin.h --- a/webengine/osswebengine/WebKit/s60/plugins/PluginSkin.h Mon Mar 15 12:44:50 2010 +0200 +++ b/webengine/osswebengine/WebKit/s60/plugins/PluginSkin.h Wed Mar 31 23:16:40 2010 +0300 @@ -414,6 +414,8 @@ TInt handleNetworkAccess() const; WebCore::Element* getElement() {return m_element;} void setElement(WebCore::Element* aElement) {m_element = aElement;} + void reCreatePlugin(); + TInt activeStreams() { return m_streams.size(); } public: // from MMemoryCollector TUint Collect(unsigned int aRequired); diff -r 1f3c3f2f5b0a -r c711bdda59f4 webengine/osswebengine/WebKit/s60/plugins/PluginWin.cpp --- a/webengine/osswebengine/WebKit/s60/plugins/PluginWin.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/webengine/osswebengine/WebKit/s60/plugins/PluginWin.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -223,6 +223,7 @@ cursor->cursorUpdate(EFalse); consumed = ETrue; setPluginFocusL( ETrue ); + m_pluginskin->pluginFocusChanged(ETrue); } else diff -r 1f3c3f2f5b0a -r c711bdda59f4 webengine/osswebengine/WebKit/s60/webcoresupport/WebEditorClient.cpp --- a/webengine/osswebengine/WebKit/s60/webcoresupport/WebEditorClient.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/webengine/osswebengine/WebKit/s60/webcoresupport/WebEditorClient.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -317,7 +317,7 @@ //----------------------------------------------------------------------------- void WebEditorClient::handleKeypress(KeyboardEvent* event) { - if (!m_webView && !m_webView->page()) { + if (!(m_webView && m_webView->page())) { return; } @@ -691,12 +691,6 @@ } } -void WebEditorClient::preFocusChange(Node* oldNode, Node* newNode) - { - TBool contentEditable = m_webView->page()->focusController()->focusedOrMainFrame()->selectionController()->isContentEditable(); - if ( oldNode && newNode && contentEditable ) { - m_webView->fepTextEditor()->FocusChanging(); - } - } + diff -r 1f3c3f2f5b0a -r c711bdda59f4 webengine/osswebengine/WebKit/s60/webcoresupport/WebEditorClient.h --- a/webengine/osswebengine/WebKit/s60/webcoresupport/WebEditorClient.h Mon Mar 15 12:44:50 2010 +0200 +++ b/webengine/osswebengine/WebKit/s60/webcoresupport/WebEditorClient.h Wed Mar 31 23:16:40 2010 +0300 @@ -97,7 +97,7 @@ bool spellingUIIsShowing(); void getGuessesForWord(const WebCore::String&, Vector& guesses); void setInputMethodState(bool enabled); - void preFocusChange(WebCore::Node* oldNode, WebCore::Node* newNode); + private: void handleInsertText(WebCore::Frame* frame, const WebCore::String& text); diff -r 1f3c3f2f5b0a -r c711bdda59f4 webengine/osswebengine/WebKit/s60/webview/BrCtl.cpp --- a/webengine/osswebengine/WebKit/s60/webview/BrCtl.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/webengine/osswebengine/WebKit/s60/webview/BrCtl.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -502,8 +502,6 @@ // Set the rect for BrowserControl (a CCoeControl). SetRect(aRect); CCoeEnv::Static()->DisableExitChecks(true); - Window().AllocPointerMoveBuffer(256, 0); - Window().DisablePointerMoveBuffer(); Window().PointerFilter(EPointerFilterMove | EPointerFilterDrag | EPointerFilterEnterExit, 0); ActivateL(); } @@ -962,6 +960,48 @@ break; } +#ifdef BRDO_OCC_ENABLED_FF + case TBrCtlDefs::ECommandSetRetryConnectivityFlag: + { + StaticObjectsContainer::instance()->resourceLoaderDelegate()->httpSessionManager()->setRetryConnectivityFlag(); + break; + } + case TBrCtlDefs::ECommandUnSetRetryConnectivityFlag: + { + StaticObjectsContainer::instance()->resourceLoaderDelegate()->httpSessionManager()->unSetRetryConnectivityFlag(); + break; + } + case TBrCtlDefs::ECommandRetryTransactions: + { + StaticObjectsContainer::instance()->resourceLoaderDelegate()->httpSessionManager()->retryTransactions(); + m_webView->reCreatePlugins(); + break; + } + case TBrCtlDefs::ECommandClearQuedTransactions: + { + StaticObjectsContainer::instance()->resourceLoaderDelegate()->httpSessionManager()->handleError(KErrCancel); + break; + } + case TBrCtlDefs::ECommandConnToDownloadManager: + { + TInt connectionPtr = 0; + TInt sockSvrHandle = 0; + TBool newConn = ETrue; + TApBearerType bearerType; + TInt error = KErrNone; + + TRAP(error, m_brCtlSpecialLoadObserver->NetworkConnectionNeededL(&connectionPtr, &sockSvrHandle, &newConn, &bearerType)); + if( error == KErrNone && connectionPtr ) + { + RConnection* connPtr = REINTERPRET_CAST( RConnection*, connectionPtr ); + TName name; + connPtr->Name( name ); + StaticObjectsContainer::instance()->resourceLoaderDelegate()->httpSessionManager()->httpDownload()->connect(name); + } + break; + } +#endif + default: { if ( m_wmlEngineInterface && @@ -1169,7 +1209,9 @@ } int after = aAfter == -1 ? aAfter :0; - TBrCtlDefs::TBrCtlElementType focusedElementType = FocusedElementType(); + TBrCtlDefs::TBrCtlElementType focusedElementType; + if(m_webView) + focusedElementType = FocusedElementType(); int count = sizeof(commandsArray) / sizeof(TCommandsArray); bool found = false; @@ -1803,7 +1845,7 @@ m_webView->checkForZoomChange(); } - if( m_webView->pageFullScreenHandler() && m_webView->pageFullScreenHandler()->isFullScreenMode() ) { + if(m_webView && m_webView->pageFullScreenHandler() && m_webView->pageFullScreenHandler()->isFullScreenMode() ) { if (visible) m_webView->pageFullScreenHandler()->showEscBtnL(); else @@ -2100,6 +2142,7 @@ if(StaticObjectsContainer::instance()->isPluginFullscreen()) { PluginSkin* plugin=m_webView->mainFrame()->focusedPlugin(); + if(plugin) plugin->deActivate(); } newBrctl = m_brCtlWindowObserver->OpenWindowL(emptyUrl, &windowName, userGesture, 0); diff -r 1f3c3f2f5b0a -r c711bdda59f4 webengine/osswebengine/WebKit/s60/webview/HistoryInterface.h --- a/webengine/osswebengine/WebKit/s60/webview/HistoryInterface.h Mon Mar 15 12:44:50 2010 +0200 +++ b/webengine/osswebengine/WebKit/s60/webview/HistoryInterface.h Wed Mar 31 23:16:40 2010 +0300 @@ -242,6 +242,7 @@ virtual TBool possibleWmlOEB() = 0; virtual void performTransition(int direction) = 0; + virtual void rollBackIndex() = 0; }; diff -r 1f3c3f2f5b0a -r c711bdda59f4 webengine/osswebengine/WebKit/s60/webview/WebCursor.cpp --- a/webengine/osswebengine/WebKit/s60/webview/WebCursor.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/webengine/osswebengine/WebKit/s60/webview/WebCursor.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -791,6 +791,9 @@ { m_pos = pt; m_sprite->SetPos(pt); +#ifdef BRDO_TOUCH_ENABLED_FF + m_sprite->Hide(); +#endif WebFrame* frame = getFrameAtPoint(pt); TBrCtlDefs::TBrCtlElementType elType; TRect r; diff -r 1f3c3f2f5b0a -r c711bdda59f4 webengine/osswebengine/WebKit/s60/webview/WebFepTextEditor.cpp --- a/webengine/osswebengine/WebKit/s60/webview/WebFepTextEditor.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/webengine/osswebengine/WebKit/s60/webview/WebFepTextEditor.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -154,7 +154,7 @@ state->SetPermittedInputModes(EAknEditorSecretAlphaInputMode | EAknEditorNumericInputMode); state->SetDefaultCase(EAknEditorLowerCase); state->SetSpecialCharacterTableResourceId(R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_LATIN_ONLY); - state->SetNumericKeymap(EAknEditorPlainNumberModeKeymap); + state->SetNumericKeymap(EAknEditorStandardNumberModeKeymap); } } else { @@ -1470,21 +1470,6 @@ } // ----------------------------------------------------------------------------- -// FocusChanging -// -// Called when the focus of the node changes, to commit the text -// ----------------------------------------------------------------------------- -void CWebFepTextEditor::FocusChanging() - { - CAknEdwinState* state = static_cast(State(KNullUid)); - if ( state ) { - TRAP_IGNORE( state->ReportAknEdStateEventL(MAknEdStateObserver::EAknSyncEdwinState ) ); - } - CommitFepInlineEditL(*CEikonEnv::Static()); - CancelEditingMode(); - } - -// ----------------------------------------------------------------------------- // IsLongKeyPress // // Called to know the status of the key pressed diff -r 1f3c3f2f5b0a -r c711bdda59f4 webengine/osswebengine/WebKit/s60/webview/WebFepTextEditor.h --- a/webengine/osswebengine/WebKit/s60/webview/WebFepTextEditor.h Mon Mar 15 12:44:50 2010 +0200 +++ b/webengine/osswebengine/WebKit/s60/webview/WebFepTextEditor.h Wed Mar 31 23:16:40 2010 +0300 @@ -131,7 +131,6 @@ void HandleMaskedInsertText(WebCore::Frame* frame, const String& text); void HandleMaskedDeleteText(WebCore::Frame* frame); bool IsWapMaskedModeInput(WebCore::Frame* frame); - void FocusChanging(); void EnableCcpuL(); private: diff -r 1f3c3f2f5b0a -r c711bdda59f4 webengine/osswebengine/WebKit/s60/webview/WebFrame.cpp --- a/webengine/osswebengine/WebKit/s60/webview/WebFrame.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/webengine/osswebengine/WebKit/s60/webview/WebFrame.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -582,7 +582,7 @@ } // check if we are close enough and calcualte with zoom factor. - if (dist< (400/m_view->topView()->scalingFactor() * 100)) { + if (result && dist< (400/m_view->topView()->scalingFactor() * 100)) { IntRect r = result->getRect(); r.inflate(-2); TPoint docPos(xInRect(r, pt.x()), yInRect(r, pt.y())); diff -r 1f3c3f2f5b0a -r c711bdda59f4 webengine/osswebengine/WebKit/s60/webview/WebPageScrollHandler.cpp --- a/webengine/osswebengine/WebKit/s60/webview/WebPageScrollHandler.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/webengine/osswebengine/WebKit/s60/webview/WebPageScrollHandler.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -34,7 +34,7 @@ #include "WebScrollbarDrawer.h" #include "RenderObject.h" #include "WebScrollingDeceleratorGH.h" - +#include "pluginskin.h" #include "WebKitLogger.h" using namespace WebCore; // constants @@ -649,6 +649,9 @@ m_pageOverviewScrollPeriodic->Cancel(); } m_webView->closePageView(); + PluginSkin* plugin = m_webView->mainFrame()->focusedPlugin(); + if(plugin) + plugin->setPluginWinClipedRect(); scrollPageOverviewGH(); m_webView->setViewIsScrolling(false); m_webView->toggleRepaintTimer(true); diff -r 1f3c3f2f5b0a -r c711bdda59f4 webengine/osswebengine/WebKit/s60/webview/WebPointerEventHandler.cpp --- a/webengine/osswebengine/WebKit/s60/webview/WebPointerEventHandler.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/webengine/osswebengine/WebKit/s60/webview/WebPointerEventHandler.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -44,7 +44,6 @@ #include "EventHandler.h" #include "EventNames.h" #include "HitTestResult.h" -#include "HitTestRequest.h" #include "MouseEvent.h" #include "WebPageFullScreenHandler.h" #include "PluginSkin.h" @@ -57,13 +56,6 @@ #include "WebTabbedNavigation.h" #include "SettingsContainer.h" #include "PluginHandler.h" -#include "WebCoreGraphicsContext.h" -#include "GraphicsContext.h" -#include "RenderStyle.h" -#include "RenderObject.h" -#include "CSSStyleSelector.h" -#include "CSSValueKeywords.h" -#include "Settings.h" #include "WebGestureInterface.h" #include "WebPagePinchZoomHandler.h" #include "WebScrollingDeceleratorGH.h" @@ -142,9 +134,15 @@ PluginSkin* plugin = m_webview->mainFrame()->focusedPlugin(); if (plugin && plugin->pluginWin()) { if (plugin->pluginWin()->HandleGesture(aGesture)) { - if(!plugin->isActive()) + if(!plugin->isActive()) { plugin->activate(); - return; + } + else { + m_webview->mainFrame()->frameView()->topView()->setFocusedElementType(TBrCtlDefs::EElementActivatedObjectBox); + m_webview->page()->focusController()->setFocusedNode(plugin->getElement(), m_webview->page()->focusController()->focusedOrMainFrame()); + m_webview->brCtl()->updateDefaultSoftkeys(); + } + return; } } @@ -209,7 +207,10 @@ case stmGesture::EGestureUidPinch: { + if(!m_webview->inPageViewMode()) + { handlePinchZoomL(aGesture); + } break; } default: @@ -415,10 +416,6 @@ Element* eventNode = frm->document()->elementFromPoint(pt.iX, pt.iY); - if (m_isHighlighted){ - dehighlight(pos); - } - m_highlightedNode = NULL; Node* retNode = 0; @@ -487,11 +484,7 @@ } } #endif // BRDO_TOUCH_ENABLED_FF - - if (!IS_NAVIGATION_NONE) { - m_webview->sendMouseEventToEngine(TPointerEvent::EMove, m_highlightPos, coreFrame); - } - + /* * We assume that if element visibility has been changed * between "up" and "down" that means that some node event @@ -538,15 +531,15 @@ //----------------------------------------------------------------------------- // WebPointerEventHandler::deHighlight //----------------------------------------------------------------------------- -void WebPointerEventHandler::dehighlight(const TPoint &aPoint) +void WebPointerEventHandler::dehighlight() { - // m_highlightPos should be (-1, -1). + // send dehighlight event to engine by passing -1, -1 + // sending any other pointer value may result in highligh of other links m_highlightPos = TPoint(-1, -1); m_isHighlighted = EFalse; Frame* frm = m_webview->page()->focusController()->focusedOrMainFrame(); - m_webview->sendMouseEventToEngine(TPointerEvent::EMove, aPoint, frm); - + m_webview->sendMouseEventToEngine(TPointerEvent::EMove, m_highlightPos, frm); m_highlightedNode = NULL; @@ -597,10 +590,6 @@ Frame* coreFrame = core(m_webview->mainFrame()); TPointerEvent event; - - if (!IS_NAVIGATION_NONE) { - m_webview->page()->chrome()->client()->setElementVisibilityChanged(false); - } TBrCtlDefs::TBrCtlElementType elType = highlitableElement(); @@ -608,7 +597,8 @@ elType = TBrCtlDefs::EElementNone; } m_isHighlighted = (m_highlightedNode != NULL) && (elType != TBrCtlDefs::EElementNone) ; - + m_webview->page()->chrome()->client()->setElementVisibilityChanged(false); + /* * Tabbed navigation might already set the focused node. * If it's the same as m_highlightedNode FocuseController::setFocusedNode() @@ -623,12 +613,8 @@ } if (!IS_NAVIGATION_NONE) { - //to initiate hover - if (m_isHighlighted) { - setFocusRing(); - } - - } + m_webview->sendMouseEventToEngine(TPointerEvent::EMove, m_highlightPos, coreFrame); + } else { m_webview->sendMouseEventToEngine(TPointerEvent::EButton1Down, m_highlightPos, coreFrame); } @@ -657,25 +643,6 @@ } } -//----------------------------------------------------------------------------- -// WebPointerEventHandler::setFocusRing -//---------------------------------------------------------------------------- -void WebPointerEventHandler::setFocusRing() -{ - Element* e = static_cast(m_highlightedNode); - RenderStyle* rs = e->renderStyle(); - RenderStyle* style = new (e->document()->renderArena()) RenderStyle(*rs); - Color col(0xffaaaaff); - - style->ref(); - style->setOutlineColor(col); - style->setOutlineStyle(DOTTED, true); - style->setOutlineWidth(4); - style->setOutlineOffset(2); - e->setRenderStyle(style); - style->deref(e->document()->renderArena()); - e->setChanged(); -} //----------------------------------------------------------------------------- // WebPointerEventHandler::handlePinchZoom diff -r 1f3c3f2f5b0a -r c711bdda59f4 webengine/osswebengine/WebKit/s60/webview/WebPointerEventHandler.h --- a/webengine/osswebengine/WebKit/s60/webview/WebPointerEventHandler.h Mon Mar 15 12:44:50 2010 +0200 +++ b/webengine/osswebengine/WebKit/s60/webview/WebPointerEventHandler.h Wed Mar 31 23:16:40 2010 +0300 @@ -49,7 +49,7 @@ private: bool checkForEventListener(WebCore::Node* node); bool canDehighlight(const TPoint &aPoint); - void dehighlight(const TPoint &aPoint = TPoint(-1,-1)); + void dehighlight(); bool isHighlitableElement(TBrCtlDefs::TBrCtlElementType& elType); TBrCtlDefs::TBrCtlElementType highlitableElement(); @@ -61,7 +61,6 @@ void handleMove(const TStmGestureEvent& aGesture); void doTapL(); void updateCursor(const TPoint& pos); - void setFocusRing(); void handlePinchZoomL(const TStmGestureEvent& aGesture); private: WebPointerEventHandler(WebView* view); diff -r 1f3c3f2f5b0a -r c711bdda59f4 webengine/osswebengine/WebKit/s60/webview/WebView.cpp --- a/webengine/osswebengine/WebKit/s60/webview/WebView.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/webengine/osswebengine/WebKit/s60/webview/WebView.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -197,7 +197,6 @@ , m_defaultZoomLevel(KZoomLevelDefaultValue) , m_pageFullScreenHandler(NULL) , m_viewIsScrolling(false) -, m_ptrbuffer(0) , m_showCursor(false) , m_allowRepaints(true) , m_prevEditMode(false) @@ -231,7 +230,6 @@ m_fastScrollTimer->Cancel(); delete m_fastScrollTimer; - delete [] m_ptrbuffer; delete m_pinchZoomHandler; delete m_repainttimer; delete m_webfeptexteditor; @@ -351,7 +349,6 @@ m_pinchZoomHandler = WebPagePinchZoomHandler::NewL(this); // Create the PointerEventHandler - m_ptrbuffer = new TPoint[256]; m_webpointerEventHandler = WebPointerEventHandler::NewL(this); // Create the ScrollHandler @@ -372,10 +369,12 @@ MakeViewVisible(ETrue); m_isPluginsVisible=ETrue; CCoeControl::SetFocus(ETrue); -#ifdef BRDO_MULTITOUCH_ENABLED_FF - //To enable advance pointer info for multi-touch + +#if defined(BRDO_MULTITOUCH_ENABLED_FF) && !defined (__WINSCW__) + //Enable advance pointer info for multi-touch. Window().EnableAdvancedPointers(); #endif + cache()->setCapacities(0, 0, defaultCacheCapacity); m_waiter = new(ELeave) CActiveSchedulerWait(); @@ -712,13 +711,12 @@ //------------------------------------------------------------------------------- void WebView::collectOffscreenbitmapL(CFbsBitmap& snapshot) { - if( m_widgetextension && m_widgetextension->IsWidgetPublising()) { - if ( snapshot.Handle() == 0) { - // Create bitmap only once - (snapshot).Create(m_brctl->Size(), StaticObjectsContainer::instance()->webSurface()->displayMode()); - } - CFbsBitmapDevice* device = CFbsBitmapDevice::NewL( &snapshot); - CleanupStack::PushL(device); + if ( snapshot.Handle() == 0) { + // Create bitmap only once + (snapshot).Create(m_brctl->Size(), StaticObjectsContainer::instance()->webSurface()->displayMode()); + } + CFbsBitmapDevice* device = CFbsBitmapDevice::NewL( &snapshot); + CleanupStack::PushL(device); WebCoreGraphicsContext* gc = WebCoreGraphicsContext::NewL( device, &snapshot, mainFrame()->frameView()); CleanupStack::PushL(gc); @@ -733,8 +731,7 @@ } mainFrame()->frameView()->draw( *gc, mainFrame()->frameView()->visibleRect() ); - CleanupStack::PopAndDestroy(2); - } + CleanupStack::PopAndDestroy(2); } @@ -2042,7 +2039,7 @@ // some content that we already searched on the first pass. In the worst case, we could search the entire contents of this frame twice. // To fix this, we'd need to add a mechanism to specify a range in which to search. if (wrapFlag && lastFrame) { - if (frame->bridge()->searchFor(keyword, forward, false, true, false)) + if (frame && frame->bridge() && frame->bridge()->searchFor(keyword, forward, false, true, false)) return TBrCtlDefs::EFindMatch; } @@ -2334,9 +2331,9 @@ else { newMinZoomLevel = KZoomLevelDefaultValue; } - +#ifndef BRDO_MULTITOUCH_ENABLED_FF newMinZoomLevel = (newMinZoomLevel/m_pageZoomHandler->stepSize())*m_pageZoomHandler->stepSize(); - +#endif TBool needsUpdateArray = EFalse; //Update the new array if ( m_minZoomLevel!= newMinZoomLevel) @@ -2374,8 +2371,10 @@ } m_zoomLevelArray.Reset(); - +#ifndef BRDO_MULTITOUCH_ENABLED_FF m_minZoomLevel = TInt(m_minZoomLevel/10) * 10; +#endif + m_zoomLevelArray.Append(KZoomLevelDefaultValue); //construct the zoom array from the default level @@ -2609,11 +2608,13 @@ #if USE(LOW_BANDWIDTH_DISPLAY) m_page->mainFrame()->loader()->setUseLowBandwidthDisplay(false); #endif - StaticObjectsContainer::instance()->setIconDatabaseEnabled(false); + if (!(m_brctl->capabilities() & TBrCtlDefs::ECapabilityAutoFormFill)) + StaticObjectsContainer::instance()->setIconDatabaseEnabled(false); } //Widgets dont need memory cache for dead objects. hence set it to 0 cache()->setCapacities(0, 0, 0); + cache()->setDisabled(true); return m_widgetextension; } @@ -3084,4 +3085,31 @@ m_pinchDocDelta.iY = (float)shiftInView.iY * 100 / zoomLevel; } +void WebView::reCreatePlugins() +{ + Frame* coreFrame = core(mainFrame()); + MWebCoreObjectWidget* view = NULL; + for (Frame* frame = coreFrame; frame; frame = frame->tree()->traverseNext(coreFrame)) { + PassRefPtr objects = frame->document()->objects(); + for (Node* n = objects->firstItem(); n; n = objects->nextItem()) { + view = widget(n); + if (view) { + PluginSkin* plg = static_cast(view); + if(plg->activeStreams() > 0) + plg->reCreatePlugin(); + } + } + + PassRefPtr embeds = frame->document()->embeds(); + for (Node* n = embeds->firstItem(); n; n = embeds->nextItem()) { + view = widget(n); + if (view) { + PluginSkin* plg = static_cast(view); + if(plg->activeStreams() > 0) + plg->reCreatePlugin(); + } + } + } +} + // END OF FILE diff -r 1f3c3f2f5b0a -r c711bdda59f4 webengine/osswebengine/WebKit/s60/webview/WebView.h --- a/webengine/osswebengine/WebKit/s60/webview/WebView.h Mon Mar 15 12:44:50 2010 +0200 +++ b/webengine/osswebengine/WebKit/s60/webview/WebView.h Wed Mar 31 23:16:40 2010 +0300 @@ -364,6 +364,11 @@ * To set the Bitmap zooming Out for Pinch */ void setPinchBitmapZoomOut(int zoomLevel); + + /** + * Recreate Plugins in case of Retry Connection + */ + void reCreatePlugins(); public: // from MPageScalerCallback /** @@ -584,7 +589,6 @@ WebPageFullScreenHandler* m_pageFullScreenHandler; // owned bool m_viewIsScrolling; bool m_viewIsFastScrolling; - TPoint* m_ptrbuffer; // synchronous requests bool m_synchRequestPending; diff -r 1f3c3f2f5b0a -r c711bdda59f4 webengine/osswebengine/webkit/s60/webview/WebGestureInterface.cpp --- a/webengine/osswebengine/webkit/s60/webview/WebGestureInterface.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/webengine/osswebengine/webkit/s60/webview/WebGestureInterface.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -146,7 +146,9 @@ gestureParams[stmGesture::EEnableFiltering ] = ETrue; #ifdef BRDO_MULTITOUCH_ENABLED_FF gestureParams[stmGesture::ECapacitiveUpUsed ] = ETrue; +#ifndef __WINSCW__ gestureParams[stmGesture::EAdjustYPos ] = ETrue; +#endif #else gestureParams[stmGesture::ECapacitiveUpUsed ] = EFalse; gestureParams[stmGesture::EAdjustYPos ] = EFalse; diff -r 1f3c3f2f5b0a -r c711bdda59f4 webengine/webkitutils/HistoryProvider/HistoryController.cpp --- a/webengine/webkitutils/HistoryProvider/HistoryController.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/webengine/webkitutils/HistoryProvider/HistoryController.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -152,7 +152,10 @@ CleanupStack::PushL( pageInfo ); return pageInfo; } - +void HistoryController::rollBackIndex() + { + m_currentIndex = m_tempCurrentIndex; + } /** */ void HistoryController::handleHistoryCommandL(int command) @@ -518,8 +521,11 @@ SelectArray* historyList = new( ELeave ) CArrayFixFlat(10); CleanupStack::PushL( historyList ); for( int i = m_historyStack.Count() - 1; i >= 0; i-- ) { - TBrCtlSelectOptionData t( TBrCtlSelectOptionData(entryByIndex(i)->pageTitle(), i == m_currentIndex, false, false) ); - historyList->AppendL(t); + if(entryByIndex(i)) + { + TBrCtlSelectOptionData t( TBrCtlSelectOptionData(entryByIndex(i)->pageTitle(), i == m_currentIndex, false, false) ); + historyList->AppendL(t); + } } // Display history dialog bool ret = m_historyCallback->dialogSelectOption(historyList); diff -r 1f3c3f2f5b0a -r c711bdda59f4 webengine/webkitutils/HistoryProvider/HistoryController.h --- a/webengine/webkitutils/HistoryProvider/HistoryController.h Mon Mar 15 12:44:50 2010 +0200 +++ b/webengine/webkitutils/HistoryProvider/HistoryController.h Wed Mar 31 23:16:40 2010 +0300 @@ -274,6 +274,7 @@ void performTransition(int direction); + virtual void rollBackIndex(); private: diff -r 1f3c3f2f5b0a -r c711bdda59f4 webengine/webkitutils/ToolBar/ToolBarButton.cpp --- a/webengine/webkitutils/ToolBar/ToolBarButton.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/webengine/webkitutils/ToolBar/ToolBarButton.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -861,6 +861,8 @@ } else { + if(iToolTipMaskContext) + { iToolTipMaskContext->SetPenColor(KRgbBlack); iToolTipMaskContext->SetBrushColor(KRgbBlack); iToolTipMaskContext->SetBrushStyle(CGraphicsContext::ESolidBrush); @@ -919,6 +921,7 @@ iToolTipSprite.Activate(); delete visualText;//visual text } + } } } else // aVisible = false diff -r 1f3c3f2f5b0a -r c711bdda59f4 webengine/widgetengine/inc/WidgetEngineBridge.h --- a/webengine/widgetengine/inc/WidgetEngineBridge.h Mon Mar 15 12:44:50 2010 +0200 +++ b/webengine/widgetengine/inc/WidgetEngineBridge.h Wed Mar 31 23:16:40 2010 +0300 @@ -25,7 +25,7 @@ #include #include "WidgetEngineCallbacks.h" #include "WidgetJSObjectProtector.h" -#include "wtf/HashSet.h" +#include "wtf/HashCountedSet.h" // CONSTANTS @@ -102,7 +102,7 @@ CMenuClient* m_menuclient; CWidgetClient* m_widgetclient; WidgetPreferences* m_preferences; - WTF::HashSet m_protectedObjects; + WTF::HashCountedSet m_protectedObjects; }; diff -r 1f3c3f2f5b0a -r c711bdda59f4 webengine/widgetengine/src/WidgetEngineBridge.cpp --- a/webengine/widgetengine/src/WidgetEngineBridge.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/webengine/widgetengine/src/WidgetEngineBridge.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -96,9 +96,10 @@ void WidgetEngineBridge::Clear() { // unprotect objects - HashSet::iterator end = m_protectedObjects.end(); - for (HashSet::iterator it = m_protectedObjects.begin(); it != end; ++it) { - Collector::unprotect(*it); + HashCountedSet::iterator end = m_protectedObjects.end(); + for (HashCountedSet::iterator it = m_protectedObjects.begin(); it != end; ++it) { + for(int count = it->second; count > 0; count--) + Collector::unprotect(it->first); } m_protectedObjects.clear(); diff -r 1f3c3f2f5b0a -r c711bdda59f4 webengine/widgetregistry/Server/src/WidgetRegistryServer.cpp --- a/webengine/widgetregistry/Server/src/WidgetRegistryServer.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/webengine/widgetregistry/Server/src/WidgetRegistryServer.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -127,6 +127,12 @@ apparcSession.RegisterNonNativeApplicationTypeL( KUidWidgetLauncher, KLauncherApp())); + + TRAP_IGNORE( + apparcSession.RegisterNonNativeApplicationTypeL( + KUidWgtWidgetLauncher, KWgtLauncherApp())); + + apparcSession.PrepareNonNativeApplicationsUpdatesL(); apparcSession.ForceCommitNonNativeApplicationsUpdatesL(); apparcSession.Close(); diff -r 1f3c3f2f5b0a -r c711bdda59f4 webengine/wrtharvester/group/wrtharvester.mmp --- a/webengine/wrtharvester/group/wrtharvester.mmp Mon Mar 15 12:44:50 2010 +0200 +++ b/webengine/wrtharvester/group/wrtharvester.mmp Wed Mar 31 23:16:40 2010 +0300 @@ -24,12 +24,15 @@ CAPABILITY CAP_ECOM_PLUGIN +// uncomment to enable logs +//MACRO _DEBUG +//#define _DEBUG + SOURCEPATH ../src SOURCE wrtharvester.cpp SOURCE wrtharvesterpsnotifier.cpp SOURCE wrtharvesterpublisherobserver.cpp SOURCE wrtharvesterregistryaccess.cpp -SOURCE wrtusbhandler.cpp MW_LAYER_SYSTEMINCLUDE diff -r 1f3c3f2f5b0a -r c711bdda59f4 webengine/wrtharvester/inc/wrtharvester.h --- a/webengine/wrtharvester/inc/wrtharvester.h Mon Mar 15 12:44:50 2010 +0200 +++ b/webengine/wrtharvester/inc/wrtharvester.h Wed Mar 31 23:16:40 2010 +0300 @@ -24,7 +24,6 @@ #include #include #include "wrtharvesterregistryaccess.h" -#include "wrtusbhandler.h" // FORWARD DECLARATIONS class CWrtHarvesterPSNotifier; @@ -126,7 +125,7 @@ static TInt DeleteCallback(TAny* aPtr); - TBool SetSystemShutdown(TBool aState){ iSystemShutdown = aState; } + void SetSystemShutdown(TBool aState){ iSystemShutdown = aState; } private: @@ -288,6 +287,12 @@ */ CWrtHarvesterPSNotifier* iWidgetSystemShutdownListener; + /** + * Publish & Subscribe listener + * own + */ + CWrtHarvesterPSNotifier* iMsModeListener; + /** * */ diff -r 1f3c3f2f5b0a -r c711bdda59f4 webengine/wrtharvester/inc/wrtharvesterpsnotifier.h --- a/webengine/wrtharvester/inc/wrtharvesterpsnotifier.h Mon Mar 15 12:44:50 2010 +0200 +++ b/webengine/wrtharvester/inc/wrtharvesterpsnotifier.h Wed Mar 31 23:16:40 2010 +0300 @@ -26,7 +26,7 @@ // Content Harvester server secure id const TUid KPropertyCat = { 0x10282E5A }; // Can not conflict with other Content Harvester plugin keys -enum TPropertyKeys { EWidgetUIState = 109, EWidgetRegAltered, EWidgetMMCAltered, EWidgetMassStorageMode, EWidgetSystemShutdown }; +enum TPropertyKeys { EWidgetUIState = 109, EWidgetRegAltered, EWidgetMassStorageMode, EWidgetSystemShutdown }; /** * Publish&Subscribe event listener diff -r 1f3c3f2f5b0a -r c711bdda59f4 webengine/wrtharvester/inc/wrtusbhandler.h --- a/webengine/wrtharvester/inc/wrtusbhandler.h Mon Mar 15 12:44:50 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,77 +0,0 @@ -/* -* 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 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: -* -*/ - -#ifndef WIDGETMMCHANDLER_H -#define WIDGETMMCHANDLER_H - -// INCLUDES -#include -#include -#include -#include "wrtharvester.h" -//hb -#include "wrtharvesterpsnotifier.h" - -// FORWARD DECLARATION -class CWrtHarvester; - -/* - * Inherited CActive, performs a asynchronous conversion operation - * - * @since 3.1 - */ -class CWrtUsbHandler : public CActive - { -public: - - static CWrtUsbHandler* NewL( CWrtHarvester* aHarvester, RFs& aFs ); - - virtual ~CWrtUsbHandler(); - - void Start(); - void DoScanAndUpdate(); - -protected: - - void RunL(); - - TInt RunError( TInt aError ); - - void DoCancel(); - -private: - - // no copy constructor - CWrtUsbHandler( const CWrtUsbHandler& ); - // no assignment - CWrtUsbHandler& operator=( const CWrtUsbHandler& ); - - CWrtUsbHandler( CWrtHarvester* aHarvester, RFs& aFs ); - - void ConstructL(); - - TInt ScanDrives( TInt& aDriveFlags ); - - // CWidgetRegistry* iRegistry; // not owned - - CWrtHarvester* iHarvester; - RFs iFs; - - TInt iDriveFlags; - }; - -#endif // #ifndef WIDGETMMCHANDLER_H diff -r 1f3c3f2f5b0a -r c711bdda59f4 webengine/wrtharvester/src/wrtharvester.cpp --- a/webengine/wrtharvester/src/wrtharvester.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/webengine/wrtharvester/src/wrtharvester.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -230,11 +230,10 @@ iWidgetUIListener = CWrtHarvesterPSNotifier::NewL( this, EWidgetUIState ); iWidgetRegListener = CWrtHarvesterPSNotifier::NewL( this, EWidgetRegAltered ); iWidgetSystemShutdownListener = CWrtHarvesterPSNotifier::NewL( this, EWidgetSystemShutdown ); + iMsModeListener = CWrtHarvesterPSNotifier::NewL( this, EWidgetMassStorageMode ); User::LeaveIfError( iFs.Connect() ); - iWidgetUsbListener = CWrtUsbHandler::NewL( this, iFs ); - iWidgetUsbListener->Start(); SetMSMode(0); iCanAccessRegistry = ETrue; @@ -286,11 +285,12 @@ iObservers.ResetAll(); iWidgetInfo.ResetAll(); iWidgetStateArray.ResetAll(); + delete iWidgetUIListener; - delete iWidgetRegListener; - delete iWidgetMMCListener; - delete iWidgetUsbListener; + delete iWidgetRegListener; + delete iMsModeListener; delete iWidgetSystemShutdownListener; + if(iAsyncCallBack) { iAsyncCallBack->Cancel(); @@ -327,12 +327,11 @@ { return ; } - if( IsInMSMode() == 1 && aTrigger == KDeActive) + if( IsInMSMode() == 1 ) { - RemovePublisherAndObserverL(aContentId); - - if(!iSystemShutdown) + if( aTrigger == KDeActive && !iSystemShutdown ) { + RemovePublisherAndObserverL(aContentId); RWidgetRegistryClientSession session; CleanupClosePushL( session ); User::LeaveIfError( session.Connect() ); @@ -890,8 +889,11 @@ RWidgetRegistryClientSession session; CleanupClosePushL( session ); User::LeaveIfError( session.Connect() ); - TBool preInstalled = *(session.GetWidgetPropertyValueL( aUid, EPreInstalled ) ); - + + CWidgetPropertyValue* property = session.GetWidgetPropertyValueL( aUid, EPreInstalled ); + TBool preInstalled = property && *(property); + delete property; + // Set blanket permission to true for pre-installed widgets if ( preInstalled ) { @@ -982,7 +984,11 @@ RWidgetRegistryClientSession session; CleanupClosePushL( session ); User::LeaveIfError( session.Connect() ); - TBool networkAccess = *(session.GetWidgetPropertyValueL( aUid, EAllowNetworkAccess ) ); + + CWidgetPropertyValue* value = session.GetWidgetPropertyValueL( aUid, EAllowNetworkAccess ); + TBool networkAccess = value && *(value); + delete value; + CleanupStack::PopAndDestroy( &session ); return networkAccess; diff -r 1f3c3f2f5b0a -r c711bdda59f4 webengine/wrtharvester/src/wrtharvesterpsnotifier.cpp --- a/webengine/wrtharvester/src/wrtharvesterpsnotifier.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/webengine/wrtharvester/src/wrtharvesterpsnotifier.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -19,8 +19,9 @@ #include "wrtharvesterpsnotifier.h" #include "wrtharvester.h" #include //For MMC Observing -#include //For USB monitor #include // For shutdown observer +#include // for Mass storage mode observing +#include // ============================ MEMBER FUNCTIONS ============================= @@ -72,7 +73,7 @@ { CActiveScheduler::Add( this ); TInt r(KErrNone); - if( iKey != EWidgetMMCAltered ) + if( iKey != EWidgetMassStorageMode ) { // define property to be integer type r = RProperty::Define( KPropertyCat, iKey, RProperty::EInt ); @@ -83,13 +84,9 @@ User::LeaveIfError( r ); } // Attach the key - if( iKey == EWidgetMMCAltered ) - { - User::LeaveIfError( iProperty.Attach( KPSUidUikon,KUikMMCInserted )); - } - else if( iKey == EWidgetMassStorageMode ) + if( iKey == EWidgetMassStorageMode ) { - User::LeaveIfError( iProperty.Attach( KUsbMsDriveState_Category,EUsbMsDriveState_DriveStatus )); + User::LeaveIfError( iProperty.Attach( KPSUidUsbWatcher,KUsbWatcherSelectedPersonality)); } else if( iKey == EWidgetSystemShutdown ) { @@ -133,8 +130,8 @@ TInt value( 0 ); TInt r (KErrNone); - TUsbMsDrivesStatus allDrivesStatus; - if( iKey != EWidgetMMCAltered && iKey != EWidgetMassStorageMode ) + + if( iKey != EWidgetMassStorageMode ) { if (iKey == EWidgetSystemShutdown) GetValue( value); @@ -143,8 +140,13 @@ } else { - r = iProperty.Get( allDrivesStatus ); + r = iProperty.Get( value ); } + +#ifdef _DEBUG + RDebug::Print(_L("KEY %d VALUE %d "),iKey,value); +#endif + if( r == KErrNone ) { if( iKey == EWidgetUIState && value == 1 ) @@ -159,7 +161,24 @@ else if( iKey == EWidgetUIState && value == 3 ) { iHarvester->SetReinstallWidget(ETrue); - } + } + else if( iKey == EWidgetMassStorageMode ) + { + if( value == KUsbPersonalityIdMS ) + { +#ifdef _DEBUG + RDebug::Print(_L("WE are in mass storage mode")); +#endif + iHarvester->SetMSMode(1); + } + else + { +#ifdef _DEBUG + RDebug::Print(_L("NO LONGER in mass storage mode")); +#endif + iHarvester->SetMSMode(0); + } + } else if( iKey == EWidgetRegAltered && value == 1 ) { if(iHarvester->IsInMSMode()) diff -r 1f3c3f2f5b0a -r c711bdda59f4 webengine/wrtharvester/src/wrtusbhandler.cpp --- a/webengine/wrtharvester/src/wrtusbhandler.cpp Mon Mar 15 12:44:50 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,247 +0,0 @@ -/* -* Copyright (c) 2006 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: -* -*/ - -// INCLUDE FILES -#include "wrtusbhandler.h" -#include "wrtharvester.h" -#include "wrtusbhandler.h" -#include - -// CONSTANTS - - -// ============================================================================ -// CWrtUsbHandler::NewL() -// two-phase constructor -// -// @since 3.1 -// @param aRegistry - Widget registry for callback. -// @param aFs - file session -// @return pointer to CWrtUsbHandler -// ============================================================================ -// -CWrtUsbHandler* CWrtUsbHandler::NewL( - CWrtHarvester* aHarvester, - RFs& aFs ) - { - CWrtUsbHandler* self = - new(ELeave) CWrtUsbHandler( aHarvester , aFs ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -// ============================================================================ -// CWrtUsbHandler::CWrtUsbHandler() -// C++ default constructor -// -// @since 3.1 -// ============================================================================ -// -CWrtUsbHandler::CWrtUsbHandler( CWrtHarvester* aHarvester, - RFs& aFs ) - : CActive( CActive::EPriorityUserInput ), - iHarvester( aHarvester ), - iFs( aFs ), - iDriveFlags( 0 ) - { - CActiveScheduler::Add( this ); - } - -// ============================================================================ -// CWrtUsbHandler::ConstructL() -// Symbian default constructor -// -// @since 3.1 -// ============================================================================ -// -void CWrtUsbHandler::ConstructL() - { - if ( KErrNone != ScanDrives( iDriveFlags ) ) - { - iDriveFlags = 0; - } - } - -// ============================================================================ -// CWrtUsbHandler::~CWrtUsbHandler() -// destructor -// -// @since 3.1 -// ============================================================================ -CWrtUsbHandler::~CWrtUsbHandler() - { - Cancel(); - } - -// ============================================================================ -// CWrtUsbHandler::Start() -// Start monitoring. -// -// @since 5.0 -// ============================================================================ -void CWrtUsbHandler::Start() - { - iFs.NotifyChange( ENotifyDisk, iStatus ); - SetActive(); - } - -// ============================================================================ -// CWrtUsbHandler::RunL() -// Handle notifications of MMC events. -// -// @since 3.1 -// ============================================================================ -void CWrtUsbHandler::RunL() - { - TInt status = iStatus.Int(); - - // Restart NotifyChange - Start(); - - if ( status == KErrNone ) - { - DoScanAndUpdate(); - } - } - -void CWrtUsbHandler::DoScanAndUpdate() - { - TInt err = 0; - TInt driveFlags = 0; - TInt deltaDriveFlags = 0; - if ( KErrNone == ScanDrives( driveFlags ) ) - { - deltaDriveFlags = iDriveFlags ^ driveFlags; - iDriveFlags = driveFlags; - } - - if ( deltaDriveFlags ) - { - TVolumeInfo volInfo; - TInt temp = deltaDriveFlags; - TBool massMemAltered = EFalse; - TBool massMemAvailable = EFalse; - for(TInt DriveNo = EDriveA+1 ; DriveNo<=EDriveY; DriveNo++ ) - { - temp = temp >> 1; - if( temp & 01) - { - TUint status(0); - err = DriveInfo::GetDriveStatus( iFs, DriveNo , status ); - if(!err && (status & DriveInfo::EDriveExternallyMountable) && (status & DriveInfo::EDriveInternal )) - { - //Internal Memory - massMemAltered = ETrue; - // Check is the internal memory available or not - if(iDriveFlags & (1<SetMSMode(1); - } - else - { - // Mass storage was unplugged - if(iHarvester->IsInMSMode() == 1) - { - iHarvester->SetMSMode(0); - iHarvester->ClearAllOperations(); - } - } - } - } - } - - -// ============================================================================ -// CWrtUsbHandler::RunError() -// Ignore errors from RunL. -// -// @since 5.0 -// ============================================================================ -TInt CWrtUsbHandler::RunError( TInt /* aError */ ) - { - return KErrNone; // indicates error was handled - } - -// ============================================================================ -// CWrtUsbHandler::DoCancel() -// Cancel the MMC event handler -// -// @since 3.1 -// ============================================================================ -void CWrtUsbHandler::DoCancel() - { - iFs.NotifyChangeCancel(); - } - -/* Scans drives and records a bit flag for those that exist and are - * suitable for installing widgets to. - */ -TInt CWrtUsbHandler::ScanDrives( TInt& aDriveFlags ) - { - // List all drives in the system - TDriveList driveList; - TInt error = iFs.DriveList( driveList ); - if ( KErrNone == error ) - { - for ( TInt driveNumber = EDriveY; - driveNumber >= EDriveA; - driveNumber-- ) - { - // The drives that will be filtered out are the same ones that - // WidgetInstaller filters out in CWidgetUIHandler::SelectDriveL() - if ( (EDriveD == driveNumber) - || !driveList[driveNumber] ) - { - // EDriveD is a temporary drive usually a RAM disk - continue; - } - - TVolumeInfo volInfo; - if ( iFs.Volume( volInfo, driveNumber ) != KErrNone ) - { - // volume is not usable (e.g. no media card inserted) - continue; - } - if ( (volInfo.iDrive.iType == EMediaNotPresent) || - (volInfo.iDrive.iType == EMediaRom) || - (volInfo.iDrive.iType == EMediaRemote) || - (volInfo.iDrive.iDriveAtt & KDriveAttRom) || - (volInfo.iDrive.iDriveAtt & KDriveAttSubsted) ) - { - // not a suitable widget install drive - continue; - } - - // found a usable drive - aDriveFlags |= (1 << driveNumber); - - } - } - - return error; - } - diff -r 1f3c3f2f5b0a -r c711bdda59f4 widgets/widgetapp/inc/cpspublisher.h --- a/widgets/widgetapp/inc/cpspublisher.h Mon Mar 15 12:44:50 2010 +0200 +++ b/widgets/widgetapp/inc/cpspublisher.h Wed Mar 31 23:16:40 2010 +0300 @@ -28,6 +28,7 @@ #define CPSPUBLISHER_H #include +#include #include class CFbsBitmap; @@ -68,9 +69,13 @@ public: TSize BitmapSize(); - void PublishBitmapL( CFbsBitmap& aBitmap, const TDesC& aBundleName ); - void NetworkConnectionCancelledL(); - void NetworkConnectionAllowedL(); + void PublishBitmapL( CFbsBitmap& aBitmap, const TDesC& aBundleName ); + void NetworkConnectionCancelledL(); + void NetworkConnectionAllowedL(); + void PublishScreenshotL(const TDesC& aWidget, TInt aWidgetId, + CFbsBitmap* aBmp); + + void ClearScreenshotL(const TDesC& aWidget, TInt aWidgetId); private: void GetBitmapSizeL(); @@ -81,12 +86,25 @@ void ExecuteCommandL(CLiwDefaultMap* aInFilter, CLiwDefaultMap* aOutDataMap, const TDesC16& aRegistry ); void ExecuteRegistrationCommandL( TUint aOption ); + void StoreBitmapL(TInt aWidgetId, CFbsBitmap* aBmp); + void RemoveBitmapL(TInt aWidgetId); + void PublishScreenshotToCpsL(const TDesC& aWidget, + TInt aWidgetId, TInt aBitmap); + void RemoveScreenshotFromCpsL(const TDesC& aWidget); + private: CFbsBitmap* iMaskBitmap; MLiwInterface* iCpsInterface; CLiwServiceHandler* iServiceHandler; TSize iSize; + /** + * Hash table storing the screenshots. + * Key: window group id for the screenshot + * (the one received in ApplicationChange) + * Value: CFbsBitmap*, pointers owned + */ + RHashMap iScreenshots; }; diff -r 1f3c3f2f5b0a -r c711bdda59f4 widgets/widgetapp/inc/widgetappdefs.rh --- a/widgets/widgetapp/inc/widgetappdefs.rh Mon Mar 15 12:44:50 2010 +0200 +++ b/widgets/widgetapp/inc/widgetappdefs.rh Wed Mar 31 23:16:40 2010 +0300 @@ -61,6 +61,7 @@ WidgetOnline, WidgetOffline, WidgetRestart, + WidgetFullViewClose, Uninitialized }; diff -r 1f3c3f2f5b0a -r c711bdda59f4 widgets/widgetapp/src/WidgetUiWindow.cpp --- a/widgets/widgetapp/src/WidgetUiWindow.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/widgets/widgetapp/src/WidgetUiWindow.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -720,6 +720,7 @@ CWidgetPropertyValue* propValue = widgetRegistry.GetWidgetPropertyValueL(iUid, EAllowNetworkAccess ); TInt networkAccess = *propValue; delete propValue; + propValue = widgetRegistry.GetWidgetPropertyValueL(iUid, EAllowFullAccess ); TInt fullAccess = *propValue; delete propValue; @@ -844,6 +845,11 @@ //Always ask case TUint32 ap( 0 ); iWindowManager.GetConnection()->SetRequestedAP( ap ); +#ifdef BRDO_OCC_ENABLED_FF + TUint32 snapId = 0; //Defaults connects to Internet snap + iWindowManager.GetConnection()->SetConnectionType(CMManager::EDestination); + iWindowManager.GetConnection()->SetRequestedSnap(snapId); +#endif } } } @@ -1172,7 +1178,8 @@ RWidgetRegistryClientSession& widgetRegistry = iWindowManager.WidgetUIClientSession(); TInt inMiniView = !(WidgetMiniViewState()==EMiniViewEnabled || WidgetMiniViewState()==EMiniViewNotEnabled);//widgetRegistry.IsWidgetInMiniView( iUid); CWidgetPropertyValue* propValue = widgetRegistry.GetWidgetPropertyValueL( iUid, EAllowNetworkAccess ); - TInt netAccessWdgtProp = *propValue; // AllowNetworkAccess in the info.plist file + TInt netAccessWdgtProp = propValue && *propValue; // AllowNetworkAccess in the info.plist file + delete propValue; if ( netAccessWdgtProp && ((inMiniView && (iWindowManager.GetNetworkMode() == (TInt)EOnlineMode)) || (!inMiniView && iUserPermission)) ) diff -r 1f3c3f2f5b0a -r c711bdda59f4 widgets/widgetapp/src/WidgetUiWindowManager.cpp --- a/widgets/widgetapp/src/WidgetUiWindowManager.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/widgets/widgetapp/src/WidgetUiWindowManager.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -408,6 +408,12 @@ } } break; + case WidgetFullViewClose: + { + Exit( EEikCmdExit, aUid ); + needToNotify = EFalse ; + } + break; } if(needToNotify) // Widget is up and running, notify that next one can be launched @@ -643,6 +649,9 @@ if ( iClientSession.IsWidgetInFullView ( aWidgetWindow->Uid())) { +#ifdef BRDO_WRT_HS_FF + iCpsPublisher->ClearScreenshotL(*(aWidgetWindow->WidgetBundleId()), aWidgetWindow->Uid().iUid); +#endif HideWindow( aWidgetWindow ); if (aWidgetWindow == iActiveFsWindow) iActiveFsWindow = NULL; @@ -788,6 +797,10 @@ CWidgetUiWindow* window( GetWindow( aUid ) ); if( !window ) return; + +#ifdef BRDO_WRT_HS_FF + iCpsPublisher->ClearScreenshotL(*(GetWindow(aUid )->WidgetBundleId()), aUid.iUid); +#endif // make widgets act like separate applications by pushing to background // this way user is sent back to app shell or idle to run another widget @@ -912,6 +925,18 @@ { if(iDialogsProvider) iDialogsProvider->CancelAll(); + +#ifdef BRDO_WRT_HS_FF + CFbsBitmap* bitmap( new CFbsBitmap() ); + if ( bitmap && iCpsPublisher) + { + if(iActiveFsWindow) + { + TRAP_IGNORE(iActiveFsWindow->Engine()->TakeSnapshotL( *bitmap )); + TRAP_IGNORE(iCpsPublisher->PublishScreenshotL(*iActiveFsWindow->WidgetBundleId(),iActiveFsWindow->Uid().iUid, bitmap)); + } + } +#endif HideWindow( iActiveFsWindow ); } } diff -r 1f3c3f2f5b0a -r c711bdda59f4 widgets/widgetapp/src/cpspublisher.cpp --- a/widgets/widgetapp/src/cpspublisher.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/widgets/widgetapp/src/cpspublisher.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -29,6 +29,12 @@ // TODO use global definitions! +_LIT( KWidgetBitmap, "widget_bitmap" ); +_LIT8( KWidgetId, "widget_id"); +_LIT8( KBitmapHandle, "bitmap_handle"); +_LIT8( KDelete, "Delete" ); +_LIT( KWidgetUi, "widget_ui"); +_LIT( KScreenshot, "screenshot"); _LIT8( KCPService, "Service.ContentPublishing" ); _LIT8( KCPInterface, "IDataSource" ); @@ -557,6 +563,137 @@ inParam.Reset(); iCpsInterface = msgInterface; } + + + // -------------------------------------------------------------------------- +// CCpsPublisher::PublishScreenshotL +// -------------------------------------------------------------------------- +// +void CCpsPublisher::PublishScreenshotL(const TDesC& aWidget, + TInt aWidgetId, CFbsBitmap* aBmp) + { + StoreBitmapL(aWidgetId, aBmp); + PublishScreenshotToCpsL(aWidget, aWidgetId, aBmp ? aBmp->Handle() : 0); + } + +// -------------------------------------------------------------------------- +// CCpsPublisher::ClearScreenshotL +// -------------------------------------------------------------------------- +// +void CCpsPublisher::ClearScreenshotL(const TDesC& aWidget, + TInt aWidgetId) + { + RemoveScreenshotFromCpsL(aWidget); + RemoveBitmapL(aWidgetId); + } + +// -------------------------------------------------------------------------- +// CCpsPublisher::ClearScreenshotL +// -------------------------------------------------------------------------- +// +void CCpsPublisher::StoreBitmapL(TInt aWidgetId, CFbsBitmap* aBmp) + { + CFbsBitmap** oldbmp = iScreenshots.Find( aWidgetId ); + if ( oldbmp ) + { + delete *oldbmp; + } + if ( iScreenshots.Insert( aWidgetId, aBmp ) != KErrNone ) + { + delete aBmp; + iScreenshots.Remove( aWidgetId ); + } + } + +// -------------------------------------------------------------------------- +// CCpsPublisher::RemoveBitmapL +// -------------------------------------------------------------------------- +// +void CCpsPublisher::RemoveBitmapL(TInt aWidgetId) + { + CFbsBitmap** bmp = iScreenshots.Find( aWidgetId ); + if ( bmp ) + { + delete *bmp; + iScreenshots.Remove( aWidgetId ); + } + } + +// -------------------------------------------------------------------------- +// CCpsPublisher::PublishScreenshotToCpsL +// -------------------------------------------------------------------------- +// +void CCpsPublisher::PublishScreenshotToCpsL(const TDesC& aWidget, + TInt aWidgetId, TInt aBitmap) + { + CLiwGenericParamList& inparam = iServiceHandler->InParamListL(); + CLiwGenericParamList& outparam = iServiceHandler->OutParamListL(); + + TLiwGenericParam cptype( KType, TLiwVariant( KCpData )); + cptype.PushL(); + + inparam.AppendL( cptype ); + + CLiwDefaultMap* cpdatamap = CLiwDefaultMap::NewLC(); + CLiwDefaultMap* map = CLiwDefaultMap::NewLC(); + + // Add bitmap handle to data map + map->InsertL( KWidgetId, TLiwVariant( TInt32(aWidgetId) )); // key - aKey, value - map (stringsMap) + map->InsertL( KBitmapHandle, TLiwVariant( TInt32(aBitmap) )); // key - aKey, value - map (stringsMap) + + // Create content data map + cpdatamap->InsertL( KPublisherId, TLiwVariant( KWidgetUi )); + cpdatamap->InsertL( KContentType, TLiwVariant( KScreenshot )); + cpdatamap->InsertL( KContentId, TLiwVariant( aWidget )); + cpdatamap->InsertL( KDataMap, TLiwVariant(map) ); + + TLiwGenericParam item( KItem, TLiwVariant( cpdatamap )); + item.PushL(); + + inparam.AppendL( item ); + + iCpsInterface->ExecuteCmdL( KAdd , inparam, outparam); + + CleanupStack::PopAndDestroy( &item ); + CleanupStack::PopAndDestroy( map ); + CleanupStack::PopAndDestroy( cpdatamap ); + CleanupStack::PopAndDestroy( &cptype ); + + outparam.Reset(); + inparam.Reset(); + } + + +// -------------------------------------------------------------------------- +// CCpsPublisher::PublishScreenshotToCpsL +// -------------------------------------------------------------------------- +// +void CCpsPublisher::RemoveScreenshotFromCpsL(const TDesC& aWidget) + { + CLiwGenericParamList& inparam = iServiceHandler->InParamListL(); + CLiwGenericParamList& outparam = iServiceHandler->OutParamListL(); + + CLiwDefaultMap* cpdatamap = CLiwDefaultMap::NewLC(); + + // Create content data map + cpdatamap->InsertL( KPublisherId, TLiwVariant( KWidgetUi )); + cpdatamap->InsertL( KContentType, TLiwVariant( KScreenshot )); + cpdatamap->InsertL( KContentId, TLiwVariant( aWidget )); + + TLiwGenericParam item( KItem, TLiwVariant( cpdatamap )); + item.PushL(); + + inparam.AppendL( item ); + + iCpsInterface->ExecuteCmdL( KDelete , inparam, outparam); + + CleanupStack::PopAndDestroy( &item ); + CleanupStack::PopAndDestroy( cpdatamap ); + + outparam.Reset(); + inparam.Reset(); + } + // END OF FILE diff -r 1f3c3f2f5b0a -r c711bdda59f4 widgets/widgetinstaller/src/WidgetUIOperationsWatcher.cpp --- a/widgets/widgetinstaller/src/WidgetUIOperationsWatcher.cpp Mon Mar 15 12:44:50 2010 +0200 +++ b/widgets/widgetinstaller/src/WidgetUIOperationsWatcher.cpp Wed Mar 31 23:16:40 2010 +0300 @@ -479,9 +479,15 @@ iWidgetInHS = iRegistry.IsWidgetInMiniView( aUid ); // get original install dir from registry in case user // decides to "overrite" to another memory location - iOriginalDir = *( iRegistry.GetWidgetPropertyValueL( + CWidgetPropertyValue *propValue = iRegistry.GetWidgetPropertyValueL( TUid::Uid( *(iPropertyValues[EUid]) ), - EBasePath ) ); + EBasePath ); + + iOriginalDir.Zero(); + if(propValue) + iOriginalDir = *propValue; + + delete propValue; } // uid for a new widget will be gotten once install location (c: or // e:) is selected @@ -997,8 +1003,10 @@ if ( !iSilent ) { iUIHandler->DisplayUninstallInProgressL(); } TBuf widgetPath; iRegistry.GetWidgetPath( aUid, widgetPath ); - TBool aVendor = *(iRegistry.GetWidgetPropertyValueL(aUid, ENokiaWidget)); - + + CWidgetPropertyValue* propValue = iRegistry.GetWidgetPropertyValueL(aUid, ENokiaWidget); + TBool aVendor = propValue && *(propValue); + delete propValue; // TODO if any of next steps leave does state become inconsistent?