blob: 4356e72a8c5e5e38e04f3fb6e68b25c3a208ae4e [file] [log] [blame]
// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Defines the classes to realize the Font Settings Extension API as specified
// in the extension API JSON.
#ifndef CHROME_BROWSER_EXTENSIONS_API_FONT_SETTINGS_FONT_SETTINGS_API_H_
#define CHROME_BROWSER_EXTENSIONS_API_FONT_SETTINGS_FONT_SETTINGS_API_H_
#include <memory>
#include <string>
#include "base/memory/raw_ptr.h"
#include "base/values.h"
#include "extensions/browser/browser_context_keyed_api_factory.h"
#include "extensions/browser/extension_function.h"
#include "extensions/buildflags/buildflags.h"
static_assert(BUILDFLAG(ENABLE_EXTENSIONS_CORE));
namespace content {
class BrowserContext;
}
namespace extensions {
class FontSettingsEventRouter;
// The profile-keyed service that manages the font_settings extension API.
// This is not an EventRouter::Observer (and does not lazily initialize) because
// doing so caused a regression in perf tests. See crbug.com/163466.
class FontSettingsAPI : public BrowserContextKeyedAPI {
public:
explicit FontSettingsAPI(content::BrowserContext* context);
~FontSettingsAPI() override;
// BrowserContextKeyedAPI implementation.
static BrowserContextKeyedAPIFactory<FontSettingsAPI>* GetFactoryInstance();
private:
friend class BrowserContextKeyedAPIFactory<FontSettingsAPI>;
// BrowserContextKeyedAPI implementation.
static const char* service_name() {
return "FontSettingsAPI";
}
static const bool kServiceIsNULLWhileTesting = true;
std::unique_ptr<FontSettingsEventRouter> font_settings_event_router_;
};
// fontSettings.clearFont API function.
class FontSettingsClearFontFunction : public ExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("fontSettings.clearFont", FONTSETTINGS_CLEARFONT)
protected:
// RefCounted types have non-public destructors, as with all extension
// functions in this file.
~FontSettingsClearFontFunction() override = default;
// ExtensionFunction:
ResponseAction Run() override;
};
// fontSettings.getFont API function.
class FontSettingsGetFontFunction : public ExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("fontSettings.getFont", FONTSETTINGS_GETFONT)
protected:
~FontSettingsGetFontFunction() override = default;
// ExtensionFunction:
ResponseAction Run() override;
};
// fontSettings.setFont API function.
class FontSettingsSetFontFunction : public ExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("fontSettings.setFont", FONTSETTINGS_SETFONT)
protected:
~FontSettingsSetFontFunction() override = default;
// ExtensionFunction:
ResponseAction Run() override;
};
// fontSettings.getFontList API function.
class FontSettingsGetFontListFunction : public ExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("fontSettings.getFontList",
FONTSETTINGS_GETFONTLIST)
protected:
~FontSettingsGetFontListFunction() override = default;
// ExtensionFunction:
ResponseAction Run() override;
private:
void FontListHasLoaded(base::Value::List list);
ResponseValue CopyFontsToResult(const base::Value::List& fonts);
};
// Base class for extension API functions that clear a browser font pref.
class ClearFontPrefExtensionFunction : public ExtensionFunction {
protected:
~ClearFontPrefExtensionFunction() override = default;
// ExtensionFunction:
ResponseAction Run() override;
// Implementations should return the name of the preference to clear, like
// "webkit.webprefs.default_font_size".
virtual const char* GetPrefName() = 0;
};
// Base class for extension API functions that get a browser font pref.
class GetFontPrefExtensionFunction : public ExtensionFunction {
protected:
~GetFontPrefExtensionFunction() override = default;
// ExtensionFunction:
ResponseAction Run() override;
// Implementations should return the name of the preference to get, like
// "webkit.webprefs.default_font_size".
virtual const char* GetPrefName() = 0;
// Implementations should return the key for the value in the extension API,
// like "pixelSize".
virtual const char* GetKey() = 0;
};
// Base class for extension API functions that set a browser font pref.
class SetFontPrefExtensionFunction : public ExtensionFunction {
protected:
~SetFontPrefExtensionFunction() override = default;
// ExtensionFunction:
ResponseAction Run() override;
// Implementations should return the name of the preference to set, like
// "webkit.webprefs.default_font_size".
virtual const char* GetPrefName() = 0;
// Implementations should return the key for the value in the extension API,
// like "pixelSize".
virtual const char* GetKey() = 0;
};
// The following are get/set/clear API functions that act on a browser font
// pref.
class FontSettingsClearDefaultFontSizeFunction
: public ClearFontPrefExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("fontSettings.clearDefaultFontSize",
FONTSETTINGS_CLEARDEFAULTFONTSIZE)
protected:
~FontSettingsClearDefaultFontSizeFunction() override = default;
// ClearFontPrefExtensionFunction:
const char* GetPrefName() override;
};
class FontSettingsGetDefaultFontSizeFunction
: public GetFontPrefExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("fontSettings.getDefaultFontSize",
FONTSETTINGS_GETDEFAULTFONTSIZE)
protected:
~FontSettingsGetDefaultFontSizeFunction() override = default;
// GetFontPrefExtensionFunction:
const char* GetPrefName() override;
const char* GetKey() override;
};
class FontSettingsSetDefaultFontSizeFunction
: public SetFontPrefExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("fontSettings.setDefaultFontSize",
FONTSETTINGS_SETDEFAULTFONTSIZE)
protected:
~FontSettingsSetDefaultFontSizeFunction() override = default;
// SetFontPrefExtensionFunction:
const char* GetPrefName() override;
const char* GetKey() override;
};
class FontSettingsClearDefaultFixedFontSizeFunction
: public ClearFontPrefExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("fontSettings.clearDefaultFixedFontSize",
FONTSETTINGS_CLEARDEFAULTFIXEDFONTSIZE)
protected:
~FontSettingsClearDefaultFixedFontSizeFunction() override = default;
// ClearFontPrefExtensionFunction:
const char* GetPrefName() override;
};
class FontSettingsGetDefaultFixedFontSizeFunction
: public GetFontPrefExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("fontSettings.getDefaultFixedFontSize",
FONTSETTINGS_GETDEFAULTFIXEDFONTSIZE)
protected:
~FontSettingsGetDefaultFixedFontSizeFunction() override = default;
// GetFontPrefExtensionFunction:
const char* GetPrefName() override;
const char* GetKey() override;
};
class FontSettingsSetDefaultFixedFontSizeFunction
: public SetFontPrefExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("fontSettings.setDefaultFixedFontSize",
FONTSETTINGS_SETDEFAULTFIXEDFONTSIZE)
protected:
~FontSettingsSetDefaultFixedFontSizeFunction() override = default;
// SetFontPrefExtensionFunction:
const char* GetPrefName() override;
const char* GetKey() override;
};
class FontSettingsClearMinimumFontSizeFunction
: public ClearFontPrefExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("fontSettings.clearMinimumFontSize",
FONTSETTINGS_CLEARMINIMUMFONTSIZE)
protected:
~FontSettingsClearMinimumFontSizeFunction() override = default;
// ClearFontPrefExtensionFunction:
const char* GetPrefName() override;
};
class FontSettingsGetMinimumFontSizeFunction
: public GetFontPrefExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("fontSettings.getMinimumFontSize",
FONTSETTINGS_GETMINIMUMFONTSIZE)
protected:
~FontSettingsGetMinimumFontSizeFunction() override = default;
// GetFontPrefExtensionFunction:
const char* GetPrefName() override;
const char* GetKey() override;
};
class FontSettingsSetMinimumFontSizeFunction
: public SetFontPrefExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("fontSettings.setMinimumFontSize",
FONTSETTINGS_SETMINIMUMFONTSIZE)
protected:
~FontSettingsSetMinimumFontSizeFunction() override = default;
// SetFontPrefExtensionFunction:
const char* GetPrefName() override;
const char* GetKey() override;
};
} // namespace extensions
#endif // CHROME_BROWSER_EXTENSIONS_API_FONT_SETTINGS_FONT_SETTINGS_API_H_