1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file.
4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef CONTENT_BROWSER_RENDERER_HOST_PEPPER_PEPPER_TRUETYPE_FONT_HOST_H_
6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define CONTENT_BROWSER_RENDERER_HOST_PEPPER_PEPPER_TRUETYPE_FONT_HOST_H_
7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include <string>
9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include <vector>
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/compiler_specific.h"
12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/memory/scoped_ptr.h"
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/memory/weak_ptr.h"
14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/sequenced_task_runner.h"
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/browser/renderer_host/pepper/pepper_truetype_font.h"
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/common/content_export.h"
17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ppapi/host/host_message_context.h"
18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ppapi/host/resource_host.h"
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
20116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace content {
21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
22116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass BrowserPpapiHost;
23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass CONTENT_EXPORT PepperTrueTypeFontHost : public ppapi::host::ResourceHost {
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public:
26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  PepperTrueTypeFontHost(BrowserPpapiHost* host,
27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                         PP_Instance instance,
28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                         PP_Resource resource,
29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                         const ppapi::proxy::SerializedTrueTypeFontDesc& desc);
30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual ~PepperTrueTypeFontHost();
32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual int32_t OnResourceMessageReceived(
34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      const IPC::Message& msg,
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      ppapi::host::HostMessageContext* context) OVERRIDE;
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private:
38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  int32_t OnHostMsgGetTableTags(ppapi::host::HostMessageContext* context);
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  int32_t OnHostMsgGetTable(ppapi::host::HostMessageContext* context,
40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                            uint32_t table,
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                            int32_t offset,
42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                            int32_t max_data_length);
43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void OnInitializeComplete(ppapi::proxy::SerializedTrueTypeFontDesc* desc,
45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                            int32_t result);
46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void OnGetTableTagsComplete(std::vector<uint32_t>* tags,
47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                              ppapi::host::ReplyMessageContext reply_context,
48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                              int32_t result);
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void OnGetTableComplete(std::string* data,
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                          ppapi::host::ReplyMessageContext reply_context,
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                          int32_t result);
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // We use a SequencedTaskRunner to run potentially slow font operations and
54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // ensure that Initialize completes before we make any calls to get font data.
55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Even though we allow multiple pending GetTableTags and GetTable calls, this
56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // implies that they run serially.
57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  scoped_refptr<base::SequencedTaskRunner> task_runner_;
58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  scoped_refptr<PepperTrueTypeFont> font_;
60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  bool initialize_completed_;
61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  base::WeakPtrFactory<PepperTrueTypeFontHost> weak_factory_;
63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(PepperTrueTypeFontHost);
65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch};
66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace content
68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif  // CONTENT_BROWSER_RENDERER_HOST_PEPPER_PEPPER_TRUETYPE_FONT_HOST_H_
70