1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chrome/browser/renderer_preferences_util.h" 6 7 #include "base/prefs/pref_service.h" 8 #include "chrome/browser/profiles/profile.h" 9 #include "chrome/common/pref_names.h" 10 #include "content/public/common/renderer_preferences.h" 11 #include "third_party/skia/include/core/SkColor.h" 12 13 #if defined(OS_LINUX) || defined(OS_ANDROID) 14 #include "ui/gfx/font_render_params_linux.h" 15 #endif 16 17 #if defined(TOOLKIT_VIEWS) 18 #include "ui/views/controls/textfield/textfield.h" 19 #endif 20 21 #if defined(USE_AURA) && defined(OS_LINUX) && !defined(OS_CHROMEOS) 22 #include "chrome/browser/themes/theme_service.h" 23 #include "chrome/browser/themes/theme_service_factory.h" 24 #include "ui/views/linux_ui/linux_ui.h" 25 #endif 26 27 namespace renderer_preferences_util { 28 29 namespace { 30 31 #if defined(OS_LINUX) || defined(OS_ANDROID) 32 content::RendererPreferencesHintingEnum GetRendererPreferencesHintingEnum( 33 gfx::FontRenderParams::Hinting hinting) { 34 switch (hinting) { 35 case gfx::FontRenderParams::HINTING_NONE: 36 return content::RENDERER_PREFERENCES_HINTING_NONE; 37 case gfx::FontRenderParams::HINTING_SLIGHT: 38 return content::RENDERER_PREFERENCES_HINTING_SLIGHT; 39 case gfx::FontRenderParams::HINTING_MEDIUM: 40 return content::RENDERER_PREFERENCES_HINTING_MEDIUM; 41 case gfx::FontRenderParams::HINTING_FULL: 42 return content::RENDERER_PREFERENCES_HINTING_FULL; 43 default: 44 NOTREACHED() << "Unhandled hinting style " << hinting; 45 return content::RENDERER_PREFERENCES_HINTING_SYSTEM_DEFAULT; 46 } 47 } 48 49 content::RendererPreferencesSubpixelRenderingEnum 50 GetRendererPreferencesSubpixelRenderingEnum( 51 gfx::FontRenderParams::SubpixelRendering subpixel_rendering) { 52 switch (subpixel_rendering) { 53 case gfx::FontRenderParams::SUBPIXEL_RENDERING_NONE: 54 return content::RENDERER_PREFERENCES_SUBPIXEL_RENDERING_NONE; 55 case gfx::FontRenderParams::SUBPIXEL_RENDERING_RGB: 56 return content::RENDERER_PREFERENCES_SUBPIXEL_RENDERING_RGB; 57 case gfx::FontRenderParams::SUBPIXEL_RENDERING_BGR: 58 return content::RENDERER_PREFERENCES_SUBPIXEL_RENDERING_BGR; 59 case gfx::FontRenderParams::SUBPIXEL_RENDERING_VRGB: 60 return content::RENDERER_PREFERENCES_SUBPIXEL_RENDERING_VRGB; 61 case gfx::FontRenderParams::SUBPIXEL_RENDERING_VBGR: 62 return content::RENDERER_PREFERENCES_SUBPIXEL_RENDERING_VBGR; 63 default: 64 NOTREACHED() << "Unhandled subpixel rendering style " 65 << subpixel_rendering; 66 return content::RENDERER_PREFERENCES_SUBPIXEL_RENDERING_SYSTEM_DEFAULT; 67 } 68 } 69 #endif // defined(OS_LINUX) || defined(OS_ANDROID) 70 71 } // namespace 72 73 void UpdateFromSystemSettings( 74 content::RendererPreferences* prefs, Profile* profile) { 75 const PrefService* pref_service = profile->GetPrefs(); 76 prefs->accept_languages = pref_service->GetString(prefs::kAcceptLanguages); 77 prefs->enable_referrers = pref_service->GetBoolean(prefs::kEnableReferrers); 78 prefs->enable_do_not_track = 79 pref_service->GetBoolean(prefs::kEnableDoNotTrack); 80 prefs->default_zoom_level = pref_service->GetDouble(prefs::kDefaultZoomLevel); 81 82 #if defined(USE_DEFAULT_RENDER_THEME) 83 prefs->focus_ring_color = SkColorSetRGB(0x4D, 0x90, 0xFE); 84 85 #if defined(OS_CHROMEOS) 86 // This color is 0x544d90fe modulated with 0xffffff. 87 prefs->active_selection_bg_color = SkColorSetRGB(0xCB, 0xE4, 0xFA); 88 prefs->active_selection_fg_color = SK_ColorBLACK; 89 prefs->inactive_selection_bg_color = SkColorSetRGB(0xEA, 0xEA, 0xEA); 90 prefs->inactive_selection_fg_color = SK_ColorBLACK; 91 #endif 92 93 prefs->touchpad_fling_profile[0] = 94 pref_service->GetDouble(prefs::kFlingCurveTouchpadAlpha); 95 prefs->touchpad_fling_profile[1] = 96 pref_service->GetDouble(prefs::kFlingCurveTouchpadBeta); 97 prefs->touchpad_fling_profile[2] = 98 pref_service->GetDouble(prefs::kFlingCurveTouchpadGamma); 99 prefs->touchscreen_fling_profile[0] = 100 pref_service->GetDouble(prefs::kFlingCurveTouchscreenAlpha); 101 prefs->touchscreen_fling_profile[1] = 102 pref_service->GetDouble(prefs::kFlingCurveTouchscreenBeta); 103 prefs->touchscreen_fling_profile[2] = 104 pref_service->GetDouble(prefs::kFlingCurveTouchscreenGamma); 105 #endif 106 107 #if defined(TOOLKIT_VIEWS) 108 prefs->caret_blink_interval = views::Textfield::GetCaretBlinkMs() / 1000.0; 109 #endif 110 111 #if defined(USE_AURA) && defined(OS_LINUX) && !defined(OS_CHROMEOS) 112 views::LinuxUI* linux_ui = views::LinuxUI::instance(); 113 if (linux_ui) { 114 if (ThemeServiceFactory::GetForProfile(profile)->UsingSystemTheme()) { 115 prefs->focus_ring_color = linux_ui->GetFocusRingColor(); 116 prefs->thumb_active_color = linux_ui->GetThumbActiveColor(); 117 prefs->thumb_inactive_color = linux_ui->GetThumbInactiveColor(); 118 prefs->track_color = linux_ui->GetTrackColor(); 119 prefs->active_selection_bg_color = linux_ui->GetActiveSelectionBgColor(); 120 prefs->active_selection_fg_color = linux_ui->GetActiveSelectionFgColor(); 121 prefs->inactive_selection_bg_color = 122 linux_ui->GetInactiveSelectionBgColor(); 123 prefs->inactive_selection_fg_color = 124 linux_ui->GetInactiveSelectionFgColor(); 125 } 126 127 // If we have a linux_ui object, set the caret blink interval regardless of 128 // whether we're in native theme mode. 129 prefs->caret_blink_interval = linux_ui->GetCursorBlinkInterval(); 130 } 131 #endif 132 133 #if defined(OS_LINUX) || defined(OS_ANDROID) 134 const gfx::FontRenderParams& params = gfx::GetDefaultWebKitFontRenderParams(); 135 prefs->should_antialias_text = params.antialiasing; 136 prefs->use_subpixel_positioning = params.subpixel_positioning; 137 prefs->hinting = GetRendererPreferencesHintingEnum(params.hinting); 138 prefs->use_autohinter = params.autohinter; 139 prefs->use_bitmaps = params.use_bitmaps; 140 prefs->subpixel_rendering = 141 GetRendererPreferencesSubpixelRenderingEnum(params.subpixel_rendering); 142 #endif 143 144 #if !defined(OS_MACOSX) 145 prefs->plugin_fullscreen_allowed = 146 pref_service->GetBoolean(prefs::kFullscreenAllowed); 147 #endif 148 } 149 150 } // namespace renderer_preferences_util 151