15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
558e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch#ifndef CONTENT_CHILD_BROWSER_FONT_RESOURCE_TRUSTED_H_
658e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch#define CONTENT_CHILD_BROWSER_FONT_RESOURCE_TRUSTED_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_bool.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_instance.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_resource.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_stdint.h"
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/proxy/plugin_resource.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/shared_impl/ppapi_preferences.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/thunk/ppb_browser_font_trusted_api.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SkCanvas;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace blink {
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebFont;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2658e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdochnamespace content {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2858e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdochclass BrowserFontResource_Trusted
2958e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch    : public ppapi::proxy::PluginResource,
3058e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch      public ppapi::thunk::PPB_BrowserFont_Trusted_API {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
3258e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch  BrowserFontResource_Trusted(ppapi::proxy::Connection connection,
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              PP_Instance instance,
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              const PP_BrowserFont_Trusted_Description& desc,
3558e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch                              const ppapi::Preferences& prefs);
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Validates the parameters in thee description. Can be called on any thread.
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static bool IsPPFontDescriptionValid(
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const PP_BrowserFont_Trusted_Description& desc);
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Resource override.
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ::ppapi::thunk::PPB_BrowserFont_Trusted_API*
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      AsPPB_BrowserFont_Trusted_API() OVERRIDE;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // PPB_BrowserFont_Trusted_API implementation.
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual PP_Bool Describe(PP_BrowserFont_Trusted_Description* description,
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           PP_BrowserFont_Trusted_Metrics* metrics) OVERRIDE;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual PP_Bool DrawTextAt(PP_Resource image_data,
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             const PP_BrowserFont_Trusted_TextRun* text,
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             const PP_Point* position,
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             uint32_t color,
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             const PP_Rect* clip,
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             PP_Bool image_data_is_opaque) OVERRIDE;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual int32_t MeasureText(
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const PP_BrowserFont_Trusted_TextRun* text) OVERRIDE;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual uint32_t CharacterOffsetForPixel(
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const PP_BrowserFont_Trusted_TextRun* text,
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int32_t pixel_position) OVERRIDE;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual int32_t PixelOffsetForCharacter(
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const PP_BrowserFont_Trusted_TextRun* text,
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      uint32_t char_offset) OVERRIDE;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
6458e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch  virtual ~BrowserFontResource_Trusted();
6558e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Internal version of DrawTextAt that takes a mapped PlatformCanvas.
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void DrawTextToCanvas(SkCanvas* destination,
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        const PP_BrowserFont_Trusted_TextRun& text,
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        const PP_Point* position,
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        uint32_t color,
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        const PP_Rect* clip,
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        PP_Bool image_data_is_opaque);
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  scoped_ptr<blink::WebFont> font_;
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(BrowserFontResource_Trusted);
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8058e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch}  // namespace content
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8258e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch#endif  // CONTENT_CHILD_BROWSER_FONT_RESOURCE_TRUSTED_H_
83