OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "build/build_config.h" | 8 #include "build/build_config.h" |
9 #include "ppapi/c/dev/pp_file_info_dev.h" | 9 #include "ppapi/c/dev/pp_file_info_dev.h" |
10 #include "ppapi/c/dev/ppb_font_dev.h" | 10 #include "ppapi/c/dev/ppb_font_dev.h" |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
42 return result; | 42 return result; |
43 */ | 43 */ |
44 NOTIMPLEMENTED(); | 44 NOTIMPLEMENTED(); |
45 *error = PP_ERROR_NOACCESS; | 45 *error = PP_ERROR_NOACCESS; |
46 return INVALID_HANDLE_VALUE; | 46 return INVALID_HANDLE_VALUE; |
47 #elif defined(OS_POSIX) | 47 #elif defined(OS_POSIX) |
48 return base::FileDescriptor(file, true); | 48 return base::FileDescriptor(file, true); |
49 #endif | 49 #endif |
50 } | 50 } |
51 | 51 |
52 void SetInstanceAlwaysOnTop(PP_Instance pp_instance, bool on_top) { | 52 void SetInstanceAlwaysOnTop(PP_Instance pp_instance, PP_Bool on_top) { |
53 PluginDispatcher::Get()->Send( | 53 PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(pp_instance); |
54 new PpapiHostMsg_PPBFlash_SetInstanceAlwaysOnTop( | 54 if (dispatcher) { |
55 INTERFACE_ID_PPB_FLASH, pp_instance, on_top)); | 55 dispatcher->Send(new PpapiHostMsg_PPBFlash_SetInstanceAlwaysOnTop( |
| 56 INTERFACE_ID_PPB_FLASH, pp_instance, on_top)); |
| 57 } |
56 } | 58 } |
57 | 59 |
58 bool DrawGlyphs(PP_Instance instance, | 60 PP_Bool DrawGlyphs(PP_Instance instance, |
59 PP_Resource pp_image_data, | 61 PP_Resource pp_image_data, |
60 const PP_FontDescription_Dev* font_desc, | 62 const PP_FontDescription_Dev* font_desc, |
61 uint32_t color, | 63 uint32_t color, |
62 PP_Point position, | 64 PP_Point position, |
63 PP_Rect clip, | 65 PP_Rect clip, |
64 const float transformation[3][3], | 66 const float transformation[3][3], |
65 uint32_t glyph_count, | 67 uint32_t glyph_count, |
66 const uint16_t glyph_indices[], | 68 const uint16_t glyph_indices[], |
67 const PP_Point glyph_advances[]) { | 69 const PP_Point glyph_advances[]) { |
68 Dispatcher* dispatcher = PluginDispatcher::Get(); | 70 PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance); |
| 71 if (!dispatcher) |
| 72 return PP_FALSE; |
69 | 73 |
70 PPBFlash_DrawGlyphs_Params params; | 74 PPBFlash_DrawGlyphs_Params params; |
71 params.instance = instance, | 75 params.instance = instance, |
72 params.pp_image_data = pp_image_data; | 76 params.pp_image_data = pp_image_data; |
73 params.font_desc.SetFromPPFontDescription(dispatcher, *font_desc, true); | 77 params.font_desc.SetFromPPFontDescription(dispatcher, *font_desc, true); |
74 params.color = color; | 78 params.color = color; |
75 params.position = position; | 79 params.position = position; |
76 params.clip = clip; | 80 params.clip = clip; |
77 for (int i = 0; i < 3; i++) { | 81 for (int i = 0; i < 3; i++) { |
78 for (int j = 0; j < 3; j++) | 82 for (int j = 0; j < 3; j++) |
79 params.transformation[i][j] = transformation[i][j]; | 83 params.transformation[i][j] = transformation[i][j]; |
80 } | 84 } |
81 | 85 |
82 params.glyph_indices.insert(params.glyph_indices.begin(), | 86 params.glyph_indices.insert(params.glyph_indices.begin(), |
83 &glyph_indices[0], | 87 &glyph_indices[0], |
84 &glyph_indices[glyph_count]); | 88 &glyph_indices[glyph_count]); |
85 params.glyph_advances.insert(params.glyph_advances.begin(), | 89 params.glyph_advances.insert(params.glyph_advances.begin(), |
86 &glyph_advances[0], | 90 &glyph_advances[0], |
87 &glyph_advances[glyph_count]); | 91 &glyph_advances[glyph_count]); |
88 | 92 |
89 bool result = false; | 93 PP_Bool result = PP_FALSE; |
90 dispatcher->Send(new PpapiHostMsg_PPBFlash_DrawGlyphs( | 94 dispatcher->Send(new PpapiHostMsg_PPBFlash_DrawGlyphs( |
91 INTERFACE_ID_PPB_FLASH, params, &result)); | 95 INTERFACE_ID_PPB_FLASH, params, &result)); |
92 return result; | 96 return result; |
93 } | 97 } |
94 | 98 |
95 PP_Var GetProxyForURL(PP_Instance instance, const char* url) { | 99 PP_Var GetProxyForURL(PP_Instance instance, const char* url) { |
| 100 PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance); |
| 101 if (!dispatcher) |
| 102 return PP_MakeUndefined(); |
| 103 |
96 ReceiveSerializedVarReturnValue result; | 104 ReceiveSerializedVarReturnValue result; |
97 PluginDispatcher::Get()->Send(new PpapiHostMsg_PPBFlash_GetProxyForURL( | 105 dispatcher->Send(new PpapiHostMsg_PPBFlash_GetProxyForURL( |
98 INTERFACE_ID_PPB_FLASH, instance, url, &result)); | 106 INTERFACE_ID_PPB_FLASH, instance, url, &result)); |
99 return result.Return(PluginDispatcher::Get()); | 107 return result.Return(dispatcher); |
100 } | 108 } |
101 | 109 |
102 int32_t OpenModuleLocalFile(PP_Instance instance, | 110 int32_t OpenModuleLocalFile(PP_Instance instance, |
103 const char* path, | 111 const char* path, |
104 int32_t mode, | 112 int32_t mode, |
105 PP_FileHandle* file) { | 113 PP_FileHandle* file) { |
| 114 PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance); |
| 115 if (!dispatcher) |
| 116 return PP_ERROR_BADARGUMENT; |
| 117 |
106 int32_t result = PP_ERROR_FAILED; | 118 int32_t result = PP_ERROR_FAILED; |
107 IPC::PlatformFileForTransit transit; | 119 IPC::PlatformFileForTransit transit; |
108 PluginDispatcher::Get()->Send(new PpapiHostMsg_PPBFlash_OpenModuleLocalFile( | 120 dispatcher->Send(new PpapiHostMsg_PPBFlash_OpenModuleLocalFile( |
109 INTERFACE_ID_PPB_FLASH, instance, path, mode, &transit, &result)); | 121 INTERFACE_ID_PPB_FLASH, instance, path, mode, &transit, &result)); |
110 *file = IPC::PlatformFileForTransitToPlatformFile(transit); | 122 *file = IPC::PlatformFileForTransitToPlatformFile(transit); |
111 return result; | 123 return result; |
112 } | 124 } |
113 | 125 |
114 int32_t RenameModuleLocalFile(PP_Instance instance, | 126 int32_t RenameModuleLocalFile(PP_Instance instance, |
115 const char* path_from, | 127 const char* path_from, |
116 const char* path_to) { | 128 const char* path_to) { |
| 129 PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance); |
| 130 if (!dispatcher) |
| 131 return PP_ERROR_BADARGUMENT; |
| 132 |
117 int32_t result = PP_ERROR_FAILED; | 133 int32_t result = PP_ERROR_FAILED; |
118 PluginDispatcher::Get()->Send(new PpapiHostMsg_PPBFlash_RenameModuleLocalFile( | 134 dispatcher->Send(new PpapiHostMsg_PPBFlash_RenameModuleLocalFile( |
119 INTERFACE_ID_PPB_FLASH, instance, path_from, path_to, &result)); | 135 INTERFACE_ID_PPB_FLASH, instance, path_from, path_to, &result)); |
120 return result; | 136 return result; |
121 } | 137 } |
122 | 138 |
123 int32_t DeleteModuleLocalFileOrDir(PP_Instance instance, | 139 int32_t DeleteModuleLocalFileOrDir(PP_Instance instance, |
124 const char* path, | 140 const char* path, |
125 bool recursive) { | 141 PP_Bool recursive) { |
| 142 PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance); |
| 143 if (!dispatcher) |
| 144 return PP_ERROR_BADARGUMENT; |
| 145 |
126 int32_t result = PP_ERROR_FAILED; | 146 int32_t result = PP_ERROR_FAILED; |
127 PluginDispatcher::Get()->Send( | 147 dispatcher->Send(new PpapiHostMsg_PPBFlash_DeleteModuleLocalFileOrDir( |
128 new PpapiHostMsg_PPBFlash_DeleteModuleLocalFileOrDir( | 148 INTERFACE_ID_PPB_FLASH, instance, path, recursive, &result)); |
129 INTERFACE_ID_PPB_FLASH, instance, path, recursive, &result)); | |
130 return result; | 149 return result; |
131 } | 150 } |
132 | 151 |
133 int32_t CreateModuleLocalDir(PP_Instance instance, const char* path) { | 152 int32_t CreateModuleLocalDir(PP_Instance instance, const char* path) { |
| 153 PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance); |
| 154 if (!dispatcher) |
| 155 return PP_ERROR_BADARGUMENT; |
| 156 |
134 int32_t result = PP_ERROR_FAILED; | 157 int32_t result = PP_ERROR_FAILED; |
135 PluginDispatcher::Get()->Send(new PpapiHostMsg_PPBFlash_CreateModuleLocalDir( | 158 dispatcher->Send(new PpapiHostMsg_PPBFlash_CreateModuleLocalDir( |
136 INTERFACE_ID_PPB_FLASH, instance, path, &result)); | 159 INTERFACE_ID_PPB_FLASH, instance, path, &result)); |
137 return result; | 160 return result; |
138 } | 161 } |
139 | 162 |
140 int32_t QueryModuleLocalFile(PP_Instance instance, | 163 int32_t QueryModuleLocalFile(PP_Instance instance, |
141 const char* path, | 164 const char* path, |
142 PP_FileInfo_Dev* info) { | 165 PP_FileInfo_Dev* info) { |
| 166 PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance); |
| 167 if (!dispatcher) |
| 168 return PP_ERROR_BADARGUMENT; |
| 169 |
143 int32_t result = PP_ERROR_FAILED; | 170 int32_t result = PP_ERROR_FAILED; |
144 PluginDispatcher::Get()->Send( | 171 dispatcher->Send(new PpapiHostMsg_PPBFlash_QueryModuleLocalFile( |
145 new PpapiHostMsg_PPBFlash_QueryModuleLocalFile( | 172 INTERFACE_ID_PPB_FLASH, instance, path, info, &result)); |
146 INTERFACE_ID_PPB_FLASH, instance, path, info, &result)); | |
147 return result; | 173 return result; |
148 } | 174 } |
149 | 175 |
150 int32_t GetModuleLocalDirContents(PP_Instance instance, | 176 int32_t GetModuleLocalDirContents(PP_Instance instance, |
151 const char* path, | 177 const char* path, |
152 PP_DirContents_Dev** contents) { | 178 PP_DirContents_Dev** contents) { |
| 179 PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance); |
| 180 if (!dispatcher) |
| 181 return PP_ERROR_BADARGUMENT; |
| 182 |
153 int32_t result = PP_ERROR_FAILED; | 183 int32_t result = PP_ERROR_FAILED; |
154 std::vector<SerializedDirEntry> entries; | 184 std::vector<SerializedDirEntry> entries; |
155 PluginDispatcher::Get()->Send( | 185 dispatcher->Send(new PpapiHostMsg_PPBFlash_GetModuleLocalDirContents( |
156 new PpapiHostMsg_PPBFlash_GetModuleLocalDirContents( | 186 INTERFACE_ID_PPB_FLASH, instance, path, &entries, &result)); |
157 INTERFACE_ID_PPB_FLASH, instance, path, &entries, &result)); | |
158 | 187 |
159 if (result != PP_OK) | 188 if (result != PP_OK) |
160 return result; | 189 return result; |
161 | 190 |
162 // Copy the serialized dir entries to the output struct. | 191 // Copy the serialized dir entries to the output struct. |
163 *contents = new PP_DirContents_Dev; | 192 *contents = new PP_DirContents_Dev; |
164 (*contents)->count = static_cast<int32_t>(entries.size()); | 193 (*contents)->count = static_cast<int32_t>(entries.size()); |
165 (*contents)->entries = new PP_DirEntry_Dev[entries.size()]; | 194 (*contents)->entries = new PP_DirEntry_Dev[entries.size()]; |
166 for (size_t i = 0; i < entries.size(); i++) { | 195 for (size_t i = 0; i < entries.size(); i++) { |
167 const SerializedDirEntry& source = entries[i]; | 196 const SerializedDirEntry& source = entries[i]; |
168 PP_DirEntry_Dev* dest = &(*contents)->entries[i]; | 197 PP_DirEntry_Dev* dest = &(*contents)->entries[i]; |
169 | 198 |
170 char* name_copy = new char[source.name.size() + 1]; | 199 char* name_copy = new char[source.name.size() + 1]; |
171 memcpy(name_copy, source.name.c_str(), source.name.size() + 1); | 200 memcpy(name_copy, source.name.c_str(), source.name.size() + 1); |
172 dest->name = name_copy; | 201 dest->name = name_copy; |
173 dest->is_dir = source.is_dir; | 202 dest->is_dir = BoolToPPBool(source.is_dir); |
174 } | 203 } |
175 | 204 |
176 return result; | 205 return result; |
177 } | 206 } |
178 | 207 |
179 void FreeModuleLocalDirContents(PP_Instance instance, | 208 void FreeModuleLocalDirContents(PP_Instance /* instance */, |
180 PP_DirContents_Dev* contents) { | 209 PP_DirContents_Dev* contents) { |
181 for (int32_t i = 0; i < contents->count; ++i) | 210 for (int32_t i = 0; i < contents->count; ++i) |
182 delete[] contents->entries[i].name; | 211 delete[] contents->entries[i].name; |
183 delete[] contents->entries; | 212 delete[] contents->entries; |
184 delete contents; | 213 delete contents; |
185 } | 214 } |
186 | 215 |
187 bool NavigateToURL(PP_Instance pp_instance, | 216 PP_Bool NavigateToURL(PP_Instance instance, |
188 const char* url, | 217 const char* url, |
189 const char* target) { | 218 const char* target) { |
190 bool result = false; | 219 PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance); |
191 PluginDispatcher::Get()->Send( | 220 if (!dispatcher) |
192 new PpapiHostMsg_PPBFlash_NavigateToURL( | 221 return PP_FALSE; |
193 INTERFACE_ID_PPB_FLASH, pp_instance, url, target, &result)); | 222 |
| 223 PP_Bool result = PP_FALSE; |
| 224 dispatcher->Send(new PpapiHostMsg_PPBFlash_NavigateToURL( |
| 225 INTERFACE_ID_PPB_FLASH, instance, url, target, &result)); |
194 return result; | 226 return result; |
195 } | 227 } |
196 | 228 |
197 const PPB_Flash ppb_flash = { | 229 const PPB_Flash ppb_flash = { |
198 &SetInstanceAlwaysOnTop, | 230 &SetInstanceAlwaysOnTop, |
199 &DrawGlyphs, | 231 &DrawGlyphs, |
200 &GetProxyForURL, | 232 &GetProxyForURL, |
201 &OpenModuleLocalFile, | 233 &OpenModuleLocalFile, |
202 &RenameModuleLocalFile, | 234 &RenameModuleLocalFile, |
203 &DeleteModuleLocalFileOrDir, | 235 &DeleteModuleLocalFileOrDir, |
204 &CreateModuleLocalDir, | 236 &CreateModuleLocalDir, |
205 &QueryModuleLocalFile, | 237 &QueryModuleLocalFile, |
206 &GetModuleLocalDirContents, | 238 &GetModuleLocalDirContents, |
207 &FreeModuleLocalDirContents, | 239 &FreeModuleLocalDirContents, |
208 &NavigateToURL, | 240 &NavigateToURL, |
209 }; | 241 }; |
210 | 242 |
211 } // namespace | 243 } // namespace |
212 | 244 |
213 PPB_Flash_Proxy::PPB_Flash_Proxy(Dispatcher* dispatcher, | 245 PPB_Flash_Proxy::PPB_Flash_Proxy(Dispatcher* dispatcher, |
214 const void* target_interface) | 246 const void* target_interface) |
215 : InterfaceProxy(dispatcher, target_interface) { | 247 : InterfaceProxy(dispatcher, target_interface) { |
216 } | 248 } |
217 | 249 |
218 PPB_Flash_Proxy::~PPB_Flash_Proxy() { | 250 PPB_Flash_Proxy::~PPB_Flash_Proxy() { |
219 } | 251 } |
220 | 252 |
221 const void* PPB_Flash_Proxy::GetSourceInterface() const { | 253 const void* PPB_Flash_Proxy::GetSourceInterface() const { |
222 return &ppb_flash; | 254 return &ppb_flash; |
223 } | 255 } |
224 | 256 |
(...skipping 24 matching lines...) Expand all Loading... |
249 OnMsgGetModuleLocalDirContents) | 281 OnMsgGetModuleLocalDirContents) |
250 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFlash_NavigateToURL, OnMsgNavigateToURL) | 282 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFlash_NavigateToURL, OnMsgNavigateToURL) |
251 IPC_MESSAGE_UNHANDLED(handled = false) | 283 IPC_MESSAGE_UNHANDLED(handled = false) |
252 IPC_END_MESSAGE_MAP() | 284 IPC_END_MESSAGE_MAP() |
253 // TODO(brettw) handle bad messages! | 285 // TODO(brettw) handle bad messages! |
254 return handled; | 286 return handled; |
255 } | 287 } |
256 | 288 |
257 void PPB_Flash_Proxy::OnMsgSetInstanceAlwaysOnTop( | 289 void PPB_Flash_Proxy::OnMsgSetInstanceAlwaysOnTop( |
258 PP_Instance instance, | 290 PP_Instance instance, |
259 bool on_top) { | 291 PP_Bool on_top) { |
260 ppb_flash_target()->SetInstanceAlwaysOnTop(instance, on_top); | 292 ppb_flash_target()->SetInstanceAlwaysOnTop(instance, on_top); |
261 } | 293 } |
262 | 294 |
263 void PPB_Flash_Proxy::OnMsgDrawGlyphs( | 295 void PPB_Flash_Proxy::OnMsgDrawGlyphs( |
264 const pp::proxy::PPBFlash_DrawGlyphs_Params& params, | 296 const pp::proxy::PPBFlash_DrawGlyphs_Params& params, |
265 bool* result) { | 297 PP_Bool* result) { |
266 *result = false; | 298 *result = PP_FALSE; |
267 | 299 |
268 PP_FontDescription_Dev font_desc; | 300 PP_FontDescription_Dev font_desc; |
269 params.font_desc.SetToPPFontDescription(dispatcher(), &font_desc, false); | 301 params.font_desc.SetToPPFontDescription(dispatcher(), &font_desc, false); |
270 | 302 |
271 if (params.glyph_indices.size() != params.glyph_advances.size() || | 303 if (params.glyph_indices.size() != params.glyph_advances.size() || |
272 params.glyph_indices.empty()) | 304 params.glyph_indices.empty()) |
273 return; | 305 return; |
274 | 306 |
275 *result = ppb_flash_target()->DrawGlyphs( | 307 *result = ppb_flash_target()->DrawGlyphs( |
276 params.instance, params.pp_image_data, &font_desc, params.color, | 308 params.instance, params.pp_image_data, &font_desc, params.color, |
(...skipping 29 matching lines...) Expand all Loading... |
306 const std::string& path_to, | 338 const std::string& path_to, |
307 int32_t* result) { | 339 int32_t* result) { |
308 *result = ppb_flash_target()->RenameModuleLocalFile(instance, | 340 *result = ppb_flash_target()->RenameModuleLocalFile(instance, |
309 path_from.c_str(), | 341 path_from.c_str(), |
310 path_to.c_str()); | 342 path_to.c_str()); |
311 } | 343 } |
312 | 344 |
313 void PPB_Flash_Proxy::OnMsgDeleteModuleLocalFileOrDir( | 345 void PPB_Flash_Proxy::OnMsgDeleteModuleLocalFileOrDir( |
314 PP_Instance instance, | 346 PP_Instance instance, |
315 const std::string& path, | 347 const std::string& path, |
316 bool recursive, | 348 PP_Bool recursive, |
317 int32_t* result) { | 349 int32_t* result) { |
318 *result = ppb_flash_target()->DeleteModuleLocalFileOrDir(instance, | 350 *result = ppb_flash_target()->DeleteModuleLocalFileOrDir(instance, |
319 path.c_str(), | 351 path.c_str(), |
320 recursive); | 352 recursive); |
321 } | 353 } |
322 | 354 |
323 void PPB_Flash_Proxy::OnMsgCreateModuleLocalDir(PP_Instance instance, | 355 void PPB_Flash_Proxy::OnMsgCreateModuleLocalDir(PP_Instance instance, |
324 const std::string& path, | 356 const std::string& path, |
325 int32_t* result) { | 357 int32_t* result) { |
326 *result = ppb_flash_target()->CreateModuleLocalDir(instance, path.c_str()); | 358 *result = ppb_flash_target()->CreateModuleLocalDir(instance, path.c_str()); |
(...skipping 24 matching lines...) Expand all Loading... |
351 for (int32_t i = 0; i < contents->count; i++) { | 383 for (int32_t i = 0; i < contents->count; i++) { |
352 (*entries)[i].name.assign(contents->entries[i].name); | 384 (*entries)[i].name.assign(contents->entries[i].name); |
353 (*entries)[i].is_dir = contents->entries[i].is_dir; | 385 (*entries)[i].is_dir = contents->entries[i].is_dir; |
354 } | 386 } |
355 ppb_flash_target()->FreeModuleLocalDirContents(instance, contents); | 387 ppb_flash_target()->FreeModuleLocalDirContents(instance, contents); |
356 } | 388 } |
357 | 389 |
358 void PPB_Flash_Proxy::OnMsgNavigateToURL(PP_Instance instance, | 390 void PPB_Flash_Proxy::OnMsgNavigateToURL(PP_Instance instance, |
359 const std::string& url, | 391 const std::string& url, |
360 const std::string& target, | 392 const std::string& target, |
361 bool* result) { | 393 PP_Bool* result) { |
362 *result = ppb_flash_target()->NavigateToURL(instance, url.c_str(), | 394 *result = ppb_flash_target()->NavigateToURL(instance, url.c_str(), |
363 target.c_str()); | 395 target.c_str()); |
364 } | 396 } |
365 | 397 |
366 } // namespace proxy | 398 } // namespace proxy |
367 } // namespace pp | 399 } // namespace pp |
OLD | NEW |