1 /* 2 Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) 3 4 This library is free software; you can redistribute it and/or 5 modify it under the terms of the GNU Library General Public 6 License as published by the Free Software Foundation; either 7 version 2 of the License, or (at your option) any later version. 8 9 This library is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 Library General Public License for more details. 13 14 You should have received a copy of the GNU Library General Public License 15 along with this library; see the file COPYING.LIB. If not, write to 16 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 17 Boston, MA 02110-1301, USA. 18 */ 19 20 #include "config.h" 21 #include "qwebsettings.h" 22 23 #include "qwebpage.h" 24 #include "qwebpage_p.h" 25 #include "qwebplugindatabase_p.h" 26 27 #include "Cache.h" 28 #include "CrossOriginPreflightResultCache.h" 29 #include "FontCache.h" 30 #include "Page.h" 31 #include "PageCache.h" 32 #include "Settings.h" 33 #include "KURL.h" 34 #include "PlatformString.h" 35 #include "IconDatabase.h" 36 #include "Image.h" 37 #include "IntSize.h" 38 #include "ApplicationCacheStorage.h" 39 #include "DatabaseTracker.h" 40 #include "FileSystem.h" 41 42 #include <QApplication> 43 #include <QDesktopServices> 44 #include <QDir> 45 #include <QHash> 46 #include <QSharedData> 47 #include <QUrl> 48 #include <QFileInfo> 49 50 #if ENABLE(QT_BEARER) 51 #include "NetworkStateNotifier.h" 52 #endif 53 54 void QWEBKIT_EXPORT qt_networkAccessAllowed(bool isAllowed) 55 { 56 #if ENABLE(QT_BEARER) 57 WebCore::networkStateNotifier().setNetworkAccessAllowed(isAllowed); 58 #endif 59 } 60 61 class QWebSettingsPrivate { 62 public: 63 QWebSettingsPrivate(WebCore::Settings* wcSettings = 0) 64 : settings(wcSettings) 65 { 66 } 67 68 QHash<int, QString> fontFamilies; 69 QHash<int, int> fontSizes; 70 QHash<int, bool> attributes; 71 QUrl userStyleSheetLocation; 72 QString defaultTextEncoding; 73 QString localStoragePath; 74 QString offlineWebApplicationCachePath; 75 qint64 offlineStorageDefaultQuota; 76 77 void apply(); 78 WebCore::Settings* settings; 79 }; 80 81 typedef QHash<int, QPixmap> WebGraphicHash; 82 Q_GLOBAL_STATIC(WebGraphicHash, _graphics) 83 84 static WebGraphicHash* graphics() 85 { 86 WebGraphicHash* hash = _graphics(); 87 88 if (hash->isEmpty()) { 89 hash->insert(QWebSettings::MissingImageGraphic, QPixmap(QLatin1String(":webkit/resources/missingImage.png"))); 90 hash->insert(QWebSettings::MissingPluginGraphic, QPixmap(QLatin1String(":webkit/resources/nullPlugin.png"))); 91 hash->insert(QWebSettings::DefaultFrameIconGraphic, QPixmap(QLatin1String(":webkit/resources/urlIcon.png"))); 92 hash->insert(QWebSettings::TextAreaSizeGripCornerGraphic, QPixmap(QLatin1String(":webkit/resources/textAreaResizeCorner.png"))); 93 hash->insert(QWebSettings::DeleteButtonGraphic, QPixmap(QLatin1String(":webkit/resources/deleteButton.png"))); 94 } 95 96 return hash; 97 } 98 99 Q_GLOBAL_STATIC(QList<QWebSettingsPrivate*>, allSettings); 100 101 void QWebSettingsPrivate::apply() 102 { 103 if (settings) { 104 settings->setTextAreasAreResizable(true); 105 106 QWebSettingsPrivate* global = QWebSettings::globalSettings()->d; 107 108 QString family = fontFamilies.value(QWebSettings::StandardFont, 109 global->fontFamilies.value(QWebSettings::StandardFont)); 110 settings->setStandardFontFamily(family); 111 112 family = fontFamilies.value(QWebSettings::FixedFont, 113 global->fontFamilies.value(QWebSettings::FixedFont)); 114 settings->setFixedFontFamily(family); 115 116 family = fontFamilies.value(QWebSettings::SerifFont, 117 global->fontFamilies.value(QWebSettings::SerifFont)); 118 settings->setSerifFontFamily(family); 119 120 family = fontFamilies.value(QWebSettings::SansSerifFont, 121 global->fontFamilies.value(QWebSettings::SansSerifFont)); 122 settings->setSansSerifFontFamily(family); 123 124 family = fontFamilies.value(QWebSettings::CursiveFont, 125 global->fontFamilies.value(QWebSettings::CursiveFont)); 126 settings->setCursiveFontFamily(family); 127 128 family = fontFamilies.value(QWebSettings::FantasyFont, 129 global->fontFamilies.value(QWebSettings::FantasyFont)); 130 settings->setFantasyFontFamily(family); 131 132 int size = fontSizes.value(QWebSettings::MinimumFontSize, 133 global->fontSizes.value(QWebSettings::MinimumFontSize)); 134 settings->setMinimumFontSize(size); 135 136 size = fontSizes.value(QWebSettings::MinimumLogicalFontSize, 137 global->fontSizes.value(QWebSettings::MinimumLogicalFontSize)); 138 settings->setMinimumLogicalFontSize(size); 139 140 size = fontSizes.value(QWebSettings::DefaultFontSize, 141 global->fontSizes.value(QWebSettings::DefaultFontSize)); 142 settings->setDefaultFontSize(size); 143 144 size = fontSizes.value(QWebSettings::DefaultFixedFontSize, 145 global->fontSizes.value(QWebSettings::DefaultFixedFontSize)); 146 settings->setDefaultFixedFontSize(size); 147 148 bool value = attributes.value(QWebSettings::AutoLoadImages, 149 global->attributes.value(QWebSettings::AutoLoadImages)); 150 settings->setLoadsImagesAutomatically(value); 151 152 value = attributes.value(QWebSettings::JavascriptEnabled, 153 global->attributes.value(QWebSettings::JavascriptEnabled)); 154 settings->setJavaScriptEnabled(value); 155 #if USE(ACCELERATED_COMPOSITING) 156 value = attributes.value(QWebSettings::AcceleratedCompositingEnabled, 157 global->attributes.value(QWebSettings::AcceleratedCompositingEnabled)); 158 159 settings->setAcceleratedCompositingEnabled(value); 160 #endif 161 value = attributes.value(QWebSettings::JavascriptCanOpenWindows, 162 global->attributes.value(QWebSettings::JavascriptCanOpenWindows)); 163 settings->setJavaScriptCanOpenWindowsAutomatically(value); 164 165 value = attributes.value(QWebSettings::JavaEnabled, 166 global->attributes.value(QWebSettings::JavaEnabled)); 167 settings->setJavaEnabled(value); 168 169 value = attributes.value(QWebSettings::PluginsEnabled, 170 global->attributes.value(QWebSettings::PluginsEnabled)); 171 settings->setPluginsEnabled(value); 172 173 value = attributes.value(QWebSettings::PrivateBrowsingEnabled, 174 global->attributes.value(QWebSettings::PrivateBrowsingEnabled)); 175 settings->setPrivateBrowsingEnabled(value); 176 177 value = attributes.value(QWebSettings::JavascriptCanAccessClipboard, 178 global->attributes.value(QWebSettings::JavascriptCanAccessClipboard)); 179 settings->setDOMPasteAllowed(value); 180 181 value = attributes.value(QWebSettings::DeveloperExtrasEnabled, 182 global->attributes.value(QWebSettings::DeveloperExtrasEnabled)); 183 settings->setDeveloperExtrasEnabled(value); 184 185 QUrl location = !userStyleSheetLocation.isEmpty() ? userStyleSheetLocation : global->userStyleSheetLocation; 186 settings->setUserStyleSheetLocation(WebCore::KURL(location)); 187 188 QString encoding = !defaultTextEncoding.isEmpty() ? defaultTextEncoding: global->defaultTextEncoding; 189 settings->setDefaultTextEncodingName(encoding); 190 191 QString storagePath = !localStoragePath.isEmpty() ? localStoragePath : global->localStoragePath; 192 settings->setLocalStorageDatabasePath(storagePath); 193 194 value = attributes.value(QWebSettings::ZoomTextOnly, 195 global->attributes.value(QWebSettings::ZoomTextOnly)); 196 settings->setZoomsTextOnly(value); 197 198 value = attributes.value(QWebSettings::PrintElementBackgrounds, 199 global->attributes.value(QWebSettings::PrintElementBackgrounds)); 200 settings->setShouldPrintBackgrounds(value); 201 202 value = attributes.value(QWebSettings::OfflineStorageDatabaseEnabled, 203 global->attributes.value(QWebSettings::OfflineStorageDatabaseEnabled)); 204 settings->setDatabasesEnabled(value); 205 206 value = attributes.value(QWebSettings::OfflineWebApplicationCacheEnabled, 207 global->attributes.value(QWebSettings::OfflineWebApplicationCacheEnabled)); 208 settings->setOfflineWebApplicationCacheEnabled(value); 209 210 value = attributes.value(QWebSettings::LocalStorageEnabled, 211 global->attributes.value(QWebSettings::LocalStorageEnabled)); 212 settings->setLocalStorageEnabled(value); 213 214 value = attributes.value(QWebSettings::LocalContentCanAccessRemoteUrls, 215 global->attributes.value(QWebSettings::LocalContentCanAccessRemoteUrls)); 216 settings->setAllowUniversalAccessFromFileURLs(value); 217 218 value = attributes.value(QWebSettings::XSSAuditorEnabled, 219 global->attributes.value(QWebSettings::XSSAuditorEnabled)); 220 settings->setXSSAuditorEnabled(value); 221 222 settings->setUsesPageCache(WebCore::pageCache()->capacity()); 223 } else { 224 QList<QWebSettingsPrivate*> settings = *::allSettings(); 225 for (int i = 0; i < settings.count(); ++i) 226 settings[i]->apply(); 227 } 228 } 229 230 /*! 231 Returns the global settings object. 232 233 Any setting changed on the default object is automatically applied to all 234 QWebPage instances where the particular setting is not overriden already. 235 */ 236 QWebSettings* QWebSettings::globalSettings() 237 { 238 static QWebSettings* global = 0; 239 if (!global) 240 global = new QWebSettings; 241 return global; 242 } 243 244 /*! 245 \class QWebSettings 246 \since 4.4 247 \brief The QWebSettings class provides an object to store the settings used 248 by QWebPage and QWebFrame. 249 250 \inmodule QtWebKit 251 252 Each QWebPage object has its own QWebSettings object, which configures the 253 settings for that page. If a setting is not configured, then it is looked 254 up in the global settings object, which can be accessed using 255 globalSettings(). 256 257 QWebSettings allows configuration of browser properties, such as font sizes and 258 families, the location of a custom style sheet, and generic attributes like 259 JavaScript and plugins. Individual attributes are set using the setAttribute() 260 function. The \l{QWebSettings::WebAttribute}{WebAttribute} enum further describes 261 each attribute. 262 263 QWebSettings also configures global properties such as the Web page memory 264 cache and the Web page icon database, local database storage and offline 265 applications storage. 266 267 \section1 Enabling Plugins 268 269 Support for browser plugins can enabled by setting the 270 \l{QWebSettings::PluginsEnabled}{PluginsEnabled} attribute. For many applications, 271 this attribute is enabled for all pages by setting it on the 272 \l{globalSettings()}{global settings object}. 273 274 \section1 Web Application Support 275 276 WebKit provides support for features specified in \l{HTML 5} that improve the 277 performance and capabilities of Web applications. These include client-side 278 (offline) storage and the use of a Web application cache. 279 280 Client-side (offline) storage is an improvement over the use of cookies to 281 store persistent data in Web applications. Applications can configure and 282 enable the use of an offline storage database by calling the 283 setOfflineStoragePath() with an appropriate file path, and can limit the quota 284 for each application by calling setOfflineStorageDefaultQuota(). 285 286 \sa QWebPage::settings(), QWebView::settings(), {Web Browser} 287 */ 288 289 /*! 290 \enum QWebSettings::FontFamily 291 292 This enum describes the generic font families defined by CSS 2. 293 For more information see the 294 \l{http://www.w3.org/TR/REC-CSS2/fonts.html#generic-font-families}{CSS standard}. 295 296 \value StandardFont 297 \value FixedFont 298 \value SerifFont 299 \value SansSerifFont 300 \value CursiveFont 301 \value FantasyFont 302 */ 303 304 /*! 305 \enum QWebSettings::FontSize 306 307 This enum describes the font sizes configurable through QWebSettings. 308 309 \value MinimumFontSize The hard minimum font size. 310 \value MinimumLogicalFontSize The minimum logical font size that is applied 311 after zooming with QWebFrame's textSizeMultiplier(). 312 \value DefaultFontSize The default font size for regular text. 313 \value DefaultFixedFontSize The default font size for fixed-pitch text. 314 */ 315 316 /*! 317 \enum QWebSettings::WebGraphic 318 319 This enums describes the standard graphical elements used in webpages. 320 321 \value MissingImageGraphic The replacement graphic shown when an image could not be loaded. 322 \value MissingPluginGraphic The replacement graphic shown when a plugin could not be loaded. 323 \value DefaultFrameIconGraphic The default icon for QWebFrame::icon(). 324 \value TextAreaSizeGripCornerGraphic The graphic shown for the size grip of text areas. 325 */ 326 327 /*! 328 \enum QWebSettings::WebAttribute 329 330 This enum describes various attributes that are configurable through QWebSettings. 331 332 \value AutoLoadImages Specifies whether images are automatically loaded in 333 web pages. 334 \value DnsPrefetchEnabled Specifies whether QtWebkit will try to pre-fetch DNS entries to 335 speed up browsing. This only works as a global attribute. Only for Qt 4.6 and later. 336 \value JavascriptEnabled Enables or disables the running of JavaScript 337 programs. 338 \value JavaEnabled Enables or disables Java applets. 339 Currently Java applets are not supported. 340 \value PluginsEnabled Enables or disables plugins in Web pages. 341 \value PrivateBrowsingEnabled Private browsing prevents WebKit from 342 recording visited pages in the history and storing web page icons. 343 \value JavascriptCanOpenWindows Specifies whether JavaScript programs 344 can open new windows. 345 \value JavascriptCanAccessClipboard Specifies whether JavaScript programs 346 can read or write to the clipboard. 347 \value DeveloperExtrasEnabled Enables extra tools for Web developers. 348 Currently this enables the "Inspect" element in the context menu as 349 well as the use of QWebInspector which controls the WebKit WebInspector 350 for web site debugging. 351 \value LinksIncludedInFocusChain Specifies whether hyperlinks should be 352 included in the keyboard focus chain. 353 \value ZoomTextOnly Specifies whether the zoom factor on a frame applies to 354 only the text or all content. 355 \value PrintElementBackgrounds Specifies whether the background color and images 356 are also drawn when the page is printed. 357 \value OfflineStorageDatabaseEnabled Specifies whether support for the HTML 5 358 offline storage feature is enabled or not. Disabled by default. 359 \value OfflineWebApplicationCacheEnabled Specifies whether support for the HTML 5 360 web application cache feature is enabled or not. Disabled by default. 361 \value LocalStorageEnabled Specifies whether support for the HTML 5 362 local storage feature is enabled or not. Disabled by default. 363 \value LocalStorageDatabaseEnabled \e{This enum value is deprecated.} Use 364 QWebSettings::LocalStorageEnabled instead. 365 \value LocalContentCanAccessRemoteUrls Specifies whether locally loaded documents are allowed to access remote urls. 366 \value XSSAuditorEnabled Specifies whether load requests should be monitored for cross-site scripting attempts. 367 */ 368 369 /*! 370 \internal 371 */ 372 QWebSettings::QWebSettings() 373 : d(new QWebSettingsPrivate) 374 { 375 // Initialize our global defaults 376 d->fontSizes.insert(QWebSettings::MinimumFontSize, 0); 377 d->fontSizes.insert(QWebSettings::MinimumLogicalFontSize, 0); 378 d->fontSizes.insert(QWebSettings::DefaultFontSize, 16); 379 d->fontSizes.insert(QWebSettings::DefaultFixedFontSize, 13); 380 d->fontFamilies.insert(QWebSettings::StandardFont, QLatin1String("Arial")); 381 d->fontFamilies.insert(QWebSettings::FixedFont, QLatin1String("Courier New")); 382 d->fontFamilies.insert(QWebSettings::SerifFont, QLatin1String("Times New Roman")); 383 d->fontFamilies.insert(QWebSettings::SansSerifFont, QLatin1String("Arial")); 384 d->fontFamilies.insert(QWebSettings::CursiveFont, QLatin1String("Arial")); 385 d->fontFamilies.insert(QWebSettings::FantasyFont, QLatin1String("Arial")); 386 387 d->attributes.insert(QWebSettings::AutoLoadImages, true); 388 d->attributes.insert(QWebSettings::DnsPrefetchEnabled, false); 389 d->attributes.insert(QWebSettings::JavascriptEnabled, true); 390 d->attributes.insert(QWebSettings::LinksIncludedInFocusChain, true); 391 d->attributes.insert(QWebSettings::ZoomTextOnly, false); 392 d->attributes.insert(QWebSettings::PrintElementBackgrounds, true); 393 d->attributes.insert(QWebSettings::OfflineStorageDatabaseEnabled, false); 394 d->attributes.insert(QWebSettings::OfflineWebApplicationCacheEnabled, false); 395 d->attributes.insert(QWebSettings::LocalStorageEnabled, false); 396 d->attributes.insert(QWebSettings::LocalContentCanAccessRemoteUrls, false); 397 d->attributes.insert(QWebSettings::AcceleratedCompositingEnabled, false); 398 d->offlineStorageDefaultQuota = 5 * 1024 * 1024; 399 d->defaultTextEncoding = QLatin1String("iso-8859-1"); 400 } 401 402 /*! 403 \internal 404 */ 405 QWebSettings::QWebSettings(WebCore::Settings* settings) 406 : d(new QWebSettingsPrivate(settings)) 407 { 408 d->settings = settings; 409 d->apply(); 410 allSettings()->append(d); 411 } 412 413 /*! 414 \internal 415 */ 416 QWebSettings::~QWebSettings() 417 { 418 if (d->settings) 419 allSettings()->removeAll(d); 420 421 delete d; 422 } 423 424 /*! 425 Sets the font size for \a type to \a size. 426 */ 427 void QWebSettings::setFontSize(FontSize type, int size) 428 { 429 d->fontSizes.insert(type, size); 430 d->apply(); 431 } 432 433 /*! 434 Returns the default font size for \a type. 435 */ 436 int QWebSettings::fontSize(FontSize type) const 437 { 438 int defaultValue = 0; 439 if (d->settings) { 440 QWebSettingsPrivate* global = QWebSettings::globalSettings()->d; 441 defaultValue = global->fontSizes.value(type); 442 } 443 return d->fontSizes.value(type, defaultValue); 444 } 445 446 /*! 447 Resets the font size for \a type to the size specified in the global 448 settings object. 449 450 This function has no effect on the global QWebSettings instance. 451 */ 452 void QWebSettings::resetFontSize(FontSize type) 453 { 454 if (d->settings) { 455 d->fontSizes.remove(type); 456 d->apply(); 457 } 458 } 459 460 /*! 461 Specifies the location of a user stylesheet to load with every web page. 462 463 The \a location must be either a path on the local filesystem, or a data URL 464 with UTF-8 and Base64 encoded data, such as: 465 466 "data:text/css;charset=utf-8;base64,cCB7IGJhY2tncm91bmQtY29sb3I6IHJlZCB9Ow==;" 467 468 \sa userStyleSheetUrl() 469 */ 470 void QWebSettings::setUserStyleSheetUrl(const QUrl& location) 471 { 472 d->userStyleSheetLocation = location; 473 d->apply(); 474 } 475 476 /*! 477 Returns the location of the user stylesheet. 478 479 \sa setUserStyleSheetUrl() 480 */ 481 QUrl QWebSettings::userStyleSheetUrl() const 482 { 483 return d->userStyleSheetLocation; 484 } 485 486 /*! 487 \since 4.6 488 Specifies the default text encoding system. 489 490 The \a encoding, must be a string describing an encoding such as "utf-8", 491 "iso-8859-1", etc. If left empty a default value will be used. For a more 492 extensive list of encoding names see \l{QTextCodec} 493 494 \sa defaultTextEncoding() 495 */ 496 void QWebSettings::setDefaultTextEncoding(const QString& encoding) 497 { 498 d->defaultTextEncoding = encoding; 499 d->apply(); 500 } 501 502 /*! 503 \since 4.6 504 Returns the default text encoding. 505 506 \sa setDefaultTextEncoding() 507 */ 508 QString QWebSettings::defaultTextEncoding() const 509 { 510 return d->defaultTextEncoding; 511 } 512 513 /*! 514 Sets the path of the icon database to \a path. The icon database is used 515 to store "favicons" associated with web sites. 516 517 \a path must point to an existing directory where the icons are stored. 518 519 Setting an empty path disables the icon database. 520 */ 521 void QWebSettings::setIconDatabasePath(const QString& path) 522 { 523 WebCore::iconDatabase()->delayDatabaseCleanup(); 524 525 if (!path.isEmpty()) { 526 WebCore::iconDatabase()->setEnabled(true); 527 QFileInfo info(path); 528 if (info.isDir() && info.isWritable()) 529 WebCore::iconDatabase()->open(path); 530 } else { 531 WebCore::iconDatabase()->setEnabled(false); 532 WebCore::iconDatabase()->close(); 533 } 534 } 535 536 /*! 537 Returns the path of the icon database or an empty string if the icon 538 database is disabled. 539 540 \sa setIconDatabasePath(), clearIconDatabase() 541 */ 542 QString QWebSettings::iconDatabasePath() 543 { 544 if (WebCore::iconDatabase()->isEnabled() && WebCore::iconDatabase()->isOpen()) 545 return WebCore::iconDatabase()->databasePath(); 546 else 547 return QString(); 548 } 549 550 /*! 551 Clears the icon database. 552 */ 553 void QWebSettings::clearIconDatabase() 554 { 555 if (WebCore::iconDatabase()->isEnabled() && WebCore::iconDatabase()->isOpen()) 556 WebCore::iconDatabase()->removeAllIcons(); 557 } 558 559 /*! 560 Returns the web site's icon for \a url. 561 562 If the web site does not specify an icon, or the icon is not in the 563 database, a null QIcon is returned. 564 565 \note The returned icon's size is arbitrary. 566 567 \sa setIconDatabasePath() 568 */ 569 QIcon QWebSettings::iconForUrl(const QUrl& url) 570 { 571 WebCore::Image* image = WebCore::iconDatabase()->iconForPageURL(WebCore::KURL(url).string(), 572 WebCore::IntSize(16, 16)); 573 if (!image) 574 return QPixmap(); 575 576 QPixmap* icon = image->nativeImageForCurrentFrame(); 577 if (!icon) 578 return QPixmap(); 579 580 return* icon; 581 } 582 583 /* 584 Returns the plugin database object. 585 586 QWebPluginDatabase *QWebSettings::pluginDatabase() 587 { 588 static QWebPluginDatabase* database = 0; 589 if (!database) 590 database = new QWebPluginDatabase(); 591 return database; 592 } 593 */ 594 595 /*! 596 Sets \a graphic to be drawn when QtWebKit needs to draw an image of the 597 given \a type. 598 599 For example, when an image cannot be loaded the pixmap specified by 600 \l{QWebSettings::WebGraphic}{MissingImageGraphic} is drawn instead. 601 602 \sa webGraphic() 603 */ 604 void QWebSettings::setWebGraphic(WebGraphic type, const QPixmap& graphic) 605 { 606 WebGraphicHash* h = graphics(); 607 if (graphic.isNull()) 608 h->remove(type); 609 else 610 h->insert(type, graphic); 611 } 612 613 /*! 614 Returns a previously set pixmap used to draw replacement graphics of the 615 specified \a type. 616 617 For example, when an image cannot be loaded the pixmap specified by 618 \l{QWebSettings::WebGraphic}{MissingImageGraphic} is drawn instead. 619 620 \sa setWebGraphic() 621 */ 622 QPixmap QWebSettings::webGraphic(WebGraphic type) 623 { 624 return graphics()->value(type); 625 } 626 627 /*! 628 Frees up as much memory as possible by cleaning all memory caches such 629 as page, object and font cache. 630 631 \since 4.6 632 */ 633 void QWebSettings::clearMemoryCaches() 634 { 635 // Turn the cache on and off. Disabling the object cache will remove all 636 // resources from the cache. They may still live on if they are referenced 637 // by some Web page though. 638 if (!WebCore::cache()->disabled()) { 639 WebCore::cache()->setDisabled(true); 640 WebCore::cache()->setDisabled(false); 641 } 642 643 int pageCapacity = WebCore::pageCache()->capacity(); 644 // Setting size to 0, makes all pages be released. 645 WebCore::pageCache()->setCapacity(0); 646 WebCore::pageCache()->releaseAutoreleasedPagesNow(); 647 WebCore::pageCache()->setCapacity(pageCapacity); 648 649 // Invalidating the font cache and freeing all inactive font data. 650 WebCore::fontCache()->invalidate(); 651 652 // Empty the Cross-Origin Preflight cache 653 WebCore::CrossOriginPreflightResultCache::shared().empty(); 654 } 655 656 /*! 657 Sets the maximum number of pages to hold in the memory page cache to \a pages. 658 659 The Page Cache allows for a nicer user experience when navigating forth or back 660 to pages in the forward/back history, by pausing and resuming up to \a pages 661 per page group. 662 663 For more information about the feature, please refer to: 664 665 http://webkit.org/blog/427/webkit-page-cache-i-the-basics/ 666 */ 667 void QWebSettings::setMaximumPagesInCache(int pages) 668 { 669 QWebSettingsPrivate* global = QWebSettings::globalSettings()->d; 670 WebCore::pageCache()->setCapacity(qMax(0, pages)); 671 global->apply(); 672 } 673 674 /*! 675 Returns the maximum number of web pages that are kept in the memory cache. 676 */ 677 int QWebSettings::maximumPagesInCache() 678 { 679 return WebCore::pageCache()->capacity(); 680 } 681 682 /*! 683 Specifies the capacities for the memory cache for dead objects such as 684 stylesheets or scripts. 685 686 The \a cacheMinDeadCapacity specifies the \e minimum number of bytes that 687 dead objects should consume when the cache is under pressure. 688 689 \a cacheMaxDead is the \e maximum number of bytes that dead objects should 690 consume when the cache is \bold not under pressure. 691 692 \a totalCapacity specifies the \e maximum number of bytes that the cache 693 should consume \bold overall. 694 695 The cache is enabled by default. Calling setObjectCacheCapacities(0, 0, 0) 696 will disable the cache. Calling it with one non-zero enables it again. 697 */ 698 void QWebSettings::setObjectCacheCapacities(int cacheMinDeadCapacity, int cacheMaxDead, int totalCapacity) 699 { 700 bool disableCache = !cacheMinDeadCapacity && !cacheMaxDead && !totalCapacity; 701 WebCore::cache()->setDisabled(disableCache); 702 703 WebCore::cache()->setCapacities(qMax(0, cacheMinDeadCapacity), 704 qMax(0, cacheMaxDead), 705 qMax(0, totalCapacity)); 706 } 707 708 /*! 709 Sets the actual font family to \a family for the specified generic family, 710 \a which. 711 */ 712 void QWebSettings::setFontFamily(FontFamily which, const QString& family) 713 { 714 d->fontFamilies.insert(which, family); 715 d->apply(); 716 } 717 718 /*! 719 Returns the actual font family for the specified generic font family, 720 \a which. 721 */ 722 QString QWebSettings::fontFamily(FontFamily which) const 723 { 724 QString defaultValue; 725 if (d->settings) { 726 QWebSettingsPrivate* global = QWebSettings::globalSettings()->d; 727 defaultValue = global->fontFamilies.value(which); 728 } 729 return d->fontFamilies.value(which, defaultValue); 730 } 731 732 /*! 733 Resets the actual font family to the default font family, specified by 734 \a which. 735 736 This function has no effect on the global QWebSettings instance. 737 */ 738 void QWebSettings::resetFontFamily(FontFamily which) 739 { 740 if (d->settings) { 741 d->fontFamilies.remove(which); 742 d->apply(); 743 } 744 } 745 746 /*! 747 \fn void QWebSettings::setAttribute(WebAttribute attribute, bool on) 748 749 Enables or disables the specified \a attribute feature depending on the 750 value of \a on. 751 */ 752 void QWebSettings::setAttribute(WebAttribute attr, bool on) 753 { 754 d->attributes.insert(attr, on); 755 d->apply(); 756 } 757 758 /*! 759 \fn bool QWebSettings::testAttribute(WebAttribute attribute) const 760 761 Returns true if \a attribute is enabled; otherwise returns false. 762 */ 763 bool QWebSettings::testAttribute(WebAttribute attr) const 764 { 765 bool defaultValue = false; 766 if (d->settings) { 767 QWebSettingsPrivate* global = QWebSettings::globalSettings()->d; 768 defaultValue = global->attributes.value(attr); 769 } 770 return d->attributes.value(attr, defaultValue); 771 } 772 773 /*! 774 \fn void QWebSettings::resetAttribute(WebAttribute attribute) 775 776 Resets the setting of \a attribute. 777 This function has no effect on the global QWebSettings instance. 778 779 \sa globalSettings() 780 */ 781 void QWebSettings::resetAttribute(WebAttribute attr) 782 { 783 if (d->settings) { 784 d->attributes.remove(attr); 785 d->apply(); 786 } 787 } 788 789 /*! 790 \since 4.5 791 792 Sets the path for HTML5 offline storage to \a path. 793 794 \a path must point to an existing directory where the databases are stored. 795 796 Setting an empty path disables the feature. 797 798 \sa offlineStoragePath() 799 */ 800 void QWebSettings::setOfflineStoragePath(const QString& path) 801 { 802 #if ENABLE(DATABASE) 803 WebCore::DatabaseTracker::tracker().setDatabaseDirectoryPath(path); 804 #endif 805 } 806 807 /*! 808 \since 4.5 809 810 Returns the path of the HTML5 offline storage or an empty string if the 811 feature is disabled. 812 813 \sa setOfflineStoragePath() 814 */ 815 QString QWebSettings::offlineStoragePath() 816 { 817 #if ENABLE(DATABASE) 818 return WebCore::DatabaseTracker::tracker().databaseDirectoryPath(); 819 #else 820 return QString(); 821 #endif 822 } 823 824 /*! 825 \since 4.5 826 827 Sets the value of the default quota for new offline storage databases 828 to \a maximumSize. 829 */ 830 void QWebSettings::setOfflineStorageDefaultQuota(qint64 maximumSize) 831 { 832 QWebSettings::globalSettings()->d->offlineStorageDefaultQuota = maximumSize; 833 } 834 835 /*! 836 \since 4.5 837 838 Returns the value of the default quota for new offline storage databases. 839 */ 840 qint64 QWebSettings::offlineStorageDefaultQuota() 841 { 842 return QWebSettings::globalSettings()->d->offlineStorageDefaultQuota; 843 } 844 845 /*! 846 \since 4.6 847 \relates QWebSettings 848 849 Sets the path for HTML5 offline web application cache storage to \a path. 850 851 An application cache acts like an HTTP cache in some sense. For documents 852 that use the application cache via JavaScript, the loader mechinery will 853 first ask the application cache for the contents, before hitting the 854 network. 855 856 The feature is described in details at: 857 http://dev.w3.org/html5/spec/Overview.html#appcache 858 859 \a path must point to an existing directory where the cache is stored. 860 861 Setting an empty path disables the feature. 862 863 \sa offlineWebApplicationCachePath() 864 */ 865 void QWebSettings::setOfflineWebApplicationCachePath(const QString& path) 866 { 867 #if ENABLE(OFFLINE_WEB_APPLICATIONS) 868 WebCore::cacheStorage().setCacheDirectory(path); 869 #endif 870 } 871 872 /*! 873 \since 4.6 874 \relates QWebSettings 875 876 Returns the path of the HTML5 offline web application cache storage 877 or an empty string if the feature is disabled. 878 879 \sa setOfflineWebApplicationCachePath() 880 */ 881 QString QWebSettings::offlineWebApplicationCachePath() 882 { 883 #if ENABLE(OFFLINE_WEB_APPLICATIONS) 884 return WebCore::cacheStorage().cacheDirectory(); 885 #else 886 return QString(); 887 #endif 888 } 889 890 /*! 891 \since 4.6 892 893 Sets the value of the quota for the offline web application cache 894 to \a maximumSize. 895 */ 896 void QWebSettings::setOfflineWebApplicationCacheQuota(qint64 maximumSize) 897 { 898 #if ENABLE(OFFLINE_WEB_APPLICATIONS) 899 WebCore::cacheStorage().setMaximumSize(maximumSize); 900 #endif 901 } 902 903 /*! 904 \since 4.6 905 906 Returns the value of the quota for the offline web application cache. 907 */ 908 qint64 QWebSettings::offlineWebApplicationCacheQuota() 909 { 910 #if ENABLE(OFFLINE_WEB_APPLICATIONS) 911 return WebCore::cacheStorage().maximumSize(); 912 #else 913 return 0; 914 #endif 915 } 916 917 /*! 918 \since 4.6 919 \relates QWebSettings 920 921 Sets the path for HTML5 local storage to \a path. 922 923 For more information on HTML5 local storage see the 924 \l{http://www.w3.org/TR/webstorage/#the-localstorage-attribute}{Web Storage standard}. 925 926 Support for local storage can enabled by setting the 927 \l{QWebSettings::LocalStorageEnabled}{LocalStorageEnabled} attribute. 928 929 \sa localStoragePath() 930 */ 931 void QWebSettings::setLocalStoragePath(const QString& path) 932 { 933 d->localStoragePath = path; 934 d->apply(); 935 } 936 937 /*! 938 \since 4.6 939 \relates QWebSettings 940 941 Returns the path for HTML5 local storage. 942 943 \sa setLocalStoragePath() 944 */ 945 QString QWebSettings::localStoragePath() const 946 { 947 return d->localStoragePath; 948 } 949 950 /*! 951 \since 4.6 952 \relates QWebSettings 953 954 Enables WebKit persistent data and sets the path to \a path. 955 If the \a path is empty the path for persistent data is set to the 956 user-specific data location specified by 957 \l{QDesktopServices::DataLocation}{DataLocation}. 958 959 \sa localStoragePath() 960 */ 961 void QWebSettings::enablePersistentStorage(const QString& path) 962 { 963 QString storagePath; 964 965 if (path.isEmpty()) { 966 storagePath = QDesktopServices::storageLocation(QDesktopServices::DataLocation); 967 968 if (storagePath.isEmpty()) 969 storagePath = WebCore::pathByAppendingComponent(QDir::homePath(), QCoreApplication::applicationName()); 970 } else 971 storagePath = path; 972 973 WebCore::makeAllDirectories(storagePath); 974 975 QWebSettings::setIconDatabasePath(storagePath); 976 QWebSettings::setOfflineWebApplicationCachePath(storagePath); 977 QWebSettings::setOfflineStoragePath(WebCore::pathByAppendingComponent(storagePath, "Databases")); 978 QWebSettings::globalSettings()->setLocalStoragePath(WebCore::pathByAppendingComponent(storagePath, "LocalStorage")); 979 QWebSettings::globalSettings()->setAttribute(QWebSettings::LocalStorageEnabled, true); 980 QWebSettings::globalSettings()->setAttribute(QWebSettings::OfflineStorageDatabaseEnabled, true); 981 QWebSettings::globalSettings()->setAttribute(QWebSettings::OfflineWebApplicationCacheEnabled, true); 982 } 983 984 /*! 985 \fn QWebSettingsPrivate* QWebSettings::handle() const 986 \internal 987 */ 988