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

Side by Side Diff: third_party/WebKit/Source/web/WebPluginContainerImpl.cpp

Issue 2871453002: Delete widget tree (FrameView::parent_) (Closed)
Patch Set: Remove deferred state Created 3 years, 7 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
« no previous file with comments | « third_party/WebKit/Source/web/WebPluginContainerImpl.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 /* 1 /*
2 * Copyright (C) 2009 Google Inc. All rights reserved. 2 * Copyright (C) 2009 Google Inc. All rights reserved.
3 * Copyright (C) 2014 Opera Software ASA. All rights reserved. 3 * Copyright (C) 2014 Opera Software ASA. All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are 6 * modification, are permitted provided that the following conditions are
7 * met: 7 * met:
8 * 8 *
9 * * Redistributions of source code must retain the above copyright 9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 #include "public/web/WebPlugin.h" 105 #include "public/web/WebPlugin.h"
106 #include "public/web/WebPrintParams.h" 106 #include "public/web/WebPrintParams.h"
107 #include "public/web/WebPrintPresetOptions.h" 107 #include "public/web/WebPrintPresetOptions.h"
108 #include "public/web/WebViewClient.h" 108 #include "public/web/WebViewClient.h"
109 109
110 namespace blink { 110 namespace blink {
111 111
112 // Public methods -------------------------------------------------------------- 112 // Public methods --------------------------------------------------------------
113 113
114 void WebPluginContainerImpl::SetParent(FrameView* parent) { 114 void WebPluginContainerImpl::SetParent(FrameView* parent) {
115 if (parent) {
116 SetFrameOrPluginState(kAttached);
117 DCHECK(parent == ParentFrameView());
118 }
119 if (!parent) {
120 DCHECK(plugin_state_ == kAttached ||
121 (plugin_state_ == kDisposed && parent_));
122 SetFrameOrPluginState(kNotAttached);
123 }
124
115 DCHECK(!parent || !parent_); 125 DCHECK(!parent || !parent_);
116 if (!parent || !parent->IsVisible()) 126 if (!parent || !parent->IsVisible())
117 SetParentVisible(false); 127 SetParentVisible(false);
118 parent_ = parent; 128 parent_ = parent;
119 if (parent && parent->IsVisible()) 129 if (parent && parent->IsVisible())
120 SetParentVisible(true); 130 SetParentVisible(true);
121 } 131 }
122 132
133 FrameView* WebPluginContainerImpl::Parent() const {
134 if ((plugin_state_ == kAttached || plugin_state_ == kNotAttached) &&
135 element_->GetDocument().GetFrame())
136 DCHECK(ParentFrameView() == parent_);
137
138 return parent_;
139 }
140
141 FrameView* WebPluginContainerImpl::ParentFrameView() const {
142 if (plugin_state_ != kAttached)
143 return nullptr;
144
145 LocalFrame* frame = element_->GetDocument().GetFrame();
146 if (!frame)
147 return nullptr;
148
149 return frame->View();
150 }
151
152 void WebPluginContainerImpl::SetFrameOrPluginState(FrameOrPluginState state) {
153 VLOG(1) << "SetFrameOrPluginState " << this << " " << plugin_state_ << "->"
154 << state;
155 if (VLOG_IS_ON(2))
156 base::debug::StackTrace(10).Print();
157 switch (state) {
158 case kNotAttached:
159 DCHECK(plugin_state_ == kAttached);
160 break;
161 case kAttached:
162 DCHECK(plugin_state_ == kNotAttached);
163 break;
164 case kDeferred:
165 DCHECK(plugin_state_ == kNotAttached || plugin_state_ == kAttached ||
166 plugin_state_ == kDeferred);
167 break;
168 case kDisposed:
169 DCHECK(plugin_state_ == kNotAttached || plugin_state_ == kAttached ||
170 plugin_state_ == kDeferred || plugin_state_ == kDisposed);
171 break;
172 default:
173 NOTREACHED();
174 }
175 plugin_state_ = state;
176 }
177
123 void WebPluginContainerImpl::UpdateAllLifecyclePhases() { 178 void WebPluginContainerImpl::UpdateAllLifecyclePhases() {
124 if (!web_plugin_) 179 if (!web_plugin_)
125 return; 180 return;
126 181
127 web_plugin_->UpdateAllLifecyclePhases(); 182 web_plugin_->UpdateAllLifecyclePhases();
128 } 183 }
129 184
130 void WebPluginContainerImpl::Paint(GraphicsContext& context, 185 void WebPluginContainerImpl::Paint(GraphicsContext& context,
131 const CullRect& cull_rect) const { 186 const CullRect& cull_rect) const {
132 if (!parent_) 187 DCHECK(plugin_state_ == kAttached);
188 FrameView* parent = ParentFrameView();
189 if (!parent)
133 return; 190 return;
134 191
135 // Don't paint anything if the plugin doesn't intersect. 192 // Don't paint anything if the plugin doesn't intersect.
136 if (!cull_rect.IntersectsCullRect(frame_rect_)) 193 if (!cull_rect.IntersectsCullRect(frame_rect_))
137 return; 194 return;
138 195
139 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled() && web_layer_) { 196 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled() && web_layer_) {
140 // With Slimming Paint v2, composited plugins should have their layers 197 // With Slimming Paint v2, composited plugins should have their layers
141 // inserted rather than invoking WebPlugin::paint. 198 // inserted rather than invoking WebPlugin::paint.
142 RecordForeignLayer(context, *element_->GetLayoutObject(), 199 RecordForeignLayer(context, *element_->GetLayoutObject(),
143 DisplayItem::kForeignLayerPlugin, web_layer_, 200 DisplayItem::kForeignLayerPlugin, web_layer_,
144 frame_rect_.Location(), frame_rect_.Size()); 201 frame_rect_.Location(), frame_rect_.Size());
145 return; 202 return;
146 } 203 }
147 204
148 if (LayoutObjectDrawingRecorder::UseCachedDrawingIfPossible( 205 if (LayoutObjectDrawingRecorder::UseCachedDrawingIfPossible(
149 context, *element_->GetLayoutObject(), DisplayItem::Type::kWebPlugin)) 206 context, *element_->GetLayoutObject(), DisplayItem::Type::kWebPlugin))
150 return; 207 return;
151 208
152 LayoutObjectDrawingRecorder drawing_recorder( 209 LayoutObjectDrawingRecorder drawing_recorder(
153 context, *element_->GetLayoutObject(), DisplayItem::Type::kWebPlugin, 210 context, *element_->GetLayoutObject(), DisplayItem::Type::kWebPlugin,
154 cull_rect.rect_); 211 cull_rect.rect_);
155 context.Save(); 212 context.Save();
156 213
157 // The plugin is positioned in the root frame's coordinates, so it needs to 214 // The plugin is positioned in the root frame's coordinates, so it needs to
158 // be painted in them too. 215 // be painted in them too.
159 IntPoint origin = parent_->ContentsToRootFrame(IntPoint(0, 0)); 216 IntPoint origin = parent->ContentsToRootFrame(IntPoint(0, 0));
160 context.Translate(static_cast<float>(-origin.X()), 217 context.Translate(static_cast<float>(-origin.X()),
161 static_cast<float>(-origin.Y())); 218 static_cast<float>(-origin.Y()));
162 219
163 WebCanvas* canvas = context.Canvas(); 220 WebCanvas* canvas = context.Canvas();
164 221
165 IntRect window_rect = parent_->ContentsToRootFrame(cull_rect.rect_); 222 IntRect window_rect = parent->ContentsToRootFrame(cull_rect.rect_);
166 web_plugin_->Paint(canvas, window_rect); 223 web_plugin_->Paint(canvas, window_rect);
167 224
168 context.Restore(); 225 context.Restore();
169 } 226 }
170 227
171 void WebPluginContainerImpl::InvalidateRect(const IntRect& rect) { 228 void WebPluginContainerImpl::InvalidateRect(const IntRect& rect) {
172 if (!parent_) 229 // TODO(joelhockey): Usually parent should only be called when attached,
230 // but this is also called in state kDisposed in Dispose.
231 // Also called in state kDeferred in plugins/tabindex.html
232 DCHECK(plugin_state_ == kAttached || plugin_state_ == kDeferred ||
233 plugin_state_ == kDisposed);
234 FrameView* parent = ParentFrameView();
235 if (!parent)
173 return; 236 return;
174 237
175 LayoutBox* layout_object = ToLayoutBox(element_->GetLayoutObject()); 238 LayoutBox* layout_object = ToLayoutBox(element_->GetLayoutObject());
176 if (!layout_object) 239 if (!layout_object)
177 return; 240 return;
178 241
179 IntRect dirty_rect = rect; 242 IntRect dirty_rect = rect;
180 dirty_rect.Move( 243 dirty_rect.Move(
181 (layout_object->BorderLeft() + layout_object->PaddingLeft()).ToInt(), 244 (layout_object->BorderLeft() + layout_object->PaddingLeft()).ToInt(),
182 (layout_object->BorderTop() + layout_object->PaddingTop()).ToInt()); 245 (layout_object->BorderTop() + layout_object->PaddingTop()).ToInt());
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
424 void WebPluginContainerImpl::ScrollRect(const WebRect& rect) { 487 void WebPluginContainerImpl::ScrollRect(const WebRect& rect) {
425 InvalidateRect(rect); 488 InvalidateRect(rect);
426 } 489 }
427 490
428 void WebPluginContainerImpl::ScheduleAnimation() { 491 void WebPluginContainerImpl::ScheduleAnimation() {
429 if (auto* frame_view = element_->GetDocument().View()) 492 if (auto* frame_view = element_->GetDocument().View())
430 frame_view->ScheduleAnimation(); 493 frame_view->ScheduleAnimation();
431 } 494 }
432 495
433 void WebPluginContainerImpl::ReportGeometry() { 496 void WebPluginContainerImpl::ReportGeometry() {
497 DCHECK(plugin_state_ == kAttached);
498 FrameView* parent = ParentFrameView();
434 // We cannot compute geometry without a parent or layoutObject. 499 // We cannot compute geometry without a parent or layoutObject.
435 if (!parent_ || !element_ || !element_->GetLayoutObject() || !web_plugin_) 500 if (!parent || !element_ || !element_->GetLayoutObject() || !web_plugin_)
436 return; 501 return;
437 502
438 IntRect window_rect, clip_rect, unobscured_rect; 503 IntRect window_rect, clip_rect, unobscured_rect;
439 CalculateGeometry(window_rect, clip_rect, unobscured_rect); 504 CalculateGeometry(window_rect, clip_rect, unobscured_rect);
440 web_plugin_->UpdateGeometry(window_rect, clip_rect, unobscured_rect, 505 web_plugin_->UpdateGeometry(window_rect, clip_rect, unobscured_rect,
441 self_visible_); 506 self_visible_);
442 } 507 }
443 508
444 v8::Local<v8::Object> WebPluginContainerImpl::V8ObjectForElement() { 509 v8::Local<v8::Object> WebPluginContainerImpl::V8ObjectForElement() {
445 LocalFrame* frame = element_->GetDocument().GetFrame(); 510 LocalFrame* frame = element_->GetDocument().GetFrame();
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
568 EventHandlerRegistry::kWheelEventBlocking); 633 EventHandlerRegistry::kWheelEventBlocking);
569 else 634 else
570 registry.DidRemoveEventHandler(*element_, 635 registry.DidRemoveEventHandler(*element_,
571 EventHandlerRegistry::kWheelEventBlocking); 636 EventHandlerRegistry::kWheelEventBlocking);
572 } 637 }
573 638
574 wants_wheel_events_ = wants_wheel_events; 639 wants_wheel_events_ = wants_wheel_events;
575 if (Page* page = element_->GetDocument().GetPage()) { 640 if (Page* page = element_->GetDocument().GetPage()) {
576 if (ScrollingCoordinator* scrolling_coordinator = 641 if (ScrollingCoordinator* scrolling_coordinator =
577 page->GetScrollingCoordinator()) { 642 page->GetScrollingCoordinator()) {
578 if (parent_) 643 // TODO(joelhockey): Usually parent should only be called when in state
644 // kAttached, but this is called by TestPlugin::Initialize in state
645 // kNotAttached.
646 // Called in state kDisposed in plugins/re-request-touch-events-crash.html
647 DCHECK(plugin_state_ == kNotAttached || plugin_state_ == kAttached ||
648 plugin_state_ == kDisposed);
649 FrameView* parent = ParentFrameView();
650 if (parent)
579 scrolling_coordinator->NotifyGeometryChanged(); 651 scrolling_coordinator->NotifyGeometryChanged();
580 } 652 }
581 } 653 }
582 } 654 }
583 655
584 WebPoint WebPluginContainerImpl::RootFrameToLocalPoint( 656 WebPoint WebPluginContainerImpl::RootFrameToLocalPoint(
585 const WebPoint& point_in_root_frame) { 657 const WebPoint& point_in_root_frame) {
586 if (!parent_) 658 DCHECK(plugin_state_ == kAttached);
659 FrameView* parent = ParentFrameView();
660 if (!parent)
587 return point_in_root_frame; 661 return point_in_root_frame;
588 WebPoint point_in_content = parent_->RootFrameToContents(point_in_root_frame); 662 WebPoint point_in_content = parent->RootFrameToContents(point_in_root_frame);
589 return RoundedIntPoint(element_->GetLayoutObject()->AbsoluteToLocal( 663 return RoundedIntPoint(element_->GetLayoutObject()->AbsoluteToLocal(
590 FloatPoint(point_in_content), kUseTransforms)); 664 FloatPoint(point_in_content), kUseTransforms));
591 } 665 }
592 666
593 WebPoint WebPluginContainerImpl::LocalToRootFramePoint( 667 WebPoint WebPluginContainerImpl::LocalToRootFramePoint(
594 const WebPoint& point_in_local) { 668 const WebPoint& point_in_local) {
595 if (!parent_) 669 DCHECK(plugin_state_ == kAttached);
670 FrameView* parent = ParentFrameView();
671 if (!parent)
596 return point_in_local; 672 return point_in_local;
597 IntPoint absolute_point = 673 IntPoint absolute_point =
598 RoundedIntPoint(element_->GetLayoutObject()->LocalToAbsolute( 674 RoundedIntPoint(element_->GetLayoutObject()->LocalToAbsolute(
599 FloatPoint(point_in_local), kUseTransforms)); 675 FloatPoint(point_in_local), kUseTransforms));
600 return parent_->ContentsToRootFrame(absolute_point); 676 return parent->ContentsToRootFrame(absolute_point);
601 } 677 }
602 678
603 void WebPluginContainerImpl::DidReceiveResponse( 679 void WebPluginContainerImpl::DidReceiveResponse(
604 const ResourceResponse& response) { 680 const ResourceResponse& response) {
605 // Make sure that the plugin receives window geometry before data, or else 681 // Make sure that the plugin receives window geometry before data, or else
606 // plugins misbehave. 682 // plugins misbehave.
607 FrameRectsChanged(); 683 FrameRectsChanged();
608 684
609 WrappedResourceResponse url_response(response); 685 WrappedResourceResponse url_response(response);
610 web_plugin_->DidReceiveResponse(url_response); 686 web_plugin_->DidReceiveResponse(url_response);
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
659 735
660 bool WebPluginContainerImpl::WantsWheelEvents() { 736 bool WebPluginContainerImpl::WantsWheelEvents() {
661 return wants_wheel_events_; 737 return wants_wheel_events_;
662 } 738 }
663 739
664 // Private methods ------------------------------------------------------------- 740 // Private methods -------------------------------------------------------------
665 741
666 WebPluginContainerImpl::WebPluginContainerImpl(HTMLPlugInElement* element, 742 WebPluginContainerImpl::WebPluginContainerImpl(HTMLPlugInElement* element,
667 WebPlugin* web_plugin) 743 WebPlugin* web_plugin)
668 : ContextClient(element->GetDocument().GetFrame()), 744 : ContextClient(element->GetDocument().GetFrame()),
745 parent_(nullptr),
746 plugin_state_(kNotAttached),
669 element_(element), 747 element_(element),
670 web_plugin_(web_plugin), 748 web_plugin_(web_plugin),
671 web_layer_(nullptr), 749 web_layer_(nullptr),
672 touch_event_request_type_(kTouchEventRequestTypeNone), 750 touch_event_request_type_(kTouchEventRequestTypeNone),
673 wants_wheel_events_(false), 751 wants_wheel_events_(false),
674 self_visible_(false), 752 self_visible_(false),
675 parent_visible_(false), 753 parent_visible_(false),
676 is_disposed_(false) {} 754 is_disposed_(false) {}
677 755
678 WebPluginContainerImpl::~WebPluginContainerImpl() { 756 WebPluginContainerImpl::~WebPluginContainerImpl() {
679 // The plugin container must have been disposed of by now. 757 // The plugin container must have been disposed of by now.
680 DCHECK(!web_plugin_); 758 DCHECK(!web_plugin_);
681 } 759 }
682 760
683 void WebPluginContainerImpl::Dispose() { 761 void WebPluginContainerImpl::Dispose() {
684 is_disposed_ = true; 762 is_disposed_ = true;
763 SetFrameOrPluginState(kDisposed);
685 764
686 RequestTouchEventType(kTouchEventRequestTypeNone); 765 RequestTouchEventType(kTouchEventRequestTypeNone);
687 SetWantsWheelEvents(false); 766 SetWantsWheelEvents(false);
688 767
689 if (web_plugin_) { 768 if (web_plugin_) {
690 CHECK(web_plugin_->Container() == this); 769 CHECK(web_plugin_->Container() == this);
691 web_plugin_->Destroy(); 770 web_plugin_->Destroy();
692 web_plugin_ = nullptr; 771 web_plugin_ = nullptr;
693 } 772 }
694 773
695 if (web_layer_) { 774 if (web_layer_) {
696 GraphicsLayer::UnregisterContentsLayer(web_layer_); 775 GraphicsLayer::UnregisterContentsLayer(web_layer_);
697 web_layer_ = nullptr; 776 web_layer_ = nullptr;
698 } 777 }
699 } 778 }
700 779
701 DEFINE_TRACE(WebPluginContainerImpl) { 780 DEFINE_TRACE(WebPluginContainerImpl) {
702 visitor->Trace(parent_); 781 visitor->Trace(parent_);
703 visitor->Trace(element_); 782 visitor->Trace(element_);
704 ContextClient::Trace(visitor); 783 ContextClient::Trace(visitor);
705 PluginView::Trace(visitor); 784 PluginView::Trace(visitor);
706 } 785 }
707 786
708 void WebPluginContainerImpl::HandleMouseEvent(MouseEvent* event) { 787 void WebPluginContainerImpl::HandleMouseEvent(MouseEvent* event) {
709 // We cache the parent FrameView here as the plugin widget could be deleted 788 // We cache the parent FrameView here as the plugin widget could be deleted
710 // in the call to HandleEvent. See http://b/issue?id=1362948 789 // in the call to HandleEvent. See http://b/issue?id=1362948
711 FrameView* parent_view = parent_; 790 DCHECK(plugin_state_ == kAttached);
791 FrameView* parent = ParentFrameView();
712 792
713 // TODO(dtapuska): Move WebMouseEventBuilder into the anonymous namespace 793 // TODO(dtapuska): Move WebMouseEventBuilder into the anonymous namespace
714 // in this class. 794 // in this class.
715 WebMouseEventBuilder transformed_event( 795 WebMouseEventBuilder transformed_event(
716 parent_, LayoutItem(element_->GetLayoutObject()), *event); 796 parent, LayoutItem(element_->GetLayoutObject()), *event);
717 if (transformed_event.GetType() == WebInputEvent::kUndefined) 797 if (transformed_event.GetType() == WebInputEvent::kUndefined)
718 return; 798 return;
719 799
720 if (event->type() == EventTypeNames::mousedown) 800 if (event->type() == EventTypeNames::mousedown)
721 FocusPlugin(); 801 FocusPlugin();
722 802
723 WebCursorInfo cursor_info; 803 WebCursorInfo cursor_info;
724 if (web_plugin_ && web_plugin_->HandleInputEvent( 804 if (web_plugin_ && web_plugin_->HandleInputEvent(
725 WebCoalescedInputEvent(transformed_event), 805 WebCoalescedInputEvent(transformed_event),
726 cursor_info) != WebInputEventResult::kNotHandled) 806 cursor_info) != WebInputEventResult::kNotHandled)
727 event->SetDefaultHandled(); 807 event->SetDefaultHandled();
728 808
729 // A windowless plugin can change the cursor in response to a mouse move 809 // A windowless plugin can change the cursor in response to a mouse move
730 // event. We need to reflect the changed cursor in the frame view as the 810 // event. We need to reflect the changed cursor in the frame view as the
731 // mouse is moved in the boundaries of the windowless plugin. 811 // mouse is moved in the boundaries of the windowless plugin.
732 Page* page = parent_view->GetFrame().GetPage(); 812 Page* page = parent->GetFrame().GetPage();
733 if (!page) 813 if (!page)
734 return; 814 return;
735 page->GetChromeClient().SetCursorForPlugin( 815 page->GetChromeClient().SetCursorForPlugin(
736 cursor_info, &parent_view->GetFrame().LocalFrameRoot()); 816 cursor_info, &parent->GetFrame().LocalFrameRoot());
737 } 817 }
738 818
739 void WebPluginContainerImpl::HandleDragEvent(MouseEvent* event) { 819 void WebPluginContainerImpl::HandleDragEvent(MouseEvent* event) {
740 DCHECK(event->IsDragEvent()); 820 DCHECK(event->IsDragEvent());
741 821
742 WebDragStatus drag_status = kWebDragStatusUnknown; 822 WebDragStatus drag_status = kWebDragStatusUnknown;
743 if (event->type() == EventTypeNames::dragenter) 823 if (event->type() == EventTypeNames::dragenter)
744 drag_status = kWebDragStatusEnter; 824 drag_status = kWebDragStatusEnter;
745 else if (event->type() == EventTypeNames::dragleave) 825 else if (event->type() == EventTypeNames::dragleave)
746 drag_status = kWebDragStatusLeave; 826 drag_status = kWebDragStatusLeave;
(...skipping 16 matching lines...) Expand all
763 843
764 web_plugin_->HandleDragStatusUpdate(drag_status, drag_data, 844 web_plugin_->HandleDragStatusUpdate(drag_status, drag_data,
765 drag_operation_mask, drag_location, 845 drag_operation_mask, drag_location,
766 drag_screen_location); 846 drag_screen_location);
767 } 847 }
768 848
769 void WebPluginContainerImpl::HandleWheelEvent(WheelEvent* event) { 849 void WebPluginContainerImpl::HandleWheelEvent(WheelEvent* event) {
770 WebFloatPoint absolute_location = event->NativeEvent().PositionInRootFrame(); 850 WebFloatPoint absolute_location = event->NativeEvent().PositionInRootFrame();
771 851
772 // Translate the root frame position to content coordinates. 852 // Translate the root frame position to content coordinates.
773 if (parent_) { 853 DCHECK(plugin_state_ == kAttached);
774 absolute_location = parent_->RootFrameToContents(absolute_location); 854 if (FrameView* parent = ParentFrameView())
775 } 855 absolute_location = parent->RootFrameToContents(absolute_location);
776 856
777 IntPoint local_point = 857 IntPoint local_point =
778 RoundedIntPoint(element_->GetLayoutObject()->AbsoluteToLocal( 858 RoundedIntPoint(element_->GetLayoutObject()->AbsoluteToLocal(
779 absolute_location, kUseTransforms)); 859 absolute_location, kUseTransforms));
780 WebMouseWheelEvent translated_event = event->NativeEvent().FlattenTransform(); 860 WebMouseWheelEvent translated_event = event->NativeEvent().FlattenTransform();
781 translated_event.SetPositionInWidget(local_point.X(), local_point.Y()); 861 translated_event.SetPositionInWidget(local_point.X(), local_point.Y());
782 862
783 WebCursorInfo cursor_info; 863 WebCursorInfo cursor_info;
784 if (web_plugin_->HandleInputEvent(WebCoalescedInputEvent(translated_event), 864 if (web_plugin_->HandleInputEvent(WebCoalescedInputEvent(translated_event),
785 cursor_info) != 865 cursor_info) !=
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
910 cursor_info) != 990 cursor_info) !=
911 WebInputEventResult::kNotHandled) { 991 WebInputEventResult::kNotHandled) {
912 event->SetDefaultHandled(); 992 event->SetDefaultHandled();
913 return; 993 return;
914 } 994 }
915 995
916 // FIXME: Can a plugin change the cursor from a touch-event callback? 996 // FIXME: Can a plugin change the cursor from a touch-event callback?
917 } 997 }
918 998
919 void WebPluginContainerImpl::SynthesizeMouseEventIfPossible(TouchEvent* event) { 999 void WebPluginContainerImpl::SynthesizeMouseEventIfPossible(TouchEvent* event) {
1000 DCHECK(plugin_state_ == kAttached);
1001 FrameView* parent = ParentFrameView();
920 WebMouseEventBuilder web_event( 1002 WebMouseEventBuilder web_event(
921 parent_, LayoutItem(element_->GetLayoutObject()), *event); 1003 parent, LayoutItem(element_->GetLayoutObject()), *event);
922 if (web_event.GetType() == WebInputEvent::kUndefined) 1004 if (web_event.GetType() == WebInputEvent::kUndefined)
923 return; 1005 return;
924 1006
925 WebCursorInfo cursor_info; 1007 WebCursorInfo cursor_info;
926 if (web_plugin_->HandleInputEvent(WebCoalescedInputEvent(web_event), 1008 if (web_plugin_->HandleInputEvent(WebCoalescedInputEvent(web_event),
927 cursor_info) != 1009 cursor_info) !=
928 WebInputEventResult::kNotHandled) 1010 WebInputEventResult::kNotHandled)
929 event->SetDefaultHandled(); 1011 event->SetDefaultHandled();
930 } 1012 }
931 1013
932 void WebPluginContainerImpl::FocusPlugin() { 1014 void WebPluginContainerImpl::FocusPlugin() {
933 LocalFrame& containing_frame = parent_->GetFrame(); 1015 if (Page* current_page = GetFrame()->GetPage()) {
934 if (Page* current_page = containing_frame.GetPage()) 1016 current_page->GetFocusController().SetFocusedElement(element_, GetFrame());
935 current_page->GetFocusController().SetFocusedElement(element_, 1017 } else {
936 &containing_frame); 1018 GetFrame()->GetDocument()->SetFocusedElement(
937 else
938 containing_frame.GetDocument()->SetFocusedElement(
939 element_, FocusParams(SelectionBehaviorOnFocus::kNone, 1019 element_, FocusParams(SelectionBehaviorOnFocus::kNone,
940 kWebFocusTypeNone, nullptr)); 1020 kWebFocusTypeNone, nullptr));
1021 }
941 } 1022 }
942 1023
943 void WebPluginContainerImpl::IssuePaintInvalidations() { 1024 void WebPluginContainerImpl::IssuePaintInvalidations() {
944 if (pending_invalidation_rect_.IsEmpty()) 1025 if (pending_invalidation_rect_.IsEmpty())
945 return; 1026 return;
946 1027
947 LayoutBox* layout_object = ToLayoutBox(element_->GetLayoutObject()); 1028 LayoutBox* layout_object = ToLayoutBox(element_->GetLayoutObject());
948 if (!layout_object) 1029 if (!layout_object)
949 return; 1030 return;
950 1031
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
1026 .GetLayoutViewItem() 1107 .GetLayoutViewItem()
1027 .IsNull()) { 1108 .IsNull()) {
1028 // Take our element and get the clip rect from the enclosing layer and 1109 // Take our element and get the clip rect from the enclosing layer and
1029 // frame view. 1110 // frame view.
1030 ComputeClipRectsForPlugin(element_, window_rect, clip_rect, 1111 ComputeClipRectsForPlugin(element_, window_rect, clip_rect,
1031 unobscured_rect); 1112 unobscured_rect);
1032 } 1113 }
1033 } 1114 }
1034 1115
1035 } // namespace blink 1116 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/web/WebPluginContainerImpl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698