summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbbudge@chromium.org <bbudge@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-16 09:57:51 +0000
committerbbudge@chromium.org <bbudge@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-16 09:57:51 +0000
commit725056b71817b5b35c49bad39ddc44d7156c4086 (patch)
tree7f83956f8bb9a224c913d9a22b71078a595d32ab
parentaffb072ce9b81d57d8b62c281eedeab7ab14a29c (diff)
downloadchromium_src-725056b71817b5b35c49bad39ddc44d7156c4086.zip
chromium_src-725056b71817b5b35c49bad39ddc44d7156c4086.tar.gz
chromium_src-725056b71817b5b35c49bad39ddc44d7156c4086.tar.bz2
Add Pepper TrueType font API plumbing.
Adds Font resource and host, font singleton resource and host. Adds PPAPI IPC messages to communicate with renderer and browser. Adds Browser process font listing helper class abstraction and impls for Windows, Mac, and Linux. Font family enumeration is done in the browser process and is a rework of the trusted BrowserFont API. Adds Renderer process font helper class abstraction and impl stubs. Font operations are done in the renderer process because of Linux sandbox restrictions. BUG=79375 Review URL: https://chromiumcodereview.appspot.com/12600019 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@188576 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--content/browser/renderer_host/pepper/content_browser_pepper_host_factory.cc5
-rw-r--r--content/browser/renderer_host/pepper/pepper_truetype_font_list.h21
-rw-r--r--content/browser/renderer_host/pepper/pepper_truetype_font_list_android.cc13
-rw-r--r--content/browser/renderer_host/pepper/pepper_truetype_font_list_host.cc99
-rw-r--r--content/browser/renderer_host/pepper/pepper_truetype_font_list_host.h28
-rw-r--r--content/browser/renderer_host/pepper/pepper_truetype_font_list_linux.cc25
-rw-r--r--content/browser/renderer_host/pepper/pepper_truetype_font_list_mac.mm23
-rw-r--r--content/browser/renderer_host/pepper/pepper_truetype_font_list_win.cc44
-rw-r--r--content/content_browser.gypi8
-rw-r--r--content/content_renderer.gypi7
-rw-r--r--content/renderer/pepper/content_renderer_pepper_host_factory.cc19
-rw-r--r--content/renderer/pepper/pepper_in_process_resource_creation.cc7
-rw-r--r--content/renderer/pepper/pepper_in_process_resource_creation.h3
-rw-r--r--content/renderer/pepper/pepper_truetype_font.h50
-rw-r--r--content/renderer/pepper/pepper_truetype_font_android.cc16
-rw-r--r--content/renderer/pepper/pepper_truetype_font_host.cc96
-rw-r--r--content/renderer/pepper/pepper_truetype_font_host.h50
-rw-r--r--content/renderer/pepper/pepper_truetype_font_linux.cc16
-rw-r--r--content/renderer/pepper/pepper_truetype_font_mac.mm16
-rw-r--r--content/renderer/pepper/pepper_truetype_font_win.cc16
-rw-r--r--ppapi/ppapi_proxy.gypi4
-rw-r--r--ppapi/ppapi_shared.gypi3
-rw-r--r--ppapi/proxy/interface_list.cc1
-rw-r--r--ppapi/proxy/ppapi_messages.h26
-rw-r--r--ppapi/proxy/ppapi_param_traits.cc37
-rw-r--r--ppapi/proxy/ppapi_param_traits.h10
-rw-r--r--ppapi/proxy/ppb_instance_proxy.cc4
-rw-r--r--ppapi/proxy/resource_creation_proxy.cc9
-rw-r--r--ppapi/proxy/resource_creation_proxy.h3
-rw-r--r--ppapi/proxy/serialized_structs.cc34
-rw-r--r--ppapi/proxy/serialized_structs.h25
-rw-r--r--ppapi/proxy/truetype_font_resource.cc130
-rw-r--r--ppapi/proxy/truetype_font_resource.h73
-rw-r--r--ppapi/proxy/truetype_font_singleton_resource.cc68
-rw-r--r--ppapi/proxy/truetype_font_singleton_resource.h55
-rw-r--r--ppapi/shared_impl/resource.h2
-rw-r--r--ppapi/shared_impl/singleton_resource_id.h1
-rw-r--r--ppapi/tests/all_c_includes.h1
-rw-r--r--ppapi/thunk/interfaces_ppb_public_dev.h2
-rw-r--r--ppapi/thunk/ppb_truetype_font_api.h36
-rw-r--r--ppapi/thunk/ppb_truetype_font_singleton_api.h34
-rw-r--r--ppapi/thunk/ppb_truetype_font_thunk.cc94
-rw-r--r--ppapi/thunk/resource_creation_api.h4
-rw-r--r--webkit/plugins/ppapi/plugin_module.cc1
-rw-r--r--webkit/plugins/ppapi/ppapi_plugin_instance.cc1
45 files changed, 1220 insertions, 0 deletions
diff --git a/content/browser/renderer_host/pepper/content_browser_pepper_host_factory.cc b/content/browser/renderer_host/pepper/content_browser_pepper_host_factory.cc
index 99e40a1..4f586ca 100644
--- a/content/browser/renderer_host/pepper/content_browser_pepper_host_factory.cc
+++ b/content/browser/renderer_host/pepper/content_browser_pepper_host_factory.cc
@@ -11,6 +11,7 @@
#include "content/browser/renderer_host/pepper/pepper_host_resolver_private_message_filter.h"
#include "content/browser/renderer_host/pepper/pepper_print_settings_manager.h"
#include "content/browser/renderer_host/pepper/pepper_printing_host.h"
+#include "content/browser/renderer_host/pepper/pepper_truetype_font_list_host.h"
#include "content/browser/renderer_host/pepper/pepper_udp_socket_private_message_filter.h"
#include "ppapi/host/message_filter_host.h"
#include "ppapi/host/ppapi_host.h"
@@ -60,6 +61,10 @@ scoped_ptr<ResourceHost> ContentBrowserPepperHostFactory::CreateResourceHost(
host_->GetPpapiHost(), instance,
params.pp_resource(), manager.Pass()));
}
+ case PpapiHostMsg_TrueTypeFontSingleton_Create::ID: {
+ return scoped_ptr<ResourceHost>(new PepperTrueTypeFontListHost(
+ host_, instance, params.pp_resource()));
+ }
}
}
diff --git a/content/browser/renderer_host/pepper/pepper_truetype_font_list.h b/content/browser/renderer_host/pepper/pepper_truetype_font_list.h
new file mode 100644
index 0000000..c0ce782
--- /dev/null
+++ b/content/browser/renderer_host/pepper/pepper_truetype_font_list.h
@@ -0,0 +1,21 @@
+// 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.
+
+#ifndef CONTENT_BROWSER_RENDERER_HOST_PEPPER_PEPPER_TRUETYPE_FONT_LIST_H_
+#define CONTENT_BROWSER_RENDERER_HOST_PEPPER_PEPPER_TRUETYPE_FONT_LIST_H_
+
+#include <string>
+#include <vector>
+
+namespace content {
+
+// Adds font family names on the host platform to the vector of strings.
+//
+// This function is potentially slow (the system may do a bunch of I/O) so be
+// sure not to call this on a time-critical thread like the UI or I/O threads.
+void GetFontFamilies_SlowBlocking(std::vector<std::string>* font_families);
+
+} // namespace content
+
+#endif // CONTENT_BROWSER_RENDERER_HOST_PEPPER_PEPPER_TRUETYPE_FONT_LIST_H_
diff --git a/content/browser/renderer_host/pepper/pepper_truetype_font_list_android.cc b/content/browser/renderer_host/pepper/pepper_truetype_font_list_android.cc
new file mode 100644
index 0000000..9e07fda
--- /dev/null
+++ b/content/browser/renderer_host/pepper/pepper_truetype_font_list_android.cc
@@ -0,0 +1,13 @@
+// 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 "content/browser/renderer_host/pepper/pepper_truetype_font_list.h"
+
+namespace content {
+
+void GetFontFamilies_SlowBlocking(std::vector<std::string>* font_families) {
+ NOTIMPLEMENTED(); // Font API isn't implemented on Android.
+}
+
+} // namespace content
diff --git a/content/browser/renderer_host/pepper/pepper_truetype_font_list_host.cc b/content/browser/renderer_host/pepper/pepper_truetype_font_list_host.cc
new file mode 100644
index 0000000..74e8653
--- /dev/null
+++ b/content/browser/renderer_host/pepper/pepper_truetype_font_list_host.cc
@@ -0,0 +1,99 @@
+// 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 "content/browser/renderer_host/pepper/pepper_truetype_font_list_host.h"
+
+#include <algorithm>
+
+#include "base/safe_numerics.h"
+#include "base/threading/sequenced_worker_pool.h"
+#include "content/browser/renderer_host/pepper/pepper_truetype_font_list.h"
+#include "content/public/browser/browser_ppapi_host.h"
+#include "content/public/browser/browser_thread.h"
+#include "ppapi/host/dispatch_host_message.h"
+#include "ppapi/host/host_message_context.h"
+#include "ppapi/host/resource_message_filter.h"
+#include "ppapi/proxy/ppapi_messages.h"
+
+namespace content {
+
+namespace {
+
+// Handles the font list request on the blocking pool.
+class FontMessageFilter : public ppapi::host::ResourceMessageFilter {
+ public:
+ FontMessageFilter();
+
+ // ppapi::host::ResourceMessageFilter implementation.
+ virtual scoped_refptr<base::TaskRunner> OverrideTaskRunnerForMessage(
+ const IPC::Message& msg) OVERRIDE;
+ virtual int32_t OnResourceMessageReceived(
+ const IPC::Message& msg,
+ ppapi::host::HostMessageContext* context) OVERRIDE;
+
+ private:
+ virtual ~FontMessageFilter();
+
+ // Message handler.
+ int32_t OnHostMsgGetFontFamilies(ppapi::host::HostMessageContext* context);
+
+ DISALLOW_COPY_AND_ASSIGN(FontMessageFilter);
+};
+
+FontMessageFilter::FontMessageFilter() {
+}
+
+FontMessageFilter::~FontMessageFilter() {
+}
+
+scoped_refptr<base::TaskRunner> FontMessageFilter::OverrideTaskRunnerForMessage(
+ const IPC::Message& msg) {
+ // Use the blocking pool to get the font list (currently the only message
+ // so we can always just return it).
+ return scoped_refptr<base::TaskRunner>(BrowserThread::GetBlockingPool());
+}
+
+int32_t FontMessageFilter::OnResourceMessageReceived(
+ const IPC::Message& msg,
+ ppapi::host::HostMessageContext* context) {
+ IPC_BEGIN_MESSAGE_MAP(FontMessageFilter, msg)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(
+ PpapiHostMsg_TrueTypeFontSingleton_GetFontFamilies,
+ OnHostMsgGetFontFamilies)
+ IPC_END_MESSAGE_MAP()
+ return PP_ERROR_FAILED;
+}
+
+int32_t FontMessageFilter::OnHostMsgGetFontFamilies(
+ ppapi::host::HostMessageContext* context) {
+ // OK to use "slow blocking" version since we're on the blocking pool.
+ std::vector<std::string> font_families;
+ GetFontFamilies_SlowBlocking(&font_families);
+ // Sort the names in case the host platform returns them out of order.
+ std::sort(font_families.begin(), font_families.end());
+
+ int32_t result = base::checked_numeric_cast<int32_t>(font_families.size());
+ ppapi::host::ReplyMessageContext reply_context =
+ context->MakeReplyMessageContext();
+ reply_context.params.set_result(result);
+ context->reply_msg =
+ PpapiPluginMsg_TrueTypeFontSingleton_GetFontFamiliesReply(font_families);
+ return result;
+}
+
+} // namespace
+
+PepperTrueTypeFontListHost::PepperTrueTypeFontListHost(
+ BrowserPpapiHost* host,
+ PP_Instance instance,
+ PP_Resource resource)
+ : ResourceHost(host->GetPpapiHost(), instance, resource) {
+ AddFilter(scoped_refptr<ppapi::host::ResourceMessageFilter>(
+ new FontMessageFilter()));
+}
+
+PepperTrueTypeFontListHost::~PepperTrueTypeFontListHost() {
+}
+
+} // namespace content
diff --git a/content/browser/renderer_host/pepper/pepper_truetype_font_list_host.h b/content/browser/renderer_host/pepper/pepper_truetype_font_list_host.h
new file mode 100644
index 0000000..c67553b
--- /dev/null
+++ b/content/browser/renderer_host/pepper/pepper_truetype_font_list_host.h
@@ -0,0 +1,28 @@
+// 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.
+
+#ifndef CONTENT_BROWSER_RENDERER_HOST_PEPPER_PEPPER_TRUETYPE_FONT_LIST_HOST_H_
+#define CONTENT_BROWSER_RENDERER_HOST_PEPPER_PEPPER_TRUETYPE_FONT_LIST_HOST_H_
+
+#include "base/basictypes.h"
+#include "ppapi/host/resource_host.h"
+
+namespace content {
+
+class BrowserPpapiHost;
+
+class PepperTrueTypeFontListHost : public ppapi::host::ResourceHost {
+ public:
+ PepperTrueTypeFontListHost(BrowserPpapiHost* host,
+ PP_Instance instance,
+ PP_Resource resource);
+ virtual ~PepperTrueTypeFontListHost();
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(PepperTrueTypeFontListHost);
+};
+
+} // namespace content
+
+#endif // CONTENT_BROWSER_RENDERER_HOST_PEPPER_PEPPER_TRUETYPE_FONT_LIST_HOST_H_
diff --git a/content/browser/renderer_host/pepper/pepper_truetype_font_list_linux.cc b/content/browser/renderer_host/pepper/pepper_truetype_font_list_linux.cc
new file mode 100644
index 0000000..661266d
--- /dev/null
+++ b/content/browser/renderer_host/pepper/pepper_truetype_font_list_linux.cc
@@ -0,0 +1,25 @@
+// 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 "content/browser/renderer_host/pepper/pepper_truetype_font_list.h"
+
+#include <pango/pango.h>
+#include <pango/pangocairo.h>
+
+#include <string>
+
+namespace content {
+
+void GetFontFamilies_SlowBlocking(std::vector<std::string>* font_families) {
+ PangoFontMap* font_map = ::pango_cairo_font_map_get_default();
+ PangoFontFamily** families = NULL;
+ int num_families = 0;
+ ::pango_font_map_list_families(font_map, &families, &num_families);
+
+ for (int i = 0; i < num_families; i++)
+ font_families->push_back(::pango_font_family_get_name(families[i]));
+ g_free(families);
+}
+
+} // namespace content
diff --git a/content/browser/renderer_host/pepper/pepper_truetype_font_list_mac.mm b/content/browser/renderer_host/pepper/pepper_truetype_font_list_mac.mm
new file mode 100644
index 0000000..9b79e66
--- /dev/null
+++ b/content/browser/renderer_host/pepper/pepper_truetype_font_list_mac.mm
@@ -0,0 +1,23 @@
+// 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 "content/browser/renderer_host/pepper/pepper_truetype_font_list.h"
+
+#import <Cocoa/Cocoa.h>
+
+#include "base/mac/scoped_nsautorelease_pool.h"
+#include "base/sys_string_conversions.h"
+
+namespace content {
+
+void GetFontFamilies_SlowBlocking(std::vector<std::string>* font_families) {
+ base::mac::ScopedNSAutoreleasePool autorelease_pool;
+ NSFontManager* fontManager = [[[NSFontManager alloc] init] autorelease];
+ NSArray* fonts = [fontManager availableFontFamilies];
+ font_families->reserve([fonts count]);
+ for (NSString* family_name in fonts)
+ font_families->push_back(base::SysNSStringToUTF8(family_name));
+}
+
+} // namespace content
diff --git a/content/browser/renderer_host/pepper/pepper_truetype_font_list_win.cc b/content/browser/renderer_host/pepper/pepper_truetype_font_list_win.cc
new file mode 100644
index 0000000..6a3ee0f
--- /dev/null
+++ b/content/browser/renderer_host/pepper/pepper_truetype_font_list_win.cc
@@ -0,0 +1,44 @@
+// 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 "content/browser/renderer_host/pepper/pepper_truetype_font_list.h"
+
+#include <windows.h>
+
+#include "base/utf_string_conversions.h"
+#include "base/win/scoped_hdc.h"
+
+namespace content {
+
+namespace {
+
+static int CALLBACK EnumFontFamExProc(ENUMLOGFONTEXW* logical_font,
+ NEWTEXTMETRICEXW* physical_font,
+ DWORD font_type,
+ LPARAM lparam) {
+ std::vector<std::string>* font_families =
+ reinterpret_cast<std::vector<std::string>*>(lparam);
+ if (font_families) {
+ const LOGFONTW& lf = logical_font->elfLogFont;
+ if (lf.lfFaceName[0] && lf.lfFaceName[0] != '@' &&
+ lf.lfOutPrecision == OUT_STROKE_PRECIS) { // Outline fonts only.
+ std::string face_name(UTF16ToUTF8(lf.lfFaceName));
+ font_families->push_back(face_name);
+ }
+ }
+ return 1;
+}
+
+} // namespace
+
+void GetFontFamilies_SlowBlocking(std::vector<std::string>* font_families) {
+ LOGFONTW logfont;
+ memset(&logfont, 0, sizeof(logfont));
+ logfont.lfCharSet = DEFAULT_CHARSET;
+ base::win::ScopedCreateDC hdc(::GetDC(NULL));
+ ::EnumFontFamiliesExW(hdc, &logfont, (FONTENUMPROCW)&EnumFontFamExProc,
+ (LPARAM)font_families, 0);
+}
+
+} // namespace content
diff --git a/content/content_browser.gypi b/content/content_browser.gypi
index b82d96e..c4cc3d8 100644
--- a/content/content_browser.gypi
+++ b/content/content_browser.gypi
@@ -752,6 +752,13 @@
'browser/renderer_host/pepper/pepper_tcp_server_socket.h',
'browser/renderer_host/pepper/pepper_tcp_socket.cc',
'browser/renderer_host/pepper/pepper_tcp_socket.h',
+ 'browser/renderer_host/pepper/pepper_truetype_font_list_android.cc',
+ 'browser/renderer_host/pepper/pepper_truetype_font_list_host.cc',
+ 'browser/renderer_host/pepper/pepper_truetype_font_list_host.h',
+ 'browser/renderer_host/pepper/pepper_truetype_font_list_linux.cc',
+ 'browser/renderer_host/pepper/pepper_truetype_font_list_mac.mm',
+ 'browser/renderer_host/pepper/pepper_truetype_font_list_win.cc',
+ 'browser/renderer_host/pepper/pepper_truetype_font_list.h',
'browser/renderer_host/pepper/pepper_udp_socket_private_message_filter.cc',
'browser/renderer_host/pepper/pepper_udp_socket_private_message_filter.h',
'browser/renderer_host/popup_menu_helper_mac.h',
@@ -1124,6 +1131,7 @@
['use_x11==1', {
'dependencies': [
'../build/linux/system.gyp:x11',
+ '../build/linux/system.gyp:pangocairo',
],
}],
['OS=="android"', {
diff --git a/content/content_renderer.gypi b/content/content_renderer.gypi
index 5803e3a..67456f6 100644
--- a/content/content_renderer.gypi
+++ b/content/content_renderer.gypi
@@ -208,6 +208,13 @@
'renderer/pepper/pepper_plugin_delegate_impl.h',
'renderer/pepper/pepper_proxy_channel_delegate_impl.cc',
'renderer/pepper/pepper_proxy_channel_delegate_impl.h',
+ 'renderer/pepper/pepper_truetype_font.h',
+ 'renderer/pepper/pepper_truetype_font_android.cc',
+ 'renderer/pepper/pepper_truetype_font_host.cc',
+ 'renderer/pepper/pepper_truetype_font_host.h',
+ 'renderer/pepper/pepper_truetype_font_linux.cc',
+ 'renderer/pepper/pepper_truetype_font_mac.mm',
+ 'renderer/pepper/pepper_truetype_font_win.cc',
'renderer/pepper/pepper_video_capture_host.cc',
'renderer/pepper/pepper_video_capture_host.h',
'renderer/pepper/pepper_websocket_host.cc',
diff --git a/content/renderer/pepper/content_renderer_pepper_host_factory.cc b/content/renderer/pepper/content_renderer_pepper_host_factory.cc
index bb42068..0e7f380 100644
--- a/content/renderer/pepper/content_renderer_pepper_host_factory.cc
+++ b/content/renderer/pepper/content_renderer_pepper_host_factory.cc
@@ -5,18 +5,22 @@
#include "content/renderer/pepper/content_renderer_pepper_host_factory.h"
#include "base/logging.h"
+#include "base/string_util.h"
#include "content/renderer/pepper/pepper_audio_input_host.h"
#include "content/renderer/pepper/pepper_directory_reader_host.h"
#include "content/renderer/pepper/pepper_file_chooser_host.h"
#include "content/renderer/pepper/pepper_file_io_host.h"
#include "content/renderer/pepper/pepper_graphics_2d_host.h"
+#include "content/renderer/pepper/pepper_truetype_font_host.h"
#include "content/renderer/pepper/pepper_video_capture_host.h"
#include "content/renderer/pepper/pepper_websocket_host.h"
#include "content/renderer/pepper/renderer_ppapi_host_impl.h"
#include "ppapi/host/resource_host.h"
#include "ppapi/proxy/ppapi_messages.h"
+#include "ppapi/proxy/serialized_structs.h"
using ppapi::host::ResourceHost;
+using ppapi::proxy::SerializedTrueTypeFontDesc;
namespace content {
@@ -72,6 +76,21 @@ scoped_ptr<ResourceHost> ContentRendererPepperHostFactory::CreateResourceHost(
case PpapiHostMsg_FileChooser_Create::ID:
return scoped_ptr<ResourceHost>(new PepperFileChooserHost(
host_, instance, params.pp_resource()));
+ case PpapiHostMsg_TrueTypeFont_Create::ID: {
+ PpapiHostMsg_TrueTypeFont_Create::Schema::Param msg_params;
+ if (!PpapiHostMsg_TrueTypeFont_Create::Read(&message, &msg_params)) {
+ NOTREACHED();
+ return scoped_ptr<ResourceHost>();
+ }
+ // Check that the family name is valid UTF-8 before passing it to the
+ // host OS.
+ const SerializedTrueTypeFontDesc& desc = msg_params.a;
+ if (IsStringUTF8(desc.family)) {
+ return scoped_ptr<ResourceHost>(new PepperTrueTypeFontHost(
+ host_, instance, params.pp_resource(), desc));
+ }
+ break; // Drop through and return null host.
+ }
case PpapiHostMsg_VideoCapture_Create::ID: {
PepperVideoCaptureHost* host = new PepperVideoCaptureHost(
host_, instance, params.pp_resource());
diff --git a/content/renderer/pepper/pepper_in_process_resource_creation.cc b/content/renderer/pepper/pepper_in_process_resource_creation.cc
index e6534c9..d9de4de 100644
--- a/content/renderer/pepper/pepper_in_process_resource_creation.cc
+++ b/content/renderer/pepper/pepper_in_process_resource_creation.cc
@@ -93,6 +93,13 @@ PP_Resource PepperInProcessResourceCreation::CreatePrinting(
instance))->GetReference();
}
+PP_Resource PepperInProcessResourceCreation::CreateTrueTypeFont(
+ PP_Instance instance,
+ const PP_TrueTypeFontDesc_Dev& desc) {
+ NOTIMPLEMENTED();
+ return 0;
+}
+
PP_Resource PepperInProcessResourceCreation::CreateURLRequestInfo(
PP_Instance instance,
const ::ppapi::URLRequestInfoData& data) {
diff --git a/content/renderer/pepper/pepper_in_process_resource_creation.h b/content/renderer/pepper/pepper_in_process_resource_creation.h
index 93df2af..4f0d5fa 100644
--- a/content/renderer/pepper/pepper_in_process_resource_creation.h
+++ b/content/renderer/pepper/pepper_in_process_resource_creation.h
@@ -56,6 +56,9 @@ class PepperInProcessResourceCreation
PP_Bool is_always_opaque) OVERRIDE;
virtual PP_Resource CreatePrinting(
PP_Instance instance) OVERRIDE;
+ virtual PP_Resource CreateTrueTypeFont(
+ PP_Instance instance,
+ const struct PP_TrueTypeFontDesc_Dev& desc) OVERRIDE;
virtual PP_Resource CreateURLRequestInfo(
PP_Instance instance,
const ::ppapi::URLRequestInfoData& data) OVERRIDE;
diff --git a/content/renderer/pepper/pepper_truetype_font.h b/content/renderer/pepper/pepper_truetype_font.h
new file mode 100644
index 0000000..8eb6bd7
--- /dev/null
+++ b/content/renderer/pepper/pepper_truetype_font.h
@@ -0,0 +1,50 @@
+// 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.
+
+#ifndef CONTENT_RENDERER_PEPPER_PEPPER_TRUETYPE_FONT_H_
+#define CONTENT_RENDERER_PEPPER_PEPPER_TRUETYPE_FONT_H_
+
+#include <string>
+#include <vector>
+
+#include "ppapi/proxy/serialized_structs.h"
+
+namespace content {
+
+class PepperTrueTypeFont {
+ public:
+ // Creates a font matching the given descriptor. The exact font that is
+ // returned will depend on the host platform's font matching and fallback
+ // algorithm.
+ static PepperTrueTypeFont* Create(
+ const ppapi::proxy::SerializedTrueTypeFontDesc& desc);
+ virtual ~PepperTrueTypeFont() {}
+
+ // Returns true if the font was successfully created, false otherwise.
+ virtual bool IsValid() = 0;
+
+ // Returns a description of the actual font. Use this to see the actual
+ // characteristics of the font after running the host platform's font matching
+ // and fallback algorithm. Returns PP_OK on success, a Pepper error code on
+ // failure. 'desc' is written only on success.
+ virtual int32_t Describe(ppapi::proxy::SerializedTrueTypeFontDesc* desc) = 0;
+
+ // Retrieves an array of TrueType table tags contained in this font. Returns
+ // the number of tags on success, a Pepper error code on failure. 'tags' are
+ // written only on success.
+ virtual int32_t GetTableTags(std::vector<uint32_t>* tags) = 0;
+
+ // Gets a TrueType font table corresponding to the given tag. The 'offset' and
+ // 'max_data_length' parameters determine what part of the table is returned.
+ // Returns the data size in bytes on success, a Pepper error code on failure.
+ // 'data' is written only on success.
+ virtual int32_t GetTable(uint32_t table_tag,
+ int32_t offset,
+ int32_t max_data_length,
+ std::string* data) = 0;
+};
+
+} // namespace content
+
+#endif // CONTENT_RENDERER_PEPPER_PEPPER_TRUETYPE_FONT_H_
diff --git a/content/renderer/pepper/pepper_truetype_font_android.cc b/content/renderer/pepper/pepper_truetype_font_android.cc
new file mode 100644
index 0000000..39cbacd
--- /dev/null
+++ b/content/renderer/pepper/pepper_truetype_font_android.cc
@@ -0,0 +1,16 @@
+// 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 "content/renderer/pepper/pepper_truetype_font.h"
+
+namespace content {
+
+// static
+PepperTrueTypeFont* PepperTrueTypeFont::Create(
+ const ppapi::proxy::SerializedTrueTypeFontDesc& desc) {
+ NOTIMPLEMENTED(); // Font API isn't implemented on Android.
+ return 0;
+}
+
+} // namespace content
diff --git a/content/renderer/pepper/pepper_truetype_font_host.cc b/content/renderer/pepper/pepper_truetype_font_host.cc
new file mode 100644
index 0000000..c94c1f6
--- /dev/null
+++ b/content/renderer/pepper/pepper_truetype_font_host.cc
@@ -0,0 +1,96 @@
+// 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 "content/renderer/pepper/pepper_truetype_font_host.h"
+
+#include "base/bind.h"
+#include "content/public/renderer/renderer_ppapi_host.h"
+#include "content/renderer/pepper/pepper_truetype_font.h"
+#include "ppapi/c/pp_errors.h"
+#include "ppapi/host/dispatch_host_message.h"
+#include "ppapi/host/host_message_context.h"
+#include "ppapi/host/ppapi_host.h"
+#include "ppapi/proxy/ppapi_messages.h"
+
+using ppapi::host::HostMessageContext;
+using ppapi::host::ReplyMessageContext;
+
+namespace content {
+
+PepperTrueTypeFontHost::PepperTrueTypeFontHost(
+ RendererPpapiHost* host,
+ PP_Instance instance,
+ PP_Resource resource,
+ const ppapi::proxy::SerializedTrueTypeFontDesc& desc)
+ : ResourceHost(host->GetPpapiHost(), instance, resource),
+ renderer_ppapi_host_(host),
+ font_(PepperTrueTypeFont::Create(desc)),
+ weak_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) {
+}
+
+PepperTrueTypeFontHost::~PepperTrueTypeFontHost() {
+}
+
+int32_t PepperTrueTypeFontHost::OnResourceMessageReceived(
+ const IPC::Message& msg,
+ HostMessageContext* context) {
+ if (!host()->permissions().HasPermission(ppapi::PERMISSION_DEV))
+ return PP_ERROR_FAILED;
+
+ IPC_BEGIN_MESSAGE_MAP(PepperTrueTypeFontHost, msg)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_TrueTypeFont_Describe,
+ OnHostMsgDescribe)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_TrueTypeFont_GetTableTags,
+ OnHostMsgGetTableTags)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_TrueTypeFont_GetTable,
+ OnHostMsgGetTable)
+ IPC_END_MESSAGE_MAP()
+ return PP_ERROR_FAILED;
+}
+
+int32_t PepperTrueTypeFontHost::OnHostMsgDescribe(HostMessageContext* context) {
+ if (!font_->IsValid())
+ return PP_ERROR_FAILED;
+
+ ppapi::proxy::SerializedTrueTypeFontDesc desc;
+ ReplyMessageContext reply_context = context->MakeReplyMessageContext();
+ reply_context.params.set_result(font_->Describe(&desc));
+ host()->SendReply(reply_context,
+ PpapiPluginMsg_TrueTypeFont_DescribeReply(desc));
+ return PP_OK_COMPLETIONPENDING;
+}
+
+int32_t PepperTrueTypeFontHost::OnHostMsgGetTableTags(
+ HostMessageContext* context) {
+ if (!font_->IsValid())
+ return PP_ERROR_FAILED;
+
+ std::vector<uint32_t> tags;
+ ReplyMessageContext reply_context = context->MakeReplyMessageContext();
+ reply_context.params.set_result(font_->GetTableTags(&tags));
+ host()->SendReply(
+ reply_context,
+ PpapiPluginMsg_TrueTypeFont_GetTableTagsReply(tags));
+ return PP_OK_COMPLETIONPENDING;
+}
+
+int32_t PepperTrueTypeFontHost::OnHostMsgGetTable(HostMessageContext* context,
+ uint32_t table,
+ int32_t offset,
+ int32_t max_data_length) {
+ if (!font_->IsValid())
+ return PP_ERROR_FAILED;
+ if (offset < 0 || max_data_length < 0)
+ return PP_ERROR_BADARGUMENT;
+
+ std::string data;
+ ReplyMessageContext reply_context = context->MakeReplyMessageContext();
+ reply_context.params.set_result(
+ font_->GetTable(table, offset, max_data_length, &data));
+ host()->SendReply(reply_context,
+ PpapiPluginMsg_TrueTypeFont_GetTableReply(data));
+ return PP_OK_COMPLETIONPENDING;
+}
+
+} // namespace content
diff --git a/content/renderer/pepper/pepper_truetype_font_host.h b/content/renderer/pepper/pepper_truetype_font_host.h
new file mode 100644
index 0000000..27ff397
--- /dev/null
+++ b/content/renderer/pepper/pepper_truetype_font_host.h
@@ -0,0 +1,50 @@
+// 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.
+
+#ifndef CONTENT_RENDERER_PEPPER_PEPPER_TRUETYPE_FONT_HOST_H_
+#define CONTENT_RENDERER_PEPPER_PEPPER_TRUETYPE_FONT_HOST_H_
+
+#include "base/compiler_specific.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/memory/weak_ptr.h"
+#include "content/common/content_export.h"
+#include "content/renderer/pepper/pepper_truetype_font.h"
+#include "ppapi/host/resource_host.h"
+
+namespace content {
+
+class RendererPpapiHost;
+
+class CONTENT_EXPORT PepperTrueTypeFontHost : public ppapi::host::ResourceHost {
+ public:
+ PepperTrueTypeFontHost(RendererPpapiHost* host,
+ PP_Instance instance,
+ PP_Resource resource,
+ const ppapi::proxy::SerializedTrueTypeFontDesc& desc);
+
+ virtual ~PepperTrueTypeFontHost();
+
+ virtual int32_t OnResourceMessageReceived(
+ const IPC::Message& msg,
+ ppapi::host::HostMessageContext* context) OVERRIDE;
+
+ private:
+ int32_t OnHostMsgDescribe(ppapi::host::HostMessageContext* context);
+ int32_t OnHostMsgGetTableTags(ppapi::host::HostMessageContext* context);
+ int32_t OnHostMsgGetTable(ppapi::host::HostMessageContext* context,
+ uint32_t table,
+ int32_t offset,
+ int32_t max_data_length);
+
+ RendererPpapiHost* renderer_ppapi_host_;
+ scoped_ptr<PepperTrueTypeFont> font_;
+
+ base::WeakPtrFactory<PepperTrueTypeFontHost> weak_factory_;
+
+ DISALLOW_COPY_AND_ASSIGN(PepperTrueTypeFontHost);
+};
+
+} // namespace content
+
+#endif // CONTENT_RENDERER_PEPPER_PEPPER_TRUETYPE_FONT_HOST_H_
diff --git a/content/renderer/pepper/pepper_truetype_font_linux.cc b/content/renderer/pepper/pepper_truetype_font_linux.cc
new file mode 100644
index 0000000..f59df68
--- /dev/null
+++ b/content/renderer/pepper/pepper_truetype_font_linux.cc
@@ -0,0 +1,16 @@
+// 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 "content/renderer/pepper/pepper_truetype_font.h"
+
+namespace content {
+
+// static
+PepperTrueTypeFont* PepperTrueTypeFont::Create(
+ const ppapi::proxy::SerializedTrueTypeFontDesc& desc) {
+ NOTIMPLEMENTED();
+ return 0;
+}
+
+} // namespace content
diff --git a/content/renderer/pepper/pepper_truetype_font_mac.mm b/content/renderer/pepper/pepper_truetype_font_mac.mm
new file mode 100644
index 0000000..f59df68
--- /dev/null
+++ b/content/renderer/pepper/pepper_truetype_font_mac.mm
@@ -0,0 +1,16 @@
+// 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 "content/renderer/pepper/pepper_truetype_font.h"
+
+namespace content {
+
+// static
+PepperTrueTypeFont* PepperTrueTypeFont::Create(
+ const ppapi::proxy::SerializedTrueTypeFontDesc& desc) {
+ NOTIMPLEMENTED();
+ return 0;
+}
+
+} // namespace content
diff --git a/content/renderer/pepper/pepper_truetype_font_win.cc b/content/renderer/pepper/pepper_truetype_font_win.cc
new file mode 100644
index 0000000..f59df68
--- /dev/null
+++ b/content/renderer/pepper/pepper_truetype_font_win.cc
@@ -0,0 +1,16 @@
+// 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 "content/renderer/pepper/pepper_truetype_font.h"
+
+namespace content {
+
+// static
+PepperTrueTypeFont* PepperTrueTypeFont::Create(
+ const ppapi::proxy::SerializedTrueTypeFontDesc& desc) {
+ NOTIMPLEMENTED();
+ return 0;
+}
+
+} // namespace content
diff --git a/ppapi/ppapi_proxy.gypi b/ppapi/ppapi_proxy.gypi
index 92e2238..4a5df15 100644
--- a/ppapi/ppapi_proxy.gypi
+++ b/ppapi/ppapi_proxy.gypi
@@ -166,6 +166,10 @@
'proxy/resource_creation_proxy.h',
'proxy/talk_resource.cc',
'proxy/talk_resource.h',
+ 'proxy/truetype_font_resource.cc',
+ 'proxy/truetype_font_resource.h',
+ 'proxy/truetype_font_singleton_resource.cc',
+ 'proxy/truetype_font_singleton_resource.h',
'proxy/udp_socket_private_resource.cc',
'proxy/udp_socket_private_resource.h',
'proxy/url_request_info_resource.cc',
diff --git a/ppapi/ppapi_shared.gypi b/ppapi/ppapi_shared.gypi
index 2a8f83f..6bfb2d9 100644
--- a/ppapi/ppapi_shared.gypi
+++ b/ppapi/ppapi_shared.gypi
@@ -217,6 +217,9 @@
'thunk/ppb_tcp_socket_private_api.h',
'thunk/ppb_tcp_socket_private_thunk.cc',
'thunk/ppb_text_input_thunk.cc',
+ 'thunk/ppb_truetype_font_api.h',
+ 'thunk/ppb_truetype_font_singleton_api.h',
+ 'thunk/ppb_truetype_font_thunk.cc',
'thunk/ppb_udp_socket_private_api.h',
'thunk/ppb_udp_socket_private_thunk.cc',
'thunk/ppb_url_loader_api.h',
diff --git a/ppapi/proxy/interface_list.cc b/ppapi/proxy/interface_list.cc
index 71444ce..4beeaab 100644
--- a/ppapi/proxy/interface_list.cc
+++ b/ppapi/proxy/interface_list.cc
@@ -25,6 +25,7 @@
#include "ppapi/c/dev/ppb_testing_dev.h"
#include "ppapi/c/dev/ppb_text_input_dev.h"
#include "ppapi/c/dev/ppb_trace_event_dev.h"
+#include "ppapi/c/dev/ppb_truetype_font_dev.h"
#include "ppapi/c/dev/ppb_url_util_dev.h"
#include "ppapi/c/dev/ppb_var_deprecated.h"
#include "ppapi/c/dev/ppb_video_capture_dev.h"
diff --git a/ppapi/proxy/ppapi_messages.h b/ppapi/proxy/ppapi_messages.h
index 4e9c0e2..9ccd930 100644
--- a/ppapi/proxy/ppapi_messages.h
+++ b/ppapi/proxy/ppapi_messages.h
@@ -22,6 +22,7 @@
#include "ppapi/c/dev/pp_video_dev.h"
#include "ppapi/c/dev/ppb_directory_reader_dev.h"
#include "ppapi/c/dev/ppb_text_input_dev.h"
+#include "ppapi/c/dev/ppb_truetype_font_dev.h"
#include "ppapi/c/dev/ppb_url_util_dev.h"
#include "ppapi/c/dev/ppp_printing_dev.h"
#include "ppapi/c/pp_bool.h"
@@ -84,6 +85,11 @@ IPC_ENUM_TRAITS(PP_PrintOutputFormat_Dev)
IPC_ENUM_TRAITS(PP_PrintScalingOption_Dev)
IPC_ENUM_TRAITS(PP_PrivateFontCharset)
IPC_ENUM_TRAITS(PP_TextInput_Type)
+IPC_ENUM_TRAITS(PP_TrueTypeFontFamily_Dev)
+IPC_ENUM_TRAITS(PP_TrueTypeFontStyle_Dev)
+IPC_ENUM_TRAITS(PP_TrueTypeFontWeight_Dev)
+IPC_ENUM_TRAITS(PP_TrueTypeFontWidth_Dev)
+IPC_ENUM_TRAITS(PP_TrueTypeFontCharset_Dev)
IPC_ENUM_TRAITS(PP_VideoDecodeError_Dev)
IPC_ENUM_TRAITS(PP_VideoDecoder_Profile)
@@ -1414,6 +1420,26 @@ IPC_MESSAGE_CONTROL2(PpapiHostMsg_Graphics2D_ReadImageData,
PP_Point /* top_left */)
IPC_MESSAGE_CONTROL0(PpapiPluginMsg_Graphics2D_ReadImageDataAck)
+// TrueTypeFont.
+IPC_MESSAGE_CONTROL0(PpapiHostMsg_TrueTypeFontSingleton_Create)
+IPC_MESSAGE_CONTROL0(PpapiHostMsg_TrueTypeFontSingleton_GetFontFamilies)
+IPC_MESSAGE_CONTROL1(PpapiPluginMsg_TrueTypeFontSingleton_GetFontFamiliesReply,
+ std::vector<std::string> /* font_families */)
+IPC_MESSAGE_CONTROL1(PpapiHostMsg_TrueTypeFont_Create,
+ ppapi::proxy::SerializedTrueTypeFontDesc /* desc */)
+IPC_MESSAGE_CONTROL0(PpapiHostMsg_TrueTypeFont_Describe)
+IPC_MESSAGE_CONTROL1(PpapiPluginMsg_TrueTypeFont_DescribeReply,
+ ppapi::proxy::SerializedTrueTypeFontDesc /* desc */)
+IPC_MESSAGE_CONTROL0(PpapiHostMsg_TrueTypeFont_GetTableTags)
+IPC_MESSAGE_CONTROL1(PpapiPluginMsg_TrueTypeFont_GetTableTagsReply,
+ std::vector<uint32_t> /* tags */)
+IPC_MESSAGE_CONTROL3(PpapiHostMsg_TrueTypeFont_GetTable,
+ uint32_t /* table */,
+ int32_t /* offset */,
+ int32_t /* max_data_length */)
+IPC_MESSAGE_CONTROL1(PpapiPluginMsg_TrueTypeFont_GetTableReply,
+ std::string /* data */)
+
// HostResolverPrivate, plugin -> host -> plugin
IPC_MESSAGE_CONTROL0(PpapiHostMsg_HostResolverPrivate_Create)
IPC_MESSAGE_CONTROL2(PpapiHostMsg_HostResolverPrivate_Resolve,
diff --git a/ppapi/proxy/ppapi_param_traits.cc b/ppapi/proxy/ppapi_param_traits.cc
index e457503..b654b22 100644
--- a/ppapi/proxy/ppapi_param_traits.cc
+++ b/ppapi/proxy/ppapi_param_traits.cc
@@ -560,7 +560,44 @@ void ParamTraits<ppapi::proxy::SerializedFontDescription>::Log(
const param_type& p,
std::string* l) {
}
+#endif // !defined(OS_NACL) && !defined(NACL_WIN64)
+
+// ppapi::proxy::SerializedTrueTypeFontDesc ------------------------------------
+
+// static
+void ParamTraits<ppapi::proxy::SerializedTrueTypeFontDesc>::Write(
+ Message* m,
+ const param_type& p) {
+ ParamTraits<std::string>::Write(m, p.family);
+ ParamTraits<PP_TrueTypeFontFamily_Dev>::Write(m, p.generic_family);
+ ParamTraits<PP_TrueTypeFontStyle_Dev>::Write(m, p.style);
+ ParamTraits<PP_TrueTypeFontWeight_Dev>::Write(m, p.weight);
+ ParamTraits<PP_TrueTypeFontWidth_Dev>::Write(m, p.width);
+ ParamTraits<PP_TrueTypeFontCharset_Dev>::Write(m, p.charset);
+}
+
+// static
+bool ParamTraits<ppapi::proxy::SerializedTrueTypeFontDesc>::Read(
+ const Message* m,
+ PickleIterator* iter,
+ param_type* r) {
+ return
+ ParamTraits<std::string>::Read(m, iter, &r->family) &&
+ ParamTraits<PP_TrueTypeFontFamily_Dev>::Read(m, iter,
+ &r->generic_family) &&
+ ParamTraits<PP_TrueTypeFontStyle_Dev>::Read(m, iter, &r->style) &&
+ ParamTraits<PP_TrueTypeFontWeight_Dev>::Read(m, iter, &r->weight) &&
+ ParamTraits<PP_TrueTypeFontWidth_Dev>::Read(m, iter, &r->width) &&
+ ParamTraits<PP_TrueTypeFontCharset_Dev>::Read(m, iter, &r->charset);
+}
+
+// static
+void ParamTraits<ppapi::proxy::SerializedTrueTypeFontDesc>::Log(
+ const param_type& p,
+ std::string* l) {
+}
+#if !defined(OS_NACL) && !defined(NACL_WIN64)
// ppapi::PepperFilePath -------------------------------------------------------
// static
diff --git a/ppapi/proxy/ppapi_param_traits.h b/ppapi/proxy/ppapi_param_traits.h
index 7556e35..38ec6f3 100644
--- a/ppapi/proxy/ppapi_param_traits.h
+++ b/ppapi/proxy/ppapi_param_traits.h
@@ -33,6 +33,7 @@ struct PPBFlash_DrawGlyphs_Params;
struct PPBURLLoader_UpdateProgress_Params;
struct SerializedDirEntry;
struct SerializedFontDescription;
+struct SerializedTrueTypeFontDesc;
class SerializedFlashMenu;
class SerializedHandle;
class SerializedVar;
@@ -117,6 +118,15 @@ struct PPAPI_PROXY_EXPORT ParamTraits<ppapi::proxy::SerializedFontDescription> {
};
template<>
+struct PPAPI_PROXY_EXPORT
+ ParamTraits<ppapi::proxy::SerializedTrueTypeFontDesc> {
+ typedef ppapi::proxy::SerializedTrueTypeFontDesc param_type;
+ static void Write(Message* m, const param_type& p);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
+ static void Log(const param_type& p, std::string* l);
+};
+
+template<>
struct PPAPI_PROXY_EXPORT ParamTraits<ppapi::proxy::SerializedHandle> {
typedef ppapi::proxy::SerializedHandle param_type;
static void Write(Message* m, const param_type& p);
diff --git a/ppapi/proxy/ppb_instance_proxy.cc b/ppapi/proxy/ppb_instance_proxy.cc
index df83edc..58b1593 100644
--- a/ppapi/proxy/ppb_instance_proxy.cc
+++ b/ppapi/proxy/ppb_instance_proxy.cc
@@ -27,6 +27,7 @@
#include "ppapi/proxy/plugin_dispatcher.h"
#include "ppapi/proxy/ppapi_messages.h"
#include "ppapi/proxy/serialized_var.h"
+#include "ppapi/proxy/truetype_font_singleton_resource.h"
#include "ppapi/shared_impl/ppapi_globals.h"
#include "ppapi/shared_impl/ppb_url_util_shared.h"
#include "ppapi/shared_impl/ppb_view_shared.h"
@@ -357,6 +358,9 @@ Resource* PPB_Instance_Proxy::GetSingletonResource(PP_Instance instance,
case GAMEPAD_SINGLETON_ID:
new_singleton = new GamepadResource(connection, instance);
break;
+ case TRUETYPE_FONT_SINGLETON_ID:
+ new_singleton = new TrueTypeFontSingletonResource(connection, instance);
+ break;
// Flash/trusted resources aren't needed for NaCl.
#if !defined(OS_NACL) && !defined(NACL_WIN64)
case BROWSER_FONT_SINGLETON_ID:
diff --git a/ppapi/proxy/resource_creation_proxy.cc b/ppapi/proxy/resource_creation_proxy.cc
index a821a15..4aec036 100644
--- a/ppapi/proxy/resource_creation_proxy.cc
+++ b/ppapi/proxy/resource_creation_proxy.cc
@@ -38,6 +38,7 @@
#include "ppapi/proxy/ppb_x509_certificate_private_proxy.h"
#include "ppapi/proxy/printing_resource.h"
#include "ppapi/proxy/talk_resource.h"
+#include "ppapi/proxy/truetype_font_resource.h"
#include "ppapi/proxy/udp_socket_private_resource.h"
#include "ppapi/proxy/url_request_info_resource.h"
#include "ppapi/proxy/url_response_info_resource.h"
@@ -143,6 +144,14 @@ PP_Resource ResourceCreationProxy::CreateResourceArray(
return object->GetReference();
}
+PP_Resource ResourceCreationProxy::CreateTrueTypeFont(
+ PP_Instance instance,
+ const PP_TrueTypeFontDesc_Dev& desc) {
+ return (new TrueTypeFontResource(GetConnection(),
+ instance, desc))->GetReference();
+
+}
+
PP_Resource ResourceCreationProxy::CreateURLLoader(PP_Instance instance) {
return PPB_URLLoader_Proxy::CreateProxyResource(instance);
}
diff --git a/ppapi/proxy/resource_creation_proxy.h b/ppapi/proxy/resource_creation_proxy.h
index 940b254..2a95c12 100644
--- a/ppapi/proxy/resource_creation_proxy.h
+++ b/ppapi/proxy/resource_creation_proxy.h
@@ -75,6 +75,9 @@ class ResourceCreationProxy : public InterfaceProxy,
virtual PP_Resource CreateResourceArray(PP_Instance instance,
const PP_Resource elements[],
uint32_t size) OVERRIDE;
+ virtual PP_Resource CreateTrueTypeFont(
+ PP_Instance instance,
+ const PP_TrueTypeFontDesc_Dev& desc) OVERRIDE;
virtual PP_Resource CreateURLLoader(PP_Instance instance) OVERRIDE;
virtual PP_Resource CreateURLRequestInfo(
PP_Instance instance,
diff --git a/ppapi/proxy/serialized_structs.cc b/ppapi/proxy/serialized_structs.cc
index ebd7ed0..8c984d5 100644
--- a/ppapi/proxy/serialized_structs.cc
+++ b/ppapi/proxy/serialized_structs.cc
@@ -80,6 +80,40 @@ void SerializedFontDescription::SetToPPBrowserFontDescription(
desc->word_spacing = word_spacing;
}
+SerializedTrueTypeFontDesc::SerializedTrueTypeFontDesc()
+ : family(),
+ generic_family(),
+ style(),
+ weight(),
+ width(),
+ charset() {
+}
+
+SerializedTrueTypeFontDesc::~SerializedTrueTypeFontDesc() {}
+
+void SerializedTrueTypeFontDesc::SetFromPPTrueTypeFontDesc(
+ const PP_TrueTypeFontDesc_Dev& desc) {
+ StringVar* string_var = StringVar::FromPPVar(desc.family);
+ family = string_var ? string_var->value() : std::string();
+
+ generic_family = desc.generic_family;
+ style = desc.style;
+ weight = desc.weight;
+ width = desc.width;
+ charset = desc.charset;
+}
+
+void SerializedTrueTypeFontDesc::CopyToPPTrueTypeFontDesc(
+ PP_TrueTypeFontDesc_Dev* desc) const {
+ desc->family = StringVar::StringToPPVar(family);
+
+ desc->generic_family = generic_family;
+ desc->style = style;
+ desc->weight = weight;
+ desc->width = width;
+ desc->charset = charset;
+}
+
PPBFlash_DrawGlyphs_Params::PPBFlash_DrawGlyphs_Params()
: instance(0),
font_desc(),
diff --git a/ppapi/proxy/serialized_structs.h b/ppapi/proxy/serialized_structs.h
index dcb99817..4844d6b 100644
--- a/ppapi/proxy/serialized_structs.h
+++ b/ppapi/proxy/serialized_structs.h
@@ -11,6 +11,7 @@
#include "base/logging.h"
#include "base/shared_memory.h"
#include "build/build_config.h"
+#include "ppapi/c/dev/ppb_truetype_font_dev.h"
#include "ppapi/c/pp_bool.h"
#include "ppapi/c/pp_instance.h"
#include "ppapi/c/pp_point.h"
@@ -56,6 +57,30 @@ struct PPAPI_PROXY_EXPORT SerializedFontDescription {
int32_t word_spacing;
};
+struct PPAPI_PROXY_EXPORT SerializedTrueTypeFontDesc {
+ SerializedTrueTypeFontDesc();
+ ~SerializedTrueTypeFontDesc();
+
+ // Sets this to correspond to the contents of a PP_TrueTypeFontDesc_Dev.
+ //
+ // The reference count of the desc.family PP_Var will be unchanged and the
+ // caller is responsible for releasing it.
+ void SetFromPPTrueTypeFontDesc(const PP_TrueTypeFontDesc_Dev& desc);
+
+ // Converts this to a PP_FontDescription_Dev.
+ //
+ // The desc.family PP_Var will have one reference assigned to it. The caller
+ // is responsible for releasing it.
+ void CopyToPPTrueTypeFontDesc(PP_TrueTypeFontDesc_Dev* desc) const;
+
+ std::string family;
+ PP_TrueTypeFontFamily_Dev generic_family;
+ PP_TrueTypeFontStyle_Dev style;
+ PP_TrueTypeFontWeight_Dev weight;
+ PP_TrueTypeFontWidth_Dev width;
+ PP_TrueTypeFontCharset_Dev charset;
+};
+
struct SerializedDirEntry {
std::string name;
bool is_dir;
diff --git a/ppapi/proxy/truetype_font_resource.cc b/ppapi/proxy/truetype_font_resource.cc
new file mode 100644
index 0000000..0b07195
--- /dev/null
+++ b/ppapi/proxy/truetype_font_resource.cc
@@ -0,0 +1,130 @@
+// 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 "ppapi/proxy/truetype_font_resource.h"
+
+#include "base/bind.h"
+#include "ipc/ipc_message.h"
+#include "ppapi/c/pp_errors.h"
+#include "ppapi/proxy/ppapi_messages.h"
+#include "ppapi/shared_impl/array_writer.h"
+#include "ppapi/shared_impl/ppapi_globals.h"
+#include "ppapi/shared_impl/resource_tracker.h"
+#include "ppapi/shared_impl/var.h"
+#include "ppapi/thunk/enter.h"
+
+using ppapi::thunk::EnterResourceNoLock;
+using ppapi::thunk::PPB_TrueTypeFont_API;
+
+namespace {
+
+} // namespace
+
+namespace ppapi {
+namespace proxy {
+
+TrueTypeFontResource::TrueTypeFontResource(
+ Connection connection,
+ PP_Instance instance,
+ const PP_TrueTypeFontDesc_Dev& desc)
+ : PluginResource(connection, instance) {
+ SerializedTrueTypeFontDesc serialized_desc;
+ serialized_desc.SetFromPPTrueTypeFontDesc(desc);
+ SendCreate(RENDERER, PpapiHostMsg_TrueTypeFont_Create(serialized_desc));
+}
+
+TrueTypeFontResource::~TrueTypeFontResource() {
+}
+
+PPB_TrueTypeFont_API* TrueTypeFontResource::AsPPB_TrueTypeFont_API() {
+ return this;
+}
+
+int32_t TrueTypeFontResource::Describe(
+ PP_TrueTypeFontDesc_Dev* desc,
+ scoped_refptr<TrackedCallback> callback) {
+
+ Call<PpapiPluginMsg_TrueTypeFont_DescribeReply>(RENDERER,
+ PpapiHostMsg_TrueTypeFont_Describe(),
+ base::Bind(&TrueTypeFontResource::OnPluginMsgDescribeComplete, this,
+ callback, desc));
+ return PP_OK_COMPLETIONPENDING;
+}
+
+int32_t TrueTypeFontResource::GetTableTags(
+ const PP_ArrayOutput& output,
+ scoped_refptr<TrackedCallback> callback) {
+ Call<PpapiPluginMsg_TrueTypeFont_GetTableTagsReply>(RENDERER,
+ PpapiHostMsg_TrueTypeFont_GetTableTags(),
+ base::Bind(&TrueTypeFontResource::OnPluginMsgGetTableTagsComplete, this,
+ callback, output));
+ return PP_OK_COMPLETIONPENDING;
+}
+
+int32_t TrueTypeFontResource::GetTable(
+ uint32_t table,
+ int32_t offset,
+ int32_t max_data_length,
+ const PP_ArrayOutput& output,
+ scoped_refptr<TrackedCallback> callback) {
+ Call<PpapiPluginMsg_TrueTypeFont_GetTableReply>(RENDERER,
+ PpapiHostMsg_TrueTypeFont_GetTable(table, offset, max_data_length),
+ base::Bind(&TrueTypeFontResource::OnPluginMsgGetTableComplete, this,
+ callback, output));
+ return PP_OK_COMPLETIONPENDING;
+}
+
+void TrueTypeFontResource::OnPluginMsgDescribeComplete(
+ scoped_refptr<TrackedCallback> callback,
+ PP_TrueTypeFontDesc_Dev* pp_desc,
+ const ResourceMessageReplyParams& params,
+ const ppapi::proxy::SerializedTrueTypeFontDesc& desc) {
+ int32_t result = params.result();
+ if (result == PP_OK)
+ desc.CopyToPPTrueTypeFontDesc(pp_desc);
+ callback->Run(result);
+}
+
+void TrueTypeFontResource::OnPluginMsgGetTableTagsComplete(
+ scoped_refptr<TrackedCallback> callback,
+ PP_ArrayOutput array_output,
+ const ResourceMessageReplyParams& params,
+ const std::vector<uint32_t>& tag_array) {
+ // The result code should contain the data size if it's positive.
+ int32_t result = params.result();
+ DCHECK((result < 0 && tag_array.size() == 0) ||
+ result == static_cast<int32_t>(tag_array.size()));
+
+ ArrayWriter output;
+ output.set_pp_array_output(array_output);
+ if (output.is_valid())
+ output.StoreArray(&tag_array[0], std::max(0, result));
+ else
+ result = PP_ERROR_FAILED;
+
+ callback->Run(result);
+}
+
+void TrueTypeFontResource::OnPluginMsgGetTableComplete(
+ scoped_refptr<TrackedCallback> callback,
+ PP_ArrayOutput array_output,
+ const ResourceMessageReplyParams& params,
+ const std::string& data) {
+ // The result code should contain the data size if it's positive.
+ int32_t result = params.result();
+ DCHECK((result < 0 && data.size() == 0) ||
+ result == static_cast<int32_t>(data.size()));
+
+ ArrayWriter output;
+ output.set_pp_array_output(array_output);
+ if (output.is_valid())
+ output.StoreArray(data.data(), std::max(0, result));
+ else
+ result = PP_ERROR_FAILED;
+
+ callback->Run(result);
+}
+
+} // namespace proxy
+} // namespace ppapi
diff --git a/ppapi/proxy/truetype_font_resource.h b/ppapi/proxy/truetype_font_resource.h
new file mode 100644
index 0000000..6aac2d5
--- /dev/null
+++ b/ppapi/proxy/truetype_font_resource.h
@@ -0,0 +1,73 @@
+// 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.
+
+#ifndef PPAPI_PROXY_TRUETYPE_FONT_RESOURCE_H_
+#define PPAPI_PROXY_TRUETYPE_FONT_RESOURCE_H_
+
+#include <string>
+
+#include "ppapi/proxy/connection.h"
+#include "ppapi/proxy/plugin_resource.h"
+#include "ppapi/proxy/ppapi_proxy_export.h"
+#include "ppapi/shared_impl/var.h"
+#include "ppapi/thunk/ppb_truetype_font_api.h"
+
+namespace ppapi {
+
+class TrackedCallback;
+
+namespace proxy {
+
+struct SerializedTrueTypeFontDesc;
+
+class PPAPI_PROXY_EXPORT TrueTypeFontResource
+ : public PluginResource,
+ public thunk::PPB_TrueTypeFont_API {
+ public:
+ TrueTypeFontResource(Connection connection,
+ PP_Instance instance,
+ const PP_TrueTypeFontDesc_Dev& desc);
+ virtual ~TrueTypeFontResource();
+
+ // Resource overrides.
+ virtual thunk::PPB_TrueTypeFont_API* AsPPB_TrueTypeFont_API() OVERRIDE;
+
+ // PPB_TrueTypeFont_API implementation.
+ virtual int32_t Describe(
+ PP_TrueTypeFontDesc_Dev* desc,
+ scoped_refptr<TrackedCallback> callback) OVERRIDE;
+ virtual int32_t GetTableTags(
+ const PP_ArrayOutput& output,
+ scoped_refptr<TrackedCallback> callback) OVERRIDE;
+ virtual int32_t GetTable(
+ uint32_t table,
+ int32_t offset,
+ int32_t max_data_length,
+ const PP_ArrayOutput& output,
+ scoped_refptr<TrackedCallback> callback) OVERRIDE;
+
+ private:
+ void OnPluginMsgDescribeComplete(
+ scoped_refptr<TrackedCallback> callback,
+ PP_TrueTypeFontDesc_Dev* pp_desc,
+ const ResourceMessageReplyParams& params,
+ const ppapi::proxy::SerializedTrueTypeFontDesc& desc);
+ void OnPluginMsgGetTableTagsComplete(
+ scoped_refptr<TrackedCallback> callback,
+ PP_ArrayOutput array_output,
+ const ResourceMessageReplyParams& params,
+ const std::vector<uint32_t>& data);
+ void OnPluginMsgGetTableComplete(
+ scoped_refptr<TrackedCallback> callback,
+ PP_ArrayOutput array_output,
+ const ResourceMessageReplyParams& params,
+ const std::string& data);
+
+ DISALLOW_COPY_AND_ASSIGN(TrueTypeFontResource);
+};
+
+} // namespace proxy
+} // namespace ppapi
+
+#endif // PPAPI_PROXY_TRUETYPE_FONT_RESOURCE_H_
diff --git a/ppapi/proxy/truetype_font_singleton_resource.cc b/ppapi/proxy/truetype_font_singleton_resource.cc
new file mode 100644
index 0000000..b812bf1
--- /dev/null
+++ b/ppapi/proxy/truetype_font_singleton_resource.cc
@@ -0,0 +1,68 @@
+// 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 "ppapi/proxy/truetype_font_singleton_resource.h"
+
+#include "ppapi/proxy/ppapi_messages.h"
+#include "ppapi/shared_impl/array_writer.h"
+#include "ppapi/shared_impl/tracked_callback.h"
+#include "ppapi/shared_impl/var.h"
+
+namespace ppapi {
+namespace proxy {
+
+TrueTypeFontSingletonResource::TrueTypeFontSingletonResource(
+ Connection connection,
+ PP_Instance instance)
+ : PluginResource(connection, instance) {
+ SendCreate(BROWSER, PpapiHostMsg_TrueTypeFontSingleton_Create());
+}
+
+TrueTypeFontSingletonResource::~TrueTypeFontSingletonResource() {
+}
+
+thunk::PPB_TrueTypeFont_Singleton_API*
+TrueTypeFontSingletonResource::AsPPB_TrueTypeFont_Singleton_API() {
+ return this;
+}
+
+int32_t TrueTypeFontSingletonResource::GetFontFamilies(
+ PP_Instance instance,
+ const PP_ArrayOutput& output,
+ const scoped_refptr<TrackedCallback>& callback) {
+ Call<PpapiPluginMsg_TrueTypeFontSingleton_GetFontFamiliesReply>(BROWSER,
+ PpapiHostMsg_TrueTypeFontSingleton_GetFontFamilies(),
+ base::Bind(
+ &TrueTypeFontSingletonResource::OnPluginMsgGetFontFamiliesComplete,
+ this, callback, output));
+ return PP_OK_COMPLETIONPENDING;
+}
+
+void TrueTypeFontSingletonResource::OnPluginMsgGetFontFamiliesComplete(
+ scoped_refptr<TrackedCallback> callback,
+ PP_ArrayOutput array_output,
+ const ResourceMessageReplyParams& params,
+ const std::vector<std::string>& font_families) {
+ // The result code should contain the data size if it's positive.
+ int32_t result = params.result();
+ DCHECK((result < 0 && font_families.size() == 0) ||
+ result == static_cast<int32_t>(font_families.size()));
+
+ ArrayWriter output;
+ output.set_pp_array_output(array_output);
+ if (output.is_valid()) {
+ std::vector< scoped_refptr<Var> > font_family_vars;
+ for (size_t i = 0; i < font_families.size(); i++)
+ font_family_vars.push_back(
+ scoped_refptr<Var>(new StringVar(font_families[i])));
+ output.StoreVarVector(font_family_vars);
+ } else {
+ result = PP_ERROR_FAILED;
+ }
+
+ callback->Run(result);
+}
+
+} // namespace proxy
+} // namespace ppapi
diff --git a/ppapi/proxy/truetype_font_singleton_resource.h b/ppapi/proxy/truetype_font_singleton_resource.h
new file mode 100644
index 0000000..03c9c7d
--- /dev/null
+++ b/ppapi/proxy/truetype_font_singleton_resource.h
@@ -0,0 +1,55 @@
+// 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.
+
+#ifndef PPAPI_PROXY_TRUETYPE_FONT_SINGLETON_RESOURCE_H_
+#define PPAPI_PROXY_TRUETYPE_FONT_SINGLETON_RESOURCE_H_
+
+#include <string>
+#include <vector>
+
+#include "ppapi/proxy/connection.h"
+#include "ppapi/proxy/plugin_resource.h"
+#include "ppapi/thunk/ppb_truetype_font_singleton_api.h"
+
+namespace ppapi {
+
+class TrackedCallback;
+
+namespace proxy {
+
+struct SerializedTrueTypeFontDescription;
+
+// This handles the singleton calls (that don't take a PP_Resource parameter)
+// on the TrueType font interface.
+class TrueTypeFontSingletonResource
+ : public PluginResource,
+ public thunk::PPB_TrueTypeFont_Singleton_API {
+ public:
+ TrueTypeFontSingletonResource(Connection connection, PP_Instance instance);
+ virtual ~TrueTypeFontSingletonResource();
+
+ // Resource override.
+ virtual thunk::PPB_TrueTypeFont_Singleton_API*
+ AsPPB_TrueTypeFont_Singleton_API() OVERRIDE;
+
+ // thunk::PPB_TrueTypeFont_Singleton_API implementation.
+ virtual int32_t GetFontFamilies(
+ PP_Instance instance,
+ const PP_ArrayOutput& output,
+ const scoped_refptr<TrackedCallback>& callback) OVERRIDE;
+
+ private:
+ void OnPluginMsgGetFontFamiliesComplete(
+ scoped_refptr<TrackedCallback> callback,
+ PP_ArrayOutput array_output,
+ const ResourceMessageReplyParams& params,
+ const std::vector<std::string>& data);
+
+ DISALLOW_COPY_AND_ASSIGN(TrueTypeFontSingletonResource);
+};
+
+} // namespace proxy
+} // namespace ppapi
+
+#endif // PPAPI_PROXY_TRUETYPE_FONT_SINGLETON_RESOURCE_H_
diff --git a/ppapi/shared_impl/resource.h b/ppapi/shared_impl/resource.h
index 3213e8b..fd86ddd 100644
--- a/ppapi/shared_impl/resource.h
+++ b/ppapi/shared_impl/resource.h
@@ -59,6 +59,8 @@
F(PPB_ResourceArray_API) \
F(PPB_Scrollbar_API) \
F(PPB_Talk_Private_API) \
+ F(PPB_TrueTypeFont_API) \
+ F(PPB_TrueTypeFont_Singleton_API) \
F(PPB_TCPServerSocket_Private_API) \
F(PPB_TCPSocket_Private_API) \
F(PPB_UDPSocket_Private_API) \
diff --git a/ppapi/shared_impl/singleton_resource_id.h b/ppapi/shared_impl/singleton_resource_id.h
index a63dc40..d7db485 100644
--- a/ppapi/shared_impl/singleton_resource_id.h
+++ b/ppapi/shared_impl/singleton_resource_id.h
@@ -20,6 +20,7 @@ enum SingletonResourceID {
FLASH_FULLSCREEN_SINGLETON_ID,
FLASH_SINGLETON_ID,
GAMEPAD_SINGLETON_ID,
+ TRUETYPE_FONT_SINGLETON_ID,
};
} // namespace ppapi
diff --git a/ppapi/tests/all_c_includes.h b/ppapi/tests/all_c_includes.h
index bd6911c..7d7a690 100644
--- a/ppapi/tests/all_c_includes.h
+++ b/ppapi/tests/all_c_includes.h
@@ -29,6 +29,7 @@
#include "ppapi/c/dev/ppb_testing_dev.h"
#include "ppapi/c/dev/ppb_text_input_dev.h"
#include "ppapi/c/dev/ppb_trace_event_dev.h"
+#include "ppapi/c/dev/ppb_truetype_font_dev.h"
#include "ppapi/c/dev/ppb_url_util_dev.h"
#include "ppapi/c/dev/ppb_var_deprecated.h"
#include "ppapi/c/dev/ppb_video_decoder_dev.h"
diff --git a/ppapi/thunk/interfaces_ppb_public_dev.h b/ppapi/thunk/interfaces_ppb_public_dev.h
index 708b6ef..d0570d9 100644
--- a/ppapi/thunk/interfaces_ppb_public_dev.h
+++ b/ppapi/thunk/interfaces_ppb_public_dev.h
@@ -28,6 +28,8 @@ PROXIED_IFACE(NoAPIName, PPB_RESOURCEARRAY_DEV_INTERFACE_0_1,
PPB_ResourceArray_Dev_0_1)
PROXIED_IFACE(PPB_Instance, PPB_TEXTINPUT_DEV_INTERFACE_0_2,
PPB_TextInput_Dev_0_2)
+PROXIED_IFACE(NoAPIName, PPB_TRUETYPEFONT_DEV_INTERFACE_0_1,
+ PPB_TrueTypeFont_Dev_0_1)
PROXIED_IFACE(NoAPIName, PPB_VIEW_DEV_INTERFACE_0_1,
PPB_View_Dev_0_1)
UNPROXIED_IFACE(PPB_Instance, PPB_ZOOM_DEV_INTERFACE_0_2, PPB_Zoom_Dev_0_2)
diff --git a/ppapi/thunk/ppb_truetype_font_api.h b/ppapi/thunk/ppb_truetype_font_api.h
new file mode 100644
index 0000000..9df6c98
--- /dev/null
+++ b/ppapi/thunk/ppb_truetype_font_api.h
@@ -0,0 +1,36 @@
+// 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.
+
+#ifndef PPAPI_THUNK_PPB_TRUETYPE_FONT_API_H_
+#define PPAPI_THUNK_PPB_TRUETYPE_FONT_API_H_
+
+#include "base/memory/ref_counted.h"
+#include "ppapi/c/dev/ppb_truetype_font_dev.h"
+#include "ppapi/thunk/ppapi_thunk_export.h"
+
+namespace ppapi {
+
+class TrackedCallback;
+
+namespace thunk {
+
+class PPAPI_THUNK_EXPORT PPB_TrueTypeFont_API {
+ public:
+ virtual ~PPB_TrueTypeFont_API() {}
+
+ virtual int32_t Describe(PP_TrueTypeFontDesc_Dev* desc,
+ scoped_refptr<TrackedCallback> callback) = 0;
+ virtual int32_t GetTableTags(const PP_ArrayOutput& output,
+ scoped_refptr<TrackedCallback> callback) = 0;
+ virtual int32_t GetTable(uint32_t table,
+ int32_t offset,
+ int32_t max_data_length,
+ const PP_ArrayOutput& output,
+ scoped_refptr<TrackedCallback> callback) = 0;
+};
+
+} // namespace thunk
+} // namespace ppapi
+
+#endif // PPAPI_THUNK_PPB_TRUETYPE_FONT_API_H_
diff --git a/ppapi/thunk/ppb_truetype_font_singleton_api.h b/ppapi/thunk/ppb_truetype_font_singleton_api.h
new file mode 100644
index 0000000..514bab1
--- /dev/null
+++ b/ppapi/thunk/ppb_truetype_font_singleton_api.h
@@ -0,0 +1,34 @@
+// 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.
+
+#ifndef PPAPI_THUNK_PPB_TRUETYPE_FONT_SINGLETON_API_H_
+#define PPAPI_THUNK_PPB_TRUETYPE_FONT_SINGLETON_API_H_
+
+#include "ppapi/c/pp_array_output.h"
+#include "ppapi/c/pp_completion_callback.h"
+#include "ppapi/c/pp_instance.h"
+#include "ppapi/c/pp_var.h"
+#include "ppapi/shared_impl/singleton_resource_id.h"
+#include "ppapi/shared_impl/tracked_callback.h"
+
+namespace ppapi {
+namespace thunk {
+
+class PPB_TrueTypeFont_Singleton_API {
+ public:
+ virtual ~PPB_TrueTypeFont_Singleton_API() {}
+
+ virtual int32_t GetFontFamilies(
+ PP_Instance instance,
+ const PP_ArrayOutput& output,
+ const scoped_refptr<TrackedCallback>& callback) = 0;
+
+ static const SingletonResourceID kSingletonResourceID =
+ TRUETYPE_FONT_SINGLETON_ID;
+};
+
+} // namespace thunk
+} // namespace ppapi
+
+#endif // PPAPI_THUNK_PPB_TRUETYPE_FONT_SINGLETON_API_H_
diff --git a/ppapi/thunk/ppb_truetype_font_thunk.cc b/ppapi/thunk/ppb_truetype_font_thunk.cc
new file mode 100644
index 0000000..b941c84
--- /dev/null
+++ b/ppapi/thunk/ppb_truetype_font_thunk.cc
@@ -0,0 +1,94 @@
+// 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 "ppapi/c/dev/ppb_truetype_font_dev.h"
+#include "ppapi/c/pp_completion_callback.h"
+#include "ppapi/c/pp_errors.h"
+#include "ppapi/shared_impl/tracked_callback.h"
+#include "ppapi/thunk/enter.h"
+#include "ppapi/thunk/ppb_instance_api.h"
+#include "ppapi/thunk/ppb_truetype_font_api.h"
+#include "ppapi/thunk/ppb_truetype_font_singleton_api.h"
+#include "ppapi/thunk/resource_creation_api.h"
+#include "ppapi/thunk/thunk.h"
+
+namespace ppapi {
+namespace thunk {
+
+namespace {
+
+int32_t GetFontFamilies(PP_Instance instance,
+ PP_ArrayOutput output,
+ PP_CompletionCallback callback) {
+ EnterInstanceAPI<PPB_TrueTypeFont_Singleton_API> enter(instance, callback);
+ if (enter.failed())
+ return PP_ERROR_FAILED;
+ return enter.functions()->GetFontFamilies(instance, output, enter.callback());
+}
+
+PP_Resource Create(PP_Instance instance,
+ const PP_TrueTypeFontDesc_Dev* desc) {
+ EnterResourceCreation enter(instance);
+ if (enter.failed())
+ return 0;
+ return enter.functions()->CreateTrueTypeFont(instance, *desc);
+}
+
+PP_Bool IsFont(PP_Resource resource) {
+ EnterResource<PPB_TrueTypeFont_API> enter(resource, false);
+ return PP_FromBool(enter.succeeded());
+}
+
+int32_t Describe(PP_Resource font,
+ PP_TrueTypeFontDesc_Dev* desc,
+ PP_CompletionCallback callback) {
+ EnterResource<PPB_TrueTypeFont_API> enter(font, callback, true);
+ if (enter.failed())
+ return enter.retval();
+ return enter.SetResult(enter.object()->Describe(desc, enter.callback()));
+}
+
+int32_t GetTableTags(PP_Resource font,
+ PP_ArrayOutput output,
+ PP_CompletionCallback callback) {
+ EnterResource<PPB_TrueTypeFont_API> enter(font, callback, true);
+ if (enter.failed())
+ return enter.retval();
+ return enter.SetResult(enter.object()->GetTableTags(output,
+ enter.callback()));
+}
+
+int32_t GetTable(PP_Resource font,
+ uint32_t table,
+ int32_t offset,
+ int32_t max_data_length,
+ PP_ArrayOutput output,
+ PP_CompletionCallback callback) {
+ EnterResource<PPB_TrueTypeFont_API> enter(font, callback, true);
+ if (enter.failed())
+ return enter.retval();
+ return enter.SetResult(enter.object()->GetTable(table,
+ offset,
+ max_data_length,
+ output,
+ enter.callback()));
+}
+
+const PPB_TrueTypeFont_Dev_0_1 g_ppb_truetypefont_thunk_0_1 = {
+ &GetFontFamilies,
+ &Create,
+ &IsFont,
+ &Describe,
+ &GetTableTags,
+ &GetTable
+};
+
+} // namespace
+
+const PPB_TrueTypeFont_Dev_0_1* GetPPB_TrueTypeFont_Dev_0_1_Thunk() {
+ return &g_ppb_truetypefont_thunk_0_1;
+}
+
+} // namespace thunk
+} // namespace ppapi
diff --git a/ppapi/thunk/resource_creation_api.h b/ppapi/thunk/resource_creation_api.h
index 47c1114..377424a 100644
--- a/ppapi/thunk/resource_creation_api.h
+++ b/ppapi/thunk/resource_creation_api.h
@@ -17,6 +17,7 @@
#include "ppapi/c/ppb_input_event.h"
#include "ppapi/c/ppb_websocket.h"
#include "ppapi/c/dev/pp_video_dev.h"
+#include "ppapi/c/dev/ppb_truetype_font_dev.h"
#include "ppapi/c/private/pp_private_font_charset.h"
#include "ppapi/c/private/ppb_network_monitor_private.h"
#include "ppapi/shared_impl/api_id.h"
@@ -80,6 +81,9 @@ class ResourceCreationAPI {
virtual PP_Resource CreateResourceArray(PP_Instance instance,
const PP_Resource elements[],
uint32_t size) = 0;
+ virtual PP_Resource CreateTrueTypeFont(
+ PP_Instance instance,
+ const PP_TrueTypeFontDesc_Dev& desc) = 0;
virtual PP_Resource CreateURLLoader(PP_Instance instance) = 0;
virtual PP_Resource CreateURLRequestInfo(
PP_Instance instance,
diff --git a/webkit/plugins/ppapi/plugin_module.cc b/webkit/plugins/ppapi/plugin_module.cc
index 4b917b0f..983c11d 100644
--- a/webkit/plugins/ppapi/plugin_module.cc
+++ b/webkit/plugins/ppapi/plugin_module.cc
@@ -33,6 +33,7 @@
#include "ppapi/c/dev/ppb_testing_dev.h"
#include "ppapi/c/dev/ppb_text_input_dev.h"
#include "ppapi/c/dev/ppb_trace_event_dev.h"
+#include "ppapi/c/dev/ppb_truetype_font_dev.h"
#include "ppapi/c/dev/ppb_url_util_dev.h"
#include "ppapi/c/dev/ppb_var_deprecated.h"
#include "ppapi/c/dev/ppb_video_capture_dev.h"
diff --git a/webkit/plugins/ppapi/ppapi_plugin_instance.cc b/webkit/plugins/ppapi/ppapi_plugin_instance.cc
index 886338b..10a6457 100644
--- a/webkit/plugins/ppapi/ppapi_plugin_instance.cc
+++ b/webkit/plugins/ppapi/ppapi_plugin_instance.cc
@@ -2125,6 +2125,7 @@ PP_Bool PluginInstance::GetScreenSize(PP_Instance instance, PP_Size* size) {
case ::ppapi::FLASH_FILE_SINGLETON_ID:
case ::ppapi::FLASH_FULLSCREEN_SINGLETON_ID:
case ::ppapi::FLASH_SINGLETON_ID:
+ case ::ppapi::TRUETYPE_FONT_SINGLETON_ID:
NOTIMPLEMENTED();
return NULL;
case ::ppapi::GAMEPAD_SINGLETON_ID: