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(®istrar_, 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs::kWebKitStandardFontFamilyMap, callback); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterFontFamilyMapObserver(®istrar_, 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs::kWebKitSerifFontFamilyMap, callback); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterFontFamilyMapObserver(®istrar_, 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs::kWebKitSansSerifFontFamilyMap, callback); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterFontFamilyMapObserver(®istrar_, 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs::kWebKitFixedFontFamilyMap, callback); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterFontFamilyMapObserver(®istrar_, 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs::kWebKitCursiveFontFamilyMap, callback); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterFontFamilyMapObserver(®istrar_, 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs::kWebKitFantasyFontFamilyMap, callback); 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterFontFamilyMapObserver(®istrar_, 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