Index: content/browser/web_contents/web_contents_view_aura.cc |
diff --git a/content/browser/web_contents/web_contents_view_aura.cc b/content/browser/web_contents/web_contents_view_aura.cc |
index 0afbd744a7d4b9fd664297bd23f2f995ab493e23..d9e6f0d5f78c326f467123db45eb03a11faa1f16 100644 |
--- a/content/browser/web_contents/web_contents_view_aura.cc |
+++ b/content/browser/web_contents/web_contents_view_aura.cc |
@@ -169,7 +169,8 @@ WebContentsViewAura::WebContentsViewAura( |
view_(NULL), |
delegate_(delegate), |
current_drag_op_(WebKit::WebDragOperationNone), |
- close_tab_after_drag_ends_(false) { |
+ close_tab_after_drag_ends_(false), |
+ drag_dest_delegate_(NULL) { |
} |
WebContentsViewAura::~WebContentsViewAura() { |
@@ -198,10 +199,6 @@ void WebContentsViewAura::EndDrag(WebKit::WebDragOperationsMask ops) { |
screen_loc.y(), ops); |
} |
-content::WebDragDestDelegate* WebContentsViewAura::GetDragDestDelegate() { |
- return delegate_.get() ? delegate_->GetDragDestDelegate() : NULL; |
-} |
- |
//////////////////////////////////////////////////////////////////////////////// |
// WebContentsViewAura, WebContentsView implementation: |
@@ -218,6 +215,12 @@ void WebContentsViewAura::CreateView(const gfx::Size& initial_size) { |
#endif |
window_->layer()->SetMasksToBounds(true); |
window_->SetName("WebContentsViewAura"); |
+ |
+ // delegate_->GetDragDestDelegate() creates a new delegate on every call. |
+ // Hence, we save a reference to it locally. Similar model is used on other |
+ // platforms as well. |
+ if (delegate_.get()) |
+ drag_dest_delegate_ = delegate_->GetDragDestDelegate(); |
} |
content::RenderWidgetHostView* WebContentsViewAura::CreateViewForWidget( |
@@ -450,7 +453,8 @@ void WebContentsViewAura::StartDragging( |
} |
EndDrag(ConvertToWeb(result_op)); |
- web_contents_->GetRenderViewHost()->DragSourceSystemDragEnded();} |
+ web_contents_->GetRenderViewHost()->DragSourceSystemDragEnded(); |
+} |
void WebContentsViewAura::UpdateDragCursor(WebKit::WebDragOperation operation) { |
current_drag_op_ = operation; |
@@ -554,8 +558,8 @@ void WebContentsViewAura::OnWindowVisibilityChanged(bool visible) { |
// WebContentsViewAura, aura::client::DragDropDelegate implementation: |
void WebContentsViewAura::OnDragEntered(const aura::DropTargetEvent& event) { |
- if (GetDragDestDelegate()) |
- GetDragDestDelegate()->DragInitialize(web_contents_); |
+ if (drag_dest_delegate_) |
+ drag_dest_delegate_->DragInitialize(web_contents_); |
WebDropData drop_data; |
PrepareWebDropData(&drop_data, event.data()); |
@@ -566,9 +570,9 @@ void WebContentsViewAura::OnDragEntered(const aura::DropTargetEvent& event) { |
web_contents_->GetRenderViewHost()->DragTargetDragEnter( |
drop_data, event.location(), screen_pt, op); |
- if (GetDragDestDelegate()) { |
- GetDragDestDelegate()->OnReceiveDragData(event.data()); |
- GetDragDestDelegate()->OnDragEnter(); |
+ if (drag_dest_delegate_) { |
+ drag_dest_delegate_->OnReceiveDragData(event.data()); |
+ drag_dest_delegate_->OnDragEnter(); |
} |
} |
@@ -579,23 +583,23 @@ int WebContentsViewAura::OnDragUpdated(const aura::DropTargetEvent& event) { |
web_contents_->GetRenderViewHost()->DragTargetDragOver( |
event.location(), screen_pt, op); |
- if (GetDragDestDelegate()) |
- GetDragDestDelegate()->OnDragOver(); |
+ if (drag_dest_delegate_) |
+ drag_dest_delegate_->OnDragOver(); |
return ConvertFromWeb(current_drag_op_); |
} |
void WebContentsViewAura::OnDragExited() { |
web_contents_->GetRenderViewHost()->DragTargetDragLeave(); |
- if (GetDragDestDelegate()) |
- GetDragDestDelegate()->OnDragLeave(); |
+ if (drag_dest_delegate_) |
+ drag_dest_delegate_->OnDragLeave(); |
} |
int WebContentsViewAura::OnPerformDrop(const aura::DropTargetEvent& event) { |
web_contents_->GetRenderViewHost()->DragTargetDrop( |
event.location(), |
GetNativeView()->GetRootWindow()->last_mouse_location()); |
- if (GetDragDestDelegate()) |
- GetDragDestDelegate()->OnDrop(); |
+ if (drag_dest_delegate_) |
+ drag_dest_delegate_->OnDrop(); |
return current_drag_op_; |
} |