Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(616)

Side by Side Diff: ppapi/proxy/ppb_flash_proxy.cc

Issue 10091003: Convert flash to thunk (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ppapi/proxy/ppb_flash_proxy.h ('k') | ppapi/proxy/ppb_instance_proxy.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ppapi/proxy/ppb_flash_proxy.h" 5 #include "ppapi/proxy/ppb_flash_proxy.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/message_loop.h" 8 #include "base/message_loop.h"
9 #include "base/time.h" 9 #include "base/time.h"
10 #include "ppapi/c/dev/ppb_font_dev.h" 10 #include "ppapi/c/dev/ppb_font_dev.h"
11 #include "ppapi/c/dev/ppb_var_deprecated.h" 11 #include "ppapi/c/dev/ppb_var_deprecated.h"
12 #include "ppapi/c/pp_errors.h" 12 #include "ppapi/c/pp_errors.h"
13 #include "ppapi/c/pp_resource.h" 13 #include "ppapi/c/pp_resource.h"
14 #include "ppapi/c/private/ppb_flash.h" 14 #include "ppapi/c/private/ppb_flash.h"
15 #include "ppapi/proxy/host_dispatcher.h" 15 #include "ppapi/proxy/host_dispatcher.h"
16 #include "ppapi/proxy/plugin_dispatcher.h" 16 #include "ppapi/proxy/plugin_dispatcher.h"
17 #include "ppapi/proxy/plugin_globals.h" 17 #include "ppapi/proxy/plugin_globals.h"
18 #include "ppapi/proxy/plugin_proxy_delegate.h" 18 #include "ppapi/proxy/plugin_proxy_delegate.h"
19 #include "ppapi/proxy/ppapi_messages.h" 19 #include "ppapi/proxy/ppapi_messages.h"
20 #include "ppapi/proxy/proxy_module.h" 20 #include "ppapi/proxy/proxy_module.h"
21 #include "ppapi/proxy/serialized_var.h" 21 #include "ppapi/proxy/serialized_var.h"
22 #include "ppapi/shared_impl/ppapi_globals.h" 22 #include "ppapi/shared_impl/ppapi_globals.h"
23 #include "ppapi/shared_impl/proxy_lock.h" 23 #include "ppapi/shared_impl/proxy_lock.h"
24 #include "ppapi/shared_impl/resource.h" 24 #include "ppapi/shared_impl/resource.h"
25 #include "ppapi/shared_impl/resource_tracker.h" 25 #include "ppapi/shared_impl/resource_tracker.h"
26 #include "ppapi/shared_impl/scoped_pp_resource.h" 26 #include "ppapi/shared_impl/scoped_pp_resource.h"
27 #include "ppapi/shared_impl/var.h" 27 #include "ppapi/shared_impl/var.h"
28 #include "ppapi/thunk/enter.h" 28 #include "ppapi/thunk/enter.h"
29 #include "ppapi/thunk/ppb_instance_api.h"
29 #include "ppapi/thunk/ppb_url_request_info_api.h" 30 #include "ppapi/thunk/ppb_url_request_info_api.h"
30 #include "ppapi/thunk/resource_creation_api.h" 31 #include "ppapi/thunk/resource_creation_api.h"
31 32
32 namespace ppapi { 33 namespace ppapi {
33 namespace proxy { 34 namespace proxy {
34 35
35 namespace { 36 PPB_Flash_Proxy::PPB_Flash_Proxy(Dispatcher* dispatcher)
36 37 : InterfaceProxy(dispatcher),
37 void SetInstanceAlwaysOnTop(PP_Instance pp_instance, PP_Bool on_top) { 38 ppb_flash_impl_(NULL) {
38 ProxyAutoLock lock; 39 if (!dispatcher->IsPlugin())
39 PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(pp_instance); 40 ppb_flash_impl_ = static_cast<const PPB_Flash*>(
40 if (dispatcher) { 41 dispatcher->local_get_interface()(PPB_FLASH_INTERFACE));
41 dispatcher->Send(new PpapiHostMsg_PPBFlash_SetInstanceAlwaysOnTop(
42 API_ID_PPB_FLASH, pp_instance, on_top));
43 }
44 } 42 }
45 43
46 PP_Bool DrawGlyphs(PP_Instance instance, 44 PPB_Flash_Proxy::~PPB_Flash_Proxy() {
47 PP_Resource pp_image_data, 45 }
48 const PP_FontDescription_Dev* font_desc, 46
49 uint32_t color, 47 bool PPB_Flash_Proxy::OnMessageReceived(const IPC::Message& msg) {
50 const PP_Point* position, 48 // Prevent the dispatcher from going away during a call to Navigate.
51 const PP_Rect* clip, 49 // This must happen OUTSIDE of OnMsgNavigate since the handling code use
52 const float transformation[3][3], 50 // the dispatcher upon return of the function (sending the reply message).
53 PP_Bool allow_subpixel_aa, 51 ScopedModuleReference death_grip(dispatcher());
54 uint32_t glyph_count, 52
55 const uint16_t glyph_indices[], 53 bool handled = true;
56 const PP_Point glyph_advances[]) { 54 IPC_BEGIN_MESSAGE_MAP(PPB_Flash_Proxy, msg)
57 ProxyAutoLock lock; 55 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFlash_SetInstanceAlwaysOnTop,
56 OnHostMsgSetInstanceAlwaysOnTop)
57 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFlash_DrawGlyphs,
58 OnHostMsgDrawGlyphs)
59 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFlash_GetProxyForURL,
60 OnHostMsgGetProxyForURL)
61 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFlash_Navigate, OnHostMsgNavigate)
62 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFlash_RunMessageLoop,
63 OnHostMsgRunMessageLoop)
64 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFlash_QuitMessageLoop,
65 OnHostMsgQuitMessageLoop)
66 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFlash_GetLocalTimeZoneOffset,
67 OnHostMsgGetLocalTimeZoneOffset)
68 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFlash_IsRectTopmost,
69 OnHostMsgIsRectTopmost)
70 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFlash_FlashSetFullscreen,
71 OnHostMsgFlashSetFullscreen)
72 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFlash_FlashGetScreenSize,
73 OnHostMsgFlashGetScreenSize)
74 IPC_MESSAGE_UNHANDLED(handled = false)
75 IPC_END_MESSAGE_MAP()
76 // TODO(brettw) handle bad messages!
77 return handled;
78 }
79
80 void PPB_Flash_Proxy::SetInstanceAlwaysOnTop(PP_Instance instance,
81 PP_Bool on_top) {
82 dispatcher()->Send(new PpapiHostMsg_PPBFlash_SetInstanceAlwaysOnTop(
83 API_ID_PPB_FLASH, instance, on_top));
84 }
85
86 PP_Bool PPB_Flash_Proxy::DrawGlyphs(PP_Instance instance,
87 PP_Resource pp_image_data,
88 const PP_FontDescription_Dev* font_desc,
89 uint32_t color,
90 const PP_Point* position,
91 const PP_Rect* clip,
92 const float transformation[3][3],
93 PP_Bool allow_subpixel_aa,
94 uint32_t glyph_count,
95 const uint16_t glyph_indices[],
96 const PP_Point glyph_advances[]) {
58 Resource* image_data = 97 Resource* image_data =
59 PpapiGlobals::Get()->GetResourceTracker()->GetResource(pp_image_data); 98 PpapiGlobals::Get()->GetResourceTracker()->GetResource(pp_image_data);
60 if (!image_data) 99 if (!image_data)
61 return PP_FALSE; 100 return PP_FALSE;
62 // The instance parameter isn't strictly necessary but we check that it 101 // The instance parameter isn't strictly necessary but we check that it
63 // matches anyway. 102 // matches anyway.
64 if (image_data->pp_instance() != instance) 103 if (image_data->pp_instance() != instance)
65 return PP_FALSE; 104 return PP_FALSE;
66 105
67 PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(
68 image_data->pp_instance());
69 if (!dispatcher)
70 return PP_FALSE;
71
72 PPBFlash_DrawGlyphs_Params params; 106 PPBFlash_DrawGlyphs_Params params;
73 params.image_data = image_data->host_resource(); 107 params.image_data = image_data->host_resource();
74 params.font_desc.SetFromPPFontDescription(dispatcher, *font_desc, true); 108 params.font_desc.SetFromPPFontDescription(dispatcher(), *font_desc, true);
75 params.color = color; 109 params.color = color;
76 params.position = *position; 110 params.position = *position;
77 params.clip = *clip; 111 params.clip = *clip;
78 for (int i = 0; i < 3; i++) { 112 for (int i = 0; i < 3; i++) {
79 for (int j = 0; j < 3; j++) 113 for (int j = 0; j < 3; j++)
80 params.transformation[i][j] = transformation[i][j]; 114 params.transformation[i][j] = transformation[i][j];
81 } 115 }
82 params.allow_subpixel_aa = allow_subpixel_aa; 116 params.allow_subpixel_aa = allow_subpixel_aa;
83 117
84 params.glyph_indices.insert(params.glyph_indices.begin(), 118 params.glyph_indices.insert(params.glyph_indices.begin(),
85 &glyph_indices[0], 119 &glyph_indices[0],
86 &glyph_indices[glyph_count]); 120 &glyph_indices[glyph_count]);
87 params.glyph_advances.insert(params.glyph_advances.begin(), 121 params.glyph_advances.insert(params.glyph_advances.begin(),
88 &glyph_advances[0], 122 &glyph_advances[0],
89 &glyph_advances[glyph_count]); 123 &glyph_advances[glyph_count]);
90 124
91 PP_Bool result = PP_FALSE; 125 PP_Bool result = PP_FALSE;
92 dispatcher->Send(new PpapiHostMsg_PPBFlash_DrawGlyphs( 126 dispatcher()->Send(new PpapiHostMsg_PPBFlash_DrawGlyphs(
93 API_ID_PPB_FLASH, params, &result)); 127 API_ID_PPB_FLASH, params, &result));
94 return result; 128 return result;
95 } 129 }
96 130
97 PP_Bool DrawGlyphs11(PP_Instance instance, 131 PP_Var PPB_Flash_Proxy::GetProxyForURL(PP_Instance instance, const char* url) {
98 PP_Resource pp_image_data, 132 ReceiveSerializedVarReturnValue result;
99 const PP_FontDescription_Dev* font_desc, 133 dispatcher()->Send(new PpapiHostMsg_PPBFlash_GetProxyForURL(
100 uint32_t color, 134 API_ID_PPB_FLASH, instance, url, &result));
101 PP_Point position, 135 return result.Return(dispatcher());
102 PP_Rect clip,
103 const float transformation[3][3],
104 uint32_t glyph_count,
105 const uint16_t glyph_indices[],
106 const PP_Point glyph_advances[]) {
107 // Backwards-compatible version. DrawGlyphs locks; no need to lock here.
108 return DrawGlyphs(instance, pp_image_data, font_desc, color, &position,
109 &clip, transformation, PP_TRUE, glyph_count, glyph_indices,
110 glyph_advances);
111 } 136 }
112 137
113 PP_Var GetProxyForURL(PP_Instance instance, const char* url) { 138 int32_t PPB_Flash_Proxy::Navigate(PP_Instance instance,
114 ProxyAutoLock lock; 139 PP_Resource request_info,
115 PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance); 140 const char* target,
116 if (!dispatcher) 141 PP_Bool from_user_action) {
117 return PP_MakeUndefined(); 142 thunk::EnterResourceNoLock<thunk::PPB_URLRequestInfo_API> enter(
118 143 request_info, true);
119 ReceiveSerializedVarReturnValue result;
120 dispatcher->Send(new PpapiHostMsg_PPBFlash_GetProxyForURL(
121 API_ID_PPB_FLASH, instance, url, &result));
122 return result.Return(dispatcher);
123 }
124
125 int32_t Navigate(PP_Resource request_id,
126 const char* target,
127 PP_Bool from_user_action) {
128 thunk::EnterResource<thunk::PPB_URLRequestInfo_API> enter(request_id, true);
129 if (enter.failed()) 144 if (enter.failed())
130 return PP_ERROR_BADRESOURCE; 145 return PP_ERROR_BADRESOURCE;
131 PP_Instance instance = enter.resource()->pp_instance();
132
133 PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance);
134 if (!dispatcher)
135 return PP_ERROR_FAILED;
136 146
137 int32_t result = PP_ERROR_FAILED; 147 int32_t result = PP_ERROR_FAILED;
138 dispatcher->Send(new PpapiHostMsg_PPBFlash_Navigate( 148 dispatcher()->Send(new PpapiHostMsg_PPBFlash_Navigate(
139 API_ID_PPB_FLASH, 149 API_ID_PPB_FLASH,
140 instance, enter.object()->GetData(), target, from_user_action, 150 instance, enter.object()->GetData(), target, from_user_action,
141 &result)); 151 &result));
142 return result; 152 return result;
143 } 153 }
144 154
145 int32_t Navigate11(PP_Resource request_id, 155 void PPB_Flash_Proxy::RunMessageLoop(PP_Instance instance) {
146 const char* target,
147 bool from_user_action) {
148 // Backwards-compatible version. Navigate locks; no need to lock here.
149 return Navigate(request_id, target, PP_FromBool(from_user_action));
150 }
151
152 void RunMessageLoop(PP_Instance instance) {
153 ProxyAutoLock lock;
154 PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance);
155 if (!dispatcher)
156 return;
157 IPC::SyncMessage* msg = new PpapiHostMsg_PPBFlash_RunMessageLoop( 156 IPC::SyncMessage* msg = new PpapiHostMsg_PPBFlash_RunMessageLoop(
158 API_ID_PPB_FLASH, instance); 157 API_ID_PPB_FLASH, instance);
159 msg->EnableMessagePumping(); 158 msg->EnableMessagePumping();
160 dispatcher->Send(msg); 159 dispatcher()->Send(msg);
161 } 160 }
162 161
163 void QuitMessageLoop(PP_Instance instance) { 162 void PPB_Flash_Proxy::QuitMessageLoop(PP_Instance instance) {
164 ProxyAutoLock lock; 163 dispatcher()->Send(new PpapiHostMsg_PPBFlash_QuitMessageLoop(
165 PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance);
166 if (!dispatcher)
167 return;
168 dispatcher->Send(new PpapiHostMsg_PPBFlash_QuitMessageLoop(
169 API_ID_PPB_FLASH, instance)); 164 API_ID_PPB_FLASH, instance));
170 } 165 }
171 166
172 double GetLocalTimeZoneOffset(PP_Instance instance, PP_Time t) { 167 double PPB_Flash_Proxy::GetLocalTimeZoneOffset(PP_Instance instance,
173 ProxyAutoLock lock; 168 PP_Time t) {
174 PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance);
175 if (!dispatcher)
176 return 0.0;
177
178 // TODO(brettw) on Windows it should be possible to do the time calculation 169 // TODO(brettw) on Windows it should be possible to do the time calculation
179 // in-process since it doesn't need to read files on disk. This will improve 170 // in-process since it doesn't need to read files on disk. This will improve
180 // performance. 171 // performance.
181 // 172 //
182 // On Linux, it would be better to go directly to the browser process for 173 // On Linux, it would be better to go directly to the browser process for
183 // this message rather than proxy it through some instance in a renderer. 174 // this message rather than proxy it through some instance in a renderer.
184 double result = 0; 175 double result = 0;
185 dispatcher->Send(new PpapiHostMsg_PPBFlash_GetLocalTimeZoneOffset( 176 dispatcher()->Send(new PpapiHostMsg_PPBFlash_GetLocalTimeZoneOffset(
186 API_ID_PPB_FLASH, instance, t, &result)); 177 API_ID_PPB_FLASH, instance, t, &result));
187 return result; 178 return result;
188 } 179 }
189 180
190 PP_Var GetCommandLineArgs(PP_Module /*pp_module*/) { 181 PP_Bool PPB_Flash_Proxy::IsRectTopmost(PP_Instance instance,
191 ProxyAutoLock lock; 182 const PP_Rect* rect) {
192 std::string args = ProxyModule::GetInstance()->GetFlashCommandLineArgs();
193 return StringVar::StringToPPVar(args);
194 }
195
196 void PreLoadFontWin(const void* logfontw) {
197 ProxyAutoLock lock;
198 PluginGlobals::Get()->plugin_proxy_delegate()->PreCacheFont(logfontw);
199 }
200
201 PP_Bool IsRectTopmost(PP_Instance instance, const PP_Rect* rect) {
202 PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance);
203 if (!dispatcher)
204 return PP_FALSE;
205 PP_Bool result = PP_FALSE; 183 PP_Bool result = PP_FALSE;
206 dispatcher->Send(new PpapiHostMsg_PPBFlash_IsRectTopmost( 184 dispatcher()->Send(new PpapiHostMsg_PPBFlash_IsRectTopmost(
207 API_ID_PPB_FLASH, instance, *rect, &result)); 185 API_ID_PPB_FLASH, instance, *rect, &result));
208 return result; 186 return result;
209 } 187 }
210 188
211 int32_t InvokePrinting(PP_Instance instance) { 189 int32_t PPB_Flash_Proxy::InvokePrinting(PP_Instance instance) {
212 PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance);
213 if (!dispatcher)
214 return PP_ERROR_BADARGUMENT;
215
216 // TODO(viettrungluu): Implement me.
217
218 return PP_ERROR_NOTSUPPORTED; 190 return PP_ERROR_NOTSUPPORTED;
219 } 191 }
220 192
221 void UpdateActivity(PP_Instance instance) { 193 void PPB_Flash_Proxy::UpdateActivity(PP_Instance instance) {
222 PluginGlobals::Get()->plugin_proxy_delegate()->SendToBrowser( 194 PluginGlobals::Get()->plugin_proxy_delegate()->SendToBrowser(
223 new PpapiHostMsg_PPBFlash_UpdateActivity(API_ID_PPB_FLASH)); 195 new PpapiHostMsg_PPBFlash_UpdateActivity(API_ID_PPB_FLASH));
224 } 196 }
225 197
226 PP_Var GetDeviceID(PP_Instance instance) { 198 PP_Var PPB_Flash_Proxy::GetDeviceID(PP_Instance instance) {
227 std::string id; 199 std::string id;
228 PluginGlobals::Get()->plugin_proxy_delegate()->SendToBrowser( 200 PluginGlobals::Get()->plugin_proxy_delegate()->SendToBrowser(
229 new PpapiHostMsg_PPBFlash_GetDeviceID(API_ID_PPB_FLASH, &id)); 201 new PpapiHostMsg_PPBFlash_GetDeviceID(API_ID_PPB_FLASH, &id));
230 return StringVar::StringToPPVar(id); 202 return StringVar::StringToPPVar(id);
231 } 203 }
232 204
233 const PPB_Flash_11 flash_interface_11 = { 205 PP_Bool PPB_Flash_Proxy::FlashIsFullscreen(PP_Instance instance) {
234 &SetInstanceAlwaysOnTop, 206 InstanceData* data = static_cast<PluginDispatcher*>(dispatcher())->
235 &DrawGlyphs11, 207 GetInstanceData(instance);
236 &GetProxyForURL, 208 if (!data)
237 &Navigate11, 209 return PP_FALSE;
238 &RunMessageLoop, 210 return data->flash_fullscreen;
239 &QuitMessageLoop,
240 &GetLocalTimeZoneOffset,
241 &GetCommandLineArgs
242 };
243
244 const PPB_Flash_12_0 flash_interface_12_0 = {
245 &SetInstanceAlwaysOnTop,
246 &DrawGlyphs,
247 &GetProxyForURL,
248 &Navigate,
249 &RunMessageLoop,
250 &QuitMessageLoop,
251 &GetLocalTimeZoneOffset,
252 &GetCommandLineArgs,
253 &PreLoadFontWin
254 };
255
256 const PPB_Flash_12_1 flash_interface_12_1 = {
257 &SetInstanceAlwaysOnTop,
258 &DrawGlyphs,
259 &GetProxyForURL,
260 &Navigate,
261 &RunMessageLoop,
262 &QuitMessageLoop,
263 &GetLocalTimeZoneOffset,
264 &GetCommandLineArgs,
265 &PreLoadFontWin,
266 &IsRectTopmost,
267 &InvokePrinting,
268 &UpdateActivity
269 };
270
271 const PPB_Flash_12_2 flash_interface_12_2 = {
272 &SetInstanceAlwaysOnTop,
273 &DrawGlyphs,
274 &GetProxyForURL,
275 &Navigate,
276 &RunMessageLoop,
277 &QuitMessageLoop,
278 &GetLocalTimeZoneOffset,
279 &GetCommandLineArgs,
280 &PreLoadFontWin,
281 &IsRectTopmost,
282 &InvokePrinting,
283 &UpdateActivity,
284 &GetDeviceID
285 };
286
287 } // namespace
288
289 PPB_Flash_Proxy::PPB_Flash_Proxy(Dispatcher* dispatcher)
290 : InterfaceProxy(dispatcher),
291 ppb_flash_impl_(NULL) {
292 if (!dispatcher->IsPlugin())
293 ppb_flash_impl_ = static_cast<const PPB_Flash*>(
294 dispatcher->local_get_interface()(PPB_FLASH_INTERFACE));
295 } 211 }
296 212
297 PPB_Flash_Proxy::~PPB_Flash_Proxy() { 213 PP_Bool PPB_Flash_Proxy::FlashSetFullscreen(PP_Instance instance,
214 PP_Bool fullscreen) {
215 PP_Bool result = PP_FALSE;
216 dispatcher()->Send(new PpapiHostMsg_PPBFlash_FlashSetFullscreen(
217 API_ID_PPB_FLASH, instance, fullscreen, &result));
218 return result;
298 } 219 }
299 220
300 // static 221 PP_Bool PPB_Flash_Proxy::FlashGetScreenSize(PP_Instance instance,
301 const PPB_Flash_11* PPB_Flash_Proxy::GetInterface11() { 222 PP_Size* size) {
302 return &flash_interface_11; 223 PP_Bool result = PP_FALSE;
224 dispatcher()->Send(new PpapiHostMsg_PPBFlash_FlashGetScreenSize(
225 API_ID_PPB_FLASH, instance, &result, size));
226 return result;
303 } 227 }
304 228
305 // static 229 void PPB_Flash_Proxy::OnHostMsgSetInstanceAlwaysOnTop(PP_Instance instance,
306 const PPB_Flash_12_0* PPB_Flash_Proxy::GetInterface12_0() { 230 PP_Bool on_top) {
307 return &flash_interface_12_0;
308 }
309
310 // static
311 const PPB_Flash_12_1* PPB_Flash_Proxy::GetInterface12_1() {
312 return &flash_interface_12_1;
313 }
314
315 // static
316 const PPB_Flash_12_2* PPB_Flash_Proxy::GetInterface12_2() {
317 return &flash_interface_12_2;
318 }
319
320 bool PPB_Flash_Proxy::OnMessageReceived(const IPC::Message& msg) {
321 // Prevent the dispatcher from going away during a call to Navigate.
322 // This must happen OUTSIDE of OnMsgNavigate since the handling code use
323 // the dispatcher upon return of the function (sending the reply message).
324 ScopedModuleReference death_grip(dispatcher());
325
326 bool handled = true;
327 IPC_BEGIN_MESSAGE_MAP(PPB_Flash_Proxy, msg)
328 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFlash_SetInstanceAlwaysOnTop,
329 OnMsgSetInstanceAlwaysOnTop)
330 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFlash_DrawGlyphs,
331 OnMsgDrawGlyphs)
332 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFlash_GetProxyForURL,
333 OnMsgGetProxyForURL)
334 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFlash_Navigate, OnMsgNavigate)
335 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFlash_RunMessageLoop,
336 OnMsgRunMessageLoop)
337 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFlash_QuitMessageLoop,
338 OnMsgQuitMessageLoop)
339 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFlash_GetLocalTimeZoneOffset,
340 OnMsgGetLocalTimeZoneOffset)
341 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFlash_IsRectTopmost,
342 OnMsgIsRectTopmost)
343 IPC_MESSAGE_UNHANDLED(handled = false)
344 IPC_END_MESSAGE_MAP()
345 // TODO(brettw) handle bad messages!
346 return handled;
347 }
348
349 void PPB_Flash_Proxy::OnMsgSetInstanceAlwaysOnTop(
350 PP_Instance instance,
351 PP_Bool on_top) {
352 ppb_flash_impl_->SetInstanceAlwaysOnTop(instance, on_top); 231 ppb_flash_impl_->SetInstanceAlwaysOnTop(instance, on_top);
353 } 232 }
354 233
355 void PPB_Flash_Proxy::OnMsgDrawGlyphs(const PPBFlash_DrawGlyphs_Params& params, 234 void PPB_Flash_Proxy::OnHostMsgDrawGlyphs(
356 PP_Bool* result) { 235 const PPBFlash_DrawGlyphs_Params& params,
236 PP_Bool* result) {
357 *result = PP_FALSE; 237 *result = PP_FALSE;
358 238
359 PP_FontDescription_Dev font_desc; 239 PP_FontDescription_Dev font_desc;
360 params.font_desc.SetToPPFontDescription(dispatcher(), &font_desc, false); 240 params.font_desc.SetToPPFontDescription(dispatcher(), &font_desc, false);
361 241
362 if (params.glyph_indices.size() != params.glyph_advances.size() || 242 if (params.glyph_indices.size() != params.glyph_advances.size() ||
363 params.glyph_indices.empty()) 243 params.glyph_indices.empty())
364 return; 244 return;
365 245
366 *result = ppb_flash_impl_->DrawGlyphs( 246 *result = ppb_flash_impl_->DrawGlyphs(
367 0, // Unused instance param. 247 0, // Unused instance param.
368 params.image_data.host_resource(), &font_desc, 248 params.image_data.host_resource(), &font_desc,
369 params.color, &params.position, &params.clip, 249 params.color, &params.position, &params.clip,
370 const_cast<float(*)[3]>(params.transformation), 250 const_cast<float(*)[3]>(params.transformation),
371 params.allow_subpixel_aa, 251 params.allow_subpixel_aa,
372 static_cast<uint32_t>(params.glyph_indices.size()), 252 static_cast<uint32_t>(params.glyph_indices.size()),
373 const_cast<uint16_t*>(&params.glyph_indices[0]), 253 const_cast<uint16_t*>(&params.glyph_indices[0]),
374 const_cast<PP_Point*>(&params.glyph_advances[0])); 254 const_cast<PP_Point*>(&params.glyph_advances[0]));
375 } 255 }
376 256
377 void PPB_Flash_Proxy::OnMsgGetProxyForURL(PP_Instance instance, 257 void PPB_Flash_Proxy::OnHostMsgGetProxyForURL(PP_Instance instance,
378 const std::string& url, 258 const std::string& url,
379 SerializedVarReturnValue result) { 259 SerializedVarReturnValue result) {
380 result.Return(dispatcher(), ppb_flash_impl_->GetProxyForURL( 260 result.Return(dispatcher(), ppb_flash_impl_->GetProxyForURL(
381 instance, url.c_str())); 261 instance, url.c_str()));
382 } 262 }
383 263
384 void PPB_Flash_Proxy::OnMsgNavigate(PP_Instance instance, 264 void PPB_Flash_Proxy::OnHostMsgNavigate(PP_Instance instance,
385 const PPB_URLRequestInfo_Data& data, 265 const PPB_URLRequestInfo_Data& data,
386 const std::string& target, 266 const std::string& target,
387 PP_Bool from_user_action, 267 PP_Bool from_user_action,
388 int32_t* result) { 268 int32_t* result) {
389 DCHECK(!dispatcher()->IsPlugin()); 269 DCHECK(!dispatcher()->IsPlugin());
390 270
391 // Validate the PP_Instance since we'll be constructing resources on its 271 // Validate the PP_Instance since we'll be constructing resources on its
392 // behalf. 272 // behalf.
393 HostDispatcher* host_dispatcher = static_cast<HostDispatcher*>(dispatcher()); 273 HostDispatcher* host_dispatcher = static_cast<HostDispatcher*>(dispatcher());
394 if (HostDispatcher::GetForInstance(instance) != host_dispatcher) { 274 if (HostDispatcher::GetForInstance(instance) != host_dispatcher) {
395 NOTREACHED(); 275 NOTREACHED();
396 *result = PP_ERROR_BADARGUMENT; 276 *result = PP_ERROR_BADARGUMENT;
397 return; 277 return;
398 } 278 }
(...skipping 13 matching lines...) Expand all
412 } 292 }
413 ScopedPPResource request_resource( 293 ScopedPPResource request_resource(
414 ScopedPPResource::PassRef(), 294 ScopedPPResource::PassRef(),
415 enter.functions()->CreateURLRequestInfo(instance, data)); 295 enter.functions()->CreateURLRequestInfo(instance, data));
416 296
417 *result = ppb_flash_impl_->Navigate(request_resource, 297 *result = ppb_flash_impl_->Navigate(request_resource,
418 target.c_str(), 298 target.c_str(),
419 from_user_action); 299 from_user_action);
420 } 300 }
421 301
422 void PPB_Flash_Proxy::OnMsgRunMessageLoop(PP_Instance instance) { 302 void PPB_Flash_Proxy::OnHostMsgRunMessageLoop(PP_Instance instance) {
423 ppb_flash_impl_->RunMessageLoop(instance); 303 ppb_flash_impl_->RunMessageLoop(instance);
424 } 304 }
425 305
426 void PPB_Flash_Proxy::OnMsgQuitMessageLoop(PP_Instance instance) { 306 void PPB_Flash_Proxy::OnHostMsgQuitMessageLoop(PP_Instance instance) {
427 ppb_flash_impl_->QuitMessageLoop(instance); 307 ppb_flash_impl_->QuitMessageLoop(instance);
428 } 308 }
429 309
430 void PPB_Flash_Proxy::OnMsgGetLocalTimeZoneOffset(PP_Instance instance, 310 void PPB_Flash_Proxy::OnHostMsgGetLocalTimeZoneOffset(PP_Instance instance,
431 PP_Time t, 311 PP_Time t,
432 double* result) { 312 double* result) {
433 *result = ppb_flash_impl_->GetLocalTimeZoneOffset(instance, t); 313 *result = ppb_flash_impl_->GetLocalTimeZoneOffset(instance, t);
434 } 314 }
435 315
436 void PPB_Flash_Proxy::OnMsgIsRectTopmost(PP_Instance instance, 316 void PPB_Flash_Proxy::OnHostMsgIsRectTopmost(PP_Instance instance,
437 PP_Rect rect, 317 PP_Rect rect,
438 PP_Bool* result) { 318 PP_Bool* result) {
439 *result = ppb_flash_impl_->IsRectTopmost(instance, &rect); 319 *result = ppb_flash_impl_->IsRectTopmost(instance, &rect);
440 } 320 }
441 321
322 void PPB_Flash_Proxy::OnHostMsgFlashSetFullscreen(PP_Instance instance,
323 PP_Bool fullscreen,
324 PP_Bool* result) {
325 thunk::EnterFunctionNoLock<thunk::PPB_Instance_FunctionAPI> enter(
326 instance, false);
327 if (enter.failed())
328 return;
329 *result = enter.functions()->GetFlashAPI()->FlashSetFullscreen(
330 instance, fullscreen);
331 }
332
333 void PPB_Flash_Proxy::OnHostMsgFlashGetScreenSize(PP_Instance instance,
334 PP_Bool* result,
335 PP_Size* size) {
336 thunk::EnterFunctionNoLock<thunk::PPB_Instance_FunctionAPI> enter(
337 instance, false);
338 if (enter.failed())
339 return;
340 *result = enter.functions()->GetFlashAPI()->FlashGetScreenSize(
341 instance, size);
342 }
343
442 } // namespace proxy 344 } // namespace proxy
443 } // namespace ppapi 345 } // namespace ppapi
OLDNEW
« no previous file with comments | « ppapi/proxy/ppb_flash_proxy.h ('k') | ppapi/proxy/ppb_instance_proxy.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698