[Text Autosizing] Provide an API for influencing the font scale factor
[WebKit-https.git] / Source / WebKit / chromium / src / WebSettingsImpl.cpp
1 /*
2  * Copyright (C) 2009 Google 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 are
6  * met:
7  *
8  *     * Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  *     * Redistributions in binary form must reproduce the above
11  * copyright notice, this list of conditions and the following disclaimer
12  * in the documentation and/or other materials provided with the
13  * distribution.
14  *     * Neither the name of Google Inc. nor the names of its
15  * contributors may be used to endorse or promote products derived from
16  * this software without specific prior written permission.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  */
30
31 #include "config.h"
32 #include "WebSettingsImpl.h"
33
34 #include "FontRenderingMode.h"
35 #include "Settings.h"
36 #include "platform/WebString.h"
37 #include "platform/WebURL.h"
38 #include <wtf/UnusedParam.h>
39
40 #if defined(OS_WIN)
41 #include "RenderThemeChromiumWin.h"
42 #endif
43
44 using namespace WebCore;
45
46 namespace WebKit {
47
48 WebSettingsImpl::WebSettingsImpl(Settings* settings)
49     : m_settings(settings)
50     , m_forceSoftwareCompositing(false)
51     , m_showFPSCounter(false)
52     , m_showPlatformLayerTree(false)
53     , m_showPaintRects(false)
54     , m_renderVSyncEnabled(true)
55     , m_viewportEnabled(false)
56     , m_applyDefaultDeviceScaleFactorInCompositor(false)
57     , m_defaultTileSize(WebSize(256, 256))
58     , m_maxUntiledLayerSize(WebSize(512, 512))
59 {
60     ASSERT(settings);
61 }
62
63 void WebSettingsImpl::setStandardFontFamily(const WebString& font, UScriptCode script)
64 {
65     m_settings->setStandardFontFamily(font, script);
66 }
67
68 void WebSettingsImpl::setFixedFontFamily(const WebString& font, UScriptCode script)
69 {
70     m_settings->setFixedFontFamily(font, script);
71 }
72
73 void WebSettingsImpl::setSerifFontFamily(const WebString& font, UScriptCode script)
74 {
75     m_settings->setSerifFontFamily(font, script);
76 }
77
78 void WebSettingsImpl::setSansSerifFontFamily(const WebString& font, UScriptCode script)
79 {
80     m_settings->setSansSerifFontFamily(font, script);
81 }
82
83 void WebSettingsImpl::setCursiveFontFamily(const WebString& font, UScriptCode script)
84 {
85     m_settings->setCursiveFontFamily(font, script);
86 }
87
88 void WebSettingsImpl::setFantasyFontFamily(const WebString& font, UScriptCode script)
89 {
90     m_settings->setFantasyFontFamily(font, script);
91 }
92
93 void WebSettingsImpl::setPictographFontFamily(const WebString& font, UScriptCode script)
94 {
95     m_settings->setPictographFontFamily(font, script);
96 }
97
98 void WebSettingsImpl::setDefaultFontSize(int size)
99 {
100     m_settings->setDefaultFontSize(size);
101 #if defined(OS_WIN)
102     // RenderTheme is a singleton that needs to know the default font size to
103     // draw some form controls.  We let it know each time the size changes.
104     WebCore::RenderThemeChromiumWin::setDefaultFontSize(size);
105 #endif
106 }
107
108 void WebSettingsImpl::setDefaultFixedFontSize(int size)
109 {
110     m_settings->setDefaultFixedFontSize(size);
111 }
112
113 void WebSettingsImpl::setMinimumFontSize(int size)
114 {
115     m_settings->setMinimumFontSize(size);
116 }
117
118 void WebSettingsImpl::setMinimumLogicalFontSize(int size)
119 {
120     m_settings->setMinimumLogicalFontSize(size);
121 }
122
123 void WebSettingsImpl::setDeviceSupportsTouch(bool deviceSupportsTouch)
124 {
125     m_settings->setDeviceSupportsTouch(deviceSupportsTouch);
126 }
127
128 void WebSettingsImpl::setDeviceSupportsMouse(bool deviceSupportsMouse)
129 {
130     m_settings->setDeviceSupportsMouse(deviceSupportsMouse);
131 }
132
133 bool WebSettingsImpl::deviceSupportsTouch()
134 {
135     return m_settings->deviceSupportsTouch();
136 }
137
138 void WebSettingsImpl::setApplyDefaultDeviceScaleFactorInCompositor(bool applyDefaultDeviceScaleFactorInCompositor)
139 {
140     m_applyDefaultDeviceScaleFactorInCompositor = applyDefaultDeviceScaleFactorInCompositor;
141 }
142
143 void WebSettingsImpl::setTextAutosizingEnabled(bool enabled)
144 {
145 #if ENABLE(TEXT_AUTOSIZING)
146     m_settings->setTextAutosizingEnabled(enabled);
147 #else
148     UNUSED_PARAM(enabled);
149 #endif
150 }
151
152 void WebSettingsImpl::setTextAutosizingFontScaleFactor(float fontScaleFactor)
153 {
154 #if ENABLE(TEXT_AUTOSIZING)
155     m_settings->setTextAutosizingFontScaleFactor(fontScaleFactor);
156 #else
157     UNUSED_PARAM(fontScaleFactor);
158 #endif
159 }
160
161 void WebSettingsImpl::setDefaultTextEncodingName(const WebString& encoding)
162 {
163     m_settings->setDefaultTextEncodingName((String)encoding);
164 }
165
166 void WebSettingsImpl::setJavaScriptEnabled(bool enabled)
167 {
168     m_settings->setScriptEnabled(enabled);
169 }
170
171 void WebSettingsImpl::setWebSecurityEnabled(bool enabled)
172 {
173     m_settings->setWebSecurityEnabled(enabled);
174 }
175
176 void WebSettingsImpl::setJavaScriptCanOpenWindowsAutomatically(bool canOpenWindows)
177 {
178     m_settings->setJavaScriptCanOpenWindowsAutomatically(canOpenWindows);
179 }
180
181 void WebSettingsImpl::setLoadsImagesAutomatically(bool loadsImagesAutomatically)
182 {
183     m_settings->setLoadsImagesAutomatically(loadsImagesAutomatically);
184 }
185
186 void WebSettingsImpl::setImagesEnabled(bool enabled)
187 {
188     m_settings->setImagesEnabled(enabled);
189 }
190
191 void WebSettingsImpl::setPluginsEnabled(bool enabled)
192 {
193     m_settings->setPluginsEnabled(enabled);
194 }
195
196 void WebSettingsImpl::setDOMPasteAllowed(bool enabled)
197 {
198     m_settings->setDOMPasteAllowed(enabled);
199 }
200
201 void WebSettingsImpl::setDeveloperExtrasEnabled(bool enabled)
202 {
203     m_settings->setDeveloperExtrasEnabled(enabled);
204 }
205
206 void WebSettingsImpl::setNeedsSiteSpecificQuirks(bool enabled)
207 {
208     m_settings->setNeedsSiteSpecificQuirks(enabled);
209 }
210
211 void WebSettingsImpl::setShrinksStandaloneImagesToFit(bool shrinkImages)
212 {
213     m_settings->setShrinksStandaloneImagesToFit(shrinkImages);
214 }
215
216 void WebSettingsImpl::setUsesEncodingDetector(bool usesDetector)
217 {
218     m_settings->setUsesEncodingDetector(usesDetector);
219 }
220
221 void WebSettingsImpl::setTextAreasAreResizable(bool areResizable)
222 {
223     m_settings->setTextAreasAreResizable(areResizable);
224 }
225
226 void WebSettingsImpl::setJavaEnabled(bool enabled)
227 {
228     m_settings->setJavaEnabled(enabled);
229 }
230
231 void WebSettingsImpl::setAllowScriptsToCloseWindows(bool allow)
232 {
233     m_settings->setAllowScriptsToCloseWindows(allow);
234 }
235
236 void WebSettingsImpl::setUserStyleSheetLocation(const WebURL& location)
237 {
238     m_settings->setUserStyleSheetLocation(location);
239 }
240
241 void WebSettingsImpl::setAuthorAndUserStylesEnabled(bool enabled)
242 {
243     m_settings->setAuthorAndUserStylesEnabled(enabled);
244 }
245
246 void WebSettingsImpl::setUsesPageCache(bool usesPageCache)
247 {
248     m_settings->setUsesPageCache(usesPageCache);
249 }
250
251 void WebSettingsImpl::setPageCacheSupportsPlugins(bool pageCacheSupportsPlugins)
252 {
253     m_settings->setPageCacheSupportsPlugins(pageCacheSupportsPlugins);
254 }
255
256 void WebSettingsImpl::setDownloadableBinaryFontsEnabled(bool enabled)
257 {
258     m_settings->setDownloadableBinaryFontsEnabled(enabled);
259 }
260
261 void WebSettingsImpl::setJavaScriptCanAccessClipboard(bool enabled)
262 {
263     m_settings->setJavaScriptCanAccessClipboard(enabled);
264 }
265
266 void WebSettingsImpl::setXSSAuditorEnabled(bool enabled)
267 {
268     m_settings->setXSSAuditorEnabled(enabled);
269 }
270
271 void WebSettingsImpl::setDNSPrefetchingEnabled(bool enabled)
272 {
273     m_settings->setDNSPrefetchingEnabled(enabled);
274 }
275
276 void WebSettingsImpl::setFixedElementsLayoutRelativeToFrame(bool fixedElementsLayoutRelativeToFrame)
277 {
278     m_settings->setFixedElementsLayoutRelativeToFrame(fixedElementsLayoutRelativeToFrame);
279 }
280
281 void WebSettingsImpl::setLocalStorageEnabled(bool enabled)
282 {
283     m_settings->setLocalStorageEnabled(enabled);
284 }
285
286 void WebSettingsImpl::setEditableLinkBehaviorNeverLive()
287 {
288     // FIXME: If you ever need more behaviors than this, then we should probably
289     //        define an enum in WebSettings.h and have a switch statement that
290     //        translates.  Until then, this is probably fine, though.
291     m_settings->setEditableLinkBehavior(WebCore::EditableLinkNeverLive);
292 }
293
294 void WebSettingsImpl::setFrameFlatteningEnabled(bool enabled)
295 {
296     m_settings->setFrameFlatteningEnabled(enabled);
297 }
298
299 void WebSettingsImpl::setFontRenderingModeNormal()
300 {
301     // FIXME: If you ever need more behaviors than this, then we should probably
302     //        define an enum in WebSettings.h and have a switch statement that
303     //        translates.  Until then, this is probably fine, though.
304     m_settings->setFontRenderingMode(WebCore::NormalRenderingMode);
305 }
306
307 void WebSettingsImpl::setAllowUniversalAccessFromFileURLs(bool allow)
308 {
309     m_settings->setAllowUniversalAccessFromFileURLs(allow);
310 }
311
312 void WebSettingsImpl::setAllowFileAccessFromFileURLs(bool allow)
313 {
314     m_settings->setAllowFileAccessFromFileURLs(allow);
315 }
316
317 void WebSettingsImpl::setTextDirectionSubmenuInclusionBehaviorNeverIncluded()
318 {
319     // FIXME: If you ever need more behaviors than this, then we should probably
320     //        define an enum in WebSettings.h and have a switch statement that
321     //        translates.  Until then, this is probably fine, though.
322     m_settings->setTextDirectionSubmenuInclusionBehavior(WebCore::TextDirectionSubmenuNeverIncluded);
323 }
324
325 void WebSettingsImpl::setOfflineWebApplicationCacheEnabled(bool enabled)
326 {
327     m_settings->setOfflineWebApplicationCacheEnabled(enabled);
328 }
329
330 void WebSettingsImpl::setWebAudioEnabled(bool enabled)
331 {
332     m_settings->setWebAudioEnabled(enabled);
333 }
334
335 void WebSettingsImpl::setExperimentalWebGLEnabled(bool enabled)
336 {
337     m_settings->setWebGLEnabled(enabled);
338 }
339
340 void WebSettingsImpl::setExperimentalCSSRegionsEnabled(bool enabled)
341 {
342     m_settings->setCSSRegionsEnabled(enabled);
343 }
344
345 void WebSettingsImpl::setExperimentalCSSGridLayoutEnabled(bool enabled)
346 {
347     m_settings->setCSSGridLayoutEnabled(enabled);
348 }
349
350 void WebSettingsImpl::setExperimentalCSSCustomFilterEnabled(bool enabled)
351 {
352     m_settings->setCSSCustomFilterEnabled(enabled);
353 }
354
355 void WebSettingsImpl::setExperimentalCSSVariablesEnabled(bool enabled)
356 {
357     m_settings->setCSSVariablesEnabled(enabled);
358 }
359
360 void WebSettingsImpl::setOpenGLMultisamplingEnabled(bool enabled)
361 {
362     m_settings->setOpenGLMultisamplingEnabled(enabled);
363 }
364
365 void WebSettingsImpl::setPrivilegedWebGLExtensionsEnabled(bool enabled)
366 {
367     m_settings->setPrivilegedWebGLExtensionsEnabled(enabled);
368 }
369
370 void WebSettingsImpl::setRenderVSyncEnabled(bool enabled)
371 {
372     m_renderVSyncEnabled = enabled;
373 }
374
375 void WebSettingsImpl::setWebGLErrorsToConsoleEnabled(bool enabled)
376 {
377     m_settings->setWebGLErrorsToConsoleEnabled(enabled);
378 }
379
380 void WebSettingsImpl::setShowDebugBorders(bool show)
381 {
382     m_settings->setShowDebugBorders(show);
383 }
384
385 void WebSettingsImpl::setShowFPSCounter(bool show)
386 {
387     m_showFPSCounter = show;
388 }
389
390 void WebSettingsImpl::setShowPlatformLayerTree(bool show)
391 {
392     m_showPlatformLayerTree = show;
393 }
394
395 void WebSettingsImpl::setShowPaintRects(bool show)
396 {
397     m_showPaintRects = show;
398 }
399
400 void WebSettingsImpl::setEditingBehavior(EditingBehavior behavior)
401 {
402     m_settings->setEditingBehaviorType(static_cast<WebCore::EditingBehaviorType>(behavior));
403 }
404
405 void WebSettingsImpl::setAcceleratedCompositingEnabled(bool enabled)
406 {
407     m_settings->setAcceleratedCompositingEnabled(enabled);
408     m_settings->setScrollingCoordinatorEnabled(enabled);
409 }
410
411 void WebSettingsImpl::setForceCompositingMode(bool enabled)
412 {
413     m_settings->setForceCompositingMode(enabled);
414 }
415
416 void WebSettingsImpl::setForceSoftwareCompositing(bool enabled)
417 {
418     m_forceSoftwareCompositing = enabled;
419 }
420
421 void WebSettingsImpl::setMockScrollbarsEnabled(bool enabled)
422 {
423     m_settings->setMockScrollbarsEnabled(enabled);
424 }
425
426 void WebSettingsImpl::setAcceleratedCompositingFor3DTransformsEnabled(bool enabled)
427 {
428     m_settings->setAcceleratedCompositingFor3DTransformsEnabled(enabled);
429 }
430
431 void WebSettingsImpl::setAcceleratedCompositingForVideoEnabled(bool enabled)
432 {
433     m_settings->setAcceleratedCompositingForVideoEnabled(enabled);
434 }
435
436 void WebSettingsImpl::setAcceleratedCompositingForPluginsEnabled(bool enabled)
437 {
438     m_settings->setAcceleratedCompositingForPluginsEnabled(enabled);
439 }
440
441 void WebSettingsImpl::setAcceleratedCompositingForCanvasEnabled(bool enabled)
442 {
443     m_settings->setAcceleratedCompositingForCanvasEnabled(enabled);
444 }
445
446 void WebSettingsImpl::setAcceleratedCompositingForAnimationEnabled(bool enabled)
447 {
448     m_settings->setAcceleratedCompositingForAnimationEnabled(enabled);
449 }
450
451 void WebSettingsImpl::setAcceleratedFiltersEnabled(bool enabled)
452 {
453     m_settings->setAcceleratedFiltersEnabled(enabled);
454 }
455
456 void WebSettingsImpl::setAccelerated2dCanvasEnabled(bool enabled)
457 {
458     m_settings->setAccelerated2dCanvasEnabled(enabled);
459 }
460
461 void WebSettingsImpl::setDeferred2dCanvasEnabled(bool enabled)
462 {
463     m_settings->setDeferred2dCanvasEnabled(enabled);
464 }
465
466 void WebSettingsImpl::setAcceleratedCompositingForFixedPositionEnabled(bool enabled)
467 {
468     m_settings->setAcceleratedCompositingForFixedPositionEnabled(enabled);
469 }
470
471 void WebSettingsImpl::setMinimumAccelerated2dCanvasSize(int numPixels)
472 {
473     m_settings->setMinimumAccelerated2dCanvasSize(numPixels);
474 }
475
476 void WebSettingsImpl::setMemoryInfoEnabled(bool enabled)
477 {
478     m_settings->setMemoryInfoEnabled(enabled);
479 }
480
481 void WebSettingsImpl::setHyperlinkAuditingEnabled(bool enabled)
482 {
483     m_settings->setHyperlinkAuditingEnabled(enabled);
484 }
485
486 void WebSettingsImpl::setLayoutFallbackWidth(int width)
487 {
488     m_settings->setLayoutFallbackWidth(width);
489 }
490
491 void WebSettingsImpl::setAsynchronousSpellCheckingEnabled(bool enabled)
492 {
493     m_settings->setAsynchronousSpellCheckingEnabled(enabled);
494 }
495
496 void WebSettingsImpl::setUnifiedTextCheckerEnabled(bool enabled)
497 {
498     m_settings->setUnifiedTextCheckerEnabled(enabled);
499 }
500
501 void WebSettingsImpl::setCaretBrowsingEnabled(bool enabled)
502 {
503     m_settings->setCaretBrowsingEnabled(enabled);
504 }
505
506 void WebSettingsImpl::setInteractiveFormValidationEnabled(bool enabled)
507 {
508     m_settings->setInteractiveFormValidationEnabled(enabled);
509 }
510
511 void WebSettingsImpl::setValidationMessageTimerMagnification(int newValue)
512 {
513     m_settings->setValidationMessageTimerMagnification(newValue);
514 }
515
516 void WebSettingsImpl::setMinimumTimerInterval(double interval)
517 {
518     m_settings->setMinDOMTimerInterval(interval);
519 }
520
521 void WebSettingsImpl::setFullScreenEnabled(bool enabled)
522 {
523 #if ENABLE(FULLSCREEN_API)
524     m_settings->setFullScreenEnabled(enabled);
525 #else
526     UNUSED_PARAM(enabled);
527 #endif
528 }
529
530 void WebSettingsImpl::setAllowDisplayOfInsecureContent(bool enabled)
531 {
532     m_settings->setAllowDisplayOfInsecureContent(enabled);
533 }
534
535 void WebSettingsImpl::setAllowRunningOfInsecureContent(bool enabled)
536 {
537     m_settings->setAllowRunningOfInsecureContent(enabled);
538 }
539
540 void WebSettingsImpl::setPasswordEchoEnabled(bool flag)
541 {
542     m_settings->setPasswordEchoEnabled(flag);
543 }
544
545 void WebSettingsImpl::setPasswordEchoDurationInSeconds(double durationInSeconds)
546 {
547     m_settings->setPasswordEchoDurationInSeconds(durationInSeconds);
548 }
549
550 void WebSettingsImpl::setShouldPrintBackgrounds(bool enabled)
551 {
552     m_settings->setShouldPrintBackgrounds(enabled);
553 }
554
555 void WebSettingsImpl::setEnableScrollAnimator(bool enabled)
556 {
557 #if ENABLE(SMOOTH_SCROLLING)
558     m_settings->setEnableScrollAnimator(enabled);
559 #else
560     UNUSED_PARAM(enabled);
561 #endif
562 }
563
564 bool WebSettingsImpl::scrollAnimatorEnabled() const
565 {
566 #if ENABLE(SMOOTH_SCROLLING)
567     return m_settings->scrollAnimatorEnabled();
568 #else
569     return false;
570 #endif
571 }
572
573 void WebSettingsImpl::setVisualWordMovementEnabled(bool enabled)
574 {
575     m_settings->setVisualWordMovementEnabled(enabled);
576 }
577
578 void WebSettingsImpl::setShouldDisplaySubtitles(bool enabled)
579 {
580 #if ENABLE(VIDEO_TRACK)
581     m_settings->setShouldDisplaySubtitles(enabled);
582 #else
583     UNUSED_PARAM(enabled);
584 #endif
585 }
586
587 void WebSettingsImpl::setShouldDisplayCaptions(bool enabled)
588 {
589 #if ENABLE(VIDEO_TRACK)
590     m_settings->setShouldDisplayCaptions(enabled);
591 #else
592     UNUSED_PARAM(enabled);
593 #endif
594 }
595
596 void WebSettingsImpl::setShouldDisplayTextDescriptions(bool enabled)
597 {
598 #if ENABLE(VIDEO_TRACK)
599     m_settings->setShouldDisplayTextDescriptions(enabled);
600 #else
601     UNUSED_PARAM(enabled);
602 #endif
603 }
604
605 void WebSettingsImpl::setAcceleratedPaintingEnabled(bool enabled)
606 {
607     m_settings->setAcceleratedDrawingEnabled(enabled);
608 }
609
610 void WebSettingsImpl::setMediaPlaybackRequiresUserGesture(bool required)
611 {
612     m_settings->setMediaPlaybackRequiresUserGesture(required);
613 }
614
615 void WebSettingsImpl::setFixedPositionCreatesStackingContext(bool creates)
616 {
617     m_settings->setFixedPositionCreatesStackingContext(creates);
618 }
619
620 void WebSettingsImpl::setViewportEnabled(bool enabled)
621 {
622     m_viewportEnabled = enabled;
623 }
624
625 void WebSettingsImpl::setDefaultTileSize(WebSize size)
626 {
627     m_defaultTileSize = size;
628 }
629
630 void WebSettingsImpl::setMaxUntiledLayerSize(WebSize size)
631 {
632     m_maxUntiledLayerSize = size;
633 }
634
635 void WebSettingsImpl::setSyncXHRInDocumentsEnabled(bool enabled)
636 {
637     m_settings->setSyncXHRInDocumentsEnabled(enabled);
638 }
639
640 void WebSettingsImpl::setCookieEnabled(bool enabled)
641 {
642     m_settings->setCookieEnabled(enabled);
643 }
644
645 } // namespace WebKit