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

Side by Side Diff: webkit/plugins/ppapi/ppb_flash_impl.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 | « webkit/plugins/ppapi/ppb_flash_impl.h ('k') | no next file » | 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 "webkit/plugins/ppapi/ppb_flash_impl.h" 5 #include "webkit/plugins/ppapi/ppb_flash_impl.h"
6 6
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/message_loop.h" 10 #include "base/message_loop.h"
(...skipping 17 matching lines...) Expand all
28 #include "webkit/plugins/ppapi/host_globals.h" 28 #include "webkit/plugins/ppapi/host_globals.h"
29 #include "webkit/plugins/ppapi/plugin_delegate.h" 29 #include "webkit/plugins/ppapi/plugin_delegate.h"
30 #include "webkit/plugins/ppapi/plugin_module.h" 30 #include "webkit/plugins/ppapi/plugin_module.h"
31 #include "webkit/plugins/ppapi/ppapi_plugin_instance.h" 31 #include "webkit/plugins/ppapi/ppapi_plugin_instance.h"
32 #include "webkit/plugins/ppapi/ppb_url_request_info_impl.h" 32 #include "webkit/plugins/ppapi/ppb_url_request_info_impl.h"
33 #include "webkit/plugins/ppapi/resource_helper.h" 33 #include "webkit/plugins/ppapi/resource_helper.h"
34 #include "webkit/plugins/ppapi/ppb_image_data_impl.h" 34 #include "webkit/plugins/ppapi/ppb_image_data_impl.h"
35 35
36 using ppapi::PPTimeToTime; 36 using ppapi::PPTimeToTime;
37 using ppapi::StringVar; 37 using ppapi::StringVar;
38 using ppapi::thunk::EnterResource; 38 using ppapi::thunk::EnterResourceNoLock;
39 using ppapi::thunk::PPB_ImageData_API; 39 using ppapi::thunk::PPB_ImageData_API;
40 using ppapi::thunk::PPB_URLRequestInfo_API; 40 using ppapi::thunk::PPB_URLRequestInfo_API;
41 41
42 namespace webkit { 42 namespace webkit {
43 namespace ppapi { 43 namespace ppapi {
44 44
45 namespace { 45 PPB_Flash_Impl::PPB_Flash_Impl(PluginInstance* instance)
46 46 : instance_(instance) {
47 void SetInstanceAlwaysOnTop(PP_Instance pp_instance, PP_Bool on_top) {
48 PluginInstance* instance = HostGlobals::Get()->GetInstance(pp_instance);
49 if (!instance)
50 return;
51 instance->set_always_on_top(PPBoolToBool(on_top));
52 } 47 }
53 48
49 PPB_Flash_Impl::~PPB_Flash_Impl() {
50 }
54 51
55 PP_Bool DrawGlyphs(PP_Instance, 52 void PPB_Flash_Impl::SetInstanceAlwaysOnTop(PP_Instance instance,
56 PP_Resource pp_image_data, 53 PP_Bool on_top) {
57 const PP_FontDescription_Dev* font_desc, 54 instance_->set_always_on_top(PP_ToBool(on_top));
58 uint32_t color, 55 }
59 const PP_Point* position, 56
60 const PP_Rect* clip, 57 PP_Bool PPB_Flash_Impl::DrawGlyphs(PP_Instance instance,
61 const float transformation[3][3], 58 PP_Resource pp_image_data,
62 PP_Bool allow_subpixel_aa, 59 const PP_FontDescription_Dev* font_desc,
63 uint32_t glyph_count, 60 uint32_t color,
64 const uint16_t glyph_indices[], 61 const PP_Point* position,
65 const PP_Point glyph_advances[]) { 62 const PP_Rect* clip,
66 EnterResource<PPB_ImageData_API> enter(pp_image_data, true); 63 const float transformation[3][3],
64 PP_Bool allow_subpixel_aa,
65 uint32_t glyph_count,
66 const uint16_t glyph_indices[],
67 const PP_Point glyph_advances[]) {
68 EnterResourceNoLock<PPB_ImageData_API> enter(pp_image_data, true);
67 if (enter.failed()) 69 if (enter.failed())
68 return PP_FALSE; 70 return PP_FALSE;
69 PPB_ImageData_Impl* image_resource = 71 PPB_ImageData_Impl* image_resource =
70 static_cast<PPB_ImageData_Impl*>(enter.object()); 72 static_cast<PPB_ImageData_Impl*>(enter.object());
71 73
72 ImageDataAutoMapper mapper(image_resource); 74 ImageDataAutoMapper mapper(image_resource);
73 if (!mapper.is_valid()) 75 if (!mapper.is_valid())
74 return PP_FALSE; 76 return PP_FALSE;
75 77
76 // Set up the typeface. 78 // Set up the typeface.
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 sk_positions[i].set(x, y); 139 sk_positions[i].set(x, y);
138 x += SkFloatToScalar(glyph_advances[i].x); 140 x += SkFloatToScalar(glyph_advances[i].x);
139 y += SkFloatToScalar(glyph_advances[i].y); 141 y += SkFloatToScalar(glyph_advances[i].y);
140 } 142 }
141 143
142 canvas->drawPosText(glyph_indices, glyph_count * 2, sk_positions, paint); 144 canvas->drawPosText(glyph_indices, glyph_count * 2, sk_positions, paint);
143 145
144 return PP_TRUE; 146 return PP_TRUE;
145 } 147 }
146 148
147 PP_Bool DrawGlyphs11(PP_Instance instance, 149 PP_Var PPB_Flash_Impl::GetProxyForURL(PP_Instance instance,
148 PP_Resource pp_image_data, 150 const char* url) {
149 const PP_FontDescription_Dev* font_desc,
150 uint32_t color,
151 PP_Point position,
152 PP_Rect clip,
153 const float transformation[3][3],
154 uint32_t glyph_count,
155 const uint16_t glyph_indices[],
156 const PP_Point glyph_advances[]) {
157 return DrawGlyphs(instance, pp_image_data, font_desc, color, &position,
158 &clip, transformation, PP_TRUE, glyph_count,
159 glyph_indices, glyph_advances);
160 }
161
162 PP_Var GetProxyForURL(PP_Instance pp_instance, const char* url) {
163 PluginInstance* instance = HostGlobals::Get()->GetInstance(pp_instance);
164 if (!instance)
165 return PP_MakeUndefined();
166
167 GURL gurl(url); 151 GURL gurl(url);
168 if (!gurl.is_valid()) 152 if (!gurl.is_valid())
169 return PP_MakeUndefined(); 153 return PP_MakeUndefined();
170 154
171 std::string proxy_host = instance->delegate()->ResolveProxy(gurl); 155 std::string proxy_host = instance_->delegate()->ResolveProxy(gurl);
172 if (proxy_host.empty()) 156 if (proxy_host.empty())
173 return PP_MakeUndefined(); // No proxy. 157 return PP_MakeUndefined(); // No proxy.
174 return StringVar::StringToPPVar(proxy_host); 158 return StringVar::StringToPPVar(proxy_host);
175 } 159 }
176 160
177 int32_t Navigate(PP_Resource request_id, 161 int32_t PPB_Flash_Impl::Navigate(PP_Instance instance,
178 const char* target, 162 PP_Resource request_info,
179 PP_Bool from_user_action) { 163 const char* target,
180 EnterResource<PPB_URLRequestInfo_API> enter(request_id, true); 164 PP_Bool from_user_action) {
165 EnterResourceNoLock<PPB_URLRequestInfo_API> enter(request_info, true);
181 if (enter.failed()) 166 if (enter.failed())
182 return PP_ERROR_BADRESOURCE; 167 return PP_ERROR_BADRESOURCE;
183 PPB_URLRequestInfo_Impl* request = 168 PPB_URLRequestInfo_Impl* request =
184 static_cast<PPB_URLRequestInfo_Impl*>(enter.object()); 169 static_cast<PPB_URLRequestInfo_Impl*>(enter.object());
185 170
186 if (!target) 171 if (!target)
187 return PP_ERROR_BADARGUMENT; 172 return PP_ERROR_BADARGUMENT;
188 173 return instance_->Navigate(request, target, PP_ToBool(from_user_action));
189 PluginInstance* plugin_instance = ResourceHelper::GetPluginInstance(request);
190 if (!plugin_instance)
191 return PP_ERROR_FAILED;
192 return plugin_instance->Navigate(request, target,
193 PP_ToBool(from_user_action));
194 } 174 }
195 175
196 int32_t Navigate11(PP_Resource request_id, 176 void PPB_Flash_Impl::RunMessageLoop(PP_Instance instance) {
197 const char* target,
198 bool from_user_action) {
199 return Navigate(request_id, target, PP_FromBool(from_user_action));
200 }
201
202 void RunMessageLoop(PP_Instance instance) {
203 MessageLoop::ScopedNestableTaskAllower allow(MessageLoop::current()); 177 MessageLoop::ScopedNestableTaskAllower allow(MessageLoop::current());
204 MessageLoop::current()->Run(); 178 MessageLoop::current()->Run();
205 } 179 }
206 180
207 void QuitMessageLoop(PP_Instance instance) { 181 void PPB_Flash_Impl::QuitMessageLoop(PP_Instance instance) {
208 MessageLoop::current()->QuitNow(); 182 MessageLoop::current()->QuitNow();
209 } 183 }
210 184
211 double GetLocalTimeZoneOffset(PP_Instance pp_instance, PP_Time t) { 185 double PPB_Flash_Impl::GetLocalTimeZoneOffset(PP_Instance instance,
212 PluginInstance* instance = HostGlobals::Get()->GetInstance(pp_instance); 186 PP_Time t) {
213 if (!instance)
214 return 0.0;
215
216 // Evil hack. The time code handles exact "0" values as special, and produces 187 // Evil hack. The time code handles exact "0" values as special, and produces
217 // a "null" Time object. This will represent some date hundreds of years ago 188 // a "null" Time object. This will represent some date hundreds of years ago
218 // and will give us funny results at 1970 (there are some tests where this 189 // and will give us funny results at 1970 (there are some tests where this
219 // comes up, but it shouldn't happen in real life). To work around this 190 // comes up, but it shouldn't happen in real life). To work around this
220 // special handling, we just need to give it some nonzero value. 191 // special handling, we just need to give it some nonzero value.
221 if (t == 0.0) 192 if (t == 0.0)
222 t = 0.0000000001; 193 t = 0.0000000001;
223 194
224 // We can't do the conversion here because on Linux, the localtime calls 195 // We can't do the conversion here because on Linux, the localtime calls
225 // require filesystem access prohibited by the sandbox. 196 // require filesystem access prohibited by the sandbox.
226 return instance->delegate()->GetLocalTimeZoneOffset(PPTimeToTime(t)); 197 return instance_->delegate()->GetLocalTimeZoneOffset(PPTimeToTime(t));
227 } 198 }
228 199
229 PP_Var GetCommandLineArgs(PP_Module pp_module) { 200 PP_Bool PPB_Flash_Impl::IsRectTopmost(PP_Instance instance,
230 PluginModule* module = HostGlobals::Get()->GetModule(pp_module); 201 const PP_Rect* rect) {
231 if (!module) 202 return PP_FromBool(instance_->IsRectTopmost(
232 return PP_MakeUndefined();
233
234 PluginInstance* instance = module->GetSomeInstance();
235 if (!instance)
236 return PP_MakeUndefined();
237
238 std::string args = instance->delegate()->GetFlashCommandLineArgs();
239 return StringVar::StringToPPVar(args);
240 }
241
242 void PreLoadFontWin(const void* logfontw) {
243 // Not implemented in-process.
244 }
245
246 PP_Bool IsRectTopmost(PP_Instance pp_instance, const PP_Rect* rect) {
247 PluginInstance* instance = HostGlobals::Get()->GetInstance(pp_instance);
248 if (!instance)
249 return PP_FALSE;
250 return PP_FromBool(instance->IsRectTopmost(
251 gfx::Rect(rect->point.x, rect->point.y, 203 gfx::Rect(rect->point.x, rect->point.y,
252 rect->size.width, rect->size.height))); 204 rect->size.width, rect->size.height)));
253 } 205 }
254 206
255 int32_t InvokePrinting(PP_Instance pp_instance) { 207 int32_t PPB_Flash_Impl::InvokePrinting(PP_Instance instance) {
256 PluginInstance* instance = HostGlobals::Get()->GetInstance(pp_instance);
257 if (!instance)
258 return PP_ERROR_BADARGUMENT;
259
260 // TODO(viettrungluu): Implement me. 208 // TODO(viettrungluu): Implement me.
261
262 return PP_ERROR_NOTSUPPORTED; 209 return PP_ERROR_NOTSUPPORTED;
263 } 210 }
264 211
265 void UpdateActivity(PP_Instance pp_instance) { 212 void PPB_Flash_Impl::UpdateActivity(PP_Instance pp_instance) {
266 // Not supported in-process. 213 // Not supported in-process.
267 } 214 }
268 215
269 PP_Var GetDeviceID(PP_Instance pp_instance) { 216 PP_Var PPB_Flash_Impl::GetDeviceID(PP_Instance pp_instance) {
270 // Not supported in-process. 217 // Not supported in-process.
271 return PP_MakeUndefined(); 218 return PP_MakeUndefined();
272 } 219 }
273 220
274 const PPB_Flash_11 ppb_flash_11 = { 221 PP_Bool PPB_Flash_Impl::FlashIsFullscreen(PP_Instance instance) {
275 &SetInstanceAlwaysOnTop, 222 return PP_FromBool(instance_->flash_fullscreen());
276 &DrawGlyphs11,
277 &GetProxyForURL,
278 &Navigate11,
279 &RunMessageLoop,
280 &QuitMessageLoop,
281 &GetLocalTimeZoneOffset,
282 &GetCommandLineArgs
283 };
284
285 const PPB_Flash_12_0 ppb_flash_12_0 = {
286 &SetInstanceAlwaysOnTop,
287 &DrawGlyphs,
288 &GetProxyForURL,
289 &Navigate,
290 &RunMessageLoop,
291 &QuitMessageLoop,
292 &GetLocalTimeZoneOffset,
293 &GetCommandLineArgs,
294 &PreLoadFontWin
295 };
296
297 const PPB_Flash_12_1 ppb_flash_12_1 = {
298 &SetInstanceAlwaysOnTop,
299 &DrawGlyphs,
300 &GetProxyForURL,
301 &Navigate,
302 &RunMessageLoop,
303 &QuitMessageLoop,
304 &GetLocalTimeZoneOffset,
305 &GetCommandLineArgs,
306 &PreLoadFontWin,
307 &IsRectTopmost,
308 &InvokePrinting,
309 &UpdateActivity
310 };
311
312 const PPB_Flash_12_2 ppb_flash_12_2 = {
313 &SetInstanceAlwaysOnTop,
314 &DrawGlyphs,
315 &GetProxyForURL,
316 &Navigate,
317 &RunMessageLoop,
318 &QuitMessageLoop,
319 &GetLocalTimeZoneOffset,
320 &GetCommandLineArgs,
321 &PreLoadFontWin,
322 &IsRectTopmost,
323 &InvokePrinting,
324 &UpdateActivity,
325 &GetDeviceID
326 };
327
328 } // namespace
329
330 // static
331 const PPB_Flash_11* PPB_Flash_Impl::GetInterface11() {
332 return &ppb_flash_11;
333 } 223 }
334 224
335 // static 225 PP_Bool PPB_Flash_Impl::FlashSetFullscreen(PP_Instance instance,
336 const PPB_Flash_12_0* PPB_Flash_Impl::GetInterface12_0() { 226 PP_Bool fullscreen) {
337 return &ppb_flash_12_0; 227 instance_->FlashSetFullscreen(PP_ToBool(fullscreen), true);
228 return PP_TRUE;
338 } 229 }
339 230
340 // static 231 PP_Bool PPB_Flash_Impl::FlashGetScreenSize(PP_Instance instance,
341 const PPB_Flash_12_1* PPB_Flash_Impl::GetInterface12_1() { 232 PP_Size* size) {
342 return &ppb_flash_12_1; 233 return instance_->GetScreenSize(instance, size);
343 }
344
345 // static
346 const PPB_Flash_12_2* PPB_Flash_Impl::GetInterface12_2() {
347 return &ppb_flash_12_2;
348 } 234 }
349 235
350 } // namespace ppapi 236 } // namespace ppapi
351 } // namespace webkit 237 } // namespace webkit
OLDNEW
« no previous file with comments | « webkit/plugins/ppapi/ppb_flash_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698