diff options
Diffstat (limited to 'ppapi/proxy/flash_resource.cc')
-rw-r--r-- | ppapi/proxy/flash_resource.cc | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/ppapi/proxy/flash_resource.cc b/ppapi/proxy/flash_resource.cc index be5acd3..7c278c1 100644 --- a/ppapi/proxy/flash_resource.cc +++ b/ppapi/proxy/flash_resource.cc @@ -6,9 +6,15 @@ #include "ppapi/c/pp_errors.h" #include "ppapi/c/private/ppb_flash.h" +#include "ppapi/c/trusted/ppb_browser_font_trusted.h" #include "ppapi/proxy/plugin_globals.h" #include "ppapi/proxy/ppapi_messages.h" +#include "ppapi/proxy/serialized_structs.h" #include "ppapi/shared_impl/var.h" +#include "ppapi/thunk/enter.h" +#include "ppapi/thunk/ppb_url_request_info_api.h" + +using ppapi::thunk::EnterResourceNoLock; namespace ppapi { namespace proxy { @@ -56,5 +62,75 @@ PP_Bool FlashResource::SetCrashData(PP_Instance instance, return PP_FALSE; } +void FlashResource::SetInstanceAlwaysOnTop(PP_Instance instance, + PP_Bool on_top) { + Post(RENDERER, PpapiHostMsg_Flash_SetInstanceAlwaysOnTop(PP_ToBool(on_top))); +} + +PP_Bool FlashResource::DrawGlyphs( + PP_Instance instance, + PP_Resource pp_image_data, + const PP_BrowserFont_Trusted_Description* font_desc, + uint32_t color, + const PP_Point* position, + const PP_Rect* clip, + const float transformation[3][3], + PP_Bool allow_subpixel_aa, + uint32_t glyph_count, + const uint16_t glyph_indices[], + const PP_Point glyph_advances[]) { + EnterResourceNoLock<thunk::PPB_ImageData_API> enter(pp_image_data, true); + if (enter.failed()) + return PP_FALSE; + // The instance parameter isn't strictly necessary but we check that it + // matches anyway. + if (enter.resource()->pp_instance() != instance) + return PP_FALSE; + + PPBFlash_DrawGlyphs_Params params; + params.image_data = enter.resource()->host_resource(); + params.font_desc.SetFromPPBrowserFontDescription(*font_desc); + params.color = color; + params.position = *position; + params.clip = *clip; + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 3; j++) + params.transformation[i][j] = transformation[i][j]; + } + params.allow_subpixel_aa = allow_subpixel_aa; + + params.glyph_indices.insert(params.glyph_indices.begin(), + &glyph_indices[0], + &glyph_indices[glyph_count]); + params.glyph_advances.insert(params.glyph_advances.begin(), + &glyph_advances[0], + &glyph_advances[glyph_count]); + + // This has to be synchronous because the caller may want to composite on + // top of the resulting text after the call is complete. + int32_t result = SyncCall<IPC::Message>(RENDERER, + PpapiHostMsg_Flash_DrawGlyphs(params)); + return PP_FromBool(result == PP_OK); +} + +int32_t FlashResource::Navigate(PP_Instance instance, + PP_Resource request_info, + const char* target, + PP_Bool from_user_action) { + thunk::EnterResourceNoLock<thunk::PPB_URLRequestInfo_API> enter(request_info, + true); + if (enter.failed()) + return PP_ERROR_BADRESOURCE; + return SyncCall<IPC::Message>(RENDERER, PpapiHostMsg_Flash_Navigate( + enter.object()->GetData(), target, PP_ToBool(from_user_action))); +} + +PP_Bool FlashResource::IsRectTopmost(PP_Instance instance, + const PP_Rect* rect) { + int32_t result = SyncCall<IPC::Message>(RENDERER, + PpapiHostMsg_Flash_IsRectTopmost(*rect)); + return PP_FromBool(result == PP_OK); +} + } // namespace proxy } // namespace ppapi |