OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ppapi/proxy/ppb_pdf_proxy.h" | 5 #include "ppapi/proxy/ppb_pdf_proxy.h" |
6 | 6 |
7 #include <string.h> // For memcpy. | 7 #include <string.h> // For memcpy. |
8 | 8 |
9 #include <map> | 9 #include <map> |
10 | 10 |
11 #include "base/logging.h" | 11 #include "base/logging.h" |
12 #include "base/memory/linked_ptr.h" | 12 #include "base/memory/linked_ptr.h" |
13 #include "build/build_config.h" | 13 #include "build/build_config.h" |
14 #include "ppapi/c/private/ppb_pdf.h" | 14 #include "ppapi/c/private/ppb_pdf.h" |
15 #include "ppapi/proxy/plugin_dispatcher.h" | 15 #include "ppapi/proxy/plugin_dispatcher.h" |
16 #include "ppapi/proxy/plugin_resource.h" | |
17 #include "ppapi/proxy/plugin_resource_tracker.h" | 16 #include "ppapi/proxy/plugin_resource_tracker.h" |
18 #include "ppapi/proxy/ppapi_messages.h" | 17 #include "ppapi/proxy/ppapi_messages.h" |
19 #include "ppapi/thunk/enter.h" | 18 #include "ppapi/thunk/enter.h" |
20 #include "ppapi/thunk/ppb_pdf_api.h" | 19 #include "ppapi/thunk/ppb_pdf_api.h" |
21 | 20 |
22 using ppapi::HostResource; | 21 using ppapi::HostResource; |
| 22 using ppapi::Resource; |
23 using ppapi::thunk::PPB_PDFFont_API; | 23 using ppapi::thunk::PPB_PDFFont_API; |
24 using ppapi::thunk::EnterResource; | 24 using ppapi::thunk::EnterResource; |
25 | 25 |
26 namespace pp { | 26 namespace pp { |
27 namespace proxy { | 27 namespace proxy { |
28 | 28 |
29 class PrivateFontFile : public PluginResource, | 29 class PrivateFontFile : public Resource, |
30 public PPB_PDFFont_API { | 30 public PPB_PDFFont_API { |
31 public: | 31 public: |
32 PrivateFontFile(const HostResource& resource) : PluginResource(resource) { | 32 PrivateFontFile(const HostResource& resource) : Resource(resource) { |
33 } | 33 } |
34 virtual ~PrivateFontFile() {} | 34 virtual ~PrivateFontFile() {} |
35 | 35 |
36 PPB_PDFFont_API* AsPPB_PDFFont_API() { return this; } | 36 PPB_PDFFont_API* AsPPB_PDFFont_API() { return this; } |
37 | 37 |
38 // Sees if we have a cache of the font table and returns a pointer to it. | 38 // Sees if we have a cache of the font table and returns a pointer to it. |
39 // Returns NULL if we don't have it. | 39 // Returns NULL if we don't have it. |
40 std::string* GetFontTable(uint32_t table) const; | 40 std::string* GetFontTable(uint32_t table) const; |
41 | 41 |
42 std::string* AddFontTable(uint32_t table, const std::string& contents); | 42 std::string* AddFontTable(uint32_t table, const std::string& contents); |
(...skipping 30 matching lines...) Expand all Loading... |
73 return 0; | 73 return 0; |
74 | 74 |
75 SerializedFontDescription desc; | 75 SerializedFontDescription desc; |
76 desc.SetFromPPFontDescription(dispatcher, *description, true); | 76 desc.SetFromPPFontDescription(dispatcher, *description, true); |
77 | 77 |
78 HostResource result; | 78 HostResource result; |
79 dispatcher->Send(new PpapiHostMsg_PPBPDF_GetFontFileWithFallback( | 79 dispatcher->Send(new PpapiHostMsg_PPBPDF_GetFontFileWithFallback( |
80 INTERFACE_ID_PPB_PDF, instance, desc, charset, &result)); | 80 INTERFACE_ID_PPB_PDF, instance, desc, charset, &result)); |
81 if (result.is_null()) | 81 if (result.is_null()) |
82 return 0; | 82 return 0; |
83 | 83 return (new PrivateFontFile(result))->GetReference(); |
84 return PluginResourceTracker::GetInstance()->AddResource( | |
85 new PrivateFontFile(result)); | |
86 } | 84 } |
87 | 85 |
88 bool GetFontTableForPrivateFontFile(PP_Resource font_file, | 86 bool GetFontTableForPrivateFontFile(PP_Resource font_file, |
89 uint32_t table, | 87 uint32_t table, |
90 void* output, | 88 void* output, |
91 uint32_t* output_length) { | 89 uint32_t* output_length) { |
92 EnterResource<PPB_PDFFont_API> enter(font_file, true); | 90 EnterResource<PPB_PDFFont_API> enter(font_file, true); |
93 if (enter.failed()) | 91 if (enter.failed()) |
94 return false; | 92 return false; |
95 | 93 |
96 PrivateFontFile* object = static_cast<PrivateFontFile*>(enter.object()); | 94 PrivateFontFile* object = static_cast<PrivateFontFile*>(enter.object()); |
97 PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance( | 95 PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance( |
98 object->instance()); | 96 object->pp_instance()); |
99 if (!dispatcher) | 97 if (!dispatcher) |
100 return false; | 98 return false; |
101 | 99 |
102 std::string* contents = object->GetFontTable(table); | 100 std::string* contents = object->GetFontTable(table); |
103 if (!contents) { | 101 if (!contents) { |
104 std::string deserialized; | 102 std::string deserialized; |
105 dispatcher->Send(new PpapiHostMsg_PPBPDF_GetFontTableForPrivateFontFile( | 103 dispatcher->Send(new PpapiHostMsg_PPBPDF_GetFontTableForPrivateFontFile( |
106 INTERFACE_ID_PPB_PDF, object->host_resource(), table, &deserialized)); | 104 INTERFACE_ID_PPB_PDF, object->host_resource(), table, &deserialized)); |
107 if (deserialized.empty()) | 105 if (deserialized.empty()) |
108 return false; | 106 return false; |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
185 font_file.host_resource(), table, NULL, &table_length)) | 183 font_file.host_resource(), table, NULL, &table_length)) |
186 return; | 184 return; |
187 | 185 |
188 result->resize(table_length); | 186 result->resize(table_length); |
189 ppb_pdf_target()->GetFontTableForPrivateFontFile(font_file.host_resource(), | 187 ppb_pdf_target()->GetFontTableForPrivateFontFile(font_file.host_resource(), |
190 table, const_cast<char*>(result->c_str()), &table_length); | 188 table, const_cast<char*>(result->c_str()), &table_length); |
191 } | 189 } |
192 | 190 |
193 } // namespace proxy | 191 } // namespace proxy |
194 } // namespace pp | 192 } // namespace pp |
OLD | NEW |