Home | History | Annotate | Download | only in tab_contents
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "chrome/browser/ui/aura/tab_contents/web_drag_bookmark_handler_aura.h"
      6 
      7 #include "chrome/browser/bookmarks/bookmark_node_data.h"
      8 #include "chrome/browser/ui/browser.h"
      9 #include "chrome/browser/ui/browser_finder.h"
     10 #include "chrome/browser/ui/browser_window.h"
     11 #include "chrome/browser/ui/bookmarks/bookmark_tab_helper.h"
     12 #include "content/public/browser/web_contents.h"
     13 #include "ui/base/dragdrop/os_exchange_data.h"
     14 
     15 using content::WebContents;
     16 
     17 WebDragBookmarkHandlerAura::WebDragBookmarkHandlerAura()
     18     : bookmark_tab_helper_(NULL),
     19       web_contents_(NULL) {
     20 }
     21 
     22 WebDragBookmarkHandlerAura::~WebDragBookmarkHandlerAura() {
     23 }
     24 
     25 void WebDragBookmarkHandlerAura::DragInitialize(WebContents* contents) {
     26   // Ideally we would want to initialize the the BookmarkTabHelper member in
     27   // the constructor. We cannot do that as the WebDragDest object is
     28   // created during the construction of the WebContents object.  The
     29   // BookmarkTabHelper is created much later.
     30   web_contents_ = contents;
     31   if (!bookmark_tab_helper_)
     32     bookmark_tab_helper_ = BookmarkTabHelper::FromWebContents(contents);
     33 }
     34 
     35 void WebDragBookmarkHandlerAura::OnDragOver() {
     36   if (bookmark_tab_helper_ && bookmark_tab_helper_->bookmark_drag_delegate()) {
     37     if (bookmark_drag_data_.is_valid())
     38       bookmark_tab_helper_->bookmark_drag_delegate()->OnDragOver(
     39           bookmark_drag_data_);
     40   }
     41 }
     42 
     43 void WebDragBookmarkHandlerAura::OnReceiveDragData(
     44     const ui::OSExchangeData& data) {
     45   if (bookmark_tab_helper_ && bookmark_tab_helper_->bookmark_drag_delegate()) {
     46     // Read the bookmark drag data and save it for use in later events in this
     47     // drag.
     48     bookmark_drag_data_.Read(data);
     49   }
     50 }
     51 
     52 void WebDragBookmarkHandlerAura::OnDragEnter() {
     53   if (bookmark_tab_helper_ && bookmark_tab_helper_->bookmark_drag_delegate()) {
     54     if (bookmark_drag_data_.is_valid())
     55       bookmark_tab_helper_->bookmark_drag_delegate()->OnDragEnter(
     56           bookmark_drag_data_);
     57   }
     58 }
     59 
     60 void WebDragBookmarkHandlerAura::OnDrop() {
     61   if (bookmark_tab_helper_) {
     62     if (bookmark_tab_helper_->bookmark_drag_delegate()) {
     63       if (bookmark_drag_data_.is_valid()) {
     64         bookmark_tab_helper_->bookmark_drag_delegate()->OnDrop(
     65             bookmark_drag_data_);
     66       }
     67     }
     68 
     69     // Focus the target browser.
     70     Browser* browser = chrome::FindBrowserWithWebContents(web_contents_);
     71     if (browser)
     72       browser->window()->Show();
     73   }
     74 
     75   bookmark_drag_data_.Clear();
     76 }
     77 
     78 void WebDragBookmarkHandlerAura::OnDragLeave() {
     79   if (bookmark_tab_helper_ && bookmark_tab_helper_->bookmark_drag_delegate()) {
     80     if (bookmark_drag_data_.is_valid())
     81       bookmark_tab_helper_->bookmark_drag_delegate()->OnDragLeave(
     82           bookmark_drag_data_);
     83   }
     84 
     85   bookmark_drag_data_.Clear();
     86 }
     87