1 // Copyright (c) 2009 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 #ifndef CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_ROOT_VIEW_H_ 6 #define CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_ROOT_VIEW_H_ 7 #pragma once 8 9 #include "views/widget/root_view.h" 10 11 class AbstractTabStripView; 12 class BrowserView; 13 14 namespace ui { 15 class OSExchangeData; 16 } 17 18 // RootView implementation used by BrowserFrame. This forwards drop events to 19 // the TabStrip. Visually the tabstrip extends to the top of the frame, but in 20 // actually it doesn't. The tabstrip is only as high as a tab. To enable 21 // dropping above the tabstrip BrowserRootView forwards drop events to the 22 // TabStrip. 23 class BrowserRootView : public views::RootView { 24 public: 25 // You must call set_tabstrip before this class will accept drops. 26 BrowserRootView(BrowserView* browser_view, views::Widget* widget); 27 28 // Overridden from views::View: 29 virtual bool GetDropFormats( 30 int* formats, 31 std::set<ui::OSExchangeData::CustomFormat>* custom_formats) OVERRIDE; 32 virtual bool AreDropTypesRequired() OVERRIDE; 33 virtual bool CanDrop(const ui::OSExchangeData& data) OVERRIDE; 34 virtual void OnDragEntered(const views::DropTargetEvent& event) OVERRIDE; 35 virtual int OnDragUpdated(const views::DropTargetEvent& event) OVERRIDE; 36 virtual void OnDragExited() OVERRIDE; 37 virtual int OnPerformDrop(const views::DropTargetEvent& event) OVERRIDE; 38 virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE; 39 40 private: 41 // Returns true if the event should be forwarded to the tabstrip. 42 bool ShouldForwardToTabStrip(const views::DropTargetEvent& event); 43 44 // Converts the event from the hosts coordinate system to the tabstrips 45 // coordinate system. 46 views::DropTargetEvent* MapEventToTabStrip( 47 const views::DropTargetEvent& event, 48 const ui::OSExchangeData& data); 49 50 inline AbstractTabStripView* tabstrip() const; 51 52 // Returns true if |data| has string contents and the user can "paste and go". 53 // If |url| is non-NULL and the user can "paste and go", |url| is set to the 54 // desired destination. 55 bool GetPasteAndGoURL(const ui::OSExchangeData& data, GURL* url); 56 57 // The BrowserView. 58 BrowserView* browser_view_; 59 60 // If true, drag and drop events are being forwarded to the tab strip. 61 // This is used to determine when to send OnDragEntered and OnDragExited 62 // to the tab strip. 63 bool forwarding_to_tab_strip_; 64 65 DISALLOW_COPY_AND_ASSIGN(BrowserRootView); 66 }; 67 68 #endif // CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_ROOT_VIEW_H_ 69