| 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/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
| 9 #include "base/message_loop.h" | 9 #include "base/message_loop.h" |
| 10 #include "base/metrics/histogram.h" | 10 #include "base/metrics/histogram.h" |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 54 #include "webkit/plugins/ppapi/message_channel.h" | 54 #include "webkit/plugins/ppapi/message_channel.h" |
| 55 #include "webkit/plugins/ppapi/npapi_glue.h" | 55 #include "webkit/plugins/ppapi/npapi_glue.h" |
| 56 #include "webkit/plugins/ppapi/plugin_delegate.h" | 56 #include "webkit/plugins/ppapi/plugin_delegate.h" |
| 57 #include "webkit/plugins/ppapi/plugin_module.h" | 57 #include "webkit/plugins/ppapi/plugin_module.h" |
| 58 #include "webkit/plugins/ppapi/plugin_object.h" | 58 #include "webkit/plugins/ppapi/plugin_object.h" |
| 59 #include "webkit/plugins/ppapi/ppb_buffer_impl.h" | 59 #include "webkit/plugins/ppapi/ppb_buffer_impl.h" |
| 60 #include "webkit/plugins/ppapi/ppb_graphics_2d_impl.h" | 60 #include "webkit/plugins/ppapi/ppb_graphics_2d_impl.h" |
| 61 #include "webkit/plugins/ppapi/ppb_graphics_3d_impl.h" | 61 #include "webkit/plugins/ppapi/ppb_graphics_3d_impl.h" |
| 62 #include "webkit/plugins/ppapi/ppb_image_data_impl.h" | 62 #include "webkit/plugins/ppapi/ppb_image_data_impl.h" |
| 63 #include "webkit/plugins/ppapi/ppb_input_event_impl.h" | 63 #include "webkit/plugins/ppapi/ppb_input_event_impl.h" |
| 64 #include "webkit/plugins/ppapi/ppb_scrollbar_group_impl.h" |
| 64 #include "webkit/plugins/ppapi/ppb_surface_3d_impl.h" | 65 #include "webkit/plugins/ppapi/ppb_surface_3d_impl.h" |
| 65 #include "webkit/plugins/ppapi/ppb_url_loader_impl.h" | 66 #include "webkit/plugins/ppapi/ppb_url_loader_impl.h" |
| 66 #include "webkit/plugins/ppapi/ppb_url_request_info_impl.h" | 67 #include "webkit/plugins/ppapi/ppb_url_request_info_impl.h" |
| 67 #include "webkit/plugins/ppapi/ppp_pdf.h" | 68 #include "webkit/plugins/ppapi/ppp_pdf.h" |
| 68 #include "webkit/plugins/ppapi/string.h" | 69 #include "webkit/plugins/ppapi/string.h" |
| 69 #include "webkit/plugins/sad_plugin.h" | 70 #include "webkit/plugins/sad_plugin.h" |
| 70 | 71 |
| 71 #if defined(OS_MACOSX) | 72 #if defined(OS_MACOSX) |
| 72 #include "base/mac/mac_util.h" | 73 #include "base/mac/mac_util.h" |
| 73 #include "base/mac/scoped_cftyperef.h" | 74 #include "base/mac/scoped_cftyperef.h" |
| (...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 228 checked_for_plugin_input_event_interface_(false), | 229 checked_for_plugin_input_event_interface_(false), |
| 229 checked_for_plugin_messaging_interface_(false), | 230 checked_for_plugin_messaging_interface_(false), |
| 230 plugin_print_interface_(NULL), | 231 plugin_print_interface_(NULL), |
| 231 plugin_graphics_3d_interface_(NULL), | 232 plugin_graphics_3d_interface_(NULL), |
| 232 always_on_top_(false), | 233 always_on_top_(false), |
| 233 fullscreen_container_(NULL), | 234 fullscreen_container_(NULL), |
| 234 fullscreen_(false), | 235 fullscreen_(false), |
| 235 message_channel_(NULL), | 236 message_channel_(NULL), |
| 236 sad_plugin_(NULL), | 237 sad_plugin_(NULL), |
| 237 input_event_mask_(0), | 238 input_event_mask_(0), |
| 238 filtered_input_event_mask_(0) { | 239 filtered_input_event_mask_(0), |
| 240 scrollbar_group_(NULL) { |
| 239 pp_instance_ = ResourceTracker::Get()->AddInstance(this); | 241 pp_instance_ = ResourceTracker::Get()->AddInstance(this); |
| 240 | 242 |
| 241 memset(¤t_print_settings_, 0, sizeof(current_print_settings_)); | 243 memset(¤t_print_settings_, 0, sizeof(current_print_settings_)); |
| 242 DCHECK(delegate); | 244 DCHECK(delegate); |
| 243 module_->InstanceCreated(this); | 245 module_->InstanceCreated(this); |
| 244 delegate_->InstanceCreated(this); | 246 delegate_->InstanceCreated(this); |
| 245 message_channel_.reset(new MessageChannel(this)); | 247 message_channel_.reset(new MessageChannel(this)); |
| 246 } | 248 } |
| 247 | 249 |
| 248 PluginInstance::~PluginInstance() { | 250 PluginInstance::~PluginInstance() { |
| (...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 434 Resource::ScopedResourceId resource(loader); | 436 Resource::ScopedResourceId resource(loader); |
| 435 return PP_ToBool(instance_interface_->HandleDocumentLoad(pp_instance(), | 437 return PP_ToBool(instance_interface_->HandleDocumentLoad(pp_instance(), |
| 436 resource.id)); | 438 resource.id)); |
| 437 } | 439 } |
| 438 | 440 |
| 439 bool PluginInstance::HandleInputEvent(const WebKit::WebInputEvent& event, | 441 bool PluginInstance::HandleInputEvent(const WebKit::WebInputEvent& event, |
| 440 WebCursorInfo* cursor_info) { | 442 WebCursorInfo* cursor_info) { |
| 441 // Keep a reference on the stack. See NOTE above. | 443 // Keep a reference on the stack. See NOTE above. |
| 442 scoped_refptr<PluginInstance> ref(this); | 444 scoped_refptr<PluginInstance> ref(this); |
| 443 | 445 |
| 446 if (scrollbar_group_) { |
| 447 if (event.type == WebInputEvent::MouseEnter) { |
| 448 scrollbar_group_->MouseEnteredContentArea(); |
| 449 } else if (event.type == WebInputEvent::MouseMove) { |
| 450 scrollbar_group_->MouseMovedInContentArea(); |
| 451 } else if (event.type == WebInputEvent::MouseLeave) { |
| 452 scrollbar_group_->MouseExitedContentArea(); |
| 453 } |
| 454 } |
| 455 |
| 444 bool rv = false; | 456 bool rv = false; |
| 445 if (LoadInputEventInterface()) { | 457 if (LoadInputEventInterface()) { |
| 446 PP_InputEvent_Class event_class = ClassifyInputEvent(event.type); | 458 PP_InputEvent_Class event_class = ClassifyInputEvent(event.type); |
| 447 if (!event_class) | 459 if (!event_class) |
| 448 return false; | 460 return false; |
| 449 | 461 |
| 450 if ((filtered_input_event_mask_ & event_class) || | 462 if ((filtered_input_event_mask_ & event_class) || |
| 451 (input_event_mask_ & event_class)) { | 463 (input_event_mask_ & event_class)) { |
| 452 // Actually send the event. | 464 // Actually send the event. |
| 453 std::vector< ::ppapi::InputEventData > events; | 465 std::vector< ::ppapi::InputEventData > events; |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 513 if (clip.IsEmpty()) { | 525 if (clip.IsEmpty()) { |
| 514 // WebKit can give weird (x,y) positions for empty clip rects (since the | 526 // WebKit can give weird (x,y) positions for empty clip rects (since the |
| 515 // position technically doesn't matter). But we want to make these | 527 // position technically doesn't matter). But we want to make these |
| 516 // consistent since this is given to the plugin, so force everything to 0 | 528 // consistent since this is given to the plugin, so force everything to 0 |
| 517 // in the "everything is clipped" case. | 529 // in the "everything is clipped" case. |
| 518 clip_ = gfx::Rect(); | 530 clip_ = gfx::Rect(); |
| 519 } else { | 531 } else { |
| 520 clip_ = clip; | 532 clip_ = clip; |
| 521 } | 533 } |
| 522 | 534 |
| 535 if (scrollbar_group_) |
| 536 scrollbar_group_->ContentResized(); |
| 537 |
| 523 PP_Rect pp_position, pp_clip; | 538 PP_Rect pp_position, pp_clip; |
| 524 RectToPPRect(position_, &pp_position); | 539 RectToPPRect(position_, &pp_position); |
| 525 RectToPPRect(clip_, &pp_clip); | 540 RectToPPRect(clip_, &pp_clip); |
| 526 instance_interface_->DidChangeView(pp_instance(), &pp_position, &pp_clip); | 541 instance_interface_->DidChangeView(pp_instance(), &pp_position, &pp_clip); |
| 527 } | 542 } |
| 528 | 543 |
| 529 void PluginInstance::SetWebKitFocus(bool has_focus) { | 544 void PluginInstance::SetWebKitFocus(bool has_focus) { |
| 530 if (has_webkit_focus_ == has_focus) | 545 if (has_webkit_focus_ == has_focus) |
| 531 return; | 546 return; |
| 532 | 547 |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 665 | 680 |
| 666 void PluginInstance::StopFind() { | 681 void PluginInstance::StopFind() { |
| 667 // Keep a reference on the stack. See NOTE above. | 682 // Keep a reference on the stack. See NOTE above. |
| 668 scoped_refptr<PluginInstance> ref(this); | 683 scoped_refptr<PluginInstance> ref(this); |
| 669 if (!LoadFindInterface()) | 684 if (!LoadFindInterface()) |
| 670 return; | 685 return; |
| 671 find_identifier_ = -1; | 686 find_identifier_ = -1; |
| 672 plugin_find_interface_->StopFind(pp_instance()); | 687 plugin_find_interface_->StopFind(pp_instance()); |
| 673 } | 688 } |
| 674 | 689 |
| 690 void PluginInstance::WillStartLiveResize() { |
| 691 if (scrollbar_group_) |
| 692 scrollbar_group_->WillStartLiveResize(); |
| 693 } |
| 694 |
| 695 void PluginInstance::WillEndLiveResize() { |
| 696 if (scrollbar_group_) |
| 697 scrollbar_group_->WillEndLiveResize(); |
| 698 } |
| 699 |
| 675 bool PluginInstance::LoadFindInterface() { | 700 bool PluginInstance::LoadFindInterface() { |
| 676 if (!plugin_find_interface_) { | 701 if (!plugin_find_interface_) { |
| 677 plugin_find_interface_ = | 702 plugin_find_interface_ = |
| 678 static_cast<const PPP_Find_Dev*>(module_->GetPluginInterface( | 703 static_cast<const PPP_Find_Dev*>(module_->GetPluginInterface( |
| 679 PPP_FIND_DEV_INTERFACE)); | 704 PPP_FIND_DEV_INTERFACE)); |
| 680 } | 705 } |
| 681 | 706 |
| 682 return !!plugin_find_interface_; | 707 return !!plugin_find_interface_; |
| 683 } | 708 } |
| 684 | 709 |
| (...skipping 640 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1325 // Don't actually verify that the object is in the set since during module | 1350 // Don't actually verify that the object is in the set since during module |
| 1326 // deletion we'll be in the process of freeing them. | 1351 // deletion we'll be in the process of freeing them. |
| 1327 live_plugin_objects_.erase(plugin_object); | 1352 live_plugin_objects_.erase(plugin_object); |
| 1328 } | 1353 } |
| 1329 | 1354 |
| 1330 bool PluginInstance::IsFullPagePlugin() const { | 1355 bool PluginInstance::IsFullPagePlugin() const { |
| 1331 WebFrame* frame = container()->element().document().frame(); | 1356 WebFrame* frame = container()->element().document().frame(); |
| 1332 return frame->view()->mainFrame()->document().isPluginDocument(); | 1357 return frame->view()->mainFrame()->document().isPluginDocument(); |
| 1333 } | 1358 } |
| 1334 | 1359 |
| 1360 void PluginInstance::SetScrollbarGroup( |
| 1361 PPB_ScrollbarGroup_Impl* scrollbar_group) { |
| 1362 if (!IsFullPagePlugin()) |
| 1363 return; |
| 1364 |
| 1365 // Only handle one scrollbar group for now, i.e. the normal case of one group |
| 1366 // for a full-page plugin. |
| 1367 DCHECK(!scrollbar_group || !scrollbar_group_); |
| 1368 scrollbar_group_ = scrollbar_group; |
| 1369 } |
| 1370 |
| 1335 PPB_Instance_FunctionAPI* PluginInstance::AsPPB_Instance_FunctionAPI() { | 1371 PPB_Instance_FunctionAPI* PluginInstance::AsPPB_Instance_FunctionAPI() { |
| 1336 return this; | 1372 return this; |
| 1337 } | 1373 } |
| 1338 | 1374 |
| 1339 PP_Bool PluginInstance::BindGraphics(PP_Instance instance, | 1375 PP_Bool PluginInstance::BindGraphics(PP_Instance instance, |
| 1340 PP_Resource device) { | 1376 PP_Resource device) { |
| 1341 if (bound_graphics_.get()) { | 1377 if (bound_graphics_.get()) { |
| 1342 if (GetBoundGraphics2D()) { | 1378 if (GetBoundGraphics2D()) { |
| 1343 GetBoundGraphics2D()->BindToInstance(NULL); | 1379 GetBoundGraphics2D()->BindToInstance(NULL); |
| 1344 } else if (GetBoundGraphics3D()) { | 1380 } else if (GetBoundGraphics3D()) { |
| (...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1538 void PluginInstance::PostMessage(PP_Instance instance, PP_Var message) { | 1574 void PluginInstance::PostMessage(PP_Instance instance, PP_Var message) { |
| 1539 message_channel_->PostMessageToJavaScript(message); | 1575 message_channel_->PostMessageToJavaScript(message); |
| 1540 } | 1576 } |
| 1541 | 1577 |
| 1542 void PluginInstance::SubscribeToPolicyUpdates(PP_Instance instance) { | 1578 void PluginInstance::SubscribeToPolicyUpdates(PP_Instance instance) { |
| 1543 delegate()->SubscribeToPolicyUpdates(this); | 1579 delegate()->SubscribeToPolicyUpdates(this); |
| 1544 } | 1580 } |
| 1545 | 1581 |
| 1546 } // namespace ppapi | 1582 } // namespace ppapi |
| 1547 } // namespace webkit | 1583 } // namespace webkit |
| OLD | NEW |