| OLD | NEW |
| 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 <limits> | 7 #include <limits> |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/message_loop.h" | 10 #include "base/message_loop.h" |
| (...skipping 15 matching lines...) Expand all Loading... |
| 26 #include "ppapi/proxy/serialized_var.h" | 26 #include "ppapi/proxy/serialized_var.h" |
| 27 #include "ppapi/shared_impl/dir_contents.h" | 27 #include "ppapi/shared_impl/dir_contents.h" |
| 28 #include "ppapi/shared_impl/file_type_conversion.h" | 28 #include "ppapi/shared_impl/file_type_conversion.h" |
| 29 #include "ppapi/shared_impl/ppapi_globals.h" | 29 #include "ppapi/shared_impl/ppapi_globals.h" |
| 30 #include "ppapi/shared_impl/proxy_lock.h" | 30 #include "ppapi/shared_impl/proxy_lock.h" |
| 31 #include "ppapi/shared_impl/resource.h" | 31 #include "ppapi/shared_impl/resource.h" |
| 32 #include "ppapi/shared_impl/resource_tracker.h" | 32 #include "ppapi/shared_impl/resource_tracker.h" |
| 33 #include "ppapi/shared_impl/scoped_pp_resource.h" | 33 #include "ppapi/shared_impl/scoped_pp_resource.h" |
| 34 #include "ppapi/shared_impl/time_conversion.h" | 34 #include "ppapi/shared_impl/time_conversion.h" |
| 35 #include "ppapi/shared_impl/var.h" | 35 #include "ppapi/shared_impl/var.h" |
| 36 #include "ppapi/shared_impl/var_tracker.h" |
| 36 #include "ppapi/thunk/enter.h" | 37 #include "ppapi/thunk/enter.h" |
| 37 #include "ppapi/thunk/ppb_instance_api.h" | 38 #include "ppapi/thunk/ppb_instance_api.h" |
| 38 #include "ppapi/thunk/ppb_url_request_info_api.h" | 39 #include "ppapi/thunk/ppb_url_request_info_api.h" |
| 39 #include "ppapi/thunk/resource_creation_api.h" | 40 #include "ppapi/thunk/resource_creation_api.h" |
| 40 | 41 |
| 41 using ppapi::thunk::EnterInstanceNoLock; | 42 using ppapi::thunk::EnterInstanceNoLock; |
| 42 using ppapi::thunk::EnterResourceNoLock; | 43 using ppapi::thunk::EnterResourceNoLock; |
| 43 | 44 |
| 44 namespace ppapi { | 45 namespace ppapi { |
| 45 namespace proxy { | 46 namespace proxy { |
| 46 | 47 |
| 47 namespace { | 48 namespace { |
| 48 | 49 |
| 49 IPC::PlatformFileForTransit PlatformFileToPlatformFileForTransit( | 50 IPC::PlatformFileForTransit PlatformFileToPlatformFileForTransit( |
| 50 Dispatcher* dispatcher, | 51 Dispatcher* dispatcher, |
| 51 int32_t* error, | 52 int32_t* error, |
| 52 base::PlatformFile file) { | 53 base::PlatformFile file) { |
| 53 if (*error != PP_OK) | 54 if (*error != PP_OK) |
| 54 return IPC::InvalidPlatformFileForTransit(); | 55 return IPC::InvalidPlatformFileForTransit(); |
| 55 IPC::PlatformFileForTransit out_handle = | 56 IPC::PlatformFileForTransit out_handle = |
| 56 dispatcher->ShareHandleWithRemote(file, true); | 57 dispatcher->ShareHandleWithRemote(file, true); |
| 57 if (out_handle == IPC::InvalidPlatformFileForTransit()) | 58 if (out_handle == IPC::InvalidPlatformFileForTransit()) |
| 58 *error = PP_ERROR_NOACCESS; | 59 *error = PP_ERROR_NOACCESS; |
| 59 return out_handle; | 60 return out_handle; |
| 60 } | 61 } |
| 61 | 62 |
| 62 void InvokePrinting(PP_Instance instance) { | 63 void InvokePrinting(PP_Instance instance) { |
| 64 ProxyAutoLock lock; |
| 65 |
| 63 PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance); | 66 PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance); |
| 64 if (dispatcher) { | 67 if (dispatcher) { |
| 65 dispatcher->Send(new PpapiHostMsg_PPBFlash_InvokePrinting( | 68 dispatcher->Send(new PpapiHostMsg_PPBFlash_InvokePrinting( |
| 66 API_ID_PPB_FLASH, instance)); | 69 API_ID_PPB_FLASH, instance)); |
| 67 } | 70 } |
| 68 } | 71 } |
| 69 | 72 |
| 70 const PPB_Flash_Print_1_0 g_flash_print_interface = { | 73 const PPB_Flash_Print_1_0 g_flash_print_interface = { |
| 71 &InvokePrinting | 74 &InvokePrinting |
| 72 }; | 75 }; |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 155 PpapiGlobals::Get()->GetResourceTracker()->GetResource(pp_image_data); | 158 PpapiGlobals::Get()->GetResourceTracker()->GetResource(pp_image_data); |
| 156 if (!image_data) | 159 if (!image_data) |
| 157 return PP_FALSE; | 160 return PP_FALSE; |
| 158 // The instance parameter isn't strictly necessary but we check that it | 161 // The instance parameter isn't strictly necessary but we check that it |
| 159 // matches anyway. | 162 // matches anyway. |
| 160 if (image_data->pp_instance() != instance) | 163 if (image_data->pp_instance() != instance) |
| 161 return PP_FALSE; | 164 return PP_FALSE; |
| 162 | 165 |
| 163 PPBFlash_DrawGlyphs_Params params; | 166 PPBFlash_DrawGlyphs_Params params; |
| 164 params.image_data = image_data->host_resource(); | 167 params.image_data = image_data->host_resource(); |
| 165 params.font_desc.SetFromPPFontDescription(dispatcher(), *font_desc, true); | 168 params.font_desc.SetFromPPFontDescription(*font_desc); |
| 166 params.color = color; | 169 params.color = color; |
| 167 params.position = *position; | 170 params.position = *position; |
| 168 params.clip = *clip; | 171 params.clip = *clip; |
| 169 for (int i = 0; i < 3; i++) { | 172 for (int i = 0; i < 3; i++) { |
| 170 for (int j = 0; j < 3; j++) | 173 for (int j = 0; j < 3; j++) |
| 171 params.transformation[i][j] = transformation[i][j]; | 174 params.transformation[i][j] = transformation[i][j]; |
| 172 } | 175 } |
| 173 params.allow_subpixel_aa = allow_subpixel_aa; | 176 params.allow_subpixel_aa = allow_subpixel_aa; |
| 174 | 177 |
| 175 params.glyph_indices.insert(params.glyph_indices.begin(), | 178 params.glyph_indices.insert(params.glyph_indices.begin(), |
| (...skipping 448 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 624 | 627 |
| 625 void PPB_Flash_Proxy::OnHostMsgDrawGlyphs( | 628 void PPB_Flash_Proxy::OnHostMsgDrawGlyphs( |
| 626 PP_Instance instance, | 629 PP_Instance instance, |
| 627 const PPBFlash_DrawGlyphs_Params& params, | 630 const PPBFlash_DrawGlyphs_Params& params, |
| 628 PP_Bool* result) { | 631 PP_Bool* result) { |
| 629 *result = PP_FALSE; | 632 *result = PP_FALSE; |
| 630 EnterInstanceNoLock enter(instance); | 633 EnterInstanceNoLock enter(instance); |
| 631 if (enter.failed()) | 634 if (enter.failed()) |
| 632 return; | 635 return; |
| 633 | 636 |
| 634 PP_FontDescription_Dev font_desc; | |
| 635 params.font_desc.SetToPPFontDescription(dispatcher(), &font_desc, false); | |
| 636 | |
| 637 if (params.glyph_indices.size() != params.glyph_advances.size() || | 637 if (params.glyph_indices.size() != params.glyph_advances.size() || |
| 638 params.glyph_indices.empty()) | 638 params.glyph_indices.empty()) |
| 639 return; | 639 return; |
| 640 | 640 |
| 641 PP_FontDescription_Dev font_desc; |
| 642 params.font_desc.SetToPPFontDescription(&font_desc); |
| 643 |
| 641 *result = enter.functions()->GetFlashAPI()->DrawGlyphs( | 644 *result = enter.functions()->GetFlashAPI()->DrawGlyphs( |
| 642 0, // Unused instance param. | 645 0, // Unused instance param. |
| 643 params.image_data.host_resource(), &font_desc, | 646 params.image_data.host_resource(), &font_desc, |
| 644 params.color, ¶ms.position, ¶ms.clip, | 647 params.color, ¶ms.position, ¶ms.clip, |
| 645 const_cast<float(*)[3]>(params.transformation), | 648 const_cast<float(*)[3]>(params.transformation), |
| 646 params.allow_subpixel_aa, | 649 params.allow_subpixel_aa, |
| 647 static_cast<uint32_t>(params.glyph_indices.size()), | 650 static_cast<uint32_t>(params.glyph_indices.size()), |
| 648 const_cast<uint16_t*>(¶ms.glyph_indices[0]), | 651 const_cast<uint16_t*>(¶ms.glyph_indices[0]), |
| 649 const_cast<PP_Point*>(¶ms.glyph_advances[0])); | 652 const_cast<PP_Point*>(¶ms.glyph_advances[0])); |
| 653 |
| 654 // SetToPPFontDescription() creates a var which is owned by the caller. |
| 655 PpapiGlobals::Get()->GetVarTracker()->ReleaseVar(font_desc.face); |
| 650 } | 656 } |
| 651 | 657 |
| 652 void PPB_Flash_Proxy::OnHostMsgGetProxyForURL(PP_Instance instance, | 658 void PPB_Flash_Proxy::OnHostMsgGetProxyForURL(PP_Instance instance, |
| 653 const std::string& url, | 659 const std::string& url, |
| 654 SerializedVarReturnValue result) { | 660 SerializedVarReturnValue result) { |
| 655 EnterInstanceNoLock enter(instance); | 661 EnterInstanceNoLock enter(instance); |
| 656 if (enter.succeeded()) { | 662 if (enter.succeeded()) { |
| 657 result.Return(dispatcher(), | 663 result.Return(dispatcher(), |
| 658 enter.functions()->GetFlashAPI()->GetProxyForURL( | 664 enter.functions()->GetFlashAPI()->GetProxyForURL( |
| 659 instance, url.c_str())); | 665 instance, url.c_str())); |
| (...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 875 // It's rarely used enough that we just request this interface when needed. | 881 // It's rarely used enough that we just request this interface when needed. |
| 876 const PPB_Flash_Print_1_0* print_interface = | 882 const PPB_Flash_Print_1_0* print_interface = |
| 877 static_cast<const PPB_Flash_Print_1_0*>( | 883 static_cast<const PPB_Flash_Print_1_0*>( |
| 878 dispatcher()->local_get_interface()(PPB_FLASH_PRINT_INTERFACE_1_0)); | 884 dispatcher()->local_get_interface()(PPB_FLASH_PRINT_INTERFACE_1_0)); |
| 879 if (print_interface) | 885 if (print_interface) |
| 880 print_interface->InvokePrinting(instance); | 886 print_interface->InvokePrinting(instance); |
| 881 } | 887 } |
| 882 | 888 |
| 883 } // namespace proxy | 889 } // namespace proxy |
| 884 } // namespace ppapi | 890 } // namespace ppapi |
| OLD | NEW |