| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_VIEW_H_ | 5 #ifndef CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_VIEW_H_ |
| 6 #define CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_VIEW_H_ | 6 #define CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_VIEW_H_ |
| 7 | 7 |
| 8 #include <map> | 8 #include <map> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 10 matching lines...) Expand all Loading... |
| 21 #include "chrome/browser/ui/tabs/tab_strip_model_observer.h" | 21 #include "chrome/browser/ui/tabs/tab_strip_model_observer.h" |
| 22 #include "chrome/browser/ui/views/frame/browser_frame.h" | 22 #include "chrome/browser/ui/views/frame/browser_frame.h" |
| 23 #include "chrome/browser/ui/views/frame/immersive_mode_controller.h" | 23 #include "chrome/browser/ui/views/frame/immersive_mode_controller.h" |
| 24 #include "chrome/browser/ui/views/frame/scroll_end_effect_controller.h" | 24 #include "chrome/browser/ui/views/frame/scroll_end_effect_controller.h" |
| 25 #include "chrome/browser/ui/views/load_complete_listener.h" | 25 #include "chrome/browser/ui/views/load_complete_listener.h" |
| 26 #include "ui/base/accelerators/accelerator.h" | 26 #include "ui/base/accelerators/accelerator.h" |
| 27 #include "ui/base/models/simple_menu_model.h" | 27 #include "ui/base/models/simple_menu_model.h" |
| 28 #include "ui/gfx/native_widget_types.h" | 28 #include "ui/gfx/native_widget_types.h" |
| 29 #include "ui/gfx/sys_color_change_listener.h" | 29 #include "ui/gfx/sys_color_change_listener.h" |
| 30 #include "ui/views/controls/button/button.h" | 30 #include "ui/views/controls/button/button.h" |
| 31 #include "ui/views/controls/single_split_view_listener.h" | |
| 32 #include "ui/views/controls/webview/unhandled_keyboard_event_handler.h" | 31 #include "ui/views/controls/webview/unhandled_keyboard_event_handler.h" |
| 33 #include "ui/views/widget/widget_delegate.h" | 32 #include "ui/views/widget/widget_delegate.h" |
| 34 #include "ui/views/widget/widget_observer.h" | 33 #include "ui/views/widget/widget_observer.h" |
| 35 #include "ui/views/window/client_view.h" | 34 #include "ui/views/window/client_view.h" |
| 36 | 35 |
| 37 #if defined(OS_WIN) | 36 #if defined(OS_WIN) |
| 38 #include "chrome/browser/hang_monitor/hung_plugin_action.h" | 37 #include "chrome/browser/hang_monitor/hung_plugin_action.h" |
| 39 #include "chrome/browser/hang_monitor/hung_window_detector.h" | 38 #include "chrome/browser/hang_monitor/hung_window_detector.h" |
| 40 #endif | 39 #endif |
| 41 | 40 |
| 42 // NOTE: For more information about the objects and files in this directory, | 41 // NOTE: For more information about the objects and files in this directory, |
| 43 // view: http://dev.chromium.org/developers/design-documents/browser-window | 42 // view: http://dev.chromium.org/developers/design-documents/browser-window |
| 44 | 43 |
| 45 class BookmarkBarView; | 44 class BookmarkBarView; |
| 46 class Browser; | 45 class Browser; |
| 47 class BrowserViewLayout; | 46 class BrowserViewLayout; |
| 48 class ContentsContainer; | 47 class ContentsLayoutManager; |
| 49 class DownloadShelfView; | 48 class DownloadShelfView; |
| 50 class FullscreenExitBubbleViews; | 49 class FullscreenExitBubbleViews; |
| 51 class InfoBarContainerView; | 50 class InfoBarContainerView; |
| 52 class LocationBarView; | 51 class LocationBarView; |
| 53 class StatusBubbleViews; | 52 class StatusBubbleViews; |
| 54 class SearchViewController; | 53 class SearchViewController; |
| 55 class TabStrip; | 54 class TabStrip; |
| 56 class TabStripModel; | 55 class TabStripModel; |
| 57 class ToolbarView; | 56 class ToolbarView; |
| 58 class TopContainerView; | 57 class TopContainerView; |
| (...skipping 27 matching lines...) Expand all Loading... |
| 86 // including the TabStrip, toolbars, download shelves, the content area etc. | 85 // including the TabStrip, toolbars, download shelves, the content area etc. |
| 87 // | 86 // |
| 88 class BrowserView : public BrowserWindow, | 87 class BrowserView : public BrowserWindow, |
| 89 public BrowserWindowTesting, | 88 public BrowserWindowTesting, |
| 90 public TabStripModelObserver, | 89 public TabStripModelObserver, |
| 91 public ui::AcceleratorProvider, | 90 public ui::AcceleratorProvider, |
| 92 public views::WidgetDelegate, | 91 public views::WidgetDelegate, |
| 93 public views::WidgetObserver, | 92 public views::WidgetObserver, |
| 94 public views::ClientView, | 93 public views::ClientView, |
| 95 public InfoBarContainer::Delegate, | 94 public InfoBarContainer::Delegate, |
| 96 public views::SingleSplitViewListener, | |
| 97 public gfx::SysColorChangeListener, | 95 public gfx::SysColorChangeListener, |
| 98 public LoadCompleteListener::Delegate, | 96 public LoadCompleteListener::Delegate, |
| 99 public OmniboxPopupModelObserver { | 97 public OmniboxPopupModelObserver { |
| 100 public: | 98 public: |
| 101 // The browser view's class name. | 99 // The browser view's class name. |
| 102 static const char kViewClassName[]; | 100 static const char kViewClassName[]; |
| 103 | 101 |
| 104 BrowserView(); | 102 BrowserView(); |
| 105 virtual ~BrowserView(); | 103 virtual ~BrowserView(); |
| 106 | 104 |
| (...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 427 // Overridden from views::ClientView: | 425 // Overridden from views::ClientView: |
| 428 virtual bool CanClose() OVERRIDE; | 426 virtual bool CanClose() OVERRIDE; |
| 429 virtual int NonClientHitTest(const gfx::Point& point) OVERRIDE; | 427 virtual int NonClientHitTest(const gfx::Point& point) OVERRIDE; |
| 430 virtual gfx::Size GetMinimumSize() OVERRIDE; | 428 virtual gfx::Size GetMinimumSize() OVERRIDE; |
| 431 | 429 |
| 432 // InfoBarContainer::Delegate overrides | 430 // InfoBarContainer::Delegate overrides |
| 433 virtual SkColor GetInfoBarSeparatorColor() const OVERRIDE; | 431 virtual SkColor GetInfoBarSeparatorColor() const OVERRIDE; |
| 434 virtual void InfoBarContainerStateChanged(bool is_animating) OVERRIDE; | 432 virtual void InfoBarContainerStateChanged(bool is_animating) OVERRIDE; |
| 435 virtual bool DrawInfoBarArrows(int* x) const OVERRIDE; | 433 virtual bool DrawInfoBarArrows(int* x) const OVERRIDE; |
| 436 | 434 |
| 437 // views::SingleSplitViewListener overrides: | |
| 438 virtual bool SplitHandleMoved(views::SingleSplitView* sender) OVERRIDE; | |
| 439 | |
| 440 // gfx::SysColorChangeListener overrides: | 435 // gfx::SysColorChangeListener overrides: |
| 441 virtual void OnSysColorChange() OVERRIDE; | 436 virtual void OnSysColorChange() OVERRIDE; |
| 442 | 437 |
| 443 // Overridden from views::View: | 438 // Overridden from views::View: |
| 444 virtual const char* GetClassName() const OVERRIDE; | 439 virtual const char* GetClassName() const OVERRIDE; |
| 445 virtual void Layout() OVERRIDE; | 440 virtual void Layout() OVERRIDE; |
| 446 virtual void PaintChildren(gfx::Canvas* canvas) OVERRIDE; | 441 virtual void PaintChildren(gfx::Canvas* canvas) OVERRIDE; |
| 447 virtual void ViewHierarchyChanged( | 442 virtual void ViewHierarchyChanged( |
| 448 const ViewHierarchyChangedDetails& details) OVERRIDE; | 443 const ViewHierarchyChangedDetails& details) OVERRIDE; |
| 449 virtual void ChildPreferredSizeChanged(View* child) OVERRIDE; | 444 virtual void ChildPreferredSizeChanged(View* child) OVERRIDE; |
| 450 virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE; | 445 virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE; |
| 451 | 446 |
| 452 // Overridden from ui::AcceleratorTarget: | 447 // Overridden from ui::AcceleratorTarget: |
| 453 virtual bool AcceleratorPressed(const ui::Accelerator& accelerator) OVERRIDE; | 448 virtual bool AcceleratorPressed(const ui::Accelerator& accelerator) OVERRIDE; |
| 454 | 449 |
| 455 // OmniboxPopupModelObserver overrides | 450 // OmniboxPopupModelObserver overrides |
| 456 virtual void OnOmniboxPopupShownOrHidden() OVERRIDE; | 451 virtual void OnOmniboxPopupShownOrHidden() OVERRIDE; |
| 457 | 452 |
| 458 // Testing interface: | 453 // Testing interface: |
| 459 views::SingleSplitView* GetContentsSplitForTest() { return contents_split_; } | 454 views::View* GetContentsContainerForTest() { return contents_container_; } |
| 460 ContentsContainer* GetContentsContainerForTest() { | |
| 461 return contents_container_; | |
| 462 } | |
| 463 views::WebView* GetContentsWebViewForTest() { return contents_web_view_; } | 455 views::WebView* GetContentsWebViewForTest() { return contents_web_view_; } |
| 456 views::WebView* GetDevToolsWebViewForTest() { return devtools_web_view_; } |
| 464 | 457 |
| 465 private: | 458 private: |
| 466 // Do not friend BrowserViewLayout. Use the BrowserViewLayoutDelegate | 459 // Do not friend BrowserViewLayout. Use the BrowserViewLayoutDelegate |
| 467 // interface to keep these two classes decoupled and testable. | 460 // interface to keep these two classes decoupled and testable. |
| 468 friend class BrowserViewLayoutDelegateImpl; | 461 friend class BrowserViewLayoutDelegateImpl; |
| 469 FRIEND_TEST_ALL_PREFIXES(BrowserViewTest, BrowserView); | 462 FRIEND_TEST_ALL_PREFIXES(BrowserViewTest, BrowserView); |
| 470 FRIEND_TEST_ALL_PREFIXES(BrowserViewsAccessibilityTest, | 463 FRIEND_TEST_ALL_PREFIXES(BrowserViewsAccessibilityTest, |
| 471 TestAboutChromeViewAccObj); | 464 TestAboutChromeViewAccObj); |
| 472 | 465 |
| 473 enum FullscreenType { | 466 enum FullscreenType { |
| (...skipping 11 matching lines...) Expand all Loading... |
| 485 // Callback for the loading animation(s) associated with this view. | 478 // Callback for the loading animation(s) associated with this view. |
| 486 void LoadingAnimationCallback(); | 479 void LoadingAnimationCallback(); |
| 487 | 480 |
| 488 // LoadCompleteListener::Delegate implementation. Creates and initializes the | 481 // LoadCompleteListener::Delegate implementation. Creates and initializes the |
| 489 // |jumplist_| after the first page load. | 482 // |jumplist_| after the first page load. |
| 490 virtual void OnLoadCompleted() OVERRIDE; | 483 virtual void OnLoadCompleted() OVERRIDE; |
| 491 | 484 |
| 492 // Returns the BrowserViewLayout. | 485 // Returns the BrowserViewLayout. |
| 493 BrowserViewLayout* GetBrowserViewLayout() const; | 486 BrowserViewLayout* GetBrowserViewLayout() const; |
| 494 | 487 |
| 488 // Returns the ContentsLayoutManager. |
| 489 ContentsLayoutManager* GetContentsLayoutManager() const; |
| 490 |
| 495 // Layout the Status Bubble. | 491 // Layout the Status Bubble. |
| 496 void LayoutStatusBubble(); | 492 void LayoutStatusBubble(); |
| 497 | 493 |
| 498 // Prepare to show the Bookmark Bar for the specified WebContents. | 494 // Prepare to show the Bookmark Bar for the specified WebContents. |
| 499 // Returns true if the Bookmark Bar can be shown (i.e. it's supported for this | 495 // Returns true if the Bookmark Bar can be shown (i.e. it's supported for this |
| 500 // Browser type) and there should be a subsequent re-layout to show it. | 496 // Browser type) and there should be a subsequent re-layout to show it. |
| 501 // |contents| can be NULL. | 497 // |contents| can be NULL. |
| 502 bool MaybeShowBookmarkBar(content::WebContents* contents); | 498 bool MaybeShowBookmarkBar(content::WebContents* contents); |
| 503 | 499 |
| 504 // Moves the bookmark bar view to the specified parent, which may be NULL, | 500 // Moves the bookmark bar view to the specified parent, which may be NULL, |
| 505 // |this|, or |top_container_|. Ensures that |top_container_| stays in front | 501 // |this|, or |top_container_|. Ensures that |top_container_| stays in front |
| 506 // of |bookmark_bar_view_|. | 502 // of |bookmark_bar_view_|. |
| 507 void SetBookmarkBarParent(views::View* new_parent); | 503 void SetBookmarkBarParent(views::View* new_parent); |
| 508 | 504 |
| 509 // Prepare to show an Info Bar for the specified WebContents. Returns | 505 // Prepare to show an Info Bar for the specified WebContents. Returns |
| 510 // true if there is an Info Bar to show and one is supported for this Browser | 506 // true if there is an Info Bar to show and one is supported for this Browser |
| 511 // type, and there should be a subsequent re-layout to show it. | 507 // type, and there should be a subsequent re-layout to show it. |
| 512 // |contents| can be NULL. | 508 // |contents| can be NULL. |
| 513 bool MaybeShowInfoBar(content::WebContents* contents); | 509 bool MaybeShowInfoBar(content::WebContents* contents); |
| 514 | 510 |
| 515 // Updates devtools window for given contents. This method will show docked | 511 // Updates devtools window for given contents. This method will show docked |
| 516 // devtools window for inspected |web_contents| that has docked devtools | 512 // devtools window for inspected |web_contents| that has docked devtools |
| 517 // and hide it for NULL or not inspected |web_contents|. It will also make | 513 // and hide it for NULL or not inspected |web_contents|. It will also make |
| 518 // sure devtools window size and position are restored for given tab. | 514 // sure devtools window size and position are restored for given tab. |
| 519 void UpdateDevToolsForContents(content::WebContents* web_contents); | 515 // This method will not update actual DevTools WebContents, if not |
| 520 | 516 // |update_devtools_web_contents|. In this case, manual update is required. |
| 521 // Shows docked devtools. | 517 void UpdateDevToolsForContents(content::WebContents* web_contents, |
| 522 void ShowDevToolsContainer(); | 518 bool update_devtools_web_contents); |
| 523 | |
| 524 // Hides docked devtools. | |
| 525 void HideDevToolsContainer(); | |
| 526 | |
| 527 // Reads split position from the current tab's devtools window and applies | |
| 528 // it to the devtools split. | |
| 529 void UpdateDevToolsSplitPosition(); | |
| 530 | 519 |
| 531 // Updates various optional child Views, e.g. Bookmarks Bar, Info Bar or the | 520 // Updates various optional child Views, e.g. Bookmarks Bar, Info Bar or the |
| 532 // Download Shelf in response to a change notification from the specified | 521 // Download Shelf in response to a change notification from the specified |
| 533 // |contents|. |contents| can be NULL. In this case, all optional UI will be | 522 // |contents|. |contents| can be NULL. In this case, all optional UI will be |
| 534 // removed. | 523 // removed. |
| 535 void UpdateUIForContents(content::WebContents* contents); | 524 void UpdateUIForContents(content::WebContents* contents); |
| 536 | 525 |
| 537 // Invoked to update the necessary things when our fullscreen state changes | 526 // Invoked to update the necessary things when our fullscreen state changes |
| 538 // to |fullscreen|. On Windows this is invoked immediately when we toggle the | 527 // to |fullscreen|. On Windows this is invoked immediately when we toggle the |
| 539 // full screen state. On Linux changing the fullscreen state is async, so we | 528 // full screen state. On Linux changing the fullscreen state is async, so we |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 604 // | -------------------------------------------------------------- | | 593 // | -------------------------------------------------------------- | |
| 605 // | | Tabs (tabstrip_) | | | 594 // | | Tabs (tabstrip_) | | |
| 606 // | |------------------------------------------------------------| | | 595 // | |------------------------------------------------------------| | |
| 607 // | | Navigation buttons, address bar, menu (toolbar_) | | | 596 // | | Navigation buttons, address bar, menu (toolbar_) | | |
| 608 // | -------------------------------------------------------------- | | 597 // | -------------------------------------------------------------- | |
| 609 // |------------------------------------------------------------------| | 598 // |------------------------------------------------------------------| |
| 610 // | All infobars (infobar_container_) [1] | | 599 // | All infobars (infobar_container_) [1] | |
| 611 // |------------------------------------------------------------------| | 600 // |------------------------------------------------------------------| |
| 612 // | Bookmarks (bookmark_bar_view_) [1] | | 601 // | Bookmarks (bookmark_bar_view_) [1] | |
| 613 // |------------------------------------------------------------------| | 602 // |------------------------------------------------------------------| |
| 614 // | Debugger splitter (contents_split_) | | 603 // | Contents container (contents_container_) | |
| 615 // | -------------------------------------------------------------- | | 604 // | -------------------------------------------------------------- | |
| 616 // | | Page content (contents_container_) | | | 605 // | | devtools_web_view_ | | |
| 617 // | | -------------------------------------------------------- | | | 606 // | |------------------------------------------------------------| | |
| 618 // | | | contents_web_view_ | | | | 607 // | | contents_web_view_ | | |
| 619 // | | -------------------------------------------------------- | | | |
| 620 // | -------------------------------------------------------------- | | |
| 621 // | -------------------------------------------------------------- | | |
| 622 // | | Debugger (devtools_container_) | | | |
| 623 // | | | | | |
| 624 // | -------------------------------------------------------------- | | 608 // | -------------------------------------------------------------- | |
| 625 // |------------------------------------------------------------------| | 609 // |------------------------------------------------------------------| |
| 626 // | Active downloads (download_shelf_) | | 610 // | Active downloads (download_shelf_) | |
| 627 // -------------------------------------------------------------------- | 611 // -------------------------------------------------------------------- |
| 628 // | 612 // |
| 629 // [1] The bookmark bar and info bar are swapped when on the new tab page. | 613 // [1] The bookmark bar and info bar are swapped when on the new tab page. |
| 630 // Additionally when the bookmark bar is detached, contents_container_ is | 614 // Additionally when the bookmark bar is detached, contents_container_ is |
| 631 // positioned on top of the bar while the tab's contents are placed below | 615 // positioned on top of the bar while the tab's contents are placed below |
| 632 // the bar. This allows the find bar to always align with the top of | 616 // the bar. This allows the find bar to always align with the top of |
| 633 // contents_container_ regardless if there's bookmark or info bars. | 617 // contents_container_ regardless if there's bookmark or info bars. |
| (...skipping 26 matching lines...) Expand all Loading... |
| 660 // The download shelf view (view at the bottom of the page). | 644 // The download shelf view (view at the bottom of the page). |
| 661 scoped_ptr<DownloadShelfView> download_shelf_; | 645 scoped_ptr<DownloadShelfView> download_shelf_; |
| 662 | 646 |
| 663 // The InfoBarContainerView that contains InfoBars for the current tab. | 647 // The InfoBarContainerView that contains InfoBars for the current tab. |
| 664 InfoBarContainerView* infobar_container_; | 648 InfoBarContainerView* infobar_container_; |
| 665 | 649 |
| 666 // The view that contains the selected WebContents. | 650 // The view that contains the selected WebContents. |
| 667 views::WebView* contents_web_view_; | 651 views::WebView* contents_web_view_; |
| 668 | 652 |
| 669 // The view that contains devtools window for the selected WebContents. | 653 // The view that contains devtools window for the selected WebContents. |
| 670 views::WebView* devtools_container_; | 654 views::WebView* devtools_web_view_; |
| 671 | 655 |
| 672 // The view managing the |contents_web_view_|. | 656 // The view managing the devtools and contents positions. |
| 673 ContentsContainer* contents_container_; | 657 // Handled by ContentsLayoutManager. |
| 674 | 658 views::View* contents_container_; |
| 675 // Split view containing the contents container and devtools container. | |
| 676 views::SingleSplitView* contents_split_; | |
| 677 | |
| 678 // Side to dock devtools to. | |
| 679 DevToolsDockSide devtools_dock_side_; | |
| 680 | 659 |
| 681 // Docked devtools window instance. NULL when current tab is not inspected | 660 // Docked devtools window instance. NULL when current tab is not inspected |
| 682 // or is inspected with undocked version of DevToolsWindow. | 661 // or is inspected with undocked version of DevToolsWindow. |
| 683 DevToolsWindow* devtools_window_; | 662 DevToolsWindow* devtools_window_; |
| 684 | 663 |
| 685 // Tracks and stores the last focused view which is not the | 664 // Tracks and stores the last focused view which is not the |
| 686 // devtools_container_ or any of its children. Used to restore focus once | 665 // devtools_web_view_ or any of its children. Used to restore focus once |
| 687 // the devtools_container_ is hidden. | 666 // the devtools_web_view_ is hidden. |
| 688 scoped_ptr<views::ExternalFocusTracker> devtools_focus_tracker_; | 667 scoped_ptr<views::ExternalFocusTracker> devtools_focus_tracker_; |
| 689 | 668 |
| 690 // The Status information bubble that appears at the bottom of the window. | 669 // The Status information bubble that appears at the bottom of the window. |
| 691 scoped_ptr<StatusBubbleViews> status_bubble_; | 670 scoped_ptr<StatusBubbleViews> status_bubble_; |
| 692 | 671 |
| 693 // A mapping between accelerators and commands. | 672 // A mapping between accelerators and commands. |
| 694 std::map<ui::Accelerator, int> accelerator_table_; | 673 std::map<ui::Accelerator, int> accelerator_table_; |
| 695 | 674 |
| 696 // True if we have already been initialized. | 675 // True if we have already been initialized. |
| 697 bool initialized_; | 676 bool initialized_; |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 741 scoped_ptr<ScrollEndEffectController> scroll_end_effect_controller_; | 720 scoped_ptr<ScrollEndEffectController> scroll_end_effect_controller_; |
| 742 | 721 |
| 743 gfx::ScopedSysColorChangeListener color_change_listener_; | 722 gfx::ScopedSysColorChangeListener color_change_listener_; |
| 744 | 723 |
| 745 mutable base::WeakPtrFactory<BrowserView> activate_modal_dialog_factory_; | 724 mutable base::WeakPtrFactory<BrowserView> activate_modal_dialog_factory_; |
| 746 | 725 |
| 747 DISALLOW_COPY_AND_ASSIGN(BrowserView); | 726 DISALLOW_COPY_AND_ASSIGN(BrowserView); |
| 748 }; | 727 }; |
| 749 | 728 |
| 750 #endif // CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_VIEW_H_ | 729 #endif // CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_VIEW_H_ |
| OLD | NEW |