Home | History | Annotate | Download | only in proxy
      1 // Copyright (c) 2013 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/truetype_font_resource.h"
      6 
      7 #include "base/bind.h"
      8 #include "ipc/ipc_message.h"
      9 #include "ppapi/c/pp_errors.h"
     10 #include "ppapi/proxy/ppapi_messages.h"
     11 #include "ppapi/shared_impl/array_writer.h"
     12 #include "ppapi/shared_impl/ppapi_globals.h"
     13 #include "ppapi/shared_impl/resource_tracker.h"
     14 #include "ppapi/shared_impl/var.h"
     15 #include "ppapi/thunk/enter.h"
     16 
     17 using ppapi::thunk::EnterResourceNoLock;
     18 using ppapi::thunk::PPB_TrueTypeFont_API;
     19 
     20 namespace {
     21 
     22 }  // namespace
     23 
     24 namespace ppapi {
     25 namespace proxy {
     26 
     27 TrueTypeFontResource::TrueTypeFontResource(
     28     Connection connection,
     29     PP_Instance instance,
     30     const PP_TrueTypeFontDesc_Dev& desc)
     31     : PluginResource(connection, instance) {
     32   SerializedTrueTypeFontDesc serialized_desc;
     33   serialized_desc.SetFromPPTrueTypeFontDesc(desc);
     34   SendCreate(RENDERER, PpapiHostMsg_TrueTypeFont_Create(serialized_desc));
     35 }
     36 
     37 TrueTypeFontResource::~TrueTypeFontResource() {
     38 }
     39 
     40 PPB_TrueTypeFont_API* TrueTypeFontResource::AsPPB_TrueTypeFont_API() {
     41   return this;
     42 }
     43 
     44 int32_t TrueTypeFontResource::Describe(
     45     PP_TrueTypeFontDesc_Dev* desc,
     46     scoped_refptr<TrackedCallback> callback) {
     47   Call<PpapiPluginMsg_TrueTypeFont_DescribeReply>(RENDERER,
     48       PpapiHostMsg_TrueTypeFont_Describe(),
     49       base::Bind(&TrueTypeFontResource::OnPluginMsgDescribeComplete, this,
     50                  callback, desc));
     51   return PP_OK_COMPLETIONPENDING;
     52 }
     53 
     54 int32_t TrueTypeFontResource::GetTableTags(
     55     const PP_ArrayOutput& output,
     56     scoped_refptr<TrackedCallback> callback) {
     57   Call<PpapiPluginMsg_TrueTypeFont_GetTableTagsReply>(RENDERER,
     58       PpapiHostMsg_TrueTypeFont_GetTableTags(),
     59       base::Bind(&TrueTypeFontResource::OnPluginMsgGetTableTagsComplete, this,
     60                  callback, output));
     61   return PP_OK_COMPLETIONPENDING;
     62 }
     63 
     64 int32_t TrueTypeFontResource::GetTable(
     65     uint32_t table,
     66     int32_t offset,
     67     int32_t max_data_length,
     68     const PP_ArrayOutput& output,
     69     scoped_refptr<TrackedCallback> callback) {
     70   Call<PpapiPluginMsg_TrueTypeFont_GetTableReply>(RENDERER,
     71       PpapiHostMsg_TrueTypeFont_GetTable(table, offset, max_data_length),
     72       base::Bind(&TrueTypeFontResource::OnPluginMsgGetTableComplete, this,
     73                  callback, output));
     74   return PP_OK_COMPLETIONPENDING;
     75 }
     76 
     77 void TrueTypeFontResource::OnPluginMsgDescribeComplete(
     78     scoped_refptr<TrackedCallback> callback,
     79     PP_TrueTypeFontDesc_Dev* pp_desc,
     80     const ResourceMessageReplyParams& params,
     81     const ppapi::proxy::SerializedTrueTypeFontDesc& desc) {
     82   int32_t result = params.result();
     83   if (result == PP_OK)
     84     desc.CopyToPPTrueTypeFontDesc(pp_desc);
     85 
     86   callback->Run(result);
     87 }
     88 
     89 void TrueTypeFontResource::OnPluginMsgGetTableTagsComplete(
     90     scoped_refptr<TrackedCallback> callback,
     91     PP_ArrayOutput array_output,
     92     const ResourceMessageReplyParams& params,
     93     const std::vector<uint32_t>& tag_array) {
     94   // The result code should contain the data size if it's positive.
     95   int32_t result = params.result();
     96   DCHECK((result < 0 && tag_array.size() == 0) ||
     97          result == static_cast<int32_t>(tag_array.size()));
     98 
     99   ArrayWriter output;
    100   output.set_pp_array_output(array_output);
    101   if (output.is_valid())
    102     output.StoreArray(&tag_array[0], std::max(0, result));
    103   else
    104     result = PP_ERROR_FAILED;
    105 
    106   callback->Run(result);
    107 }
    108 
    109 void TrueTypeFontResource::OnPluginMsgGetTableComplete(
    110     scoped_refptr<TrackedCallback> callback,
    111     PP_ArrayOutput array_output,
    112     const ResourceMessageReplyParams& params,
    113     const std::string& data) {
    114   // The result code should contain the data size if it's positive.
    115   int32_t result = params.result();
    116   DCHECK((result < 0 && data.size() == 0) ||
    117          result == static_cast<int32_t>(data.size()));
    118 
    119   ArrayWriter output;
    120   output.set_pp_array_output(array_output);
    121   if (output.is_valid())
    122     output.StoreArray(data.data(), std::max(0, result));
    123   else
    124     result = PP_ERROR_FAILED;
    125 
    126   callback->Run(result);
    127 }
    128 
    129 }  // namespace proxy
    130 }  // namespace ppapi
    131