font_settings_handler.cc revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/options/font_settings_handler.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind_helpers.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/i18n/rtl.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/string_util.h"
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/strings/string_number_conversions.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browser_process.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/character_encoding.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/options/font_settings_utils.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_notification_types.h"
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h"
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/font_list_async.h"
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_details.h"
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_ui.h"
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/chromium_strings.h"
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/generated_resources.h"
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h"
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/font.h"
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/platform_font_win.h"
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns the localized name of a font so that settings can find it within the
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// list of system fonts. On Windows, the list of system fonts has names only
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// for the system locale, but the pref value may be in the English name.
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string MaybeGetLocalizedFontName(const std::string& font_name) {
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Font font(font_name, 12);  // dummy font size
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return static_cast<gfx::PlatformFontWin*>(font.platform_font())->
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GetLocalizedFontName();
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return font_name;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace options {
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FontSettingsHandler::FontSettingsHandler() {
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FontSettingsHandler::~FontSettingsHandler() {
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void FontSettingsHandler::GetLocalizedValues(
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DictionaryValue* localized_strings) {
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(localized_strings);
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static OptionsStringResource resources[] = {
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "fontSettingsStandard",
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_FONT_LANGUAGE_SETTING_FONT_SELECTOR_STANDARD_LABEL },
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "fontSettingsSerif",
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_FONT_LANGUAGE_SETTING_FONT_SELECTOR_SERIF_LABEL },
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "fontSettingsSansSerif",
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_FONT_LANGUAGE_SETTING_FONT_SELECTOR_SANS_SERIF_LABEL },
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "fontSettingsFixedWidth",
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_FONT_LANGUAGE_SETTING_FONT_SELECTOR_FIXED_WIDTH_LABEL },
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "fontSettingsMinimumSize",
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_FONT_LANGUAGE_SETTING_MINIMUM_FONT_SIZE_TITLE },
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "fontSettingsEncoding",
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_FONT_LANGUAGE_SETTING_FONT_SUB_DIALOG_ENCODING_TITLE },
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "fontSettingsSizeTiny",
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_FONT_LANGUAGE_SETTING_FONT_SIZE_TINY },
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "fontSettingsSizeHuge",
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_FONT_LANGUAGE_SETTING_FONT_SIZE_HUGE },
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "fontSettingsLoremIpsum",
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_FONT_LANGUAGE_SETTING_LOREM_IPSUM },
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RegisterStrings(localized_strings, resources, arraysize(resources));
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RegisterTitle(localized_strings, "fontSettingsPage",
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                IDS_FONT_LANGUAGE_SETTING_FONT_TAB_TITLE);
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  localized_strings->SetString("fontSettingsPlaceholder",
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      l10n_util::GetStringUTF16(
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          IDS_FONT_LANGUAGE_SETTING_PLACEHOLDER));
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void FontSettingsHandler::InitializePage() {
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(web_ui());
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUpStandardFontSample();
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUpSerifFontSample();
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUpSansSerifFontSample();
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUpFixedFontSample();
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUpMinimumFontSample();
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void FontSettingsHandler::RegisterMessages() {
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Perform validation for saved fonts.
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrefService* pref_service = Profile::FromWebUI(web_ui())->GetPrefs();
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FontSettingsUtilities::ValidateSavedFonts(pref_service);
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Register for preferences that we need to observe manually.
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  font_encoding_.Init(prefs::kDefaultCharset, pref_service);
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  standard_font_.Init(prefs::kWebKitStandardFontFamily,
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                      pref_service,
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                      base::Bind(&FontSettingsHandler::SetUpStandardFontSample,
1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                 base::Unretained(this)));
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  serif_font_.Init(prefs::kWebKitSerifFontFamily,
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                   pref_service,
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                   base::Bind(&FontSettingsHandler::SetUpSerifFontSample,
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              base::Unretained(this)));
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  sans_serif_font_.Init(
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      prefs::kWebKitSansSerifFontFamily,
1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      pref_service,
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::Bind(&FontSettingsHandler::SetUpSansSerifFontSample,
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                 base::Unretained(this)));
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::Closure callback = base::Bind(
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      &FontSettingsHandler::SetUpFixedFontSample, base::Unretained(this));
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  fixed_font_.Init(prefs::kWebKitFixedFontFamily, pref_service, callback);
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  default_fixed_font_size_.Init(prefs::kWebKitDefaultFixedFontSize,
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                pref_service, callback);
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  default_font_size_.Init(
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      prefs::kWebKitDefaultFontSize,
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      pref_service,
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::Bind(&FontSettingsHandler::OnWebKitDefaultFontSizeChanged,
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                 base::Unretained(this)));
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  minimum_font_size_.Init(
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      prefs::kWebKitMinimumFontSize,
1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      pref_service,
1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::Bind(&FontSettingsHandler::SetUpMinimumFontSample,
1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                 base::Unretained(this)));
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->RegisterMessageCallback("fetchFontsData",
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&FontSettingsHandler::HandleFetchFontsData,
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void FontSettingsHandler::HandleFetchFontsData(const ListValue* args) {
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::GetFontListAsync(
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&FontSettingsHandler::FontsListHasLoaded,
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void FontSettingsHandler::FontsListHasLoaded(
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_ptr<base::ListValue> list) {
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Selects the directionality for the fonts in the given list.
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (size_t i = 0; i < list->GetSize(); i++) {
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ListValue* font;
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool has_font = list->GetList(i, &font);
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DCHECK(has_font);
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    string16 value;
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool has_value = font->GetString(1, &value);
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DCHECK(has_value);
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool has_rtl_chars = base::i18n::StringContainsStrongRTLChars(value);
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    font->Append(new base::StringValue(has_rtl_chars ? "rtl" : "ltr"));
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ListValue encoding_list;
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const std::vector<CharacterEncoding::EncodingInfo>* encodings;
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrefService* pref_service = Profile::FromWebUI(web_ui())->GetPrefs();
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  encodings = CharacterEncoding::GetCurrentDisplayEncodings(
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      g_browser_process->GetApplicationLocale(),
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      pref_service->GetString(prefs::kStaticEncodings),
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      pref_service->GetString(prefs::kRecentlySelectedEncoding));
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(encodings);
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(!encodings->empty());
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<CharacterEncoding::EncodingInfo>::const_iterator it;
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (it = encodings->begin(); it != encodings->end(); ++it) {
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ListValue* option = new ListValue();
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (it->encoding_id) {
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int cmd_id = it->encoding_id;
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      std::string encoding =
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      CharacterEncoding::GetCanonicalEncodingNameByCommandId(cmd_id);
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      string16 name = it->encoding_display_name;
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      bool has_rtl_chars = base::i18n::StringContainsStrongRTLChars(name);
1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      option->Append(new base::StringValue(encoding));
1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      option->Append(new base::StringValue(name));
1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      option->Append(new base::StringValue(has_rtl_chars ? "rtl" : "ltr"));
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } else {
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // Add empty name/value to indicate a separator item.
1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      option->Append(new base::StringValue(""));
1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      option->Append(new base::StringValue(""));
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    encoding_list.Append(option);
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ListValue selected_values;
1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  selected_values.Append(new base::StringValue(MaybeGetLocalizedFontName(
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      standard_font_.GetValue())));
2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  selected_values.Append(new base::StringValue(MaybeGetLocalizedFontName(
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      serif_font_.GetValue())));
2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  selected_values.Append(new base::StringValue(MaybeGetLocalizedFontName(
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      sans_serif_font_.GetValue())));
2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  selected_values.Append(new base::StringValue(MaybeGetLocalizedFontName(
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      fixed_font_.GetValue())));
2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  selected_values.Append(new base::StringValue(font_encoding_.GetValue()));
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->CallJavascriptFunction("FontSettings.setFontsData",
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   *list.get(), encoding_list,
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   selected_values);
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void FontSettingsHandler::SetUpStandardFontSample() {
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::StringValue font_value(standard_font_.GetValue());
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::FundamentalValue size_value(default_font_size_.GetValue());
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->CallJavascriptFunction(
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "FontSettings.setUpStandardFontSample", font_value, size_value);
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void FontSettingsHandler::SetUpSerifFontSample() {
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::StringValue font_value(serif_font_.GetValue());
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::FundamentalValue size_value(default_font_size_.GetValue());
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->CallJavascriptFunction(
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "FontSettings.setUpSerifFontSample", font_value, size_value);
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void FontSettingsHandler::SetUpSansSerifFontSample() {
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::StringValue font_value(sans_serif_font_.GetValue());
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::FundamentalValue size_value(default_font_size_.GetValue());
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->CallJavascriptFunction(
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "FontSettings.setUpSansSerifFontSample", font_value, size_value);
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void FontSettingsHandler::SetUpFixedFontSample() {
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::StringValue font_value(fixed_font_.GetValue());
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::FundamentalValue size_value(default_fixed_font_size_.GetValue());
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->CallJavascriptFunction(
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "FontSettings.setUpFixedFontSample", font_value, size_value);
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void FontSettingsHandler::SetUpMinimumFontSample() {
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::FundamentalValue size_value(minimum_font_size_.GetValue());
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->CallJavascriptFunction("FontSettings.setUpMinimumFontSample",
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   size_value);
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void FontSettingsHandler::OnWebKitDefaultFontSizeChanged() {
2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetUpStandardFontSample();
2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetUpSerifFontSample();
2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetUpSansSerifFontSample();
2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace options
254