webengine/osswebengine/WebKit/s60/webview/SettingsContainer.cpp
changeset 0 dd21522fd290
child 11 c8a366e56285
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webengine/osswebengine/WebKit/s60/webview/SettingsContainer.cpp	Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,271 @@
+/*
+* Copyright (c) 2007 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:   DocumentLoader in webkit side
+*
+*/
+
+
+#include <../bidi.h>
+#include "SettingsContainer.h"
+#include "WebView.h"
+#include "BrCtl.h"
+#include "WebUtil.h"
+#include "Page.h"
+#include "frame.h"
+#include "frametree.h"
+#include "frameview.h"
+#include "document.h"
+#include "Settings.h"
+#include "HttpSessionManager.h"
+#include "StaticObjectsContainer.h"
+#include "ResourceLoaderDelegate.h"
+#include "HistoryInterface.h"
+#include "brctldefs.h"
+#include "WebDocumentLoader.h"
+#include "Frame.h"
+#include "FrameLoader.h"
+#include "WebCharsetData.h"
+
+using namespace WebCore;
+
+static const int defaultFontSize = 12;
+
+SettingsContainer::SettingsContainer(WebView* view, HistoryControllerInterface* historyController)
+{
+    m_webView = view;
+    m_historyController = historyController;
+    brctlSettings[TBrCtlDefs::ESettingsSmallScreen] = 0;
+    brctlSettings[TBrCtlDefs::ESettingsAutoLoadImages] = 1;
+    brctlSettings[TBrCtlDefs::ESettingsFontSize] = TBrCtlDefs::EFontSizeLevelNormal;
+    brctlSettings[TBrCtlDefs::ESettingsEmbedded] = 0;
+    brctlSettings[TBrCtlDefs::ESettingsTextWrapEnabled] = 0;
+    brctlSettings[TBrCtlDefs::ESettingsCookiesEnabled] = 1;
+    brctlSettings[TBrCtlDefs::ESettingsCSSFetchEnabled] = 0;
+    brctlSettings[TBrCtlDefs::ESettingsECMAScriptEnabled] = 1;
+    brctlSettings[TBrCtlDefs::ESettingsIMEINotifyEnabled] = 0;
+    brctlSettings[TBrCtlDefs::ESettingsCharacterset] = 0;
+    brctlSettings[TBrCtlDefs::ESettingsSendRefererHeader] = 0;
+    brctlSettings[TBrCtlDefs::ESettingsSecurityWarnings] = 1;
+    brctlSettings[TBrCtlDefs::ESettingsApId] = 0;
+    brctlSettings[TBrCtlDefs::ESettingsCurrentZoomLevelIndex] = 100;
+    brctlSettings[TBrCtlDefs::ESettingsPageOverview] = view->pageScalerEnabled();
+    brctlSettings[TBrCtlDefs::ESettingsNumOfDownloads] = 0;
+    brctlSettings[TBrCtlDefs::ESettingsLaunchAppUid] = 0;
+    brctlSettings[TBrCtlDefs::ESettingsLaunchViewId] = 0;
+    brctlSettings[TBrCtlDefs::ESettingsLaunchCustomMessageId] = 0;
+    brctlSettings[TBrCtlDefs::ESettingsBackList] = 1;
+    brctlSettings[TBrCtlDefs::ESettingsAutoRefresh] = 1;
+    brctlSettings[TBrCtlDefs::ESettingsBrowserUtf8Encoding] = 0;
+    brctlSettings[TBrCtlDefs::ESettingsAutoFormFillEnabled] = 2;
+    brctlSettings[TBrCtlDefs::ESettingsSavedPage] = 1;
+    brctlSettings[TBrCtlDefs::ESettingsSmartLink] = 1;
+    brctlSettings[TBrCtlDefs::ESettingsAutoOpenDownloads] = 1;
+    brctlSettings[TBrCtlDefs::ESettingsDisableFlash] = 0;
+    brctlSettings[TBrCtlDefs::ESettingsToolbarOnOff] = 1;
+    brctlSettings[TBrCtlDefs::ESettingsToolbarButton1Cmd] = 7;
+    brctlSettings[TBrCtlDefs::ESettingsToolbarButton2Cmd] = 8;
+    brctlSettings[TBrCtlDefs::ESettingsToolbarButton3Cmd] = 9;
+    brctlSettings[TBrCtlDefs::ESettingsToolbarButton4Cmd] = 10;
+    brctlSettings[TBrCtlDefs::ESettingsToolbarButton5Cmd] = 11;
+    brctlSettings[TBrCtlDefs::ESettingsToolbarButton6Cmd] = 12;
+    brctlSettings[TBrCtlDefs::ESettingsToolbarButton7Cmd] = 13;
+    brctlSettings[TBrCtlDefs::ESettingsScriptLog] = 0;
+
+    updatePageSetting(TBrCtlDefs::ESettingsAutoLoadImages);
+    updatePageSetting(TBrCtlDefs::ESettingsFontSize);
+    updatePageSetting(TBrCtlDefs::ESettingsECMAScriptEnabled);
+
+    updateHttpSetting(TBrCtlDefs::ESettingsEmbedded);
+    updateHttpSetting(TBrCtlDefs::ESettingsCookiesEnabled);
+    updateHttpSetting(TBrCtlDefs::ESettingsIMEINotifyEnabled);
+    updateHttpSetting(TBrCtlDefs::ESettingsCharacterset);
+    updateHttpSetting(TBrCtlDefs::ESettingsSendRefererHeader);
+    updateHttpSetting(TBrCtlDefs::ESettingsSecurityWarnings);
+    updateHttpSetting(TBrCtlDefs::ESettingsApId);
+    updateHttpSetting(TBrCtlDefs::ESettingsAutoOpenDownloads);
+
+    updateHistorySetting(TBrCtlDefs::ESettingsBackList);
+
+    updateDocumentLoaderSettings(TBrCtlDefs::ESettingsCharacterset);
+}
+
+
+void SettingsContainer::setBrctlSetting(TBrCtlDefs::TBrCtlSettings setting, unsigned int value)
+{
+    if (setting > TBrCtlDefs::ESettingsUnknown && setting < TBrCtlDefs::ESettingsMaxEnum) {
+        brctlSettings[setting] = value;
+        updatePageSetting(setting);
+        updateHttpSetting(setting);
+        updateHistorySetting(setting);
+        updateDocumentLoaderSettings(setting);
+        updateZoomSettings(setting, value);
+    }
+}
+
+void SettingsContainer::updatePageSetting(TBrCtlDefs::TBrCtlSettings setting)
+{
+    switch (setting)
+    {
+        case TBrCtlDefs::ESettingsAutoLoadImages:
+            m_webView->page()->settings()->setLoadsImagesAutomatically(brctlSettings[setting]);
+            break;
+        case TBrCtlDefs::ESettingsFontSize:
+        {
+            m_webView->page()->settings()->setDefaultFontSize(textMultiplier(brctlSettings[setting], defaultFontSize));
+            // force layout on the mainframe
+            Frame* mf = core(m_webView->mainFrame());
+            FrameView* v = mf->view();
+            Document* doc = mf->document();
+            if (v && doc) {
+                for (Frame* f= mf; f; f = f->tree()->traverseNext(mf))
+                    f->document()->recalcStyle(Node::Force);
+                v->setNeedsLayout();
+                v->layout();
+            }    
+            break;
+        }
+        case TBrCtlDefs::ESettingsECMAScriptEnabled:
+            m_webView->page()->settings()->setJavaScriptEnabled(brctlSettings[setting]);
+            break;
+        case TBrCtlDefs::ESettingsCurrentZoomLevelIndex:
+            m_webView->setZoomLevel(brctlSettings[setting]);
+            break;
+    }
+}
+
+void SettingsContainer::updateHttpSetting(TBrCtlDefs::TBrCtlSettings setting)
+{
+    HttpSessionManager* httpSessionMgr = WebCore::StaticObjectsContainer::instance()->resourceLoaderDelegate()->httpSessionManager();
+    switch (setting)
+    {
+        case TBrCtlDefs::ESettingsEmbedded:
+            httpSessionMgr->setEmbedded(brctlSettings[setting]);
+            break;
+        case TBrCtlDefs::ESettingsCookiesEnabled:
+            httpSessionMgr->enableCookies(brctlSettings[setting]);
+            break;
+        case TBrCtlDefs::ESettingsIMEINotifyEnabled:
+            httpSessionMgr->enableImei(brctlSettings[setting]);
+            break;
+        case TBrCtlDefs::ESettingsCharacterset:
+            httpSessionMgr->setCharset(brctlSettings[setting]);
+            break;
+        case TBrCtlDefs::ESettingsSendRefererHeader:
+            httpSessionMgr->enableReferer(brctlSettings[setting]);
+            break;
+        case TBrCtlDefs::ESettingsSecurityWarnings:
+            httpSessionMgr->enableSecurityDialogs(brctlSettings[setting]);
+            break;
+        case TBrCtlDefs::ESettingsApId:
+            httpSessionMgr->setAp(brctlSettings[setting]);
+            break;
+        case TBrCtlDefs::ESettingsAutoOpenDownloads:
+            httpSessionMgr->enableAutoOpenDownloads(brctlSettings[setting]);
+            break;
+    }
+}
+
+void SettingsContainer::updateHistorySetting(TBrCtlDefs::TBrCtlSettings setting)
+{
+    switch (setting)
+    {
+        case TBrCtlDefs::ESettingsBackList:
+            m_historyController->setBackListAllowed(brctlSettings[setting]);
+            break;
+    }
+}
+
+void SettingsContainer::updateDocumentLoaderSettings(TBrCtlDefs::TBrCtlSettings setting)
+{
+    switch (setting)
+    {
+        case TBrCtlDefs::ESettingsCharacterset:
+        {
+            const TText* charset = charsetForUid(brctlSetting(TBrCtlDefs::ESettingsCharacterset));
+            TPtrC ptr(KNullDesC);
+            if (charset) {
+                ptr.Set(charset);
+            }
+            if (core(m_webView->mainFrame())->loader()->activeDocumentLoader()) {
+                core(m_webView->mainFrame())->loader()->activeDocumentLoader()->setOverrideEncoding(ptr);
+            }            
+            break;
+        }
+    }
+}
+
+unsigned int SettingsContainer::brctlSetting(TBrCtlDefs::TBrCtlSettings setting)
+{
+    unsigned int retVal (0);
+    HttpSessionManager* httpSessionMgr = WebCore::StaticObjectsContainer::instance()->resourceLoaderDelegate()->httpSessionManager();
+    switch( setting )
+        {
+        case TBrCtlDefs::ESettingsSmallScreen:
+        case TBrCtlDefs::ESettingsAutoLoadImages:
+        case TBrCtlDefs::ESettingsEmbedded:
+        case TBrCtlDefs::ESettingsTextWrapEnabled:
+        case TBrCtlDefs::ESettingsCookiesEnabled:
+        case TBrCtlDefs::ESettingsCSSFetchEnabled:
+        case TBrCtlDefs::ESettingsECMAScriptEnabled:
+        case TBrCtlDefs::ESettingsIMEINotifyEnabled:
+        case TBrCtlDefs::ESettingsSecurityWarnings:
+        case TBrCtlDefs::ESettingsSendRefererHeader:
+        case TBrCtlDefs::ESettingsAutoRefresh:
+        case TBrCtlDefs::ESettingsSmartLink:
+        case TBrCtlDefs::ESettingsAutoOpenDownloads:
+        case TBrCtlDefs::ESettingsDisableFlash:
+        case TBrCtlDefs::ESettingsFontSize:
+        case TBrCtlDefs::ESettingsCharacterset:
+        case TBrCtlDefs::ESettingsLaunchAppUid:
+        case TBrCtlDefs::ESettingsLaunchViewId:
+        case TBrCtlDefs::ESettingsLaunchCustomMessageId:
+        case TBrCtlDefs::ESettingsAutoFormFillEnabled:
+        case TBrCtlDefs::ESettingsApId:
+        case TBrCtlDefs::ESettingsCurrentZoomLevelIndex:
+        case TBrCtlDefs::ESettingsPageOverview:
+        case TBrCtlDefs::ESettingsBackList:
+        case TBrCtlDefs::ESettingsToolbarOnOff:
+        case TBrCtlDefs::ESettingsToolbarButton1Cmd:
+        case TBrCtlDefs::ESettingsToolbarButton2Cmd:
+        case TBrCtlDefs::ESettingsToolbarButton3Cmd:
+        case TBrCtlDefs::ESettingsToolbarButton4Cmd:
+        case TBrCtlDefs::ESettingsToolbarButton5Cmd:
+        case TBrCtlDefs::ESettingsToolbarButton6Cmd:
+        case TBrCtlDefs::ESettingsToolbarButton7Cmd:      
+        case TBrCtlDefs::ESettingsScriptLog:
+        case TBrCtlDefs::ESettingsZoomLevelMin:
+        case TBrCtlDefs::ESettingsZoomLevelMax:
+        case TBrCtlDefs::ESettingsZoomLevelDefault:
+            {
+            retVal = brctlSettings[setting];
+            break;
+            }
+        case TBrCtlDefs::ESettingsNumOfDownloads :
+            {
+            retVal = httpSessionMgr->httpDownload()->numOfDownloads();
+            break;
+            }
+        default:
+            {
+            break;   // should not occur
+            }
+        }   // end of switch
+    return retVal;
+
+}
+
+void SettingsContainer::updateZoomSettings(TBrCtlDefs::TBrCtlSettings setting, unsigned int value )
+{
+    m_webView->updateZoomLevel( setting, value );
+}