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 "webkit/plugins/ppapi/ppapi_plugin_instance.h" | 5 #include "webkit/plugins/ppapi/ppapi_plugin_instance.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/metrics/histogram.h" | 9 #include "base/metrics/histogram.h" |
10 #include "base/scoped_ptr.h" | 10 #include "base/scoped_ptr.h" |
(...skipping 24 matching lines...) Expand all Loading... |
35 #include "third_party/WebKit/Source/WebKit/chromium/public/WebPluginContainer.h" | 35 #include "third_party/WebKit/Source/WebKit/chromium/public/WebPluginContainer.h" |
36 #include "third_party/WebKit/Source/WebKit/chromium/public/WebRect.h" | 36 #include "third_party/WebKit/Source/WebKit/chromium/public/WebRect.h" |
37 #include "third_party/WebKit/Source/WebKit/chromium/public/WebString.h" | 37 #include "third_party/WebKit/Source/WebKit/chromium/public/WebString.h" |
38 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLRequest.h" | 38 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLRequest.h" |
39 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" | 39 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" |
40 #include "ui/gfx/rect.h" | 40 #include "ui/gfx/rect.h" |
41 #include "ui/gfx/skia_util.h" | 41 #include "ui/gfx/skia_util.h" |
42 #include "webkit/plugins/ppapi/common.h" | 42 #include "webkit/plugins/ppapi/common.h" |
43 #include "webkit/plugins/ppapi/event_conversion.h" | 43 #include "webkit/plugins/ppapi/event_conversion.h" |
44 #include "webkit/plugins/ppapi/fullscreen_container.h" | 44 #include "webkit/plugins/ppapi/fullscreen_container.h" |
| 45 #include "webkit/plugins/ppapi/message_channel.h" |
45 #include "webkit/plugins/ppapi/plugin_delegate.h" | 46 #include "webkit/plugins/ppapi/plugin_delegate.h" |
46 #include "webkit/plugins/ppapi/plugin_module.h" | 47 #include "webkit/plugins/ppapi/plugin_module.h" |
47 #include "webkit/plugins/ppapi/plugin_object.h" | 48 #include "webkit/plugins/ppapi/plugin_object.h" |
48 #include "webkit/plugins/ppapi/ppb_buffer_impl.h" | 49 #include "webkit/plugins/ppapi/ppb_buffer_impl.h" |
49 #include "webkit/plugins/ppapi/ppb_graphics_2d_impl.h" | 50 #include "webkit/plugins/ppapi/ppb_graphics_2d_impl.h" |
50 #include "webkit/plugins/ppapi/ppb_image_data_impl.h" | 51 #include "webkit/plugins/ppapi/ppb_image_data_impl.h" |
51 #include "webkit/plugins/ppapi/ppb_surface_3d_impl.h" | 52 #include "webkit/plugins/ppapi/ppb_surface_3d_impl.h" |
52 #include "webkit/plugins/ppapi/ppb_url_loader_impl.h" | 53 #include "webkit/plugins/ppapi/ppb_url_loader_impl.h" |
53 #include "webkit/plugins/ppapi/ppp_pdf.h" | 54 #include "webkit/plugins/ppapi/ppp_pdf.h" |
54 #include "webkit/plugins/ppapi/string.h" | 55 #include "webkit/plugins/ppapi/string.h" |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
92 typedef bool (*RenderPDFPageToDCProc)( | 93 typedef bool (*RenderPDFPageToDCProc)( |
93 const unsigned char* pdf_buffer, int buffer_size, int page_number, HDC dc, | 94 const unsigned char* pdf_buffer, int buffer_size, int page_number, HDC dc, |
94 int dpi_x, int dpi_y, int bounds_origin_x, int bounds_origin_y, | 95 int dpi_x, int dpi_y, int bounds_origin_x, int bounds_origin_y, |
95 int bounds_width, int bounds_height, bool fit_to_bounds, | 96 int bounds_width, int bounds_height, bool fit_to_bounds, |
96 bool stretch_to_bounds, bool keep_aspect_ratio, bool center_in_bounds); | 97 bool stretch_to_bounds, bool keep_aspect_ratio, bool center_in_bounds); |
97 #endif // defined(OS_WIN) | 98 #endif // defined(OS_WIN) |
98 | 99 |
99 namespace { | 100 namespace { |
100 | 101 |
101 #define COMPILE_ASSERT_MATCHING_ENUM(webkit_name, np_name) \ | 102 #define COMPILE_ASSERT_MATCHING_ENUM(webkit_name, np_name) \ |
102 COMPILE_ASSERT(int(WebCursorInfo::webkit_name) == int(np_name), \ | 103 COMPILE_ASSERT(static_cast<int>(WebCursorInfo::webkit_name) \ |
| 104 == static_cast<int>(np_name), \ |
103 mismatching_enums) | 105 mismatching_enums) |
104 | 106 |
105 COMPILE_ASSERT_MATCHING_ENUM(TypePointer, PP_CURSORTYPE_POINTER); | 107 COMPILE_ASSERT_MATCHING_ENUM(TypePointer, PP_CURSORTYPE_POINTER); |
106 COMPILE_ASSERT_MATCHING_ENUM(TypeCross, PP_CURSORTYPE_CROSS); | 108 COMPILE_ASSERT_MATCHING_ENUM(TypeCross, PP_CURSORTYPE_CROSS); |
107 COMPILE_ASSERT_MATCHING_ENUM(TypeHand, PP_CURSORTYPE_HAND); | 109 COMPILE_ASSERT_MATCHING_ENUM(TypeHand, PP_CURSORTYPE_HAND); |
108 COMPILE_ASSERT_MATCHING_ENUM(TypeIBeam, PP_CURSORTYPE_IBEAM); | 110 COMPILE_ASSERT_MATCHING_ENUM(TypeIBeam, PP_CURSORTYPE_IBEAM); |
109 COMPILE_ASSERT_MATCHING_ENUM(TypeWait, PP_CURSORTYPE_WAIT); | 111 COMPILE_ASSERT_MATCHING_ENUM(TypeWait, PP_CURSORTYPE_WAIT); |
110 COMPILE_ASSERT_MATCHING_ENUM(TypeHelp, PP_CURSORTYPE_HELP); | 112 COMPILE_ASSERT_MATCHING_ENUM(TypeHelp, PP_CURSORTYPE_HELP); |
111 COMPILE_ASSERT_MATCHING_ENUM(TypeEastResize, PP_CURSORTYPE_EASTRESIZE); | 113 COMPILE_ASSERT_MATCHING_ENUM(TypeEastResize, PP_CURSORTYPE_EASTRESIZE); |
112 COMPILE_ASSERT_MATCHING_ENUM(TypeNorthResize, PP_CURSORTYPE_NORTHRESIZE); | 114 COMPILE_ASSERT_MATCHING_ENUM(TypeNorthResize, PP_CURSORTYPE_NORTHRESIZE); |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
194 | 196 |
195 PP_Var ExecuteScript(PP_Instance instance_id, | 197 PP_Var ExecuteScript(PP_Instance instance_id, |
196 PP_Var script, | 198 PP_Var script, |
197 PP_Var* exception) { | 199 PP_Var* exception) { |
198 PluginInstance* instance = ResourceTracker::Get()->GetInstance(instance_id); | 200 PluginInstance* instance = ResourceTracker::Get()->GetInstance(instance_id); |
199 if (!instance) | 201 if (!instance) |
200 return PP_MakeUndefined(); | 202 return PP_MakeUndefined(); |
201 return instance->ExecuteScript(script, exception); | 203 return instance->ExecuteScript(script, exception); |
202 } | 204 } |
203 | 205 |
| 206 void PostMessage(PP_Instance instance_id, PP_Var message) { |
| 207 PluginInstance* instance = ResourceTracker::Get()->GetInstance(instance_id); |
| 208 if (!instance) |
| 209 return; |
| 210 instance->PostMessage(message); |
| 211 } |
| 212 |
204 const PPB_Instance ppb_instance = { | 213 const PPB_Instance ppb_instance = { |
205 &GetWindowObject, | 214 &GetWindowObject, |
206 &GetOwnerElementObject, | 215 &GetOwnerElementObject, |
207 &BindGraphics, | 216 &BindGraphics, |
208 &IsFullFrame, | 217 &IsFullFrame, |
209 &ExecuteScript, | 218 &ExecuteScript, |
| 219 &PostMessage |
210 }; | 220 }; |
211 | 221 |
212 void NumberOfFindResultsChanged(PP_Instance instance_id, | 222 void NumberOfFindResultsChanged(PP_Instance instance_id, |
213 int32_t total, | 223 int32_t total, |
214 PP_Bool final_result) { | 224 PP_Bool final_result) { |
215 PluginInstance* instance = ResourceTracker::Get()->GetInstance(instance_id); | 225 PluginInstance* instance = ResourceTracker::Get()->GetInstance(instance_id); |
216 if (!instance) | 226 if (!instance) |
217 return; | 227 return; |
218 | 228 |
219 DCHECK_NE(instance->find_identifier(), -1); | 229 DCHECK_NE(instance->find_identifier(), -1); |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
328 plugin_pdf_interface_(NULL), | 338 plugin_pdf_interface_(NULL), |
329 plugin_selection_interface_(NULL), | 339 plugin_selection_interface_(NULL), |
330 plugin_zoom_interface_(NULL), | 340 plugin_zoom_interface_(NULL), |
331 #if defined(OS_LINUX) | 341 #if defined(OS_LINUX) |
332 canvas_(NULL), | 342 canvas_(NULL), |
333 #endif // defined(OS_LINUX) | 343 #endif // defined(OS_LINUX) |
334 plugin_print_interface_(NULL), | 344 plugin_print_interface_(NULL), |
335 plugin_graphics_3d_interface_(NULL), | 345 plugin_graphics_3d_interface_(NULL), |
336 always_on_top_(false), | 346 always_on_top_(false), |
337 fullscreen_container_(NULL), | 347 fullscreen_container_(NULL), |
338 fullscreen_(false) { | 348 fullscreen_(false), |
| 349 message_channel_(NULL) { |
339 pp_instance_ = ResourceTracker::Get()->AddInstance(this); | 350 pp_instance_ = ResourceTracker::Get()->AddInstance(this); |
340 | 351 |
341 memset(¤t_print_settings_, 0, sizeof(current_print_settings_)); | 352 memset(¤t_print_settings_, 0, sizeof(current_print_settings_)); |
342 DCHECK(delegate); | 353 DCHECK(delegate); |
343 module_->InstanceCreated(this); | 354 module_->InstanceCreated(this); |
344 delegate_->InstanceCreated(this); | 355 delegate_->InstanceCreated(this); |
| 356 message_channel_.reset(new MessageChannel(this)); |
345 } | 357 } |
346 | 358 |
347 PluginInstance::~PluginInstance() { | 359 PluginInstance::~PluginInstance() { |
348 // Free all the plugin objects. This will automatically clear the back- | 360 // Free all the plugin objects. This will automatically clear the back- |
349 // pointer from the NPObject so WebKit can't call into the plugin any more. | 361 // pointer from the NPObject so WebKit can't call into the plugin any more. |
350 // | 362 // |
351 // Swap out the set so we can delete from it (the objects will try to | 363 // Swap out the set so we can delete from it (the objects will try to |
352 // unregister themselves inside the delete call). | 364 // unregister themselves inside the delete call). |
353 PluginObjectSet plugin_object_copy; | 365 PluginObjectSet plugin_object_copy; |
354 live_plugin_objects_.swap(plugin_object_copy); | 366 live_plugin_objects_.swap(plugin_object_copy); |
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
583 try_catch.SetException("Exception caught"); | 595 try_catch.SetException("Exception caught"); |
584 WebBindings::releaseVariantValue(&result); | 596 WebBindings::releaseVariantValue(&result); |
585 return PP_MakeUndefined(); | 597 return PP_MakeUndefined(); |
586 } | 598 } |
587 | 599 |
588 PP_Var ret = Var::NPVariantToPPVar(this, &result); | 600 PP_Var ret = Var::NPVariantToPPVar(this, &result); |
589 WebBindings::releaseVariantValue(&result); | 601 WebBindings::releaseVariantValue(&result); |
590 return ret; | 602 return ret; |
591 } | 603 } |
592 | 604 |
| 605 void PluginInstance::PostMessage(PP_Var message) { |
| 606 message_channel_->PostMessageToJavaScript(message); |
| 607 } |
| 608 |
593 void PluginInstance::Delete() { | 609 void PluginInstance::Delete() { |
594 // Keep a reference on the stack. See NOTE above. | 610 // Keep a reference on the stack. See NOTE above. |
595 scoped_refptr<PluginInstance> ref(this); | 611 scoped_refptr<PluginInstance> ref(this); |
596 instance_interface_->DidDestroy(pp_instance()); | 612 instance_interface_->DidDestroy(pp_instance()); |
597 | 613 |
598 if (fullscreen_container_) { | 614 if (fullscreen_container_) { |
599 fullscreen_container_->Destroy(); | 615 fullscreen_container_->Destroy(); |
600 fullscreen_container_ = NULL; | 616 fullscreen_container_ = NULL; |
601 } | 617 } |
602 container_ = NULL; | 618 container_ = NULL; |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
642 for (size_t i = 0; i < pp_events.size(); i++) { | 658 for (size_t i = 0; i < pp_events.size(); i++) { |
643 rv |= PPBoolToBool(instance_interface_->HandleInputEvent(pp_instance(), | 659 rv |= PPBoolToBool(instance_interface_->HandleInputEvent(pp_instance(), |
644 &pp_events[i])); | 660 &pp_events[i])); |
645 } | 661 } |
646 | 662 |
647 if (cursor_.get()) | 663 if (cursor_.get()) |
648 *cursor_info = *cursor_; | 664 *cursor_info = *cursor_; |
649 return rv; | 665 return rv; |
650 } | 666 } |
651 | 667 |
| 668 void PluginInstance::HandleMessage(PP_Var message) { |
| 669 if ((instance_interface_ != NULL) && |
| 670 (instance_interface_->HandleMessage != NULL)) { |
| 671 instance_interface_->HandleMessage(pp_instance(), message); |
| 672 } |
| 673 } |
| 674 |
652 PP_Var PluginInstance::GetInstanceObject() { | 675 PP_Var PluginInstance::GetInstanceObject() { |
653 return instance_interface_->GetInstanceObject(pp_instance()); | 676 return instance_interface_->GetInstanceObject(pp_instance()); |
654 } | 677 } |
655 | 678 |
656 void PluginInstance::ViewChanged(const gfx::Rect& position, | 679 void PluginInstance::ViewChanged(const gfx::Rect& position, |
657 const gfx::Rect& clip) { | 680 const gfx::Rect& clip) { |
658 fullscreen_ = (fullscreen_container_ != NULL); | 681 fullscreen_ = (fullscreen_container_ != NULL); |
659 position_ = position; | 682 position_ = position; |
660 | 683 |
661 if (clip.IsEmpty()) { | 684 if (clip.IsEmpty()) { |
(...skipping 675 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1337 return found->second; | 1360 return found->second; |
1338 } | 1361 } |
1339 | 1362 |
1340 bool PluginInstance::IsFullPagePlugin() const { | 1363 bool PluginInstance::IsFullPagePlugin() const { |
1341 WebFrame* frame = container()->element().document().frame(); | 1364 WebFrame* frame = container()->element().document().frame(); |
1342 return frame->view()->mainFrame()->document().isPluginDocument(); | 1365 return frame->view()->mainFrame()->document().isPluginDocument(); |
1343 } | 1366 } |
1344 | 1367 |
1345 } // namespace ppapi | 1368 } // namespace ppapi |
1346 } // namespace webkit | 1369 } // namespace webkit |
OLD | NEW |