[M108 Aura Migration][NaCl][PPFwk] Add error logs + SVACE/DLOG/Static analysis fix
[platform/framework/web/chromium-efl.git] / content / browser / renderer_host / pepper / pepper_truetype_font_list_host.cc
1 // Copyright 2013 The Chromium Authors
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 "content/browser/renderer_host/pepper/pepper_truetype_font_list_host.h"
6
7 #include <stdint.h>
8
9 #include <algorithm>
10
11 #include "base/logging.h"
12 #include "base/numerics/safe_conversions.h"
13 #include "content/browser/renderer_host/pepper/pepper_truetype_font_list.h"
14 #include "content/common/font_list.h"
15 #include "content/public/browser/browser_ppapi_host.h"
16 #include "ppapi/host/dispatch_host_message.h"
17 #include "ppapi/host/host_message_context.h"
18 #include "ppapi/host/resource_message_filter.h"
19 #include "ppapi/proxy/ppapi_messages.h"
20
21 namespace content {
22
23 namespace {
24
25 // Handles the font list request on the blocking pool.
26 class TrueTypeFontMessageFilter : public ppapi::host::ResourceMessageFilter {
27  public:
28   TrueTypeFontMessageFilter();
29
30   TrueTypeFontMessageFilter(const TrueTypeFontMessageFilter&) = delete;
31   TrueTypeFontMessageFilter& operator=(const TrueTypeFontMessageFilter&) =
32       delete;
33
34   // ppapi::host::ResourceMessageFilter implementation.
35   scoped_refptr<base::SequencedTaskRunner> OverrideTaskRunnerForMessage(
36       const IPC::Message& msg) override;
37   int32_t OnResourceMessageReceived(
38       const IPC::Message& msg,
39       ppapi::host::HostMessageContext* context) override;
40
41  private:
42   ~TrueTypeFontMessageFilter() override;
43
44   // Message handlers.
45   int32_t OnHostMsgGetFontFamilies(ppapi::host::HostMessageContext* context);
46   int32_t OnHostMsgGetFontsInFamily(ppapi::host::HostMessageContext* context,
47                                     const std::string& family);
48 };
49
50 TrueTypeFontMessageFilter::TrueTypeFontMessageFilter() {}
51
52 TrueTypeFontMessageFilter::~TrueTypeFontMessageFilter() {}
53
54 scoped_refptr<base::SequencedTaskRunner>
55 TrueTypeFontMessageFilter::OverrideTaskRunnerForMessage(
56     const IPC::Message& msg) {
57   // Use the font list SequencedTaskRunner to get the font list (currently the
58   // only message) since getting the font list is non-threadsafe on Linux (for
59   // versions of Pango predating 2013).
60   return GetFontListTaskRunner();
61 }
62
63 int32_t TrueTypeFontMessageFilter::OnResourceMessageReceived(
64     const IPC::Message& msg,
65     ppapi::host::HostMessageContext* context) {
66   PPAPI_BEGIN_MESSAGE_MAP(TrueTypeFontMessageFilter, msg)
67     PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(
68         PpapiHostMsg_TrueTypeFontSingleton_GetFontFamilies,
69         OnHostMsgGetFontFamilies)
70     PPAPI_DISPATCH_HOST_RESOURCE_CALL(
71         PpapiHostMsg_TrueTypeFontSingleton_GetFontsInFamily,
72         OnHostMsgGetFontsInFamily)
73   PPAPI_END_MESSAGE_MAP()
74   LOG(ERROR) << "Resource message unresolved";
75   return PP_ERROR_FAILED;
76 }
77
78 int32_t TrueTypeFontMessageFilter::OnHostMsgGetFontFamilies(
79     ppapi::host::HostMessageContext* context) {
80   // OK to use "slow blocking" version since we're on the blocking pool.
81   std::vector<std::string> font_families;
82   GetFontFamilies_SlowBlocking(&font_families);
83   // Sort the names in case the host platform returns them out of order.
84   std::sort(font_families.begin(), font_families.end());
85
86   context->reply_msg =
87       PpapiPluginMsg_TrueTypeFontSingleton_GetFontFamiliesReply(font_families);
88   return base::checked_cast<int32_t>(font_families.size());
89 }
90
91 int32_t TrueTypeFontMessageFilter::OnHostMsgGetFontsInFamily(
92     ppapi::host::HostMessageContext* context,
93     const std::string& family) {
94   // OK to use "slow blocking" version since we're on the blocking pool.
95   std::vector<ppapi::proxy::SerializedTrueTypeFontDesc> fonts_in_family;
96   GetFontsInFamily_SlowBlocking(family, &fonts_in_family);
97
98   context->reply_msg =
99       PpapiPluginMsg_TrueTypeFontSingleton_GetFontsInFamilyReply(
100           fonts_in_family);
101   return base::checked_cast<int32_t>(fonts_in_family.size());
102 }
103
104 }  // namespace
105
106 PepperTrueTypeFontListHost::PepperTrueTypeFontListHost(BrowserPpapiHost* host,
107                                                        PP_Instance instance,
108                                                        PP_Resource resource)
109     : ResourceHost(host->GetPpapiHost(), instance, resource) {
110   AddFilter(scoped_refptr<ppapi::host::ResourceMessageFilter>(
111       new TrueTypeFontMessageFilter()));
112 }
113
114 PepperTrueTypeFontListHost::~PepperTrueTypeFontListHost() {}
115
116 }  // namespace content