当前位置: 首页 > article >正文

Chromium 中chrome.fontSettings扩展接口定义c++

一、chrome.fontSettings

使用 chrome.fontSettings API 管理 Chrome 的字体设置。

权限

fontSettings

要使用 Font Settings API,您必须在扩展程序中声明 "fontSettings" 权限 清单。例如:

{
  "name": "My Font Settings Extension",
  "description": "Customize your fonts",
  "version": "0.2",
  "permissions": [
    "fontSettings"
  ],
  ...
}

概念和用法

Chrome 允许某些字体设置取决于特定的常规字体系列和语言 脚本。例如, sans-serif 简体中文使用的字体可能与该字体不同 用于 serif 日语。

Chrome 支持的通用字体系列基于 CSS 通用字体系列, GenericReference下列出。当网页指定了通用字体系列时,Chrome 会选择 根据相应设置调整字体。如果未指定通用字体系列,则 Chrome 会使用 “包量”规则的通用字体系列。

当网页指定了语言时,Chrome 会根据 相应的语言脚本。如果未指定语言,则 Chrome 会使用默认设置 或全局、脚本。

支持的语言脚本由 ISO 15924 脚本代码指定,并列在下方 ScriptCode。从技术上讲,Chrome 设置并不是严格按脚本进行设置,还取决于 语言。例如,当 网页指定了俄语,并且该字体不仅用于西里尔文字, 字体覆盖的所有内容(如拉丁文)。

示例

以下代码可获取阿拉伯语标准字体。

chrome.fontSettings.getFont(
  { genericFamily: 'standard', script: 'Arab' },
  function(details) { console.log(details.fontId); }
);

下一个代码段用于设置日语的 sans-serif 字体。

chrome.fontSettings.setFont(
  { genericFamily: 'sansserif', script: 'Jpan', fontId: 'MS PGothic' }
);

若要试用此 API,请安装 chrome-extension-samples 中的 fontSettings API 示例 存储库

更多参考:chrome.fontSettings  |  API  |  Chrome for Developers

二、chrome.fontSettings c++接口定义:

1、font_settings.json 接口描述文件:

// 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.

[
  {
    "namespace": "fontSettings",
    "description": "Use the <code>chrome.fontSettings</code> API to manage Chrome's font settings.",
    "types": [
      {
        "id": "FontName",
        "type": "object",
        "description": "Represents a font name.",
        "properties": {
          "fontId": {
            "type": "string",
            "description": "The font ID."
          },
          "displayName": {
            "type": "string",
            "description": "The display name of the font."
          }
        }
      },
      {
        "id": "ScriptCode",
        "type": "string",
        "enum": [ "Afak", "Arab", "Armi", "Armn", "Avst", "Bali", "Bamu", "Bass", "Batk",
                  "Beng", "Blis", "Bopo", "Brah", "Brai", "Bugi", "Buhd", "Cakm", "Cans",
                  "Cari", "Cham", "Cher", "Cirt", "Copt", "Cprt", "Cyrl", "Cyrs", "Deva",
                  "Dsrt", "Dupl", "Egyd", "Egyh", "Egyp", "Elba", "Ethi", "Geor", "Geok",
                  "Glag", "Goth", "Gran", "Grek", "Gujr", "Guru", "Hang", "Hani", "Hano",
                  "Hans", "Hant", "Hebr", "Hluw", "Hmng", "Hung", "Inds", "Ital", "Java",
                  "Jpan", "Jurc", "Kali", "Khar", "Khmr", "Khoj", "Knda", "Kpel", "Kthi",
                  "Lana", "Laoo", "Latf", "Latg", "Latn", "Lepc", "Limb", "Lina", "Linb",
                  "Lisu", "Loma", "Lyci", "Lydi", "Mand", "Mani", "Maya", "Mend", "Merc",
                  "Mero", "Mlym", "Moon", "Mong", "Mroo", "Mtei", "Mymr", "Narb", "Nbat",
                  "Nkgb", "Nkoo", "Nshu", "Ogam", "Olck", "Orkh", "Orya", "Osma", "Palm",
                  "Perm", "Phag", "Phli", "Phlp", "Phlv", "Phnx", "Plrd", "Prti", "Rjng",
                  "Roro", "Runr", "Samr", "Sara", "Sarb", "Saur", "Sgnw", "Shaw", "Shrd",
                  "Sind", "Sinh", "Sora", "Sund", "Sylo", "Syrc", "Syre", "Syrj", "Syrn",
                  "Tagb", "Takr", "Tale", "Talu", "Taml", "Tang", "Tavt", "Telu", "Teng",
                  "Tfng", "Tglg", "Thaa", "Thai", "Tibt", "Tirh", "Ugar", "Vaii", "Visp",
                  "Wara", "Wole", "Xpeo", "Xsux", "Yiii", "Zmth", "Zsym", "Zyyy" ],
        "description": "An ISO 15924 script code. The default, or global, script is represented by script code \"Zyyy\"."
      },
      {
        "id": "GenericFamily",
        "type": "string",
        "enum": ["standard", "sansserif", "serif", "fixed", "cursive", "fantasy", "math"],
        "description": "A CSS generic font family."
      },
      {
        "id": "LevelOfControl",
        "description": "One of<br><var>not_controllable</var>: cannot be controlled by any extension<br><var>controlled_by_other_extensions</var>: controlled by extensions with higher precedence<br><var>controllable_by_this_extension</var>: can be controlled by this extension<br><var>controlled_by_this_extension</var>: controlled by this extension",
        "type": "string",
        "enum": ["not_controllable", "controlled_by_other_extensions", "controllable_by_this_extension", "controlled_by_this_extension"]
      }
    ],
    "functions": [
      {
        "name": "clearFont",
        "description": "Clears the font set by this extension, if any.",
        "parameters": [
          {
            "name": "details",
            "type": "object",
            "properties": {
              "script": {
                "$ref": "ScriptCode",
                "description": "The script for which the font should be cleared. If omitted, the global script font setting is cleared.",
                "optional": true
              },
              "genericFamily": {
                "$ref": "GenericFamily",
                "description": "The generic font family for which the font should be cleared."
              }
            }
          }
        ],
        "returns_async": {
          "name": "callback",
          "optional": true,
          "parameters": []
        }
      },
      {
        "name": "getFont",
        "description": "Gets the font for a given script and generic font family.",
        "parameters": [
          {
            "name": "details",
            "type": "object",
            "properties": {
              "script": {
                "$ref": "ScriptCode",
                "description": "The script for which the font should be retrieved. If omitted, the font setting for the global script (script code \"Zyyy\") is retrieved.",
                "optional": true
              },
              "genericFamily": {
                "$ref": "GenericFamily",
                "description": "The generic font family for which the font should be retrieved."
              }
            }
          }
        ],
        "returns_async": {
          "name": "callback",
          "optional": true,
          "parameters": [
            {
              "name": "details",
              "type": "object",
              "properties": {
                "fontId": {
                  "type": "string",
                  "description": "The font ID. Rather than the literal font ID preference value, this may be the ID of the font that the system resolves the preference value to. So, <var>fontId</var> can differ from the font passed to <code>setFont</code>, if, for example, the font is not available on the system. The empty string signifies fallback to the global script font setting."
                },
                "levelOfControl": {
                  "$ref": "LevelOfControl",
                  "description": "The level of control this extension has over the setting."
                }
              }
            }
          ]
        }
      },
      {
        "name": "setFont",
        "description": "Sets the font for a given script and generic font family.",
        "parameters": [
          {
            "name": "details",
            "type": "object",
            "properties": {
              "script": {
                "$ref": "ScriptCode",
                "description": "The script code which the font should be set. If omitted, the font setting for the global script (script code \"Zyyy\") is set.",
                "optional": true
              },
              "genericFamily": {
                "$ref": "GenericFamily",
                "description": "The generic font family for which the font should be set."
              },
              "fontId": {
                "type": "string",
                "description": "The font ID. The empty string means to fallback to the global script font setting."
              }
            }
          }
        ],
        "returns_async": {
          "name": "callback",
          "optional": true,
          "parameters": []
        }
      },
      {
        "name": "getFontList",
        "description": "Gets a list of fonts on the system.",
        "parameters": [],
        "returns_async": {
          "name": "callback",
          "parameters": [
            {
              "name": "results",
              "type": "array",
              "items": { "$ref": "FontName" }
            }
          ]
        }
      },
      {
        "name": "clearDefaultFontSize",
        "description": "Clears the default font size set by this extension, if any.",
        "parameters": [
          {
            "name": "details",
            "type": "object",
            "optional": true,
            "description": "This parameter is currently unused.",
            "properties": {}
          }
        ],
        "returns_async": {
          "name": "callback",
          "optional": true,
          "parameters": []
        }
      },
      {
        "name": "getDefaultFontSize",
        "description": "Gets the default font size.",
        "parameters": [
          {
            "name": "details",
            "type": "object",
            "optional": true,
            "description": "This parameter is currently unused.",
            "properties": {}
          }
        ],
        "returns_async": {
          "name": "callback",
          "optional": true,
          "parameters": [
            {
              "name": "details",
              "type": "object",
              "properties": {
                "pixelSize": {
                  "type": "integer",
                  "description": "The font size in pixels."
                },
                "levelOfControl": {
                  "$ref": "LevelOfControl",
                  "description": "The level of control this extension has over the setting."
                }
              }
            }
          ]
        }
      },
      {
        "name": "setDefaultFontSize",
        "description": "Sets the default font size.",
        "parameters": [
          {
            "name": "details",
            "type": "object",
            "properties": {
              "pixelSize": {
                "type": "integer",
                "description": "The font size in pixels."
              }
            }
          }
        ],
        "returns_async": {
          "name": "callback",
          "optional": true,
          "parameters": []
        }
      },
      {
        "name": "clearDefaultFixedFontSize",
        "description": "Clears the default fixed font size set by this extension, if any.",
        "parameters": [
          {
            "name": "details",
            "type": "object",
            "optional": true,
            "description": "This parameter is currently unused.",
            "properties": {}
          }
        ],
        "returns_async": {
          "name": "callback",
          "optional": true,
          "parameters": []
        }
      },
      {
        "name": "getDefaultFixedFontSize",
        "description": "Gets the default size for fixed width fonts.",
        "parameters": [
          {
            "name": "details",
            "type": "object",
            "optional": true,
            "description": "This parameter is currently unused.",
            "properties": {}
          }
        ],
        "returns_async": {
          "name": "callback",
          "optional": true,
          "parameters": [
            {
              "name": "details",
              "type": "object",
              "properties": {
                "pixelSize": {
                  "type": "integer",
                  "description": "The font size in pixels."
                },
                "levelOfControl": {
                  "$ref": "LevelOfControl",
                  "description": "The level of control this extension has over the setting."
                }
              }
            }
          ]
        }
      },
      {
        "name": "setDefaultFixedFontSize",
        "description": "Sets the default size for fixed width fonts.",
        "parameters": [
          {
            "name": "details",
            "type": "object",
            "properties": {
              "pixelSize": {
                "type": "integer",
                "description": "The font size in pixels."
              }
            }
          }
        ],
        "returns_async": {
          "name": "callback",
          "optional": true,
          "parameters": []
        }
      },
      {
        "name": "clearMinimumFontSize",
        "description": "Clears the minimum font size set by this extension, if any.",
        "parameters": [
          {
            "name": "details",
            "type": "object",
            "optional": true,
            "description": "This parameter is currently unused.",
            "properties": {}
          }
        ],
        "returns_async": {
          "name": "callback",
          "optional": true,
          "parameters": []
        }
      },
      {
        "name": "getMinimumFontSize",
        "description": "Gets the minimum font size.",
        "parameters": [
          {
            "name": "details",
            "type": "object",
            "optional": true,
            "description": "This parameter is currently unused.",
            "properties": {}
          }
        ],
        "returns_async": {
          "name": "callback",
          "optional": true,
          "parameters": [
            {
              "name": "details",
              "type": "object",
              "properties": {
                "pixelSize": {
                  "type": "integer",
                  "description": "The font size in pixels."
                },
                "levelOfControl": {
                  "$ref": "LevelOfControl",
                  "description": "The level of control this extension has over the setting."
                }
              }
            }
          ]
        }
      },
      {
        "name": "setMinimumFontSize",
        "description": "Sets the minimum font size.",
        "parameters": [
          {
            "name": "details",
            "type": "object",
            "properties": {
              "pixelSize": {
                "type": "integer",
                "description": "The font size in pixels."
              }
            }
          }
        ],
        "returns_async": {
          "name": "callback",
          "optional": true,
          "parameters": []
        }
      }
    ],
    "events": [
      {
        "name": "onFontChanged",
        "description": "Fired when a font setting changes.",
        "parameters": [
          {
            "type": "object",
            "name": "details",
            "properties": {
              "fontId": {
                "type": "string",
                "description": "The font ID. See the description in <code>getFont</code>."
              },
              "script": {
                "$ref": "ScriptCode",
                "description": "The script code for which the font setting has changed.",
                "optional": true
              },
              "genericFamily": {
                "$ref": "GenericFamily",
                "description": "The generic font family for which the font setting has changed."
              },
              "levelOfControl": {
                "$ref": "LevelOfControl",
                "description": "The level of control this extension has over the setting."
              }
            }
          }
        ]
      },
      {
        "name": "onDefaultFontSizeChanged",
        "description": "Fired when the default font size setting changes.",
        "parameters": [
          {
            "type": "object",
            "name": "details",
            "properties": {
              "pixelSize": {
                "type": "integer",
                "description": "The font size in pixels."
              },
              "levelOfControl": {
                "$ref": "LevelOfControl",
                "description": "The level of control this extension has over the setting."
              }
            }
          }
        ]
      },
      {
        "name": "onDefaultFixedFontSizeChanged",
        "description": "Fired when the default fixed font size setting changes.",
        "parameters": [
          {
            "type": "object",
            "name": "details",
            "properties": {
              "pixelSize": {
                "type": "integer",
                "description": "The font size in pixels."
              },
              "levelOfControl": {
                "$ref": "LevelOfControl",
                "description": "The level of control this extension has over the setting."
              }
            }
          }
        ]
      },
      {
        "name": "onMinimumFontSizeChanged",
        "description": "Fired when the minimum font size setting changes.",
        "parameters": [
          {
            "type": "object",
            "name": "details",
            "properties": {
              "pixelSize": {
                "type": "integer",
                "description": "The font size in pixels."
              },
              "levelOfControl": {
                "$ref": "LevelOfControl",
                "description": "The level of control this extension has over the setting."
              }
            }
          }
        ]
      }
    ]
  }
]

2、font_settings.json生成的c++文件:

out\Debug\gen\chrome\common\extensions\api\font_settings.h

out\Debug\gen\chrome\common\extensions\api\font_settings.cc

3、font_settings api接口定义文件:

chrome\browser\extensions\api\font_settings\font_settings_api.h

chrome\browser\extensions\api\font_settings\font_settings_api.cc

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 {}

  // ExtensionFunction:
  ResponseAction Run() override;
};

// fontSettings.getFont API function.
class FontSettingsGetFontFunction : public ExtensionFunction {
 public:
  DECLARE_EXTENSION_FUNCTION("fontSettings.getFont", FONTSETTINGS_GETFONT)

 protected:
  ~FontSettingsGetFontFunction() override {}

  // ExtensionFunction:
  ResponseAction Run() override;
};

// fontSettings.setFont API function.
class FontSettingsSetFontFunction : public ExtensionFunction {
 public:
  DECLARE_EXTENSION_FUNCTION("fontSettings.setFont", FONTSETTINGS_SETFONT)

 protected:
  ~FontSettingsSetFontFunction() override {}

  // ExtensionFunction:
  ResponseAction Run() override;
};

// fontSettings.getFontList API function.
class FontSettingsGetFontListFunction : public ExtensionFunction {
 public:
  DECLARE_EXTENSION_FUNCTION("fontSettings.getFontList",
                             FONTSETTINGS_GETFONTLIST)

 protected:
  ~FontSettingsGetFontListFunction() override {}

  // 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 {}

  // 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 {}

  // 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 {}

  // 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 {}

  // ClearFontPrefExtensionFunction:
  const char* GetPrefName() override;
};

class FontSettingsGetDefaultFontSizeFunction
    : public GetFontPrefExtensionFunction {
 public:
  DECLARE_EXTENSION_FUNCTION("fontSettings.getDefaultFontSize",
                             FONTSETTINGS_GETDEFAULTFONTSIZE)

 protected:
  ~FontSettingsGetDefaultFontSizeFunction() override {}

  // GetFontPrefExtensionFunction:
  const char* GetPrefName() override;
  const char* GetKey() override;
};

class FontSettingsSetDefaultFontSizeFunction
    : public SetFontPrefExtensionFunction {
 public:
  DECLARE_EXTENSION_FUNCTION("fontSettings.setDefaultFontSize",
                             FONTSETTINGS_SETDEFAULTFONTSIZE)

 protected:
  ~FontSettingsSetDefaultFontSizeFunction() override {}

  // SetFontPrefExtensionFunction:
  const char* GetPrefName() override;
  const char* GetKey() override;
};

class FontSettingsClearDefaultFixedFontSizeFunction
    : public ClearFontPrefExtensionFunction {
 public:
  DECLARE_EXTENSION_FUNCTION("fontSettings.clearDefaultFixedFontSize",
                             FONTSETTINGS_CLEARDEFAULTFIXEDFONTSIZE)

 protected:
  ~FontSettingsClearDefaultFixedFontSizeFunction() override {}

  // ClearFontPrefExtensionFunction:
  const char* GetPrefName() override;
};

class FontSettingsGetDefaultFixedFontSizeFunction
    : public GetFontPrefExtensionFunction {
 public:
  DECLARE_EXTENSION_FUNCTION("fontSettings.getDefaultFixedFontSize",
                             FONTSETTINGS_GETDEFAULTFIXEDFONTSIZE)

 protected:
  ~FontSettingsGetDefaultFixedFontSizeFunction() override {}

  // GetFontPrefExtensionFunction:
  const char* GetPrefName() override;
  const char* GetKey() override;
};

class FontSettingsSetDefaultFixedFontSizeFunction
    : public SetFontPrefExtensionFunction {
 public:
  DECLARE_EXTENSION_FUNCTION("fontSettings.setDefaultFixedFontSize",
                             FONTSETTINGS_SETDEFAULTFIXEDFONTSIZE)

 protected:
  ~FontSettingsSetDefaultFixedFontSizeFunction() override {}

  // SetFontPrefExtensionFunction:
  const char* GetPrefName() override;
  const char* GetKey() override;
};

class FontSettingsClearMinimumFontSizeFunction
    : public ClearFontPrefExtensionFunction {
 public:
  DECLARE_EXTENSION_FUNCTION("fontSettings.clearMinimumFontSize",
                             FONTSETTINGS_CLEARMINIMUMFONTSIZE)

 protected:
  ~FontSettingsClearMinimumFontSizeFunction() override {}

  // ClearFontPrefExtensionFunction:
  const char* GetPrefName() override;
};

class FontSettingsGetMinimumFontSizeFunction
    : public GetFontPrefExtensionFunction {
 public:
  DECLARE_EXTENSION_FUNCTION("fontSettings.getMinimumFontSize",
                             FONTSETTINGS_GETMINIMUMFONTSIZE)

 protected:
  ~FontSettingsGetMinimumFontSizeFunction() override {}

  // GetFontPrefExtensionFunction:
  const char* GetPrefName() override;
  const char* GetKey() override;
};

class FontSettingsSetMinimumFontSizeFunction
    : public SetFontPrefExtensionFunction {
 public:
  DECLARE_EXTENSION_FUNCTION("fontSettings.setMinimumFontSize",
                             FONTSETTINGS_SETMINIMUMFONTSIZE)

 protected:
  ~FontSettingsSetMinimumFontSizeFunction() override {}

  // SetFontPrefExtensionFunction:
  const char* GetPrefName() override;
  const char* GetKey() override;
};

}  // namespace extensions

三、总结:


http://www.kler.cn/a/373324.html

相关文章:

  • 一年期免费HTTPS证书:网络安全新选择
  • (C#面向初学者的 .NET 的生成 AI) 第 2 部分-什么是 AI 和 ML?
  • 如何利用网站进行仿牌运营?
  • Go使用SIMD指令——以string转为整数为例
  • HTTP相关返回值异常原因分析,第二部分
  • 关于深度学习方向学习的一些建议
  • django中entity.save(using=)的使用
  • 不再输入单号查快递,批量查快递单号信息的新方法,智能排序快递时效并查找时效相同的单号,一站式物流查询解决方案
  • 微服务篇SpringCloud
  • Mysql报错注入之floor报错详解
  • AI学习指南自然语言处理篇-Transformer模型简介
  • 美团2025校招 广告算法工程师 面经
  • Linux基础 -- 文件同步之 rsync 命令的使用
  • golang 高阶函数
  • 各国家的MCC
  • Tomcat异常日志中文乱码怎么解决
  • ELK之路第四步——整合!打通任督二脉
  • 9种 Vuejs 常用事件修饰符与使用指南
  • 《神经网络助力战场车辆及部件损毁识别与评估》
  • 【Moonlight】Sunshine 安装
  • QT——TCP网络调试助手
  • 嵌入式C/C++语言相关知识——C++八股
  • 一个基于.NET8+WPF开源的简单的工作流系统
  • 多重嵌套宏定义带来的错误fatal error: parser recursion limit reached,program too complex
  • 如何配置,npm install 是从本地安装依赖
  • 封装红黑树实现mymap和myset