BrowserWidget::BrowserWidget(QWidget *parent, QSettings *settings, QObject *jsProxy): QGraphicsView(parent), scene(0), jsProxy(jsProxy), zoomStepFactor (settings->value("browser/zoom_step_factor").toFloat()), homePageUrl (settings->value("browser/home_page_url").toString()), errorPageUrl (settings->value("browser/error_url").toString()), unsupportedPageUrl (settings->value("browser/unsupported_url").toString()), pagesInFastHistory (settings->value("browser/pages_in_fast_history").toInt()), freezeForMsecsWhenZooming (settings->value("browser/freeze_time_when_zoom_ms").toInt()), freezeForMsecsWhenDragging (settings->value("browser/freeze_time_when_drag_ms").toInt()), maxDragDistanceToEmitClick (settings->value("browser/click_if_drag_at_most_px").toInt()), dragDistance(maxDragDistanceToEmitClick) { webView = new QGraphicsWebView(); webPage = new BrowserWebPage(); webView->setPage(webPage); newScene(); // visual settings setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); setFrameShape(QFrame::NoFrame); setViewportUpdateMode(QGraphicsView::SmartViewportUpdate); webView->setResizesToContents(true); setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); QPalette pal(palette()); pal.setColor(QPalette::Base, Qt::white); setPalette(pal); // web settings QWebSettings *globalSettings = QWebSettings::globalSettings(); globalSettings->setAttribute(QWebSettings::PluginsEnabled, true); globalSettings->setAttribute(QWebSettings::TiledBackingStoreEnabled, true); globalSettings->setMaximumPagesInCache(pagesInFastHistory); webView->page()->history()->setMaximumItemCount(pagesInFastHistory); webView->page()->setForwardUnsupportedContent(true); // connects connect(webView, SIGNAL(urlChanged(QUrl)), this, SLOT(urlChanging(QUrl))); connect(webView, SIGNAL(titleChanged(QString)), this, SIGNAL(titleChanged(QString))); connect(webView, SIGNAL(loadFinished(bool)), this, SLOT(newScene())); connect(webView, SIGNAL(loadProgress(int)), this, SIGNAL(loadProgress(int))); connect(webView->page(), SIGNAL(unsupportedContent(QNetworkReply*)), this, SLOT(unsupportedContent(QNetworkReply*))); connect(webView->page()->networkAccessManager(), SIGNAL(sslErrors(QNetworkReply*, const QList<QSslError>&)), this, SLOT(sslErrors(QNetworkReply*, const QList<QSslError>&)) ); connect(&unfreezeTimer, SIGNAL(timeout()), this, SLOT(unfreezeTiles())); unfreezeTimer.setSingleShot(true); connect(webView->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(addJavaScriptBinding())); addJavaScriptBinding(); }
bool WebSettings::initWebSettings() { if (!localSettingsLoaded) return false; qDebug("webOS::WebSettings::initWebSettings"); QWebSettings* globalWebSettings = QWebSettings::globalSettings(); QSettings settings; if (settings.value(WEB_SETTINGS_KEY_PERSISTENT_STORAGE).toBool()) { QString path = settings.value(WEB_SETTINGS_KEY_PERSISTENT_STORAGE_PATH).toString(); if (!path.isEmpty()) { globalWebSettings->setAttribute(QWebSettings::LocalStorageEnabled, true); globalWebSettings->setAttribute(QWebSettings::OfflineStorageDatabaseEnabled, true); globalWebSettings->setAttribute(QWebSettings::OfflineWebApplicationCacheEnabled, true); globalWebSettings->setIconDatabasePath(path); globalWebSettings->setOfflineWebApplicationCachePath(path); globalWebSettings->setOfflineStoragePath(QString("%1/Databases").arg(path)); globalWebSettings->setLocalStoragePath(QString("%1/LocalStorage").arg(path)); } } if (settings.contains(WEB_SETTINGS_KEY_AUTO_LOAD_IMAGES)) globalWebSettings->setAttribute(QWebSettings::AutoLoadImages, settings.value(WEB_SETTINGS_KEY_AUTO_LOAD_IMAGES).toBool()); if (settings.contains(WEB_SETTINGS_KEY_DNS_PREFETCH)) globalWebSettings->setAttribute(QWebSettings::DnsPrefetchEnabled, settings.value(WEB_SETTINGS_KEY_DNS_PREFETCH).toBool()); if (settings.contains(WEB_SETTINGS_KEY_ICON_DATABASE_PATH)) globalWebSettings->setIconDatabasePath(settings.value(WEB_SETTINGS_KEY_ICON_DATABASE_PATH).toString()); if (settings.contains(WEB_SETTINGS_KEY_JAVASCRIPT)) globalWebSettings->setAttribute(QWebSettings::JavascriptEnabled, settings.value(WEB_SETTINGS_KEY_JAVASCRIPT).toBool()); if (settings.contains(WEB_SETTINGS_KEY_PLUGINS)) globalWebSettings->setAttribute(QWebSettings::PluginsEnabled, settings.value(WEB_SETTINGS_KEY_PLUGINS).toBool()); if (settings.contains(WEB_SETTINGS_KEY_PRIVATE_BROWSING)) globalWebSettings->setAttribute(QWebSettings::PrivateBrowsingEnabled, settings.value(WEB_SETTINGS_KEY_PRIVATE_BROWSING).toBool()); if (settings.contains(WEB_SETTINGS_KEY_JAVASCRIPT_CAN_OPEN_WINDOWS)) globalWebSettings->setAttribute(QWebSettings::JavascriptCanOpenWindows, settings.value(WEB_SETTINGS_KEY_JAVASCRIPT_CAN_OPEN_WINDOWS).toBool()); if (settings.contains(WEB_SETTINGS_KEY_JAVASCRIPT_CAN_CLOSE_WINDOWS)) globalWebSettings->setAttribute(QWebSettings::JavascriptCanCloseWindows, settings.value(WEB_SETTINGS_KEY_JAVASCRIPT_CAN_CLOSE_WINDOWS).toBool()); if (settings.contains(WEB_SETTINGS_KEY_JAVASCRIPT_CAN_ACCESS_CLIPBOARD)) globalWebSettings->setAttribute(QWebSettings::JavascriptCanAccessClipboard, settings.value(WEB_SETTINGS_KEY_JAVASCRIPT_CAN_ACCESS_CLIPBOARD).toBool()); if (settings.contains(WEB_SETTINGS_KEY_DEVELOPER_EXTRAS)) globalWebSettings->setAttribute(QWebSettings::DeveloperExtrasEnabled, settings.value(WEB_SETTINGS_KEY_DEVELOPER_EXTRAS).toBool()); if (settings.contains(WEB_SETTINGS_KEY_SPACIAL_NAVIGATION)) globalWebSettings->setAttribute(QWebSettings::SpatialNavigationEnabled, settings.value(WEB_SETTINGS_KEY_SPACIAL_NAVIGATION).toBool()); if (settings.contains(WEB_SETTINGS_KEY_LINKS_INCLUDED_IN_FOCUS_CHAIN)) globalWebSettings->setAttribute(QWebSettings::LinksIncludedInFocusChain, settings.value(WEB_SETTINGS_KEY_LINKS_INCLUDED_IN_FOCUS_CHAIN).toBool()); if (settings.contains(WEB_SETTINGS_KEY_ZOOM_TEXT_ONLY)) globalWebSettings->setAttribute(QWebSettings::ZoomTextOnly, settings.value(WEB_SETTINGS_KEY_ZOOM_TEXT_ONLY).toBool()); if (settings.contains(WEB_SETTINGS_KEY_PRINT_ELEMENT_BACKGROUNDS)) globalWebSettings->setAttribute(QWebSettings::PrintElementBackgrounds, settings.value(WEB_SETTINGS_KEY_PRINT_ELEMENT_BACKGROUNDS).toBool()); if (settings.contains(WEB_SETTINGS_KEY_OFFLINE_STORAGE_DATABASE)) { bool offlineStorageDatabaseEnabled = settings.value(WEB_SETTINGS_KEY_OFFLINE_STORAGE_DATABASE).toBool(); globalWebSettings->setAttribute(QWebSettings::OfflineStorageDatabaseEnabled, offlineStorageDatabaseEnabled); if (offlineStorageDatabaseEnabled && settings.contains(WEB_SETTINGS_KEY_OFFLINE_STORAGE_DATABASE_PATH)) globalWebSettings->setOfflineStoragePath(settings.value(WEB_SETTINGS_KEY_OFFLINE_STORAGE_DATABASE_PATH).toString()); } if (settings.contains(WEB_SETTINGS_KEY_OFFLINE_WEBAPP_CACHE)) { bool offlineWebApplicationCachedEnabled = settings.value(WEB_SETTINGS_KEY_OFFLINE_WEBAPP_CACHE).toBool(); globalWebSettings->setAttribute(QWebSettings::OfflineWebApplicationCacheEnabled, offlineWebApplicationCachedEnabled); if (offlineWebApplicationCachedEnabled && settings.contains(WEB_SETTINGS_KEY_OFFLINE_WEBAPP_CACHE_PATH)) globalWebSettings->setOfflineWebApplicationCachePath(settings.value(WEB_SETTINGS_KEY_OFFLINE_WEBAPP_CACHE_PATH).toString()); } if (settings.contains(WEB_SETTINGS_KEY_LOCAL_STORAGE)) { bool localStorageEnabled = settings.value(WEB_SETTINGS_KEY_LOCAL_STORAGE).toBool(); globalWebSettings->setAttribute(QWebSettings::LocalStorageEnabled, localStorageEnabled); if (localStorageEnabled && settings.contains(WEB_SETTINGS_KEY_LOCAL_STORAGE_PATH)) globalWebSettings->setLocalStoragePath(settings.value(WEB_SETTINGS_KEY_LOCAL_STORAGE_PATH).toString()); } if (settings.contains(WEB_SETTINGS_KEY_LOCAL_CONTENT_CAN_ACCESS_REMOTE_URLS)) globalWebSettings->setAttribute(QWebSettings::LocalContentCanAccessRemoteUrls, settings.value(WEB_SETTINGS_KEY_LOCAL_CONTENT_CAN_ACCESS_REMOTE_URLS).toBool()); if (settings.contains(WEB_SETTINGS_KEY_LOCAL_CONTENT_CAN_ACCESS_FILE_URLS)) globalWebSettings->setAttribute(QWebSettings::LocalContentCanAccessFileUrls, settings.value(WEB_SETTINGS_KEY_LOCAL_CONTENT_CAN_ACCESS_FILE_URLS).toBool()); if (settings.contains(WEB_SETTINGS_KEY_XSS_AUDITING)) globalWebSettings->setAttribute(QWebSettings::XSSAuditingEnabled, settings.value(WEB_SETTINGS_KEY_XSS_AUDITING).toBool()); if (settings.contains(WEB_SETTINGS_KEY_ACCELERATED_COMPOSITING)) globalWebSettings->setAttribute(QWebSettings::AcceleratedCompositingEnabled, settings.value(WEB_SETTINGS_KEY_ACCELERATED_COMPOSITING).toBool()); if (settings.contains(WEB_SETTINGS_KEY_WEBGL)) globalWebSettings->setAttribute(QWebSettings::WebGLEnabled, settings.value(WEB_SETTINGS_KEY_WEBGL).toBool()); if (settings.contains(WEB_SETTINGS_KEY_TILE_BACKING_STORE)) globalWebSettings->setAttribute(QWebSettings::TiledBackingStoreEnabled, settings.value(WEB_SETTINGS_KEY_TILE_BACKING_STORE).toBool()); if (settings.contains(WEB_SETTINGS_KEY_FRAME_FLATTENING)) globalWebSettings->setAttribute(QWebSettings::FrameFlatteningEnabled, settings.value(WEB_SETTINGS_KEY_FRAME_FLATTENING).toBool()); if (settings.contains(WEB_SETTINGS_KEY_SITE_SPECIFIC_QUIRKS)) globalWebSettings->setAttribute(QWebSettings::SiteSpecificQuirksEnabled, settings.value(WEB_SETTINGS_KEY_SITE_SPECIFIC_QUIRKS).toBool()); if (settings.contains(WEB_SETTINGS_KEY_MAX_PAGES_IN_CACHE)) globalWebSettings->setMaximumPagesInCache(settings.value(WEB_SETTINGS_KEY_MAX_PAGES_IN_CACHE).toInt()); if (settings.contains(WEB_SETTINGS_KEY_OBJ_CACHE_CAPACITY_MIN) && settings.contains(WEB_SETTINGS_KEY_OBJ_CACHE_CAPACITY_MAX) && settings.contains(WEB_SETTINGS_KEY_OBJ_CACHE_CAPACITY_OVERALL)) { globalWebSettings->setObjectCacheCapacities( stringToBytes(settings.value(WEB_SETTINGS_KEY_OBJ_CACHE_CAPACITY_MIN).toString()), stringToBytes(settings.value(WEB_SETTINGS_KEY_OBJ_CACHE_CAPACITY_MAX).toString()), stringToBytes(settings.value(WEB_SETTINGS_KEY_OBJ_CACHE_CAPACITY_OVERALL).toString())); } if (settings.contains(WEB_SETTINGS_KEY_OFFLINE_STORAGE_QUOTA)) globalWebSettings->setOfflineStorageDefaultQuota(stringToBytes(settings.value(WEB_SETTINGS_KEY_OFFLINE_STORAGE_QUOTA).toString())); if (settings.contains(WEB_SETTINGS_KEY_OFFLINE_WEBAPP_QUOTA)) globalWebSettings->setOfflineStorageDefaultQuota(stringToBytes(settings.value(WEB_SETTINGS_KEY_OFFLINE_WEBAPP_QUOTA).toString())); QStringList supplementalPath; if (settings.contains(WEB_SETTINGS_KEY_PLUGIN_SUPPLEMENTAL_PATH)) supplementalPath.append(settings.value(WEB_SETTINGS_KEY_PLUGIN_SUPPLEMENTAL_PATH).toString()); if (settings.contains(WEB_SETTINGS_KEY_PLUGIN_SUPPLEMENTAL_USER_PATH)) supplementalPath.append(settings.value(WEB_SETTINGS_KEY_PLUGIN_SUPPLEMENTAL_USER_PATH).toString()); #if QT_VERSION < QT_VERSION_CHECK(5,0,0) if (!supplementalPath.isEmpty()) globalWebSettings->setPluginSupplementalPath(supplementalPath.join(QLatin1String(":"))); if (settings.contains(WEB_SETTINGS_KEY_FULLSCREEN_API)) globalWebSettings->setAttribute(QWebSettings::FullScreenEnabled, settings.value(WEB_SETTINGS_KEY_FULLSCREEN_API).toBool()); #endif return true; }