Revision: 201021 RCL_3
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 09 Jun 2010 10:52:50 +0300
branchRCL_3
changeset 42 a1a5d4e727e8
parent 41 4bd5176e1bc8
child 44 800203832575
Revision: 201021 Kit: 2010123
browserutilities/downloadmgr/DownloadMgrClntSrv/src/DownloadMgrSrvSession.cpp
browserutilities/multipartparser/group/MultipartParser.mmp
browserutilities/schemehandler/SchemeApp/data/SchemeApp_reg.rss
browserutilities/schemehandler/SchemeApp/src/SchemeAppUi.cpp
browserutilities/schemehandler/SchemeDispatcher/group/SchemeDispatcher.mmp
browserutilities/xmlparser/group/XMLInterface.mmp
webengine/osswebengine/WebCore/bindings/js/kjs_window.cpp
webengine/osswebengine/WebCore/page/Page.cpp
webengine/osswebengine/WebCore/page/symbian/WebCoreFrameBridge.cpp
webengine/osswebengine/WebCore/platform/network/symbian/HttpCacheSupply.cpp
webengine/osswebengine/WebCore/platform/network/symbian/HttpCacheSupply.h
webengine/osswebengine/WebCore/platform/network/symbian/HttpConnection.cpp
webengine/osswebengine/WebCore/platform/network/symbian/HttpSessionManager.cpp
webengine/osswebengine/WebCore/platform/network/symbian/MultipartContentHandler.cpp
webengine/osswebengine/WebCore/platform/network/symbian/ResourceLoaderDelegate.cpp
webengine/osswebengine/WebCore/rendering/RenderText.cpp
webengine/osswebengine/WebKit/s60/misc/WebTabbedNavigation.cpp
webengine/osswebengine/WebKit/s60/plugins/PluginSkin.cpp
webengine/osswebengine/WebKit/s60/plugins/PluginWin.cpp
webengine/osswebengine/WebKit/s60/plugins/PluginWin.h
webengine/osswebengine/WebKit/s60/webcoresupport/WebEditorClient.cpp
webengine/osswebengine/WebKit/s60/webview/BrCtl.cpp
webengine/osswebengine/WebKit/s60/webview/BrCtl.h
webengine/osswebengine/WebKit/s60/webview/WebFepTextEditor.cpp
webengine/osswebengine/WebKit/s60/webview/WebFepTextEditor.h
webengine/osswebengine/WebKit/s60/webview/WebFrame.cpp
webengine/osswebengine/WebKit/s60/webview/WebFrameView.cpp
webengine/osswebengine/WebKit/s60/webview/WebFrameView.h
webengine/osswebengine/WebKit/s60/webview/WebPageFullScreenHandler.cpp
webengine/osswebengine/WebKit/s60/webview/WebPointerEventHandler.cpp
webengine/osswebengine/WebKit/s60/webview/WebPointerEventHandler.h
webengine/osswebengine/WebKit/s60/webview/WebScrollbarDrawer.cpp
webengine/osswebengine/WebKit/s60/webview/WebView.cpp
webengine/osswebengine/WebKit/s60/webview/WebView.h
webengine/osswebengine/webkit/s60/webview/WebGestureInterface.cpp
webengine/widgetengine/src/WrtPlatform.cpp
webengine/wmlengine/src/FileLoader/src/fileloader_cfilehandler.cpp
webengine/wmlengine/src/fbox/src/FBOXCEpoc32InputBox.cpp
widgets/widgetapp/src/WidgetUiWindow.cpp
widgets/widgetinstaller/group/WidgetInstallerUI.mmp
--- a/browserutilities/downloadmgr/DownloadMgrClntSrv/src/DownloadMgrSrvSession.cpp	Tue May 25 13:52:38 2010 +0300
+++ b/browserutilities/downloadmgr/DownloadMgrClntSrv/src/DownloadMgrSrvSession.cpp	Wed Jun 09 10:52:50 2010 +0300
@@ -145,6 +145,7 @@
     if( iComplete || ( KErrNone != err ) )
         {
         // Only the syncron requests has to be completed here!
+        if ((!aMessage.IsNull()) && (!CurrentMessage().IsNull())  )
 	    aMessage.Complete( err );
         }
 	}
@@ -354,8 +355,9 @@
     CArrayPtrFlat<CHttpDownload>* currentDownloads = iClientAppInstance->DownloadsL();
 	TPckg<TInt> countPckg( currentDownloads->Count() );
 	TPckg<TInt> sessionId( iSessionId );
-
+  if (!CurrentMessage().IsNull())
     Write( 1, CurrentMessage(), countPckg );
+  if (!CurrentMessage().IsNull())
     Write( 3, CurrentMessage(), sessionId );
 
     CLOG_NAME_2( _L("Session_%x_%x"), uidPckg().iUid, iSessionId );
--- a/browserutilities/multipartparser/group/MultipartParser.mmp	Tue May 25 13:52:38 2010 +0300
+++ b/browserutilities/multipartparser/group/MultipartParser.mmp	Wed Jun 09 10:52:50 2010 +0300
@@ -48,7 +48,8 @@
 SOURCE  GZipBufMgr.cpp
 
 LIBRARY  euser.lib
-LIBRARY  estlib.lib
+LIBRARY  libc.lib
+LIBRARY  libm.lib
 LIBRARY  InetProtUtil.lib
 LIBRARY  estor.lib
 LIBRARY	 ezlib.lib
--- a/browserutilities/schemehandler/SchemeApp/data/SchemeApp_reg.rss	Tue May 25 13:52:38 2010 +0300
+++ b/browserutilities/schemehandler/SchemeApp/data/SchemeApp_reg.rss	Wed Jun 09 10:52:50 2010 +0300
@@ -17,7 +17,7 @@
 
 
 #include <appinfo.rh>
-#include <SchemeApp.rsg>
+#include <schemeapp.rsg>
 #include <data_caging_paths_strings.hrh>
 
 
--- a/browserutilities/schemehandler/SchemeApp/src/SchemeAppUi.cpp	Tue May 25 13:52:38 2010 +0300
+++ b/browserutilities/schemehandler/SchemeApp/src/SchemeAppUi.cpp	Wed Jun 09 10:52:50 2010 +0300
@@ -23,7 +23,7 @@
 #include <schemehandler.h>
 #include "SchemeAppUi.h"
 #include "Scheme.hrh"
-#include <SchemeApp.rsg>
+#include <schemeapp.rsg>
 #include <apgcli.h>
 #include <avkon.hrh>
 #include <apparc.h>
--- a/browserutilities/schemehandler/SchemeDispatcher/group/SchemeDispatcher.mmp	Tue May 25 13:52:38 2010 +0300
+++ b/browserutilities/schemehandler/SchemeDispatcher/group/SchemeDispatcher.mmp	Wed Jun 09 10:52:50 2010 +0300
@@ -62,7 +62,7 @@
 LIBRARY     apmime.lib
 LIBRARY     apparc.lib
 LIBRARY     efsrv.lib
-LIBRARY     BROWSERTELSERVICE.LIB
+LIBRARY     BrowserTelService.lib
 LIBRARY     INETPROTUTIL.LIB
 LIBRARY     estor.lib
 LIBRARY     ws32.lib
--- a/browserutilities/xmlparser/group/XMLInterface.mmp	Tue May 25 13:52:38 2010 +0300
+++ b/browserutilities/xmlparser/group/XMLInterface.mmp	Wed Jun 09 10:52:50 2010 +0300
@@ -55,7 +55,7 @@
 LIBRARY		euser.lib
 LIBRARY		bafl.lib
 LIBRARY		charconv.lib 
-LIBRARY		cxmlparser.lib
+LIBRARY		cXmlParser.lib
 
 #ifdef __S60_32__
 LANG sc 
--- a/webengine/osswebengine/WebCore/bindings/js/kjs_window.cpp	Tue May 25 13:52:38 2010 +0300
+++ b/webengine/osswebengine/WebCore/bindings/js/kjs_window.cpp	Wed Jun 09 10:52:50 2010 +0300
@@ -100,6 +100,7 @@
         , m_evt(0)
         , m_dialogArguments(0)
         , m_returnValueSlot(0)
+        , m_paused(false)
     {
     }
 
@@ -113,6 +114,8 @@
     JSValue** m_returnValueSlot;
     typedef HashMap<int, DOMWindowTimer*> TimeoutsMap;
     TimeoutsMap m_timeouts;
+    RArray<int> m_timersToBeCleared;
+    bool m_paused;
 };
 
 // ==========================================================================================
@@ -767,7 +770,8 @@
 Window::~Window()
 {
     clearAllTimeouts();
-
+    d->m_timersToBeCleared.Close();
+    
     // Clear any backpointers to the window
 
     ListenersMap::iterator i2 = d->jsEventListeners.begin();
@@ -2087,6 +2091,8 @@
             }
             impl()->frame()->page()->chrome()->wait(interval);
             a->execute(this);
+            // clear the event after it is handled. 
+            d->m_evt = 0; 
             return lastUsedTimeoutId;
         }
     }
@@ -2128,6 +2134,7 @@
     if (count == 0)
         return 0;
 
+    d->m_paused = true;
     PausedTimeout* t = new PausedTimeout [count];
     PausedTimeouts* result = new PausedTimeouts(t, count);
 
@@ -2157,15 +2164,21 @@
     PausedTimeout* array = timeouts->takeTimeouts();
     for (size_t i = 0; i != count; ++i) {
         int timeoutId = array[i].timeoutId;
-        DOMWindowTimer* timer = new DOMWindowTimer(timeoutId, array[i].nestingLevel, this, array[i].action);
-        d->m_timeouts.set(timeoutId, timer);
-        timer->start(array[i].nextFireInterval, array[i].repeatInterval);
+        if (KErrNotFound == d->m_timersToBeCleared.Find(timeoutId)) {
+            DOMWindowTimer* timer = new DOMWindowTimer(timeoutId, array[i].nestingLevel, this, array[i].action);
+            d->m_timeouts.set(timeoutId, timer);
+            timer->start(array[i].nextFireInterval, array[i].repeatInterval);
+        }
     }
     delete [] array;
+    d->m_timersToBeCleared.Reset();
+    d->m_paused = false;
 }
 
 void Window::clearTimeout(int timeoutId, bool delAction)
 {
+    if(d->m_paused)
+        d->m_timersToBeCleared.Append(timeoutId);
     WindowPrivate::TimeoutsMap::iterator it = d->m_timeouts.find(timeoutId);
     if (it == d->m_timeouts.end())
         return;
--- a/webengine/osswebengine/WebCore/page/Page.cpp	Tue May 25 13:52:38 2010 +0300
+++ b/webengine/osswebengine/WebCore/page/Page.cpp	Wed Jun 09 10:52:50 2010 +0300
@@ -99,6 +99,8 @@
 
 Page::~Page()
 {
+    // call the garbage collection for the javascript object, before the plugin is destroyed. 
+    KJS::Collector::collect();
     m_mainFrame->setView(0);
     setGroupName(String());
     allPages->remove(this);
--- a/webengine/osswebengine/WebCore/page/symbian/WebCoreFrameBridge.cpp	Tue May 25 13:52:38 2010 +0300
+++ b/webengine/osswebengine/WebCore/page/symbian/WebCoreFrameBridge.cpp	Wed Jun 09 10:52:50 2010 +0300
@@ -321,7 +321,7 @@
     m_rtl = isRtl;
     // update rtl only for mainframe
     if (m_frame && m_frame == m_frame->page()->mainFrame()) {
-        if (control(m_frame)->brCtlLayoutObserver())
+        if (control(m_frame)->brCtlLayoutObserver() && m_rtl)
             control(m_frame)->brCtlLayoutObserver()->NotifyLayoutChange(isRtl ? EOriginTopRight : EOriginTopLeft);
         if (kit(m_frame->page())->pageScaler())
             kit(m_frame->page())->pageScaler()->SetRelativePosition(0, 3, isRtl ? CPageScaler::ETopLeft : CPageScaler::ETopRight);
--- a/webengine/osswebengine/WebCore/platform/network/symbian/HttpCacheSupply.cpp	Tue May 25 13:52:38 2010 +0300
+++ b/webengine/osswebengine/WebCore/platform/network/symbian/HttpCacheSupply.cpp	Wed Jun 09 10:52:50 2010 +0300
@@ -23,6 +23,7 @@
 #include "HttpConnection.h"
 #include "ResourceLoaderDelegate.h"
 #include "StaticObjectsContainer.h"
+#include "HttpDlConnection.h"
 
 #include <http/RHTTPTransaction.h>
 #include <http/mhttpdatasupplier.h>
@@ -227,65 +228,70 @@
 void CHttpCacheSupply::SupplyResponseL()
 {
     RHTTPTransaction* trans = m_httpTransaction->HttpTransaction();
+    if(!trans && m_dlTransaction){
+    	SupplyToDownloadManager();
+    }
+    else{
     //
-    switch( m_reponseState )
-    {
-        case THTTPEvent::EGotResponseHeaders:
-            {
-                m_failed = EFalse;
-                if( m_cacheManager->RequestHeadersL( *trans, m_cacheEntry ) == KErrNone ) {
-                    //
-                    trans->Response().SetStatusCode( HTTPStatus::EOk );
-                    //
-                    m_httpTransaction->MHFRunL( THTTPEvent::EGotResponseHeaders );
-                    // move to the next state
-                    m_reponseState = THTTPEvent::EGotResponseBodyData;
+        switch( m_reponseState )
+        {
+            case THTTPEvent::EGotResponseHeaders:
+                {
+                    m_failed = EFalse;
+                    if( m_cacheManager->RequestHeadersL( *trans, m_cacheEntry ) == KErrNone ) {
+                        //
+                        trans->Response().SetStatusCode( HTTPStatus::EOk );
+                        //
+                        m_httpTransaction->MHFRunL( THTTPEvent::EGotResponseHeaders );
+                        // move to the next state
+                        m_reponseState = THTTPEvent::EGotResponseBodyData;
+                    }
+                    else {
+                        // move to the next state
+                        m_failed = ETrue;
+                        // move to the next state
+                        m_reponseState = THTTPEvent::EResponseComplete;
+                    }
+                    break;
                 }
-                else {
-                    // move to the next state
-                    m_failed = ETrue;
+            case THTTPEvent::EGotResponseBodyData:
+                {
+                    SendBodyL();
                     // move to the next state
                     m_reponseState = THTTPEvent::EResponseComplete;
+                    break;
                 }
-                break;
-            }
-        case THTTPEvent::EGotResponseBodyData:
-            {
-                SendBodyL();
-                // move to the next state
-                m_reponseState = THTTPEvent::EResponseComplete;
-                break;
-            }
-        case THTTPEvent::EResponseComplete:
-            {
-                m_httpTransaction->MHFRunL(THTTPEvent::EResponseComplete );
-                // move to the next state
-                m_reponseState = !m_failed ? THTTPEvent::ESucceeded : THTTPEvent::EFailed;
+            case THTTPEvent::EResponseComplete:
+                {
+                    m_httpTransaction->MHFRunL(THTTPEvent::EResponseComplete );
+                    // move to the next state
+                    m_reponseState = !m_failed ? THTTPEvent::ESucceeded : THTTPEvent::EFailed;
+                    break;
+                }
+            case THTTPEvent::ESucceeded:
+                {
+                    // move to the next state
+                    m_reponseState = THTTPEvent::EClosed;
+                    // cancel timer
+                    m_responseTimer->Cancel();
+                    //
+                    m_httpTransaction->MHFRunL(THTTPEvent::ESucceeded );
+                    // this obj is destroyed at this point
+                    break;
+                }
+            case THTTPEvent::EFailed:
+                {
+                    // move to the next state
+                    m_reponseState = THTTPEvent::EClosed;
+                    // cancel timer
+                    m_responseTimer->Cancel();
+                    m_httpTransaction->MHFRunL(THTTPEvent::EFailed );
+                    // this obj is destroyed at this point
+                    break;
+                }
+            default:
                 break;
-            }
-        case THTTPEvent::ESucceeded:
-            {
-                // move to the next state
-                m_reponseState = THTTPEvent::EClosed;
-                // cancel timer
-                m_responseTimer->Cancel();
-                //
-                m_httpTransaction->MHFRunL(THTTPEvent::ESucceeded );
-                // this obj is destroyed at this point
-                break;
-            }
-        case THTTPEvent::EFailed:
-            {
-                // move to the next state
-                m_reponseState = THTTPEvent::EClosed;
-                // cancel timer
-                m_responseTimer->Cancel();
-                m_httpTransaction->MHFRunL(THTTPEvent::EFailed );
-                // this obj is destroyed at this point
-                break;
-            }
-        default:
-            break;
+        }
     }
 }
 
@@ -336,4 +342,106 @@
         m_responseTimer->Start( KResponseTimeout, KResponseTimeout, TCallBack( &ResponseCallbackL, this ) );
 }
 
+// -----------------------------------------------------------------------------
+// CHttpCacheSupply::SetDownloadTransaction
+//------------------------------------------------------------------------------
+void CHttpCacheSupply::SetDownloadTransaction(RHTTPTransaction* transaction)
+{
+    m_dlTransaction = transaction;
+}
+
+// -----------------------------------------------------------------------------
+// CHttpCacheSupply::SupplyToDownloadManager
+//------------------------------------------------------------------------------
+void CHttpCacheSupply::SupplyToDownloadManager()
+{
+    RHTTPTransactionPropertySet propSet = m_dlTransaction->PropertySet();
+    RStringPool strPool = m_dlTransaction->Session().StringPool();
+    THTTPHdrVal callback;
+    RStringF downloadPropStr;
+    HttpDlConnection* httpDlConnection = HttpDlConnection::dlConnectionFromTransaction(*m_dlTransaction);
+    if (httpDlConnection) {
+        RStringF downloadPropStr = strPool.OpenFStringL( _L8( "TransactionCallback" ) );
+        if( propSet.Property( downloadPropStr, callback ) ){
+            MHTTPTransactionCallback* callbackPtr = REINTERPRET_CAST( MHTTPTransactionCallback*, callback.Int() );
+            if( callbackPtr ){
+                switch( m_reponseState )
+                    {
+                    case THTTPEvent::EGotResponseHeaders:
+                        {
+                            m_failed = EFalse;
+                            if( m_cacheManager->RequestHeadersL( *m_dlTransaction, m_cacheEntry ) == KErrNone ) {
+                                //
+                                m_dlTransaction->Response().SetStatusCode( HTTPStatus::EOk );
+                                //
+                                callbackPtr->MHFRunL( *m_dlTransaction,THTTPEvent::EGotResponseHeaders );
+                                // move to the next state
+                                m_reponseState = THTTPEvent::EGotResponseBodyData;
+                            }
+                            else {
+                                // move to the next state
+                                m_failed = ETrue;
+                                // move to the next state
+                                m_reponseState = THTTPEvent::EResponseComplete;
+                            }
+                            break;
+                        }
+                    case THTTPEvent::EGotResponseBodyData:
+                        {
+                        //
+                         TBool lastChunk;
+                         // currently it is always the last chunk
+                         HBufC8* body = m_cacheManager->RequestNextChunkL( *m_dlTransaction, lastChunk, m_cacheEntry );
+                         if( body ) {
+                             CleanupStack::PushL( body );
+                             // create datasupplier and attach it to the transaction
+                             if( !m_dataSupplier )
+                                 m_dataSupplier = CHttpCacheDataSupplier::NewL( body );
+                             m_dlTransaction->Response().SetBody( *m_dataSupplier );
+                             CleanupStack::Pop(); // body
+                             callbackPtr->MHFRunL(*m_dlTransaction,THTTPEvent::EGotResponseBodyData);
+                         }
+                         else {
+                             // move to the next state
+                             m_failed = ETrue;
+                             }   
+                            // move to the next state
+                            m_reponseState = THTTPEvent::EResponseComplete;
+                            break;
+                        }
+                    case THTTPEvent::EResponseComplete:
+                        {
+                            callbackPtr->MHFRunL(*m_dlTransaction, THTTPEvent::EResponseComplete );
+                            // move to the next state
+                            m_reponseState = !m_failed ? THTTPEvent::ESucceeded : THTTPEvent::EFailed;
+                            break;
+                        }
+                    case THTTPEvent::ESucceeded:
+                        {
+                            // move to the next state
+                            m_reponseState = THTTPEvent::EClosed;
+                            // cancel timer
+                            m_responseTimer->Cancel();
+                            //
+                            callbackPtr->MHFRunL(*m_dlTransaction, THTTPEvent::ESucceeded );
+                            // this obj is destroyed at this point
+                            break;
+                        }
+                    case THTTPEvent::EFailed:
+                        {
+                            // move to the next state
+                            m_reponseState = THTTPEvent::EClosed;
+                            // cancel timer
+                            m_responseTimer->Cancel();
+                            callbackPtr->MHFRunL(*m_dlTransaction, THTTPEvent::EFailed );
+                            // this obj is destroyed at this point
+                            break;
+                        }
+                    default:
+                        break;
+                }                    
+            }
+        }
+	}
+}	
 //  End of File
--- a/webengine/osswebengine/WebCore/platform/network/symbian/HttpCacheSupply.h	Tue May 25 13:52:38 2010 +0300
+++ b/webengine/osswebengine/WebCore/platform/network/symbian/HttpCacheSupply.h	Wed Jun 09 10:52:50 2010 +0300
@@ -135,6 +135,14 @@
         * @return
         */
 		void ResumeSupply();
+		
+        /**
+        *
+        * SetTransaction
+        * @param aTransaction
+        * @return
+        */		
+		void SetDownloadTransaction(RHTTPTransaction* aTransaction);
 
     private:
 
@@ -177,6 +185,14 @@
         * @return
         */
         void SendBodyL();
+        
+        /**
+        *
+        * @SupplyToDownloadManager
+        * @param
+        * @return
+        */        
+        void SupplyToDownloadManager();
 
     private:    // Data
 
@@ -198,6 +214,8 @@
         TBool							m_closed;
 
         CHttpCacheDataSupplier*         m_dataSupplier;
+        
+        RHTTPTransaction*               m_dlTransaction;
   };
 
 #endif      // CHTTPCACHESUPPLY_H
--- a/webengine/osswebengine/WebCore/platform/network/symbian/HttpConnection.cpp	Tue May 25 13:52:38 2010 +0300
+++ b/webengine/osswebengine/WebCore/platform/network/symbian/HttpConnection.cpp	Wed Jun 09 10:52:50 2010 +0300
@@ -1287,6 +1287,11 @@
     // remove own address from transaction properties
     m_transaction->PropertySet().RemoveProperty(session.StringPool().StringF(HttpFilterCommonStringsExt::ESelfPtr,
         HttpFilterCommonStringsExt::GetTable()));
+    if(m_cacheSupply->IsSupplying())
+        {
+        //Download is started from cache.
+        m_cacheSupply->SetDownloadTransaction(m_transaction);
+        }
     m_transaction = NULL;
     m_isDone = true;
     return trans;
--- a/webengine/osswebengine/WebCore/platform/network/symbian/HttpSessionManager.cpp	Tue May 25 13:52:38 2010 +0300
+++ b/webengine/osswebengine/WebCore/platform/network/symbian/HttpSessionManager.cpp	Wed Jun 09 10:52:50 2010 +0300
@@ -273,10 +273,13 @@
 void HttpSessionManager::retryTransactions()
 {
     Vector<HttpConnection *> requests;
-    
+
+    if (m_sessionRunning)
+    {
     TBool newConn = ETrue;
     m_httpSession.ConnectionInfo().SetPropertyL(m_httpSession.StringPool().StringF(HttpFilterCommonStringsExt::EHttpNewConnFlag, HttpFilterCommonStringsExt::GetTable()), THTTPHdrVal((TBool)newConn));
- 
+    }
+
     for(HashMap<HttpConnection *, ResourceHandle *>::iterator tmpit = m_pendingHttpRequests.begin();
         tmpit != m_pendingHttpRequests.end(); ++tmpit)
         {
--- a/webengine/osswebengine/WebCore/platform/network/symbian/MultipartContentHandler.cpp	Tue May 25 13:52:38 2010 +0300
+++ b/webengine/osswebengine/WebCore/platform/network/symbian/MultipartContentHandler.cpp	Wed Jun 09 10:52:50 2010 +0300
@@ -158,9 +158,17 @@
     const TStringTable& stringTable = session.GetTable();
     if(hdrs.GetParam(stringPool.StringF( HTTP::EContentType, stringTable ),
         stringPool.StringF( HttpFilterCommonStringsExt::EBoundary,
-        HttpFilterCommonStringsExt::GetTable()), hdrVal) == KErrNone) {
+        HttpFilterCommonStringsExt::GetTable()), hdrVal) != KErrNone) {
+            _LIT8(KBoundary, ".boundary");
+            RStringF boundaryStrf = stringPool.OpenFStringL(KBoundary);
+            if(hdrs.GetParam(stringPool.StringF(HTTP::EContentType, stringTable), boundaryStrf, hdrVal) == KErrNone) {
+                boundPtr.Set(hdrVal.StrF().DesC());
+                }
+        boundaryStrf.Close();
+    }
+    else {
         boundPtr.Set(hdrVal.StrF().DesC());
-    }
+        }
     // locate any cache control headers in top-level response
     TPtrC8 expiresPtr;
     TPtrC8 cacheControlPtr;
--- a/webengine/osswebengine/WebCore/platform/network/symbian/ResourceLoaderDelegate.cpp	Tue May 25 13:52:38 2010 +0300
+++ b/webengine/osswebengine/WebCore/platform/network/symbian/ResourceLoaderDelegate.cpp	Wed Jun 09 10:52:50 2010 +0300
@@ -196,6 +196,7 @@
                     }
                     else {
                         enterStatus = HttpUiCallbacks::EExitingSecurePage;
+                        m_httpSessionManager.setInSecureConnection(EFalse);
                     }
                 } // if (!secureUrl)
                 else {
--- a/webengine/osswebengine/WebCore/rendering/RenderText.cpp	Tue May 25 13:52:38 2010 +0300
+++ b/webengine/osswebengine/WebCore/rendering/RenderText.cpp	Wed Jun 09 10:52:50 2010 +0300
@@ -863,6 +863,9 @@
 
 void RenderText::setTextInternal(PassRefPtr<StringImpl> text, bool backspace)
 {
+#if PLATFORM(SYMBIAN)
+    unsigned oldlength = m_text->length();
+#endif
     m_text = text;
     ASSERT(m_text);
 
@@ -929,7 +932,16 @@
                 	m_text = m_text->secure(bullet);
                 }
                 else{
-                    m_text = m_text->secureShowOffset(bullet, m_offset);
+                    
+                    if(oldlength <= m_text->length())
+                        {
+                        m_offset =  m_text->length() - 1 ;
+                        m_text = m_text->secureShowOffset(bullet, m_offset);
+                        }
+                    else
+                        {
+                        m_text = m_text->secure(bullet);
+                        }
                 }
                 	
                 break;
--- a/webengine/osswebengine/WebKit/s60/misc/WebTabbedNavigation.cpp	Tue May 25 13:52:38 2010 +0300
+++ b/webengine/osswebengine/WebKit/s60/misc/WebTabbedNavigation.cpp	Wed Jun 09 10:52:50 2010 +0300
@@ -139,16 +139,20 @@
                 elemVisibleRect.Intersection(m_webView->Rect());
                 if (horizontalDir == -1) {
                     focusPosition.iX = elemVisibleRect.iTl.iX;
+                    focusPosition.iY = elemVisibleRect.iTl.iY;
                 }
                 else if (horizontalDir == 1) {
                     focusPosition.iX = elemVisibleRect.iBr.iX;
+                    focusPosition.iY = elemVisibleRect.iTl.iY;
                 }
                 
                 if (verticalDir == -1) {
                     focusPosition.iY = elemVisibleRect.iTl.iY;
+                    focusPosition.iX = elemVisibleRect.iTl.iX;
                 }
                 else if (verticalDir == 1) {
                     focusPosition.iY = elemVisibleRect.iBr.iY;
+                    focusPosition.iX = elemVisibleRect.iTl.iX;
                 }
                 
                 if ((verticalDir == 0) && (horizontalDir == 0)) {
@@ -429,7 +433,7 @@
     sameAxisDist = horizontalDir * (point.iX - m_focusPosition.iX) + verticalDir * (point.iY - m_focusPosition.iY);
     otherAxisDist = (horizontalDir) ? (point.iY - m_focusPosition.iY) : (point.iX - m_focusPosition.iX) ;
     otherAxisDist = (otherAxisDist < 0 ) ? (otherAxisDist * -1) : otherAxisDist;
-    if (horizontalDir) { // horizontal
+    if (verticalDir) { // vertical 
         if (rect.iBr.iY < m_selectedElementRect.iTl.iY || rect.iTl.iY > m_selectedElementRect.iBr.iY) {
             overlap = 0;
         }
@@ -443,7 +447,7 @@
             }
         }
     }
-    else { // vertical    
+    else { // horizontal   
         if (rect.iBr.iX < m_selectedElementRect.iTl.iX || rect.iTl.iX > m_selectedElementRect.iBr.iX) {
             overlap = 0;
         }
--- a/webengine/osswebengine/WebKit/s60/plugins/PluginSkin.cpp	Tue May 25 13:52:38 2010 +0300
+++ b/webengine/osswebengine/WebKit/s60/plugins/PluginSkin.cpp	Wed Jun 09 10:52:50 2010 +0300
@@ -85,8 +85,11 @@
 _LIT(KSecMgrScriptSession,"SecMgrScriptSession");
 _LIT(KAllowNetworkAccess,"AllowNetworkAccess");
 
-
+#if defined(__PLATFORM_VERSION_32__)
+#define KArraySize 1
+#else
 #define KArraySize 3
+#endif
 
 const TInt32 KWidgetApplicationId =  0x10282822;
 const TInt32 KBrowserApplicationId = 0x10008D39;
--- a/webengine/osswebengine/WebKit/s60/plugins/PluginWin.cpp	Tue May 25 13:52:38 2010 +0300
+++ b/webengine/osswebengine/WebKit/s60/plugins/PluginWin.cpp	Wed Jun 09 10:52:50 2010 +0300
@@ -67,7 +67,7 @@
 //
 PluginWin::PluginWin(PluginSkin* pluginskin)
     : m_pluginskin(pluginskin)
-    , m_windowedPlugin(true), m_fullscreen(false), m_windowCreated(false)
+    , m_windowedPlugin(true), m_fullscreen(false), m_windowCreated(false), m_visibilty(false)
 {
 }
 
@@ -98,6 +98,15 @@
 //
 PluginWin::~PluginWin()
 {
+    CBrCtl* brCtl = control(m_pluginskin->frame());
+    if (brCtl) {
+        WebView*  view = brCtl->webView();
+        if (view) {
+            int index = view->getVisiblePlugins().Find(m_pluginskin);
+            if (index != KErrNotFound)
+                view->getVisiblePlugins().Remove(index);
+        }
+    }
 
     TRAP_IGNORE( setPluginFocusL( EFalse ) );
 
@@ -384,6 +393,18 @@
         else
             HandleLosingForeground();
     }
+    
+    WebView* view = control(m_pluginskin->frame())->webView();
+    int index = view->getVisiblePlugins().Find(m_pluginskin);
+    if (visible && (m_visibilty != visible) && (index == KErrNotFound)) {
+        view->getVisiblePlugins().AppendL(m_pluginskin);
+        m_visibilty = visible;
+    }
+    else if (!visible && (index != KErrNotFound)) {
+        view->getVisiblePlugins().Remove(index);
+        m_visibilty = visible;
+    }
+    
     NotifyPluginVisible(visible);
     if (!m_windowedPlugin && m_pluginskin->getNPPluginFucs() && m_pluginskin->getNPPluginFucs()->event) {
         NPEvent event;
@@ -833,3 +854,21 @@
     return ret;
 
 }
+
+bool PluginWin::containsPoint(WebView& view, const TPoint& pt)
+{
+    if (m_control) {
+        if (StaticObjectsContainer::instance()->isPluginFullscreen()) {
+            return true;
+        }
+        else {
+            TPoint point = pt;
+            TPoint viewPos = view.PositionRelativeToScreen();
+            TPoint ctrlPos = m_control->PositionRelativeToScreen();
+            point += viewPos;
+            return m_control->Rect().Contains(point - ctrlPos);
+        }
+    }
+    else 
+        return false;   
+}
--- a/webengine/osswebengine/WebKit/s60/plugins/PluginWin.h	Tue May 25 13:52:38 2010 +0300
+++ b/webengine/osswebengine/WebKit/s60/plugins/PluginWin.h	Wed Jun 09 10:52:50 2010 +0300
@@ -481,6 +481,7 @@
     void HandlePointerEventFromPluginL(const TPointerEvent& aEvent);
     TBool HandleGesture(const TStmGestureEvent& aEvent);    
 	TBool Windowed() { return m_windowedPlugin;}
+	bool containsPoint(WebView& view, const TPoint& pt);
     protected: // New functions
 
         /**
@@ -506,6 +507,7 @@
         bool                                m_fullscreen;
         bool                                m_windowCreated;
         bool                                m_forceScroll;
+        bool                                m_visibilty;
     };
 
 
--- a/webengine/osswebengine/WebKit/s60/webcoresupport/WebEditorClient.cpp	Tue May 25 13:52:38 2010 +0300
+++ b/webengine/osswebengine/WebKit/s60/webcoresupport/WebEditorClient.cpp	Wed Jun 09 10:52:50 2010 +0300
@@ -500,6 +500,8 @@
                     break;
                     }
 
+                if(m_webView->fepTextEditor()->inlineTextEditingStarted()) 
+                    return;
                 if (TChar(kevent->symbianEvent().iCode).IsPrint()) {
                     if (m_webView->fepTextEditor()->DocumentLengthForFep() <
                         m_webView->fepTextEditor()->DocumentMaximumLengthForFep()) {
@@ -691,3 +693,4 @@
 
 
 
+
--- a/webengine/osswebengine/WebKit/s60/webview/BrCtl.cpp	Tue May 25 13:52:38 2010 +0300
+++ b/webengine/osswebengine/WebKit/s60/webview/BrCtl.cpp	Wed Jun 09 10:52:50 2010 +0300
@@ -2211,7 +2211,15 @@
 {
     m_windoCloseTimer->Cancel();
     if (brCtlWindowObserver())
-        TRAP_IGNORE(brCtlWindowObserver()->HandleWindowCommandL(KNullDesC(), ECloseWindow));
+        {
+        TRAPD(err,brCtlWindowObserver()->HandleWindowCommandL(KNullDesC(), ECloseWindow));
+		if ( err == KLeaveExit )
+		    { // while we exit the browser it actually leaves with KLeaveExit from the system.
+		      // If we block this here then the exit would not happen so propogate the leave 
+		      // condition to the system for handling
+		    User::Leave(KLeaveExit);
+		    }        
+        }
 }
 
 TBool CBrCtl::sendCommandsToClient(
--- a/webengine/osswebengine/WebKit/s60/webview/BrCtl.h	Tue May 25 13:52:38 2010 +0300
+++ b/webengine/osswebengine/WebKit/s60/webview/BrCtl.h	Wed Jun 09 10:52:50 2010 +0300
@@ -607,6 +607,7 @@
         
         void showWindow();
         void closeWindowSoon();
+        // this function leaves in case of exit which is the normal behaviour
         void doCloseWindowSoon();
         TBool sendCommandsToClient(TBrCtlDefs::TBrCtlClientCommands aCommand,
                                     const CArrayFix<TPtrC>& aAttributesNames,
--- a/webengine/osswebengine/WebKit/s60/webview/WebFepTextEditor.cpp	Tue May 25 13:52:38 2010 +0300
+++ b/webengine/osswebengine/WebKit/s60/webview/WebFepTextEditor.cpp	Wed Jun 09 10:52:50 2010 +0300
@@ -76,7 +76,8 @@
     : m_webView(aView),
       m_textFormatMask(NULL),
       m_inlineEditText(NULL),
-      m_longKeyPress(EFalse)
+      m_longKeyPress(EFalse),
+      m_inlineTextEditingStarted(EFalse)
 {
     // Set up the extended capabilities
     TRAP_IGNORE(
@@ -323,6 +324,7 @@
 {
     CCoeEnv::Static()->ForEachFepObserverCall(FepObserverHandleStartOfTransactionL);
     ClearInlineText();
+    m_inlineTextEditingStarted= ETrue;
     UpdateInlineText(aInitialInlineText);
 }
 
@@ -549,7 +551,7 @@
 			Node* editNode = sc->focusNode();
 			TPoint viewPoint = kit(frame)->frameView()->frameCoordsInViewCoords(editNode->getRect().Rect().iBr);
 			xPos = viewPoint.iX;
-			yPos = viewPoint.iY;
+			yPos = frame->document()->focusedNode()->getRect().bottomLeft().y() + rect.height();
 			String str;
 			if ( editNode &&
 				 editNode->isTextNode() ) {
@@ -600,6 +602,7 @@
     m_inlineEditText = NULL;
     
     m_longKeyPress = EFalse;
+    m_inlineTextEditingStarted= EFalse;
 
     HandleUpdateCursor();
     UpdateEditingMode();
@@ -922,6 +925,9 @@
 
         return ETrue;
     }
+	else {
+    setSCTAvailability(true);
+    }
 
     return EFalse;
 }
@@ -1388,6 +1394,10 @@
 {
     CAknCcpuSupport* ccpu = NULL;
     CAknEdwinState* edwinState = static_cast<CAknEdwinState*>(this->State(KNullUid));
+    if ( edwinState && edwinState->MenuBar() && edwinState->MenuBar()->IsDisplayed() )
+        {
+        return;
+        }
     ccpu = new(ELeave) CAknCcpuSupport(this);
     ccpu->SetMopParent(this);
     CleanupStack::PushL(ccpu);
@@ -1508,3 +1518,9 @@
     m_ExtendedInputCapabilities->ReportEventL(CAknExtendedInputCapabilities::
                         MAknEventObserver::EPointerEventReceived, NULL );
     }
+
+TBool CWebFepTextEditor::inlineTextEditingStarted()
+    {
+    return m_inlineTextEditingStarted; 
+    }
+
--- a/webengine/osswebengine/WebKit/s60/webview/WebFepTextEditor.h	Tue May 25 13:52:38 2010 +0300
+++ b/webengine/osswebengine/WebKit/s60/webview/WebFepTextEditor.h	Wed Jun 09 10:52:50 2010 +0300
@@ -134,6 +134,8 @@
     void EnableCcpuL();
     TBool IsInputElementFocused() const;
     void ReportEventL();
+    
+    TBool inlineTextEditingStarted();
 private:
     void  findPrevSiblingTextLen(Node*, TInt&) const;
     Node* findTextNodeForCurPos(Node* aNode, TInt& aPos) const;
@@ -148,6 +150,7 @@
     CAknExtendedInputCapabilities* m_ExtendedInputCapabilities;
     CAknCcpuSupport* m_CcpuSupport;
     TBool m_longKeyPress;
+    TBool m_inlineTextEditingStarted;
     };
 
 #endif
--- a/webengine/osswebengine/WebKit/s60/webview/WebFrame.cpp	Tue May 25 13:52:38 2010 +0300
+++ b/webengine/osswebengine/WebKit/s60/webview/WebFrame.cpp	Wed Jun 09 10:52:50 2010 +0300
@@ -549,7 +549,7 @@
     
     Frame* coreFrame = core(this);
 
-	int dist = 99999999;
+	unsigned int dist = 0xFFFFFFFF;
 	Node* result = 0;
 	//for (Node* n=links->firstItem(); n; n=links->nextItem()) {
 	for(Node* n = coreFrame->document(); n != 0; n = n->traverseNextNode()) {
@@ -563,7 +563,7 @@
 			
 			int x = xInRect(r, pt.x());
 			int y = yInRect(r, pt.y());
-			int d = (pt.x() - x) * (pt.x() - x) + (pt.y() - y) * (pt.y() - y);
+			unsigned int d = (pt.x() - x) * (pt.x() - x) + (pt.y() - y) * (pt.y() - y);
 			if (dist > d) {
 				dist = d;
 				result = n;
--- a/webengine/osswebengine/WebKit/s60/webview/WebFrameView.cpp	Tue May 25 13:52:38 2010 +0300
+++ b/webengine/osswebengine/WebKit/s60/webview/WebFrameView.cpp	Wed Jun 09 10:52:50 2010 +0300
@@ -33,6 +33,9 @@
 #include "StaticObjectsContainer.h"
 #include "WebTabbedNavigation.h"
 #include "WebPagePinchZoomHandler.h"
+#include "FocusController.h"
+#include "Frame.h"
+#include "page.h"
 
 using namespace WebCore;
 
@@ -418,6 +421,28 @@
             m_topView->updateScrollbars(m_contentSize.iHeight, m_contentPos.iY, m_contentSize.iWidth, m_contentPos.iX);
         }
     }
+    moveFocus();
+}
+
+void WebFrameView::moveFocus()
+{
+    // After resizing, move the focus to the correct node
+	if (m_topView && m_topView->focusedElementType() == TBrCtlDefs::EElementAnchor &&
+        m_topView->brCtl()->settings()->getNavigationType() == SettingsContainer::NavigationTypeTabbed) { 
+    	Frame* mainFrame = core(m_topView->mainFrame());
+        FocusController* focusController = m_topView->page()->focusController();
+        Frame* focusedFrame = focusController->focusedOrMainFrame();
+        if (focusedFrame == NULL) {
+	 	    focusedFrame = mainFrame;
+        }
+        Node* node = focusedFrame->document()->focusedNode();
+	 	if (node) {
+            TRect rect = node->getRect().Rect();
+            TPoint viewpoint = kit(focusedFrame)->frameView()->frameCoordsInViewCoords(rect.iTl);
+            WebCursor* cursor = StaticObjectsContainer::instance()->webCursor();
+            cursor->updatePositionAndElemType(viewpoint);
+	 	}
+	 }
 }
 
 void WebFrameView::setMayUseCopyScroll(TBool aCopy)
--- a/webengine/osswebengine/WebKit/s60/webview/WebFrameView.h	Tue May 25 13:52:38 2010 +0300
+++ b/webengine/osswebengine/WebKit/s60/webview/WebFrameView.h	Wed Jun 09 10:52:50 2010 +0300
@@ -104,6 +104,8 @@
     int getBidiWidth();
     bool needScroll(const TPoint& aPoint);
 private:
+    void moveFocus();
+
     WebFrameView(const WebFrameView&);            // not implemented
     WebFrameView& operator=(const WebFrameView&); // not implemented
     
--- a/webengine/osswebengine/WebKit/s60/webview/WebPageFullScreenHandler.cpp	Tue May 25 13:52:38 2010 +0300
+++ b/webengine/osswebengine/WebKit/s60/webview/WebPageFullScreenHandler.cpp	Wed Jun 09 10:52:50 2010 +0300
@@ -28,8 +28,7 @@
 
 using namespace WebCore;
 
-const int KFullScreenButtonHeight = 60;
-const int KFullScreenButtonWidth = 60;
+const int KFullScreenButtonOffset = 50;
 const int KFullScreenButtonBuff  = 5;
 
 // -----------------------------------------------------------------------------
@@ -66,6 +65,9 @@
     m_buttonIcon = StaticObjectsContainer::instance()->webCannedImages()->getImage(WebCannedImages::EImageEscFullScreen);
     TPoint pos = CalculatePosition();
     BaseConstructL(m_webView, pos, m_buttonIcon.m_img, m_buttonIcon.m_msk, ETrue);
+     if (AknLayoutUtils::PenEnabled()) {
+         DrawableWindow()->SetPointerGrab(ETrue);
+     }
     Hide();   
 }
 
@@ -147,11 +149,18 @@
 
        case TPointerEvent::EButton1Up:
            {
-           if (m_isTouchDown) {
-               Hide();
-               m_webView->notifyFullscreenModeChangeL( false );
-           }
-           m_isTouchDown = EFalse;
+           	TPoint fsPostion = PositionRelativeToScreen();
+            TRect fsRect = TRect(fsPostion,m_buttonIcon.m_img->SizeInPixels());
+            fsRect = TRect(fsRect.iTl - TPoint(KFullScreenButtonOffset,KFullScreenButtonOffset), fsRect.iBr);
+           	TPoint pointerPosition = fsPostion + aPointerEvent.iPosition;
+           	if( fsRect.Contains(pointerPosition))
+           	{
+             if (m_isTouchDown) {
+                  Hide();
+                  m_webView->notifyFullscreenModeChangeL( false );
+               }
+               m_isTouchDown = EFalse;
+            }
            }
            break;          
         }       
--- a/webengine/osswebengine/WebKit/s60/webview/WebPointerEventHandler.cpp	Tue May 25 13:52:38 2010 +0300
+++ b/webengine/osswebengine/WebKit/s60/webview/WebPointerEventHandler.cpp	Wed Jun 09 10:52:50 2010 +0300
@@ -105,24 +105,30 @@
 void  WebPointerEventHandler::HandleGestureEventL(const TStmGestureEvent& aGesture)
 {
     TStmGestureUid uid = aGesture.Code();
-
     if (m_webview->pinchZoomHandler()->isPinchActive() && uid != stmGesture::EGestureUidPinch)
         return;
-
+    
     TBrCtlDefs::TBrCtlElementType elType = m_webview->focusedElementType();
-
-    PluginSkin* plugin = m_webview->mainFrame()->focusedPlugin();
-    if (plugin && plugin->pluginWin()) {
-        if (plugin->pluginWin()->HandleGesture(aGesture)) {
-         if(!plugin->isActive()) {
-            plugin->activate();
-         }
-         else {
-            m_webview->mainFrame()->frameView()->topView()->setFocusedElementType(TBrCtlDefs::EElementActivatedObjectBox);
-            m_webview->page()->focusController()->setFocusedNode(plugin->getElement(), m_webview->page()->focusController()->focusedOrMainFrame());                        
-            m_webview->brCtl()->updateDefaultSoftkeys();
-         }
-         return;
+    
+    bool pluginConsumable = isPluginConsumable(uid);
+    
+    if (pluginConsumable && m_webview->getVisiblePlugins().Count() > 0) {
+        for ( int i=0; i < m_webview->getVisiblePlugins().Count(); i++) {
+             PluginSkin* plugin = m_webview->getVisiblePlugins()[i];
+             if (plugin && plugin->pluginWin() && plugin->pluginWin()->containsPoint(*m_webview,aGesture.CurrentPos())) {
+                 if (plugin->pluginWin()->HandleGesture(aGesture)) {
+                     if(!plugin->isActive()) {
+                         plugin->activate();
+                     }
+                     else {
+                         m_webview->mainFrame()->frameView()->topView()->setFocusedElementType(TBrCtlDefs::EElementActivatedObjectBox);
+                         m_webview->page()->focusController()->setFocusedNode(plugin->getElement(), m_webview->page()->focusController()->focusedOrMainFrame());                        
+                         m_webview->brCtl()->updateDefaultSoftkeys();
+                     }
+                     return;
+                 }
+                 break;
+             }
         }
     }
 
@@ -131,7 +137,6 @@
         m_webview->tabbedNavigation()->updateCursorPosition(aGesture.CurrentPos());
     }
 
-
     switch(uid) {
         case stmGesture::EGestureUidTouch:
         {
@@ -608,3 +613,17 @@
     }
     m_webview->pinchZoomHandler()->handlePinchGestureEventL(aGesture);
 }
+
+
+//-----------------------------------------------------------------------------
+// WebPointerEventHandler::isPluginConsumable
+//-----------------------------------------------------------------------------
+bool WebPointerEventHandler::isPluginConsumable(const TStmGestureUid uid)
+{
+    //  Gestures which a Plugin can consume
+    return (uid == stmGesture::EGestureUidRelease ||
+            uid == stmGesture::EGestureUidTap ||
+            uid == stmGesture::EGestureUidTouch ||
+            uid == stmGesture::EGestureUidLongPress ||
+            (uid == stmGesture::EGestureUidPan && m_webview->widgetExtension())); // Currently Pan is consumed in Widget mode
+}
--- a/webengine/osswebengine/WebKit/s60/webview/WebPointerEventHandler.h	Tue May 25 13:52:38 2010 +0300
+++ b/webengine/osswebengine/WebKit/s60/webview/WebPointerEventHandler.h	Wed Jun 09 10:52:50 2010 +0300
@@ -61,6 +61,7 @@
     void doTapL();
     void updateCursor(const TPoint& pos);
     void handlePinchZoomL(const TStmGestureEvent& aGesture);
+    bool isPluginConsumable(const TStmGestureUid uid);
 private:
     WebPointerEventHandler(WebView* view);            
     WebView* m_webview;
--- a/webengine/osswebengine/WebKit/s60/webview/WebScrollbarDrawer.cpp	Tue May 25 13:52:38 2010 +0300
+++ b/webengine/osswebengine/WebKit/s60/webview/WebScrollbarDrawer.cpp	Wed Jun 09 10:52:50 2010 +0300
@@ -487,9 +487,18 @@
   TRect r(TPoint(0, 0), rect.Size());
   gc->SetBrushStyle(CGraphicsContext::ESolidBrush);
   gc->SetPenStyle(CGraphicsContext::ESolidPen);
+// Current platform API has some problem in drawing the border of
+// the rounded rect.Once it is fixed in platform this code can be reverted back.
+#ifdef BRDO_MULTITOUCH_ENABLED_FF
+  gc->SetPenSize(TSize(4,4));
+#else
   gc->SetPenSize(TSize(2,2));
+#endif  
   gc->SetPenColor(TRgb(242, 242, 242));
   gc->SetBrushColor(TRgb(10, 10, 10));
+#ifdef BRDO_MULTITOUCH_ENABLED_FF
+  gc->DrawRect(r);
+#endif  
   gc->DrawRoundRect(r, TSize(7, 7));
  
 }
@@ -507,6 +516,9 @@
   gc->SetBrushColor(brushMaskColor);
   gc->SetPenSize(TSize(2,2));
   gc->SetPenColor(TRgb(5, 5, 5));
+#ifdef BRDO_MULTITOUCH_ENABLED_FF
+  gc->DrawRect(r);
+#endif
   gc->DrawRoundRect(r, TSize(7, 7));
 }
 
--- a/webengine/osswebengine/WebKit/s60/webview/WebView.cpp	Tue May 25 13:52:38 2010 +0300
+++ b/webengine/osswebengine/WebKit/s60/webview/WebView.cpp	Wed Jun 09 10:52:50 2010 +0300
@@ -234,6 +234,8 @@
     m_pageZoomHandler = NULL;
 
     m_zoomLevelArray.Close();
+    m_visiblePlugins.Reset();
+    m_visiblePlugins.Close();
 
     // prevent frameViews to access members when topView is
     // closing down.
@@ -405,6 +407,7 @@
     m_waiter = new(ELeave) CActiveSchedulerWait();
     
     m_checkerBoardDestroyTimer = CPeriodic::NewL(CActive::EPriorityIdle);
+    m_visiblePlugins.Reset();
     
 }
 
@@ -650,7 +653,7 @@
       return;
     }
 
-    if (!IsVisible()) {
+    if (!IsVisible() || ( StaticObjectsContainer::instance()->webSurface()->topView() != this ) ) {
       return;
     }
 
@@ -1180,11 +1183,8 @@
      * and send it here.
      */
     if (eventcode == EEventKeyDown){
-        downEventConsumed = sendKeyEventToEngine(keyevent, EEventKeyDown, frame) || 
-                            ((m_focusedElementType == TBrCtlDefs::EElementActivatedInputBox && // style of input box     
-                              page()->chrome()->client()->elementVisibilityChanged()));
+        downEventConsumed = sendKeyEventToEngine(keyevent, EEventKeyDown, frame);
     }
-     
     /*
      * downEventConsumed will be true if JavaScript consumes key event
      * If we are not in the widget mode we want to deactivate input box
@@ -2124,7 +2124,7 @@
 {
     TSize docSize = DocumentSize();
     TSize viewSize = DocumentViewport().Size();
-    return ((docSize.iWidth * docSize.iHeight*100)/(viewSize.iWidth*viewSize.iHeight) < KSmallPageScale);
+    return (docSize.iWidth/viewSize.iWidth) * (docSize.iHeight/viewSize.iHeight) * 100 < KSmallPageScale;
 }
 
 void WebView::willSubmitForm(FormState* formState)
--- a/webengine/osswebengine/WebKit/s60/webview/WebView.h	Tue May 25 13:52:38 2010 +0300
+++ b/webengine/osswebengine/WebKit/s60/webview/WebView.h	Wed Jun 09 10:52:50 2010 +0300
@@ -74,6 +74,7 @@
 class WebFrameBridge;
 class WebPagePinchZoomHandler;
 class CThumbnailGenerator;
+class PluginSkin;
 
 
 const TUint KMouseEventFired = 0x00000001;
@@ -544,6 +545,8 @@
         void resumeJsTimers();
         bool jsTimersPaused() { return (m_jsTimeouts) ? true : false; }
         void resetJsTimers() { m_jsTimeouts = 0; }
+        RPointerArray<PluginSkin>& getVisiblePlugins(){ return m_visiblePlugins;}
+        
     private:
         WebCore::Page*          m_page;
         WebFrameView*           m_frameView;
@@ -648,6 +651,8 @@
 		
    	    // JavaScript (DOMWindowTimer) timers
         KJS::PausedTimeouts*     m_jsTimeouts;
+        
+        RPointerArray<PluginSkin> m_visiblePlugins;
     };
 
 #endif
--- a/webengine/osswebengine/webkit/s60/webview/WebGestureInterface.cpp	Tue May 25 13:52:38 2010 +0300
+++ b/webengine/osswebengine/webkit/s60/webview/WebGestureInterface.cpp	Wed Jun 09 10:52:50 2010 +0300
@@ -136,8 +136,14 @@
     holdArea.iShape = TStmGestureArea::ERectangle;
     holdArea.iTimeout =  HOLD_AREA_TIMEOUT;
     holdArea.iSize.iWidth = HOLD_AREA_WIDTH;
+    
+    //Double tap functionality is enabled based on ECapabilityFitToScreen capability.
+    //setting the doubletap timeout to ZERO if this cap is not defined
+    if (m_webview->brCtl()->capabilities() & TBrCtlDefs::ECapabilityFitToScreen) 
+        gestureParams[stmGesture::EDoubleTapTimeout   ] = DOUBLE_TAP_TIMEOUT;
+    else
+        gestureParams[stmGesture::EDoubleTapTimeout   ] = 0;    
 
-    gestureParams[stmGesture::EDoubleTapTimeout   ] = DOUBLE_TAP_TIMEOUT;
     gestureParams[stmGesture::ESuppressTimeout    ] = SUPPRESS_TIMEOUT;
     gestureParams[stmGesture::EMoveSuppressTimeout] = MOVE_SUPPRESS_TIMEOUT;
     gestureParams[stmGesture::EPanSpeedLow        ] = PAN_SPEED_LOW;
--- a/webengine/widgetengine/src/WrtPlatform.cpp	Tue May 25 13:52:38 2010 +0300
+++ b/webengine/widgetengine/src/WrtPlatform.cpp	Wed Jun 09 10:52:50 2010 +0300
@@ -20,8 +20,8 @@
 // INCLUDE FILES
 
 #include "WrtPlatform.h"
-#include <swi\sisregistryentry.h>
-#include <swi\sisregistrysession.h>
+#include <swi/sisregistryentry.h>
+#include <swi/sisregistrysession.h>
 #include <sysutil.h> 
 #include <etel.h>
 #include <etelmm.h>
--- a/webengine/wmlengine/src/FileLoader/src/fileloader_cfilehandler.cpp	Tue May 25 13:52:38 2010 +0300
+++ b/webengine/wmlengine/src/FileLoader/src/fileloader_cfilehandler.cpp	Wed Jun 09 10:52:50 2010 +0300
@@ -281,7 +281,7 @@
                 TUint contentLength = 0;
 
                 const TUint16* responseUrl = (iRedirectedUrl == NULL) ? iUrl : iRedirectedUrl;
-            		
+                HBufC* newUrl = NULL;
 
                 if (iMethod == NW_URL_METHOD_GET)
 					{
@@ -296,7 +296,7 @@
 					}
 
 					//R->fake the url
-					HBufC* newUrl = HBufC::NewL( urlLen );
+					newUrl = HBufC::NewL( urlLen );
 					newUrl->Des().Copy(iData.Mid( position + 1, urlLen-1 ));
 					newUrl->Des().ZeroTerminate();				
 
@@ -313,7 +313,6 @@
 					iFileLoader->PartialResponse( (TUint16*)newUrl->Ptr(), dataDes, NULL, contentTypeString, NULL, NW_FALSE, // multipart information is missing.
 						NULL, NULL, charset, NULL, Success, NW_URL_METHOD_GET, iTransId, 0 /*first chunk*/, NULL, dataDes.Length(),
 						KErrNone, iLoadContext, iLoadCallback);
-					delete newUrl;
 					}
                 
                 // Send the close response
@@ -324,6 +323,8 @@
 				iFileLoader->PartialResponse( responseUrl, emptyData, NULL, contentTypeString, NULL, NW_FALSE, // multipart information is missing
                   NULL, NULL, charset, NULL, Success, iMethod, iTransId, -1 /*last chunk*/, NULL, contentLength,
                   KErrNone, iLoadContext, iLoadCallback);
+
+                delete newUrl;
                 }
             else
 				{
--- a/webengine/wmlengine/src/fbox/src/FBOXCEpoc32InputBox.cpp	Tue May 25 13:52:38 2010 +0300
+++ b/webengine/wmlengine/src/fbox/src/FBOXCEpoc32InputBox.cpp	Wed Jun 09 10:52:50 2010 +0300
@@ -1723,7 +1723,8 @@
         HBufC* newText = HBufC::NewL(iDocumentText->Length() + aText.Length());
         newText->Des().Append(iDocumentText->Left(curPos));
         newText->Des().Append(aText);
-        newText->Des().Append(iDocumentText->Right(iDocumentText->Length() - curPos));
+        if(iDocumentText->Length() >= curPos)
+            newText->Des().Append(iDocumentText->Right(iDocumentText->Length() - curPos));
         iInlineEditText = newText;
         }
 }
--- a/widgets/widgetapp/src/WidgetUiWindow.cpp	Tue May 25 13:52:38 2010 +0300
+++ b/widgets/widgetapp/src/WidgetUiWindow.cpp	Wed Jun 09 10:52:50 2010 +0300
@@ -231,6 +231,14 @@
         iEngine->RemoveLoadEventObserver( iWidgetUiObserver );
         iEngine->RemoveStateChangeObserver( iWindowManager.View() );
         }
+#ifdef BRDO_OCC_ENABLED_FF 
+    if ( iRetryConnectivity)
+        {
+        iRetryConnectivity->Cancel();
+        delete iRetryConnectivity;
+        iRetryConnectivity = NULL;
+        }
+#endif
     delete iEngine;
     delete iWidgetUiObserver;
     delete iUrl;
@@ -931,9 +939,14 @@
             User::Leave( connFailure );
             }
         *aNewConn = ETrue;
-        
+        if(iWindowManager.GetNetworkMode() == EOfflineMode)
+        	{
+            iWindowManager.GetConnection()->CancelConnection();
+            iWindowManager.GetConnection()->StopConnectionL();        		
+        	}      
 #ifdef BRDO_OCC_ENABLED_FF        
-        TRAP_IGNORE(ConnNeededStatusL(KErrNone)); 
+		else
+        	TRAP_IGNORE(ConnNeededStatusL(KErrNone)); 
 #endif        
         }
     }
@@ -1344,6 +1357,10 @@
             }
         iRetryConnectivity->Start(KRetryConnectivityTimeout, 0,TCallBack(RetryConnectivity,this));
         }
+    else
+        {
+        TRAP_IGNORE( Engine()->HandleCommandL( (TInt)TBrCtlDefs::ECommandCancelFetch + (TInt)TBrCtlDefs::ECommandIdBase ) );
+        }
     }  
 
 void CWidgetUiWindow::ConnNeededStatusL( TInt aErr )
--- a/widgets/widgetinstaller/group/WidgetInstallerUI.mmp	Tue May 25 13:52:38 2010 +0300
+++ b/widgets/widgetinstaller/group/WidgetInstallerUI.mmp	Wed Jun 09 10:52:50 2010 +0300
@@ -39,7 +39,7 @@
 START RESOURCE  ../data/WidgetInstallerUI.rss
 DEPENDS avkon.rsg
 HEADER
-TARGETPATH      Resource
+TARGETPATH      resource
 #ifdef __S60_32__
 LANG sc 
 #else