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)// Font Settings Extension API implementation.
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/api/font_settings/font_settings_api.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/json/json_writer.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/lazy_instance.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h"
145e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#include "base/strings/string_util.h"
155e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#include "base/strings/stringprintf.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h"
177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h"
187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/extensions/api/preference/preference_api.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/api/preference/preference_helpers.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_service.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h"
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/extensions/api/font_settings.h"
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h"
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names_util.h"
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/font_list_async.h"
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_details.h"
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_source.h"
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_system.h"
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "extensions/common/error_utils.h"
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/font.h"
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/platform_font_win.h"
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions {
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace fonts = api::font_settings;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kFontIdKey[] = "fontId";
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kGenericFamilyKey[] = "genericFamily";
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kLevelOfControlKey[] = "levelOfControl";
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kDisplayNameKey[] = "displayName";
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kPixelSizeKey[] = "pixelSize";
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kScriptKey[] = "script";
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kSetFromIncognitoError[] =
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "Can't modify regular settings from an incognito context.";
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Format for font name preference paths.
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kWebKitFontPrefFormat[] = "webkit.webprefs.fonts.%s.%s";
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Gets the font name preference path for |generic_family| and |script|. If
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// |script| is NULL, uses prefs::kWebKitCommonScript.
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string GetFontNamePrefPath(fonts::GenericFamily generic_family_enum,
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                fonts::ScriptCode script_enum) {
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string script = fonts::ToString(script_enum);
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (script.empty())
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    script = prefs::kWebKitCommonScript;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string generic_family = fonts::ToString(generic_family_enum);
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return base::StringPrintf(kWebKitFontPrefFormat,
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                            generic_family.c_str(),
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                            script.c_str());
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns the localized name of a font so that it can be matched within the
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// list of system fonts. On Windows, the list of system fonts has names only
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// for the system locale, but the pref value may be in the English name.
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string MaybeGetLocalizedFontName(const std::string& font_name) {
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!font_name.empty()) {
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    gfx::Font font(font_name, 12);  // dummy font size
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return static_cast<gfx::PlatformFontWin*>(font.platform_font())->
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GetLocalizedFontName();
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return font_name;
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Registers |obs| to observe per-script font prefs under the path |map_name|.
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RegisterFontFamilyMapObserver(
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    PrefChangeRegistrar* registrar,
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const char* map_name,
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const PrefChangeRegistrar::NamedChangeCallback& callback) {
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (size_t i = 0; i < prefs::kWebKitScriptsForFontFamilyMapsLength; ++i) {
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char* script = prefs::kWebKitScriptsForFontFamilyMaps[i];
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::string pref_name = base::StringPrintf("%s.%s", map_name, script);
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    registrar->Add(pref_name.c_str(), callback);
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FontSettingsEventRouter::FontSettingsEventRouter(
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Profile* profile) : profile_(profile) {
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  registrar_.Init(profile_->GetPrefs());
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddPrefToObserve(prefs::kWebKitDefaultFixedFontSize,
1013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                   fonts::OnDefaultFixedFontSizeChanged::kEventName,
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   kPixelSizeKey);
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddPrefToObserve(prefs::kWebKitDefaultFontSize,
1043551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                   fonts::OnDefaultFontSizeChanged::kEventName,
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   kPixelSizeKey);
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddPrefToObserve(prefs::kWebKitMinimumFontSize,
1073551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                   fonts::OnMinimumFontSizeChanged::kEventName,
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   kPixelSizeKey);
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  PrefChangeRegistrar::NamedChangeCallback callback =
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::Bind(&FontSettingsEventRouter::OnFontFamilyMapPrefChanged,
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                 base::Unretained(this));
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RegisterFontFamilyMapObserver(&registrar_,
1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                prefs::kWebKitStandardFontFamilyMap, callback);
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RegisterFontFamilyMapObserver(&registrar_,
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                prefs::kWebKitSerifFontFamilyMap, callback);
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RegisterFontFamilyMapObserver(&registrar_,
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                prefs::kWebKitSansSerifFontFamilyMap, callback);
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RegisterFontFamilyMapObserver(&registrar_,
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                prefs::kWebKitFixedFontFamilyMap, callback);
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RegisterFontFamilyMapObserver(&registrar_,
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                prefs::kWebKitCursiveFontFamilyMap, callback);
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RegisterFontFamilyMapObserver(&registrar_,
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                prefs::kWebKitFantasyFontFamilyMap, callback);
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RegisterFontFamilyMapObserver(&registrar_,
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                prefs::kWebKitPictographFontFamilyMap,
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                callback);
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FontSettingsEventRouter::~FontSettingsEventRouter() {}
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void FontSettingsEventRouter::AddPrefToObserve(const char* pref_name,
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                               const char* event_name,
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                               const char* key) {
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  registrar_.Add(pref_name,
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                 base::Bind(&FontSettingsEventRouter::OnFontPrefChanged,
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                            base::Unretained(this),
1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                            event_name, key));
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void FontSettingsEventRouter::OnFontFamilyMapPrefChanged(
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::string& pref_name) {
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string generic_family;
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string script;
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (pref_names_util::ParseFontNamePrefPath(pref_name, &generic_family,
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                             &script)) {
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    OnFontNamePrefChanged(pref_name, generic_family, script);
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NOTREACHED();
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void FontSettingsEventRouter::OnFontNamePrefChanged(
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::string& pref_name,
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::string& generic_family,
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const std::string& script) {
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const PrefService::Preference* pref = registrar_.prefs()->FindPreference(
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      pref_name.c_str());
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHECK(pref);
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string font_name;
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!pref->GetValue()->GetAsString(&font_name)) {
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NOTREACHED();
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  font_name = MaybeGetLocalizedFontName(font_name);
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
169eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::ListValue args;
170eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::DictionaryValue* dict = new base::DictionaryValue();
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  args.Append(dict);
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  dict->SetString(kFontIdKey, font_name);
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  dict->SetString(kGenericFamilyKey, generic_family);
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  dict->SetString(kScriptKey, script);
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  extensions::preference_helpers::DispatchEventToExtensions(
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      profile_,
1783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      fonts::OnFontChanged::kEventName,
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      &args,
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      APIPermission::kFontSettings,
1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      false,
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      pref_name);
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void FontSettingsEventRouter::OnFontPrefChanged(
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::string& event_name,
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::string& key,
1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const std::string& pref_name) {
1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const PrefService::Preference* pref = registrar_.prefs()->FindPreference(
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      pref_name.c_str());
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHECK(pref);
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
193eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::ListValue args;
194eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::DictionaryValue* dict = new base::DictionaryValue();
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  args.Append(dict);
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  dict->Set(key, pref->GetValue()->DeepCopy());
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  extensions::preference_helpers::DispatchEventToExtensions(
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      profile_,
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      event_name,
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      &args,
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      APIPermission::kFontSettings,
2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      false,
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      pref_name);
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
207a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)FontSettingsAPI::FontSettingsAPI(content::BrowserContext* context)
208a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    : font_settings_event_router_(
209a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)          new FontSettingsEventRouter(Profile::FromBrowserContext(context))) {}
2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)FontSettingsAPI::~FontSettingsAPI() {
2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
214a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)static base::LazyInstance<BrowserContextKeyedAPIFactory<FontSettingsAPI> >
215a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    g_factory = LAZY_INSTANCE_INITIALIZER;
2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static
218a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)BrowserContextKeyedAPIFactory<FontSettingsAPI>*
219a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)FontSettingsAPI::GetFactoryInstance() {
2205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return g_factory.Pointer();
2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liubool FontSettingsClearFontFunction::RunSync() {
2241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  if (GetProfile()->IsOffTheRecord()) {
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    error_ = kSetFromIncognitoError;
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return false;
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<fonts::ClearFont::Params> params(
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      fonts::ClearFont::Params::Create(*args_));
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXTENSION_FUNCTION_VALIDATE(params.get());
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string pref_path = GetFontNamePrefPath(params->details.generic_family,
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                              params->details.script);
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Ensure |pref_path| really is for a registered per-script font pref.
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXTENSION_FUNCTION_VALIDATE(
2381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      GetProfile()->GetPrefs()->FindPreference(pref_path.c_str()));
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  PreferenceAPI::Get(GetProfile())->RemoveExtensionControlledPref(
2417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      extension_id(), pref_path.c_str(), kExtensionPrefsScopeRegular);
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liubool FontSettingsGetFontFunction::RunSync() {
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<fonts::GetFont::Params> params(
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      fonts::GetFont::Params::Create(*args_));
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXTENSION_FUNCTION_VALIDATE(params.get());
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string pref_path = GetFontNamePrefPath(params->details.generic_family,
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                              params->details.script);
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  PrefService* prefs = GetProfile()->GetPrefs();
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const PrefService::Preference* pref =
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      prefs->FindPreference(pref_path.c_str());
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string font_name;
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXTENSION_FUNCTION_VALIDATE(
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      pref && pref->GetValue()->GetAsString(&font_name));
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  font_name = MaybeGetLocalizedFontName(font_name);
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We don't support incognito-specific font prefs, so don't consider them when
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // getting level of control.
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const bool kIncognito = false;
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string level_of_control =
2661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      extensions::preference_helpers::GetLevelOfControl(
2671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)          GetProfile(), extension_id(), pref_path, kIncognito);
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
269eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::DictionaryValue* result = new base::DictionaryValue();
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->SetString(kFontIdKey, font_name);
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->SetString(kLevelOfControlKey, level_of_control);
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetResult(result);
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liubool FontSettingsSetFontFunction::RunSync() {
2771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  if (GetProfile()->IsOffTheRecord()) {
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    error_ = kSetFromIncognitoError;
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return false;
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<fonts::SetFont::Params> params(
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      fonts::SetFont::Params::Create(*args_));
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXTENSION_FUNCTION_VALIDATE(params.get());
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string pref_path = GetFontNamePrefPath(params->details.generic_family,
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                              params->details.script);
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Ensure |pref_path| really is for a registered font pref.
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXTENSION_FUNCTION_VALIDATE(
2911e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      GetProfile()->GetPrefs()->FindPreference(pref_path.c_str()));
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2931e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  PreferenceAPI::Get(GetProfile())->SetExtensionControlledPref(
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      extension_id(),
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      pref_path.c_str(),
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      kExtensionPrefsScopeRegular,
2973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      new base::StringValue(params->details.font_id));
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
301010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)bool FontSettingsGetFontListFunction::RunAsync() {
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::GetFontListAsync(
3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      Bind(&FontSettingsGetFontListFunction::FontListHasLoaded, this));
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void FontSettingsGetFontListFunction::FontListHasLoaded(
308eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    scoped_ptr<base::ListValue> list) {
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool success = CopyFontsToResult(list.get());
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SendResponse(success);
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
313eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbool FontSettingsGetFontListFunction::CopyFontsToResult(
314eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    base::ListValue* fonts) {
315eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  scoped_ptr<base::ListValue> result(new base::ListValue());
316eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  for (base::ListValue::iterator it = fonts->begin();
317eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch       it != fonts->end(); ++it) {
318eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    base::ListValue* font_list_value;
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (!(*it)->GetAsList(&font_list_value)) {
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      NOTREACHED();
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return false;
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::string name;
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (!font_list_value->GetString(0, &name)) {
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      NOTREACHED();
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return false;
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::string localized_name;
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (!font_list_value->GetString(1, &localized_name)) {
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      NOTREACHED();
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return false;
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
336eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    base::DictionaryValue* font_name = new base::DictionaryValue();
3373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    font_name->Set(kFontIdKey, new base::StringValue(name));
3383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    font_name->Set(kDisplayNameKey, new base::StringValue(localized_name));
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    result->Append(font_name);
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetResult(result.release());
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liubool ClearFontPrefExtensionFunction::RunSync() {
3471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  if (GetProfile()->IsOffTheRecord()) {
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    error_ = kSetFromIncognitoError;
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return false;
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  PreferenceAPI::Get(GetProfile())->RemoveExtensionControlledPref(
3537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      extension_id(), GetPrefName(), kExtensionPrefsScopeRegular);
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liubool GetFontPrefExtensionFunction::RunSync() {
3581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  PrefService* prefs = GetProfile()->GetPrefs();
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const PrefService::Preference* pref = prefs->FindPreference(GetPrefName());
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXTENSION_FUNCTION_VALIDATE(pref);
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We don't support incognito-specific font prefs, so don't consider them when
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // getting level of control.
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const bool kIncognito = false;
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string level_of_control =
3671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      extensions::preference_helpers::GetLevelOfControl(
3681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)          GetProfile(), extension_id(), GetPrefName(), kIncognito);
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
370eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::DictionaryValue* result = new base::DictionaryValue();
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->Set(GetKey(), pref->GetValue()->DeepCopy());
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->SetString(kLevelOfControlKey, level_of_control);
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetResult(result);
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liubool SetFontPrefExtensionFunction::RunSync() {
3781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  if (GetProfile()->IsOffTheRecord()) {
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    error_ = kSetFromIncognitoError;
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return false;
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
383eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::DictionaryValue* details = NULL;
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &details));
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::Value* value;
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXTENSION_FUNCTION_VALIDATE(details->Get(GetKey(), &value));
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  PreferenceAPI::Get(GetProfile())
3901e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      ->SetExtensionControlledPref(extension_id(),
3911e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                                   GetPrefName(),
3921e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                                   kExtensionPrefsScopeRegular,
3931e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                                   value->DeepCopy());
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char* FontSettingsClearDefaultFontSizeFunction::GetPrefName() {
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return prefs::kWebKitDefaultFontSize;
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char* FontSettingsGetDefaultFontSizeFunction::GetPrefName() {
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return prefs::kWebKitDefaultFontSize;
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char* FontSettingsGetDefaultFontSizeFunction::GetKey() {
4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return kPixelSizeKey;
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char* FontSettingsSetDefaultFontSizeFunction::GetPrefName() {
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return prefs::kWebKitDefaultFontSize;
4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char* FontSettingsSetDefaultFontSizeFunction::GetKey() {
4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return kPixelSizeKey;
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char* FontSettingsClearDefaultFixedFontSizeFunction::GetPrefName() {
4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return prefs::kWebKitDefaultFixedFontSize;
4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char* FontSettingsGetDefaultFixedFontSizeFunction::GetPrefName() {
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return prefs::kWebKitDefaultFixedFontSize;
4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char* FontSettingsGetDefaultFixedFontSizeFunction::GetKey() {
4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return kPixelSizeKey;
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char* FontSettingsSetDefaultFixedFontSizeFunction::GetPrefName() {
4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return prefs::kWebKitDefaultFixedFontSize;
4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char* FontSettingsSetDefaultFixedFontSizeFunction::GetKey() {
4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return kPixelSizeKey;
4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char* FontSettingsClearMinimumFontSizeFunction::GetPrefName() {
4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return prefs::kWebKitMinimumFontSize;
4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char* FontSettingsGetMinimumFontSizeFunction::GetPrefName() {
4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return prefs::kWebKitMinimumFontSize;
4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char* FontSettingsGetMinimumFontSizeFunction::GetKey() {
4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return kPixelSizeKey;
4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char* FontSettingsSetMinimumFontSizeFunction::GetPrefName() {
4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return prefs::kWebKitMinimumFontSize;
4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char* FontSettingsSetMinimumFontSizeFunction::GetKey() {
4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return kPixelSizeKey;
4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace extensions
458