Index: chrome/browser/extensions/extension_font_settings_api.cc |
diff --git a/chrome/browser/extensions/extension_font_settings_api.cc b/chrome/browser/extensions/extension_font_settings_api.cc |
deleted file mode 100644 |
index e7c5c89b2b9da47b6c0e1b0af33c7fedbd3ce75c..0000000000000000000000000000000000000000 |
--- a/chrome/browser/extensions/extension_font_settings_api.cc |
+++ /dev/null |
@@ -1,483 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-// Font Settings Extension API implementation. |
- |
-#include "chrome/browser/extensions/extension_font_settings_api.h" |
- |
-#include "base/bind.h" |
-#include "base/command_line.h" |
-#include "base/json/json_writer.h" |
-#include "base/stringprintf.h" |
-#include "base/string_util.h" |
-#include "base/values.h" |
-#include "chrome/browser/extensions/extension_preference_helpers.h" |
-#include "chrome/browser/extensions/extension_service.h" |
-#include "chrome/browser/prefs/pref_service.h" |
-#include "chrome/browser/profiles/profile.h" |
-#include "chrome/common/chrome_notification_types.h" |
-#include "chrome/common/extensions/api/font_settings.h" |
-#include "chrome/common/extensions/extension_error_utils.h" |
-#include "chrome/common/pref_names.h" |
-#include "content/public/browser/font_list_async.h" |
-#include "content/public/browser/notification_details.h" |
-#include "content/public/browser/notification_source.h" |
- |
-#if defined(OS_WIN) |
-#include "ui/gfx/font.h" |
-#include "ui/gfx/platform_font_win.h" |
-#endif |
- |
-using extensions::APIPermission; |
- |
-namespace fonts = extensions::api::font_settings; |
- |
-namespace { |
- |
-const char kFontIdKey[] = "fontId"; |
-const char kGenericFamilyKey[] = "genericFamily"; |
-const char kLevelOfControlKey[] = "levelOfControl"; |
-const char kDisplayNameKey[] = "displayName"; |
-const char kPixelSizeKey[] = "pixelSize"; |
-const char kScriptKey[] = "script"; |
- |
-const char kSetFromIncognitoError[] = |
- "Can't modify regular settings from an incognito context."; |
- |
-const char kOnDefaultFixedFontSizeChanged[] = |
- "fontSettings.onDefaultFixedFontSizeChanged"; |
-const char kOnDefaultFontSizeChanged[] = |
- "fontSettings.onDefaultFontSizeChanged"; |
-const char kOnFontChanged[] = "fontSettings.onFontChanged"; |
-const char kOnMinimumFontSizeChanged[] = |
- "fontSettings.onMinimumFontSizeChanged"; |
- |
-// Format for font name preference paths. |
-const char kWebKitFontPrefFormat[] = "webkit.webprefs.fonts.%s.%s"; |
-const char kWebKitFontPrefPrefix[] = "webkit.webprefs.fonts."; |
- |
-// Gets the font name preference path for |generic_family| and |script|. If |
-// |script| is NULL, uses prefs::kWebKitCommonScript. |
-std::string GetFontNamePrefPath(const std::string& generic_family, |
- const std::string* script) { |
- return StringPrintf(kWebKitFontPrefFormat, |
- generic_family.c_str(), |
- script ? script->c_str() : prefs::kWebKitCommonScript); |
-} |
- |
-// Extracts the generic family and script from font name pref path |pref_path|. |
-bool ParseFontNamePrefPath(std::string pref_path, |
- std::string* generic_family, |
- std::string* script) { |
- if (!StartsWithASCII(pref_path, kWebKitFontPrefPrefix, true)) |
- return false; |
- |
- size_t start = strlen(kWebKitFontPrefPrefix); |
- size_t pos = pref_path.find('.', start); |
- if (pos == std::string::npos || pos + 1 == pref_path.length()) |
- return false; |
- *generic_family = pref_path.substr(start, pos - start); |
- *script = pref_path.substr(pos + 1); |
- return true; |
-} |
- |
-// Returns the localized name of a font so that it can be matched within the |
-// list of system fonts. On Windows, the list of system fonts has names only |
-// for the system locale, but the pref value may be in the English name. |
-std::string MaybeGetLocalizedFontName(const std::string& font_name) { |
-#if defined(OS_WIN) |
- if (!font_name.empty()) { |
- gfx::Font font(font_name, 12); // dummy font size |
- return static_cast<gfx::PlatformFontWin*>(font.platform_font())-> |
- GetLocalizedFontName(); |
- } |
-#endif |
- return font_name; |
-} |
- |
-// Registers |obs| to observe per-script font prefs under the path |map_name|. |
-void RegisterFontFamilyMapObserver(PrefChangeRegistrar* registrar, |
- const char* map_name, |
- content::NotificationObserver* obs) { |
- for (size_t i = 0; i < prefs::kWebKitScriptsForFontFamilyMapsLength; ++i) { |
- const char* script = prefs::kWebKitScriptsForFontFamilyMaps[i]; |
- std::string pref_name = base::StringPrintf("%s.%s", map_name, script); |
- registrar->Add(pref_name.c_str(), obs); |
- } |
-} |
- |
-} // namespace |
- |
-ExtensionFontSettingsEventRouter::ExtensionFontSettingsEventRouter( |
- Profile* profile) : profile_(profile) {} |
- |
-ExtensionFontSettingsEventRouter::~ExtensionFontSettingsEventRouter() {} |
- |
-void ExtensionFontSettingsEventRouter::Init() { |
- registrar_.Init(profile_->GetPrefs()); |
- |
- AddPrefToObserve(prefs::kWebKitDefaultFixedFontSize, |
- kOnDefaultFixedFontSizeChanged, |
- kPixelSizeKey); |
- AddPrefToObserve(prefs::kWebKitDefaultFontSize, |
- kOnDefaultFontSizeChanged, |
- kPixelSizeKey); |
- AddPrefToObserve(prefs::kWebKitMinimumFontSize, |
- kOnMinimumFontSizeChanged, |
- kPixelSizeKey); |
- |
- RegisterFontFamilyMapObserver(®istrar_, |
- prefs::kWebKitStandardFontFamilyMap, this); |
- RegisterFontFamilyMapObserver(®istrar_, |
- prefs::kWebKitSerifFontFamilyMap, this); |
- RegisterFontFamilyMapObserver(®istrar_, |
- prefs::kWebKitSansSerifFontFamilyMap, this); |
- RegisterFontFamilyMapObserver(®istrar_, |
- prefs::kWebKitFixedFontFamilyMap, this); |
- RegisterFontFamilyMapObserver(®istrar_, |
- prefs::kWebKitCursiveFontFamilyMap, this); |
- RegisterFontFamilyMapObserver(®istrar_, |
- prefs::kWebKitFantasyFontFamilyMap, this); |
-} |
- |
-void ExtensionFontSettingsEventRouter::AddPrefToObserve(const char* pref_name, |
- const char* event_name, |
- const char* key) { |
- registrar_.Add(pref_name, this); |
- pref_event_map_[pref_name] = std::make_pair(event_name, key); |
-} |
- |
-void ExtensionFontSettingsEventRouter::Observe( |
- int type, |
- const content::NotificationSource& source, |
- const content::NotificationDetails& details) { |
- if (type != chrome::NOTIFICATION_PREF_CHANGED) { |
- NOTREACHED(); |
- return; |
- } |
- |
- PrefService* pref_service = content::Source<PrefService>(source).ptr(); |
- bool incognito = (pref_service != profile_->GetPrefs()); |
- // We're only observing pref changes on the regular profile. |
- DCHECK(!incognito); |
- const std::string* pref_name = |
- content::Details<const std::string>(details).ptr(); |
- |
- PrefEventMap::iterator iter = pref_event_map_.find(*pref_name); |
- if (iter != pref_event_map_.end()) { |
- const std::string& event_name = iter->second.first; |
- const std::string& key = iter->second.second; |
- OnFontPrefChanged(pref_service, *pref_name, event_name, key, incognito); |
- return; |
- } |
- |
- std::string generic_family; |
- std::string script; |
- if (ParseFontNamePrefPath(*pref_name, &generic_family, &script)) { |
- OnFontNamePrefChanged(pref_service, *pref_name, generic_family, script, |
- incognito); |
- return; |
- } |
- |
- NOTREACHED(); |
-} |
- |
-void ExtensionFontSettingsEventRouter::OnFontNamePrefChanged( |
- PrefService* pref_service, |
- const std::string& pref_name, |
- const std::string& generic_family, |
- const std::string& script, |
- bool incognito) { |
- const PrefService::Preference* pref = pref_service->FindPreference( |
- pref_name.c_str()); |
- CHECK(pref); |
- |
- std::string font_name; |
- if (!pref->GetValue()->GetAsString(&font_name)) { |
- NOTREACHED(); |
- return; |
- } |
- font_name = MaybeGetLocalizedFontName(font_name); |
- |
- ListValue args; |
- DictionaryValue* dict = new DictionaryValue(); |
- args.Append(dict); |
- dict->SetString(kFontIdKey, font_name); |
- dict->SetString(kGenericFamilyKey, generic_family); |
- dict->SetString(kScriptKey, script); |
- |
- extension_preference_helpers::DispatchEventToExtensions( |
- profile_, |
- kOnFontChanged, |
- &args, |
- APIPermission::kFontSettings, |
- incognito, |
- pref_name); |
-} |
- |
-void ExtensionFontSettingsEventRouter::OnFontPrefChanged( |
- PrefService* pref_service, |
- const std::string& pref_name, |
- const std::string& event_name, |
- const std::string& key, |
- bool incognito) { |
- const PrefService::Preference* pref = pref_service->FindPreference( |
- pref_name.c_str()); |
- CHECK(pref); |
- |
- ListValue args; |
- DictionaryValue* dict = new DictionaryValue(); |
- args.Append(dict); |
- dict->Set(key, pref->GetValue()->DeepCopy()); |
- |
- extension_preference_helpers::DispatchEventToExtensions( |
- profile_, |
- event_name, |
- &args, |
- APIPermission::kFontSettings, |
- incognito, |
- pref_name); |
-} |
- |
-bool ClearFontFunction::RunImpl() { |
- if (profile_->IsOffTheRecord()) { |
- error_ = kSetFromIncognitoError; |
- return false; |
- } |
- |
- scoped_ptr<fonts::ClearFont::Params> params( |
- fonts::ClearFont::Params::Create(*args_)); |
- EXTENSION_FUNCTION_VALIDATE(params.get()); |
- |
- std::string pref_path = GetFontNamePrefPath(params->details.generic_family, |
- params->details.script.get()); |
- |
- // Ensure |pref_path| really is for a registered per-script font pref. |
- EXTENSION_FUNCTION_VALIDATE( |
- profile_->GetPrefs()->FindPreference(pref_path.c_str())); |
- |
- extensions::ExtensionPrefs* prefs = |
- profile_->GetExtensionService()->extension_prefs(); |
- prefs->RemoveExtensionControlledPref(extension_id(), |
- pref_path.c_str(), |
- extensions::kExtensionPrefsScopeRegular); |
- return true; |
-} |
- |
-bool GetFontFunction::RunImpl() { |
- scoped_ptr<fonts::GetFont::Params> params( |
- fonts::GetFont::Params::Create(*args_)); |
- EXTENSION_FUNCTION_VALIDATE(params.get()); |
- |
- std::string pref_path = GetFontNamePrefPath(params->details.generic_family, |
- params->details.script.get()); |
- PrefService* prefs = profile_->GetPrefs(); |
- const PrefService::Preference* pref = |
- prefs->FindPreference(pref_path.c_str()); |
- |
- std::string font_name; |
- EXTENSION_FUNCTION_VALIDATE( |
- pref && pref->GetValue()->GetAsString(&font_name)); |
- font_name = MaybeGetLocalizedFontName(font_name); |
- |
- // We don't support incognito-specific font prefs, so don't consider them when |
- // getting level of control. |
- const bool kIncognito = false; |
- std::string level_of_control = |
- extension_preference_helpers::GetLevelOfControl(profile_, |
- extension_id(), |
- pref_path, |
- kIncognito); |
- |
- DictionaryValue* result = new DictionaryValue(); |
- result->SetString(kFontIdKey, font_name); |
- result->SetString(kLevelOfControlKey, level_of_control); |
- SetResult(result); |
- return true; |
-} |
- |
-bool SetFontFunction::RunImpl() { |
- if (profile_->IsOffTheRecord()) { |
- error_ = kSetFromIncognitoError; |
- return false; |
- } |
- |
- scoped_ptr<fonts::SetFont::Params> params( |
- fonts::SetFont::Params::Create(*args_)); |
- EXTENSION_FUNCTION_VALIDATE(params.get()); |
- |
- std::string pref_path = GetFontNamePrefPath(params->details.generic_family, |
- params->details.script.get()); |
- // Ensure |pref_path| really is for a registered font pref. |
- EXTENSION_FUNCTION_VALIDATE( |
- profile_->GetPrefs()->FindPreference(pref_path.c_str())); |
- |
- extensions::ExtensionPrefs* prefs = |
- profile_->GetExtensionService()->extension_prefs(); |
- prefs->SetExtensionControlledPref( |
- extension_id(), |
- pref_path.c_str(), |
- extensions::kExtensionPrefsScopeRegular, |
- Value::CreateStringValue(params->details.font_id)); |
- return true; |
-} |
- |
-bool GetFontListFunction::RunImpl() { |
- content::GetFontListAsync( |
- Bind(&GetFontListFunction::FontListHasLoaded, this)); |
- return true; |
-} |
- |
-void GetFontListFunction::FontListHasLoaded(scoped_ptr<ListValue> list) { |
- bool success = CopyFontsToResult(list.get()); |
- SendResponse(success); |
-} |
- |
-bool GetFontListFunction::CopyFontsToResult(ListValue* fonts) { |
- scoped_ptr<ListValue> result(new ListValue()); |
- for (ListValue::iterator it = fonts->begin(); it != fonts->end(); ++it) { |
- ListValue* font_list_value; |
- if (!(*it)->GetAsList(&font_list_value)) { |
- NOTREACHED(); |
- return false; |
- } |
- |
- std::string name; |
- if (!font_list_value->GetString(0, &name)) { |
- NOTREACHED(); |
- return false; |
- } |
- |
- std::string localized_name; |
- if (!font_list_value->GetString(1, &localized_name)) { |
- NOTREACHED(); |
- return false; |
- } |
- |
- DictionaryValue* font_name = new DictionaryValue(); |
- font_name->Set(kFontIdKey, Value::CreateStringValue(name)); |
- font_name->Set(kDisplayNameKey, Value::CreateStringValue(localized_name)); |
- result->Append(font_name); |
- } |
- |
- SetResult(result.release()); |
- return true; |
-} |
- |
-bool ClearFontPrefExtensionFunction::RunImpl() { |
- if (profile_->IsOffTheRecord()) { |
- error_ = kSetFromIncognitoError; |
- return false; |
- } |
- |
- extensions::ExtensionPrefs* prefs = |
- profile_->GetExtensionService()->extension_prefs(); |
- prefs->RemoveExtensionControlledPref(extension_id(), |
- GetPrefName(), |
- extensions::kExtensionPrefsScopeRegular); |
- return true; |
-} |
- |
-bool GetFontPrefExtensionFunction::RunImpl() { |
- PrefService* prefs = profile_->GetPrefs(); |
- const PrefService::Preference* pref = prefs->FindPreference(GetPrefName()); |
- EXTENSION_FUNCTION_VALIDATE(pref); |
- |
- // We don't support incognito-specific font prefs, so don't consider them when |
- // getting level of control. |
- const bool kIncognito = false; |
- |
- std::string level_of_control = |
- extension_preference_helpers::GetLevelOfControl(profile_, |
- extension_id(), |
- GetPrefName(), |
- kIncognito); |
- |
- DictionaryValue* result = new DictionaryValue(); |
- result->Set(GetKey(), pref->GetValue()->DeepCopy()); |
- result->SetString(kLevelOfControlKey, level_of_control); |
- SetResult(result); |
- return true; |
-} |
- |
-bool SetFontPrefExtensionFunction::RunImpl() { |
- if (profile_->IsOffTheRecord()) { |
- error_ = kSetFromIncognitoError; |
- return false; |
- } |
- |
- DictionaryValue* details = NULL; |
- EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &details)); |
- |
- Value* value; |
- EXTENSION_FUNCTION_VALIDATE(details->Get(GetKey(), &value)); |
- |
- extensions::ExtensionPrefs* prefs = |
- profile_->GetExtensionService()->extension_prefs(); |
- prefs->SetExtensionControlledPref(extension_id(), |
- GetPrefName(), |
- extensions::kExtensionPrefsScopeRegular, |
- value->DeepCopy()); |
- return true; |
-} |
- |
-const char* ClearDefaultFontSizeFunction::GetPrefName() { |
- return prefs::kWebKitDefaultFontSize; |
-} |
- |
-const char* GetDefaultFontSizeFunction::GetPrefName() { |
- return prefs::kWebKitDefaultFontSize; |
-} |
- |
-const char* GetDefaultFontSizeFunction::GetKey() { |
- return kPixelSizeKey; |
-} |
- |
-const char* SetDefaultFontSizeFunction::GetPrefName() { |
- return prefs::kWebKitDefaultFontSize; |
-} |
- |
-const char* SetDefaultFontSizeFunction::GetKey() { |
- return kPixelSizeKey; |
-} |
- |
-const char* ClearDefaultFixedFontSizeFunction::GetPrefName() { |
- return prefs::kWebKitDefaultFixedFontSize; |
-} |
- |
-const char* GetDefaultFixedFontSizeFunction::GetPrefName() { |
- return prefs::kWebKitDefaultFixedFontSize; |
-} |
- |
-const char* GetDefaultFixedFontSizeFunction::GetKey() { |
- return kPixelSizeKey; |
-} |
- |
-const char* SetDefaultFixedFontSizeFunction::GetPrefName() { |
- return prefs::kWebKitDefaultFixedFontSize; |
-} |
- |
-const char* SetDefaultFixedFontSizeFunction::GetKey() { |
- return kPixelSizeKey; |
-} |
- |
-const char* ClearMinimumFontSizeFunction::GetPrefName() { |
- return prefs::kWebKitMinimumFontSize; |
-} |
- |
-const char* GetMinimumFontSizeFunction::GetPrefName() { |
- return prefs::kWebKitMinimumFontSize; |
-} |
- |
-const char* GetMinimumFontSizeFunction::GetKey() { |
- return kPixelSizeKey; |
-} |
- |
-const char* SetMinimumFontSizeFunction::GetPrefName() { |
- return prefs::kWebKitMinimumFontSize; |
-} |
- |
-const char* SetMinimumFontSizeFunction::GetKey() { |
- return kPixelSizeKey; |
-} |