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

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 9 years 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 264 matching lines...) Expand 10 before | Expand all | Expand 10 after
315 BrowserView::BrowserView(Browser* browser) 313 BrowserView::BrowserView(Browser* browser)
316 : views::ClientView(NULL, NULL), 314 : views::ClientView(NULL, NULL),
317 last_focused_view_storage_id_( 315 last_focused_view_storage_id_(
318 views::ViewStorage::GetInstance()->CreateStorageID()), 316 views::ViewStorage::GetInstance()->CreateStorageID()),
319 frame_(NULL), 317 frame_(NULL),
320 browser_(browser), 318 browser_(browser),
321 active_bookmark_bar_(NULL), 319 active_bookmark_bar_(NULL),
322 tabstrip_(NULL), 320 tabstrip_(NULL),
323 toolbar_(NULL), 321 toolbar_(NULL),
324 infobar_container_(NULL), 322 infobar_container_(NULL),
325 sidebar_container_(NULL),
326 sidebar_split_(NULL),
327 contents_container_(NULL), 323 contents_container_(NULL),
328 devtools_container_(NULL), 324 devtools_container_(NULL),
329 preview_container_(NULL), 325 preview_container_(NULL),
330 contents_(NULL), 326 contents_(NULL),
331 contents_split_(NULL), 327 contents_split_(NULL),
332 initialized_(false), 328 initialized_(false),
333 ignore_layout_(true), 329 ignore_layout_(true),
334 #if defined(OS_WIN) && !defined(USE_AURA) 330 #if defined(OS_WIN) && !defined(USE_AURA)
335 hung_window_detector_(&hung_plugin_action_), 331 hung_window_detector_(&hung_plugin_action_),
336 ticker_(0), 332 ticker_(0),
337 #endif 333 #endif
338 force_location_bar_focus_(false) { 334 force_location_bar_focus_(false) {
339 browser_->tabstrip_model()->AddObserver(this); 335 browser_->tabstrip_model()->AddObserver(this);
340
341 registrar_.Add(
342 this,
343 chrome::NOTIFICATION_SIDEBAR_CHANGED,
344 content::Source<SidebarManager>(SidebarManager::GetInstance()));
345 } 336 }
346 337
347 BrowserView::~BrowserView() { 338 BrowserView::~BrowserView() {
348 #if defined(USE_AURA) 339 #if defined(USE_AURA)
349 // Destroy LauncherIconUpdater early on as it listens to the TabstripModel, 340 // Destroy LauncherIconUpdater early on as it listens to the TabstripModel,
350 // which is destroyed by the browser. 341 // which is destroyed by the browser.
351 icon_updater_.reset(); 342 icon_updater_.reset();
352 #endif 343 #endif
353 344
354 browser_->tabstrip_model()->RemoveObserver(this); 345 browser_->tabstrip_model()->RemoveObserver(this);
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
438 gfx::Point BrowserView::OffsetPointForToolbarBackgroundImage( 429 gfx::Point BrowserView::OffsetPointForToolbarBackgroundImage(
439 const gfx::Point& point) const { 430 const gfx::Point& point) const {
440 // The background image starts tiling horizontally at the window left edge and 431 // The background image starts tiling horizontally at the window left edge and
441 // vertically at the top edge of the horizontal tab strip (or where it would 432 // vertically at the top edge of the horizontal tab strip (or where it would
442 // be). We expect our parent's origin to be the window origin. 433 // be). We expect our parent's origin to be the window origin.
443 gfx::Point window_point(point.Add(GetMirroredPosition())); 434 gfx::Point window_point(point.Add(GetMirroredPosition()));
444 window_point.Offset(0, -frame_->GetHorizontalTabStripVerticalOffset(false)); 435 window_point.Offset(0, -frame_->GetHorizontalTabStripVerticalOffset(false));
445 return window_point; 436 return window_point;
446 } 437 }
447 438
448 int BrowserView::GetSidebarWidth() const {
449 if (!sidebar_container_ || !sidebar_container_->visible())
450 return 0;
451 return sidebar_split_->divider_offset();
452 }
453
454 bool BrowserView::IsTabStripVisible() const { 439 bool BrowserView::IsTabStripVisible() const {
455 return browser_->SupportsWindowFeature(Browser::FEATURE_TABSTRIP); 440 return browser_->SupportsWindowFeature(Browser::FEATURE_TABSTRIP);
456 } 441 }
457 442
458 bool BrowserView::IsOffTheRecord() const { 443 bool BrowserView::IsOffTheRecord() const {
459 return browser_->profile()->IsOffTheRecord(); 444 return browser_->profile()->IsOffTheRecord();
460 } 445 }
461 446
462 bool BrowserView::IsGuestSession() const { 447 bool BrowserView::IsGuestSession() const {
463 return browser_->profile()->IsGuestSession(); 448 return browser_->profile()->IsGuestSession();
(...skipping 489 matching lines...) Expand 10 before | Expand all | Expand 10 after
953 // with NULL to represent the tab contents getting focus. If one of these 938 // with NULL to represent the tab contents getting focus. If one of these
954 // is currently invisible or has no focusable children it will be 939 // is currently invisible or has no focusable children it will be
955 // automatically skipped. 940 // automatically skipped.
956 std::vector<views::AccessiblePaneView*> accessible_panes; 941 std::vector<views::AccessiblePaneView*> accessible_panes;
957 GetAccessiblePanes(&accessible_panes); 942 GetAccessiblePanes(&accessible_panes);
958 int pane_count = static_cast<int>(accessible_panes.size()); 943 int pane_count = static_cast<int>(accessible_panes.size());
959 944
960 std::vector<views::View*> accessible_views( 945 std::vector<views::View*> accessible_views(
961 accessible_panes.begin(), accessible_panes.end()); 946 accessible_panes.begin(), accessible_panes.end());
962 accessible_views.push_back(GetTabContentsContainerView()); 947 accessible_views.push_back(GetTabContentsContainerView());
963 if (sidebar_container_ && sidebar_container_->visible())
964 accessible_views.push_back(GetSidebarContainerView());
965 if (devtools_container_->visible()) 948 if (devtools_container_->visible())
966 accessible_views.push_back(devtools_container_->GetFocusView()); 949 accessible_views.push_back(devtools_container_->GetFocusView());
967 int count = static_cast<int>(accessible_views.size()); 950 int count = static_cast<int>(accessible_views.size());
968 951
969 // Figure out which view (if any) currently has the focus. 952 // Figure out which view (if any) currently has the focus.
970 const views::View* focused_view = GetFocusManager()->GetFocusedView(); 953 const views::View* focused_view = GetFocusManager()->GetFocusedView();
971 int index = -1; 954 int index = -1;
972 if (focused_view) { 955 if (focused_view) {
973 for (int i = 0; i < count; ++i) { 956 for (int i = 0; i < count; ++i) {
974 if (accessible_views[i] == focused_view || 957 if (accessible_views[i] == focused_view ||
(...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after
1374 } 1357 }
1375 1358
1376 LocationBarView* BrowserView::GetLocationBarView() const { 1359 LocationBarView* BrowserView::GetLocationBarView() const {
1377 return toolbar_ ? toolbar_->location_bar() : NULL; 1360 return toolbar_ ? toolbar_->location_bar() : NULL;
1378 } 1361 }
1379 1362
1380 views::View* BrowserView::GetTabContentsContainerView() const { 1363 views::View* BrowserView::GetTabContentsContainerView() const {
1381 return contents_container_->GetFocusView(); 1364 return contents_container_->GetFocusView();
1382 } 1365 }
1383 1366
1384 views::View* BrowserView::GetSidebarContainerView() const {
1385 if (!sidebar_container_)
1386 return NULL;
1387 return sidebar_container_->GetFocusView();
1388 }
1389
1390 ToolbarView* BrowserView::GetToolbarView() const { 1367 ToolbarView* BrowserView::GetToolbarView() const {
1391 return toolbar_; 1368 return toolbar_;
1392 } 1369 }
1393 1370
1394 /////////////////////////////////////////////////////////////////////////////// 1371 ///////////////////////////////////////////////////////////////////////////////
1395 // BrowserView, content::NotificationObserver implementation:
1396
1397 void BrowserView::Observe(int type,
1398 const content::NotificationSource& source,
1399 const content::NotificationDetails& details) {
1400 switch (type) {
1401 case chrome::NOTIFICATION_SIDEBAR_CHANGED:
1402 if (content::Details<SidebarContainer>(details)->tab_contents() ==
1403 browser_->GetSelectedTabContents()) {
1404 UpdateSidebar();
1405 }
1406 break;
1407
1408 default:
1409 NOTREACHED() << "Got a notification we didn't register for!";
1410 break;
1411 }
1412 }
1413
1414 ///////////////////////////////////////////////////////////////////////////////
Devlin 2011/12/21 02:11:27 Am I right in thinking that, since the sidebar was
Aaron Boodman 2011/12/21 08:38:20 Yes. Also good job removing registrar_.
1415 // BrowserView, TabStripModelObserver implementation: 1372 // BrowserView, TabStripModelObserver implementation:
1416 1373
1417 void BrowserView::TabDetachedAt(TabContentsWrapper* contents, int index) { 1374 void BrowserView::TabDetachedAt(TabContentsWrapper* contents, int index) {
1418 // We use index here rather than comparing |contents| because by this time 1375 // We use index here rather than comparing |contents| because by this time
1419 // the model has already removed |contents| from its list, so 1376 // the model has already removed |contents| from its list, so
1420 // browser_->GetSelectedTabContents() will return NULL or something else. 1377 // browser_->GetSelectedTabContents() will return NULL or something else.
1421 if (index == browser_->tabstrip_model()->active_index()) { 1378 if (index == browser_->tabstrip_model()->active_index()) {
1422 // We need to reset the current tab contents to NULL before it gets 1379 // We need to reset the current tab contents to NULL before it gets
1423 // freed. This is because the focus manager performs some operations 1380 // freed. This is because the focus manager performs some operations
1424 // on the selected TabContents when it is removed. 1381 // on the selected TabContents when it is removed.
1425 contents_container_->ChangeTabContents(NULL); 1382 contents_container_->ChangeTabContents(NULL);
1426 infobar_container_->ChangeTabContents(NULL); 1383 infobar_container_->ChangeTabContents(NULL);
1427 UpdateSidebarForContents(NULL);
1428 UpdateDevToolsForContents(NULL); 1384 UpdateDevToolsForContents(NULL);
1429 } 1385 }
1430 } 1386 }
1431 1387
1432 void BrowserView::TabDeactivated(TabContentsWrapper* contents) { 1388 void BrowserView::TabDeactivated(TabContentsWrapper* contents) {
1433 // We do not store the focus when closing the tab to work-around bug 4633. 1389 // We do not store the focus when closing the tab to work-around bug 4633.
1434 // Some reports seem to show that the focus manager and/or focused view can 1390 // Some reports seem to show that the focus manager and/or focused view can
1435 // be garbage at that point, it is not clear why. 1391 // be garbage at that point, it is not clear why.
1436 if (!contents->tab_contents()->is_being_destroyed()) 1392 if (!contents->tab_contents()->is_being_destroyed())
1437 contents->tab_contents()->view()->StoreFocus(); 1393 contents->tab_contents()->view()->StoreFocus();
(...skipping 480 matching lines...) Expand 10 before | Expand all | Expand 10 after
1918 1874
1919 infobar_container_ = new InfoBarContainerView(this); 1875 infobar_container_ = new InfoBarContainerView(this);
1920 AddChildView(infobar_container_); 1876 AddChildView(infobar_container_);
1921 1877
1922 contents_container_ = new TabContentsContainer; 1878 contents_container_ = new TabContentsContainer;
1923 contents_ = new ContentsContainer(contents_container_); 1879 contents_ = new ContentsContainer(contents_container_);
1924 1880
1925 SkColor bg_color = GetWidget()->GetThemeProvider()-> 1881 SkColor bg_color = GetWidget()->GetThemeProvider()->
1926 GetColor(ThemeService::COLOR_TOOLBAR); 1882 GetColor(ThemeService::COLOR_TOOLBAR);
1927 1883
1928 bool sidebar_allowed = SidebarManager::IsSidebarAllowed();
1929 if (sidebar_allowed) {
1930 sidebar_container_ = new TabContentsContainer;
1931 sidebar_container_->set_id(VIEW_ID_SIDE_BAR_CONTAINER);
1932 sidebar_container_->SetVisible(false);
1933
1934 sidebar_split_ = new views::SingleSplitView(
1935 contents_,
1936 sidebar_container_,
1937 views::SingleSplitView::HORIZONTAL_SPLIT,
1938 this);
1939 sidebar_split_->set_id(VIEW_ID_SIDE_BAR_SPLIT);
1940 sidebar_split_->SetAccessibleName(
1941 l10n_util::GetStringUTF16(IDS_ACCNAME_SIDE_BAR));
1942 sidebar_split_->set_background(
1943 views::Background::CreateSolidBackground(bg_color));
1944 }
1945
1946 devtools_container_ = new TabContentsContainer; 1884 devtools_container_ = new TabContentsContainer;
1947 devtools_container_->set_id(VIEW_ID_DEV_TOOLS_DOCKED); 1885 devtools_container_->set_id(VIEW_ID_DEV_TOOLS_DOCKED);
1948 devtools_container_->SetVisible(false); 1886 devtools_container_->SetVisible(false);
1949 1887
1950 views::View* contents_view = contents_; 1888 views::View* contents_view = contents_;
1951 if (sidebar_allowed)
1952 contents_view = sidebar_split_;
1953 1889
1954 contents_split_ = new views::SingleSplitView( 1890 contents_split_ = new views::SingleSplitView(
1955 contents_view, 1891 contents_view,
1956 devtools_container_, 1892 devtools_container_,
1957 views::SingleSplitView::VERTICAL_SPLIT, 1893 views::SingleSplitView::VERTICAL_SPLIT,
1958 this); 1894 this);
1959 contents_split_->set_id(VIEW_ID_CONTENTS_SPLIT); 1895 contents_split_->set_id(VIEW_ID_CONTENTS_SPLIT);
1960 contents_split_->SetAccessibleName( 1896 contents_split_->SetAccessibleName(
1961 l10n_util::GetStringUTF16(IDS_ACCNAME_WEB_CONTENTS)); 1897 l10n_util::GetStringUTF16(IDS_ACCNAME_WEB_CONTENTS));
1962 contents_split_->set_background( 1898 contents_split_->set_background(
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
2083 return UpdateChildViewAndLayout(new_bookmark_bar_view, &active_bookmark_bar_); 2019 return UpdateChildViewAndLayout(new_bookmark_bar_view, &active_bookmark_bar_);
2084 } 2020 }
2085 2021
2086 bool BrowserView::MaybeShowInfoBar(TabContentsWrapper* contents) { 2022 bool BrowserView::MaybeShowInfoBar(TabContentsWrapper* contents) {
2087 // TODO(beng): Remove this function once the interface between 2023 // TODO(beng): Remove this function once the interface between
2088 // InfoBarContainer, DownloadShelfView and TabContents and this 2024 // InfoBarContainer, DownloadShelfView and TabContents and this
2089 // view is sorted out. 2025 // view is sorted out.
2090 return true; 2026 return true;
2091 } 2027 }
2092 2028
2093 void BrowserView::UpdateSidebar() {
2094 UpdateSidebarForContents(GetSelectedTabContentsWrapper());
2095 Layout();
2096 }
2097
2098 void BrowserView::UpdateSidebarForContents(TabContentsWrapper* tab_contents) {
2099 if (!sidebar_container_)
2100 return; // Happens when sidebar is not allowed.
2101 if (!SidebarManager::GetInstance())
2102 return; // Happens only in tests.
2103
2104 TabContents* sidebar_contents = NULL;
2105 if (tab_contents) {
2106 SidebarContainer* client_host = SidebarManager::GetInstance()->
2107 GetActiveSidebarContainerFor(tab_contents->tab_contents());
2108 if (client_host)
2109 sidebar_contents = client_host->sidebar_contents();
2110 }
2111
2112 bool visible = NULL != sidebar_contents &&
2113 browser_->SupportsWindowFeature(Browser::FEATURE_SIDEBAR);
2114
2115 bool should_show = visible && !sidebar_container_->visible();
2116 bool should_hide = !visible && sidebar_container_->visible();
2117
2118 // Update sidebar content.
2119 TabContents* old_contents = sidebar_container_->tab_contents();
2120 sidebar_container_->ChangeTabContents(sidebar_contents);
2121 SidebarManager::GetInstance()->
2122 NotifyStateChanges(old_contents, sidebar_contents);
2123
2124 // Update sidebar UI width.
2125 if (should_show) {
2126 // Restore split offset.
2127 int sidebar_width = g_browser_process->local_state()->GetInteger(
2128 prefs::kExtensionSidebarWidth);
2129 if (sidebar_width < 0) {
2130 // Initial load, set to default value.
2131 sidebar_width = sidebar_split_->width() / 7;
2132 }
2133 // Make sure user can see both panes.
2134 int min_sidebar_width = sidebar_split_->GetMinimumSize().width();
2135 sidebar_width = std::min(sidebar_split_->width() - min_sidebar_width,
2136 std::max(min_sidebar_width, sidebar_width));
2137
2138 sidebar_split_->set_divider_offset(
2139 sidebar_split_->width() - sidebar_width);
2140
2141 sidebar_container_->SetVisible(true);
2142 sidebar_split_->InvalidateLayout();
2143 Layout();
2144 } else if (should_hide) {
2145 // Store split offset when hiding sidebar only.
2146 g_browser_process->local_state()->SetInteger(
2147 prefs::kExtensionSidebarWidth,
2148 sidebar_split_->width() - sidebar_split_->divider_offset());
2149
2150 sidebar_container_->SetVisible(false);
2151 sidebar_split_->InvalidateLayout();
2152 Layout();
2153 }
2154 }
2155
2156 void BrowserView::UpdateDevToolsForContents(TabContentsWrapper* wrapper) { 2029 void BrowserView::UpdateDevToolsForContents(TabContentsWrapper* wrapper) {
2157 TabContents* devtools_contents = NULL; 2030 TabContents* devtools_contents = NULL;
2158 if (wrapper) { 2031 if (wrapper) {
2159 TabContentsWrapper* devtools_contents_wrapper = 2032 TabContentsWrapper* devtools_contents_wrapper =
2160 DevToolsWindow::GetDevToolsContents(wrapper->tab_contents()); 2033 DevToolsWindow::GetDevToolsContents(wrapper->tab_contents());
2161 if (devtools_contents_wrapper) 2034 if (devtools_contents_wrapper)
2162 devtools_contents = devtools_contents_wrapper->tab_contents(); 2035 devtools_contents = devtools_contents_wrapper->tab_contents();
2163 } 2036 }
2164 2037
2165 bool should_show = devtools_contents && !devtools_container_->visible(); 2038 bool should_show = devtools_contents && !devtools_container_->visible();
(...skipping 420 matching lines...) Expand 10 before | Expand all | Expand 10 after
2586 contents_container_->ChangeTabContents(NULL); 2459 contents_container_->ChangeTabContents(NULL);
2587 infobar_container_->ChangeTabContents(new_contents->infobar_tab_helper()); 2460 infobar_container_->ChangeTabContents(new_contents->infobar_tab_helper());
2588 if (bookmark_bar_view_.get()) { 2461 if (bookmark_bar_view_.get()) {
2589 bookmark_bar_view_->SetBookmarkBarState( 2462 bookmark_bar_view_->SetBookmarkBarState(
2590 browser_->bookmark_bar_state(), 2463 browser_->bookmark_bar_state(),
2591 BookmarkBar::DONT_ANIMATE_STATE_CHANGE); 2464 BookmarkBar::DONT_ANIMATE_STATE_CHANGE);
2592 } 2465 }
2593 UpdateUIForContents(new_contents); 2466 UpdateUIForContents(new_contents);
2594 if (change_tab_contents) 2467 if (change_tab_contents)
2595 contents_container_->ChangeTabContents(new_contents->tab_contents()); 2468 contents_container_->ChangeTabContents(new_contents->tab_contents());
2596 UpdateSidebarForContents(new_contents);
2597 2469
2598 UpdateDevToolsForContents(new_contents); 2470 UpdateDevToolsForContents(new_contents);
2599 // TODO(beng): This should be called automatically by ChangeTabContents, but I 2471 // TODO(beng): This should be called automatically by ChangeTabContents, but I
2600 // am striving for parity now rather than cleanliness. This is 2472 // am striving for parity now rather than cleanliness. This is
2601 // required to make features like Duplicate Tab, Undo Close Tab, 2473 // required to make features like Duplicate Tab, Undo Close Tab,
2602 // etc not result in sad tab. 2474 // etc not result in sad tab.
2603 new_contents->tab_contents()->DidBecomeSelected(); 2475 new_contents->tab_contents()->DidBecomeSelected();
2604 if (BrowserList::GetLastActive() == browser_ && 2476 if (BrowserList::GetLastActive() == browser_ &&
2605 !browser_->tabstrip_model()->closing_all() && GetWidget()->IsVisible()) { 2477 !browser_->tabstrip_model()->closing_all() && GetWidget()->IsVisible()) {
2606 // We only restore focus if our window is visible, to avoid invoking blur 2478 // 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
2654 browser::CreateViewsBubble(bubble); 2526 browser::CreateViewsBubble(bubble);
2655 bubble->SetAlignment(views::BubbleBorder::ALIGN_EDGE_TO_ANCHOR_EDGE); 2527 bubble->SetAlignment(views::BubbleBorder::ALIGN_EDGE_TO_ANCHOR_EDGE);
2656 bubble->Show(); 2528 bubble->Show();
2657 } 2529 }
2658 2530
2659 void BrowserView::ShowAvatarBubbleFromAvatarButton() { 2531 void BrowserView::ShowAvatarBubbleFromAvatarButton() {
2660 AvatarMenuButton* button = frame_->GetAvatarMenuButton(); 2532 AvatarMenuButton* button = frame_->GetAvatarMenuButton();
2661 if (button) 2533 if (button)
2662 button->ShowAvatarBubble(); 2534 button->ShowAvatarBubble();
2663 } 2535 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698