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

Side by Side Diff: ppapi/proxy/ppb_pdf_proxy.cc

Issue 4752008: Add proxies for some of the PDF & Flash functionality. There are still a few... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 1 month 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ppapi/proxy/ppb_pdf_proxy.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Property Changes:
Added: svn:eol-style
+ LF
OLDNEW
(Empty)
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "ppapi/proxy/ppb_pdf_proxy.h"
6
7 #include <string.h> // For memcpy.
8
9 #include <map>
10
11 #include "base/linked_ptr.h"
12 #include "base/logging.h"
13 #include "build/build_config.h"
14 #include "ppapi/proxy/plugin_dispatcher.h"
15 #include "ppapi/proxy/plugin_resource.h"
16 #include "ppapi/proxy/ppapi_messages.h"
17 #include "webkit/glue/plugins/ppb_private.h"
18
19 namespace pp {
20 namespace proxy {
21
22 class PrivateFontFile : public PluginResource {
23 public:
24 PrivateFontFile() {}
25 virtual ~PrivateFontFile() {}
26
27 // Resource overrides.
28 virtual PrivateFontFile* AsPrivateFontFile() { return this; }
29
30 // Sees if we have a cache of the font table and returns a pointer to it.
31 // Returns NULL if we don't have it.
32 std::string* GetFontTable(uint32_t table) const;
33
34 std::string* AddFontTable(uint32_t table, const std::string& contents);
35
36 private:
37 typedef std::map<uint32_t, linked_ptr<std::string> > FontTableMap;
38 FontTableMap font_tables_;
39
40 DISALLOW_COPY_AND_ASSIGN(PrivateFontFile);
41 };
42
43 std::string* PrivateFontFile::GetFontTable(uint32_t table) const {
44 FontTableMap::const_iterator found = font_tables_.find(table);
45 if (found == font_tables_.end())
46 return NULL;
47 return found->second.get();
48 }
49
50 std::string* PrivateFontFile::AddFontTable(uint32_t table,
51 const std::string& contents) {
52 linked_ptr<std::string> heap_string(new std::string(contents));
53 font_tables_[table] = heap_string;
54 return heap_string.get();
55 }
56
57 namespace {
58
59 PP_Resource GetFontFileWithFallback(
60 PP_Module module_id,
61 const PP_FontDescription_Dev* description,
62 PP_PrivateFontCharset charset) {
63 SerializedFontDescription desc;
64 // TODO(brettw): serialize the description!
65
66 PP_Resource result = 0;
67 PluginDispatcher::Get()->Send(
68 new PpapiHostMsg_PPBPdf_GetFontFileWithFallback(
69 INTERFACE_ID_PPB_PDF, module_id, desc, charset, &result));
70 if (!result)
71 return 0;
72
73 linked_ptr<PrivateFontFile> object(new PrivateFontFile);
74 PluginDispatcher::Get()->plugin_resource_tracker()->AddResource(
75 result, object);
76 return result;
77 }
78
79 bool GetFontTableForPrivateFontFile(PP_Resource font_file,
80 uint32_t table,
81 void* output,
82 uint32_t* output_length) {
83 PrivateFontFile* object = PluginResource::GetAs<PrivateFontFile>(font_file);
84 if (!object)
85 return false;
86
87 std::string* contents = object->GetFontTable(table);
88 if (!contents) {
89 std::string deserialized;
90 PluginDispatcher::Get()->Send(
91 new PpapiHostMsg_PPBPdf_GetFontTableForPrivateFontFile(
92 INTERFACE_ID_PPB_PDF, font_file, table, &deserialized));
93 if (deserialized.empty())
94 return false;
95 contents = object->AddFontTable(table, deserialized);
96 }
97
98 *output_length = static_cast<uint32_t>(contents->size());
99 if (output)
100 memcpy(output, contents->c_str(), *output_length);
101 return true;
102 }
103
104 const PPB_Private ppb_private = {
105 NULL, // &GetLocalizedString,
106 NULL, // &GetResourceImage,
107 &GetFontFileWithFallback,
108 &GetFontTableForPrivateFontFile,
109 };
110
111 } // namespace
112
113 PPB_Pdf_Proxy::PPB_Pdf_Proxy(Dispatcher* dispatcher,
114 const void* target_interface)
115 : InterfaceProxy(dispatcher, target_interface) {
116 }
117
118 PPB_Pdf_Proxy::~PPB_Pdf_Proxy() {
119 }
120
121 const void* PPB_Pdf_Proxy::GetSourceInterface() const {
122 return &ppb_private;
123 }
124
125 InterfaceID PPB_Pdf_Proxy::GetInterfaceId() const {
126 return INTERFACE_ID_PPB_PDF;
127 }
128
129 void PPB_Pdf_Proxy::OnMessageReceived(const IPC::Message& msg) {
130 IPC_BEGIN_MESSAGE_MAP(PPB_Pdf_Proxy, msg)
131 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBPdf_GetFontFileWithFallback,
132 OnMsgGetFontFileWithFallback)
133 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBPdf_GetFontTableForPrivateFontFile,
134 OnMsgGetFontTableForPrivateFontFile)
135 IPC_END_MESSAGE_MAP()
136 // TODO(brettw): handle bad messages!
137 }
138
139 void PPB_Pdf_Proxy::OnMsgGetFontFileWithFallback(
140 PP_Module module,
141 const SerializedFontDescription& in_desc,
142 int32_t charset,
143 PP_Resource* result) {
144 PP_FontDescription_Dev desc;
145 // TODO(brettw) deserialize this value!
146 *result = ppb_pdf_target()->GetFontFileWithFallback(module, &desc,
147 static_cast<PP_PrivateFontCharset>(charset));
148 }
149
150 void PPB_Pdf_Proxy::OnMsgGetFontTableForPrivateFontFile(PP_Resource font_file,
151 uint32_t table,
152 std::string* result) {
153 // TODO(brettw): It would be nice not to copy here. At least on Linux,
154 // we can map the font file into shared memory and read it that way.
155 uint32_t table_length = 0;
156 if (!ppb_pdf_target()->GetFontTableForPrivateFontFile(
157 font_file, table, NULL, &table_length))
158 return;
159
160 result->resize(table_length);
161 ppb_pdf_target()->GetFontTableForPrivateFontFile(font_file, table,
162 const_cast<char*>(result->c_str()), &table_length);
163 }
164
165 } // namespace proxy
166 } // namespace pp
OLDNEW
« no previous file with comments | « ppapi/proxy/ppb_pdf_proxy.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698