Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(790)

Side by Side Diff: chrome/browser/ui/views/frame/browser_view.h

Issue 1152613003: Implement sidebar support for extension action popups (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Move SidebarManager to ExtensionSystem and remove notifications Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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>
11 11
12 #include "base/compiler_specific.h" 12 #include "base/compiler_specific.h"
13 #include "base/memory/scoped_ptr.h" 13 #include "base/memory/scoped_ptr.h"
14 #include "base/timer/timer.h" 14 #include "base/timer/timer.h"
15 #include "build/build_config.h" 15 #include "build/build_config.h"
16 #include "chrome/browser/devtools/devtools_window.h" 16 #include "chrome/browser/devtools/devtools_window.h"
17 #include "chrome/browser/extensions/sidebar_manager_observer.h"
17 #include "chrome/browser/signin/signin_header_helper.h" 18 #include "chrome/browser/signin/signin_header_helper.h"
18 #include "chrome/browser/ui/browser.h" 19 #include "chrome/browser/ui/browser.h"
19 #include "chrome/browser/ui/browser_window.h" 20 #include "chrome/browser/ui/browser_window.h"
20 #include "chrome/browser/ui/exclusive_access/exclusive_access_context.h" 21 #include "chrome/browser/ui/exclusive_access/exclusive_access_context.h"
21 #include "chrome/browser/ui/infobar_container_delegate.h" 22 #include "chrome/browser/ui/infobar_container_delegate.h"
22 #include "chrome/browser/ui/omnibox/omnibox_popup_model_observer.h" 23 #include "chrome/browser/ui/omnibox/omnibox_popup_model_observer.h"
23 #include "chrome/browser/ui/tabs/tab_strip_model_observer.h" 24 #include "chrome/browser/ui/tabs/tab_strip_model_observer.h"
24 #include "chrome/browser/ui/views/exclusive_access_bubble_views_context.h" 25 #include "chrome/browser/ui/views/exclusive_access_bubble_views_context.h"
25 #include "chrome/browser/ui/views/frame/browser_frame.h" 26 #include "chrome/browser/ui/views/frame/browser_frame.h"
26 #include "chrome/browser/ui/views/frame/contents_web_view.h" 27 #include "chrome/browser/ui/views/frame/contents_web_view.h"
27 #include "chrome/browser/ui/views/frame/immersive_mode_controller.h" 28 #include "chrome/browser/ui/views/frame/immersive_mode_controller.h"
28 #include "chrome/browser/ui/views/frame/web_contents_close_handler.h" 29 #include "chrome/browser/ui/views/frame/web_contents_close_handler.h"
29 #include "chrome/browser/ui/views/load_complete_listener.h" 30 #include "chrome/browser/ui/views/load_complete_listener.h"
30 #include "ui/base/accelerators/accelerator.h" 31 #include "ui/base/accelerators/accelerator.h"
31 #include "ui/base/models/simple_menu_model.h" 32 #include "ui/base/models/simple_menu_model.h"
32 #include "ui/gfx/native_widget_types.h" 33 #include "ui/gfx/native_widget_types.h"
33 #include "ui/views/controls/button/button.h" 34 #include "ui/views/controls/button/button.h"
35 #include "ui/views/controls/single_split_view_listener.h"
34 #include "ui/views/controls/webview/unhandled_keyboard_event_handler.h" 36 #include "ui/views/controls/webview/unhandled_keyboard_event_handler.h"
35 #include "ui/views/widget/widget_delegate.h" 37 #include "ui/views/widget/widget_delegate.h"
36 #include "ui/views/widget/widget_observer.h" 38 #include "ui/views/widget/widget_observer.h"
37 #include "ui/views/window/client_view.h" 39 #include "ui/views/window/client_view.h"
38 40
39 #if defined(OS_WIN) 41 #if defined(OS_WIN)
40 #include "chrome/browser/hang_monitor/hung_plugin_action.h" 42 #include "chrome/browser/hang_monitor/hung_plugin_action.h"
41 #include "chrome/browser/hang_monitor/hung_window_detector.h" 43 #include "chrome/browser/hang_monitor/hung_window_detector.h"
42 #endif 44 #endif
43 45
(...skipping 19 matching lines...) Expand all
63 class JumpList; 65 class JumpList;
64 #endif 66 #endif
65 67
66 namespace extensions { 68 namespace extensions {
67 class Extension; 69 class Extension;
68 } 70 }
69 71
70 namespace views { 72 namespace views {
71 class AccessiblePaneView; 73 class AccessiblePaneView;
72 class ExternalFocusTracker; 74 class ExternalFocusTracker;
75 class SingleSplitView;
73 class WebView; 76 class WebView;
74 } 77 }
75 78
76 /////////////////////////////////////////////////////////////////////////////// 79 ///////////////////////////////////////////////////////////////////////////////
77 // BrowserView 80 // BrowserView
78 // 81 //
79 // A ClientView subclass that provides the contents of a browser window, 82 // A ClientView subclass that provides the contents of a browser window,
80 // including the TabStrip, toolbars, download shelves, the content area etc. 83 // including the TabStrip, toolbars, download shelves, the content area etc.
81 // 84 //
82 class BrowserView : public BrowserWindow, 85 class BrowserView : public BrowserWindow,
83 public TabStripModelObserver, 86 public TabStripModelObserver,
84 public ui::AcceleratorProvider, 87 public ui::AcceleratorProvider,
85 public views::WidgetDelegate, 88 public views::WidgetDelegate,
86 public views::WidgetObserver, 89 public views::WidgetObserver,
87 public views::ClientView, 90 public views::ClientView,
88 public InfoBarContainerDelegate, 91 public InfoBarContainerDelegate,
89 public LoadCompleteListener::Delegate, 92 public LoadCompleteListener::Delegate,
90 public OmniboxPopupModelObserver, 93 public OmniboxPopupModelObserver,
94 public views::SingleSplitViewListener,
91 public ExclusiveAccessContext, 95 public ExclusiveAccessContext,
96 public SidebarManagerObserver,
92 public ExclusiveAccessBubbleViewsContext { 97 public ExclusiveAccessBubbleViewsContext {
93 public: 98 public:
94 // The browser view's class name. 99 // The browser view's class name.
95 static const char kViewClassName[]; 100 static const char kViewClassName[];
96 101
97 BrowserView(); 102 BrowserView();
98 ~BrowserView() override; 103 ~BrowserView() override;
99 104
100 // Takes ownership of |browser|. 105 // Takes ownership of |browser|.
101 void Init(Browser* browser); 106 void Init(Browser* browser);
102 107
103 void set_frame(BrowserFrame* frame) { frame_ = frame; } 108 void set_frame(BrowserFrame* frame) { frame_ = frame; }
104 BrowserFrame* frame() const { return frame_; } 109 BrowserFrame* frame() const { return frame_; }
105 110 int GetSidebarWidth() const;
106 // Returns a pointer to the BrowserView* interface implementation (an 111 // Returns a pointer to the BrowserView* interface implementation (an
107 // instance of this object, typically) for a given native window, or null if 112 // instance of this object, typically) for a given native window, or null if
108 // there is no such association. 113 // there is no such association.
109 // 114 //
110 // Don't use this unless you only have a NativeWindow. In nearly all 115 // Don't use this unless you only have a NativeWindow. In nearly all
111 // situations plumb through browser and use it. 116 // situations plumb through browser and use it.
112 static BrowserView* GetBrowserViewForNativeWindow(gfx::NativeWindow window); 117 static BrowserView* GetBrowserViewForNativeWindow(gfx::NativeWindow window);
113 118
114 // Returns the BrowserView used for the specified Browser. 119 // Returns the BrowserView used for the specified Browser.
115 static BrowserView* GetBrowserViewForBrowser(const Browser* browser); 120 static BrowserView* GetBrowserViewForBrowser(const Browser* browser);
(...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after
444 ExclusiveAccessManager* GetExclusiveAccessManager() override; 449 ExclusiveAccessManager* GetExclusiveAccessManager() override;
445 bool IsImmersiveModeEnabled() override; 450 bool IsImmersiveModeEnabled() override;
446 views::Widget* GetBubbleAssociatedWidget() override; 451 views::Widget* GetBubbleAssociatedWidget() override;
447 gfx::Rect GetTopContainerBoundsInScreen() override; 452 gfx::Rect GetTopContainerBoundsInScreen() override;
448 453
449 // Testing interface: 454 // Testing interface:
450 views::View* GetContentsContainerForTest() { return contents_container_; } 455 views::View* GetContentsContainerForTest() { return contents_container_; }
451 views::WebView* GetContentsWebViewForTest() { return contents_web_view_; } 456 views::WebView* GetContentsWebViewForTest() { return contents_web_view_; }
452 views::WebView* GetDevToolsWebViewForTest() { return devtools_web_view_; } 457 views::WebView* GetDevToolsWebViewForTest() { return devtools_web_view_; }
453 458
459 // Handle SidebarManager events
460 void OnSidebarShown(content::WebContents* tab,
461 const std::string& content_id) override;
462 void OnSidebarHidden(content::WebContents* tab,
463 const std::string& content_id) override;
464
454 private: 465 private:
455 // Do not friend BrowserViewLayout. Use the BrowserViewLayoutDelegate 466 // Do not friend BrowserViewLayout. Use the BrowserViewLayoutDelegate
456 // interface to keep these two classes decoupled and testable. 467 // interface to keep these two classes decoupled and testable.
457 friend class BrowserViewLayoutDelegateImpl; 468 friend class BrowserViewLayoutDelegateImpl;
458 FRIEND_TEST_ALL_PREFIXES(BrowserViewTest, BrowserView); 469 FRIEND_TEST_ALL_PREFIXES(BrowserViewTest, BrowserView);
459 FRIEND_TEST_ALL_PREFIXES(BrowserViewsAccessibilityTest, 470 FRIEND_TEST_ALL_PREFIXES(BrowserViewsAccessibilityTest,
460 TestAboutChromeViewAccObj); 471 TestAboutChromeViewAccObj);
461 472
462 enum FullscreenMode { 473 enum FullscreenMode {
463 NORMAL_FULLSCREEN, 474 NORMAL_FULLSCREEN,
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
508 // This method will not update actual DevTools WebContents, if not 519 // This method will not update actual DevTools WebContents, if not
509 // |update_devtools_web_contents|. In this case, manual update is required. 520 // |update_devtools_web_contents|. In this case, manual update is required.
510 void UpdateDevToolsForContents(content::WebContents* web_contents, 521 void UpdateDevToolsForContents(content::WebContents* web_contents,
511 bool update_devtools_web_contents); 522 bool update_devtools_web_contents);
512 523
513 // Updates various optional child Views, e.g. Bookmarks Bar, Info Bar or the 524 // Updates various optional child Views, e.g. Bookmarks Bar, Info Bar or the
514 // Download Shelf in response to a change notification from the specified 525 // Download Shelf in response to a change notification from the specified
515 // |contents|. |contents| can be null. In this case, all optional UI will be 526 // |contents|. |contents| can be null. In this case, all optional UI will be
516 // removed. 527 // removed.
517 void UpdateUIForContents(content::WebContents* contents); 528 void UpdateUIForContents(content::WebContents* contents);
518 529 bool SplitHandleMoved(views::SingleSplitView* sender) override;
519 // Invoked to update the necessary things when our fullscreen state changes 530 // Invoked to update the necessary things when our fullscreen state changes
520 // to |fullscreen|. On Windows this is invoked immediately when we toggle the 531 // to |fullscreen|. On Windows this is invoked immediately when we toggle the
521 // full screen state. On Linux changing the fullscreen state is async, so we 532 // full screen state. On Linux changing the fullscreen state is async, so we
522 // ask the window to change its fullscreen state, then when we get 533 // ask the window to change its fullscreen state, then when we get
523 // notification that it succeeded this method is invoked. 534 // notification that it succeeded this method is invoked.
524 // If |url| is not empty, it is the URL of the page that requested fullscreen 535 // If |url| is not empty, it is the URL of the page that requested fullscreen
525 // (via the fullscreen JS API). 536 // (via the fullscreen JS API).
526 // |bubble_type| determines what should be shown in the fullscreen exit 537 // |bubble_type| determines what should be shown in the fullscreen exit
527 // bubble. 538 // bubble.
528 void ProcessFullscreen(bool fullscreen, 539 void ProcessFullscreen(bool fullscreen,
529 FullscreenMode mode, 540 FullscreenMode mode,
530 const GURL& url, 541 const GURL& url,
531 ExclusiveAccessBubbleType bubble_type); 542 ExclusiveAccessBubbleType bubble_type);
532 543
533 // Returns whether immmersive fullscreen should replace fullscreen. This 544 // Returns whether immmersive fullscreen should replace fullscreen. This
534 // should only occur for "browser-fullscreen" for tabbed-typed windows (not 545 // should only occur for "browser-fullscreen" for tabbed-typed windows (not
535 // for tab-fullscreen and not for app/popup type windows). 546 // for tab-fullscreen and not for app/popup type windows).
536 bool ShouldUseImmersiveFullscreenForUrl(const GURL& url) const; 547 bool ShouldUseImmersiveFullscreenForUrl(const GURL& url) const;
537 548
538 // Copy the accelerator table from the app resources into something we can 549 // Copy the accelerator table from the app resources into something we can
539 // use. 550 // use.
540 void LoadAccelerators(); 551 void LoadAccelerators();
541 552
542 // Retrieves the command id for the specified Windows app command. 553 // Retrieves the command id for the specified Windows app command.
543 int GetCommandIDForAppCommandID(int app_command_id) const; 554 int GetCommandIDForAppCommandID(int app_command_id) const;
544 555
545 // Initialize the hung plugin detector. 556 // Initialize the hung plugin detector.
546 void InitHangMonitor(); 557 void InitHangMonitor();
558 void UpdateSidebarForContents(content::WebContents* new_contents);
547 559
548 // Possibly records a user metrics action corresponding to the passed-in 560 // Possibly records a user metrics action corresponding to the passed-in
549 // accelerator. Only implemented for Chrome OS, where we're interested in 561 // accelerator. Only implemented for Chrome OS, where we're interested in
550 // learning about how frequently the top-row keys are used. 562 // learning about how frequently the top-row keys are used.
551 void UpdateAcceleratorMetrics(const ui::Accelerator& accelerator, 563 void UpdateAcceleratorMetrics(const ui::Accelerator& accelerator,
552 int command_id); 564 int command_id);
553 565
554 // Calls |method| which is either WebContents::Cut, ::Copy, or ::Paste on 566 // Calls |method| which is either WebContents::Cut, ::Copy, or ::Paste on
555 // the given WebContents, returning true if it consumed the event. 567 // the given WebContents, returning true if it consumed the event.
556 bool DoCutCopyPasteForWebContents( 568 bool DoCutCopyPasteForWebContents(
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
683 695
684 // The custom JumpList for Windows 7. 696 // The custom JumpList for Windows 7.
685 scoped_refptr<JumpList> jumplist_; 697 scoped_refptr<JumpList> jumplist_;
686 #endif 698 #endif
687 699
688 // The timer used to update frames for the Loading Animation. 700 // The timer used to update frames for the Loading Animation.
689 base::RepeatingTimer<BrowserView> loading_animation_timer_; 701 base::RepeatingTimer<BrowserView> loading_animation_timer_;
690 702
691 views::UnhandledKeyboardEventHandler unhandled_keyboard_event_handler_; 703 views::UnhandledKeyboardEventHandler unhandled_keyboard_event_handler_;
692 704
705 views::WebView* sidebar_web_view_;
706
707 views::View* sidebar_container_;
708
709 views::SingleSplitView* sidebar_split_;
710
693 // Used to measure the loading spinner animation rate. 711 // Used to measure the loading spinner animation rate.
694 base::TimeTicks last_animation_time_; 712 base::TimeTicks last_animation_time_;
695 713
696 // If this flag is set then SetFocusToLocationBar() will set focus to the 714 // If this flag is set then SetFocusToLocationBar() will set focus to the
697 // location bar even if the browser window is not active. 715 // location bar even if the browser window is not active.
698 bool force_location_bar_focus_; 716 bool force_location_bar_focus_;
699 717
700 scoped_ptr<ImmersiveModeController> immersive_mode_controller_; 718 scoped_ptr<ImmersiveModeController> immersive_mode_controller_;
701 719
702 scoped_ptr<WebContentsCloseHandler> web_contents_close_handler_; 720 scoped_ptr<WebContentsCloseHandler> web_contents_close_handler_;
703 721
704 mutable base::WeakPtrFactory<BrowserView> activate_modal_dialog_factory_; 722 mutable base::WeakPtrFactory<BrowserView> activate_modal_dialog_factory_;
705 723
706 DISALLOW_COPY_AND_ASSIGN(BrowserView); 724 DISALLOW_COPY_AND_ASSIGN(BrowserView);
707 }; 725 };
708 726
709 #endif // CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_VIEW_H_ 727 #endif // CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_VIEW_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698