1 /* 2 * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 26 #include "config.h" 27 #include "Settings.h" 28 29 #include "BackForwardList.h" 30 #include "Frame.h" 31 #include "FrameTree.h" 32 #include "FrameView.h" 33 #include "HistoryItem.h" 34 #include "Page.h" 35 #include "PageCache.h" 36 #include <limits> 37 38 using namespace std; 39 40 namespace WebCore { 41 42 static void setNeedsReapplyStylesInAllFrames(Page* page) 43 { 44 for (Frame* frame = page->mainFrame(); frame; frame = frame->tree()->traverseNext()) 45 frame->setNeedsReapplyStyles(); 46 } 47 48 #if USE(SAFARI_THEME) 49 bool Settings::gShouldPaintNativeControls = true; 50 #endif 51 52 #if PLATFORM(WIN) || (OS(WINDOWS) && PLATFORM(WX)) 53 bool Settings::gShouldUseHighResolutionTimers = true; 54 #endif 55 56 Settings::Settings(Page* page) 57 : m_page(page) 58 #ifdef ANDROID_LAYOUT 59 , m_layoutAlgorithm(kLayoutFitColumnToScreen) 60 #endif 61 , m_editableLinkBehavior(EditableLinkDefaultBehavior) 62 , m_textDirectionSubmenuInclusionBehavior(TextDirectionSubmenuAutomaticallyIncluded) 63 , m_minimumFontSize(0) 64 , m_minimumLogicalFontSize(0) 65 , m_defaultFontSize(0) 66 , m_defaultFixedFontSize(0) 67 #ifdef ANDROID_LAYOUT 68 , m_useWideViewport(false) 69 #endif 70 #ifdef ANDROID_MULTIPLE_WINDOWS 71 , m_supportMultipleWindows(true) 72 #endif 73 #ifdef ANDROID_BLOCK_NETWORK_IMAGE 74 , m_blockNetworkImage(false) 75 #endif 76 , m_maximumDecodedImageSize(numeric_limits<size_t>::max()) 77 , m_localStorageQuota(5 * 1024 * 1024) // Suggested by the HTML5 spec. 78 , m_pluginAllowedRunTime(numeric_limits<unsigned>::max()) 79 , m_isJavaEnabled(false) 80 , m_loadsImagesAutomatically(false) 81 , m_privateBrowsingEnabled(false) 82 , m_caretBrowsingEnabled(false) 83 , m_areImagesEnabled(true) 84 , m_arePluginsEnabled(false) 85 , m_databasesEnabled(false) 86 , m_localStorageEnabled(false) 87 , m_isJavaScriptEnabled(false) 88 , m_isWebSecurityEnabled(true) 89 , m_allowUniversalAccessFromFileURLs(true) 90 , m_javaScriptCanOpenWindowsAutomatically(false) 91 , m_shouldPrintBackgrounds(false) 92 , m_textAreasAreResizable(false) 93 #if ENABLE(DASHBOARD_SUPPORT) 94 , m_usesDashboardBackwardCompatibilityMode(false) 95 #endif 96 , m_needsAdobeFrameReloadingQuirk(false) 97 , m_needsKeyboardEventDisambiguationQuirks(false) 98 , m_treatsAnyTextCSSLinkAsStylesheet(false) 99 , m_needsLeopardMailQuirks(false) 100 , m_needsTigerMailQuirks(false) 101 , m_isDOMPasteAllowed(false) 102 , m_shrinksStandaloneImagesToFit(true) 103 , m_usesPageCache(false) 104 , m_showsURLsInToolTips(false) 105 , m_forceFTPDirectoryListings(false) 106 , m_developerExtrasEnabled(false) 107 , m_authorAndUserStylesEnabled(true) 108 , m_needsSiteSpecificQuirks(false) 109 , m_fontRenderingMode(0) 110 , m_frameSetFlatteningEnabled(false) 111 , m_webArchiveDebugModeEnabled(false) 112 , m_localFileContentSniffingEnabled(false) 113 , m_inApplicationChromeMode(false) 114 , m_offlineWebApplicationCacheEnabled(false) 115 , m_shouldPaintCustomScrollbars(false) 116 , m_zoomsTextOnly(false) 117 , m_enforceCSSMIMETypeInStrictMode(true) 118 , m_usesEncodingDetector(false) 119 , m_allowScriptsToCloseWindows(false) 120 , m_editingBehavior( 121 #if PLATFORM(MAC) || (PLATFORM(CHROMIUM) && OS(DARWIN)) 122 // (PLATFORM(MAC) is always false in Chromium, hence the extra condition.) 123 EditingMacBehavior 124 #else 125 EditingWindowsBehavior 126 #endif 127 ) 128 // FIXME: This should really be disabled by default as it makes platforms that don't support the feature download files 129 // they can't use by. Leaving enabled for now to not change existing behavior. 130 , m_downloadableBinaryFontsEnabled(true) 131 , m_xssAuditorEnabled(false) 132 , m_acceleratedCompositingEnabled(true) 133 , m_showDebugBorders(false) 134 , m_showRepaintCounter(false) 135 , m_experimentalNotificationsEnabled(false) 136 , m_webGLEnabled(false) 137 , m_geolocationEnabled(true) 138 , m_loadDeferringEnabled(true) 139 #ifdef ANDROID_PLUGINS 140 , m_pluginsOnDemand(false) 141 #endif 142 { 143 // A Frame may not have been created yet, so we initialize the AtomicString 144 // hash before trying to use it. 145 AtomicString::init(); 146 #ifdef ANDROID_META_SUPPORT 147 resetMetadataSettings(); 148 #endif 149 } 150 151 void Settings::setStandardFontFamily(const AtomicString& standardFontFamily) 152 { 153 if (standardFontFamily == m_standardFontFamily) 154 return; 155 156 m_standardFontFamily = standardFontFamily; 157 setNeedsReapplyStylesInAllFrames(m_page); 158 } 159 160 void Settings::setFixedFontFamily(const AtomicString& fixedFontFamily) 161 { 162 if (m_fixedFontFamily == fixedFontFamily) 163 return; 164 165 m_fixedFontFamily = fixedFontFamily; 166 setNeedsReapplyStylesInAllFrames(m_page); 167 } 168 169 void Settings::setSerifFontFamily(const AtomicString& serifFontFamily) 170 { 171 if (m_serifFontFamily == serifFontFamily) 172 return; 173 174 m_serifFontFamily = serifFontFamily; 175 setNeedsReapplyStylesInAllFrames(m_page); 176 } 177 178 void Settings::setSansSerifFontFamily(const AtomicString& sansSerifFontFamily) 179 { 180 if (m_sansSerifFontFamily == sansSerifFontFamily) 181 return; 182 183 m_sansSerifFontFamily = sansSerifFontFamily; 184 setNeedsReapplyStylesInAllFrames(m_page); 185 } 186 187 void Settings::setCursiveFontFamily(const AtomicString& cursiveFontFamily) 188 { 189 if (m_cursiveFontFamily == cursiveFontFamily) 190 return; 191 192 m_cursiveFontFamily = cursiveFontFamily; 193 setNeedsReapplyStylesInAllFrames(m_page); 194 } 195 196 void Settings::setFantasyFontFamily(const AtomicString& fantasyFontFamily) 197 { 198 if (m_fantasyFontFamily == fantasyFontFamily) 199 return; 200 201 m_fantasyFontFamily = fantasyFontFamily; 202 setNeedsReapplyStylesInAllFrames(m_page); 203 } 204 205 void Settings::setMinimumFontSize(int minimumFontSize) 206 { 207 if (m_minimumFontSize == minimumFontSize) 208 return; 209 210 m_minimumFontSize = minimumFontSize; 211 setNeedsReapplyStylesInAllFrames(m_page); 212 } 213 214 void Settings::setMinimumLogicalFontSize(int minimumLogicalFontSize) 215 { 216 if (m_minimumLogicalFontSize == minimumLogicalFontSize) 217 return; 218 219 m_minimumLogicalFontSize = minimumLogicalFontSize; 220 setNeedsReapplyStylesInAllFrames(m_page); 221 } 222 223 void Settings::setDefaultFontSize(int defaultFontSize) 224 { 225 if (m_defaultFontSize == defaultFontSize) 226 return; 227 228 m_defaultFontSize = defaultFontSize; 229 setNeedsReapplyStylesInAllFrames(m_page); 230 } 231 232 void Settings::setDefaultFixedFontSize(int defaultFontSize) 233 { 234 if (m_defaultFixedFontSize == defaultFontSize) 235 return; 236 237 m_defaultFixedFontSize = defaultFontSize; 238 setNeedsReapplyStylesInAllFrames(m_page); 239 } 240 241 #ifdef ANDROID_BLOCK_NETWORK_IMAGE 242 void Settings::setBlockNetworkImage(bool blockNetworkImage) 243 { 244 m_blockNetworkImage = blockNetworkImage; 245 } 246 #endif 247 248 void Settings::setLoadsImagesAutomatically(bool loadsImagesAutomatically) 249 { 250 m_loadsImagesAutomatically = loadsImagesAutomatically; 251 } 252 253 void Settings::setJavaScriptEnabled(bool isJavaScriptEnabled) 254 { 255 m_isJavaScriptEnabled = isJavaScriptEnabled; 256 } 257 258 void Settings::setWebSecurityEnabled(bool isWebSecurityEnabled) 259 { 260 m_isWebSecurityEnabled = isWebSecurityEnabled; 261 } 262 263 void Settings::setAllowUniversalAccessFromFileURLs(bool allowUniversalAccessFromFileURLs) 264 { 265 m_allowUniversalAccessFromFileURLs = allowUniversalAccessFromFileURLs; 266 } 267 268 void Settings::setJavaEnabled(bool isJavaEnabled) 269 { 270 m_isJavaEnabled = isJavaEnabled; 271 } 272 273 void Settings::setImagesEnabled(bool areImagesEnabled) 274 { 275 m_areImagesEnabled = areImagesEnabled; 276 } 277 278 void Settings::setPluginsEnabled(bool arePluginsEnabled) 279 { 280 m_arePluginsEnabled = arePluginsEnabled; 281 } 282 283 void Settings::setDatabasesEnabled(bool databasesEnabled) 284 { 285 m_databasesEnabled = databasesEnabled; 286 } 287 288 void Settings::setLocalStorageEnabled(bool localStorageEnabled) 289 { 290 m_localStorageEnabled = localStorageEnabled; 291 } 292 293 void Settings::setLocalStorageQuota(unsigned localStorageQuota) 294 { 295 m_localStorageQuota = localStorageQuota; 296 } 297 298 void Settings::setPrivateBrowsingEnabled(bool privateBrowsingEnabled) 299 { 300 m_privateBrowsingEnabled = privateBrowsingEnabled; 301 } 302 303 void Settings::setJavaScriptCanOpenWindowsAutomatically(bool javaScriptCanOpenWindowsAutomatically) 304 { 305 m_javaScriptCanOpenWindowsAutomatically = javaScriptCanOpenWindowsAutomatically; 306 } 307 308 void Settings::setDefaultTextEncodingName(const String& defaultTextEncodingName) 309 { 310 m_defaultTextEncodingName = defaultTextEncodingName; 311 } 312 313 void Settings::setUserStyleSheetLocation(const KURL& userStyleSheetLocation) 314 { 315 if (m_userStyleSheetLocation == userStyleSheetLocation) 316 return; 317 318 m_userStyleSheetLocation = userStyleSheetLocation; 319 320 m_page->userStyleSheetLocationChanged(); 321 } 322 323 void Settings::setShouldPrintBackgrounds(bool shouldPrintBackgrounds) 324 { 325 m_shouldPrintBackgrounds = shouldPrintBackgrounds; 326 } 327 328 void Settings::setTextAreasAreResizable(bool textAreasAreResizable) 329 { 330 if (m_textAreasAreResizable == textAreasAreResizable) 331 return; 332 333 m_textAreasAreResizable = textAreasAreResizable; 334 setNeedsReapplyStylesInAllFrames(m_page); 335 } 336 337 void Settings::setEditableLinkBehavior(EditableLinkBehavior editableLinkBehavior) 338 { 339 m_editableLinkBehavior = editableLinkBehavior; 340 } 341 342 void Settings::setTextDirectionSubmenuInclusionBehavior(TextDirectionSubmenuInclusionBehavior behavior) 343 { 344 m_textDirectionSubmenuInclusionBehavior = behavior; 345 } 346 347 #if ENABLE(DASHBOARD_SUPPORT) 348 void Settings::setUsesDashboardBackwardCompatibilityMode(bool usesDashboardBackwardCompatibilityMode) 349 { 350 m_usesDashboardBackwardCompatibilityMode = usesDashboardBackwardCompatibilityMode; 351 } 352 #endif 353 354 // FIXME: This quirk is needed because of Radar 4674537 and 5211271. We need to phase it out once Adobe 355 // can fix the bug from their end. 356 void Settings::setNeedsAdobeFrameReloadingQuirk(bool shouldNotReloadIFramesForUnchangedSRC) 357 { 358 m_needsAdobeFrameReloadingQuirk = shouldNotReloadIFramesForUnchangedSRC; 359 } 360 361 // This is a quirk we are pro-actively applying to old applications. It changes keyboard event dispatching, 362 // making keyIdentifier available on keypress events, making charCode available on keydown/keyup events, 363 // and getting keypress dispatched in more cases. 364 void Settings::setNeedsKeyboardEventDisambiguationQuirks(bool needsQuirks) 365 { 366 m_needsKeyboardEventDisambiguationQuirks = needsQuirks; 367 } 368 369 void Settings::setTreatsAnyTextCSSLinkAsStylesheet(bool treatsAnyTextCSSLinkAsStylesheet) 370 { 371 m_treatsAnyTextCSSLinkAsStylesheet = treatsAnyTextCSSLinkAsStylesheet; 372 } 373 374 void Settings::setNeedsLeopardMailQuirks(bool needsQuirks) 375 { 376 m_needsLeopardMailQuirks = needsQuirks; 377 } 378 379 void Settings::setNeedsTigerMailQuirks(bool needsQuirks) 380 { 381 m_needsTigerMailQuirks = needsQuirks; 382 } 383 384 void Settings::setDOMPasteAllowed(bool DOMPasteAllowed) 385 { 386 m_isDOMPasteAllowed = DOMPasteAllowed; 387 } 388 389 void Settings::setUsesPageCache(bool usesPageCache) 390 { 391 if (m_usesPageCache == usesPageCache) 392 return; 393 394 m_usesPageCache = usesPageCache; 395 if (!m_usesPageCache) { 396 HistoryItemVector& historyItems = m_page->backForwardList()->entries(); 397 for (unsigned i = 0; i < historyItems.size(); i++) 398 pageCache()->remove(historyItems[i].get()); 399 pageCache()->releaseAutoreleasedPagesNow(); 400 } 401 } 402 403 void Settings::setShrinksStandaloneImagesToFit(bool shrinksStandaloneImagesToFit) 404 { 405 m_shrinksStandaloneImagesToFit = shrinksStandaloneImagesToFit; 406 } 407 408 void Settings::setShowsURLsInToolTips(bool showsURLsInToolTips) 409 { 410 m_showsURLsInToolTips = showsURLsInToolTips; 411 } 412 413 void Settings::setFTPDirectoryTemplatePath(const String& path) 414 { 415 m_ftpDirectoryTemplatePath = path; 416 } 417 418 void Settings::setForceFTPDirectoryListings(bool force) 419 { 420 m_forceFTPDirectoryListings = force; 421 } 422 423 void Settings::setDeveloperExtrasEnabled(bool developerExtrasEnabled) 424 { 425 m_developerExtrasEnabled = developerExtrasEnabled; 426 } 427 428 #ifdef ANDROID_META_SUPPORT 429 void Settings::resetMetadataSettings() 430 { 431 m_viewport_width = -1; 432 m_viewport_height = -1; 433 m_viewport_initial_scale = 0; 434 m_viewport_minimum_scale = 0; 435 m_viewport_maximum_scale = 0; 436 m_viewport_user_scalable = true; 437 m_viewport_target_densitydpi = -1; 438 m_format_detection_telephone = true; 439 m_format_detection_address = true; 440 m_format_detection_email = true; 441 } 442 443 void Settings::setMetadataSettings(const String& key, const String& value) 444 { 445 if (key == "width") { 446 if (value == "device-width") { 447 m_viewport_width = 0; 448 } else { 449 int width = value.toInt(); 450 if (width <= 10000) { 451 if (width <= 320) { 452 // This is a hack to accommodate the pages designed for the 453 // original iPhone. The new version, since 10/2007, is to 454 // use device-width which works for both portrait and 455 // landscape modes. 456 m_viewport_width = 0; 457 } else { 458 m_viewport_width = width; 459 } 460 } 461 } 462 } else if (key == "height") { 463 if (value == "device-height") { 464 m_viewport_height = 0; 465 } else { 466 int height = value.toInt(); 467 if (height >= 200 && height <= 10000) { 468 m_viewport_height = height; 469 } 470 } 471 } else if (key == "initial-scale") { 472 int scale = int(value.toFloat() * 100); 473 if (scale >= 1 && scale <= 1000) { 474 m_viewport_initial_scale = scale; 475 } 476 } else if (key == "minimum-scale") { 477 int scale = int(value.toFloat() * 100); 478 if (scale >= 1 && scale <= 1000) { 479 m_viewport_minimum_scale = scale; 480 } 481 } else if (key == "maximum-scale") { 482 int scale = int(value.toFloat() * 100); 483 if (scale >= 1 && scale <= 1000) { 484 m_viewport_maximum_scale = scale; 485 } 486 } else if (key == "user-scalable") { 487 // even Apple doc says using "no", "0" is common in the real world, and 488 // some sites, e.g. gomoviesapp.com, use "false". 489 if (value == "no" || value == "0" || value == "false") { 490 m_viewport_user_scalable = false; 491 } 492 } else if (key == "target-densitydpi") { 493 if (value == "device-dpi") { 494 m_viewport_target_densitydpi = 0; 495 } else if (value == "low-dpi") { 496 m_viewport_target_densitydpi = 120; 497 } else if (value == "medium-dpi") { 498 m_viewport_target_densitydpi = 160; 499 } else if (value == "high-dpi") { 500 m_viewport_target_densitydpi = 240; 501 } else { 502 int dpi = value.toInt(); 503 if (dpi >= 70 && dpi <= 400) { 504 m_viewport_target_densitydpi = dpi; 505 } 506 } 507 } else if (key == "telephone") { 508 if (value == "no") { 509 m_format_detection_telephone = false; 510 } 511 } else if (key == "address") { 512 if (value == "no") { 513 m_format_detection_address = false; 514 } 515 } else if (key == "email") { 516 if (value == "no") { 517 m_format_detection_email = false; 518 } 519 } else if (key == "format-detection") { 520 // even Apple doc says "format-detection" should be the name of the 521 // <meta> tag. In the real world, e.g. amazon.com, use 522 // "format-detection=no" in the "viewport" <meta> tag to disable all 523 // format detection. 524 if (value == "no") { 525 m_format_detection_telephone = false; 526 m_format_detection_address = false; 527 m_format_detection_email = false; 528 } 529 } 530 } 531 532 void Settings::setViewportWidth(int width) 533 { 534 if (width < 0 || width > 10000) 535 m_viewport_width = -1; 536 else 537 m_viewport_width = width; 538 } 539 540 void Settings::setViewportHeight(int height) 541 { 542 if (height < 0 || height > 10000) 543 m_viewport_height = -1; 544 else 545 m_viewport_height = height; 546 } 547 548 void Settings::setViewportInitialScale(int scale) 549 { 550 if (scale < 1 || scale > 1000) 551 m_viewport_initial_scale = 0; 552 else 553 m_viewport_initial_scale = scale; 554 } 555 556 void Settings::setViewportMinimumScale(int scale) 557 { 558 if (scale < 1 || scale > 1000) 559 m_viewport_minimum_scale = 0; 560 else 561 m_viewport_minimum_scale = scale; 562 } 563 564 void Settings::setViewportMaximumScale(int scale) 565 { 566 if (scale < 1 || scale > 1000) 567 m_viewport_maximum_scale = 0; 568 else 569 m_viewport_maximum_scale = scale; 570 } 571 572 void Settings::setViewportUserScalable(bool scalable) 573 { 574 m_viewport_user_scalable = scalable; 575 } 576 577 void Settings::setViewportTargetDensityDpi(int dpi) 578 { 579 if (dpi < 0 || dpi > 400) 580 m_viewport_target_densitydpi = -1; 581 else 582 m_viewport_target_densitydpi = dpi; 583 } 584 585 void Settings::setFormatDetectionAddress(bool detect) 586 { 587 m_format_detection_address = detect; 588 } 589 590 void Settings::setFormatDetectionEmail(bool detect) 591 { 592 m_format_detection_email = detect; 593 } 594 595 void Settings::setFormatDetectionTelephone(bool detect) 596 { 597 m_format_detection_telephone = detect; 598 } 599 #endif 600 601 void Settings::setAuthorAndUserStylesEnabled(bool authorAndUserStylesEnabled) 602 { 603 if (m_authorAndUserStylesEnabled == authorAndUserStylesEnabled) 604 return; 605 606 m_authorAndUserStylesEnabled = authorAndUserStylesEnabled; 607 setNeedsReapplyStylesInAllFrames(m_page); 608 } 609 610 void Settings::setFontRenderingMode(FontRenderingMode mode) 611 { 612 if (fontRenderingMode() == mode) 613 return; 614 m_fontRenderingMode = mode; 615 setNeedsReapplyStylesInAllFrames(m_page); 616 } 617 618 FontRenderingMode Settings::fontRenderingMode() const 619 { 620 return static_cast<FontRenderingMode>(m_fontRenderingMode); 621 } 622 623 void Settings::setNeedsSiteSpecificQuirks(bool needsQuirks) 624 { 625 m_needsSiteSpecificQuirks = needsQuirks; 626 } 627 628 void Settings::setFrameSetFlatteningEnabled(bool frameSetFlatteningEnabled) 629 { 630 m_frameSetFlatteningEnabled = frameSetFlatteningEnabled; 631 } 632 633 void Settings::setWebArchiveDebugModeEnabled(bool enabled) 634 { 635 m_webArchiveDebugModeEnabled = enabled; 636 } 637 638 void Settings::setLocalFileContentSniffingEnabled(bool enabled) 639 { 640 m_localFileContentSniffingEnabled = enabled; 641 } 642 643 void Settings::setLocalStorageDatabasePath(const String& path) 644 { 645 m_localStorageDatabasePath = path; 646 } 647 648 void Settings::setApplicationChromeMode(bool mode) 649 { 650 m_inApplicationChromeMode = mode; 651 } 652 653 void Settings::setOfflineWebApplicationCacheEnabled(bool enabled) 654 { 655 m_offlineWebApplicationCacheEnabled = enabled; 656 } 657 658 void Settings::setShouldPaintCustomScrollbars(bool shouldPaintCustomScrollbars) 659 { 660 m_shouldPaintCustomScrollbars = shouldPaintCustomScrollbars; 661 } 662 663 void Settings::setZoomsTextOnly(bool zoomsTextOnly) 664 { 665 if (zoomsTextOnly == m_zoomsTextOnly) 666 return; 667 668 m_zoomsTextOnly = zoomsTextOnly; 669 setNeedsReapplyStylesInAllFrames(m_page); 670 } 671 672 void Settings::setEnforceCSSMIMETypeInStrictMode(bool enforceCSSMIMETypeInStrictMode) 673 { 674 m_enforceCSSMIMETypeInStrictMode = enforceCSSMIMETypeInStrictMode; 675 } 676 677 #if USE(SAFARI_THEME) 678 void Settings::setShouldPaintNativeControls(bool shouldPaintNativeControls) 679 { 680 gShouldPaintNativeControls = shouldPaintNativeControls; 681 } 682 #endif 683 684 void Settings::setUsesEncodingDetector(bool usesEncodingDetector) 685 { 686 m_usesEncodingDetector = usesEncodingDetector; 687 } 688 689 void Settings::setAllowScriptsToCloseWindows(bool allowScriptsToCloseWindows) 690 { 691 m_allowScriptsToCloseWindows = allowScriptsToCloseWindows; 692 } 693 694 void Settings::setCaretBrowsingEnabled(bool caretBrowsingEnabled) 695 { 696 m_caretBrowsingEnabled = caretBrowsingEnabled; 697 } 698 699 void Settings::setDownloadableBinaryFontsEnabled(bool downloadableBinaryFontsEnabled) 700 { 701 m_downloadableBinaryFontsEnabled = downloadableBinaryFontsEnabled; 702 } 703 704 void Settings::setXSSAuditorEnabled(bool xssAuditorEnabled) 705 { 706 m_xssAuditorEnabled = xssAuditorEnabled; 707 } 708 709 void Settings::setAcceleratedCompositingEnabled(bool enabled) 710 { 711 if (m_acceleratedCompositingEnabled == enabled) 712 return; 713 714 m_acceleratedCompositingEnabled = enabled; 715 setNeedsReapplyStylesInAllFrames(m_page); 716 } 717 718 void Settings::setShowDebugBorders(bool enabled) 719 { 720 if (m_showDebugBorders == enabled) 721 return; 722 723 m_showDebugBorders = enabled; 724 setNeedsReapplyStylesInAllFrames(m_page); 725 } 726 727 void Settings::setShowRepaintCounter(bool enabled) 728 { 729 if (m_showRepaintCounter == enabled) 730 return; 731 732 m_showRepaintCounter = enabled; 733 setNeedsReapplyStylesInAllFrames(m_page); 734 } 735 736 void Settings::setExperimentalNotificationsEnabled(bool enabled) 737 { 738 m_experimentalNotificationsEnabled = enabled; 739 } 740 741 void Settings::setPluginAllowedRunTime(unsigned runTime) 742 { 743 m_pluginAllowedRunTime = runTime; 744 m_page->pluginAllowedRunTimeChanged(); 745 } 746 747 #if PLATFORM(WIN) || (OS(WINDOWS) && PLATFORM(WX)) 748 void Settings::setShouldUseHighResolutionTimers(bool shouldUseHighResolutionTimers) 749 { 750 gShouldUseHighResolutionTimers = shouldUseHighResolutionTimers; 751 } 752 #endif 753 754 void Settings::setWebGLEnabled(bool enabled) 755 { 756 m_webGLEnabled = enabled; 757 } 758 759 void Settings::setGeolocationEnabled(bool enabled) 760 { 761 m_geolocationEnabled = enabled; 762 } 763 764 void Settings::setLoadDeferringEnabled(bool enabled) 765 { 766 m_loadDeferringEnabled = enabled; 767 } 768 769 } // namespace WebCore 770