Revision: 201034 RCL_3
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 15 Sep 2010 13:25:15 +0300
branchRCL_3
changeset 99 ca6d8a014f4b
parent 95 d96eed154187
child 103 be5f8c9adf67
Revision: 201034 Kit: 201036
browserutilities/webutils/conf/webutils.confml
web_pub/browser_control_api/inc/BrCtlDefs.h
webengine/device/src/ServiceEventHandler.cpp
webengine/osswebengine/WebKit/s60/plugins/PluginSkin.cpp
webengine/osswebengine/WebKit/s60/plugins/PluginSkin.h
webengine/osswebengine/WebKit/s60/webview/BrCtl.cpp
webengine/osswebengine/WebKit/s60/webview/WebPointerEventHandler.cpp
webengine/osswebengine/WebKit/s60/webview/WebPointerEventHandler.h
webengine/osswebengine/WebKit/s60/webview/WebView.cpp
webengine/osswebengine/WebKit/s60/webview/WebView.h
widgets/widgetapp/group/WidgetUi.mmp
widgets/widgetapp/inc/WidgetUiWindowManager.h
widgets/widgetapp/src/WidgetUiDialogsProviderProxy.cpp
widgets/widgetapp/src/WidgetUiWindowManager.cpp
Binary file browserutilities/webutils/conf/webutils.confml has changed
--- a/web_pub/browser_control_api/inc/BrCtlDefs.h	Tue Sep 14 23:23:58 2010 +0300
+++ b/web_pub/browser_control_api/inc/BrCtlDefs.h	Wed Sep 15 13:25:15 2010 +0300
@@ -220,10 +220,12 @@
              ECommandResumeScriptTimers,
 			 ECommandCancelQueuedTransactions,
 			 ECommandOOMExit,
-			       /**
-			       * Notify Flash Plugin FocusChangeEvent 
-			       */
-			       ECommandNotifyPluginFocusChangeEvent
+	         /**
+	         * Notify Flash Plugin FocusChangeEvent 
+	         */
+	         ECommandNotifyPluginFocusChangeEvent,
+	         ECommandBackLightOn,
+	         ECommandBackLightOff
             };
         /**
         * The load event that occurred.
--- a/webengine/device/src/ServiceEventHandler.cpp	Tue Sep 14 23:23:58 2010 +0300
+++ b/webengine/device/src/ServiceEventHandler.cpp	Wed Sep 15 13:25:15 2010 +0300
@@ -41,6 +41,7 @@
     {
     iInterfaceFunc = (JSObject*)aInterfaceFunc;
     iCallbackFunc = (JSObject*)aCallbackFunc;
+    KJS::Collector::protect(iCallbackFunc);
     iTransId = aTransId;
     }
 
@@ -54,6 +55,7 @@
 //
 ServiceEventHandler::~ServiceEventHandler()
     {
+    KJS::Collector::unprotect(iCallbackFunc);
     }
 
 // ----------------------------------------------------------------------------
--- a/webengine/osswebengine/WebKit/s60/plugins/PluginSkin.cpp	Tue Sep 14 23:23:58 2010 +0300
+++ b/webengine/osswebengine/WebKit/s60/plugins/PluginSkin.cpp	Wed Sep 15 13:25:15 2010 +0300
@@ -168,7 +168,8 @@
       m_handle(-1),
       m_instance(0),    
       m_pluginfuncs(0),
-      m_resized(false)
+      m_resized(false),
+      m_OccReLoad(EFalse)
   {
   }
 
@@ -776,8 +777,13 @@
             }
         }
         
-        if (m_pluginwin)
+        if (m_pluginwin) {
             m_pluginwin->SetExtent( TPoint(0,0), TSize(0,0) );
+            if (m_OccReLoad) {
+                setPluginWinClipedRect();
+                m_OccReLoad = EFalse;
+            }
+        }
     }
 }
 
@@ -1288,6 +1294,10 @@
 
 void PluginSkin::reCreatePlugin()
 {
+    TBool visible = EFalse;
+    if (m_pluginwin && m_pluginwin->IsVisible())
+        visible = ETrue;
+
     TBuf16<4> apId;
     apId.Format( _L("%d"), m_frame->frameView()->topView()->accessPointId() );
     
@@ -1308,7 +1318,7 @@
         }
         m_streams.clear();
     
-        if (m_instance && m_pluginfuncs && m_pluginfuncs->destroy) {        
+        if (m_instance && m_pluginfuncs && m_pluginfuncs->destroy) {
             m_pluginfuncs->destroy(m_instance, NULL);
         }
         User::Free(m_instance); m_instance = 0;
@@ -1325,8 +1335,11 @@
                     
         NetscapePlugInStreamLoaderClient* pluginloader = NetscapePlugInStreamLoaderClient::NewL(m_url->Des(), this, core(m_frame));
         if (pluginloader) {
+            if (visible) {
+                m_OccReLoad = ETrue;
+            }
             pluginloader->start();                            
-        }                                                
+        }
     }
 }
 
--- a/webengine/osswebengine/WebKit/s60/plugins/PluginSkin.h	Tue Sep 14 23:23:58 2010 +0300
+++ b/webengine/osswebengine/WebKit/s60/plugins/PluginSkin.h	Wed Sep 15 13:25:15 2010 +0300
@@ -498,6 +498,7 @@
         TRect   m_oldRect;
         TRect    m_oldViewport;
         NPObject* m_NPObject;
+        TBool    m_OccReLoad;
         
 public:
         TInt m_handle;
--- a/webengine/osswebengine/WebKit/s60/webview/BrCtl.cpp	Tue Sep 14 23:23:58 2010 +0300
+++ b/webengine/osswebengine/WebKit/s60/webview/BrCtl.cpp	Wed Sep 15 13:25:15 2010 +0300
@@ -822,6 +822,18 @@
                 WebCore::gcController().garbageCollectSoon();                
                 break;
             }
+        case TBrCtlDefs::ECommandBackLightOff:
+            {                
+                setDeferringTimers(true);
+                break;
+            }
+            
+        case TBrCtlDefs::ECommandBackLightOn:
+            {
+                if (isDeferringTimers())
+                    setDeferringTimers(false);
+                break;
+            }
         case TBrCtlDefs::ECommandClearAutoFormFillData:
             {
                 StaticObjectsContainer::instance()->formFillController()->clearFormData();
--- a/webengine/osswebengine/WebKit/s60/webview/WebPointerEventHandler.cpp	Tue Sep 14 23:23:58 2010 +0300
+++ b/webengine/osswebengine/WebKit/s60/webview/WebPointerEventHandler.cpp	Wed Sep 15 13:25:15 2010 +0300
@@ -341,8 +341,9 @@
     //if scrolling is going on, it need to be stopped immediately when user touches down    
     if (aPointerEvent.iType == TPointerEvent::EButton1Down && m_webview->viewIsScrolling()) {
         WebScrollingDeceleratorGH* scrollDecelGH = m_webview->pageScrollHandler()->ScrollingDeceleratorGH();
-        if(scrollDecelGH) {
-            scrollDecelGH->cancelDecel();            
+        if (scrollDecelGH) {
+            scrollDecelGH->cancelDecel();  
+            setIgnoreTap(ETrue);
         }
     }
     
--- a/webengine/osswebengine/WebKit/s60/webview/WebPointerEventHandler.h	Tue Sep 14 23:23:58 2010 +0300
+++ b/webengine/osswebengine/WebKit/s60/webview/WebPointerEventHandler.h	Wed Sep 15 13:25:15 2010 +0300
@@ -45,6 +45,7 @@
     void HandlePointerEventL(const TPointerEvent& aPointerEvent);
     void HandleHighlightChange(const TPoint &aPoint);
     void HandleGestureEventL(const TStmGestureEvent& aGesture);
+    void setIgnoreTap(TBool aIgnoretap) { m_ignoreTap = aIgnoretap; }
     
 private:    
     bool canDehighlight(const TPoint &aPoint);
--- a/webengine/osswebengine/WebKit/s60/webview/WebView.cpp	Tue Sep 14 23:23:58 2010 +0300
+++ b/webengine/osswebengine/WebKit/s60/webview/WebView.cpp	Wed Sep 15 13:25:15 2010 +0300
@@ -102,7 +102,6 @@
 #include "EventNames.h"
 #include "Editor.h"
 #include "ThumbnailGenerator.h"
-#include <kjs_window.h>
 #include "PluginHandler.h"
 
 using namespace WebCore;
@@ -220,7 +219,7 @@
 , m_checkerBoardGc(NULL)
 , m_checkerBoardDestroyTimer(NULL)
 , m_isPinchZoomOut(false)
-, m_jsTimeouts(0)
+, m_jsPaused(0)
 {
 }
 
@@ -282,6 +281,8 @@
     if (StaticObjectsContainer::instance()->webSurface()->topView() == this) 
         StaticObjectsContainer::instance()->webSurface()->setView( NULL ); 
     
+    delete m_pausedTimeouts;
+    
 }
 
 // -----------------------------------------------------------------------------
@@ -410,6 +411,8 @@
     
     m_checkerBoardDestroyTimer = CPeriodic::NewL(CActive::EPriorityIdle);
     
+    m_pausedTimeouts = new(ELeave) Vector<std::pair<RefPtr<WebCore::Frame>, KJS::PausedTimeouts*>, 16>();
+    
 }
 
 void WebView::initializePageScalerL()
@@ -3336,28 +3339,40 @@
 
 void WebView::pauseJsTimers()
 {
-    if(m_jsTimeouts==0) {        
-        WebCore::Frame *frame = core(mainFrame());
-        KJS::Window* window = KJS::Window::retrieveWindow(frame);
-        if(window) {
-            m_jsTimeouts = window->pauseTimeouts();
+    if(!m_jsPaused) {
+        for (Frame* frame = core(mainFrame()); frame; frame = frame->tree()->traverseNext()) {
+            if (KJS::Window* window = KJS::Window::retrieveWindow(frame)) {
+                KJS::PausedTimeouts* timeouts = window->pauseTimeouts();
+                if(timeouts)
+                    m_pausedTimeouts->append(std::make_pair(frame, timeouts));
+                }
         }
+        m_jsPaused = (m_pausedTimeouts->size()) ? ETrue : EFalse;
     }
 }
 
 void WebView::resumeJsTimers()
 {
-    if(m_jsTimeouts) {
-        WebCore::Frame *frame = core(mainFrame());
-        KJS::Window* window = KJS::Window::retrieveWindow(frame);
-        if(window) {
-            window->resumeTimeouts(m_jsTimeouts);
-            delete m_jsTimeouts;
-            m_jsTimeouts = 0;
+    if(m_jsPaused) {
+        TInt count = m_pausedTimeouts->size();
+        for (size_t i = 0; i < count; i++) {
+            KJS::Window* window = KJS::Window::retrieveWindow(m_pausedTimeouts->at(i).first.get());
+            if (window) {
+                window->resumeTimeouts(m_pausedTimeouts->at(i).second);
+            }
+            delete m_pausedTimeouts->at(i).second;
         }
+        m_pausedTimeouts->clear();
+        m_jsPaused = EFalse;  
     }
 }
-// END OF FILE
+
+void WebView::resetJsTimers()
+{
+    m_jsPaused=0;
+    m_pausedTimeouts->clear();
+}
+
 void WebView::scrollStatus(bool status)
     {
     if(m_scrollingstatus != status)
@@ -3378,3 +3393,4 @@
         scrollStatus(scrolling);
         }
     };
+// END OF FILE
--- a/webengine/osswebengine/WebKit/s60/webview/WebView.h	Tue Sep 14 23:23:58 2010 +0300
+++ b/webengine/osswebengine/WebKit/s60/webview/WebView.h	Wed Sep 15 13:25:15 2010 +0300
@@ -28,6 +28,7 @@
 #include "Timer.h"
 #include <MemoryManager.h>
 #include <stmgesturelistener.h>
+#include <kjs_window.h>
 
 namespace WebCore
 {
@@ -39,10 +40,6 @@
     class Frame;
 }
 
-namespace KJS
-{
-    class PausedTimeouts;
-}
 
 class CPluginHandler;
 class WebPreferences;
@@ -540,8 +537,8 @@
         // JavaScript timers - pause and resume
         void pauseJsTimers();
         void resumeJsTimers();
-        bool jsTimersPaused() { return (m_jsTimeouts) ? true : false; }
-        void resetJsTimers() { m_jsTimeouts = 0; }
+        bool jsTimersPaused() { return m_jsPaused; }
+        void resetJsTimers();
 
         WebCoreGraphicsContext* getGraphicsContext() {return m_webcorecontext; }
     private:
@@ -645,7 +642,8 @@
         TBool                    m_isPinchZoomOut;
 		
    	    // JavaScript (DOMWindowTimer) timers
-        KJS::PausedTimeouts*     m_jsTimeouts;
+   	    Vector<std::pair<RefPtr<WebCore::Frame>, KJS::PausedTimeouts*>, 16> *m_pausedTimeouts;
+        TBool                   m_jsPaused;
         
         TBool                    m_scrollingstatus;
     };
--- a/widgets/widgetapp/group/WidgetUi.mmp	Tue Sep 14 23:23:58 2010 +0300
+++ b/widgets/widgetapp/group/WidgetUi.mmp	Wed Sep 15 13:25:15 2010 +0300
@@ -114,6 +114,7 @@
 LIBRARY ecom.lib  // for schemeHandler
 LIBRARY MemMan.lib
 LIBRARY centralrepository.lib
+LIBRARY hwrmlightclient.lib
 
 #ifdef BRDO_MULTITOUCH_ENABLED_FF
 LIBRARY gfxtrans.lib
--- a/widgets/widgetapp/inc/WidgetUiWindowManager.h	Tue Sep 14 23:23:58 2010 +0300
+++ b/widgets/widgetapp/inc/WidgetUiWindowManager.h	Wed Sep 15 13:25:15 2010 +0300
@@ -26,6 +26,7 @@
 #include <coecntrl.h>
 #include "WidgetUiObserver.h"
 #include "browser_platform_variant.hrh"
+#include <HWRMLight.h>
 // CONSTANTS
 
 enum TNetworkMode
@@ -101,6 +102,7 @@
 #ifdef BRDO_OCC_ENABLED_FF
                               ,public MConnectionStageObserver
 #endif
+                              ,public MHWRMLightObserver
     {
     public:  // constructors / destructor
 
@@ -130,6 +132,10 @@
         */
         void CenrepChanged(TInt aHSModeOnline);
 
+    public:
+        //MHWRMLightObserver
+        void LightStatusChanged( TInt aTarget, CHWRMLight::TLightStatus aStatus );
+    
     public:  
 
 // Create window
@@ -663,8 +669,10 @@
         TTime                               iTimeLastWidgetOpen;
 #endif
 #ifdef BRDO_OCC_ENABLED_FF
-        CConnectionStageNotifierWCB*    iConnStageNotifier;                                
+        CConnectionStageNotifierWCB*         iConnStageNotifier;                                
 #endif
+        CHWRMLight*                          iLightObserver; 
+        CHWRMLight::TLightStatus             iLightStatus;
     };
 
 #endif  // WIDGETUIWINDOWMANAGER_H_
--- a/widgets/widgetapp/src/WidgetUiDialogsProviderProxy.cpp	Tue Sep 14 23:23:58 2010 +0300
+++ b/widgets/widgetapp/src/WidgetUiDialogsProviderProxy.cpp	Wed Sep 15 13:25:15 2010 +0300
@@ -280,6 +280,10 @@
 	    retVal = iDialogsProvider.DialogPromptLC( aTitle, aMessage,
                                             aDefaultInput, aReturnedInput );
 	    }
+	else
+	    {
+	    aReturnedInput = KNullDesC().AllocLC();	    
+	    }
 
     return retVal;
 	}
--- a/widgets/widgetapp/src/WidgetUiWindowManager.cpp	Tue Sep 14 23:23:58 2010 +0300
+++ b/widgets/widgetapp/src/WidgetUiWindowManager.cpp	Wed Sep 15 13:25:15 2010 +0300
@@ -206,6 +206,7 @@
     iWidgetSapiNotifier = CWidgetUiPSNotifier::NewL(*this, ESapiPrompt);
     iWidgetSapiClearNotifier = CWidgetUiPSNotifier::NewL(*this, ESapiPromptCleared);
 #endif
+    iLightObserver = CHWRMLight::NewL( this );
     }
 
 // -----------------------------------------------------------------------------
@@ -281,6 +282,7 @@
     delete iWidgetSapiNotifier;
     delete iWidgetSapiClearNotifier;
 #endif
+    delete iLightObserver;
     }
 
 // -----------------------------------------------------------------------------
@@ -1160,6 +1162,7 @@
             iActiveFsWindow->Engine()->MakeVisible( EFalse );
             iActiveFsWindow->SetIsCurrentWindow( EFalse );
             iActiveFsWindow->Engine()->HandleCommandL( (TInt)TBrCtlDefs::ECommandAppBackground + (TInt)TBrCtlDefs::ECommandIdBase);
+            iActiveFsWindow->WidgetExtension()->HandleCommandL( (TInt)TBrCtlDefs::ECommandAppBackground + (TInt)TBrCtlDefs::ECommandIdBase);
             }
         iActiveFsWindow = NULL;
         // Publish should start only after widget is resumed.
@@ -1654,6 +1657,35 @@
       } 
 #endif // BRDO_OCC_ENABLED_FF
 
+// -----------------------------------------------------------------------------
+// CWidgetUiWindowManager::LightStatusChanged
+// -----------------------------------------------------------------------------
+//
+void CWidgetUiWindowManager::LightStatusChanged( TInt aTarget, CHWRMLight::TLightStatus aStatus )
+    {   
+    if ( aTarget == CHWRMLight::EPrimaryDisplay )
+        {
+        if ( ( aStatus == CHWRMLight::ELightOn || aStatus == CHWRMLight::ELightOff ) && aStatus != iLightStatus )
+            {   
+            iLightStatus = aStatus;
+            if(iActiveFsWindow)                
+                if(aStatus == CHWRMLight::ELightOn )
+                    {
+                    TRAP_IGNORE( iActiveFsWindow->Engine()->HandleCommandL( 
+                               (TInt)TBrCtlDefs::ECommandIdBase +
+                               (TInt)TBrCtlDefs::ECommandBackLightOn ) );
+                    }
+                else if(aStatus == CHWRMLight::ELightOff )
+                    {
+                    TRAP_IGNORE( iActiveFsWindow->Engine()->HandleCommandL( 
+                               (TInt)TBrCtlDefs::ECommandIdBase +
+                               (TInt)TBrCtlDefs::ECommandBackLightOff) );
+                    }
+            }
+    }
+}
+    
+
 CRequestRAM::CRequestRAM(CWidgetUiWindowManager* aWidgetUiWindowManager, const TUid& aUid, TUint32 aOperation):
     CActive( EPriorityStandard ),
     iWidgetUiWindowManager(aWidgetUiWindowManager),