| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/tab_contents/web_drag_bookmark_handler_aura.h" |
| |
| #include "chrome/browser/bookmarks/bookmark_node_data.h" |
| #include "chrome/browser/ui/browser.h" |
| #include "chrome/browser/ui/browser_finder.h" |
| #include "chrome/browser/ui/browser_window.h" |
| #include "chrome/browser/ui/bookmarks/bookmark_tab_helper.h" |
| #include "content/public/browser/web_contents.h" |
| #include "ui/base/dragdrop/os_exchange_data.h" |
| #include "ui/base/dragdrop/os_exchange_data_provider_aura.h" |
| #include "webkit/glue/webdropdata.h" |
| |
| using content::WebContents; |
| |
| WebDragBookmarkHandlerAura::WebDragBookmarkHandlerAura() |
| : bookmark_tab_helper_(NULL), |
| web_contents_(NULL) { |
| } |
| |
| WebDragBookmarkHandlerAura::~WebDragBookmarkHandlerAura() { |
| } |
| |
| void WebDragBookmarkHandlerAura::DragInitialize(WebContents* contents) { |
| // Ideally we would want to initialize the the BookmarkTabHelper member in |
| // the constructor. We cannot do that as the WebDragDest object is |
| // created during the construction of the WebContents object. The |
| // BookmarkTabHelper is created much later. |
| web_contents_ = contents; |
| if (!bookmark_tab_helper_) |
| bookmark_tab_helper_ = BookmarkTabHelper::FromWebContents(contents); |
| } |
| |
| void WebDragBookmarkHandlerAura::OnDragOver() { |
| if (bookmark_tab_helper_ && bookmark_tab_helper_->GetBookmarkDragDelegate()) { |
| if (bookmark_drag_data_.is_valid()) |
| bookmark_tab_helper_->GetBookmarkDragDelegate()->OnDragOver( |
| bookmark_drag_data_); |
| } |
| } |
| |
| void WebDragBookmarkHandlerAura::OnReceiveDragData( |
| const ui::OSExchangeData& data) { |
| if (bookmark_tab_helper_ && bookmark_tab_helper_->GetBookmarkDragDelegate()) { |
| // Read the bookmark drag data and save it for use in later events in this |
| // drag. |
| bookmark_drag_data_.Read(data); |
| } |
| } |
| |
| void WebDragBookmarkHandlerAura::OnDragEnter() { |
| if (bookmark_tab_helper_ && bookmark_tab_helper_->GetBookmarkDragDelegate()) { |
| if (bookmark_drag_data_.is_valid()) |
| bookmark_tab_helper_->GetBookmarkDragDelegate()->OnDragEnter( |
| bookmark_drag_data_); |
| } |
| } |
| |
| void WebDragBookmarkHandlerAura::OnDrop() { |
| if (bookmark_tab_helper_) { |
| if (bookmark_tab_helper_->GetBookmarkDragDelegate()) { |
| if (bookmark_drag_data_.is_valid()) { |
| bookmark_tab_helper_->GetBookmarkDragDelegate()->OnDrop( |
| bookmark_drag_data_); |
| } |
| } |
| |
| // Focus the target browser. |
| Browser* browser = browser::FindBrowserWithWebContents(web_contents_); |
| if (browser) |
| browser->window()->Show(); |
| } |
| |
| bookmark_drag_data_.Clear(); |
| } |
| |
| void WebDragBookmarkHandlerAura::OnDragLeave() { |
| if (bookmark_tab_helper_ && bookmark_tab_helper_->GetBookmarkDragDelegate()) { |
| if (bookmark_drag_data_.is_valid()) |
| bookmark_tab_helper_->GetBookmarkDragDelegate()->OnDragLeave( |
| bookmark_drag_data_); |
| } |
| |
| bookmark_drag_data_.Clear(); |
| } |