KIS000738 - Setting access point ID for Browser Control Interface has no effect in S60 3rd Edition, Feature Pack 1
From Forum Nokia Wiki
ID | KIS000738 | Creation date | August 31, 2007, updated January 9, 2008 |
Platform | S60 3rd Edition, Feature Pack 1 | Devices | |
Category | Symbian C++ | Subcategory | Nokia Web Browser |
Keywords (APIs, classes, methods, functions): |
Overview
Setting the access point ID for Browser Control Interface (CBrCtlInterface) does not have any effect in S60 3rd Edition, Feature Pack 1 devices.
Description
In S60 3rd Edition, the access point to be used for the Browser Control Interface can be set with
iBrCtlInterface->SetBrowserSettingL( TBrCtlDefs::ESettingsApId, apId );
After this, the access point with the specified ID (apId) will be used for the network connection automatically, without prompting the AP selection dialog.
In S60 3rd Edition, Feature Pack 1, a different Browser engine is used for Browser Control Interface. Calling the above function with a valid access point has no effect, and the access point selection dialog is shown every time when opening a URL using this API.
Solution
MBrCtlSpecialLoadObserver class has a virtual NetworkConnectionNeededL() member function that is called every time when a network connection is needed. A new class must be inherited from MBrCtlSpecialLoadObserver and this class has to implement its own network connection in the NetworkConnectionNeededL() function. The object of this user-implemented class can be passed as a parameter to CreateBrowserControlL() which creates the browser controller.
CMySpecialLoadObserver member variables
RSocketServ iSocketServer; RConnection iConnection; TBool iFirstTime; //Initial value should be ETrue
void CMySpecialLoadObserver::NetworkConnectionNeededL( TInt* aConnectionPtr, TInt* aSockSvrHandle, TBool* aNewConn, TApBearerType* aBearerType ) { *aBearerType = EApBearerTypeAllBearers; if(iFirstTime) { //New connection is established only once User::LeaveIfError(iSocketServer.Connect(KESockDefaultMessageSlots)); User::LeaveIfError(iConnection.Open(iSocketServer, KConnectionTypeDefault)); TCommDbConnPref prefs; prefs.SetDialogPreference(ECommDbDialogPrefDoNotPrompt); prefs.SetDirection(ECommDbConnectionDirectionOutgoing); prefs.SetIapId(2); //preferred IAP User::LeaveIfError(iConnection.Start(prefs)); *aNewConn = ETrue; iFirstTime = EFalse; } else { *aNewConn = EFalse; } *aConnectionPtr = reinterpret_cast<TInt>(&iConnection); *aSockSvrHandle = iSocketServer.Handle(); return; }