| Index: ppapi/proxy/flash_resource.cc | 
| diff --git a/ppapi/proxy/flash_resource.cc b/ppapi/proxy/flash_resource.cc | 
| index 886024768cf5efb12b384fd7faec1ad86c3ed3ed..854996e6dd71da4497e86f4c4b62ec76060a0947 100644 | 
| --- a/ppapi/proxy/flash_resource.cc | 
| +++ b/ppapi/proxy/flash_resource.cc | 
| @@ -11,14 +11,19 @@ | 
| #include "base/time.h" | 
| #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_dispatcher.h" | 
| #include "ppapi/proxy/plugin_globals.h" | 
| #include "ppapi/proxy/ppapi_messages.h" | 
| +#include "ppapi/proxy/serialized_structs.h" | 
| #include "ppapi/shared_impl/ppapi_preferences.h" | 
| #include "ppapi/shared_impl/scoped_pp_var.h" | 
| #include "ppapi/shared_impl/time_conversion.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 { | 
| @@ -165,5 +170,75 @@ PP_Var FlashResource::GetSetting(PP_Instance instance, | 
| return PP_MakeUndefined(); | 
| } | 
|  | 
| +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) { | 
| +  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 | 
|  |