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

Unified 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 side-by-side diff with in-line comments
Download patch
« ppapi/proxy/ppb_flash_proxy.cc ('K') | « ppapi/proxy/ppb_pdf_proxy.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ppapi/proxy/ppb_pdf_proxy.cc
===================================================================
--- ppapi/proxy/ppb_pdf_proxy.cc (revision 0)
+++ ppapi/proxy/ppb_pdf_proxy.cc (revision 0)
@@ -0,0 +1,166 @@
+// Copyright (c) 2010 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/ppb_pdf_proxy.h"
+
+#include <string.h> // For memcpy
viettrungluu 2010/11/11 20:27:51 "
+
+#include <map>
+
+#include "base/linked_ptr.h"
+#include "base/logging.h"
+#include "build/build_config.h"
+#include "ppapi/proxy/plugin_dispatcher.h"
+#include "ppapi/proxy/plugin_resource.h"
+#include "ppapi/proxy/ppapi_messages.h"
+#include "webkit/glue/plugins/ppb_private.h"
+
+namespace pp {
+namespace proxy {
+
+class PrivateFontFile : public PluginResource {
+ public:
+ PrivateFontFile() {}
+ virtual ~PrivateFontFile() {}
+
+ // Resource overrides.
+ virtual PrivateFontFile* AsPrivateFontFile() { return this; }
+
+ // Sees if we have a cache of the font table and returns a pointer to it.
+ // Returns NULL if we don't have it.
+ std::string* GetFontTable(uint32_t table) const;
+
+ std::string* AddFontTable(uint32_t table, const std::string& contents);
+
+ private:
+ typedef std::map<uint32_t, linked_ptr<std::string> > FontTableMap;
+ FontTableMap font_tables_;
+
+ DISALLOW_COPY_AND_ASSIGN(PrivateFontFile);
+};
+
+std::string* PrivateFontFile::GetFontTable(uint32_t table) const {
+ FontTableMap::const_iterator found = font_tables_.find(table);
+ if (found == font_tables_.end())
+ return NULL;
+ return found->second.get();
+}
+
+std::string* PrivateFontFile::AddFontTable(uint32_t table,
+ const std::string& contents) {
+ linked_ptr<std::string> heap_string(new std::string(contents));
+ font_tables_[table] = heap_string;
+ return heap_string.get();
+}
+
+namespace {
+
+PP_Resource GetFontFileWithFallback(
+ PP_Module module_id,
+ const PP_FontDescription_Dev* description,
+ PP_PrivateFontCharset charset) {
+ SerializedFontDescription desc;
+ // TODO(brettw): serialize the description!
+
+ PP_Resource result = 0;
+ PluginDispatcher::Get()->Send(
+ new PpapiHostMsg_PPBPdf_GetFontFileWithFallback(
+ INTERFACE_ID_PPB_PDF, module_id, desc, charset, &result));
+ if (!result)
+ return 0;
+
+ linked_ptr<PrivateFontFile> object(new PrivateFontFile);
+ PluginDispatcher::Get()->plugin_resource_tracker()->AddResource(
+ result, object);
+ return result;
+}
+
+bool GetFontTableForPrivateFontFile(PP_Resource font_file,
+ uint32_t table,
+ void* output,
+ uint32_t* output_length) {
+ PrivateFontFile* object = PluginResource::GetAs<PrivateFontFile>(font_file);
+ if (!object)
+ return false;
+
+ std::string* contents = object->GetFontTable(table);
+ if (!contents) {
+ std::string deserialized;
+ PluginDispatcher::Get()->Send(
+ new PpapiHostMsg_PPBPdf_GetFontTableForPrivateFontFile(
+ INTERFACE_ID_PPB_PDF, font_file, table, &deserialized));
+ if (deserialized.empty())
+ return false;
+ contents = object->AddFontTable(table, deserialized);
+ }
+
+ *output_length = static_cast<uint32_t>(contents->size());
+ if (output)
+ memcpy(output, contents->c_str(), *output_length);
+ return true;
+}
+
+const PPB_Private ppb_private = {
+ NULL, // &GetLocalizedString,
viettrungluu 2010/11/11 20:27:51 Are these TODOs?
brettw 2010/11/11 20:49:19 Not unless we want to run PDF out of process.
+ NULL, // &GetResourceImage,
+ &GetFontFileWithFallback,
+ &GetFontTableForPrivateFontFile,
+};
+
+} // namespace
+
+PPB_Pdf_Proxy::PPB_Pdf_Proxy(Dispatcher* dispatcher,
+ const void* target_interface)
+ : InterfaceProxy(dispatcher, target_interface) {
+}
+
+PPB_Pdf_Proxy::~PPB_Pdf_Proxy() {
+}
+
+const void* PPB_Pdf_Proxy::GetSourceInterface() const {
+ return &ppb_private;
+}
+
+InterfaceID PPB_Pdf_Proxy::GetInterfaceId() const {
+ return INTERFACE_ID_PPB_PDF;
+}
+
+void PPB_Pdf_Proxy::OnMessageReceived(const IPC::Message& msg) {
+ IPC_BEGIN_MESSAGE_MAP(PPB_Pdf_Proxy, msg)
+ IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBPdf_GetFontFileWithFallback,
+ OnMsgGetFontFileWithFallback)
+ IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBPdf_GetFontTableForPrivateFontFile,
+ OnMsgGetFontTableForPrivateFontFile)
+ IPC_END_MESSAGE_MAP()
+ // TODO(brettw): handle bad messages!
+}
+
+void PPB_Pdf_Proxy::OnMsgGetFontFileWithFallback(
+ PP_Module module,
+ const SerializedFontDescription& in_desc,
+ int32_t charset,
+ PP_Resource* result) {
+ PP_FontDescription_Dev desc;
+ // TODO(brettw) deserialize this value!
+ *result = ppb_pdf_target()->GetFontFileWithFallback(module, &desc,
+ static_cast<PP_PrivateFontCharset>(charset));
+}
+
+void PPB_Pdf_Proxy::OnMsgGetFontTableForPrivateFontFile(PP_Resource font_file,
+ uint32_t table,
+ std::string* result) {
+ // TODO(brettw): It would be nice not to copy here. At least on Linux,
+ // we can map the font file into shared memory and read it that way.
+ uint32_t table_length = 0;
+ if (!ppb_pdf_target()->GetFontTableForPrivateFontFile(
+ font_file, table, NULL, &table_length))
+ return;
+
+ result->resize(table_length);
+ ppb_pdf_target()->GetFontTableForPrivateFontFile(font_file, table,
+ const_cast<char*>(result->c_str()), &table_length);
+}
+
+} // namespace proxy
+} // namespace pp
Property changes on: ppapi/proxy/ppb_pdf_proxy.cc
___________________________________________________________________
Added: svn:eol-style
+ LF
« ppapi/proxy/ppb_flash_proxy.cc ('K') | « ppapi/proxy/ppb_pdf_proxy.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698