diff -r 000000000000 -r dd21522fd290 webengine/osswebengine/WebKit/s60/webview/SettingsContainer.cpp --- /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 ); +}