| Index: webkit/glue/plugins/pepper_private.cc
|
| ===================================================================
|
| --- webkit/glue/plugins/pepper_private.cc (revision 53945)
|
| +++ webkit/glue/plugins/pepper_private.cc (working copy)
|
| @@ -9,11 +9,30 @@
|
| #include "base/utf_string_conversions.h"
|
| #include "grit/webkit_strings.h"
|
| #include "webkit/glue/webkit_glue.h"
|
| +#include "webkit/glue/plugins/pepper_plugin_module.h"
|
| #include "webkit/glue/plugins/pepper_var.h"
|
| #include "webkit/glue/plugins/ppb_private.h"
|
|
|
| namespace pepper {
|
|
|
| +#if defined(OS_LINUX)
|
| +class PrivateFontFile : public Resource {
|
| + public:
|
| + PrivateFontFile(PluginModule* module, int fd) : Resource(module), fd_(fd) {}
|
| + virtual ~PrivateFontFile() {}
|
| +
|
| + // Resource overrides.
|
| + PrivateFontFile* AsPrivateFontFile() { return this; }
|
| +
|
| + bool GetFontTable(uint32_t table,
|
| + void* output,
|
| + uint32_t* output_length);
|
| +
|
| + private:
|
| + int fd_;
|
| +};
|
| +#endif
|
| +
|
| namespace {
|
|
|
| PP_Var GetLocalizedString(PP_ResourceString string_id) {
|
| @@ -24,8 +43,50 @@
|
| return StringToPPVar(rv);
|
| }
|
|
|
| +PP_Resource GetFontFileWithFallback(
|
| + PP_Module module_id,
|
| + const PP_PrivateFontFileDescription* description) {
|
| +#if defined(OS_LINUX)
|
| + PluginModule* module = PluginModule::FromPPModule(module_id);
|
| + if (!module)
|
| + return NULL;
|
| +
|
| + int fd = webkit_glue::MatchFontWithFallback(description->face,
|
| + description->weight >= 700,
|
| + description->italic,
|
| + description->charset);
|
| + if (fd == -1)
|
| + return NULL;
|
| +
|
| + scoped_refptr<PrivateFontFile> font(new PrivateFontFile(module, fd));
|
| +
|
| + return font->GetReference();
|
| +#else
|
| + // For trusted pepper plugins, this is only needed in Linux since font loading
|
| + // on Windows and Mac works through the renderer sandbox.
|
| + return false;
|
| +#endif
|
| +}
|
| +
|
| +bool GetFontTableForPrivateFontFile(PP_Resource font_file,
|
| + uint32_t table,
|
| + void* output,
|
| + uint32_t* output_length) {
|
| +#if defined(OS_LINUX)
|
| + scoped_refptr<PrivateFontFile> font(
|
| + Resource::GetAs<PrivateFontFile>(font_file));
|
| + if (!font.get())
|
| + return false;
|
| + return font->GetFontTable(table, output, output_length);
|
| +#else
|
| + return false;
|
| +#endif
|
| +}
|
| +
|
| const PPB_Private ppb_private = {
|
| &GetLocalizedString,
|
| + &GetFontFileWithFallback,
|
| + &GetFontTableForPrivateFontFile,
|
| };
|
|
|
| } // namespace
|
| @@ -35,4 +96,16 @@
|
| return &ppb_private;
|
| }
|
|
|
| +#if defined(OS_LINUX)
|
| +bool PrivateFontFile::GetFontTable(uint32_t table,
|
| + void* output,
|
| + uint32_t* output_length) {
|
| + size_t temp_size = static_cast<size_t>(*output_length);
|
| + bool rv = webkit_glue::GetFontTable(
|
| + fd_, table, static_cast<uint8_t*>(output), &temp_size);
|
| + *output_length = static_cast<uint32_t>(temp_size);
|
| + return rv;
|
| +}
|
| +#endif
|
| +
|
| } // namespace pepper
|
|
|