summaryrefslogtreecommitdiffstats
path: root/ppapi/proxy/flash_resource.cc
diff options
context:
space:
mode:
Diffstat (limited to 'ppapi/proxy/flash_resource.cc')
-rw-r--r--ppapi/proxy/flash_resource.cc76
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