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

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

Issue 9006027: Rip Out the Sidebar API (Closed) Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: '' Created 8 years, 11 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 | Annotate | Revision Log
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 #include "chrome/browser/ui/views/frame/browser_view.h" 5 #include "chrome/browser/ui/views/frame/browser_view.h"
6 6
7 #if defined(TOOLKIT_USES_GTK) 7 #if defined(TOOLKIT_USES_GTK)
8 #include <gtk/gtk.h> 8 #include <gtk/gtk.h>
9 #endif 9 #endif
10 10
(...skipping 18 matching lines...) Expand all
29 #include "chrome/browser/instant/instant_controller.h" 29 #include "chrome/browser/instant/instant_controller.h"
30 #include "chrome/browser/native_window_notification_source.h" 30 #include "chrome/browser/native_window_notification_source.h"
31 #include "chrome/browser/ntp_background_util.h" 31 #include "chrome/browser/ntp_background_util.h"
32 #include "chrome/browser/prefs/pref_service.h" 32 #include "chrome/browser/prefs/pref_service.h"
33 #include "chrome/browser/profiles/avatar_menu_model.h" 33 #include "chrome/browser/profiles/avatar_menu_model.h"
34 #include "chrome/browser/profiles/profile.h" 34 #include "chrome/browser/profiles/profile.h"
35 #include "chrome/browser/profiles/profile_info_cache.h" 35 #include "chrome/browser/profiles/profile_info_cache.h"
36 #include "chrome/browser/profiles/profile_manager.h" 36 #include "chrome/browser/profiles/profile_manager.h"
37 #include "chrome/browser/sessions/tab_restore_service.h" 37 #include "chrome/browser/sessions/tab_restore_service.h"
38 #include "chrome/browser/sessions/tab_restore_service_factory.h" 38 #include "chrome/browser/sessions/tab_restore_service_factory.h"
39 #include "chrome/browser/sidebar/sidebar_container.h"
40 #include "chrome/browser/sidebar/sidebar_manager.h"
41 #include "chrome/browser/tabs/tab_strip_model.h" 39 #include "chrome/browser/tabs/tab_strip_model.h"
42 #include "chrome/browser/themes/theme_service.h" 40 #include "chrome/browser/themes/theme_service.h"
43 #include "chrome/browser/ui/app_modal_dialogs/app_modal_dialog_queue.h" 41 #include "chrome/browser/ui/app_modal_dialogs/app_modal_dialog_queue.h"
44 #include "chrome/browser/ui/browser.h" 42 #include "chrome/browser/ui/browser.h"
45 #include "chrome/browser/ui/browser_dialogs.h" 43 #include "chrome/browser/ui/browser_dialogs.h"
46 #include "chrome/browser/ui/browser_list.h" 44 #include "chrome/browser/ui/browser_list.h"
47 #include "chrome/browser/ui/dialog_style.h" 45 #include "chrome/browser/ui/dialog_style.h"
48 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" 46 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
49 #include "chrome/browser/ui/tabs/tab_menu_model.h" 47 #include "chrome/browser/ui/tabs/tab_menu_model.h"
50 #include "chrome/browser/ui/toolbar/wrench_menu_model.h" 48 #include "chrome/browser/ui/toolbar/wrench_menu_model.h"
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after
311 BrowserView::BrowserView(Browser* browser) 309 BrowserView::BrowserView(Browser* browser)
312 : views::ClientView(NULL, NULL), 310 : views::ClientView(NULL, NULL),
313 last_focused_view_storage_id_( 311 last_focused_view_storage_id_(
314 views::ViewStorage::GetInstance()->CreateStorageID()), 312 views::ViewStorage::GetInstance()->CreateStorageID()),
315 frame_(NULL), 313 frame_(NULL),
316 browser_(browser), 314 browser_(browser),
317 active_bookmark_bar_(NULL), 315 active_bookmark_bar_(NULL),
318 tabstrip_(NULL), 316 tabstrip_(NULL),
319 toolbar_(NULL), 317 toolbar_(NULL),
320 infobar_container_(NULL), 318 infobar_container_(NULL),
321 sidebar_container_(NULL),
322 sidebar_split_(NULL),
323 contents_container_(NULL), 319 contents_container_(NULL),
324 devtools_container_(NULL), 320 devtools_container_(NULL),
325 preview_container_(NULL), 321 preview_container_(NULL),
326 contents_(NULL), 322 contents_(NULL),
327 contents_split_(NULL), 323 contents_split_(NULL),
328 devtools_dock_side_(DEVTOOLS_DOCK_SIDE_BOTTOM), 324 devtools_dock_side_(DEVTOOLS_DOCK_SIDE_BOTTOM),
329 initialized_(false), 325 initialized_(false),
330 ignore_layout_(true), 326 ignore_layout_(true),
331 #if defined(OS_WIN) && !defined(USE_AURA) 327 #if defined(OS_WIN) && !defined(USE_AURA)
332 hung_window_detector_(&hung_plugin_action_), 328 hung_window_detector_(&hung_plugin_action_),
333 ticker_(0), 329 ticker_(0),
334 #endif 330 #endif
335 force_location_bar_focus_(false) { 331 force_location_bar_focus_(false) {
336 browser_->tabstrip_model()->AddObserver(this); 332 browser_->tabstrip_model()->AddObserver(this);
337
338 registrar_.Add(
339 this,
340 chrome::NOTIFICATION_SIDEBAR_CHANGED,
341 content::Source<SidebarManager>(SidebarManager::GetInstance()));
342 } 333 }
343 334
344 BrowserView::~BrowserView() { 335 BrowserView::~BrowserView() {
345 #if defined(USE_AURA) 336 #if defined(USE_AURA)
346 // Destroy LauncherIconUpdater early on as it listens to the TabstripModel, 337 // Destroy LauncherIconUpdater early on as it listens to the TabstripModel,
347 // which is destroyed by the browser. 338 // which is destroyed by the browser.
348 icon_updater_.reset(); 339 icon_updater_.reset();
349 #endif 340 #endif
350 341
351 browser_->tabstrip_model()->RemoveObserver(this); 342 browser_->tabstrip_model()->RemoveObserver(this);
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
435 gfx::Point BrowserView::OffsetPointForToolbarBackgroundImage( 426 gfx::Point BrowserView::OffsetPointForToolbarBackgroundImage(
436 const gfx::Point& point) const { 427 const gfx::Point& point) const {
437 // The background image starts tiling horizontally at the window left edge and 428 // The background image starts tiling horizontally at the window left edge and
438 // vertically at the top edge of the horizontal tab strip (or where it would 429 // vertically at the top edge of the horizontal tab strip (or where it would
439 // be). We expect our parent's origin to be the window origin. 430 // be). We expect our parent's origin to be the window origin.
440 gfx::Point window_point(point.Add(GetMirroredPosition())); 431 gfx::Point window_point(point.Add(GetMirroredPosition()));
441 window_point.Offset(0, -frame_->GetHorizontalTabStripVerticalOffset(false)); 432 window_point.Offset(0, -frame_->GetHorizontalTabStripVerticalOffset(false));
442 return window_point; 433 return window_point;
443 } 434 }
444 435
445 int BrowserView::GetSidebarWidth() const {
446 if (!sidebar_container_ || !sidebar_container_->visible())
447 return 0;
448 return sidebar_split_->divider_offset();
449 }
450
451 bool BrowserView::IsTabStripVisible() const { 436 bool BrowserView::IsTabStripVisible() const {
452 return browser_->SupportsWindowFeature(Browser::FEATURE_TABSTRIP); 437 return browser_->SupportsWindowFeature(Browser::FEATURE_TABSTRIP);
453 } 438 }
454 439
455 bool BrowserView::IsOffTheRecord() const { 440 bool BrowserView::IsOffTheRecord() const {
456 return browser_->profile()->IsOffTheRecord(); 441 return browser_->profile()->IsOffTheRecord();
457 } 442 }
458 443
459 bool BrowserView::IsGuestSession() const { 444 bool BrowserView::IsGuestSession() const {
460 return browser_->profile()->IsGuestSession(); 445 return browser_->profile()->IsGuestSession();
(...skipping 503 matching lines...) Expand 10 before | Expand all | Expand 10 after
964 // with NULL to represent the tab contents getting focus. If one of these 949 // with NULL to represent the tab contents getting focus. If one of these
965 // is currently invisible or has no focusable children it will be 950 // is currently invisible or has no focusable children it will be
966 // automatically skipped. 951 // automatically skipped.
967 std::vector<views::AccessiblePaneView*> accessible_panes; 952 std::vector<views::AccessiblePaneView*> accessible_panes;
968 GetAccessiblePanes(&accessible_panes); 953 GetAccessiblePanes(&accessible_panes);
969 int pane_count = static_cast<int>(accessible_panes.size()); 954 int pane_count = static_cast<int>(accessible_panes.size());
970 955
971 std::vector<views::View*> accessible_views( 956 std::vector<views::View*> accessible_views(
972 accessible_panes.begin(), accessible_panes.end()); 957 accessible_panes.begin(), accessible_panes.end());
973 accessible_views.push_back(GetTabContentsContainerView()); 958 accessible_views.push_back(GetTabContentsContainerView());
974 if (sidebar_container_ && sidebar_container_->visible())
975 accessible_views.push_back(GetSidebarContainerView());
976 if (devtools_container_->visible()) 959 if (devtools_container_->visible())
977 accessible_views.push_back(devtools_container_->GetFocusView()); 960 accessible_views.push_back(devtools_container_->GetFocusView());
978 int count = static_cast<int>(accessible_views.size()); 961 int count = static_cast<int>(accessible_views.size());
979 962
980 // Figure out which view (if any) currently has the focus. 963 // Figure out which view (if any) currently has the focus.
981 const views::View* focused_view = GetFocusManager()->GetFocusedView(); 964 const views::View* focused_view = GetFocusManager()->GetFocusedView();
982 int index = -1; 965 int index = -1;
983 if (focused_view) { 966 if (focused_view) {
984 for (int i = 0; i < count; ++i) { 967 for (int i = 0; i < count; ++i) {
985 if (accessible_views[i] == focused_view || 968 if (accessible_views[i] == focused_view ||
(...skipping 381 matching lines...) Expand 10 before | Expand all | Expand 10 after
1367 } 1350 }
1368 1351
1369 LocationBarView* BrowserView::GetLocationBarView() const { 1352 LocationBarView* BrowserView::GetLocationBarView() const {
1370 return toolbar_ ? toolbar_->location_bar() : NULL; 1353 return toolbar_ ? toolbar_->location_bar() : NULL;
1371 } 1354 }
1372 1355
1373 views::View* BrowserView::GetTabContentsContainerView() const { 1356 views::View* BrowserView::GetTabContentsContainerView() const {
1374 return contents_container_->GetFocusView(); 1357 return contents_container_->GetFocusView();
1375 } 1358 }
1376 1359
1377 views::View* BrowserView::GetSidebarContainerView() const {
1378 if (!sidebar_container_)
1379 return NULL;
1380 return sidebar_container_->GetFocusView();
1381 }
1382
1383 ToolbarView* BrowserView::GetToolbarView() const { 1360 ToolbarView* BrowserView::GetToolbarView() const {
1384 return toolbar_; 1361 return toolbar_;
1385 } 1362 }
1386 1363
1387 /////////////////////////////////////////////////////////////////////////////// 1364 ///////////////////////////////////////////////////////////////////////////////
1388 // BrowserView, content::NotificationObserver implementation:
1389
1390 void BrowserView::Observe(int type,
1391 const content::NotificationSource& source,
1392 const content::NotificationDetails& details) {
1393 switch (type) {
1394 case chrome::NOTIFICATION_SIDEBAR_CHANGED:
1395 if (content::Details<SidebarContainer>(details)->tab_contents() ==
1396 browser_->GetSelectedWebContents()) {
1397 UpdateSidebar();
1398 }
1399 break;
1400
1401 default:
1402 NOTREACHED() << "Got a notification we didn't register for!";
1403 break;
1404 }
1405 }
1406
1407 ///////////////////////////////////////////////////////////////////////////////
1408 // BrowserView, TabStripModelObserver implementation: 1365 // BrowserView, TabStripModelObserver implementation:
1409 1366
1410 void BrowserView::TabDetachedAt(TabContentsWrapper* contents, int index) { 1367 void BrowserView::TabDetachedAt(TabContentsWrapper* contents, int index) {
1411 // We use index here rather than comparing |contents| because by this time 1368 // We use index here rather than comparing |contents| because by this time
1412 // the model has already removed |contents| from its list, so 1369 // the model has already removed |contents| from its list, so
1413 // browser_->GetSelectedWebContents() will return NULL or something else. 1370 // browser_->GetSelectedWebContents() will return NULL or something else.
1414 if (index == browser_->tabstrip_model()->active_index()) { 1371 if (index == browser_->tabstrip_model()->active_index()) {
1415 // We need to reset the current tab contents to NULL before it gets 1372 // We need to reset the current tab contents to NULL before it gets
1416 // freed. This is because the focus manager performs some operations 1373 // freed. This is because the focus manager performs some operations
1417 // on the selected TabContents when it is removed. 1374 // on the selected TabContents when it is removed.
1418 contents_container_->ChangeWebContents(NULL); 1375 contents_container_->ChangeWebContents(NULL);
1419 infobar_container_->ChangeTabContents(NULL); 1376 infobar_container_->ChangeTabContents(NULL);
1420 UpdateSidebarForContents(NULL);
1421 UpdateDevToolsForContents(NULL); 1377 UpdateDevToolsForContents(NULL);
1422 } 1378 }
1423 } 1379 }
1424 1380
1425 void BrowserView::TabDeactivated(TabContentsWrapper* contents) { 1381 void BrowserView::TabDeactivated(TabContentsWrapper* contents) {
1426 // We do not store the focus when closing the tab to work-around bug 4633. 1382 // We do not store the focus when closing the tab to work-around bug 4633.
1427 // Some reports seem to show that the focus manager and/or focused view can 1383 // Some reports seem to show that the focus manager and/or focused view can
1428 // be garbage at that point, it is not clear why. 1384 // be garbage at that point, it is not clear why.
1429 if (!contents->web_contents()->IsBeingDestroyed()) 1385 if (!contents->web_contents()->IsBeingDestroyed())
1430 contents->web_contents()->GetView()->StoreFocus(); 1386 contents->web_contents()->GetView()->StoreFocus();
(...skipping 477 matching lines...) Expand 10 before | Expand all | Expand 10 after
1908 1864
1909 infobar_container_ = new InfoBarContainerView(this); 1865 infobar_container_ = new InfoBarContainerView(this);
1910 AddChildView(infobar_container_); 1866 AddChildView(infobar_container_);
1911 1867
1912 contents_container_ = new TabContentsContainer; 1868 contents_container_ = new TabContentsContainer;
1913 contents_ = new ContentsContainer(contents_container_); 1869 contents_ = new ContentsContainer(contents_container_);
1914 1870
1915 SkColor bg_color = GetWidget()->GetThemeProvider()-> 1871 SkColor bg_color = GetWidget()->GetThemeProvider()->
1916 GetColor(ThemeService::COLOR_TOOLBAR); 1872 GetColor(ThemeService::COLOR_TOOLBAR);
1917 1873
1918 bool sidebar_allowed = SidebarManager::IsSidebarAllowed();
1919 if (sidebar_allowed) {
1920 sidebar_container_ = new TabContentsContainer;
1921 sidebar_container_->set_id(VIEW_ID_SIDE_BAR_CONTAINER);
1922 sidebar_container_->SetVisible(false);
1923
1924 sidebar_split_ = new views::SingleSplitView(
1925 contents_,
1926 sidebar_container_,
1927 views::SingleSplitView::HORIZONTAL_SPLIT,
1928 this);
1929 sidebar_split_->set_id(VIEW_ID_SIDE_BAR_SPLIT);
1930 sidebar_split_->SetAccessibleName(
1931 l10n_util::GetStringUTF16(IDS_ACCNAME_SIDE_BAR));
1932 sidebar_split_->set_background(
1933 views::Background::CreateSolidBackground(bg_color));
1934 }
1935
1936 devtools_container_ = new TabContentsContainer; 1874 devtools_container_ = new TabContentsContainer;
1937 devtools_container_->set_id(VIEW_ID_DEV_TOOLS_DOCKED); 1875 devtools_container_->set_id(VIEW_ID_DEV_TOOLS_DOCKED);
1938 devtools_container_->SetVisible(false); 1876 devtools_container_->SetVisible(false);
1939 1877
1940 views::View* contents_view = contents_; 1878 views::View* contents_view = contents_;
1941 if (sidebar_allowed)
1942 contents_view = sidebar_split_;
1943 1879
1944 contents_split_ = new views::SingleSplitView( 1880 contents_split_ = new views::SingleSplitView(
1945 contents_view, 1881 contents_view,
1946 devtools_container_, 1882 devtools_container_,
1947 views::SingleSplitView::VERTICAL_SPLIT, 1883 views::SingleSplitView::VERTICAL_SPLIT,
1948 this); 1884 this);
1949 contents_split_->set_id(VIEW_ID_CONTENTS_SPLIT); 1885 contents_split_->set_id(VIEW_ID_CONTENTS_SPLIT);
1950 contents_split_->SetAccessibleName( 1886 contents_split_->SetAccessibleName(
1951 l10n_util::GetStringUTF16(IDS_ACCNAME_WEB_CONTENTS)); 1887 l10n_util::GetStringUTF16(IDS_ACCNAME_WEB_CONTENTS));
1952 contents_split_->set_background( 1888 contents_split_->set_background(
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
2072 return UpdateChildViewAndLayout(new_bookmark_bar_view, &active_bookmark_bar_); 2008 return UpdateChildViewAndLayout(new_bookmark_bar_view, &active_bookmark_bar_);
2073 } 2009 }
2074 2010
2075 bool BrowserView::MaybeShowInfoBar(TabContentsWrapper* contents) { 2011 bool BrowserView::MaybeShowInfoBar(TabContentsWrapper* contents) {
2076 // TODO(beng): Remove this function once the interface between 2012 // TODO(beng): Remove this function once the interface between
2077 // InfoBarContainer, DownloadShelfView and TabContents and this 2013 // InfoBarContainer, DownloadShelfView and TabContents and this
2078 // view is sorted out. 2014 // view is sorted out.
2079 return true; 2015 return true;
2080 } 2016 }
2081 2017
2082 void BrowserView::UpdateSidebar() {
2083 UpdateSidebarForContents(GetSelectedTabContentsWrapper());
2084 Layout();
2085 }
2086
2087 void BrowserView::UpdateSidebarForContents(TabContentsWrapper* tab_contents) {
2088 if (!sidebar_container_)
2089 return; // Happens when sidebar is not allowed.
2090 if (!SidebarManager::GetInstance())
2091 return; // Happens only in tests.
2092
2093 TabContents* sidebar_contents = NULL;
2094 if (tab_contents) {
2095 SidebarContainer* client_host = SidebarManager::GetInstance()->
2096 GetActiveSidebarContainerFor(
2097 static_cast<TabContents*>(tab_contents->web_contents()));
2098 if (client_host)
2099 sidebar_contents = client_host->sidebar_contents();
2100 }
2101
2102 bool visible = NULL != sidebar_contents &&
2103 browser_->SupportsWindowFeature(Browser::FEATURE_SIDEBAR);
2104
2105 bool should_show = visible && !sidebar_container_->visible();
2106 bool should_hide = !visible && sidebar_container_->visible();
2107
2108 // Update sidebar content.
2109 TabContents* old_contents =
2110 static_cast<TabContents*>(sidebar_container_->web_contents());
2111 sidebar_container_->ChangeWebContents(sidebar_contents);
2112 SidebarManager::GetInstance()->
2113 NotifyStateChanges(old_contents, sidebar_contents);
2114
2115 // Update sidebar UI width.
2116 if (should_show) {
2117 // Restore split offset.
2118 int sidebar_width = g_browser_process->local_state()->GetInteger(
2119 prefs::kExtensionSidebarWidth);
2120 if (sidebar_width < 0) {
2121 // Initial load, set to default value.
2122 sidebar_width = sidebar_split_->width() / 7;
2123 }
2124 // Make sure user can see both panes.
2125 int min_sidebar_width = sidebar_split_->GetMinimumSize().width();
2126 sidebar_width = std::min(sidebar_split_->width() - min_sidebar_width,
2127 std::max(min_sidebar_width, sidebar_width));
2128
2129 sidebar_split_->set_divider_offset(
2130 sidebar_split_->width() - sidebar_width);
2131
2132 sidebar_container_->SetVisible(true);
2133 sidebar_split_->InvalidateLayout();
2134 Layout();
2135 } else if (should_hide) {
2136 // Store split offset when hiding sidebar only.
2137 g_browser_process->local_state()->SetInteger(
2138 prefs::kExtensionSidebarWidth,
2139 sidebar_split_->width() - sidebar_split_->divider_offset());
2140
2141 sidebar_container_->SetVisible(false);
2142 sidebar_split_->InvalidateLayout();
2143 Layout();
2144 }
2145 }
2146
2147 void BrowserView::UpdateDevToolsForContents(TabContentsWrapper* wrapper) { 2018 void BrowserView::UpdateDevToolsForContents(TabContentsWrapper* wrapper) {
2148 WebContents* devtools_contents = NULL; 2019 WebContents* devtools_contents = NULL;
2149 if (wrapper) { 2020 if (wrapper) {
2150 TabContentsWrapper* devtools_contents_wrapper = 2021 TabContentsWrapper* devtools_contents_wrapper =
2151 DevToolsWindow::GetDevToolsContents(wrapper->web_contents()); 2022 DevToolsWindow::GetDevToolsContents(wrapper->web_contents());
2152 if (devtools_contents_wrapper) 2023 if (devtools_contents_wrapper)
2153 devtools_contents = devtools_contents_wrapper->web_contents(); 2024 devtools_contents = devtools_contents_wrapper->web_contents();
2154 } 2025 }
2155 2026
2156 bool should_show = devtools_contents && !devtools_container_->visible(); 2027 bool should_show = devtools_contents && !devtools_container_->visible();
(...skipping 440 matching lines...) Expand 10 before | Expand all | Expand 10 after
2597 contents_container_->ChangeWebContents(NULL); 2468 contents_container_->ChangeWebContents(NULL);
2598 infobar_container_->ChangeTabContents(new_contents->infobar_tab_helper()); 2469 infobar_container_->ChangeTabContents(new_contents->infobar_tab_helper());
2599 if (bookmark_bar_view_.get()) { 2470 if (bookmark_bar_view_.get()) {
2600 bookmark_bar_view_->SetBookmarkBarState( 2471 bookmark_bar_view_->SetBookmarkBarState(
2601 browser_->bookmark_bar_state(), 2472 browser_->bookmark_bar_state(),
2602 BookmarkBar::DONT_ANIMATE_STATE_CHANGE); 2473 BookmarkBar::DONT_ANIMATE_STATE_CHANGE);
2603 } 2474 }
2604 UpdateUIForContents(new_contents); 2475 UpdateUIForContents(new_contents);
2605 if (change_tab_contents) 2476 if (change_tab_contents)
2606 contents_container_->ChangeWebContents(new_contents->web_contents()); 2477 contents_container_->ChangeWebContents(new_contents->web_contents());
2607 UpdateSidebarForContents(new_contents);
2608 2478
2609 UpdateDevToolsForContents(new_contents); 2479 UpdateDevToolsForContents(new_contents);
2610 // TODO(beng): This should be called automatically by ChangeWebContents, but I 2480 // TODO(beng): This should be called automatically by ChangeWebContents, but I
2611 // am striving for parity now rather than cleanliness. This is 2481 // am striving for parity now rather than cleanliness. This is
2612 // required to make features like Duplicate Tab, Undo Close Tab, 2482 // required to make features like Duplicate Tab, Undo Close Tab,
2613 // etc not result in sad tab. 2483 // etc not result in sad tab.
2614 new_contents->web_contents()->DidBecomeSelected(); 2484 new_contents->web_contents()->DidBecomeSelected();
2615 if (BrowserList::GetLastActive() == browser_ && 2485 if (BrowserList::GetLastActive() == browser_ &&
2616 !browser_->tabstrip_model()->closing_all() && GetWidget()->IsVisible()) { 2486 !browser_->tabstrip_model()->closing_all() && GetWidget()->IsVisible()) {
2617 // We only restore focus if our window is visible, to avoid invoking blur 2487 // We only restore focus if our window is visible, to avoid invoking blur
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
2665 browser::CreateViewsBubble(bubble); 2535 browser::CreateViewsBubble(bubble);
2666 bubble->SetAlignment(views::BubbleBorder::ALIGN_EDGE_TO_ANCHOR_EDGE); 2536 bubble->SetAlignment(views::BubbleBorder::ALIGN_EDGE_TO_ANCHOR_EDGE);
2667 bubble->Show(); 2537 bubble->Show();
2668 } 2538 }
2669 2539
2670 void BrowserView::ShowAvatarBubbleFromAvatarButton() { 2540 void BrowserView::ShowAvatarBubbleFromAvatarButton() {
2671 AvatarMenuButton* button = frame_->GetAvatarMenuButton(); 2541 AvatarMenuButton* button = frame_->GetAvatarMenuButton();
2672 if (button) 2542 if (button)
2673 button->ShowAvatarBubble(); 2543 button->ShowAvatarBubble();
2674 } 2544 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/views/frame/browser_view.h ('k') | chrome/browser/ui/views/frame/browser_view_layout.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698