14a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// Copyright (c) 2009 The Chromium Authors. All rights reserved.
24a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
34a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// found in the LICENSE file.
44a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
54a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#ifndef CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_ROOT_VIEW_H_
64a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#define CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_ROOT_VIEW_H_
74a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#pragma once
84a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
94a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "views/widget/root_view.h"
104a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass AbstractTabStripView;
124a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass BrowserView;
134a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
14dc0f95d653279beabeb9817299e2902918ba123eKristian Monsennamespace ui {
15dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass OSExchangeData;
16dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}
17dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
184a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// RootView implementation used by BrowserFrame. This forwards drop events to
194a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// the TabStrip. Visually the tabstrip extends to the top of the frame, but in
204a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// actually it doesn't. The tabstrip is only as high as a tab. To enable
214a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// dropping above the tabstrip BrowserRootView forwards drop events to the
224a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// TabStrip.
234a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass BrowserRootView : public views::RootView {
244a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch public:
254a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // You must call set_tabstrip before this class will accept drops.
264a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  BrowserRootView(BrowserView* browser_view, views::Widget* widget);
274a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Overridden from views::View:
294a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual bool GetDropFormats(
304a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch      int* formats,
31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      std::set<ui::OSExchangeData::CustomFormat>* custom_formats) OVERRIDE;
32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual bool AreDropTypesRequired() OVERRIDE;
33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual bool CanDrop(const ui::OSExchangeData& data) OVERRIDE;
34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void OnDragEntered(const views::DropTargetEvent& event) OVERRIDE;
35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual int OnDragUpdated(const views::DropTargetEvent& event) OVERRIDE;
36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void OnDragExited() OVERRIDE;
37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual int OnPerformDrop(const views::DropTargetEvent& event) OVERRIDE;
38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE;
394a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
404a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch private:
414a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Returns true if the event should be forwarded to the tabstrip.
424a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  bool ShouldForwardToTabStrip(const views::DropTargetEvent& event);
434a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
444a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Converts the event from the hosts coordinate system to the tabstrips
454a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // coordinate system.
464a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  views::DropTargetEvent* MapEventToTabStrip(
474a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch      const views::DropTargetEvent& event,
48dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      const ui::OSExchangeData& data);
494a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  inline AbstractTabStripView* tabstrip() const;
514a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
524a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Returns true if |data| has string contents and the user can "paste and go".
534a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // If |url| is non-NULL and the user can "paste and go", |url| is set to the
544a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // desired destination.
55dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  bool GetPasteAndGoURL(const ui::OSExchangeData& data, GURL* url);
564a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
574a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // The BrowserView.
584a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  BrowserView* browser_view_;
594a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
604a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // If true, drag and drop events are being forwarded to the tab strip.
614a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // This is used to determine when to send OnDragEntered and OnDragExited
624a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // to the tab strip.
634a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  bool forwarding_to_tab_strip_;
644a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
654a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(BrowserRootView);
664a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch};
674a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
684a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#endif  // CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_ROOT_VIEW_H_
69