Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1937)

Unified Diff: content/renderer/pepper/pepper_truetype_font_linux.cc

Issue 337203003: Move PPB_TrueTypeFont_Dev host from renderer to browser. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Check fd / HANDLE / FontRef for validity. Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/renderer/pepper/pepper_truetype_font_linux.cc
diff --git a/content/renderer/pepper/pepper_truetype_font_linux.cc b/content/renderer/pepper/pepper_truetype_font_linux.cc
deleted file mode 100644
index c54a5148a1a7a32b0fad447d38620702ac8f0dc7..0000000000000000000000000000000000000000
--- a/content/renderer/pepper/pepper_truetype_font_linux.cc
+++ /dev/null
@@ -1,159 +0,0 @@
-// Copyright (c) 2013 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.
-
-#include "base/compiler_specific.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/numerics/safe_conversions.h"
-#include "base/sys_byteorder.h"
-#include "content/public/common/child_process_sandbox_support_linux.h"
-#include "content/renderer/pepper/pepper_truetype_font.h"
-#include "ppapi/c/dev/ppb_truetype_font_dev.h"
-#include "ppapi/c/pp_errors.h"
-#include "ppapi/c/trusted/ppb_browser_font_trusted.h"
-
-namespace content {
-
-namespace {
-
-class PepperTrueTypeFontLinux : public PepperTrueTypeFont {
- public:
- explicit PepperTrueTypeFontLinux(
- const ppapi::proxy::SerializedTrueTypeFontDesc& desc);
- virtual ~PepperTrueTypeFontLinux() OVERRIDE;
-
- // PepperTrueTypeFont overrides.
- virtual bool IsValid() OVERRIDE;
- virtual int32_t Describe(ppapi::proxy::SerializedTrueTypeFontDesc* desc)
- OVERRIDE;
- virtual int32_t GetTableTags(std::vector<uint32_t>* tags) OVERRIDE;
- virtual int32_t GetTable(uint32_t table_tag,
- int32_t offset,
- int32_t max_data_length,
- std::string* data) OVERRIDE;
-
- private:
- // Save creation parameters here and use these to implement Describe.
- // TODO(bbudge) Modify content API to return results of font matching and
- // fallback.
- ppapi::proxy::SerializedTrueTypeFontDesc desc_;
- int fd_;
-
- DISALLOW_COPY_AND_ASSIGN(PepperTrueTypeFontLinux);
-};
-
-PepperTrueTypeFontLinux::PepperTrueTypeFontLinux(
- const ppapi::proxy::SerializedTrueTypeFontDesc& desc)
- : desc_(desc) {
- // If no face is provided, convert family to the platform defaults. These
- // names should be mapped by FontConfig to an appropriate default font.
- if (desc_.family.empty()) {
- switch (desc_.generic_family) {
- case PP_TRUETYPEFONTFAMILY_SERIF:
- desc_.family = "serif";
- break;
- case PP_TRUETYPEFONTFAMILY_SANSSERIF:
- desc_.family = "sans-serif";
- break;
- case PP_TRUETYPEFONTFAMILY_CURSIVE:
- desc_.family = "cursive";
- break;
- case PP_TRUETYPEFONTFAMILY_FANTASY:
- desc_.family = "fantasy";
- break;
- case PP_TRUETYPEFONTFAMILY_MONOSPACE:
- desc_.family = "monospace";
- break;
- }
- }
-
- fd_ = MatchFontWithFallback(desc_.family.c_str(),
- desc_.weight >= PP_TRUETYPEFONTWEIGHT_BOLD,
- desc_.style & PP_TRUETYPEFONTSTYLE_ITALIC,
- desc_.charset,
- PP_BROWSERFONT_TRUSTED_FAMILY_DEFAULT);
-}
-
-PepperTrueTypeFontLinux::~PepperTrueTypeFontLinux() {}
-
-bool PepperTrueTypeFontLinux::IsValid() { return fd_ != -1; }
-
-int32_t PepperTrueTypeFontLinux::Describe(
- ppapi::proxy::SerializedTrueTypeFontDesc* desc) {
- *desc = desc_;
- return PP_OK;
-}
-
-int32_t PepperTrueTypeFontLinux::GetTableTags(std::vector<uint32_t>* tags) {
- // Get the 2 byte numTables field at an offset of 4 in the font.
- uint8_t num_tables_buf[2];
- size_t output_length = sizeof(num_tables_buf);
- if (!GetFontTable(fd_,
- 0 /* tag */,
- 4 /* offset */,
- reinterpret_cast<uint8_t*>(&num_tables_buf),
- &output_length))
- return PP_ERROR_FAILED;
- DCHECK(output_length == sizeof(num_tables_buf));
- // Font data is stored in big-endian order.
- uint16_t num_tables = (num_tables_buf[0] << 8) | num_tables_buf[1];
-
- // The font has a header, followed by n table entries in its directory.
- static const size_t kFontHeaderSize = 12;
- static const size_t kTableEntrySize = 16;
- output_length = num_tables * kTableEntrySize;
- scoped_ptr<uint8_t[]> table_entries(new uint8_t[output_length]);
- // Get the table directory entries, which follow the font header.
- if (!GetFontTable(fd_,
- 0 /* tag */,
- kFontHeaderSize /* offset */,
- table_entries.get(),
- &output_length))
- return PP_ERROR_FAILED;
- DCHECK(output_length == num_tables * kTableEntrySize);
-
- tags->resize(num_tables);
- for (uint16_t i = 0; i < num_tables; i++) {
- uint8_t* entry = table_entries.get() + i * kTableEntrySize;
- uint32_t tag = static_cast<uint32_t>(entry[0]) << 24 |
- static_cast<uint32_t>(entry[1]) << 16 |
- static_cast<uint32_t>(entry[2]) << 8 |
- static_cast<uint32_t>(entry[3]);
- (*tags)[i] = tag;
- }
-
- return num_tables;
-}
-
-int32_t PepperTrueTypeFontLinux::GetTable(uint32_t table_tag,
- int32_t offset,
- int32_t max_data_length,
- std::string* data) {
- // Get the size of the font data first.
- size_t table_size = 0;
- // Tags are byte swapped on Linux.
- table_tag = base::ByteSwap(table_tag);
- if (!GetFontTable(fd_, table_tag, offset, NULL, &table_size))
- return PP_ERROR_FAILED;
- // Only retrieve as much as the caller requested.
- table_size = std::min(table_size, static_cast<size_t>(max_data_length));
- data->resize(table_size);
- if (!GetFontTable(fd_,
- table_tag,
- offset,
- reinterpret_cast<uint8_t*>(&(*data)[0]),
- &table_size))
- return PP_ERROR_FAILED;
-
- return base::checked_cast<int32_t>(table_size);
-}
-
-} // namespace
-
-// static
-PepperTrueTypeFont* PepperTrueTypeFont::Create(
- const ppapi::proxy::SerializedTrueTypeFontDesc& desc) {
- return new PepperTrueTypeFontLinux(desc);
-}
-
-} // namespace content
« no previous file with comments | « content/renderer/pepper/pepper_truetype_font_host.cc ('k') | content/renderer/pepper/pepper_truetype_font_mac.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698