bedrockProvisioning/bedrockprovisioning.cpp
changeset 3 0954f5dd2cd0
parent 0 1450b09d0cfd
child 12 afcd8e6d025b
--- a/bedrockProvisioning/bedrockprovisioning.cpp	Fri May 14 15:40:36 2010 +0300
+++ b/bedrockProvisioning/bedrockprovisioning.cpp	Tue Jun 29 00:46:29 2010 -0400
@@ -1,87 +1,34 @@
 /*
 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "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.
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License as published by
+* the Free Software Foundation, version 2.1 of the License.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU Lesser General Public License for more details.
 *
-* Contributors:
+* You should have received a copy of the GNU Lesser General Public License
+* along with this program.  If not, 
+* see "http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html/".
 *
-* Description: 
+* Description:
 *
 */
 
-
 #include <QDebug>
 #include <QDir>
 #include <QCoreApplication>
 #include <QDesktopServices>
-#include <QtCore/QStringList>
-#include <QtGui/QMessageBox>
-#include <qwebsettings.h>  
 #include <QProcessEnvironment>
-//#include "qtnresources.h"
-//#include "qtnstrings.h"
-//#include "wrtversions.h"
+#include <QWebSettings>
 #include "bedrockprovisioning.h" 
 
-#ifdef Q_OS_SYMBIAN
-#include "f32file.h"
-#endif
-
-#define VALUEDELIM ";"
-#define RANGEDELIM ":"
-
 namespace BEDROCK_PROVISIONING {
-	
-BedrockProvisioningEnum::BedrockProvisioningEnum(const QString &key):
-        m_key(key)
-      , m_type(StringType)
-      , m_flags(0)
-      , m_enum(-1)
-      , m_category(0)
-      
-{
-}
 
-QString BedrockProvisioningEnum::displayValue()
-{
-    // convert actual value to a string name from the list
-    if (m_type == ListType && m_valuesList.count() == m_validList.count()){
-        for (int i=0; i < m_validList.count(); i++)
-            if (m_value.toString() == m_valuesList[i])
-                return m_validList[i];
-    }
-    // don't display any value for commands
-    else if (m_type == CommandType || m_type == NodeType)
-        return QString();
-
-    return m_value.toString();
-}
-
-QVariant BedrockProvisioningEnum::value()
-{
-    return m_value;
-}
-
-void BedrockProvisioningEnum::setValid(const QString &valid)
-{
-    if (valid.contains(VALUEDELIM))
-        m_validList = valid.split(VALUEDELIM);
-    else if (valid.contains(RANGEDELIM))
-        m_validList = valid.split(RANGEDELIM);
-}
-void BedrockProvisioningEnum::setValues(const QString &values)
-{
-    m_valuesList = values.split(VALUEDELIM);
-}
-////////////////////////////////////////////////////	
-	
-	
 BedrockProvisioning* BedrockProvisioning::m_BedrockProvisioning = 0;
 
 BedrockProvisioning* BedrockProvisioning::createBedrockProvisioning()
@@ -91,21 +38,6 @@
     return m_BedrockProvisioning;
 }
 
-void BedrockProvisioning::resync() // DIMA
-{
-    QStringList list = allKeys();
-    SettingsMap map;
-    foreach (QString key, list)
-        map.insert(key, value(key));
-
-    sync();
-
-    list = allKeys();
-    foreach (QString key, list)
-        if (value(key) != map.value(key))
-            emit settingChanged(key);
-}
-
 BedrockProvisioning::BedrockProvisioning( QObject* parent, QString uid ) :
       QSettings(IniFormat, UserScope, BEDROCK_ORGANIZATION_NAME, uid, parent)
 {
@@ -114,83 +46,78 @@
     init();
 }
 
-// Why the heck isn't this in a global .h file somewhere?
-#define BEDROCK_APPLICATION_NAME "Bedrock"
-
-void BedrockProvisioning::init(bool clear)
+void BedrockProvisioning::init()
 {
-	qDebug() << "brp::init IN";
-	// Unfortunately, this is getting called before WebPageController::initUASettingsAndData() which sets these
-    QCoreApplication::setApplicationName(BEDROCK_APPLICATION_NAME);
-    QCoreApplication::setOrganizationName(BEDROCK_ORGANIZATION_NAME);
-    if (clear)
-        QSettings::clear();
-    
     QString key;
     beginGroup(m_appuid);
     {
-        QSettings::setValue("Version", "BedrockInternal");  //Add more values separated by ';' here
         if (!QSettings::contains("BedrockVersion"))
-            QSettings::setValue("BedrockVersion", QString("BetaRelease"));
-            	
+            QSettings::setValue("BedrockVersion", QString(BEDROCK_VERSION_DEFAULT));
+
         if (!QSettings::contains("ZoomTextOnly"))
             QSettings::setValue("ZoomTextOnly", "0");
-        //QSettings::setValue("ZoomTextOnly/descl", qtn_wrtsetting_zoomtextonly);
-        QSettings::setValue("ZoomTextOnly/type", BedrockProvisioningEnum::ListType);
-        QSettings::setValue("ZoomTextOnly/valid", "Yes;No");
-        QSettings::setValue("ZoomTextOnly/values", "1;0");
-        QSettings::setValue("ZoomTextOnly/flags", BedrockProvisioningEnum::WebAttribute);
-        QSettings::setValue("ZoomTextOnly/enum", QWebSettings::ZoomTextOnly);
-        QSettings::setValue("ZoomTextOnly/cat", BedrockProvisioningEnum::Category1);    	
-        	
+
         if (!QSettings::contains("PopupBlocking"))
-            QSettings::setValue("PopupBlocking", "0");
-        //QSettings::setValue("PopupBlocking/descl", qtn_wrtsetting_popupblocking);
-        QSettings::setValue("PopupBlocking/type", BedrockProvisioningEnum::ListType);
-        QSettings::setValue("PopupBlocking/valid", "On;Off");
-        QSettings::setValue("PopupBlocking/values", "1;0");
-        QSettings::setValue("PopupBlocking/cat", BedrockProvisioningEnum::Category2);
-        	   	
-        if (!QSettings::contains("JavaScriptConsoleLog"))
-            QSettings::setValue("JavaScriptConsoleLog", "0");
-        //QSettings::setValue("JavaScriptConsoleLog/descl", qtn_wrtsetting_jsconsolelog);
-        QSettings::setValue("JavaScriptConsoleLog/type", BedrockProvisioningEnum::ListType);
-        QSettings::setValue("JavaScriptConsoleLog/valid", "Logging Off;Log to file;Show pop-up notes;Log to file and show pop-up notes");
-        QSettings::setValue("JavaScriptConsoleLog/values", "0;1;2;3");
-        QSettings::setValue("JavaScriptConsoleLog/cat", BedrockProvisioningEnum::Category4);
+            QSettings::setValue("PopupBlocking", "1");
+
+        // Base directory for ROM files (if the browser isn't in ROM this will be the same as DataBaseDirectory)
+        if (!QSettings::contains("ROMBaseDirectory")) {
+#if defined Q_OS_SYMBIAN
+#ifndef QT_NO_DESKTOPSERVICES
+            QString baseDir = QDesktopServices::storageLocation(QDesktopServices::DataLocation);
+            if (baseDir.length() > 2 && baseDir.at(1) == ':')
+                baseDir = baseDir.mid(2);
+#else /* QT_NO_DESKTOPSERVICES */
+            QString baseDir = QDir::homePath(); // Not sure if this is valid
+#endif /* QT_NO_DESKTOPSERVICES */
+#elif defined Q_WS_MAEMO_5
+            QString baseDir = "/opt/browser";
+#else /* Win or Linux */
+            QString baseDir = "."; /* Should this also be homePath()? */
+#endif
+            QSettings::setValue("ROMBaseDirectory", baseDir + "/");
+        }
 
-     	  if (!QSettings::contains("JavaScriptConsoleLogFilePath"))
-            QSettings::setValue("JavaScriptConsoleLogFilePath", "jsLog_web.log");
-        //QSettings::setValue("JavaScriptConsoleLogFilePath/descl", qtn_wrtsetting_jsconsolelogfilepath);
-        QSettings::setValue("JavaScriptConsoleLogFilePath/cat", BedrockProvisioningEnum::Category4);
-                	
+        // Base directory for writeable data files, not database directory
+        if (!QSettings::contains("DataBaseDirectory")) {
+#if defined Q_OS_SYMBIAN
+#ifndef QT_NO_DESKTOPSERVICES
+            QString baseDir = QDesktopServices::storageLocation(QDesktopServices::DataLocation);
+#else /* QT_NO_DESKTOPSERVICES */
+            QString baseDir = QDir::homePath();
+#endif /* QT_NO_DESKTOPSERVICES */
+#elif defined Q_WS_MAEMO_5
+            QString baseDir = QDir::homePath();
+#else /* Win or Linux */
+            QString baseDir = "."; /* Should this also be homePath()? */
+#endif
+            QSettings::setValue("DataBaseDirectory", baseDir + "/");
+        }
+
         if (!QSettings::contains("ChromeBaseDirectory")) {
-          #if defined Q_OS_SYMBIAN
-            static const QString defaultChromeBaseDir = "/data/Others/chrome/";
-          #elif defined Q_WS_MAEMO_5
-            static const QString envChromeBaseDir = QProcessEnvironment::systemEnvironment().value("BROWSER_CHROME"); // allow env var overriding for dev
-            static const QString defaultChromeBaseDir = (envChromeBaseDir != "") ? envChromeBaseDir : "/opt/browser/chrome/";
-          #else /* Win or Linux */
+            QString chromeBaseDir = ":/chrome/";
+#ifndef Q_OS_SYMBIAN
+            // Maemo, Linux, Windows can override using an env var
             static const QString envChromeBaseDir = QProcessEnvironment::systemEnvironment().value("BROWSER_CHROME"); // allow env var overriding for dev
-            static const QString defaultChromeBaseDir = (envChromeBaseDir != "") ? envChromeBaseDir : "chrome/";
-          #endif
-          
-          QSettings::setValue("ChromeBaseDirectory", defaultChromeBaseDir); 
+            if (envChromeBaseDir != "")
+                chromeBaseDir = envChromeBaseDir;
+#endif
+          QSettings::setValue("ChromeBaseDirectory", chromeBaseDir); 
         }        	
-        // This is for Ginebra2 but will go away once Ginebra1 is gone.
-        if (!QSettings::contains("ChromeBaseDirectory2")) {
-          #if defined Q_OS_SYMBIAN
-            static const QString defaultChromeBaseDir = "/data/Others/ginebra2/chrome/";
-          #elif defined Q_WS_MAEMO_5
-            static const QString envChromeBaseDir = QProcessEnvironment::systemEnvironment().value("BROWSER_CHROME"); // allow env var overriding for dev
-            static const QString defaultChromeBaseDir = (envChromeBaseDir != "") ? envChromeBaseDir : "/opt/browser/chrome/";
-          #else /* Win or Linux */
-            static const QString envChromeBaseDir = QProcessEnvironment::systemEnvironment().value("BROWSER_CHROME"); // allow env var overriding for dev
-            static const QString defaultChromeBaseDir = (envChromeBaseDir != "") ? envChromeBaseDir : "chrome/";
-          #endif
-          
-          QSettings::setValue("ChromeBaseDirectory2", defaultChromeBaseDir); 
-        }        	
+
+        if (!QSettings::contains("LocalPagesBaseDirectory")) {
+#ifdef Q_OS_SYMBIAN
+            QString localpagesBaseDir = QSettings::value("ROMBaseDirectory").toString() + "localpages/";
+#else        
+            QString localpagesBaseDir = QSettings::value("ChromeBaseDirectory").toString() + "localpages/";
+            // Maemo, Linux, Windows can override using an env var
+            static const QString envBaseDir = QProcessEnvironment::systemEnvironment().value("BROWSER_LOCALPAGES"); // allow env var overriding for dev
+            if (envBaseDir != "")
+                localpagesBaseDir = envBaseDir;
+#endif
+          QSettings::setValue("LocalPagesBaseDirectory", localpagesBaseDir); 
+        }
+        
         if (!QSettings::contains("StartUpChrome")) {
           QSettings::setValue("StartUpChrome", "bedrockchrome/chrome.html"); 
         }        	
@@ -198,7 +125,7 @@
         if (!QSettings::contains("SplashImage")) {
           QSettings::setValue("SplashImage", "localpages/bedrock_splash.png"); 
         }        	
-        	
+
         if (!QSettings::contains("NetworkProxy")) {
 // For s60 arm and maemo arm (i.e. not x86 emulator build) we need to set no proxy
 #if (defined(Q_OS_SYMBIAN)  && !defined(Q_CC_NOKIAX86)) || (defined(Q_WS_MAEMO_5) && !defined(QT_ARCH_I386))
@@ -209,115 +136,134 @@
   	      QSettings::setValue("NetworkProxy", "bswebproxy01.americas.nokia.com");
 #endif
         }
-        //QSettings::setValue("NetworkProxy/descl", qtn_wrtsetting_networkproxy);
-        QSettings::setValue("NetworkProxy/cat", BedrockProvisioningEnum::Category3);
-        	
-        if (!QSettings::contains("DeveloperExtras"))
-            QSettings::setValue("DeveloperExtras", "0");
-        //QSettings::setValue("DeveloperExtras/descl", qtn_wrtsetting_developerextrasenabled);
-        QSettings::setValue("DeveloperExtras/type", BedrockProvisioningEnum::ListType);
-        QSettings::setValue("DeveloperExtras/valid", "Enabled;Disabled");
-        QSettings::setValue("DeveloperExtras/values", "1;0");
-        QSettings::setValue("DeveloperExtras/flags", BedrockProvisioningEnum::WebAttribute);
-        QSettings::setValue("DeveloperExtras/enum", QWebSettings::DeveloperExtrasEnabled);
-        QSettings::setValue("DeveloperExtras/cat", BedrockProvisioningEnum::Category4);
-        	
+
+        if (!QSettings::contains("NetworkPort")) {
+// For s60 arm and maemo arm (i.e. not x86 emulator build) we need to set no proxy
+#if (defined(Q_OS_SYMBIAN)  && !defined(Q_CC_NOKIAX86)) || (defined(Q_WS_MAEMO_5) && !defined(QT_ARCH_I386))
+          // empty proxy only for ARMV5 Symbian targets
+	        QSettings::setValue("NetworkPort", QString()); 
+// everything else, linux, win, s60 emulator, maemo emulator needs proxy
+#else
+  	      QSettings::setValue("NetworkPort", "8080");
+#endif
+        }
         if (!QSettings::contains("DiskCacheEnabled"))
             QSettings::setValue("DiskCacheEnabled", "1");
 
         if (!QSettings::contains("DiskCacheMaxSize"))
             QSettings::setValue("DiskCacheMaxSize", "4194304");
 
+        if (!QSettings::contains("MaxPagesInCache"))
+            QSettings::setValue("MaxPagesInCache", "3");
+
+        if (!QSettings::contains("DnsPrefetchEnabled"))
+            QSettings::setValue("DnsPrefetchEnabled", "0");
+
 #ifdef Q_OS_SYMBIAN
         const QString diskCacheBaseDir = "d:/system/";
 #else
-#ifndef QT_NO_DESKTOPSERVICES
-        const QString diskCacheBaseDir = QDesktopServices::storageLocation(QDesktopServices::DataLocation);
-        qDebug() << "dt diskCacheBaseDir = " << diskCacheBaseDir;
-#else
-        const QString diskCacheBaseDir = QDir::homePath();
-        qDebug() << "hd diskCacheBaseDir = " << diskCacheBaseDir;
-#endif
+        const QString diskCacheBaseDir = QSettings::value("DataBaseDirectory").toString();
 #endif
 
         if (!QSettings::contains("DiskCacheDirectoryPath")) {
-        	qDebug() << "setting diskcachedirpath to " << diskCacheBaseDir + "brCache";
             QSettings::setValue("DiskCacheDirectoryPath", diskCacheBaseDir + "brCache");
         }
 
         if (!QSettings::contains("Cookies"))
             QSettings::setValue("Cookies", "1");
-        //QSettings::setValue("Cookies/descl", qtn_wrtsetting_cookiesenabled);
-        QSettings::setValue("Cookies/type", BedrockProvisioningEnum::ListType);
-        QSettings::setValue("Cookies/valid", "Enabled;Disabled");
-        QSettings::setValue("Cookies/values", "1;0");
-        QSettings::setValue("Cookies/cat", BedrockProvisioningEnum::Category1);
 
         if (!QSettings::contains("StartPage"))
+        {
 #ifdef PLAT_101
-            QSettings::setValue("StartPage", "localpages/startpage_101.html");
+            QSettings::setValue("StartPage", "startpage_101.html");
 #else
-            QSettings::setValue("StartPage", "localpages/startpage.html");
+            QSettings::setValue("StartPage", "startpage.html");
 #endif            
-        QSettings::setValue("StartPage/cat", BedrockProvisioningEnum::Category1);
+        }
 
         if (!QSettings::contains("SaveSession"))
             QSettings::setValue("SaveSession", "1");
-        QSettings::setValue("SaveSession/type", BedrockProvisioningEnum::ListType);
-        QSettings::setValue("SaveSession/valid", "Enabled;Disabled");
-        QSettings::setValue("SaveSession/values", "1;0");
-        QSettings::setValue("SaveSession/cat", BedrockProvisioningEnum::Category1);
+
+        if (!QSettings::contains("SaveHistory"))
+            QSettings::setValue("SaveHistory", "1");
+
+        if (!QSettings::contains("BrowserEncoding"))
+            QSettings::setValue("BrowserEncoding", QString("iso-8859-1"));
+
+        if (!QSettings::contains("Html5LocalStorage")) {
+            QSettings::setValue("Html5LocalStorage", "1");
+        }
+
+        if (!QSettings::contains("Html5DatabaseStorage")) {
+            QSettings::setValue("Html5DatabaseStorage", "1");
+        }
+
+        if (!QSettings::contains("Html5DatabaseStorageMaxSize")) {
+            // This quota applies to each individual persistent
+            // store (local storage, database storage) database.
+            // There is a separate instance for each security origin
+            // that uses the feature.  See QWebSecurityOrigin.
+            //
+            // Limit: 5MB per origin
+            QString maxSize = QString::number(5 * 1024 * 1024); // 5MB per origin
+            QSettings::setValue("Html5DatabaseStorageMaxSize", maxSize);
+        }
+
+        if (!QSettings::contains("Html5ApplicationCache")) {
+            QSettings::setValue("Html5ApplicationCache", "1");
+        }
+
+        if (!QSettings::contains("Html5ApplicationCacheMaxSize")) {
+            // This quota applies to the single database instance
+            // used to store ALL application cache data.  It should
+            // be fairly large, as the application cache is used to
+            // store entire files -- html/css/javascript text, image
+            // files, etc.
+            //
+            // Limit: 200MB = 5MB per origin * 40 origins
+            QString maxSize = QString::number(200 * 1024 * 1024);
+            QSettings::setValue("Html5ApplicationCacheMaxSize", maxSize);
+        }
         
-        qDebug() << "in group brp cwrtCache = " << this->valueAsString("DiskCacheDirectoryPath");
-    	qDebug() << "brp::init endGroup " << m_appuid;
+        // reserved entries for local bookmarks
+        if (!QSettings::contains("Bookmark0Title")) {
+            QSettings::setValue("Bookmark0Title", "Browser Welcome Page");
+        }
+        
+        if (!QSettings::contains("Bookmark0Url")) {
+#ifdef PLAT_101
+            QSettings::setValue("Bookmark0Url", "startpage_101.html");
+#else
+            QSettings::setValue("Bookmark0Url", "startpage.html");
+#endif
+        }
+        
+        if (!QSettings::contains("Bookmark1Title")) {
+            QSettings::setValue("Bookmark1Title", "");
+        }
+        
+        if (!QSettings::contains("Bookmark1Url")) {
+            QSettings::setValue("Bookmark1Url", "");
+        }
+        
+        if (!QSettings::contains("Bookmark2Title")) {
+            QSettings::setValue("Bookmark2Title", "");
+        }
+        
+        if (!QSettings::contains("Bookmark2Url")) {
+            QSettings::setValue("Bookmark2Url", "");
+        }
     }
+	
+	        // userAgentStringSetup, default empty.  
+        if (!QSettings::contains("UserAgentString"))
+        {
+            QSettings::setValue("UserAgentString", QString());
+        }          				
     endGroup(); // m_appuid
     sync();
-    qDebug() << "m_appuid = " << m_appuid;
-    qDebug() << "orgname = " << this->organizationName();
-    qDebug() << "appname = " << this->applicationName();
-    qDebug() << "filename = " << this->fileName();
-    qDebug() << "brp cwrtCache = " << this->valueAsString("DiskCacheDirectoryPath");
-    qDebug() << "settings: " << this->allKeys().join("::");
-	qDebug() << "brp::init OUT";
 }
 
-BedrockProvisioningEnum BedrockProvisioning::setting(const QString &key)
-{
-    BedrockProvisioningEnum setting(key);
-
-    bool appMissing( QSettings::group().isEmpty() && !key.startsWith(m_appuid));
-    if (appMissing)
-        beginGroup(m_appuid);
-    setting.m_value = QSettings::value(key);
-    QSettings::beginGroup(key);
-    QStringList childkeys = QSettings::allKeys();
-    setting.m_group = QSettings::group();
-    for (int i=0; i < childkeys.count(); i++){
-        if (childkeys[i] == "type")
-            setting.m_type = QSettings::value(childkeys[i]).toInt();
-        else if (childkeys[i] == "desc")
-                setting.m_desc = QSettings::value(childkeys[i]).toString();
-        //else if (childkeys[i] == "descl")// localized
-                //setting.m_desc = tr(setting_strings[QSettings::value(childkeys[i]).toInt()]);
-        else if (childkeys[i] == "valid")
-            setting.setValid(QSettings::value(childkeys[i]).toString());
-        else if (childkeys[i] == "values")
-            setting.setValues(QSettings::value(childkeys[i]).toString());
-        else if (childkeys[i] == "flags")
-            setting.setFlags(QSettings::value(childkeys[i]).toInt());
-        else if (childkeys[i] == "enum")
-            setting.m_enum = QSettings::value(childkeys[i]).toInt();
-        else if (childkeys[i] == "cat")
-            setting.m_category = QSettings::value(childkeys[i]).toInt();
-        }
-    endGroup();
-    if (appMissing)
-        endGroup();
-
-
-    return setting;
-}
 
 QString BedrockProvisioning::valueAsString(const QString &key, const QVariant &defaultValue)
 {
@@ -329,6 +275,11 @@
     return value(key, defaultValue).toInt();
 }
 
+qint64 BedrockProvisioning::valueAsInt64(const QString &key, const QVariant &defaultValue)
+{
+    return value(key, defaultValue).toLongLong();
+}
+
 double BedrockProvisioning::valueAsDouble(const QString &key, const QVariant &defaultValue)
 {
     return value(key, defaultValue).toDouble();
@@ -341,10 +292,10 @@
         beginGroup(m_appuid);
 
     QVariant val = QSettings::value(key, defaultValue);
-    
+
     if (appMissing)
         endGroup();
-    
+
     return val;
 }
 
@@ -383,21 +334,4 @@
     return ret;
 }
 
-
-void BedrockProvisioning::setFactorySettings()
-{
-    QSettings::clear();
-    // TODO: add factory default settings
-}
-
-void BedrockProvisioning::addProvisioning(const QString &key, QSettings::SettingsMap& att, bool forceRefresh)
-{
-    if (forceRefresh || !QSettings::contains(key)) {
-        QSettings::setValue(key, att);
-        sync();
-    }
-}
-
-
-
 } // end of namespace BEDROCK_PROVISIONING