webengine/osswebengine/WebKit/s60/webview/BrCtl.cpp
changeset 10 a359256acfc6
parent 5 10e98eab6f85
child 11 c8a366e56285
--- a/webengine/osswebengine/WebKit/s60/webview/BrCtl.cpp	Fri Jul 03 15:54:40 2009 +0100
+++ b/webengine/osswebengine/WebKit/s60/webview/BrCtl.cpp	Thu Aug 27 07:44:59 2009 +0300
@@ -77,7 +77,10 @@
 #include "focusController.h"
 #include "IconDatabase.h"
 #include "httpDownload.h"
+#include "BrCtlSoftkeysObserverImpl.h"
+#include "BrCtlSpecialLoadObserverImpl.h"
 #include "BrCtlLayoutObserverImpl.h"
+#include "BrCtlWindowObserverImpl.h"
 #include "WidgetExtension.h"
 #include "PluginSkin.h"
 #include "HttpUiCallbacks.h"
@@ -410,6 +413,7 @@
    , m_suspendTimers(false)
    , m_wmlEngineInterface(NULL)
    , m_brCtlDownloadObserver(aBrCtlDownloadObserver)
+   , m_windoCloseTimer(NULL)
 {
     m_documentHeight = 0;
     m_displayHeight = 0;
@@ -418,8 +422,11 @@
     m_displayWidth = 0;
     m_displayPosX = 0;
     m_hasHorizontalScrollbar = false;
+    m_ownsSpecialLoadObserver = false;
+    m_ownsSoftkeysObserver = false;    
     m_ownsLayoutObserver = false;
     m_ownsDialogsProvider = false;
+    m_ownsWindowObserver = false;
 }
 
 // -----------------------------------------------------------------------------
@@ -448,16 +455,42 @@
 
     m_usrAgnt = CUserAgent::NewL();
 
+    // Create and initialize the Special Load Observer
+    if (m_brCtlSpecialLoadObserver == NULL)
+        {
+        m_brCtlSpecialLoadObserver = new (ELeave) CBrCtlSpecialLoadObserver();
+        m_ownsSpecialLoadObserver = true;
+        }
+        
+        
+    // Setup default support, if it wasn't passed into the constructor...
+    // Create and initialize the Softkey Observer
+    if (m_brCtlSoftkeysObserver == NULL)
+        {
+        m_brCtlSoftkeysObserver = new (ELeave) CBrCtlSoftkeysObserver();
+        m_ownsSoftkeysObserver = true;
+        }
+        
+    // Create and initialize the Layout Observer
     if (m_brCtlLayoutObserver == NULL)
         {
         m_brCtlLayoutObserver = new (ELeave) CBrCtlLayoutObserver();
         m_ownsLayoutObserver = true;
         }
+    // Create and initialize the Dialog Provider
     if (m_brCtlDialogsProvider == NULL)
         {
         m_brCtlDialogsProvider = CBrowserDialogsProvider::NewL(NULL);
         m_ownsDialogsProvider = true;
         }
+        
+  // window observer
+    if(m_brCtlWindowObserver == NULL)
+        {
+        m_brCtlWindowObserver = new (ELeave) CBrCtlWindowObserver();
+        m_ownsWindowObserver = true;
+        }
+    
     LoadResourceFileL();
     // Set the rect for BrowserControl (a CCoeControl).
     SetRect(aRect);
@@ -478,7 +511,6 @@
     iLoadEventObserversArray.Close();
     iLoadEventObserversArray.Close();
     m_stateChangeObserverArray.Close();
-    m_commandObserverArray.ResetAndDestroy();
     m_commandObserverArray.Close();
     m_subscribeToItems.ResetAndDestroy();
     m_subscribeToItems.Close();
@@ -489,6 +521,18 @@
     delete m_historyHandler;
     delete m_settingsContainer;
     delete m_usrAgnt;
+    
+    if (m_ownsSpecialLoadObserver) {
+        delete (CBrCtlSpecialLoadObserver*)m_brCtlSpecialLoadObserver;
+    }
+    
+    if (m_ownsSoftkeysObserver) {
+        delete (CBrCtlSoftkeysObserver*)m_brCtlSoftkeysObserver;
+    }
+    
+    if (m_ownsWindowObserver) {
+        delete (CBrCtlWindowObserver*)m_brCtlWindowObserver;
+    }
 
     if (m_ownsLayoutObserver) {
         delete (CBrCtlLayoutObserver*)m_brCtlLayoutObserver;
@@ -500,6 +544,11 @@
         m_timer->Cancel();
         delete m_timer;
     }
+    if (m_windoCloseTimer) {
+        m_windoCloseTimer->Cancel();
+        delete m_windoCloseTimer;
+    }
+    
     if (m_dataLoadConsumer) {
         m_dataLoadConsumer->stopDataLoad();
         endLoadData();
@@ -507,6 +556,9 @@
     m_brCtlLayoutObserver = NULL;
     m_brCtlDialogsProvider = NULL;
     m_brCtlDownloadObserver = NULL;
+    m_brCtlWindowObserver = NULL;
+    m_brCtlSoftkeysObserver = NULL; 
+    m_brCtlSpecialLoadObserver = NULL;
 
     UnloadDllWmlEngine();
 
@@ -545,6 +597,8 @@
                 UnloadDllWmlEngine();
             }
 #endif
+            if (m_webView->formFillPopup() && m_webView->formFillPopup()->IsVisible()) 
+                m_webView->formFillPopup()->handleCommandL(TBrCtlDefs::ECommandCancel);    
             break;
     }
 }
@@ -2036,13 +2090,19 @@
 
 void CBrCtl::closeWindowSoon()
 {
-    m_timer = CPeriodic::NewL(CActive::EPriorityIdle);
-    m_timer->Start( 20, 0, TCallBack( &doCloseCb, this ) );
+    if( m_windoCloseTimer ) {
+        m_windoCloseTimer->Cancel();
+    }
+    else {
+        m_windoCloseTimer = CPeriodic::NewL(CActive::EPriorityIdle);
+    }
+    
+    m_windoCloseTimer->Start( 20, 0, TCallBack( &doCloseCb, this ) );
 }
 
 void CBrCtl::doCloseWindowSoon()
 {
-    m_timer->Cancel();
+    m_windoCloseTimer->Cancel();
     if (brCtlWindowObserver())
         TRAP_IGNORE(brCtlWindowObserver()->HandleWindowCommandL(KNullDesC(), ECloseWindow));
 }