# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1256538525 -7200 # Node ID 60c5402cb94525b6fbd14eccd3cf4aceaf75aaba # Parent c8a366e5628567e5bedc545a84cae4c44dedf25e Revision: 200941 Kit: 200943 diff -r c8a366e56285 -r 60c5402cb945 browserutilities/aiwbrowserprovider/Group/AiwBrowserProvider.mmp --- a/browserutilities/aiwbrowserprovider/Group/AiwBrowserProvider.mmp Thu Sep 24 12:53:48 2009 +0300 +++ b/browserutilities/aiwbrowserprovider/Group/AiwBrowserProvider.mmp Mon Oct 26 08:28:45 2009 +0200 @@ -44,6 +44,7 @@ END START RESOURCE ../data/AiwBrowserProvider.rss +DEPENDS avkon.rsg HEADER TARGET AiwBrowserProvider TARGETPATH RESOURCE_FILES_DIR diff -r c8a366e56285 -r 60c5402cb945 browserutilities/browserdialogsprovider/Group/browserdialogsprovider.mmp --- a/browserutilities/browserdialogsprovider/Group/browserdialogsprovider.mmp Thu Sep 24 12:53:48 2009 +0300 +++ b/browserutilities/browserdialogsprovider/Group/browserdialogsprovider.mmp Mon Oct 26 08:28:45 2009 +0200 @@ -29,6 +29,7 @@ SOURCEPATH ../Src START RESOURCE ../SrcData/BrowserDialogsProvider.rss +DEPENDS avkon.rsg HEADER TARGETPATH RESOURCE_FILES_DIR #ifdef __S60_32__ diff -r c8a366e56285 -r 60c5402cb945 browserutilities/browserdialogsprovider/Src/BrowserDialogsProvider.cpp --- a/browserutilities/browserdialogsprovider/Src/BrowserDialogsProvider.cpp Thu Sep 24 12:53:48 2009 +0300 +++ b/browserutilities/browserdialogsprovider/Src/BrowserDialogsProvider.cpp Mon Oct 26 08:28:45 2009 +0200 @@ -159,19 +159,19 @@ case EHttpTemporaryRedirect: { // Id for r_nw_stat_too_many_redirects is -20019, browser errors start at -20000 - msg.Set( textresolver->ResolveErrorString( KErrTooManyRedirects )); + msg.Set( textresolver->ResolveErrorString( KErrTooManyRedirects )); + DialogNoteL( msg ); break; } default: { // Handle all others as system error dialog - msg.Set( textresolver->ResolveErrorString( aErrCode )); - break; + CCoeEnv::Static()->HandleError( aErrCode ); + break; } } // end of switch - DialogNoteL( msg ); - CleanupStack::PopAndDestroy(); //textresolver + CleanupStack::PopAndDestroy(); //textresolver if ( iObserver ) { diff -r c8a366e56285 -r 60c5402cb945 browserutilities/browsertelservice/group/BrowserTelService.mmp --- a/browserutilities/browsertelservice/group/BrowserTelService.mmp Thu Sep 24 12:53:48 2009 +0300 +++ b/browserutilities/browsertelservice/group/BrowserTelService.mmp Mon Oct 26 08:28:45 2009 +0200 @@ -35,6 +35,7 @@ #endif START RESOURCE ../data/browsertelservice.rss +DEPENDS avkon.rsg HEADER TARGETPATH RESOURCE_FILES_DIR END diff -r c8a366e56285 -r 60c5402cb945 browserutilities/connectionmanager/Group/ConnectionManager.mmp --- a/browserutilities/connectionmanager/Group/ConnectionManager.mmp Thu Sep 24 12:53:48 2009 +0300 +++ b/browserutilities/connectionmanager/Group/ConnectionManager.mmp Mon Oct 26 08:28:45 2009 +0200 @@ -37,6 +37,7 @@ MW_LAYER_SYSTEMINCLUDE START RESOURCE ../data/ConnectionManager.rss +DEPENDS avkon.rsg HEADER TARGETPATH RESOURCE_FILES_DIR END diff -r c8a366e56285 -r 60c5402cb945 browserutilities/connectionmanager/Inc/ConnMan.hrh --- a/browserutilities/connectionmanager/Inc/ConnMan.hrh Thu Sep 24 12:53:48 2009 +0300 +++ b/browserutilities/connectionmanager/Inc/ConnMan.hrh Mon Oct 26 08:28:45 2009 +0200 @@ -23,4 +23,5 @@ { EConnManWaitNote = 8747, EConnManInfoNote - }; \ No newline at end of file + }; + \ No newline at end of file diff -r c8a366e56285 -r 60c5402cb945 browserutilities/downloadmgr/DownloadMgrUiLib/Group/DownloadMgrUiLib.mmp --- a/browserutilities/downloadmgr/DownloadMgrUiLib/Group/DownloadMgrUiLib.mmp Thu Sep 24 12:53:48 2009 +0300 +++ b/browserutilities/downloadmgr/DownloadMgrUiLib/Group/DownloadMgrUiLib.mmp Mon Oct 26 08:28:45 2009 +0200 @@ -32,6 +32,7 @@ //#define _DEBUG START RESOURCE ../Data/DownloadMgrUiLib.rss +DEPENDS avkon.rsg HEADER #ifdef __S60_32__ LANG sc diff -r c8a366e56285 -r 60c5402cb945 browserutilities/feedsengine/group/FeedsApp.mmp --- a/browserutilities/feedsengine/group/FeedsApp.mmp Thu Sep 24 12:53:48 2009 +0300 +++ b/browserutilities/feedsengine/group/FeedsApp.mmp Mon Oct 26 08:28:45 2009 +0200 @@ -34,6 +34,7 @@ CAPABILITY CAP_APPLICATION NetworkControl -Location START RESOURCE ../data/FeedsApp.rss +DEPENDS avkon.rsg HEADER TARGETPATH APP_RESOURCE_DIR #ifdef __S60_32__ diff -r c8a366e56285 -r 60c5402cb945 browserutilities/schemehandler/SchemeApp/group/SchemeApp.mmp --- a/browserutilities/schemehandler/SchemeApp/group/SchemeApp.mmp Thu Sep 24 12:53:48 2009 +0300 +++ b/browserutilities/schemehandler/SchemeApp/group/SchemeApp.mmp Mon Oct 26 08:28:45 2009 +0200 @@ -45,6 +45,7 @@ START RESOURCE ../data/SchemeApp.rss +DEPENDS avkon.rsg HEADER TARGETPATH APP_RESOURCE_DIR #ifdef __S60_32__ diff -r c8a366e56285 -r 60c5402cb945 browserutilities/schemehandler/SchemeDispatcher/group/SchemeDispatcher.mmp --- a/browserutilities/schemehandler/SchemeDispatcher/group/SchemeDispatcher.mmp Thu Sep 24 12:53:48 2009 +0300 +++ b/browserutilities/schemehandler/SchemeDispatcher/group/SchemeDispatcher.mmp Mon Oct 26 08:28:45 2009 +0200 @@ -1,4 +1,4 @@ -/* + /* * Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved. * This component and the accompanying materials are made available @@ -29,7 +29,8 @@ SOURCEPATH ../data START RESOURCE SCHEME_DISPATCHER_UID_RSS_NAME - TARGET SchemeDispatcher.rsc +DEPENDS avkon.rsg +TARGET SchemeDispatcher.rsc END CAPABILITY CAP_ECOM_PLUGIN diff -r c8a366e56285 -r 60c5402cb945 browserutilities/webutils/conf/webutils.confml Binary file browserutilities/webutils/conf/webutils.confml has changed diff -r c8a366e56285 -r 60c5402cb945 codhandler/Loc/CodViewer.loc --- a/codhandler/Loc/CodViewer.loc Thu Sep 24 12:53:48 2009 +0300 +++ b/codhandler/Loc/CodViewer.loc Mon Oct 26 08:28:45 2009 +0200 @@ -272,4 +272,3 @@ //r:1.2 // #define qtn_cd_info_not_enough_mem "Not enough memory available" - \ No newline at end of file diff -r c8a366e56285 -r 60c5402cb945 codhandler/codui/group/CodUi.mmp --- a/codhandler/codui/group/CodUi.mmp Thu Sep 24 12:53:48 2009 +0300 +++ b/codhandler/codui/group/CodUi.mmp Mon Oct 26 08:28:45 2009 +0200 @@ -44,6 +44,7 @@ SOURCE CodConfirm.cpp START RESOURCE ../data/CodUi.rss +DEPENDS avkon.rsg HEADER TARGETPATH RESOURCE_FILES_DIR #ifdef __S60_32__ diff -r c8a366e56285 -r 60c5402cb945 codhandler/codviewer/group/CodViewer.mmp --- a/codhandler/codviewer/group/CodViewer.mmp Thu Sep 24 12:53:48 2009 +0300 +++ b/codhandler/codviewer/group/CodViewer.mmp Mon Oct 26 08:28:45 2009 +0200 @@ -33,6 +33,7 @@ SOURCE CodViewer.cpp START RESOURCE ../data/CodViewer.rss +DEPENDS avkon.rsg HEADER TARGETPATH APP_RESOURCE_DIR #ifdef __S60_32__ diff -r c8a366e56285 -r 60c5402cb945 codhandler/ddviewer/group/DdViewer.mmp --- a/codhandler/ddviewer/group/DdViewer.mmp Thu Sep 24 12:53:48 2009 +0300 +++ b/codhandler/ddviewer/group/DdViewer.mmp Mon Oct 26 08:28:45 2009 +0200 @@ -33,6 +33,7 @@ SOURCE DdViewer.cpp START RESOURCE ../data/DdViewer.rss +DEPENDS avkon.rsg HEADER TARGETPATH APP_RESOURCE_DIR #ifdef __S60_32__ diff -r c8a366e56285 -r 60c5402cb945 codhandler/roapapp/group/RoapApp.mmp --- a/codhandler/roapapp/group/RoapApp.mmp Thu Sep 24 12:53:48 2009 +0300 +++ b/codhandler/roapapp/group/RoapApp.mmp Mon Oct 26 08:28:45 2009 +0200 @@ -41,6 +41,8 @@ SOURCE RoapAppLogger.cpp START RESOURCE ../data/RoapApp.rss +DEPENDS eikon.rsg +DEPENDS avkon.rsg HEADER TARGETPATH APP_RESOURCE_DIR #ifdef __S60_32__ diff -r c8a366e56285 -r 60c5402cb945 web_plat/browser_platform_api/inc/Browser_platform_variant.hrh --- a/web_plat/browser_platform_api/inc/Browser_platform_variant.hrh Thu Sep 24 12:53:48 2009 +0300 +++ b/web_plat/browser_platform_api/inc/Browser_platform_variant.hrh Mon Oct 26 08:28:45 2009 +0200 @@ -151,6 +151,9 @@ // Defines whether SAPI Security Manager Prompt Enhancement is available #define BRDO_SEC_MGR_PROMPT_ENHANCEMENT_FF +// Defines Symbian HTTP stack parameters specific for symbian 9.3 (e.g. EHttpEnableOptimalPipelining, EHttpOptimalPipelining) +//Flag need to be removed after this fix is supplied to Symbian 9.4 +#define BRDO_HTTP_STACK_93 /* * =================== * S60 3.23 @@ -270,6 +273,9 @@ #define MW_LAYER_PUSH_SYSTEMINCLUDE SYSTEMINCLUDE OS_LAYER_PUBLIC_EXPORT_PATH(../push) #define MW_LAYER_STDAPIS_SYSTEMINCLUDE SYSTEMINCLUDE OS_LAYER_PUBLIC_EXPORT_PATH(../stdapis) +// Defines Symbian HTTP stack parameters specific for symbian 9.3 (e.g. EHttpEnableOptimalPipelining, EHttpOptimalPipelining) +//Flag need to be removed after this fix is supplied to Symbian 9.4 +#undef BRDO_HTTP_STACK_93 /* * =================== * S60 5.0 PF5250+ / Ivalo / Saga @@ -306,6 +312,9 @@ #define MW_LAYER_PUSH_SYSTEMINCLUDE SYSTEMINCLUDE OS_LAYER_PUBLIC_EXPORT_PATH(../push) #define MW_LAYER_STDAPIS_SYSTEMINCLUDE SYSTEMINCLUDE OS_LAYER_PUBLIC_EXPORT_PATH(../stdapis) +// Defines Symbian HTTP stack parameters specific for symbian 9.3 (e.g. EHttpEnableOptimalPipelining, EHttpOptimalPipelining) +//Flag need to be removed after this fix is supplied to Symbian 9.4 +#undef BRDO_HTTP_STACK_93 /* * =================== * S60 5.1 @@ -337,6 +346,9 @@ #define MW_LAYER_PUSH_SYSTEMINCLUDE SYSTEMINCLUDE OS_LAYER_PUBLIC_EXPORT_PATH(push) #define MW_LAYER_STDAPIS_SYSTEMINCLUDE SYSTEMINCLUDE OS_LAYER_PUBLIC_EXPORT_PATH(stdapis) +// Defines Symbian HTTP stack parameters specific for symbian 9.3 (e.g. EHttpEnableOptimalPipelining, EHttpOptimalPipelining) +//Flag need to be removed after this fix is supplied to Symbian 9.4 +#undef BRDO_HTTP_STACK_93 /* * =================== * S60 5.2 @@ -355,6 +367,10 @@ // un-comment this line for week21 release #undef BRDO_MULTIPART_PARSER_FF +// Defines Symbian HTTP stack parameters specific for symbian 9.3 (e.g. EHttpEnableOptimalPipelining, EHttpOptimalPipelining) +//Flag need to be removed after this fix is supplied to Symbian 9.4 +#undef BRDO_HTTP_STACK_93 + #define APP_LAYER_LIBC_SYSTEMINCLUDE SYSTEMINCLUDE OS_LAYER_PUBLIC_EXPORT_PATH(libc) #define APP_LAYER_ECOM_SYSTEMINCLUDE SYSTEMINCLUDE OS_LAYER_PUBLIC_EXPORT_PATH(ecom) #define APP_LAYER_HTTP_SYSTEMINCLUDE SYSTEMINCLUDE OS_LAYER_PUBLIC_EXPORT_PATH(http) diff -r c8a366e56285 -r 60c5402cb945 web_pub/browser_control_api/inc/BrCtlDefs.h --- a/web_pub/browser_control_api/inc/BrCtlDefs.h Thu Sep 24 12:53:48 2009 +0300 +++ b/web_pub/browser_control_api/inc/BrCtlDefs.h Mon Oct 26 08:28:45 2009 +0200 @@ -470,6 +470,13 @@ * Browser cursor show mode -- some phone doesn't have cursor inside Browser */ ESettingsCursorShowMode, + + /* + * Enter key mode - default behavior is like in desktop browser - submit the form + * The alternative is to select the link is one is activated. + */ + ESettingsEnterKeyMode, + ESettingsMaxEnum ///< Must be last one }; @@ -825,6 +832,12 @@ ENoCursor = 0, EDefaultCursor }; + + enum TEnterKeySettings + { + EEnterKeyDefault = 0, + EEnterKeyCanActivateLink + }; }; #endif // BRCTLDEFS_H diff -r c8a366e56285 -r 60c5402cb945 web_pub/favourites_engine_api/tsrc/inc/FavouritesEngineTest.h --- a/web_pub/favourites_engine_api/tsrc/inc/FavouritesEngineTest.h Thu Sep 24 12:53:48 2009 +0300 +++ b/web_pub/favourites_engine_api/tsrc/inc/FavouritesEngineTest.h Mon Oct 26 08:28:45 2009 +0200 @@ -1,22 +1,25 @@ /* -* Copyright (c) 2002 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". +* ============================================================================== +* Name : FavouritesEngineTest.h +* Part of : ?Subsystem_name / FavouritesEngineTest +* +* Description : FavouritesEngineTest test module. +* Version: 0.5 * -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: +* Copyright (C) 2002 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. * -* Description: FavouritesEngineTest test module. -* +* ============================================================================ */ - #ifndef FAVOURITESENGINETEST_H #define FAVOURITESENGINETEST_H @@ -342,6 +345,24 @@ TInt ItemAssignTestL( TTestResult& aResult ); /** + * FavouritesItem Assign(=) operator test case. + * @since ?Series60_version + * @param aResult Test case result (PASS/FAIL) + * @return Symbian OS error code (test case execution error + * that is not returned as test case result in aResult) + */ + TInt ItemAssignSelfTestL( TTestResult& aResult ); + + /** + * FavouritesItem Assign(=) operator test case. + * @since ?Series60_version + * @param aResult Test case result (PASS/FAIL) + * @return Symbian OS error code (test case execution error + * that is not returned as test case result in aResult) + */ + TInt ItemAssignCompleteTestL( TTestResult& aResult ); + + /** * FavouritesItem Uid test case. * @since ?Series60_version * @param aResult Test case result (PASS/FAIL) @@ -432,13 +453,32 @@ TInt ItemIsItemTestL( TTestResult& aResult ); /** - * FavouritesItem IsFolder test case. + * FavouritesItem IsItemEFolder test case. * @since ?Series60_version * @param aResult Test case result (PASS/FAIL) * @return Symbian OS error code (test case execution error * that is not returned as test case result in aResult) */ + TInt ItemIsItemEFolderTestL( TTestResult& aResult ); + + /** + * FavouritesItem IsFolder test case for type EItem. + * @since ?Series60_version + * @param aResult Test case result (PASS/FAIL) + * @return Symbian OS error code (test case execution error + * that is not returned as test case result in aResult) + */ + TInt ItemIsFolderTestL( TTestResult& aResult ); + /** + * FavouritesItem IsFolder test case for type EFolder. + * @since ?Series60_version + * @param aResult Test case result (PASS/FAIL) + * @return Symbian OS error code (test case execution error + * that is not returned as test case result in aResult) + */ + + TInt ItemIsFolderEFolderTestL( TTestResult& aResult ); /** * FavouritesItem IsFactoryItem test case. @@ -495,6 +535,15 @@ TInt ItemSetTypeTestL( TTestResult& aResult ); /** + * FavouritesItem SetTypeNone test case. + * @since ?Series60_version + * @param aResult Test case result (PASS/FAIL) + * @return Symbian OS error code (test case execution error + * that is not returned as test case result in aResult) + */ + TInt ItemSetTypeNoneTestL( TTestResult& aResult ); + + /** * FavouritesItem SetNameL test case. * @since ?Series60_version * @param aResult Test case result (PASS/FAIL) @@ -504,6 +553,60 @@ TInt ItemSetNameLTestL( TTestResult& aResult ); /** + * FavouritesItem ItemSetNameMaxLengthTruncateLTestL test case. + * @since ?Series60_version + * @param aResult Test case result (PASS/FAIL) + * @return Symbian OS error code (test case execution error + * that is not returned as test case result in aResult) + */ + TInt ItemSetNameMaxLengthTruncateLTestL( TTestResult& aResult ); + + /** + * FavouritesItem ItemSetNameTrimStringLTestL test case. + * @since ?Series60_version + * @param aResult Test case result (PASS/FAIL) + * @return Symbian OS error code (test case execution error + * that is not returned as test case result in aResult) + */ + TInt ItemSetNameTrimStringLTestL( TTestResult& aResult ); + + /** + * FavouritesItem ItemSetNameRTLMarkLTestL test case. + * @since ?Series60_version + * @param aResult Test case result (PASS/FAIL) + * @return Symbian OS error code (test case execution error + * that is not returned as test case result in aResult) + */ + TInt ItemSetNameRTLMarkLTestL( TTestResult& aResult ); + + /** + * FavouritesItem ItemSetNameEmptyStringLTestL test case. + * @since ?Series60_version + * @param aResult Test case result (PASS/FAIL) + * @return Symbian OS error code (test case execution error + * that is not returned as test case result in aResult) + */ + TInt ItemSetNameEmptyStringLTestL( TTestResult& aResult ); + + /** + * FavouritesItem ItemSetNameWhiteSpaceLTestL test case. + * @since ?Series60_version + * @param aResult Test case result (PASS/FAIL) + * @return Symbian OS error code (test case execution error + * that is not returned as test case result in aResult) + */ + TInt ItemSetNameWhiteSpaceLTestL( TTestResult& aResult ); + + /** + * FavouritesItem SetNameFolderL test case. + * @since ?Series60_version + * @param aResult Test case result (PASS/FAIL) + * @return Symbian OS error code (test case execution error + * that is not returned as test case result in aResult) + */ + TInt ItemSetNameFolderLTestL( TTestResult& aResult ); + + /** * FavouritesItem SetUrlL test case. * @since ?Series60_version * @param aResult Test case result (PASS/FAIL) @@ -529,6 +632,25 @@ * that is not returned as test case result in aResult) */ TInt ItemSetUserNameLTestL( TTestResult& aResult ); + + + /** + * FavouritesItem ItemSetUserNameMaxLengthLTestL test case. + * @since ?Series60_version + * @param aResult Test case result (PASS/FAIL) + * @return Symbian OS error code (test case execution error + * that is not returned as test case result in aResult) + */ + TInt ItemSetUserNameMaxLengthLTestL( TTestResult& aResult ); + + /** + * FavouritesItem ItemSetUserNameTruncateLengthLTestL test case. + * @since ?Series60_version + * @param aResult Test case result (PASS/FAIL) + * @return Symbian OS error code (test case execution error + * that is not returned as test case result in aResult) + */ + TInt ItemSetUserNameTruncateLengthLTestL( TTestResult& aResult ); /** * FavouritesItem SetPasswordL test case. @@ -984,6 +1106,24 @@ */ TInt DbDeleteFolderTestL( TTestResult& aResult ); + /** + * FavouritesItem IsHidden test case. + * @since ?Series60_version + * @param aResult Test case result (PASS/FAIL) + * @return Symbian OS error code (test case execution error + * that is not returned as test case result in aResult) + */ + TInt ItemIsHiddenTestL( TTestResult& aResult ); + + /** + * FavouritesItem SetHidden test case. + * @since ?Series60_version + * @param aResult Test case result (PASS/FAIL) + * @return Symbian OS error code (test case execution error + * that is not returned as test case result in aResult) + */ + TInt ItemSetHiddenTestL( TTestResult& aResult ); + private: // Functions to test TFavouritesWapAp interface /** @@ -1014,6 +1154,15 @@ TInt WapApAssignWithApIdTest( TTestResult& aResult ); /** + * TFavouritesWapAp assign operator using self ApId test case. + * @since ?Series60_version + * @param aResult Test case result (PASS/FAIL) + * @return Symbian OS error code (test case execution error + * that is not returned as test case result in aResult) + */ + TInt WapApAssignSelfWithApTest( TTestResult& aResult ); + + /** * TFavouritesWapAp SetNull test case. * @since ?Series60_version * @param aResult Test case result (PASS/FAIL) diff -r c8a366e56285 -r 60c5402cb945 web_pub/favourites_engine_api/tsrc/src/FavouritesEngineTest.cpp --- a/web_pub/favourites_engine_api/tsrc/src/FavouritesEngineTest.cpp Thu Sep 24 12:53:48 2009 +0300 +++ b/web_pub/favourites_engine_api/tsrc/src/FavouritesEngineTest.cpp Mon Oct 26 08:28:45 2009 +0200 @@ -1,22 +1,25 @@ /* -* 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". +* ============================================================================== +* Name : FavouritesEngineTest.cpp +* Part of : ?Subsystem_name / FavouritesEngineTest +* +* Description : FavouritesBCTest class member functions +* Version: 0.5 * -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: +* Copyright (C) 2006 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. * -* Description: FavouritesBCTest class member functions -* +* ============================================================================ */ - // INCLUDE FILES #include #include "FavouritesEngineTest.h" @@ -249,7 +252,9 @@ ENTRY( "Item NewLC test", CFavouritesEngineTest::ItemNewLCTestL ), ENTRY( "Item NewL test", CFavouritesEngineTest::ItemNewLTestL ), ENTRY( "Item Destructor test", CFavouritesEngineTest::ItemDestructorTestL ), - ENTRY( "Item Assign(=) operator test", CFavouritesEngineTest::ItemAssignTestL ), + ENTRY( "Item Assign(=) operator basic test", CFavouritesEngineTest::ItemAssignTestL ), + ENTRY( "Item Assign(=) to Self test", CFavouritesEngineTest::ItemAssignSelfTestL ), + ENTRY( "Item Assign(=) Complete test", CFavouritesEngineTest::ItemAssignCompleteTestL ), ENTRY( "Item Uid test", CFavouritesEngineTest::ItemUidTestL ), ENTRY( "Item ParentFolder test", CFavouritesEngineTest::ItemParentFolderTestL ), ENTRY( "Item Type test", CFavouritesEngineTest::ItemTypeTestL ), @@ -259,19 +264,30 @@ ENTRY( "Item UserName test", CFavouritesEngineTest::ItemUserNameTestL ), ENTRY( "Item Password test", CFavouritesEngineTest::ItemPasswordTestL ), ENTRY( "Item ContextId test", CFavouritesEngineTest::ItemContextIdTestL ), - ENTRY( "Item IsItem test", CFavouritesEngineTest::ItemIsItemTestL ), - ENTRY( "Item IsFolder test", CFavouritesEngineTest::ItemIsFolderTestL ), + ENTRY( "Item IsItem Default test", CFavouritesEngineTest::ItemIsItemTestL ), + ENTRY( "Item IsItem Folder test", CFavouritesEngineTest::ItemIsItemEFolderTestL ), + ENTRY( "Item IsFolder Default test", CFavouritesEngineTest::ItemIsFolderTestL ), + ENTRY( "Item IsFolder Folder test", CFavouritesEngineTest::ItemIsFolderEFolderTestL ), ENTRY( "Item IsFactoryItem test", CFavouritesEngineTest::ItemIsFactoryItemTestL ), ENTRY( "Item IsReadOnly test", CFavouritesEngineTest::ItemIsReadOnlyTestL ), ENTRY( "Item Modified test", CFavouritesEngineTest::ItemModifiedTestL ), ENTRY( "Item ClearL test", CFavouritesEngineTest::ItemClearLTestL ), ENTRY( "Item SetParentFolder test", CFavouritesEngineTest::ItemSetParentFolderTestL ), - ENTRY( "Item SetType test", CFavouritesEngineTest::ItemSetTypeTestL ), - ENTRY( "Item SetNameL test", CFavouritesEngineTest::ItemSetNameLTestL ), - ENTRY( "Item SetUrlL test", CFavouritesEngineTest::ItemSetUrlLTestL ), + ENTRY( "Item SetType Default test", CFavouritesEngineTest::ItemSetTypeTestL ), + ENTRY( "Item SetType None test", CFavouritesEngineTest::ItemSetTypeNoneTestL ), + ENTRY( "Item SetName Default test", CFavouritesEngineTest::ItemSetNameLTestL ), + ENTRY( "Item SetName Truncate test", CFavouritesEngineTest::ItemSetNameMaxLengthTruncateLTestL ), + ENTRY( "Item SetName TrimString test", CFavouritesEngineTest::ItemSetNameTrimStringLTestL ), + ENTRY( "Item SetName RTLMark test", CFavouritesEngineTest::ItemSetNameRTLMarkLTestL ), + ENTRY( "Item SetName EmptyString test", CFavouritesEngineTest::ItemSetNameEmptyStringLTestL ), + ENTRY( "Item SetName WhiteSpace test", CFavouritesEngineTest::ItemSetNameWhiteSpaceLTestL ), + ENTRY( "Item SetName ForFolder test", CFavouritesEngineTest::ItemSetNameFolderLTestL ), + ENTRY( "Item SetUrl test", CFavouritesEngineTest::ItemSetUrlLTestL ), ENTRY( "Item SetWapAp test", CFavouritesEngineTest::ItemSetWapApTestL ), - ENTRY( "Item SetUserNameL test", CFavouritesEngineTest::ItemSetUserNameLTestL ), - ENTRY( "Item SetPasswordL test", CFavouritesEngineTest::ItemSetPasswordLTestL ), + ENTRY( "Item SetUserName test", CFavouritesEngineTest::ItemSetUserNameLTestL ), + ENTRY( "Item SetUserName MaxLengthErr test", CFavouritesEngineTest::ItemSetUserNameMaxLengthLTestL ), + ENTRY( "Item SetUserName Truncate test", CFavouritesEngineTest::ItemSetUserNameTruncateLengthLTestL ), + ENTRY( "Item SetPassword test", CFavouritesEngineTest::ItemSetPasswordLTestL ), ENTRY( "Item SetContextId test", CFavouritesEngineTest::ItemSetContextIdTestL ), ENTRY( "List Constructor test", CFavouritesEngineTest::ListConstructorTestL ), ENTRY( "List Destructor test", CFavouritesEngineTest::ListDestructorTestL ), @@ -321,6 +337,7 @@ ENTRY( "WapAp Constructor test", CFavouritesEngineTest::WapApConstructorTest ), ENTRY( "WapAp Assign with Ap test", CFavouritesEngineTest::WapApAssignWithApTest ), ENTRY( "WapAp Assign with ApId test", CFavouritesEngineTest::WapApAssignWithApIdTest ), + ENTRY( "WapAp Self-Assign with ApId test", CFavouritesEngineTest::WapApAssignSelfWithApTest ), ENTRY( "WapAp SetNull test", CFavouritesEngineTest::WapApSetNullTest ), ENTRY( "WapAp SetDefault test", CFavouritesEngineTest::WapApSetDefaultTest ), ENTRY( "WapAp SetApId test", CFavouritesEngineTest::WapApSetApIdTest ), @@ -346,7 +363,9 @@ ENTRY( "Notifier constructor test", CFavouritesEngineTest::NotifierConstructorTestL ), ENTRY( "Notifier destructor test", CFavouritesEngineTest::NotifierDestructorTestL ), ENTRY( "Notifier Start test", CFavouritesEngineTest::NotifierStartTestL ), - ENTRY( "Db DeleteFolder test", CFavouritesEngineTest::DbDeleteFolderTestL ) + ENTRY( "Db DeleteFolder test", CFavouritesEngineTest::DbDeleteFolderTestL ), + ENTRY( "Item IsHidden test", CFavouritesEngineTest::ItemIsHiddenTestL ), + ENTRY( "Item SetHidden test", CFavouritesEngineTest::ItemSetHiddenTestL ) }; // Verify that case number is valid diff -r c8a366e56285 -r 60c5402cb945 web_pub/favourites_engine_api/tsrc/src/FavouritesItemTestCases.cpp --- a/web_pub/favourites_engine_api/tsrc/src/FavouritesItemTestCases.cpp Thu Sep 24 12:53:48 2009 +0300 +++ b/web_pub/favourites_engine_api/tsrc/src/FavouritesItemTestCases.cpp Mon Oct 26 08:28:45 2009 +0200 @@ -1,23 +1,26 @@ /* -* 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". +* ============================================================================ +* Name: FavouritesItemTestCases.cpp +* Part of: FavouritesEngineTest class member functions +* +* Description: +* +* Version: 1.0 * -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: +* Copyright (C) 2008 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. * -* Description: -* -* +* ============================================================================ */ - // INCLUDE FILES #include #include "FavouritesEngineTest.h" @@ -260,6 +263,153 @@ Class: CFavouritesEngineTest + Method: ItemAssignCompleteTestL + + Description: Assigning one item to another with the Assign(=) method. + + Parameters: TTestResult& aErrorDescription: out: + Test result and on error case a short description of error + + Return Values: TInt: Always KErrNone to indicate that test was valid + + Errors/Exceptions: None + + Status: Approved + +------------------------------------------------------------------------------- +*/ +TInt CFavouritesEngineTest::ItemAssignCompleteTestL( TTestResult& aResult ) + { + /* Simple server connect */ + _LIT( KDefinition ,"State"); + _LIT( KData ,"Assigning item with Assign(=) operator"); + TestModuleIf().Printf( 0, KDefinition, KData ); + + TFavouritesWapAp accessPoint1; + accessPoint1.SetApId( 22 ); + + CFavouritesItem* item1 = CFavouritesItem::NewLC(); + item1->SetNameL( _L("Item1") ); + item1->SetUrlL( _L("http://www.nokia.com") ); + item1->SetUserNameL( _L("Name 1")); + item1->SetPasswordL( _L("Password 1")); + item1->SetParentFolder(3); + item1->SetContextId(22); + item1->SetHidden(1); + item1->SetWapAp( accessPoint1 ); + + + TFavouritesWapAp accessPoint2; + accessPoint2.SetApId( 24 ); + + CFavouritesItem* item2 = CFavouritesItem::NewLC(); + item2->SetNameL( _L("Item2") ); + item2->SetUrlL( _L("http://www.google.com") ); + item2->SetUserNameL( _L("Name 2")); + item2->SetPasswordL( _L("Password 2")); + item2->SetParentFolder(4); + item2->SetContextId(24); + // item2->SetHidden(0); + item2->SetWapAp( accessPoint2 ); + + + + + *item1 = *item2; + + _LIT( KData2 ,"Finished"); + TestModuleIf().Printf( 0, KDefinition, KData2 ); + + if ( + (item1->Name() == item2->Name()) && + (item1->Url() == item2->Url()) && + (item1->UserName() == item2->UserName()) && + (item1->Password() == item2->Password()) && + (item1->ContextId() == item2->ContextId()) && + (item1->ParentFolder() == item2->ParentFolder()) && + (item1->Type() == item2->Type()) && + (item1->WapAp().ApId() == item2->WapAp().ApId()) && + (item1->IsItem() == item2->IsItem()) && + (item1->IsFolder() == item2->IsFolder()) && + (item1->IsHidden() == item2->IsHidden()) && + // (item1->Uid() == item2->Uid()) && + (item1->Modified() == item2->Modified()) + + ) + { + _LIT( KDescription , "Test case passed"); + aResult.SetResult( KErrNone, KDescription ); + } + else + { + _LIT( KDescription , "Test case failed"); + aResult.SetResult( KErrGeneral, KDescription ); + } + + CleanupStack::PopAndDestroy( 2 ); // item1, item2 + + // Case was executed + return KErrNone; + } + + +/* +------------------------------------------------------------------------------- + + Class: CFavouritesEngineTest + + Method: ItemAssignSelfTestL + + Description: Assigning one item to self with the Assign(=) method. + + Parameters: TTestResult& aErrorDescription: out: + Test result and on error case a short description of error + + Return Values: TInt: Always KErrNone to indicate that test was valid + + Errors/Exceptions: None + + Status: Approved + +------------------------------------------------------------------------------- +*/ +TInt CFavouritesEngineTest::ItemAssignSelfTestL( TTestResult& aResult ) + { + /* Simple server connect */ + _LIT( KDefinition ,"State"); + _LIT( KData ,"Assigning item with Assign(=) operator"); + TestModuleIf().Printf( 0, KDefinition, KData ); + + CFavouritesItem* item1 = CFavouritesItem::NewLC(); + item1->SetNameL( _L("Item1") ); + + *item1 = *item1; //copy to self, should not affect anything + + _LIT( KData2 ,"Finished"); + TestModuleIf().Printf( 0, KDefinition, KData2 ); + + if (item1->Name() == _L("Item1")) + { + _LIT( KDescription , "Test case passed"); + aResult.SetResult( KErrNone, KDescription ); + } + else + { + _LIT( KDescription , "Test case failed"); + aResult.SetResult( KErrGeneral, KDescription ); + } + + CleanupStack::PopAndDestroy( item1 ); + + // Case was executed + return KErrNone; + } + +/* +------------------------------------------------------------------------------- + + Class: CFavouritesEngineTest + Method: ItemUidTestL Description: Test getting the item's Uid using the Uid method. @@ -391,7 +541,7 @@ _LIT( KData2 ,"Finished"); TestModuleIf().Printf( 0, KDefinition, KData2 ); - if (itemType == 1) + if (itemType == CFavouritesItem::EItem) { _LIT( KDescription , "Test case passed"); aResult.SetResult( KErrNone, KDescription ); @@ -769,6 +919,59 @@ return KErrNone; } + +/* +------------------------------------------------------------------------------- + + Class: CFavouritesEngineTest + + Method: ItemIsItemEFolderTestL + + Description: Test if the folder is not an item using the IsItem method. + + Parameters: TTestResult& aErrorDescription: out: + Test result and on error case a short description of error + + Return Values: TInt: Always KErrNone to indicate that test was valid + + Errors/Exceptions: None + + Status: Approved + +------------------------------------------------------------------------------- +*/ +TInt CFavouritesEngineTest::ItemIsItemEFolderTestL( TTestResult& aResult ) + { + /* Simple server connect */ + _LIT( KDefinition ,"State"); + _LIT( KData ,"Checking if the folder is not an item with IsItem method"); + TestModuleIf().Printf( 0, KDefinition, KData ); + + CFavouritesItem* item = CFavouritesItem::NewLC(); + item->SetType(CFavouritesItem::EFolder); + + TBool itemIsItem = item->IsItem(); + + _LIT( KData2 ,"Finished"); + TestModuleIf().Printf( 0, KDefinition, KData2 ); + + if (!itemIsItem) + { + _LIT( KDescription , "Test case passed"); + aResult.SetResult( KErrNone, KDescription ); + } + else + { + _LIT( KDescription , "Test case failed"); + aResult.SetResult( KErrGeneral, KDescription ); + } + + CleanupStack::PopAndDestroy( item ); + + // Case was executed + return KErrNone; + } + /* ------------------------------------------------------------------------------- @@ -793,7 +996,7 @@ { /* Simple server connect */ _LIT( KDefinition ,"State"); - _LIT( KData ,"Checking if the item is a folder with IsFolder method"); + _LIT( KData ,"Checking if the item is not a folder with IsFolder method"); TestModuleIf().Printf( 0, KDefinition, KData ); CFavouritesItem* item = CFavouritesItem::NewLC(); @@ -825,6 +1028,58 @@ Class: CFavouritesEngineTest + Method: ItemIsFolderEFolderTestL + + Description: Test if the item of type EFolder is a folder using the IsFolder method. + + Parameters: TTestResult& aErrorDescription: out: + Test result and on error case a short description of error + + Return Values: TInt: Always KErrNone to indicate that test was valid + + Errors/Exceptions: None + + Status: Draft + +------------------------------------------------------------------------------- +*/ +TInt CFavouritesEngineTest::ItemIsFolderEFolderTestL( TTestResult& aResult ) + { + /* Simple server connect */ + _LIT( KDefinition ,"State"); + _LIT( KData ,"Checking if the folder is a folder with IsFolder method"); + TestModuleIf().Printf( 0, KDefinition, KData ); + + CFavouritesItem* item = CFavouritesItem::NewLC(); + /* set item as folder type */ + item->SetType(CFavouritesItem::EFolder); + TBool itemIsFolder = item->IsFolder(); + + _LIT( KData2 ,"Finished"); + TestModuleIf().Printf( 0, KDefinition, KData2 ); + + if (itemIsFolder) + { + _LIT( KDescription , "Test case passed"); + aResult.SetResult( KErrNone, KDescription ); + } + else + { + _LIT( KDescription , "Test case failed"); + aResult.SetResult( KErrGeneral, KDescription ); + } + + CleanupStack::PopAndDestroy( item ); + + // Case was executed + return KErrNone; + } + +/* +------------------------------------------------------------------------------- + + Class: CFavouritesEngineTest + Method: ItemIsFactoryItemTestL Description: Test if the item is a factory item using the IsFactoryItem method. @@ -1084,7 +1339,7 @@ Method: ItemSetTypeTestL - Description: Test setting the item's type using the SetType method. + Description: Test setting the item's type to EFolder using the SetType method. Parameters: TTestResult& aErrorDescription: out: Test result and on error case a short description of error @@ -1101,7 +1356,7 @@ { /* Simple server connect */ _LIT( KDefinition ,"State"); - _LIT( KData ,"Setting the item's type with SetType method"); + _LIT( KData ,"Setting the item's type to Folder with SetType method"); TestModuleIf().Printf( 0, KDefinition, KData ); CFavouritesItem* item = CFavouritesItem::NewLC(); @@ -1133,6 +1388,57 @@ Class: CFavouritesEngineTest + Method: ItemSetTypeNoneTestL + + Description: Test setting the item's type to ENone using the SetType method. Type should not be affected. + + Parameters: TTestResult& aErrorDescription: out: + Test result and on error case a short description of error + + Return Values: TInt: Always KErrNone to indicate that test was valid + + Errors/Exceptions: None + + Status: Draft + +------------------------------------------------------------------------------- +*/ +TInt CFavouritesEngineTest::ItemSetTypeNoneTestL( TTestResult& aResult ) + { + /* Simple server connect */ + _LIT( KDefinition ,"State"); + _LIT( KData ,"Setting the item's type to None with SetType method"); + TestModuleIf().Printf( 0, KDefinition, KData ); + + CFavouritesItem* item = CFavouritesItem::NewLC(); + + item->SetType(CFavouritesItem::ENone); + + _LIT( KData2 ,"Finished"); + TestModuleIf().Printf( 0, KDefinition, KData2 ); + + if (item->Type() != CFavouritesItem::ENone) + { + _LIT( KDescription , "Test case passed"); + aResult.SetResult( KErrNone, KDescription ); + } + else + { + _LIT( KDescription , "Test case failed"); + aResult.SetResult( KErrGeneral, KDescription ); + } + + CleanupStack::PopAndDestroy( item ); + + // Case was executed + return KErrNone; + } + +/* +------------------------------------------------------------------------------- + + Class: CFavouritesEngineTest + Method: ItemSetNameLTestL Description: Test setting the item's name using the SetNameL method. @@ -1179,11 +1485,319 @@ return KErrNone; } + /* ------------------------------------------------------------------------------- Class: CFavouritesEngineTest + Method: ItemSetNameFolderLTestL + + Description: Test setting the item (folder)'s name using the SetNameL method. + + Parameters: TTestResult& aErrorDescription: out: + Test result and on error case a short description of error + + Return Values: TInt: Always KErrNone to indicate that test was valid + + Errors/Exceptions: None + + Status: Approved + +------------------------------------------------------------------------------- +*/ +TInt CFavouritesEngineTest::ItemSetNameFolderLTestL( TTestResult& aResult ) + { + /* Simple server connect */ + _LIT( KDefinition ,"State"); + _LIT( KData ,"Setting the item's name with SetNameL method"); + TestModuleIf().Printf( 0, KDefinition, KData ); + + CFavouritesItem* item = CFavouritesItem::NewLC(); + item->SetType(CFavouritesItem::EFolder); + item->SetNameL( _L("Fav Folder") ); + + _LIT( KData2 ,"Finished"); + TestModuleIf().Printf( 0, KDefinition, KData2 ); + + if (item->Name() == _L("Fav Folder")) + { + _LIT( KDescription , "Test case passed"); + aResult.SetResult( KErrNone, KDescription ); + } + else + { + _LIT( KDescription , "Test case failed"); + aResult.SetResult( KErrGeneral, KDescription ); + } + + CleanupStack::PopAndDestroy( item ); + + // Case was executed + return KErrNone; + } + + +/* +------------------------------------------------------------------------------- + + Class: CFavouritesEngineTest + + Method: ItemSetNameMaxLengthTruncateLTestL + + Description: Test setting the item's name and maxlength using the SetNameL method. + + Parameters: TTestResult& aErrorDescription: out: + Test result and on error case a short description of error + + Return Values: TInt: Always KErrNone to indicate that test was valid + + Errors/Exceptions: None + + Status: Draft + +------------------------------------------------------------------------------- +*/ +TInt CFavouritesEngineTest::ItemSetNameMaxLengthTruncateLTestL( TTestResult& aResult ) + { + /* Simple server connect */ + _LIT( KDefinition ,"State"); + _LIT( KData ,"Setting the item's name with SetNameL method"); + TestModuleIf().Printf( 0, KDefinition, KData ); + + CFavouritesItem* item = CFavouritesItem::NewLC(); + TRAPD(err, item->SetNameL( _L("Item Name longer than KFavouritesMaxName limit which is 50 chars"))); + + _LIT( KData2 ,"Finished"); + TestModuleIf().Printf( 0, KDefinition, KData2 ); + + if ((item->Name().Length() == KFavouritesMaxName)&& (err==KErrOverflow)) + { + _LIT( KDescription , "Test case passed"); + aResult.SetResult( KErrNone, KDescription ); + } + else + { + _LIT( KDescription , "Test case failed"); + aResult.SetResult( KErrGeneral, KDescription ); + } + + CleanupStack::PopAndDestroy( item ); + + // Case was executed + return KErrNone; + } + + +/* +------------------------------------------------------------------------------- + + Class: CFavouritesEngineTest + + Method: ItemSetNameTrimStringLTestL + + Description: Test setting the item's name with trim using the SetNameL method. + + Parameters: TTestResult& aErrorDescription: out: + Test result and on error case a short description of error + + Return Values: TInt: Always KErrNone to indicate that test was valid + + Errors/Exceptions: None + + Status: Draft + +------------------------------------------------------------------------------- +*/ +TInt CFavouritesEngineTest::ItemSetNameTrimStringLTestL( TTestResult& aResult ) + { + /* Simple server connect */ + _LIT( KDefinition ,"State"); + _LIT( KData ,"Setting the item's name with SetNameL method"); + TestModuleIf().Printf( 0, KDefinition, KData ); + + CFavouritesItem* item = CFavouritesItem::NewLC(); + item->SetNameL( _L(" some name ")); + + _LIT( KData2 ,"Finished"); + TestModuleIf().Printf( 0, KDefinition, KData2 ); + + if (item->Name()== _L("some name")) + { + _LIT( KDescription , "Test case passed"); + aResult.SetResult( KErrNone, KDescription ); + } + else + { + _LIT( KDescription , "Test case failed"); + aResult.SetResult( KErrGeneral, KDescription ); + } + + CleanupStack::PopAndDestroy( item ); + + // Case was executed + return KErrNone; + } + +/* +------------------------------------------------------------------------------- + + Class: CFavouritesEngineTest + + Method: ItemSetNameRTLMarkLTestL + + Description: Test setting the item's name with trim using the SetNameL method. + + Parameters: TTestResult& aErrorDescription: out: + Test result and on error case a short description of error + + Return Values: TInt: Always KErrNone to indicate that test was valid + + Errors/Exceptions: None + + Status: Draft + +------------------------------------------------------------------------------- +*/ +TInt CFavouritesEngineTest::ItemSetNameRTLMarkLTestL( TTestResult& aResult ) + { + /* Simple server connect */ + _LIT( KDefinition ,"State"); + _LIT( KData ,"Setting the item's name with SetNameL method"); + + TestModuleIf().Printf( 0, KDefinition, KData ); + + CFavouritesItem* item = CFavouritesItem::NewLC(); + item->SetNameL( _L("\x200F some name \x200F")); + + _LIT( KData2 ,"Finished"); + TestModuleIf().Printf( 0, KDefinition, KData2 ); + + if (item->Name()== _L("some name")) + { + _LIT( KDescription , "Test case passed"); + aResult.SetResult( KErrNone, KDescription ); + } + else + { + _LIT( KDescription , "Test case failed"); + aResult.SetResult( KErrGeneral, KDescription ); + } + + CleanupStack::PopAndDestroy( item ); + + // Case was executed + return KErrNone; + } + + +/* +------------------------------------------------------------------------------- + + Class: CFavouritesEngineTest + + Method: ItemSetNameEmptyStringLTestL + + Description: Test setting the item's name with trim using the SetNameL method. + + Parameters: TTestResult& aErrorDescription: out: + Test result and on error case a short description of error + + Return Values: TInt: Always KErrNone to indicate that test was valid + + Errors/Exceptions: None + + Status: Draft + +------------------------------------------------------------------------------- +*/ +TInt CFavouritesEngineTest::ItemSetNameEmptyStringLTestL( TTestResult& aResult ) + { + /* Simple server connect */ + _LIT( KDefinition ,"State"); + _LIT( KData ,"Setting the item's name with SetNameL method"); + TestModuleIf().Printf( 0, KDefinition, KData ); + + CFavouritesItem* item = CFavouritesItem::NewLC(); + TRAPD(err, item->SetNameL( _L(""))); //returns error + + _LIT( KData2 ,"Finished"); + TestModuleIf().Printf( 0, KDefinition, KData2 ); + + if (err!=KErrNone) + { + _LIT( KDescription , "Test case passed"); + aResult.SetResult( KErrNone, KDescription ); + } + else + { + _LIT( KDescription , "Test case failed"); + aResult.SetResult( KErrGeneral, KDescription ); + } + + CleanupStack::PopAndDestroy( item ); + + // Case was executed + return KErrNone; + } + +/* +------------------------------------------------------------------------------- + + Class: CFavouritesEngineTest + + Method: ItemSetNameWhiteSpaceLTestL + + Description: Test setting the item's name with trim using the SetNameL method. + + Parameters: TTestResult& aErrorDescription: out: + Test result and on error case a short description of error + + Return Values: TInt: Always KErrNone to indicate that test was valid + + Errors/Exceptions: None + + Status: Draft + +------------------------------------------------------------------------------- +*/ +TInt CFavouritesEngineTest::ItemSetNameWhiteSpaceLTestL( TTestResult& aResult ) + { + /* Simple server connect */ + _LIT( KDefinition ,"State"); + _LIT( KData ,"Setting the item's name with SetNameL method"); + TestModuleIf().Printf( 0, KDefinition, KData ); + + CFavouritesItem* item = CFavouritesItem::NewLC(); + TRAPD(err, item->SetNameL( _L(" "))); //returns error + + _LIT( KData2 ,"Finished"); + TestModuleIf().Printf( 0, KDefinition, KData2 ); + + if (err!=KErrNone) + { + _LIT( KDescription , "Test case passed"); + aResult.SetResult( KErrNone, KDescription ); + } + else + { + _LIT( KDescription , "Test case failed"); + aResult.SetResult( KErrGeneral, KDescription ); + } + + CleanupStack::PopAndDestroy( item ); + + // Case was executed + return KErrNone; + } + + +/* + +------------------------------------------------------------------------------- + + Class: CFavouritesEngineTest + Method: ItemSetUrlLTestL Description: Test setting the item's url using the SetUrlL method. @@ -1334,6 +1948,114 @@ return KErrNone; } + +/* +------------------------------------------------------------------------------- + + Class: CFavouritesEngineTest + + Method: ItemSetUserNameMaxLengthLTestL + + Description: Test setting the item's user name using the SetUserNameL method. + + Parameters: TTestResult& aErrorDescription: out: + Test result and on error case a short description of error + + Return Values: TInt: Always KErrNone to indicate that test was valid + + Errors/Exceptions: None + + Status: Approved + +------------------------------------------------------------------------------- +*/ +TInt CFavouritesEngineTest::ItemSetUserNameMaxLengthLTestL( TTestResult& aResult ) + { + /* Simple server connect */ + _LIT( KDefinition ,"State"); + _LIT( KData ,"Setting the item's user name with SetUserNameL method"); + TestModuleIf().Printf( 0, KDefinition, KData ); + + CFavouritesItem* item = CFavouritesItem::NewLC(); + // TInt err; + + TRAPD(err, item->SetUserNameL( _L("New User name longer than allowed by the limit of KFavouritesMaxUserName which is 40 chars at this moment") )); + + _LIT( KData2 ,"Finished"); + TestModuleIf().Printf( 0, KDefinition, KData2 ); + + if (err==KErrOverflow) + { + _LIT( KDescription , "Test case passed"); + aResult.SetResult( KErrNone, KDescription ); + } + else + { + _LIT( KDescription , "Test case failed"); + aResult.SetResult( KErrGeneral, KDescription ); + } + + CleanupStack::PopAndDestroy( item ); + + // Case was executed + return KErrNone; + } + + +/* +------------------------------------------------------------------------------- + + Class: CFavouritesEngineTest + + Method: ItemSetUserNameTruncateLengthLTestL + + Description: Test setting the item's user name using the SetUserNameL method. + + Parameters: TTestResult& aErrorDescription: out: + Test result and on error case a short description of error + + Return Values: TInt: Always KErrNone to indicate that test was valid + + Errors/Exceptions: None + + Status: Approved + +------------------------------------------------------------------------------- +*/ +TInt CFavouritesEngineTest::ItemSetUserNameTruncateLengthLTestL( TTestResult& aResult ) + { + /* Simple server connect */ + _LIT( KDefinition ,"State"); + _LIT( KData ,"Setting the item's user name with SetUserNameL method"); + TestModuleIf().Printf( 0, KDefinition, KData ); + + CFavouritesItem* item = CFavouritesItem::NewLC(); + TInt truncLength; + + TRAPD(err, item->SetUserNameL( _L("New User name longer than allowed by the limit of KFavouritesMaxUserName which is 40 chars at this moment") )); + + _LIT( KData2 ,"Finished"); + TestModuleIf().Printf( 0, KDefinition, KData2 ); + truncLength = item->UserName().Length(); + + if ((truncLength==KFavouritesMaxUserName)&& (err==KErrOverflow)) + { + _LIT( KDescription , "Test case passed"); + aResult.SetResult( KErrNone, KDescription ); + } + else + { + _LIT( KDescription , "Test case failed"); + aResult.SetResult( KErrGeneral, KDescription ); + } + + CleanupStack::PopAndDestroy( item ); + + // Case was executed + return KErrNone; + } + + /* ------------------------------------------------------------------------------- @@ -1436,6 +2158,109 @@ return KErrNone; } +/* +------------------------------------------------------------------------------- + + Class: CFavouritesEngineTest + + Method: ItemIsHiddenTestL + + Description: Test if the item is hidden using the IsHidden method. + + Parameters: TTestResult& aErrorDescription: out: + Test result and on error case a short description of error + + Return Values: TInt: Always KErrNone to indicate that test was valid + + Errors/Exceptions: None + + Status: Approved + +------------------------------------------------------------------------------- +*/ + +TInt CFavouritesEngineTest::ItemIsHiddenTestL( TTestResult& aResult ) + { + /* Simple server connect */ + _LIT( KDefinition ,"State"); + _LIT( KData ,"Checking if the item is hidden item with IsHidden method"); + TestModuleIf().Printf( 0, KDefinition, KData ); + + CFavouritesItem* item = CFavouritesItem::NewLC(); + + TBool itemIsHidden = item->IsHidden(); + + _LIT( KData2 ,"Finished"); + TestModuleIf().Printf( 0, KDefinition, KData2 ); + + if (!itemIsHidden) + { + _LIT( KDescription , "Test case passed"); + aResult.SetResult( KErrNone, KDescription ); + } + else + { + _LIT( KDescription , "Test case failed"); + aResult.SetResult( KErrGeneral, KDescription ); + } + + CleanupStack::PopAndDestroy( item ); + + // Case was executed + return KErrNone; + } + +/* +------------------------------------------------------------------------------- + + Class: CFavouritesEngineTest + + Method: ItemSetHiddenTestL + + Description: Test setting the item's hidden value using the SetHidden method. + + Parameters: TTestResult& aErrorDescription: out: + Test result and on error case a short description of error + + Return Values: TInt: Always KErrNone to indicate that test was valid + + Errors/Exceptions: None + + Status: Approved + +------------------------------------------------------------------------------- +*/ +TInt CFavouritesEngineTest::ItemSetHiddenTestL( TTestResult& aResult ) + { + /* Simple server connect */ + _LIT( KDefinition ,"State"); + _LIT( KData ,"Setting the item's hidden value with SetHidden method"); + TestModuleIf().Printf( 0, KDefinition, KData ); + + CFavouritesItem* item = CFavouritesItem::NewLC(); + + item->SetHidden(1); + + _LIT( KData2 ,"Finished"); + TestModuleIf().Printf( 0, KDefinition, KData2 ); + + if (item->IsHidden() == 1) + { + _LIT( KDescription , "Test case passed"); + aResult.SetResult( KErrNone, KDescription ); + } + else + { + _LIT( KDescription , "Test case failed"); + aResult.SetResult( KErrGeneral, KDescription ); + } + + CleanupStack::PopAndDestroy( item ); + + // Case was executed + return KErrNone; + } + // ================= OTHER EXPORTED FUNCTIONS ================================= // End of File diff -r c8a366e56285 -r 60c5402cb945 web_pub/favourites_engine_api/tsrc/src/FavouritesWapApTestCases.cpp --- a/web_pub/favourites_engine_api/tsrc/src/FavouritesWapApTestCases.cpp Thu Sep 24 12:53:48 2009 +0300 +++ b/web_pub/favourites_engine_api/tsrc/src/FavouritesWapApTestCases.cpp Mon Oct 26 08:28:45 2009 +0200 @@ -1,23 +1,26 @@ /* -* Copyright (c) 2002 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". +* ============================================================================ +* Name: FavouritesWapApTestCases.cpp +* Part of: FavouritesEngineTest class member functions +* +* Description: +* +* Version: 0.5 * -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: +* Copyright (C) 2002 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. * -* Description: -* -* +* ============================================================================ */ - // INCLUDE FILES #include #include "FavouritesEngineTest.h" @@ -151,6 +154,58 @@ return KErrNone; } + +/* +------------------------------------------------------------------------------- + + Class: CFavouritesEngineTest + + Method: WapApAssignSelfWithApTest + + Description: Test the WapAp assign(=) operater using a WapAp as the argument. + + Parameters: TTestResult& aErrorDescription: out: + Test result and on error case a short description of error + + Return Values: TInt: Always KErrNone to indicate that test was valid + + Errors/Exceptions: None + + Status: Approved + +------------------------------------------------------------------------------- +*/ +TInt CFavouritesEngineTest::WapApAssignSelfWithApTest( TTestResult& aResult ) + { + /* Simple server connect */ + _LIT( KDefinition ,"State"); + _LIT( KData ,"Test the WapAp assign(=) operater using the same WapAp as the argument"); + TestModuleIf().Printf( 0, KDefinition, KData ); + + TFavouritesWapAp accessPoint1, accessPoint2; + + accessPoint1 = 222; + + accessPoint1 = accessPoint1; + + _LIT( KData2 ,"Finished" ); + TestModuleIf().Printf( 0, KDefinition, KData2 ); + + if(accessPoint1.ApId() == 222) + { + _LIT( KDescription , "Test case passed"); + aResult.SetResult( KErrNone, KDescription ); + } + else + { + _LIT( KDescription , "Test case failed"); + aResult.SetResult( KErrGeneral, KDescription ); + } + + // Case was executed + return KErrNone; + } + /* ------------------------------------------------------------------------------- diff -r c8a366e56285 -r 60c5402cb945 web_pub/settings_api/inc/BrowserUiSDKCRKeys.h --- a/web_pub/settings_api/inc/BrowserUiSDKCRKeys.h Thu Sep 24 12:53:48 2009 +0300 +++ b/web_pub/settings_api/inc/BrowserUiSDKCRKeys.h Mon Oct 26 08:28:45 2009 +0200 @@ -406,4 +406,8 @@ // Cursormode which defines the cursor display supported status depends on phones. const TUint32 KBrowserCursorShowMode = 0x00000082; + +// Controls whether enter key can activate a link, ot just has a default behavior. +const TUint32 KBrowserEnterKeyMode = 0x00000083; + #endif // BROWSERUISDKCRKEYS_H \ No newline at end of file diff -r c8a366e56285 -r 60c5402cb945 webengine/device/inc/Device.h --- a/webengine/device/inc/Device.h Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/device/inc/Device.h Mon Oct 26 08:28:45 2009 +0200 @@ -59,10 +59,8 @@ public: DevicePrivate(Device* jsobj); ~DevicePrivate(); - void SetUid( const TUint& aValue); private: - MDeviceBinding* m_deviceBinding; // Owned Identifier m_propName; ExecState* m_exec; // not owned Device* m_jsobj; // not owned @@ -162,6 +160,7 @@ private: DevicePrivate* m_privateData; // private object to hold data + MDeviceBinding* m_deviceBinding; // Owned TBool m_valid; // object is valid or not }; diff -r c8a366e56285 -r 60c5402cb945 webengine/device/src/Device.cpp --- a/webengine/device/src/Device.cpp Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/device/src/Device.cpp Mon Oct 26 08:28:45 2009 +0200 @@ -49,14 +49,18 @@ Device::Device( ExecState* exec ) : JSObject() { - m_privateData = new DevicePrivate(this); - if (!m_privateData || !m_privateData->m_deviceBinding ) - m_valid = EFalse; - else - m_valid = ETrue; + m_valid = EFalse; + TRAP_IGNORE( + m_deviceBinding = CDeviceLiwBinding::NewL(); + ) + if (m_deviceBinding) + { + m_privateData = new DevicePrivate(this); + if (m_privateData) + m_valid = ETrue; + } } - // ---------------------------------------------------------------------------- // Device::SetUid // @@ -64,8 +68,8 @@ // void Device::SetUid( const TUint& aValue) { - if(m_privateData) - m_privateData->SetUid( aValue); + if(m_deviceBinding) + m_deviceBinding->SetUid( aValue); } // ---------------------------------------------------------------------------- @@ -81,6 +85,8 @@ m_valid = EFalse; delete m_privateData; m_privateData = NULL; + delete m_deviceBinding; + m_deviceBinding = NULL; } @@ -141,7 +147,7 @@ { case getServiceObject: case listProviders: - return new DeviceFunc( exec, m_privateData->m_deviceBinding, token ); + return new DeviceFunc( exec, m_deviceBinding, token ); default: return throwError(exec, GeneralError); @@ -222,11 +228,8 @@ // --------------------------------------------------------------------------- DevicePrivate::DevicePrivate( Device* jsobj ) { - m_deviceBinding = NULL; - TRAP_IGNORE( - m_deviceBinding = CDeviceLiwBinding::NewL(); - m_jsobj = jsobj; - m_exec = NULL;) + m_jsobj = jsobj; + m_exec = NULL; } // --------------------------------------------------------------------------- @@ -238,19 +241,6 @@ // invalid the Device if (m_jsobj) m_jsobj->m_valid = EFalse; - - delete m_deviceBinding; - m_deviceBinding = NULL; - } - -// --------------------------------------------------------------------------- -// DevicePrivate SetUid -// -// --------------------------------------------------------------------------- -void DevicePrivate::SetUid( const TUint& aValue) - { - if(m_deviceBinding) - m_deviceBinding->SetUid( aValue); } // ---------------------------------------------------------------------------- @@ -338,7 +328,7 @@ MDeviceBinding* Device::GetDeviceBinding() { - return m_privateData->m_deviceBinding; + return m_deviceBinding; } //END OF FILE diff -r c8a366e56285 -r 60c5402cb945 webengine/osswebengine/JavaScriptCore/bindings/c/c_utility.cpp --- a/webengine/osswebengine/JavaScriptCore/bindings/c/c_utility.cpp Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/osswebengine/JavaScriptCore/bindings/c/c_utility.cpp Mon Oct 26 08:28:45 2009 +0200 @@ -39,6 +39,8 @@ #include "Platform.h" #if USE(ICU_UNICODE) && !USE(SYMBIAN_UNICODE) #include +#elif PLATFORM(SYMBIAN) +#include #endif namespace KJS { namespace Bindings { @@ -88,22 +90,34 @@ (*UTF16Chars)[i] = UTF8Chars[i] & 0xFF; } #elif PLATFORM(SYMBIAN) -// fixme: this needs to be a little bit more sophisticated if (UTF8Length == -1) UTF8Length = strlen(UTF8Chars); - *UTF16Length = UTF8Length; - - *UTF16Chars = (NPUTF16 *)malloc(sizeof(NPUTF16) * (*UTF16Length)); + *UTF16Length = 0; + *UTF16Chars = 0; - for (unsigned i = 0; i < *UTF16Length; i++) - (*UTF16Chars)[i] = UTF8Chars[i] & 0xFF; - + TPtrC8 buf8((TUint8*) UTF8Chars, UTF8Length); + HBufC *hbuf16 = HBufC::New(UTF8Length+1); + if (!hbuf16) + return; + TPtr16 buf16 = hbuf16->Des(); + CnvUtfConverter::ConvertToUnicodeFromUtf8(buf16, buf8); + *UTF16Chars = new NPUTF16[buf16.Length()+1]; + if (!(*UTF16Chars)) { + delete hbuf16; + return; + } + memcpy((void*)*UTF16Chars, (const char*)(buf16.Ptr()), buf16.Size()); + *UTF16Length = buf16.Length(); + (*UTF16Chars)[(*UTF16Length)] = 0; + delete hbuf16; #else assert(!"Implement me!"); #endif } + + // Variant value must be released with NPReleaseVariantValue() void convertValueToNPVariant(ExecState *exec, JSValue *value, NPVariant *result) { diff -r c8a366e56285 -r 60c5402cb945 webengine/osswebengine/WebCore/dom/Document.cpp --- a/webengine/osswebengine/WebCore/dom/Document.cpp Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/osswebengine/WebCore/dom/Document.cpp Mon Oct 26 08:28:45 2009 +0200 @@ -3520,6 +3520,12 @@ void Document::finishedParsing() { setParsing(false); + if (this->hasListenerType(DOMCONTENTLOADED_LISTENER)) + { + ExceptionCode ec = 0; + dispatchEvent(new MutationEvent(DOMContentLoadedEvent, false, false, + this, String(), String(), String(), 0), ec); + } if (Frame* f = frame()) f->loader()->finishedParsing(); } diff -r c8a366e56285 -r 60c5402cb945 webengine/osswebengine/WebCore/dom/Document.h --- a/webengine/osswebengine/WebCore/dom/Document.h Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/osswebengine/WebCore/dom/Document.h Mon Oct 26 08:28:45 2009 +0200 @@ -480,7 +480,8 @@ DOMNODEINSERTEDINTODOCUMENT_LISTENER = 0x10, DOMATTRMODIFIED_LISTENER = 0x20, DOMCHARACTERDATAMODIFIED_LISTENER = 0x40, - OVERFLOWCHANGED_LISTENER = 0x80 + OVERFLOWCHANGED_LISTENER = 0x80, + DOMCONTENTLOADED_LISTENER = 0x90 }; bool hasListenerType(ListenerType listenerType) const { return (m_listenerTypes & listenerType); } diff -r c8a366e56285 -r 60c5402cb945 webengine/osswebengine/WebCore/dom/EventNames.h --- a/webengine/osswebengine/WebCore/dom/EventNames.h Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/osswebengine/WebCore/dom/EventNames.h Mon Oct 26 08:28:45 2009 +0200 @@ -86,6 +86,7 @@ macro(DOMNodeRemoved) \ macro(DOMNodeRemovedFromDocument) \ macro(DOMSubtreeModified) \ + macro(DOMContentLoaded)\ \ macro(webkitBeforeTextInserted) \ macro(webkitEditableContentChanged) \ diff -r c8a366e56285 -r 60c5402cb945 webengine/osswebengine/WebCore/dom/EventTargetNode.cpp --- a/webengine/osswebengine/WebCore/dom/EventTargetNode.cpp Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/osswebengine/WebCore/dom/EventTargetNode.cpp Mon Oct 26 08:28:45 2009 +0200 @@ -108,6 +108,8 @@ type = Document::DOMCHARACTERDATAMODIFIED_LISTENER; else if (eventType == overflowchangedEvent) type = Document::OVERFLOWCHANGED_LISTENER; + else if (eventType == DOMContentLoadedEvent) + type = Document::DOMCONTENTLOADED_LISTENER; if (type) document()->addListenerType(type); diff -r c8a366e56285 -r 60c5402cb945 webengine/osswebengine/WebCore/html/HTMLAnchorElement.cpp --- a/webengine/osswebengine/WebCore/html/HTMLAnchorElement.cpp Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/osswebengine/WebCore/html/HTMLAnchorElement.cpp Mon Oct 26 08:28:45 2009 +0200 @@ -137,15 +137,22 @@ // when pressing Enter in the combo. if (m_isLink && (evt->type() == clickEvent || (evt->type() == keydownEvent && m_focused))) { MouseEvent* e = 0; - if (evt->type() == clickEvent && evt->isMouseEvent()) - -#if PLATFORM(SYMBIAN) + + +#if PLATFORM(SYMBIAN) + if (evt->type() == clickEvent && evt->isMouseEvent()) { + e = static_cast(evt); + if (m_soundstart) { m_soundstart->OnClick(document()->frame()); } + } +#else + if (evt->type() == clickEvent && evt->isMouseEvent()) + e = static_cast(evt); #endif - e = static_cast(evt); + KeyboardEvent* k = 0; if (evt->type() == keydownEvent && evt->isKeyboardEvent()) diff -r c8a366e56285 -r 60c5402cb945 webengine/osswebengine/WebCore/page/ChromeClient.h --- a/webengine/osswebengine/WebCore/page/ChromeClient.h Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/osswebengine/WebCore/page/ChromeClient.h Mon Oct 26 08:28:45 2009 +0200 @@ -107,6 +107,8 @@ #if PLATFORM(SYMBIAN) virtual void setElementVisibilityChanged(bool visibility) = 0; virtual bool elementVisibilityChanged() = 0; + virtual bool elementVisibilityChangedByMouse() = 0; + virtual bool elementVisibilityChangedByKey() = 0; virtual void focusedElementChanged(Element*) = 0; #endif }; diff -r c8a366e56285 -r 60c5402cb945 webengine/osswebengine/WebCore/page/symbian/WebCoreFrameBridge.cpp --- a/webengine/osswebengine/WebCore/page/symbian/WebCoreFrameBridge.cpp Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/osswebengine/WebCore/page/symbian/WebCoreFrameBridge.cpp Mon Oct 26 08:28:45 2009 +0200 @@ -325,7 +325,7 @@ } } -bool WebCoreFrameBridge::getTypeFromElement(Node* node, TBrCtlDefs::TBrCtlElementType& aElType, TRect& aFocusRect) const +bool WebCoreFrameBridge::getTypeFromElement(Node* node, TBrCtlDefs::TBrCtlElementType& aElType, TRect& aFocusRect, Node*& aRNode) const { if(node && m_frame) { @@ -335,6 +335,7 @@ if( n->isFocusable() ) { aElType = nodeTypeB(n, m_frame); aFocusRect = n->getRect(); + aRNode = n; return true; } else { @@ -347,6 +348,7 @@ || etn->getHTMLEventListener(mouseupEvent)) ) { aFocusRect = n->getRect(); aElType = TBrCtlDefs::EElementMouseButtonListener; + aRNode = n; return true; } else if (n->isElementNode() && n->hasTagName(areaTag)) { @@ -354,6 +356,7 @@ if(!e->getAttribute(hrefAttr).isNull()) { aElType = TBrCtlDefs::EElementAreaBox; aFocusRect = n->getRect(); + aRNode = n; return true; } } @@ -366,6 +369,7 @@ if(!ep->getAttribute(hrefAttr).isNull()) { aElType = nodeTypeB(np, m_frame); aFocusRect = np->getRect(); + aRNode = np; return true; } } @@ -386,6 +390,7 @@ } } aFocusRect = n->getRect().Rect(); + aRNode = n; return true; } else if (n->renderer() && n->renderer()->layer()) { diff -r c8a366e56285 -r 60c5402cb945 webengine/osswebengine/WebCore/page/symbian/WebCoreFrameBridge.h --- a/webengine/osswebengine/WebCore/page/symbian/WebCoreFrameBridge.h Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/osswebengine/WebCore/page/symbian/WebCoreFrameBridge.h Mon Oct 26 08:28:45 2009 +0200 @@ -87,7 +87,7 @@ void updateThumbnail(); Vector* focusableRectList() { return &m_focusableNodeList; } bool searchFor(TPtrC string, bool forward, bool caseSensitive, bool wrapFlag, bool startInSelection); - bool getTypeFromElement(WebCore::Node* node, TBrCtlDefs::TBrCtlElementType& aElType, TRect& aFocusRect) const; + bool getTypeFromElement(WebCore::Node* node, TBrCtlDefs::TBrCtlElementType& aElType, TRect& aFocusRect, WebCore::Node*& aRNode) const; virtual ~WebCoreFrameBridge(); diff -r c8a366e56285 -r 60c5402cb945 webengine/osswebengine/WebCore/platform/StringImpl.cpp --- a/webengine/osswebengine/WebCore/platform/StringImpl.cpp Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/osswebengine/WebCore/platform/StringImpl.cpp Mon Oct 26 08:28:45 2009 +0200 @@ -491,14 +491,13 @@ #if PLATFORM(SYMBIAN) -StringImpl* StringImpl::secureShowLast(UChar aChar) const +StringImpl* StringImpl::secureShowOffset(UChar aChar, unsigned offset) const { StringImpl* temp = secure(aChar); if (m_data && temp) { - temp->remove(m_length-1); - temp->insert(&(m_data[m_length-1]), 1, m_length-1); + temp->remove(offset); + temp->insert(&(m_data[offset]), 1, offset); } - return temp; } diff -r c8a366e56285 -r 60c5402cb945 webengine/osswebengine/WebCore/platform/StringImpl.h --- a/webengine/osswebengine/WebCore/platform/StringImpl.h Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/osswebengine/WebCore/platform/StringImpl.h Mon Oct 26 08:28:45 2009 +0200 @@ -151,7 +151,7 @@ StringImpl(const TDesC&); StringImpl(const TDesC8&); TPtrC des() const; - StringImpl* secureShowLast(UChar aChar) const; + StringImpl* secureShowOffset(UChar aChar, unsigned offset) const; #endif StringImpl(const DeprecatedString&); diff -r c8a366e56285 -r 60c5402cb945 webengine/osswebengine/WebCore/platform/Widget.h --- a/webengine/osswebengine/WebCore/platform/Widget.h Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/osswebengine/WebCore/platform/Widget.h Mon Oct 26 08:28:45 2009 +0200 @@ -118,9 +118,12 @@ // e.g., in overflow:auto sections. The clip rects coordinates are in the containing window's coordinate space. // This clip includes any clips that the widget itself sets up for its children. virtual IntRect windowClipRect() const; - +#if PLATFORM(SYMBIAN) + virtual void handleEvent(Event* event); +#else virtual void handleEvent(Event*) { } - +#endif + #if PLATFORM(WIN) void setContainingWindow(HWND); HWND containingWindow() const; diff -r c8a366e56285 -r 60c5402cb945 webengine/osswebengine/WebCore/platform/network/symbian/HttpSessionManager.cpp --- a/webengine/osswebengine/WebCore/platform/network/symbian/HttpSessionManager.cpp Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/osswebengine/WebCore/platform/network/symbian/HttpSessionManager.cpp Mon Oct 26 08:28:45 2009 +0200 @@ -98,7 +98,12 @@ RStringF maxToPipeline = strP.StringF(HTTP::EMaxNumTransactionsToPipeline, stringTable ); connInfo.SetPropertyL( maxToPipeline, THTTPHdrVal( KHttpMaxTransactionNumPerConnection ) ); - + +#ifdef BRDO_HTTP_STACK_93 + // Set optimal pipelining + RStringF strOptimalPipelineVal = strP.StringF(HTTP::EHttpEnableOptimalPipelining, RHTTPSession::GetTable()); + connInfo.SetPropertyL(strP.StringF(HTTP::EHttpOptimalPipelining, RHTTPSession::GetTable()), strOptimalPipelineVal); +#endif //set HTTP receive Buffer Size property RStringF receiveBuffSize = strP.StringF(HTTP::ERecvBufferSize, stringTable ); connInfo.SetPropertyL( receiveBuffSize, THTTPHdrVal(KHttpReceiveBuffSize)); diff -r c8a366e56285 -r 60c5402cb945 webengine/osswebengine/WebCore/platform/symbian/OOMHandler.h --- a/webengine/osswebengine/WebCore/platform/symbian/OOMHandler.h Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/osswebengine/WebCore/platform/symbian/OOMHandler.h Mon Oct 26 08:28:45 2009 +0200 @@ -1,21 +1,45 @@ /* -* 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". +* ============================================================================== +* Name : OOMHandler.h +* Part of : Webcore / Platform +* Interface : +* Description : +* Version : %Version% +* +* Copyright (c) 2006, Nokia Corporation +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: * -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in +* the documentation and/or other materials provided with the +* distribution. +* * Neither the name of the Nokia Corporation nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. * -* Description: +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH +* DAMAGE. * +* +* ============================================================================== */ - #ifndef __OOMHANDLER_H__ #define __OOMHANDLER_H__ diff -r c8a366e56285 -r 60c5402cb945 webengine/osswebengine/WebCore/platform/symbian/OOMStopper.h --- a/webengine/osswebengine/WebCore/platform/symbian/OOMStopper.h Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/osswebengine/WebCore/platform/symbian/OOMStopper.h Mon Oct 26 08:28:45 2009 +0200 @@ -1,21 +1,45 @@ /* -* 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". +* ============================================================================== +* Name : OOMHandler.h +* Part of : Webcore / Platform +* Interface : +* Description : +* Version : %Version% +* +* Copyright (c) 2006, Nokia Corporation +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: * -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in +* the documentation and/or other materials provided with the +* distribution. +* * Neither the name of the Nokia Corporation nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. * -* Description: +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH +* DAMAGE. * +* +* ============================================================================== */ - #ifndef __OOMSTOPPER_H__ #define __OOMSTOPPER_H__ diff -r c8a366e56285 -r 60c5402cb945 webengine/osswebengine/WebCore/platform/symbian/ScrollViewSymbian.cpp --- a/webengine/osswebengine/WebCore/platform/symbian/ScrollViewSymbian.cpp Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/osswebengine/WebCore/platform/symbian/ScrollViewSymbian.cpp Mon Oct 26 08:28:45 2009 +0200 @@ -278,9 +278,13 @@ } } -void ScrollView::removeChild(Widget*) +void ScrollView::removeChild(Widget* child) { //child->removeFromSuperview(); + if(child) + { + child->hide(); + } } void ScrollView::resizeContents(int w, int h) diff -r c8a366e56285 -r 60c5402cb945 webengine/osswebengine/WebCore/platform/symbian/WidgetSymbian.cpp --- a/webengine/osswebengine/WebCore/platform/symbian/WidgetSymbian.cpp Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/osswebengine/WebCore/platform/symbian/WidgetSymbian.cpp Mon Oct 26 08:28:45 2009 +0200 @@ -24,9 +24,12 @@ #include "IntRect.h" #include "IntPoint.h" #include "Cursor.h" +#include "Event.h" +#include "EventNames.h" +#include "KeyboardEvent.h" namespace WebCore { - +using namespace EventNames; static bool deferFirstResponderChanges; static Widget *deferredFirstResponder; @@ -239,4 +242,18 @@ return getView()->isFocusable(); return false; } + +void Widget::handleEvent(Event* event) +{ + if (event->type() == keydownEvent && event->isKeyboardEvent()) { + KeyboardEvent* kevt = static_cast(event); + if (kevt->keyIdentifier() == "Enter") { + MWebCoreWidget* view = getView(); + if(view && view->isObjectView()) { + view->activate(); + } + } + } } + +} diff -r c8a366e56285 -r 60c5402cb945 webengine/osswebengine/WebCore/platform/symbian/bitmap/AnimationDecoder.cpp --- a/webengine/osswebengine/WebCore/platform/symbian/bitmap/AnimationDecoder.cpp Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/osswebengine/WebCore/platform/symbian/bitmap/AnimationDecoder.cpp Mon Oct 26 08:28:45 2009 +0200 @@ -1,21 +1,38 @@ /* -* 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". +* ============================================================================== +* Copyright (c) 2006, Nokia Corporation +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: * -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in +* the documentation and/or other materials provided with the +* distribution. +* * Neither the name of the Nokia Corporation nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. * -* Description: +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH +* DAMAGE. * +* ============================================================================== */ - /* * This class is a proxy for CAnimationDecoderWrapped * diff -r c8a366e56285 -r 60c5402cb945 webengine/osswebengine/WebCore/platform/symbian/bitmap/AnimationDecoder.h --- a/webengine/osswebengine/WebCore/platform/symbian/bitmap/AnimationDecoder.h Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/osswebengine/WebCore/platform/symbian/bitmap/AnimationDecoder.h Mon Oct 26 08:28:45 2009 +0200 @@ -1,21 +1,38 @@ /* -* 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". +* ============================================================================== +* Copyright (c) 2006, Nokia Corporation +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: * -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in +* the documentation and/or other materials provided with the +* distribution. +* * Neither the name of the Nokia Corporation nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. * -* Description: +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH +* DAMAGE. * +* ============================================================================== */ - #ifndef ANIMATIONDECODER_H #define ANIMATIONDECODER_H diff -r c8a366e56285 -r 60c5402cb945 webengine/osswebengine/WebCore/platform/symbian/bitmap/AnimationDecoderWrapped.cpp --- a/webengine/osswebengine/WebCore/platform/symbian/bitmap/AnimationDecoderWrapped.cpp Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/osswebengine/WebCore/platform/symbian/bitmap/AnimationDecoderWrapped.cpp Mon Oct 26 08:28:45 2009 +0200 @@ -1,21 +1,38 @@ /* -* 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". +* ============================================================================== +* Copyright (c) 2006, Nokia Corporation +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: * -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in +* the documentation and/or other materials provided with the +* distribution. +* * Neither the name of the Nokia Corporation nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. * -* Description: +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH +* DAMAGE. * +* ============================================================================== */ - /* * This class is wrapped by a proxy CAnimationDecoder * diff -r c8a366e56285 -r 60c5402cb945 webengine/osswebengine/WebCore/platform/symbian/bitmap/AnimationDecoderWrapped.h --- a/webengine/osswebengine/WebCore/platform/symbian/bitmap/AnimationDecoderWrapped.h Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/osswebengine/WebCore/platform/symbian/bitmap/AnimationDecoderWrapped.h Mon Oct 26 08:28:45 2009 +0200 @@ -1,21 +1,38 @@ /* -* 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". +* ============================================================================== +* Copyright (c) 2006, Nokia Corporation +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: * -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in +* the documentation and/or other materials provided with the +* distribution. +* * Neither the name of the Nokia Corporation nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. * -* Description: +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH +* DAMAGE. * +* ============================================================================== */ - /* * This class is wrapped by a proxy CAnimationDecoder * diff -r c8a366e56285 -r 60c5402cb945 webengine/osswebengine/WebCore/platform/symbian/bitmap/SyncDecodeThread.cpp --- a/webengine/osswebengine/WebCore/platform/symbian/bitmap/SyncDecodeThread.cpp Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/osswebengine/WebCore/platform/symbian/bitmap/SyncDecodeThread.cpp Mon Oct 26 08:28:45 2009 +0200 @@ -252,7 +252,8 @@ void CSynDecodeThread::ConstructL() { _LIT(KThreadName, "ImgDecoder"); - User::LeaveIfError(iDecoderThread.Create(KThreadName, CSynDecodeThread::ScaleInThread, KDefaultStackSize, KMinHeapSize, KMaxHeapSize, NULL)); + RAllocator &allocator = User::Allocator(); + User::LeaveIfError(iDecoderThread.Create(KThreadName, CSynDecodeThread::ScaleInThread, KDefaultStackSize, &allocator, NULL)); iDecoderThread.SetPriority(EPriorityMore); TRequestStatus status = KRequestPending; iDecoderThread.Rendezvous(status); diff -r c8a366e56285 -r 60c5402cb945 webengine/osswebengine/WebCore/rendering/RenderListBox.h --- a/webengine/osswebengine/WebCore/rendering/RenderListBox.h Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/osswebengine/WebCore/rendering/RenderListBox.h Mon Oct 26 08:28:45 2009 +0200 @@ -89,6 +89,7 @@ #if PLATFORM(SYMBIAN) IntRect itemRect(int tx, int ty, int index) { return itemBoundingBoxRect(tx, ty, index); } int indexOffset() {return m_indexOffset;} + int getSize() {return size();} #endif private: diff -r c8a366e56285 -r 60c5402cb945 webengine/osswebengine/WebCore/rendering/RenderText.cpp --- a/webengine/osswebengine/WebCore/rendering/RenderText.cpp Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/osswebengine/WebCore/rendering/RenderText.cpp Mon Oct 26 08:28:45 2009 +0200 @@ -831,6 +831,9 @@ } m_linesDirty = dirtiedLines; +#if PLATFORM(SYMBIAN) + m_offset = offset; +#endif setText(text, force, backspace); } @@ -921,19 +924,19 @@ case TSNONE: break; case TSCIRCLE: - m_text = m_text->secureShowLast(whiteBullet); + m_text = m_text->secureShowOffset(bullet, m_offset); break; case TSDISC: if(backspace){ m_text = m_text->secure(bullet); } else{ - m_text = m_text->secureShowLast(bullet); + m_text = m_text->secureShowOffset(bullet, m_offset); } break; case TSSQUARE: - m_text = m_text->secureShowLast(blackSquare); + m_text = m_text->secureShowOffset(blackSquare, m_offset); } if (style()->textSecurity() != TSNONE) { diff -r c8a366e56285 -r 60c5402cb945 webengine/osswebengine/WebCore/rendering/RenderText.h --- a/webengine/osswebengine/WebCore/rendering/RenderText.h Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/osswebengine/WebCore/rendering/RenderText.h Mon Oct 26 08:28:45 2009 +0200 @@ -174,7 +174,7 @@ void securityTimerFired(Timer*); Timer m_securityTimer; - + unsigned m_offset; #endif //PLATFORM(SYMBIAN) }; diff -r c8a366e56285 -r 60c5402cb945 webengine/osswebengine/WebKit/s60/group/JavaScriptCore/JavaScriptCore.mmp --- a/webengine/osswebengine/WebKit/s60/group/JavaScriptCore/JavaScriptCore.mmp Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/osswebengine/WebKit/s60/group/JavaScriptCore/JavaScriptCore.mmp Mon Oct 26 08:28:45 2009 +0200 @@ -177,5 +177,6 @@ LIBRARY estlib.lib LIBRARY euser.lib LIBRARY memman.lib +LIBRARY charconv.lib diff -r c8a366e56285 -r 60c5402cb945 webengine/osswebengine/WebKit/s60/group/webcore/platform/platform.mmp --- a/webengine/osswebengine/WebKit/s60/group/webcore/platform/platform.mmp Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/osswebengine/WebKit/s60/group/webcore/platform/platform.mmp Mon Oct 26 08:28:45 2009 +0200 @@ -26,6 +26,8 @@ VENDORID VID_DEFAULT START RESOURCE ../../../data/webkit.rss +DEPENDS avkon.rsg +DEPENDS eikon.rsg HEADER TARGETPATH RESOURCE_FILES_DIR #ifdef __S60_32__ diff -r c8a366e56285 -r 60c5402cb945 webengine/osswebengine/WebKit/s60/misc/WebTabbedNavigation.cpp --- a/webengine/osswebengine/WebKit/s60/misc/WebTabbedNavigation.cpp Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/osswebengine/WebKit/s60/misc/WebTabbedNavigation.cpp Mon Oct 26 08:28:45 2009 +0200 @@ -81,14 +81,6 @@ void WebTabbedNavigation::updateCursorPosition(const TPoint& pos) { m_focusPosition = pos; - WebFrame* frame = StaticObjectsContainer::instance()->webCursor()->getFrameAtPoint(pos); - TPoint point(frame->frameView()->viewCoordsInFrameCoords(pos)); - - Element* node = core(frame)->document()->elementFromPoint(point.iX, point.iY); - if (node->isFocusable() && !node->hasTagName(iframeTag) && !node->hasTagName(frameTag)) - m_webView->page()->focusController()->setFocusedNode(node, core(frame)); - else - m_webView->page()->focusController()->setFocusedNode(NULL, core(frame)); m_selectedElementRect.SetRect(pos.iX, pos.iY, pos.iX + 1, pos.iY + 1); } @@ -101,88 +93,202 @@ m_focusPosition = StaticObjectsContainer::instance()->webCursor()->position(); } -bool WebTabbedNavigation::navigate(int horizontalDir, int verticalDir) + +void WebTabbedNavigation::resetNavigationIfNeeded(TPoint& contentPos, TSize& contentSize, + Frame* focusedFrame, int horizontalDir, int verticalDir) { - if (handleSelectElementScrolling(m_webView, verticalDir)) { - StaticObjectsContainer::instance()->webCursor()->cursorUpdate(true); - return true; - } - // DOM can be changed so check if we are still inside the document - // If not reset tabbed navigation parameters to the closest point in document. - TSize contentSize = m_webView->mainFrame()->frameView()->contentSize(); - TPoint contentPos = m_webView->mainFrame()->frameView()->contentPos(); - TRect docRect = TRect(contentPos, contentSize - contentPos); + TPoint docBrViewCoord = kit(focusedFrame)->frameView()->frameCoordsInViewCoords( + TPoint(contentSize.iWidth, contentSize.iHeight)); + TRect docRect = TRect(TPoint(0,0), docBrViewCoord); if (!docRect.Contains(m_focusPosition)) { TInt viewW = m_webView->Rect().Width(); TInt viewH = m_webView->Rect().Height(); - if (m_focusPosition.iX > contentSize.iWidth || - m_focusPosition.iX < contentPos.iX) { + if (m_focusPosition.iX > contentSize.iWidth) { m_focusPosition.iX = (horizontalDir == -1) ? contentPos.iX + viewW : contentPos.iX; } - if (m_focusPosition.iY > contentSize.iHeight || - m_focusPosition.iY < contentPos.iY) { + if (m_focusPosition.iY > contentSize.iHeight) { m_focusPosition.iY = (verticalDir == -1) ? contentPos.iY + viewH : contentPos.iY; } - - m_selectedElementRect.SetRect(m_focusPosition.iX, m_focusPosition.iY, m_focusPosition.iX, m_focusPosition.iY); + + m_selectedElementRect.SetRect(m_focusPosition.iX, m_focusPosition.iY, + m_focusPosition.iX, m_focusPosition.iY); m_node = NULL; } +} + + +TPoint WebTabbedNavigation::focusPointFromFocusedNode(Frame* frame, int horizontalDir, int verticalDir) +{ + TPoint oldFocusPoint(m_focusPosition); + TPoint focusPosition(m_focusPosition); + TRect selectedElementRect(m_selectedElementRect); - bool ret = m_firstNavigationOnPage; - Frame* focusedFrame = m_webView->page()->focusController()->focusedFrame(); - if (focusedFrame == NULL) focusedFrame = m_webView->page()->mainFrame(); - if (focusedFrame->document()) { - Node* focusNode = focusedFrame->document()->focusedNode(); - if (focusNode) { - m_node = focusNode; - m_selectedElementRect = focusNode->getRect().Rect(); - Frame* frame = focusNode->document()->frame(); - m_selectedElementRect = TRect(kit(frame)->frameView()->frameCoordsInViewCoords(m_selectedElementRect.iTl), - kit(frame)->frameView()->frameCoordsInViewCoords(m_selectedElementRect.iBr)); + if (frame->document()) { + Node* focusedNode = frame->document()->focusedNode(); + if (focusedNode) { + m_node = focusedNode; + selectedElementRect = focusedNode->getRect().Rect(); + Frame* frame = focusedNode->document()->frame(); + selectedElementRect = kit(frame)->frameView()->frameCoordsInViewCoords(selectedElementRect); + + // Move the focus to the visible edge of the current object + TRect elemVisibleRect = selectedElementRect; + if (elemVisibleRect.Intersects(m_webView->Rect())) { + + elemVisibleRect.Intersection(m_webView->Rect()); + if (horizontalDir == -1) { + focusPosition.iX = elemVisibleRect.iTl.iX; + } + else if (horizontalDir == 1) { + focusPosition.iX = elemVisibleRect.iBr.iX; + } + + if (verticalDir == -1) { + focusPosition.iY = elemVisibleRect.iTl.iY; + } + else if (verticalDir == 1) { + focusPosition.iY = elemVisibleRect.iBr.iY; + } + + if ((verticalDir == 0) && (horizontalDir == 0)) { + focusPosition = elemVisibleRect.Center(); + } + m_focusPosition = focusPosition; + } + m_selectedElementRect = selectedElementRect; } } - TPoint oldFocusPoint(m_focusPosition); - // Move the focus to the edge of the current object + return oldFocusPoint; +} + + +void WebTabbedNavigation::calcSearchViewRect(int horizontalDir, int verticalDir, TRect& view) +{ + + TPoint br; + TPoint viewBr = m_webView->Rect().iBr; + br.iX = viewBr.iX * KMaxJumpPercent / m_webView->scalingFactor(); + br.iY = viewBr.iY * KMaxJumpPercent / m_webView->scalingFactor(); + // define the view rect where we are looking for a match + int x, y; if (horizontalDir == -1) { - m_focusPosition.iX = m_selectedElementRect.iTl.iX; + view.SetRect(m_focusPosition.iX - br.iX, m_focusPosition.iY - br.iY, + m_focusPosition.iX , m_focusPosition.iY + br.iY); } else if (horizontalDir == 1) { - m_focusPosition.iX = m_selectedElementRect.iBr.iX; + view.SetRect(m_focusPosition.iX, m_focusPosition.iY - br.iY, + m_focusPosition.iX + br.iX, m_focusPosition.iY + br.iY); } - if (verticalDir == -1) { - m_focusPosition.iY = m_selectedElementRect.iTl.iY; + else if (verticalDir == -1) { + view.SetRect(m_focusPosition.iX - br.iX, m_focusPosition.iY - br.iY, + m_focusPosition.iX + br.iX, m_focusPosition.iY); } else if (verticalDir == 1) { - m_focusPosition.iY = m_selectedElementRect.iBr.iY; + view.SetRect(m_focusPosition.iX - br.iX, m_focusPosition.iY, + m_focusPosition.iX + br.iX, m_focusPosition.iY + br.iY); } - wkDebug()<<"WebTabbedNavigation::navigate. x = "<(e->renderer()); - HTMLSelectElement* selectElement = static_cast( e ); - IntRect itemRect = render->itemRect(0, 0, 0); - TPoint cursorPoint(StaticObjectsContainer::instance()->webCursor()->position()); - int gap = (20 * m_webView->scalingFactor()) / 100; - cursorPoint.iX = max(m_focusPosition.iX, m_selectedElementRect.iTl.iX + gap); - cursorPoint.iX = std::min(cursorPoint.iX, m_selectedElementRect.iBr.iX - gap); - if (verticalDir == -1) { - cursorPoint.iY -= (itemRect.height() * m_webView->scalingFactor()) / 125; - } - if (cursorPoint != StaticObjectsContainer::instance()->webCursor()->position()) { - StaticObjectsContainer::instance()->webCursor()->setPosition(cursorPoint); - } - } - } - } - TPointerEvent event; - event.iPosition = StaticObjectsContainer::instance()->webCursor()->position(); - event.iModifiers = 0; - event.iType = TPointerEvent::EMove; - core(m_webView->mainFrame())->eventHandler()->handleMouseMoveEvent(PlatformMouseEvent(event)); - wkDebug()<<"Focus position x = "<(e->renderer()); + HTMLSelectElement* selectElement = static_cast( e ); + TRect itemRect = render->itemRect(0, 0, render->indexOffset()).Rect(); + TRect itemRectViewCoord = fv->frameCoordsInViewCoords(itemRect); + itemRectViewCoord.Move(m_selectedElementRect.iTl); + itemRectViewCoord.Intersection(fv->topView()->Rect()); + + TPoint cursorPoint = itemRect.Center() + m_selectedElementRect.iTl; + if (cursorPoint != cursor->position()) { + cursor->setPosition(cursorPoint); } } } - StaticObjectsContainer::instance()->webCursor()->cursorUpdate(true); - return ret; } bool WebTabbedNavigation::selectNode(int horizontalDir, int verticalDir, TRect& selectedRect, TRect& newNodeRect, TPoint& selectedPoint, TPoint& newFocusPoint) @@ -308,7 +371,7 @@ } int selectedDist = distanceFunction(horizontalDir, verticalDir, selectedRect, selectedPoint); int newDist = distanceFunction(horizontalDir, verticalDir, newNodeRect, newFocusPoint); - wkDebug()<<"WebTabbedNavigation::selectNode. selected x = "<brCtl()->settings()->getNavigationType() == SettingsContainer::NavigationTypeCursor)) { + if (m_visible) { CFbsBitmap* img = NULL; CFbsBitmap* msk = NULL; switch( type ) @@ -264,19 +264,22 @@ { if (!m_view || !m_view->brCtl() || !m_view->brCtl()->settings()) return; + + bool tabbedNavigation = (m_view->brCtl()->settings()->getNavigationType() == SettingsContainer::NavigationTypeTabbed); + bool navigationNone = (m_view->brCtl()->settings()->getNavigationType() == SettingsContainer::NavigationTypeNone); + bool cursorNavigation = (m_view->brCtl()->settings()->getNavigationType() == SettingsContainer::NavigationTypeCursor); + TBrCtlDefs::TBrCtlElementType elType = m_view->focusedElementType(); //If cursor show mode defined inside cenrep key is no cursor shown in non-tab navigation mode, //then no need to update the cursor - if (m_view->brCtl()->settings()->getNavigationType() != SettingsContainer:: NavigationTypeTabbed && - (m_view->brCtl()->settings()->brctlSetting(TBrCtlDefs::ESettingsCursorShowMode) == TBrCtlDefs::ENoCursor)) + if (!tabbedNavigation && + (m_view->brCtl()->settings()->brctlSetting(TBrCtlDefs::ESettingsCursorShowMode) == TBrCtlDefs::ENoCursor)) return; - if ( m_view->showCursor() ) { - m_visible = visible && ((m_view->brCtl()->settings()->getNavigationType() == SettingsContainer::NavigationTypeCursor)|| m_view->focusedElementType() == TBrCtlDefs::EElementSelectMultiBox); // check for tabbedNavigation here because it is called from so many places. - } + + m_visible = visible && ((cursorNavigation && m_view->showCursor()) || + (tabbedNavigation && (elType == TBrCtlDefs::EElementSelectMultiBox))); resetTransparency(); - CursorTypes type = PointerCursor; - TBrCtlDefs::TBrCtlElementType elType = m_view->focusedElementType(); - + CursorTypes type = PointerCursor; if (m_visible) { if ( elType == TBrCtlDefs::EElementNone || elType == TBrCtlDefs::EElementImageBox @@ -285,7 +288,7 @@ else if ( elType == TBrCtlDefs::EElementSmartLinkTel || elType == TBrCtlDefs::EElementSmartLinkEmail ) type = IBeamCursor; - else if ( elType == TBrCtlDefs::EElementSelectMultiBox && m_view->brCtl()->settings()->getNavigationType() == SettingsContainer::NavigationTypeTabbed) + else if ( elType == TBrCtlDefs::EElementSelectMultiBox && tabbedNavigation) type = SelectMultiCursor; else type = HandCursor; @@ -364,9 +367,22 @@ { setTransparent(false); m_transtimer->Cancel(); - m_transtimer->Start(microsecs,0,TCallBack(TransparencyTimerCb,this)); + + if (m_visible) + { + m_transtimer->Start(microsecs,0,TCallBack(TransparencyTimerCb,this)); + } } +void WebCursor::stopTransparencyTimer() + { + if (m_transtimer && m_transtimer->IsActive()) + { + m_transtimer->Cancel(); + } + } + + // ----------------------------------------------------------------------------- // WebCursor::increaseTransparencyMoveCount // ----------------------------------------------------------------------------- @@ -503,14 +519,20 @@ pfRect = TRect(ppfv->frameCoordsInViewCoords(pfRect.iTl), ppfv->frameCoordsInViewCoords(pfRect.iBr)); } - + else { + pfRect.SetRect(0, 0, pfRect.iBr.iX * z / 100, pfRect.iBr.iY * z / 100); + } + WebFrameView* fv = frame->frameView(); TRect framerect = fv ->rect(); if (frame->parentFrame()) {// frame is not a main frame framerect = TRect(pfv->frameCoordsInViewCoords(framerect.iTl), pfv->frameCoordsInViewCoords(framerect.iBr)); } - + else { + framerect.SetRect(0, 0, framerect.iBr.iX * z / 100, framerect.iBr.iY * z / 100); + } + TRect pfInnerRect = pfRect; innerRect(pfInnerRect); TRect fInnerRect = framerect; @@ -776,6 +798,9 @@ if (m_view && navigableNodeUnderCursor(*frame, point, elType, r)) { m_view->setFocusedElementType(elType); } + else { + m_view->setFocusedElementType(TBrCtlDefs::EElementNone); + } } // ----------------------------------------------------------------------------- @@ -881,19 +906,19 @@ } -// ----------------------------------------------------------------------------- -// WebCursor::navigableNodeUnderCursor -// ----------------------------------------------------------------------------- -bool WebCursor::navigableNodeUnderCursor(WebFrame& webFrame, TPoint& aPoint, TBrCtlDefs::TBrCtlElementType& aElType, TRect& aFocusRect) const +bool WebCursor::navigableNodeUnderCursor(WebFrame& webFrame, TPoint& aPoint, TBrCtlDefs::TBrCtlElementType& aElType, TRect& aFocusRect) { Frame* coreFrame = core(&webFrame); if (!coreFrame->renderer() ) return false; Element* node = coreFrame->document()->elementFromPoint(aPoint.iX, aPoint.iY); - + m_elementUnderCursor = node; if (node) { - return coreFrame->bridge()->getTypeFromElement(node, aElType, aFocusRect); + Node* retNode = 0; + bool ret = coreFrame->bridge()->getTypeFromElement(node, aElType, aFocusRect, retNode); + m_elementUnderCursor = static_cast(retNode); + return ret; } return false; diff -r c8a366e56285 -r 60c5402cb945 webengine/osswebengine/WebKit/s60/webview/WebCursor.h --- a/webengine/osswebengine/WebKit/s60/webview/WebCursor.h Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/osswebengine/WebKit/s60/webview/WebCursor.h Mon Oct 26 08:28:45 2009 +0200 @@ -27,6 +27,7 @@ namespace WebCore { class IntRect; class IntPoint; + class Element; } #define KInitialOffset 5 @@ -68,10 +69,12 @@ void scrollAndMoveCursor(int dir, int scrollRange, bool auto); void simpleScroll(int dir, int scrollRange, bool auto=true); WebFrame* getFrameUnderCursor(); - bool navigableNodeUnderCursor(WebFrame& webFrame, TPoint& aPoint, TBrCtlDefs::TBrCtlElementType& aElType, TRect& aFocusRect) const; + bool navigableNodeUnderCursor(WebFrame& webFrame, TPoint& aPoint, TBrCtlDefs::TBrCtlElementType& aElType, TRect& aFocusRect); WebFrame* getFrameAtPoint(const TPoint& viewPos_); + WebCore::Element* getElementUnderCursor() {return m_elementUnderCursor;} + void stopTransparencyTimer(); - + private: void moveCursor(int lr,int tb, int scrollRange); bool determineCursorPosition(WebFrame& webFrame, TBrCtlDefs::TBrCtlElementType& aElType, TRect& aFocusRect, TRect& aSearchRect, @@ -118,6 +121,7 @@ CursorTypes m_type; int m_flipCounter; TPoint m_incrLimit; + WebCore::Element* m_elementUnderCursor; }; #endif diff -r c8a366e56285 -r 60c5402cb945 webengine/osswebengine/WebKit/s60/webview/WebFepTextEditor.cpp --- a/webengine/osswebengine/WebKit/s60/webview/WebFepTextEditor.cpp Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/osswebengine/WebKit/s60/webview/WebFepTextEditor.cpp Mon Oct 26 08:28:45 2009 +0200 @@ -398,32 +398,18 @@ // The other part of the rather hackish way to check if we are at the end of the editing field // see WebEditorClient::handleKeypress Frame* frame = m_webView->page()->focusController()->focusedOrMainFrame(); - if ( frame ) { - SelectionController* sc = frame->selectionController(); - Node* editNode = sc->base().node(); - if ( IsTextAreaFocused() ) { - while(editNode && !editNode->isTextNode()){ - editNode = editNode->previousSibling(); - } - TInt position( aCursorSelection.iAnchorPos ); - TInt offset( 0 ); - TInt extentoffset = 0; - if ( editNode ) { - editNode = findTextNodeForCurPos( editNode, position ); - if(aCursorSelection.iAnchorPos >= position) { - offset = aCursorSelection.iAnchorPos - position; - extentoffset = aCursorSelection.iCursorPos - position; - } - extentoffset = extentoffset < 0 ? 0 : extentoffset; - Position base( editNode, offset ); - Position extent(editNode,extentoffset); - sc->moveTo( base, extent, DOWNSTREAM ); - } + Node* focusedNode = frame->document()->focusedNode(); + if ( frame && focusedNode) { + TInt lowPos = aCursorSelection.LowerPos(); + TInt highPos = aCursorSelection.HigherPos(); + if (focusedNode->hasTagName(HTMLNames::textareaTag)) { + HTMLTextAreaElement* textArea = static_cast(focusedNode); + textArea->setSelectionRange(lowPos, highPos); } - else if ( editNode && editNode->isTextNode() ) { - Position base( sc->baseNode(), aCursorSelection.iAnchorPos ); - Position extent( sc->baseNode(), aCursorSelection.iCursorPos ); - sc->moveTo( base, extent, DOWNSTREAM ); + else if (focusedNode->hasTagName(HTMLNames::inputTag)) { + HTMLInputElement* inputElement = static_cast(focusedNode); + inputElement->setSelectionStart(lowPos); + inputElement->setSelectionEnd(highPos); } HandleUpdateCursor(); } @@ -439,27 +425,21 @@ aCursorSelection.SetSelection(0,0); Frame* frame = m_webView->page()->focusController()->focusedOrMainFrame(); - if ( frame ) { - SelectionController* sc = frame->selectionController(); - Node* editNode = sc->base().node(); - if ( frame && frame->document()->focusedNode() ) { - if ( IsTextAreaFocused() ) { - HTMLTextAreaElement* ie = static_cast(frame->document()->focusedNode()); - while(editNode && !editNode->isTextNode()) { - editNode = editNode->previousSibling(); - } - TInt len( 0 ); - if ( editNode ) { - findPrevSiblingTextLen( editNode, len ); - } - aCursorSelection.SetSelection( ((sc->baseOffset()+len > ie->value().length()) ? 0 : sc->baseOffset()+len), - ((sc->extentOffset()+len > ie->value().length()) ? 0 : sc->extentOffset()+len)); - } - else { - aCursorSelection.SetSelection(sc->baseOffset(), sc->extentOffset()); - } - } - } + Node* focusedNode = frame->document()->focusedNode(); + if (frame && focusedNode) { + if (focusedNode->hasTagName(HTMLNames::textareaTag)) { + HTMLTextAreaElement* textArea = static_cast(focusedNode); + TInt anchorPos = textArea->selectionStart(); + TInt cursorPos = textArea->selectionEnd(); + aCursorSelection.SetSelection(cursorPos, anchorPos); + } + else if (focusedNode->hasTagName(HTMLNames::inputTag)) { + HTMLInputElement* inputElement = static_cast(focusedNode); + TInt anchorPos = inputElement->selectionStart(); + TInt cursorPos = inputElement->selectionEnd(); + aCursorSelection.SetSelection(cursorPos, anchorPos); + } + } } // ----------------------------------------------------------------------------- diff -r c8a366e56285 -r 60c5402cb945 webengine/osswebengine/WebKit/s60/webview/WebFrame.cpp --- a/webengine/osswebengine/WebKit/s60/webview/WebFrame.cpp Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/osswebengine/WebKit/s60/webview/WebFrame.cpp Mon Oct 26 08:28:45 2009 +0200 @@ -347,8 +347,8 @@ WTF::Vector ch = childFrames(); WebFrame* frm = 0; // Check the children of the frame only if this frame also contains pt_ - // If a child iframe is bigger than the parent, it should not be picked. - if (m_view->rectInGlobalCoords().Contains(pt_)) { + // If a child iframe is bigger than the parent, it should not be picked. + if (m_view->isVisible() && m_view->rectInGlobalCoords().Contains(pt_)) { Vector::iterator end = ch.end(); for (Vector::iterator itr = ch.begin(); itr != end; itr++) { WebFrame* f = (*itr); diff -r c8a366e56285 -r 60c5402cb945 webengine/osswebengine/WebKit/s60/webview/WebFrameView.cpp --- a/webengine/osswebengine/WebKit/s60/webview/WebFrameView.cpp Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/osswebengine/WebKit/s60/webview/WebFrameView.cpp Mon Oct 26 08:28:45 2009 +0200 @@ -29,12 +29,17 @@ #include "PageScaler.h" #include "webkitlogger.h" #include "BrCtl.h" +#include "SettingsContainer.h" +#include "StaticObjectsContainer.h" +#include "WebTabbedNavigation.h" + using namespace WebCore; WebFrameView::WebFrameView() : m_parent(NULL), m_hasBorder(true), - m_refCount(1) + m_refCount(1), + m_isVisible(ETrue) { m_hScrollbar = new WebCore::PlatformScrollbar(this, WebCore::HorizontalScrollbar, WebCore::RegularScrollbar); m_vScrollbar = new WebCore::PlatformScrollbar(this, WebCore::VerticalScrollbar, WebCore::RegularScrollbar); @@ -323,7 +328,14 @@ //Update scroll bar , thumb position m_topView->updateScrollbars(m_contentSize.iHeight, m_contentPos.iY, m_contentSize.iWidth, m_contentPos.iX); - + + if (m_topView->brCtl()->settings()->getNavigationType() == SettingsContainer::NavigationTypeTabbed) { + int h = (to.iX - from.iX); + int v = (to.iY - from.iY); + h = (h != 0) ? ((h > 0) ? 1 : -1) : h; + v = (v != 0) ? ((v > 0) ? 1 : -1) : v; + m_topView->tabbedNavigation()->updateCursorPosAfterScroll(core(m_frame.get()), h, v); + } // trigger painting m_topView->syncRepaint(); } @@ -506,6 +518,13 @@ return pt; } +TRect WebFrameView::frameCoordsInViewCoords(const TRect &aRect) +{ + TSize s = aRect.Size(); + return TRect(frameCoordsInViewCoords(aRect.iTl), toViewCoords(s)); +} + + TRect WebFrameView::rectInGlobalCoords() const { TRect rect(toViewCoords(m_frameRect)); @@ -526,6 +545,7 @@ void WebFrameView::makeVisible(TBool aVisible) { + m_isVisible = aVisible; } TBool WebFrameView::isFocused() const @@ -535,7 +555,7 @@ TBool WebFrameView::isVisible() const { - return ETrue; + return m_isVisible; } TSize WebFrameView::contentSize() const diff -r c8a366e56285 -r 60c5402cb945 webengine/osswebengine/WebKit/s60/webview/WebFrameView.h --- a/webengine/osswebengine/WebKit/s60/webview/WebFrameView.h Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/osswebengine/WebKit/s60/webview/WebFrameView.h Mon Oct 26 08:28:45 2009 +0200 @@ -98,7 +98,8 @@ TPoint frameCoordsInViewCoords(const TPoint& aPoint); TPoint viewCoordsInFrameCoords(const TPoint& aPoint); TRect rectInGlobalCoords() const; - + TRect frameCoordsInViewCoords(const TRect &aRect); + void checkScrollbarVisibility(); int getBidiWidth(); bool needScroll(const TPoint& aPoint); @@ -125,6 +126,7 @@ bool m_resizeByEngine; int m_refCount; + TBool m_isVisible; }; #endif // END OF FILE diff -r c8a366e56285 -r 60c5402cb945 webengine/osswebengine/WebKit/s60/webview/WebPointerEventHandler.cpp --- a/webengine/osswebengine/WebKit/s60/webview/WebPointerEventHandler.cpp Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/osswebengine/WebKit/s60/webview/WebPointerEventHandler.cpp Mon Oct 26 08:28:45 2009 +0200 @@ -148,7 +148,9 @@ } } updateCursor(aEvent.CurrentPos()); - + if (IS_TABBED_NAVIGATION) { + m_webview->tabbedNavigation()->updateCursorPosition(m_highlightPos); + } switch (gtype) { // sent on touch down case EGestureStart: @@ -195,7 +197,7 @@ { m_ignoreTap = false; if (!IS_NAVIGATION_NONE) { - handleTouchUp(aEvent); + handleTouchUp(aEvent); } else { Frame* frm = m_webview->page()->focusController()->focusedOrMainFrame(); @@ -265,7 +267,7 @@ } if (!IS_NAVIGATION_NONE) { - m_webview->pageScrollHandler()->handleTouchDownGH(aEvent); + m_webview->pageScrollHandler()->handleTouchDownGH(aEvent); } if ( TBrCtlDefs::EElementActivatedObjectBox == elType) { @@ -305,7 +307,7 @@ PluginHandler* pluginHandler = WebCore::StaticObjectsContainer::instance()->pluginHandler(); pluginHandler->setPluginToActivate(NULL); if (!IS_NAVIGATION_NONE) { - m_webview->pageScrollHandler()->handleTouchUpGH(aEvent); + m_webview->pageScrollHandler()->handleTouchUpGH(aEvent); } } @@ -360,12 +362,6 @@ else if (aPointerEvent.iType == TPointerEvent::EButton1Up) { m_webview->GetContainerWindow().DisablePointerMoveBuffer(); } - - } - - - if (m_webview->brCtl()->settings()->getNavigationType() == SettingsContainer::NavigationTypeTabbed) { - m_webview->tabbedNavigation()->updateCursorPosition(aPointerEvent.iPosition); } #ifdef BRDO_USE_GESTURE_HELPER @@ -412,35 +408,31 @@ TBrCtlDefs::TBrCtlElementType elType = TBrCtlDefs::EElementNone; Frame* coreFrame = core(m_webview->mainFrame()); WebCursor* cursor = StaticObjectsContainer::instance()->webCursor(); - m_webview->page()->chrome()->client()->setElementVisibilityChanged(false); + TPointerEvent event; TPoint pos = cursor->position(); - IntPoint point(pos.iX, pos.iY); - HitTestResult htresult = coreFrame->eventHandler()->hitTestResultAtPoint(point, true); - Node* eventNode = htresult.innerNode(); - Frame* frm = eventNode->document()->frame(); - WebFrame* wfrm = kit(frm); + WebFrame* wfrm = cursor->getFrameAtPoint(pos); + Frame* frm = core(wfrm); TPoint pt(wfrm->frameView()->viewCoordsInFrameCoords(pos)); TPoint nodePoint; + Element* eventNode = frm->document()->elementFromPoint(pos.iX, pos.iY); + m_highlightedNode = NULL; - frm->bridge()->getTypeFromElement(eventNode, elType, elRect); + Node* retNode = 0; + frm->bridge()->getTypeFromElement(eventNode, elType, elRect, retNode); + if (elType == TBrCtlDefs::EElementNone) { - Node* n = wfrm->getClosestAnchorElement(cursor->position(), pos); - if (n) { - point.setX(pos.iX); - point.setY(pos.iY); - htresult = coreFrame->eventHandler()->hitTestResultAtPoint(point, true); - eventNode = htresult.innerNode(); - frm = eventNode->document()->frame(); - frm->bridge()->getTypeFromElement(eventNode, elType, elRect); + if (n) { + wfrm = cursor->getFrameAtPoint(pos); + frm = core(wfrm); + eventNode = frm->document()->elementFromPoint(pos.iX, pos.iY); + frm->bridge()->getTypeFromElement(eventNode, elType, elRect, retNode); TPoint nodePoint = n->getRect().Rect().Center(); m_offset = (pt.iX- nodePoint.iX)*(pt.iX- nodePoint.iX) + (pt.iY- nodePoint.iY)*(pt.iY- nodePoint.iY); - - } } m_highlightedNode = eventNode; @@ -493,13 +485,17 @@ } #endif // BRDO_TOUCH_ENABLED_FF - - // We assume that if element visibility has been changed - // between "up" and "down" that means that some node event - // listener (onMouseOver etc) handling happened and we don't - // want to send a click (mouse press + mouse release) event. - if (!IS_NAVIGATION_NONE && - m_webview->page()->chrome()->client()->elementVisibilityChanged()) { + /* + * We assume that if element visibility has been changed + * between "up" and "down" that means that some node event + * listener (onMouseOver etc) handling happened and we don't + * want to send a click (mouse press = mouse release) event. + * The exception is editable element, since we want VKB anyway + */ + if (!IS_NAVIGATION_NONE && + elType != TBrCtlDefs::EElementActivatedInputBox && + elType != TBrCtlDefs::EElementTextAreaBox && + m_webview->page()->chrome()->client()->elementVisibilityChangedByMouse()) { return; } @@ -509,12 +505,11 @@ // don't pass the event if the text input is not in valid format if (isHighlitableElement(elType) || m_webview->fepTextEditor()->validateTextFormat()) { - // because of scrolling we delay sending EButton1Down till we get EButton1Up event and if the content is not scrolling - coreFrame->eventHandler()->handleMouseReleaseEvent(PlatformMouseEvent(m_lastTapEvent)); + m_webview->sendMouseEventToEngine(TPointerEvent::EButton1Up, m_lastTapEvent.iPosition, coreFrame); } // special handling for broken image (why is this here??) - if (m_webview->focusedElementType() == TBrCtlDefs::EElementBrokenImage) { + if (elType == TBrCtlDefs::EElementBrokenImage) { loadFocusedImage(m_webview); } else if (elType == TBrCtlDefs::EElementActivatedObjectBox) { @@ -601,6 +596,21 @@ } 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() + * wouldn't do anything and setEditable won't be called. + * So we are setting focused node to NULL here and let mouse event handler + * set it through ocuseController::setFocusedNode() + */ + if (IS_TABBED_NAVIGATION && + elType == TBrCtlDefs::EElementInputBox || + elType == TBrCtlDefs::EElementTextAreaBox) { + coreFrame->document()->setFocusedNode(NULL); + } + m_webview->sendMouseEventToEngine(TPointerEvent::EButton1Down, m_highlightPos, coreFrame); m_webview->sendMouseEventToEngine(TPointerEvent::EMove, m_highlightPos, coreFrame); diff -r c8a366e56285 -r 60c5402cb945 webengine/osswebengine/WebKit/s60/webview/WebView.cpp --- a/webengine/osswebengine/WebKit/s60/webview/WebView.cpp Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/osswebengine/WebKit/s60/webview/WebView.cpp Mon Oct 26 08:28:45 2009 +0200 @@ -143,7 +143,10 @@ : coreFrame->tree()->traversePreviousWithWrap(wrapFlag)); } - +#define IS_UP_KEY(keyevent) ((keyevent.iCode == EKeyUpArrow) || (keyevent.iCode == EStdKeyUpArrow)) +#define IS_DOWN_KEY(keyevent) ((keyevent.iCode == EStdKeyDevice12) || (keyevent.iCode == EKeyDownArrow) || (keyevent.iCode == EStdKeyDownArrow)) +#define IS_RIGHT_KEY(keyevent) ((keyevent.iCode == EStdKeyDevice11) || (keyevent.iCode == EKeyRightArrow) || (keyevent.iCode == EStdKeyRightArrow)) +#define IS_LEFT_KEY(keyevent) ((keyevent.iCode == EStdKeyDevice13) || (keyevent.iCode == EKeyLeftArrow) || (keyevent.iCode == EStdKeyLeftArrow)) // ----------------------------------------------------------------------------- // WebView::NewL @@ -196,11 +199,14 @@ , m_showCursor(false) , m_allowRepaints(true) , m_prevEditMode(false) +, m_firedEvent(0) { } WebView::~WebView() { + StaticObjectsContainer::instance()->webCursor()->stopTransparencyTimer(); + // the zoom handler is a client of WebView (also owned by // WebView--a circular dependency) so it must be deleted before // the WebView object is destroyed because in its destructor it @@ -782,6 +788,7 @@ m_focusedElementType = TBrCtlDefs::EElementNone; } m_brctl->updateDefaultSoftkeys(); + page()->chrome()->client()->setElementVisibilityChanged(false); } void WebView::updatePageScaler() @@ -898,7 +905,8 @@ event.iPosition = pos; event.iModifiers = 0; event.iType = eventType; - + + setMouseEventFired(); switch (eventType) { case TPointerEvent::EButton1Down: { @@ -918,6 +926,7 @@ break; } }; + clearMouseEventFired(); } @@ -931,22 +940,21 @@ } } -bool WebView::needDeactivateEditable(const TKeyEvent& keyevent, TEventCode eventcode, Frame* frame) +bool WebView::needDeactivateEditable(const TKeyEvent& keyevent, TEventCode eventcode, Frame* frame, bool consumed) { - bool upOrDown = ((keyevent.iCode == EKeyUpArrow) || - (keyevent.iCode == EStdKeyUpArrow) || - (keyevent.iCode == EKeyRightUpArrow) || - (keyevent.iCode == EKeyDownArrow) || - (keyevent.iCode == EStdKeyDownArrow) || - (keyevent.iCode == EKeyLeftDownArrow)); - bool shouldEndEditing = frame->editor()->client()->shouldEndEditing(NULL); - bool inEditState = (m_isEditable && (m_focusedElementType == TBrCtlDefs::EElementActivatedInputBox)); - bool isSelectBoxActive = (m_focusedElementType == TBrCtlDefs::EElementSelectBox); - bool deactivateInputBox = (inEditState && upOrDown && m_webfeptexteditor->validateTextFormat()); - bool deactivateSelectBox = (isSelectBoxActive && isNaviKey(keyevent)); - + /* + * Here we are making an assumption that if element visibility has been changed + * than JavaScript used the key event. If this the the case or consumed is tru and + * keys are Up or Down we don't want to deactivate an editable element. + * Google suggest is examples if such case. + */ + bool upOrDownConsumed = (consumed || //JavaScript consumed event or + (m_focusedElementType == TBrCtlDefs::EElementActivatedInputBox && // style of input box + page()->chrome()->client()->elementVisibilityChanged())) && // changed + (IS_UP_KEY(keyevent) || IS_DOWN_KEY(keyevent)); + bool shouldEndEditing = frame->editor()->client()->shouldEndEditing(NULL) && !upOrDownConsumed; bool deactivateEditable = (m_isEditable && shouldEndEditing && m_webfeptexteditor->validateTextFormat()); - return deactivateEditable || deactivateSelectBox; + return deactivateEditable; } @@ -981,19 +989,12 @@ } } else { - if (keyevent.iCode == EKeyDevice3) { //selection key (MSK) - // mimic ccb's behavior of onFocus + if (keyevent.iCode == EKeyDevice3) { // selection key (MSK) consumed = handleMSK(keyevent, oldKeyCode, frame); - - // Toolbar is activated on long key press only if the element - // type is EElementNone during EEventKeyDown and EEventKey. - // This prevents toolbar from popping up in DHTML pages. Also, - // toolbar is activated when the user is not in fast scroll - // mode, or in page overview mode, or on wml page. } else if (isNaviKey(keyevent)) { consumed = handleNaviKeyEvent(keyevent, oldKeyCode, frame); - } // if (m_brctl->settings()->getNavigationType() + } else { // Not an arrow key.. // activate hovered input element by just start typing consumed = !m_isEditable && handleInputElement(keyevent, eventcode, frame); @@ -1005,90 +1006,190 @@ return consumed; } + bool WebView::handleMSK(const TKeyEvent& keyevent, TEventCode eventcode, Frame* frame) { WebCursor* cursor = StaticObjectsContainer::instance()->webCursor(); bool prevEditableState = m_isEditable; - if (m_focusedElementType != TBrCtlDefs::EElementActivatedInputBox ) { - sendMouseEventToEngineIfNeeded(TPointerEvent::EButton1Down, - cursor->position(), frame); + bool tabbedNavigation = (m_brctl->settings()->getNavigationType() == SettingsContainer::NavigationTypeTabbed); + Node* focusedNode = frame->document()->focusedNode(); + bool multiSelectInTabbed = (m_focusedElementType == TBrCtlDefs::EElementSelectMultiBox) && // multiselect element + tabbedNavigation; // in tabbed mode. + /* + * Avoiding resetting cursor position to top left corner of Select Box + * See comment in handleInputElement + */ + if (!multiSelectInTabbed) { + setFocusNone(); + } + + sendMouseEventToEngineIfNeeded(TPointerEvent::EButton1Down, + cursor->position(), frame); + if (!tabbedNavigation) { + setFocusedNode(frame); //TODO: Do we need it here? } - setFocusedNode(frame); + else { + /* + * Restore focused by tabbed navigation node since mouse event + * handler might set it to NULL. + */ + page()->focusController()->setFocusedNode(focusedNode, frame); + } + + /* + * MSK key event on editable will be interpreted as Enter. + * We don't want to send Enter key in case of activated + * input box. Also if the text area has been just activated + * we also don't want to send Enter since it will cause extra + * line feed. + */ bool textAreaJustActivated = (!prevEditableState && m_isEditable && m_focusedElementType == TBrCtlDefs::EElementTextAreaBox); + if (eventcode == EEventKeyDown && m_focusedElementType != TBrCtlDefs::EElementActivatedInputBox && !textAreaJustActivated) { + sendKeyEventToEngine(keyevent, EEventKeyDown, frame); } + + /* + * Toolbar is activated on long key press only if the element + * type is EElementNone during EEventKeyDown and EEventKey. + * This prevents toolbar from popping up in DHTML pages. Also, + * toolbar is activated when the user is not in fast scroll + * mode, or in page overview mode, or on wml page. + */ if ((m_focusedElementType == TBrCtlDefs::EElementNone || m_focusedElementType == TBrCtlDefs::EElementBrokenImage ) && keyevent.iRepeats && !m_brctl->wmlMode() ) { launchToolBarL(); } + return true; } -bool WebView::handleNaviKeyEvent(const TKeyEvent& keyevent, TEventCode eventcode, Frame* frame) + +bool WebView::handleNaviKeyEvent(const TKeyEvent& keyevent, TEventCode eventcode, Frame* frame) { bool downEventConsumed = false; bool consumed = false; bool tabbedNavigation = (m_brctl->settings()->getNavigationType() == SettingsContainer::NavigationTypeTabbed); /* - * For each platform keyDown event EventHandler::keEvent() generates + * For each platform keyDown event EventHandler::keEvent() generates * keydown and keypress. - * For keypress event we need a char code and since we don't - * have it at the time of EEventKeyDown we pospond it until EEventKey + * For keypress event we need a char code and since we don't + * have it at the time of EEventKeyDown we pospond it until EEventKey * and send it here. */ if (eventcode == EEventKeyDown){ downEventConsumed = sendKeyEventToEngine(keyevent, EEventKeyDown, frame); } - - if (!downEventConsumed && needDeactivateEditable(keyevent, eventcode, frame)) { + /* + * downEventConsumed will be true if JavaScript consumes key event + * If we are not in the widget mode we want to deactivate input box + * regardless of whether event was consumed by JavaScript or not. + * Othrerwise we have a risk to be trapped inside input box. + */ + bool widgetDownEventConsumed = downEventConsumed && (m_widgetextension != NULL); + + if (!widgetDownEventConsumed && needDeactivateEditable(keyevent, eventcode, frame, downEventConsumed)) { deactivateEditable(); } if (tabbedNavigation) { consumed = downEventConsumed || handleTabbedNavigation(m_currentEventKey, m_currentEventCode); } - else { - consumed = (!m_isEditable && //avoid showing the cursor when we are in the input box + else { + consumed = (!m_isEditable && //avoid showing the cursor when we are in the input box handleKeyNavigation(keyevent, eventcode, frame)) || downEventConsumed; } return consumed; } - bool WebView::handleInputElement(const TKeyEvent& keyevent, TEventCode eventcode, Frame* frame) { WebCursor* cursor = StaticObjectsContainer::instance()->webCursor(); + TBrCtlDefs::TBrCtlElementType elTypeBeforeMouseEvent = m_focusedElementType; + bool tabbedNavigation = (m_brctl->settings()->getNavigationType() == SettingsContainer::NavigationTypeTabbed); + bool navigationNone = (m_brctl->settings()->getNavigationType() == SettingsContainer::NavigationTypeNone); + bool prevEditableState = m_isEditable; + bool enterOnMultiSelectInTabbed = tabbedNavigation && (keyevent.iCode == EKeyEnter) && // EnterKey in case of + (m_focusedElementType == TBrCtlDefs::EElementSelectMultiBox); // multiselect eelement in tabbed mode. + + bool sendMousedEvent = false; if (m_focusedElementType == TBrCtlDefs::EElementInputBox || - m_focusedElementType == TBrCtlDefs::EElementTextAreaBox) { + m_focusedElementType == TBrCtlDefs::EElementTextAreaBox || + (tabbedNavigation && + (m_focusedElementType == TBrCtlDefs::EElementActivatedInputBox))) { sendMousedEvent = true; } else if (m_focusedElementType == TBrCtlDefs::EElementSelectBox || m_focusedElementType == TBrCtlDefs::EElementSelectMultiBox) { - if (m_brctl->settings()->getNavigationType() != SettingsContainer::NavigationTypeNone || - keyevent.iCode == EKeyDevice3) { + if (!navigationNone || keyevent.iCode == EKeyDevice3) { sendMousedEvent = true; } } + + if (m_focusedElementType == TBrCtlDefs::EElementTextAreaBox || + m_focusedElementType == TBrCtlDefs::EElementInputBox || + m_focusedElementType == TBrCtlDefs::EElementActivatedInputBox) { + page()->chrome()->client()->setElementVisibilityChanged(false); + } + if (sendMousedEvent) { + /* + * Sending mouse event to WebCore will trigger FocusController->setFocusedNode() to be called. + * It will do anything only if focused node has been changed. Among other thing it will + * trigger the setEditable() call, which we need. The exception is the case when + * we have tabbed navigation and EnterKey was hit in MultiSelect Box. + * In this case we just want to select item in the select element. + * HTMLSelectElement::listBoxDefaultEventHandler() will call focus() which will + * set the focused node, which is already set anyway, but this will cause the + * reseting cursor position to the top left corner of the select box. + * To avoid thos we put the check here before we reset the foocusedNode. + */ + if (!enterOnMultiSelectInTabbed) { + frame->document()->setFocusedNode(NULL); + } + + /* + * Tweek the m_isEditable flag, so setEditable will do something + * usefull when it's called from FocusController->setFocusedNode() + */ + if (m_isEditable && tabbedNavigation) { + m_isEditable = false; + } + sendMouseEventToEngineIfNeeded(TPointerEvent::EButton1Down, cursor->position(), frame); sendMouseEventToEngineIfNeeded(TPointerEvent::EButton1Up, cursor->position(), frame); - - if (m_focusedElementType == TBrCtlDefs::EElementInputBox || - m_focusedElementType == TBrCtlDefs::EElementTextAreaBox || - m_focusedElementType == TBrCtlDefs::EElementActivatedInputBox) { + + /* + * If enter key was pressed to activate an input box we don't want to + * send it to WebCore since it may cause immediate form submission. + * Same for MultiSelect Box in tabbed mode. + */ + bool inputBoxJustActivated = (!prevEditableState && m_isEditable && + (m_focusedElementType == TBrCtlDefs::EElementActivatedInputBox|| + m_focusedElementType == TBrCtlDefs::EElementTextAreaBox)); + bool inputBoxJustActivatedByEnter = inputBoxJustActivated && (keyevent.iCode == EKeyEnter); + if (!inputBoxJustActivatedByEnter && + !enterOnMultiSelectInTabbed && + (m_focusedElementType == TBrCtlDefs::EElementInputBox || + m_focusedElementType == TBrCtlDefs::EElementTextAreaBox || + m_focusedElementType == TBrCtlDefs::EElementActivatedInputBox)) { + if (!m_fepTimer) { m_fepTimer = new WebCore::Timer(this, &WebView::fepTimerFired); } m_fepTimer->startOneShot(0.2f); - setEditable(true); + if (!m_isEditable) { + setEditable(true); + } } + m_keyevent = keyevent; m_eventcode = eventcode; return true; @@ -1122,6 +1223,16 @@ cursor->scrollAndMoveCursor(keyevent.iCode, m_scrollingSpeed, fastscroll); } updateScrollbars(); + /* + * In order to Enter key activate a link the link node has to be focused. + * When WebCursor is finding next node to snap it stores it, so here we can + * set it to focused. + */ + if (m_brctl->settings()->brctlSetting(TBrCtlDefs::ESettingsEnterKeyMode) == + TBrCtlDefs::EEnterKeyCanActivateLink) { + setFocusedNodeUnderCursor(frame); + } + if (!fastscroll) { m_fastScrollTimer->Start(KCursorInitialDelay,KCursorUpdateFrquency,TCallBack(&scrollTimerCb,this)); m_scrollingStartTime.HomeTime(); @@ -1138,6 +1249,18 @@ return consumed; } +void WebView::setFocusedNodeUnderCursor(Frame* frame) +{ + WebCursor* cursor = StaticObjectsContainer::instance()->webCursor(); + // focus the node we snapped to + if (m_focusedElementType != TBrCtlDefs::EElementNone) { + frame->document()->setFocusedNode(cursor->getElementUnderCursor()); + } + // or reset if there is none + else if (frame->document()->focusedNode() != NULL) { + frame->document()->setFocusedNode(NULL); + } +} bool WebView::handleMinimapNavigation() { @@ -1255,8 +1378,10 @@ } } if (m_brctl->settings()->getNavigationType() != SettingsContainer::NavigationTypeNone) { - if (!sendKeyEventToEngine(correctedKeyEvent, eventcode, frame)) { - sendMouseEventToEngineIfNeeded(TPointerEvent::EButton1Up, cursor->position(), frame); + if (!sendKeyEventToEngine(correctedKeyEvent, eventcode, frame)) { + if (keyevent.iScanCode == EStdKeyDevice3) { //MSK + sendMouseEventToEngineIfNeeded(TPointerEvent::EButton1Up, cursor->position(), frame); + } } consumed = true; } @@ -1301,10 +1426,12 @@ { bool tabbedNavigation = (m_brctl->settings()->getNavigationType() == SettingsContainer::NavigationTypeTabbed); Node* targetNode = frame->document()->focusedNode(); - if (!m_isEditable) { - - - + /* + * we dont want to send key event for navi key to the elements + * like select element since it has default key event handling, + * which will prevent user to leave the element. + */ + if (!m_isEditable && isNaviKey(keyevent)) { frame->document()->setFocusedNode(NULL); } bool consumed = frame->eventHandler()->keyEvent(PlatformKeyboardEvent(keyevent,eventcode)); diff -r c8a366e56285 -r 60c5402cb945 webengine/osswebengine/WebKit/s60/webview/WebView.h --- a/webengine/osswebengine/WebKit/s60/webview/WebView.h Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/osswebengine/WebKit/s60/webview/WebView.h Mon Oct 26 08:28:45 2009 +0200 @@ -67,6 +67,12 @@ class WebFrameView; class WebFrameBridge; + +const TUint KMouseEventFired = 0x00000001; +const TUint KKeyEventFired = 0x00000002; + + + class WebView : public CEikBorderedControl, public WebCore::Shared, private MPageScalerCallback, public MOOMStopper { public: @@ -459,13 +465,14 @@ bool handleEventKeyUp(const TKeyEvent& keyevent, TEventCode eventcode, WebCore::Frame* frame); bool handleEditable(const TKeyEvent& keyevent, TEventCode eventcode, WebCore::Frame* frame ); bool isNaviKey(const TKeyEvent& keyevent); - bool needDeactivateEditable(const TKeyEvent& keyevent, TEventCode eventcode, WebCore::Frame* frame); + bool needDeactivateEditable(const TKeyEvent& keyevent, TEventCode eventcode, WebCore::Frame* frame, bool consumed); bool deactivateEditable(); TUint correctKeyCode(); bool handleNaviKeyEvent(const TKeyEvent& keyevent, TEventCode eventcode, WebCore::Frame* frame); bool handleMSK(const TKeyEvent& keyevent, TEventCode eventcode, WebCore::Frame* frame); - void sendMouseEventToEngineIfNeeded(TPointerEvent::TType eventType, TPoint pos, WebCore::Frame* frame); - + void sendMouseEventToEngineIfNeeded(TPointerEvent::TType eventType, TPoint pos, WebCore::Frame* frame); + void setFocusedNodeUnderCursor(WebCore::Frame* frame); + public: void sendMouseEventToEngine(TPointerEvent::TType eventType, TPoint pos, WebCore::Frame* frame); void fepTimerFired(WebCore::Timer*); @@ -478,6 +485,14 @@ void focusedElementChanged(WebCore::Element* element); void windowObjectCleared() const; + bool isMouseEventFired() { return m_firedEvent & KMouseEventFired; } + bool isKeyEventFired() { return m_firedEvent & KKeyEventFired; } + void setMouseEventFired() { m_firedEvent |= KMouseEventFired; } + void setKeyEventFired() { m_firedEvent |= KKeyEventFired; } + void clearMouseEventFired() { m_firedEvent &= ~KMouseEventFired; } + void clearKeyEventFired() { m_firedEvent &= ~KKeyEventFired; } + void clearEventFired() { m_firedEvent = 0; } + private: WebCore::Page* m_page; WebFrameView* m_frameView; @@ -559,7 +574,8 @@ //Indicates any plugin is activated/deactivated bool m_showCursor; bool m_allowRepaints; - bool m_prevEditMode; + bool m_prevEditMode; + int m_firedEvent; }; #endif diff -r c8a366e56285 -r 60c5402cb945 webengine/osswebengine/cache/cache_check.pl --- a/webengine/osswebengine/cache/cache_check.pl Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/osswebengine/cache/cache_check.pl Mon Oct 26 08:28:45 2009 +0200 @@ -1,18 +1,3 @@ -# -# Copyright (c) 2009 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: -# #!/usr/bin/perl #use Encode; diff -r c8a366e56285 -r 60c5402cb945 webengine/osswebengine/cache/filter_emulator_output.bat --- a/webengine/osswebengine/cache/filter_emulator_output.bat Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/osswebengine/cache/filter_emulator_output.bat Mon Oct 26 08:28:45 2009 +0200 @@ -1,18 +1,2 @@ -@rem -@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -@rem All rights reserved. -@rem This component and the accompanying materials are made available -@rem under the terms of the License "Eclipse Public License v1.0" -@rem which accompanies this distribution, and is available -@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". -@rem -@rem Initial Contributors: -@rem Nokia Corporation - initial contribution. -@rem -@rem Contributors: -@rem -@rem Description: -@rem - filter_log.pl %tmp%\epocwind.out log.txt" log.txt diff -r c8a366e56285 -r 60c5402cb945 webengine/osswebengine/cache/filter_log.pl --- a/webengine/osswebengine/cache/filter_log.pl Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/osswebengine/cache/filter_log.pl Mon Oct 26 08:28:45 2009 +0200 @@ -1,18 +1,3 @@ -# -# Copyright (c) 2009 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: -# #!/usr/bin/perl open INH,"<",$ARGV[0]; diff -r c8a366e56285 -r 60c5402cb945 webengine/widgetengine/group/WidgetEngine.mmp --- a/webengine/widgetengine/group/WidgetEngine.mmp Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/widgetengine/group/WidgetEngine.mmp Mon Oct 26 08:28:45 2009 +0200 @@ -116,6 +116,7 @@ SOURCE WidgetEngineBridge.cpp START RESOURCE ../Src/WidgetMenu.rss +DEPENDS avkon.rsg HEADER TARGETPATH RESOURCE_FILES_DIR #ifdef __S60_32__ diff -r c8a366e56285 -r 60c5402cb945 webengine/widgetengine/src/Preferences.cpp --- a/webengine/widgetengine/src/Preferences.cpp Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/widgetengine/src/Preferences.cpp Mon Oct 26 08:28:45 2009 +0200 @@ -58,7 +58,7 @@ // ---------------------------------------------------------------------------- WidgetPreferences::~WidgetPreferences() { - TRAP_IGNORE( saveL() ); + //TRAP_IGNORE( saveL() ); if (m_preferences) { m_preferences->ResetAndDestroy(); m_preferences->Close(); @@ -262,6 +262,9 @@ } CleanupStack::Pop(); // k + + // Save update to persistent storage + saveL(); } } @@ -301,6 +304,9 @@ } CleanupStack::PopAndDestroy(); // k + + // Save update to persistent storage + saveL(); } } diff -r c8a366e56285 -r 60c5402cb945 webengine/widgetinstaller/Inc/WidgetBackupRegistryXml.h --- a/webengine/widgetinstaller/Inc/WidgetBackupRegistryXml.h Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/widgetinstaller/Inc/WidgetBackupRegistryXml.h Mon Oct 26 08:28:45 2009 +0200 @@ -1,23 +1,25 @@ /* -* 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: This file contains the header file of the CWidgetBackupRegistryXml class. +* ============================================================================== +* Name : WidgetRegistryXml.h +* Part of : Widget Registry +* Interface : Widget Registry API +* Description : This file contains the header file of the CWidgetBackupRegistryXml class. * * This class processes persistent registry data in XML. +* Version : %version: 7 % * +* Copyright © 2008 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. +* ============================================================================== */ - #ifndef WIDGETBACKUPREGISTRYXML_H #define WIDGETBACKUPREGISTRYXML_H diff -r c8a366e56285 -r 60c5402cb945 webengine/widgetinstaller/Src/WidgetBackupRegistryXml.cpp --- a/webengine/widgetinstaller/Src/WidgetBackupRegistryXml.cpp Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/widgetinstaller/Src/WidgetBackupRegistryXml.cpp Mon Oct 26 08:28:45 2009 +0200 @@ -1,20 +1,24 @@ -/* -* 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: Processes registry persistent data in XML. -* -*/ +// +// ============================================================================== +// Name : WidgetBackupRegistryXml.cpp +// Part of : WidgetRegistry +// Interface : +// Description : Processes registry persistent data in XML. +// Version : 5.0 +// +// Copyright © 2008 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 FILES #include #include diff -r c8a366e56285 -r 60c5402cb945 webengine/widgetregistry/Server/inc/WidgetRegistry.h --- a/webengine/widgetregistry/Server/inc/WidgetRegistry.h Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/widgetregistry/Server/inc/WidgetRegistry.h Mon Oct 26 08:28:45 2009 +0200 @@ -24,6 +24,7 @@ #include #include #include +#include #include "WidgetRegistryData.h" #include "WidgetRegistryConstants.h" #include "WidgetPropertyValue.h" @@ -36,7 +37,6 @@ // FORWARD DECLARATIONS class RFs; -class CWidgetMMCHandler; class CWidgetEntry; class CWidgetInstaller; class CWidgetRegistryXml; @@ -58,7 +58,7 @@ * @since 3.1 */ -class CWidgetRegistry : public CBase +class CWidgetRegistry : public CBase, public MApaAppListServObserver { public: /** @@ -200,7 +200,10 @@ * dirty flag is true only in non leave case and some change * needs to be written out */ - void InternalizeL( TBool& aDirtyFlag ); + void InternalizeL( TBool aDoConsistency, + TBool aIgnoreParseError, + TBool& aDirtyFlag, + TInt& aParseError ); /** * Store widget information to a file @@ -212,6 +215,9 @@ */ TInt SecurityPolicyId() { return FetchSecurityPolicyIdL(); } + //from MApaAppListServObserver + void HandleAppListEvent(TInt aEvent); + private: /** @@ -361,9 +367,9 @@ // map of language code to lproj dir RPtrHashMap iLangDirList; - CWidgetMMCHandler* iMMCHandler; TInt iPolicyId; CWidgetRegistryXml* iXmlProcessor; + CApaAppListNotifier* iApaAppListNotifier; public: LOG_MEMBER_VARS }; diff -r c8a366e56285 -r 60c5402cb945 webengine/widgetregistry/Server/src/WidgetRegistry.cpp --- a/webengine/widgetregistry/Server/src/WidgetRegistry.cpp Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/widgetregistry/Server/src/WidgetRegistry.cpp Mon Oct 26 08:28:45 2009 +0200 @@ -30,7 +30,6 @@ #include #include #include -#include "WidgetMMCHandler.h" #include "UidAllocator.h" #if defined( BRDO_WRT_SECURITY_MGR_FF ) #include @@ -189,9 +188,8 @@ iAppArch.Close(); delete iInstaller; iLangDirList.ResetAndDestroy(); - delete iMMCHandler; delete iXmlProcessor; - + delete iApaAppListNotifier; iFs.Close(); LOG_DESTRUCT; } @@ -220,8 +218,23 @@ // it should be detected and corrected once the resource limit // that caused the leave is removed. TBool dirtyFlag = EFalse; + TInt parseError = KErrNone; iXmlProcessor = CWidgetRegistryXml::NewL(); - TRAP_IGNORE( InternalizeL( dirtyFlag ) ); + // For first attempt assume usual case that things are consistent + // and the registry entry file can be parsed and used. + TRAP_IGNORE( InternalizeL( EFalse, // aDoConsistency, + EFalse, // aIgnoreParseError + dirtyFlag, + parseError ) ); + if ( parseError ) + { + // Special case where we need to do consistency because + // the widget registry entry file is corrupt. + TRAP_IGNORE( InternalizeL( ETrue, // aDoConsistency, + ETrue, // aIgnoreParseError + dirtyFlag, + parseError ) ); + } if ( dirtyFlag ) { // Basically same reason to ignore leaves here. @@ -237,9 +250,7 @@ LOG1( "ConstructL internalize done, registry count %d", iEntries.Count() ); LOG_CLOSE; - - iMMCHandler = CWidgetMMCHandler::NewL( *this, iFs ); - iMMCHandler->Start(); + iApaAppListNotifier = CApaAppListNotifier::NewL(this,CActive::EPriorityStandard); } // ============================================================================ @@ -496,7 +507,10 @@ // @since 3.1 // ============================================================================ // -void CWidgetRegistry::InternalizeL( TBool& aDirtyFlag ) +void CWidgetRegistry::InternalizeL( TBool doConsistency, // in param + TBool aIgnoreParseError, // in param + TBool& aDirtyFlag, // out param + TInt& aParseError )// out param { LOG_OPEN; LOG( "Internalize" ); @@ -520,7 +534,10 @@ CleanupClosePushL( appArchList ); CleanupClosePushL( appArchListFlags ); - TBool doConsistency = AppArchWidgets( appArchList, appArchListFlags ); + if ( doConsistency ) + { + doConsistency = AppArchWidgets( appArchList, appArchListFlags ); + } if ( doConsistency ) { @@ -622,25 +639,31 @@ // that caused the leave is removed. if ( xmlExists ) { - TRAP_IGNORE( InternalizeXmlL( iRegistryXmlFileName, - driveUnit, - doConsistency, - appArchList, - appArchListFlags, - installedListForDrive, - installedListForDriveFlags, - dirtyFlag ) ); + TRAP( aParseError, + InternalizeXmlL( iRegistryXmlFileName, + driveUnit, + doConsistency, + appArchList, + appArchListFlags, + installedListForDrive, + installedListForDriveFlags, + dirtyFlag ) ); } else if ( binaryExists ) { - TRAP_IGNORE( InternalizeBinaryL( iRegistryBinaryFileName, - driveUnit, - doConsistency, - appArchList, - appArchListFlags, - installedListForDrive, - installedListForDriveFlags, - dirtyFlag ) ); + TRAP( aParseError, + InternalizeBinaryL( iRegistryBinaryFileName, + driveUnit, + doConsistency, + appArchList, + appArchListFlags, + installedListForDrive, + installedListForDriveFlags, + dirtyFlag ) ); + } + if ( !aIgnoreParseError && aParseError ) + { + User::Leave( aParseError ); } if ( doConsistency ) @@ -2222,5 +2245,23 @@ LOG( "AppArchListConsistency done" ); } - +void CWidgetRegistry::HandleAppListEvent(TInt aEvent) + { + TBool dirtyFlag = EFalse; + TInt parseError = KErrNone; + // Assume usual case and things are consistent + // and the registry entry file can be parsed and used. + TRAPD( error, InternalizeL( EFalse, + EFalse, + dirtyFlag, + parseError ) ); + if ( KErrNone == error ) + { + // internalize consistency enforcement may have altered registry + if ( dirtyFlag ) + { + TRAP_IGNORE( ExternalizeL(); ); + } + } + } // End of File diff -r c8a366e56285 -r 60c5402cb945 webengine/widgetregistry/group/WidgetRegistryServer.mmp --- a/webengine/widgetregistry/group/WidgetRegistryServer.mmp Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/widgetregistry/group/WidgetRegistryServer.mmp Mon Oct 26 08:28:45 2009 +0200 @@ -41,7 +41,6 @@ SOURCE WidgetRegistrySession.cpp SOURCE WidgetRegistryServer.cpp SOURCE UidAllocator.cpp -SOURCE WidgetMMCHandler.cpp USERINCLUDE ../Server/inc USERINCLUDE ../Common/inc diff -r c8a366e56285 -r 60c5402cb945 webengine/wmlengine/src/fbox/src/Epoc32SelectSkin.cpp --- a/webengine/wmlengine/src/fbox/src/Epoc32SelectSkin.cpp Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/wmlengine/src/fbox/src/Epoc32SelectSkin.cpp Mon Oct 26 08:28:45 2009 +0200 @@ -720,6 +720,7 @@ } // CAUTION: this eventually calls NW_UI_CreateCard which may remove 'skin' if onpick to intradeck card exists in content NW_FBox_OptionBox_ChangeState( optionBox ); + break; } } } diff -r c8a366e56285 -r 60c5402cb945 webengine/wrtharvester/group/wrtharvester.mmp --- a/webengine/wrtharvester/group/wrtharvester.mmp Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/wrtharvester/group/wrtharvester.mmp Mon Oct 26 08:28:45 2009 +0200 @@ -40,6 +40,7 @@ END START RESOURCE ../data/wrtharvester.rss +DEPENDS avkon.rsg HEADER TARGET wrtharvester.rsc TARGETPATH resource @@ -65,5 +66,6 @@ LIBRARY cone.lib // CoeControl LIBRARY CommonEngine.lib LIBRARY ws32.lib +LIBRARY PlatformEnv.lib //end of file diff -r c8a366e56285 -r 60c5402cb945 webengine/wrtharvester/inc/wrtharvester.h --- a/webengine/wrtharvester/inc/wrtharvester.h Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/wrtharvester/inc/wrtharvester.h Mon Oct 26 08:28:45 2009 +0200 @@ -32,7 +32,7 @@ class MLiwInterface; class CLiwGenericParamList; class CWrtInfo; -class CWidgetMMCHandler; +class CWrtUsbHandler; // CONSTANTS @@ -271,7 +271,7 @@ * Publish & Subscribe listener * own */ - CWidgetMMCHandler* iWidgetUsbListener; + CWrtUsbHandler* iWidgetUsbListener; /** * diff -r c8a366e56285 -r 60c5402cb945 webengine/wrtharvester/inc/wrtusbhandler.h --- a/webengine/wrtharvester/inc/wrtusbhandler.h Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/wrtharvester/inc/wrtusbhandler.h Mon Oct 26 08:28:45 2009 +0200 @@ -1,21 +1,22 @@ /* -* 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". +* ============================================================================ +* Name : WidgetMMCHandler.h +* Part of : Widget Registry +* Description : Acts on MMC card insertion/removal +* Version : 3.1 * -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: Acts on MMC card insertion/removal -* +* Copyright © 2008 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. +* ============================================================================= */ - #ifndef WIDGETMMCHANDLER_H #define WIDGETMMCHANDLER_H @@ -35,16 +36,18 @@ * * @since 3.1 */ -class CWidgetMMCHandler : public CActive +class CWrtUsbHandler : public CActive { public: - static CWidgetMMCHandler* NewL( CWrtHarvester* aHarvester, RFs& aFs ); + static CWrtUsbHandler* NewL( CWrtHarvester* aHarvester, RFs& aFs ); - virtual ~CWidgetMMCHandler(); + virtual ~CWrtUsbHandler(); void Start(); void ToggleUSBMode(); + void DoScanAndUpdate(); + void DeleteTimer(); protected: @@ -57,11 +60,11 @@ private: // no copy constructor - CWidgetMMCHandler( const CWidgetMMCHandler& ); + CWrtUsbHandler( const CWrtUsbHandler& ); // no assignment - CWidgetMMCHandler& operator=( const CWidgetMMCHandler& ); + CWrtUsbHandler& operator=( const CWrtUsbHandler& ); - CWidgetMMCHandler( CWrtHarvester* aHarvester, RFs& aFs ); + CWrtUsbHandler( CWrtHarvester* aHarvester, RFs& aFs ); void ConstructL(); @@ -73,6 +76,7 @@ RFs iFs; TInt iDriveFlags; + CPeriodic* iCallBackTimer; }; diff -r c8a366e56285 -r 60c5402cb945 webengine/wrtharvester/rom/wrtharvesterResources.iby --- a/webengine/wrtharvester/rom/wrtharvesterResources.iby Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/wrtharvester/rom/wrtharvesterResources.iby Mon Oct 26 08:28:45 2009 +0200 @@ -1,22 +1,22 @@ /* -* Copyright (c) 2009 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". +* ============================================================================= +* Name : wrtharvesterResources.iby +* Part of : +* Description : The resource iby file contains resource that needs to be +* localized for wrtharvester +* Version : %version: 1 % * -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: The resource iby file contains resource that needs to be -* localized for wrtharvester -* +* Copyright (c) 2009 Nokia. All rights reserved. +* This material, including documentation and any related computer +* programs, is protected by copyright controlled by Nokia. All +* rights are reserved. Copying, including reproducing, storing, +* adapting or translating, any or all of this material requires the +* prior written consent of Nokia. This material also contains +* confidential information which may not be disclosed to others +* without the prior written consent of Nokia. +* ============================================================================ */ - #ifndef WRTHARVESTERRESOURCES_IBY #define WRTHARVESTERRESOURCES_IBY diff -r c8a366e56285 -r 60c5402cb945 webengine/wrtharvester/src/wrtharvester.cpp --- a/webengine/wrtharvester/src/wrtharvester.cpp Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/wrtharvester/src/wrtharvester.cpp Mon Oct 26 08:28:45 2009 +0200 @@ -224,7 +224,7 @@ iWidgetRegListener = CWrtHarvesterPSNotifier::NewL( this, EWidgetRegAltered ); User::LeaveIfError( iFs.Connect() ); - iWidgetUsbListener = CWidgetMMCHandler::NewL( this, iFs ); + iWidgetUsbListener = CWrtUsbHandler::NewL( this, iFs ); iWidgetUsbListener->Start(); SetMSMode(0); diff -r c8a366e56285 -r 60c5402cb945 webengine/wrtharvester/src/wrtusbhandler.cpp --- a/webengine/wrtharvester/src/wrtusbhandler.cpp Thu Sep 24 12:53:48 2009 +0300 +++ b/webengine/wrtharvester/src/wrtusbhandler.cpp Mon Oct 26 08:28:45 2009 +0200 @@ -1,45 +1,60 @@ -/* -* 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: Handle notifications of MMC events. -* -* -* -*/ +// +// ============================================================================ +// Name : WidgetMMCHandler.cpp +// Part of : SW Installer UIs / WidgetInstallerUI +// +// Description: Handle notifications of MMC events. +// +// +// Version : 3.1 +// +// Copyright © 2006 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 FILES #include "wrtusbhandler.h" #include "wrtharvester.h" #include "wrtusbhandler.h" +#include // CONSTANTS +static TInt TimerCallBack( TAny* ptr ) +{ + CWrtUsbHandler* temp = static_cast(ptr); + if(temp) + { + temp->DeleteTimer(); + temp->DoScanAndUpdate(); + } + return 0; +} // ============================================================================ -// CWidgetMMCHandler::NewL() +// CWrtUsbHandler::NewL() // two-phase constructor // // @since 3.1 // @param aRegistry - Widget registry for callback. // @param aFs - file session -// @return pointer to CWidgetMMCHandler +// @return pointer to CWrtUsbHandler // ============================================================================ // -CWidgetMMCHandler* CWidgetMMCHandler::NewL( +CWrtUsbHandler* CWrtUsbHandler::NewL( CWrtHarvester* aHarvester, RFs& aFs ) { - CWidgetMMCHandler* self = - new(ELeave) CWidgetMMCHandler( aHarvester , aFs ); + CWrtUsbHandler* self = + new(ELeave) CWrtUsbHandler( aHarvester , aFs ); CleanupStack::PushL( self ); self->ConstructL(); CleanupStack::Pop( self ); @@ -47,13 +62,13 @@ } // ============================================================================ -// CWidgetMMCHandler::CWidgetMMCHandler() +// CWrtUsbHandler::CWrtUsbHandler() // C++ default constructor // // @since 3.1 // ============================================================================ // -CWidgetMMCHandler::CWidgetMMCHandler( CWrtHarvester* aHarvester, +CWrtUsbHandler::CWrtUsbHandler( CWrtHarvester* aHarvester, RFs& aFs ) : CActive( CActive::EPriorityUserInput ), iHarvester( aHarvester ), @@ -64,159 +79,139 @@ } // ============================================================================ -// CWidgetMMCHandler::ConstructL() +// CWrtUsbHandler::ConstructL() // Symbian default constructor // // @since 3.1 // ============================================================================ // -void CWidgetMMCHandler::ConstructL() +void CWrtUsbHandler::ConstructL() { if ( KErrNone != ScanDrives( iDriveFlags ) ) { iDriveFlags = 0; - } - RDebug::Print(_L("iDriveFlags ConstructL() : %x %d"), iDriveFlags,iDriveFlags); + } } // ============================================================================ -// CWidgetMMCHandler::~CWidgetMMCHandler() +// CWrtUsbHandler::~CWrtUsbHandler() // destructor // // @since 3.1 // ============================================================================ -CWidgetMMCHandler::~CWidgetMMCHandler() +CWrtUsbHandler::~CWrtUsbHandler() { Cancel(); - } // ============================================================================ -// CWidgetMMCHandler::Start() +// CWrtUsbHandler::Start() // Start monitoring. // // @since 5.0 // ============================================================================ -void CWidgetMMCHandler::Start() +void CWrtUsbHandler::Start() { iFs.NotifyChange( ENotifyDisk, iStatus ); SetActive(); } // ============================================================================ -// CWidgetMMCHandler::RunL() +// CWrtUsbHandler::RunL() // Handle notifications of MMC events. // // @since 3.1 // ============================================================================ -void CWidgetMMCHandler::RunL() +void CWrtUsbHandler::RunL() { if ( iStatus == KErrNone ) - { - TInt driveFlags = 0; - TInt deltaDriveFlags = 0; - + { + //Call back Timer + iCallBackTimer = CPeriodic::NewL(CActive::EPriorityLow); + iCallBackTimer->Start(10000000,0,TCallBack(&TimerCallBack,this)); + } + } - User::After( 10000000 ); - - if ( KErrNone == ScanDrives( driveFlags ) ) - { - deltaDriveFlags = iDriveFlags ^ driveFlags; - - iDriveFlags = driveFlags; - } - - if ( deltaDriveFlags ) - { - //Unpluging USB from Mass storage . . . - if(iHarvester->IsInMSMode() == 1) - { - iHarvester->SetMSMode(0); - iHarvester->ClearAllOperations(); - iHarvester->UpdateL(); - - iFs.NotifyChange( ENotifyDisk, iStatus ); - SetActive(); - return; +void CWrtUsbHandler::DoScanAndUpdate() + { + TInt err = 0; + TInt driveFlags = 0; + TInt deltaDriveFlags = 0; + if ( KErrNone == ScanDrives( driveFlags ) ) + { + deltaDriveFlags = iDriveFlags ^ driveFlags; + iDriveFlags = driveFlags; + } + + if ( deltaDriveFlags ) + { + //Unpluging USB from Mass storage . . . + if(iHarvester->IsInMSMode() == 1) + { + iHarvester->SetMSMode(0); + iHarvester->ClearAllOperations(); + TRAP(err, iHarvester->UpdateL() ); + iFs.NotifyChange( ENotifyDisk, iStatus ); + SetActive(); + return; } - TVolumeInfo volInfo; - TInt temp = deltaDriveFlags; - TBool massMemAltered = EFalse; - TBool mmcAltered = EFalse; - for(TInt DriveNo = EDriveA+1 ; DriveNo<=EDriveY; DriveNo++ ) - { - + TVolumeInfo volInfo; + TInt temp = deltaDriveFlags; + TBool massMemAltered = EFalse; + for(TInt DriveNo = EDriveA+1 ; DriveNo<=EDriveY; DriveNo++ ) + { temp = temp >> 1; if( temp & 01) - { - switch (DriveNo) - { - case EDriveE : - { - massMemAltered = ETrue; - break; - } - case EDriveF: - { - - mmcAltered = ETrue; - break; - } - - } - } - + { + TUint status(0); + err = DriveInfo::GetDriveStatus( iFs, DriveNo , status ); + if(!err && (status & DriveInfo::EDriveExternallyMountable) && (status & DriveInfo::EDriveInternal )) + { + //Internal Memory + massMemAltered = ETrue; + } + } } - - if( !massMemAltered && mmcAltered) - { - iHarvester->UpdateL(); - } - else if( massMemAltered ) - { - iHarvester->SetMSMode(1); - iHarvester->UpdateL(); - } - + if( massMemAltered ) + { + iHarvester->SetMSMode(1); + } + + TRAP( err, iHarvester->UpdateL() ); } - } - - iFs.NotifyChange( ENotifyDisk, iStatus ); SetActive(); } + // ============================================================================ -// CWidgetMMCHandler::RunError() +// CWrtUsbHandler::RunError() // Ignore errors from RunL. // // @since 5.0 // ============================================================================ -TInt CWidgetMMCHandler::RunError( TInt /* aError */ ) +TInt CWrtUsbHandler::RunError( TInt /* aError */ ) { - return KErrNone; // indicates error was handled } // ============================================================================ -// CWidgetMMCHandler::DoCancel() +// CWrtUsbHandler::DoCancel() // Cancel the MMC event handler // // @since 3.1 // ============================================================================ -void CWidgetMMCHandler::DoCancel() +void CWrtUsbHandler::DoCancel() { - iFs.NotifyChangeCancel(); } /* Scans drives and records a bit flag for those that exist and are * suitable for installing widgets to. */ -TInt CWidgetMMCHandler::ScanDrives( TInt& aDriveFlags ) +TInt CWrtUsbHandler::ScanDrives( TInt& aDriveFlags ) { - // List all drives in the system TDriveList driveList; TInt error = iFs.DriveList( driveList ); @@ -259,3 +254,9 @@ return error; } +void CWrtUsbHandler::DeleteTimer() + { + iCallBackTimer->Cancel(); + delete iCallBackTimer; + iCallBackTimer = NULL; + } diff -r c8a366e56285 -r 60c5402cb945 widgets/widgetapp/group/WidgetUi.mmp --- a/widgets/widgetapp/group/WidgetUi.mmp Thu Sep 24 12:53:48 2009 +0300 +++ b/widgets/widgetapp/group/WidgetUi.mmp Mon Oct 26 08:28:45 2009 +0200 @@ -37,6 +37,7 @@ // RESOURCE INFO START RESOURCE ../Data/WidgetUi.rss +DEPENDS avkon.rsg HEADER TARGETPATH APP_RESOURCE_DIR #ifdef __S60_32__ @@ -64,6 +65,7 @@ #ifdef BRDO_WRT_HS_FF SOURCE cpspublisher.cpp #endif + START RESOURCE ../Data/WidgetUi_reg.rss DEPENDS widgetui.rsg // Do not change the UID below. diff -r c8a366e56285 -r 60c5402cb945 widgets/widgetapp/inc/WidgetUiNetworkListener.h --- a/widgets/widgetapp/inc/WidgetUiNetworkListener.h Thu Sep 24 12:53:48 2009 +0300 +++ b/widgets/widgetapp/inc/WidgetUiNetworkListener.h Mon Oct 26 08:28:45 2009 +0200 @@ -1,20 +1,22 @@ -/* -* Copyright (c) 2008, 2009 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: -* -*/ - +// +//============================================================================== +// Name : WidgetUiNetworkListener.h +// Part of : WidgetUI +// Interface : +// Description : +// Version : %version: 5 % +// +// Copyright 2008, 2009 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. +//============================================================================== +// #ifndef WIDGETUINETWORKLISTENER_H_ #define WIDGETUINETWORKLISTENER_H_ diff -r c8a366e56285 -r 60c5402cb945 widgets/widgetapp/inc/WidgetUiWindowManager.h --- a/widgets/widgetapp/inc/WidgetUiWindowManager.h Thu Sep 24 12:53:48 2009 +0300 +++ b/widgets/widgetapp/inc/WidgetUiWindowManager.h Mon Oct 26 08:28:45 2009 +0200 @@ -382,6 +382,8 @@ */ void NotifyConnecionChange(TBool aConn); TBrCtlDefs::TCursorSettings CursorShowMode() {return iWidgetCursorMode;} + + TBrCtlDefs::TEnterKeySettings EnterKeyMode() {return iWidgetEnterKeyMode;} /** * AnyWidgetOnHs @@ -423,7 +425,13 @@ */ void SetLastWidgetRestartTime(TTime aStartTime){iTimeLastWidgetOpen = aStartTime;} #endif // OOM_WIDGET_CLOSEALL - + /** + * CloseAllWidgets + * Basic pre-exit routine to make sure all widgets are closed out + * @param none + * @return none + */ + void CloseAllWidgets(); protected: /** @@ -566,6 +574,8 @@ TNetworkMode iNetworkMode; // unknown mode = 0, online mode = 1, offline mode = 2 TBool iNetworkConnected; // ETrue if there is an active network connection, else EFalse TBrCtlDefs::TCursorSettings iWidgetCursorMode; + TBrCtlDefs::TEnterKeySettings iWidgetEnterKeyMode; + #ifdef BRDO_WRT_HS_FF CCpsPublisher* iCpsPublisher; // Owned, interface to publish bitmap to CPS #endif diff -r c8a366e56285 -r 60c5402cb945 widgets/widgetapp/src/WidgetUiAppUi.cpp --- a/widgets/widgetapp/src/WidgetUiAppUi.cpp Thu Sep 24 12:53:48 2009 +0300 +++ b/widgets/widgetapp/src/WidgetUiAppUi.cpp Mon Oct 26 08:28:45 2009 +0200 @@ -166,6 +166,7 @@ { case EEikCmdExit: { + iWindowManager->CloseAllWidgets(); Exit(); break; } diff -r c8a366e56285 -r 60c5402cb945 widgets/widgetapp/src/WidgetUiNetworkListener.cpp --- a/widgets/widgetapp/src/WidgetUiNetworkListener.cpp Thu Sep 24 12:53:48 2009 +0300 +++ b/widgets/widgetapp/src/WidgetUiNetworkListener.cpp Mon Oct 26 08:28:45 2009 +0200 @@ -1,20 +1,22 @@ -/* -* Copyright (c) 2008, 2009 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: -* -*/ - +// +//============================================================================== +// Name : WidgetUiNetworkListener.cpp +// Part of : WidgetUI +// Interface : +// Description : +// Version : %version: 5 % +// +// Copyright 2008, 2009 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 "WidgetUiNetworkListener.h" diff -r c8a366e56285 -r 60c5402cb945 widgets/widgetapp/src/WidgetUiWindow.cpp --- a/widgets/widgetapp/src/WidgetUiWindow.cpp Thu Sep 24 12:53:48 2009 +0300 +++ b/widgets/widgetapp/src/WidgetUiWindow.cpp Mon Oct 26 08:28:45 2009 +0200 @@ -11,7 +11,7 @@ * * Contributors: * -* Description: +* Description: * */ @@ -121,7 +121,7 @@ iWidgetUiObserver = CWidgetUiObserver::NewL( *this ); iWidgetUiDialogsProviderProxy = CWidgetUiDialogsProviderProxy::NewL(*(iWindowManager.DialogsProvider()), NULL, *this); - + #ifdef BRDO_WRT_HS_FF iNetworkModeWait = new(ELeave) CActiveSchedulerWait(); #endif @@ -157,6 +157,7 @@ iWidgetUiObserver /* download observer */); //Set the cursor mode inside Widget iEngine->SetBrowserSettingL(TBrCtlDefs::ESettingsCursorShowMode, iWindowManager.CursorShowMode()); + iEngine->SetBrowserSettingL(TBrCtlDefs::ESettingsEnterKeyMode, iWindowManager.EnterKeyMode()); iEngine->AddLoadEventObserverL( iWidgetUiObserver ); iEngine->AddStateChangeObserverL( view ); @@ -190,9 +191,9 @@ { SetWindowStateMiniViewL( EMiniViewNotEnabled ); } - + iDlId = 0; - + // determine initial widget online/offline network state DetermineNetworkState(); } @@ -273,7 +274,7 @@ { switch(widgetMiniViewState) - { + { case 0: iWidgetWindowState.miniViewState = EMiniViewNotEnabled; break; case 1: iWidgetWindowState.miniViewState = EMiniViewEnabled; @@ -530,7 +531,7 @@ Engine()->MakeVisible(EFalse);// hide the active widget } if ( !aCurrent && (EPublishStart != WidgetMiniViewState()) ) - { + { iWidgetExtension->HandleCommandL ( (TInt)TBrCtlDefs::ECommandAppBackground + (TInt)TBrCtlDefs::ECommandIdBase ); if( iWindowManager.AnyWidgetOnHs() ) { @@ -630,7 +631,7 @@ { iMiniviewBitmap = new CFbsBitmap(); } - + if ( iMiniviewBitmap && iCpsPublisher) { TRAP_IGNORE( @@ -668,15 +669,16 @@ TBool CWidgetUiWindow::CheckNetworkAccessL() { // if widgets in offline mode, deny network access - if (iWindowManager.GetNetworkMode() == EOfflineMode) + if (iWindowManager.GetNetworkMode() == EOfflineMode && !( EMiniViewEnabled == WidgetMiniViewState() || + EMiniViewNotEnabled == WidgetMiniViewState() )) { - // if widget is in full view, offer user the option to go to online mode + // if widget is in full view, offer user the option to go to online mode.The widget should be in HS else dont ask HS for prompt. #ifdef BRDO_WRT_HS_FF if ( WidgetFullViewState() && WidgetMiniViewState() != EPublishStart ) { iCpsPublisher->NetworkConnectionAllowedL(); + iNetworkModeWait->Start(); } - iNetworkModeWait->Start(); #endif if (iWindowManager.GetNetworkMode() == EOfflineMode) { @@ -684,18 +686,18 @@ User::Leave( KErrAccessDenied ); } } - + // begin info.plist (declare EAllowNetworkAccess or EAllowFullAccess ?) RWidgetRegistryClientSession& widgetRegistry = iWindowManager.WidgetUIClientSession(); - CWidgetPropertyValue* propValue = widgetRegistry.GetWidgetPropertyValueL(iUid, EAllowNetworkAccess ); + CWidgetPropertyValue* propValue = widgetRegistry.GetWidgetPropertyValueL(iUid, EAllowNetworkAccess ); TInt networkAccess = *propValue; delete propValue; propValue = widgetRegistry.GetWidgetPropertyValueL(iUid, EAllowFullAccess ); TInt fullAccess = *propValue; delete propValue; - + if ( !( networkAccess || fullAccess ) ) { SetNetworkAccessGrant( EDeny ); @@ -733,7 +735,7 @@ } delete rep; } - + if ( prompt ) { CBrowserDialogsProvider* dialogProvider @@ -746,7 +748,7 @@ CleanupStack::PopAndDestroy( 3 ); // save prompt result for session SetNetworkAccessGrant( grant? EAllow : EDeny ); - + CheckUserPermissionChanged( grant ); } else @@ -779,7 +781,7 @@ // 2.1. deal with access point settings TInt ask( 1 ); TInt wmlId( KWmlNoDefaultAccessPoint ); - TInt snapId( KWmlNoDefaultSnapId ); + TInt snapId( KWmlNoDefaultSnapId ); CRepository* rep( NULL ); TRAPD( cenrepError, rep = CRepository::NewL( KCRUidBrowser ) ); if ( KErrNone == cenrepError ) @@ -789,12 +791,12 @@ (void)rep->Get( KBrowserNGDefaultSnapId, snapId ); } delete rep; - if ( ask == EBrowserCenRepApSelModeDestination && - ( snapId != KWmlNoDefaultSnapId) ) - { - iWindowManager.GetConnection()->SetRequestedSnap( snapId ); - iWindowManager.GetConnection()->SetConnectionType( CMManager::EDestination ); - } + if ( ask == EBrowserCenRepApSelModeDestination && + ( snapId != KWmlNoDefaultSnapId) ) + { + iWindowManager.GetConnection()->SetRequestedSnap( snapId ); + iWindowManager.GetConnection()->SetConnectionType( CMManager::EDestination ); + } if ( !ask && (KWmlNoDefaultAccessPoint != wmlId) ) { @@ -840,7 +842,7 @@ // kicks in and sets a EDeny. User::Leave( connFailure ); } - *aNewConn = ETrue; + *aNewConn = ETrue; } } @@ -933,7 +935,7 @@ aTypeArray, aDesArray, paramFound ); - + HBufC8* contentType8 = 0; if ( !paramFound ) { @@ -945,7 +947,7 @@ // 16 bit buffer copied into 8 bit buffer. contentType8->Des().Copy( contentType ); } - + //Get the download Id of the transaction. //Because, resource loader will not delete the download //So after handling the download, it will be cleared. @@ -954,16 +956,16 @@ aTypeArray, aDesArray, paramFound ); - + TLex lex(dlId); - User::LeaveIfError(lex.Val(iDlId)); - + User::LeaveIfError(lex.Val(iDlId)); + TDataType dataType( *contentType8 ); CAiwGenericParamList* genericParamList = BrCtlParamList2GenericParamListL( aTypeArray, aDesArray ); CleanupStack::PushL( genericParamList ); RFile tempFile; - + iWindowManager.DocHandler().SetExitObserver(this); iWindowManager.DocHandler().OpenTempFileL( fileName, tempFile ); CleanupClosePushL( tempFile ); @@ -1120,10 +1122,10 @@ TNetworkState currNetState; RWidgetRegistryClientSession& widgetRegistry = iWindowManager.WidgetUIClientSession(); TInt inMiniView = widgetRegistry.IsWidgetInMiniView( iUid); - CWidgetPropertyValue* propValue = widgetRegistry.GetWidgetPropertyValueL( iUid, EAllowNetworkAccess ); + CWidgetPropertyValue* propValue = widgetRegistry.GetWidgetPropertyValueL( iUid, EAllowNetworkAccess ); TInt netAccessWdgtProp = *propValue; // AllowNetworkAccess in the info.plist file - - if ( netAccessWdgtProp && ((inMiniView && (iWindowManager.GetNetworkMode() == (TInt)EOnlineMode)) + + if ( netAccessWdgtProp && ((inMiniView && (iWindowManager.GetNetworkMode() == (TInt)EOnlineMode)) || (!inMiniView && iUserPermission)) ) { if ( iWindowManager.GetNetworkConn() ) @@ -1139,7 +1141,7 @@ { currNetState = ENetworkNotAllowed; } - + if ( iNetworkState != currNetState ) { iNetworkState = currNetState; @@ -1173,7 +1175,7 @@ //Check if the container rect needs change and then call setRect if(clientRect != iWindowManager.View()->Container()->Rect()) iWindowManager.View()->Container()->SetRect(clientRect); - + if (!aTextBoxUpdate) { // status pane always off unless in text box diff -r c8a366e56285 -r 60c5402cb945 widgets/widgetapp/src/WidgetUiWindowManager.cpp --- a/widgets/widgetapp/src/WidgetUiWindowManager.cpp Thu Sep 24 12:53:48 2009 +0300 +++ b/widgets/widgetapp/src/WidgetUiWindowManager.cpp Mon Oct 26 08:28:45 2009 +0200 @@ -146,6 +146,8 @@ { TInt strictMode; TInt cursorMode = -1; + TInt enterKeyMode = -1; + if (cenRep->Get( KWidgetInstallerStrictMode, strictMode ) == KErrNone) { iStrictMode = strictMode; @@ -154,6 +156,12 @@ { iWidgetCursorMode = (TBrCtlDefs::TCursorSettings) cursorMode; } + + if (cenRep->Get( KWidgetEnterKeyMode, enterKeyMode ) == KErrNone) + { + iWidgetEnterKeyMode = (TBrCtlDefs::TEnterKeySettings) enterKeyMode; + } + delete cenRep; } @@ -1286,6 +1294,16 @@ } #endif //OOM_WIDGET_CLOSEALL +void CWidgetUiWindowManager::CloseAllWidgets() + { + TInt nWidgetsCount = iWindowList.Count(); + for ( TInt i = (nWidgetsCount-1); i >= 0; i-- ) + { + CWidgetUiWindow* window = iWindowList[i]; + delete window; + } + iWindowList.Reset(); + } void CWidgetUiWindowManager::SendAppToBackground() { diff -r c8a366e56285 -r 60c5402cb945 widgets/widgetinstaller/conf/widgetinstaller.confml Binary file widgets/widgetinstaller/conf/widgetinstaller.confml has changed diff -r c8a366e56285 -r 60c5402cb945 widgets/widgetinstaller/conf/widgetinstaller_1028281F.crml Binary file widgets/widgetinstaller/conf/widgetinstaller_1028281F.crml has changed diff -r c8a366e56285 -r 60c5402cb945 widgets/widgetinstaller/group/WidgetInstallerUI.mmp --- a/widgets/widgetinstaller/group/WidgetInstallerUI.mmp Thu Sep 24 12:53:48 2009 +0300 +++ b/widgets/widgetinstaller/group/WidgetInstallerUI.mmp Mon Oct 26 08:28:45 2009 +0200 @@ -37,6 +37,7 @@ END START RESOURCE ../data/WidgetInstallerUI.rss +DEPENDS avkon.rsg DEPENDS swinstcommonui.rsg HEADER TARGETPATH Resource diff -r c8a366e56285 -r 60c5402cb945 widgets/widgetinstaller/inc/WidgetInstallerInternalCRKeys.h --- a/widgets/widgetinstaller/inc/WidgetInstallerInternalCRKeys.h Thu Sep 24 12:53:48 2009 +0300 +++ b/widgets/widgetinstaller/inc/WidgetInstallerInternalCRKeys.h Mon Oct 26 08:28:45 2009 +0200 @@ -40,4 +40,9 @@ // The setting to define the cursor show mode inside widgets // Valid values: 0 = not showing the cursor, 1 = cursor shown const TUint32 KWidgetCursorShowMode = 0x00000005; + +// Controls whether enter key can activate a link or just has a default behavior. +const TUint32 KWidgetEnterKeyMode = 0x00000006; + + #endif