Commit fc00dae9 authored by Sigurdur Asgeirsson's avatar Sigurdur Asgeirsson Committed by Commit Bot

Retire ScopedObserver in /chrome/browser/ui/views/tabs.

ScopedObserver is being deprecated in favor of two new classes:
- base::ScopedObservation for observers that only ever observe
  a single source.
- base::ScopedMultiSourceObservation for observers that do or may
  observe more than a single source.

This CL was uploaded by git cl split.

R=pkasting@chromium.org, tluk@chromium.org

Bug: 1145565
Change-Id: Ifb06297c295ec0b76e7380bc3d3787bc72a4b411
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2547776
Auto-Submit: Sigurður Ásgeirsson <siggi@chromium.org>
Reviewed-by: default avatarPeter Kasting <pkasting@chromium.org>
Commit-Queue: Sigurður Ásgeirsson <siggi@chromium.org>
Commit-Queue: Peter Kasting <pkasting@chromium.org>
Cr-Commit-Position: refs/heads/master@{#829257}
parent 7d65dc2b
......@@ -5,7 +5,7 @@
#ifndef CHROME_BROWSER_UI_VIEWS_TABS_NEW_TAB_BUTTON_H_
#define CHROME_BROWSER_UI_VIEWS_TABS_NEW_TAB_BUTTON_H_
#include "base/scoped_observer.h"
#include "base/scoped_observation.h"
#include "chrome/browser/ui/views/frame/browser_view.h"
#include "chrome/browser/ui/views/tabs/tab_strip.h"
#include "ui/views/controls/button/image_button.h"
......
......@@ -17,7 +17,7 @@
#include "base/metrics/user_metrics.h"
#include "base/numerics/ranges.h"
#include "base/numerics/safe_conversions.h"
#include "base/scoped_observer.h"
#include "base/scoped_observation.h"
#include "base/strings/utf_string_conversions.h"
#include "base/time/time.h"
#include "build/build_config.h"
......@@ -146,13 +146,13 @@ class Tab::TabCloseButtonObserver : public views::ViewObserver {
TabController* controller)
: tab_(tab), close_button_(close_button), controller_(controller) {
DCHECK(close_button_);
tab_close_button_observer_.Add(close_button_);
tab_close_button_observation_.Observe(close_button_);
}
TabCloseButtonObserver(const TabCloseButtonObserver&) = delete;
TabCloseButtonObserver& operator=(const TabCloseButtonObserver&) = delete;
~TabCloseButtonObserver() override {
tab_close_button_observer_.Remove(close_button_);
tab_close_button_observation_.RemoveObservation();
}
private:
......@@ -166,8 +166,8 @@ class Tab::TabCloseButtonObserver : public views::ViewObserver {
controller_->UpdateHoverCard(nullptr);
}
ScopedObserver<views::View, views::ViewObserver> tab_close_button_observer_{
this};
base::ScopedObservation<views::View, views::ViewObserver>
tab_close_button_observation_{this};
Tab* tab_;
views::View* close_button_;
......
......@@ -412,7 +412,8 @@ TabDragController::~TabDragController() {
if (g_tab_drag_controller == this)
g_tab_drag_controller = nullptr;
widget_observer_.RemoveAll();
if (widget_observation_.IsObserving())
widget_observation_.RemoveObservation();
if (is_dragging_window())
GetAttachedBrowserWidget()->EndMoveLoop();
......@@ -688,7 +689,8 @@ void TabDragController::OnWidgetBoundsChanged(views::Widget* widget,
}
void TabDragController::OnWidgetDestroyed(views::Widget* widget) {
widget_observer_.Remove(widget);
DCHECK(widget_observation_.IsObservingSource(widget));
widget_observation_.RemoveObservation();
}
void TabDragController::OnSourceTabStripEmpty() {
......@@ -880,8 +882,8 @@ TabDragController::DragBrowserToNewTabStrip(TabDragContext* target_context,
// results in a move). That'll cause all sorts of problems. Reset the
// observer so we don't get notified and process the event.
#if defined(OS_CHROMEOS)
if (widget_observer_.IsObserving(move_loop_widget_))
widget_observer_.Remove(move_loop_widget_);
if (widget_observation_.IsObservingSource(move_loop_widget_))
widget_observation_.RemoveObservation();
move_loop_widget_ = nullptr;
#endif // OS_CHROMEOS
views::Widget* browser_widget = GetAttachedBrowserWidget();
......@@ -1398,7 +1400,7 @@ void TabDragController::RunMoveLoop(const gfx::Vector2d& drag_offset) {
move_loop_widget_ = GetAttachedBrowserWidget();
DCHECK(move_loop_widget_);
widget_observer_.Add(move_loop_widget_);
widget_observation_.Observe(move_loop_widget_);
current_state_ = DragState::kDraggingWindow;
base::WeakPtr<TabDragController> ref(weak_factory_.GetWeakPtr());
if (can_release_capture_) {
......@@ -1427,8 +1429,10 @@ void TabDragController::RunMoveLoop(const gfx::Vector2d& drag_offset) {
if (!ref)
return;
if (widget_observer_.IsObserving(move_loop_widget_))
widget_observer_.Remove(move_loop_widget_);
if (move_loop_widget_ &&
widget_observation_.IsObservingSource(move_loop_widget_)) {
widget_observation_.RemoveObservation();
}
move_loop_widget_ = nullptr;
if (current_state_ == DragState::kDraggingWindow) {
......
......@@ -11,7 +11,7 @@
#include <vector>
#include "base/memory/weak_ptr.h"
#include "base/scoped_observer.h"
#include "base/scoped_observation.h"
#include "base/timer/timer.h"
#include "chrome/browser/ui/tabs/tab_strip_model_observer.h"
#include "chrome/browser/ui/views/tabs/tab_drag_context.h"
......@@ -693,7 +693,8 @@ class TabDragController : public views::WidgetObserver {
std::unique_ptr<WindowFinder> window_finder_;
ScopedObserver<views::Widget, views::WidgetObserver> widget_observer_{this};
base::ScopedObservation<views::Widget, views::WidgetObserver>
widget_observation_{this};
base::WeakPtrFactory<TabDragController> weak_factory_{this};
};
......
......@@ -410,11 +410,12 @@ class TabHoverCardBubbleView::ThumbnailObserver
if (current_image_ == thumbnail_image)
return;
scoped_observer_.RemoveAll();
if (scoped_observation_.IsObserving())
scoped_observation_.RemoveObservation();
current_image_ = std::move(thumbnail_image);
if (current_image_) {
scoped_observer_.Add(current_image_.get());
scoped_observation_.Observe(current_image_.get());
current_image_->RequestThumbnailImage();
}
}
......@@ -434,8 +435,8 @@ class TabHoverCardBubbleView::ThumbnailObserver
scoped_refptr<ThumbnailImage> current_image_;
TabHoverCardBubbleView* const hover_card_;
ScopedObserver<ThumbnailImage, ThumbnailImage::Observer> scoped_observer_{
this};
base::ScopedObservation<ThumbnailImage, ThumbnailImage::Observer>
scoped_observation_{this};
};
TabHoverCardBubbleView::TabHoverCardBubbleView(Tab* tab)
......@@ -547,7 +548,7 @@ TabHoverCardBubbleView::TabHoverCardBubbleView(Tab* tab)
std::make_unique<WidgetSlideAnimationDelegate>(this);
fade_animation_delegate_ =
std::make_unique<WidgetFadeAnimationDelegate>(GetWidget());
thumbnail_observer_ = std::make_unique<ThumbnailObserver>(this);
thumbnail_observation_ = std::make_unique<ThumbnailObserver>(this);
constexpr int kFootnoteVerticalMargin = 8;
GetBubbleFrameView()->set_footnote_margins(
......@@ -648,7 +649,7 @@ void TabHoverCardBubbleView::FadeOutToHide() {
delayed_show_timer_.Stop();
if (!GetWidget()->IsVisible())
return;
thumbnail_observer_->Observe(nullptr);
thumbnail_observation_->Observe(nullptr);
slide_animation_delegate_->StopAnimation();
last_visible_timestamp_ = base::TimeTicks::Now();
if (disable_animations_for_testing_) {
......@@ -804,12 +805,12 @@ void TabHoverCardBubbleView::UpdateCardContent(const Tab* tab) {
auto thumbnail = tab->data().thumbnail;
if (!thumbnail) {
ClearPreviewImage();
} else if (thumbnail != thumbnail_observer_->current_image()) {
} else if (thumbnail != thumbnail_observation_->current_image()) {
waiting_for_decompress_ = true;
thumbnail_observer_->Observe(thumbnail);
thumbnail_observation_->Observe(thumbnail);
}
} else {
thumbnail_observer_->Observe(nullptr);
thumbnail_observation_->Observe(nullptr);
}
}
}
......
......@@ -7,7 +7,7 @@
#include <memory>
#include "base/scoped_observer.h"
#include "base/scoped_observation.h"
#include "base/time/time.h"
#include "base/timer/timer.h"
#include "chrome/browser/ui/tabs/tab_utils.h"
......@@ -99,7 +99,7 @@ class TabHoverCardBubbleView : public views::BubbleDialogDelegateView {
std::unique_ptr<WidgetFadeAnimationDelegate> fade_animation_delegate_;
// Used to animate the tab hover card's movement between tabs.
std::unique_ptr<WidgetSlideAnimationDelegate> slide_animation_delegate_;
std::unique_ptr<ThumbnailObserver> thumbnail_observer_;
std::unique_ptr<ThumbnailObserver> thumbnail_observation_;
// Timestamp of the last time a hover card was visible, recorded before it is
// hidden. This is used for metrics.
......
......@@ -96,7 +96,9 @@ void TabSearchButton::OnWidgetVisibilityChanged(views::Widget* widget,
void TabSearchButton::OnWidgetDestroying(views::Widget* widget) {
DCHECK_EQ(webui_bubble_manager_.GetBubbleWidget(), widget);
observed_bubble_widget_.Remove(webui_bubble_manager_.GetBubbleWidget());
DCHECK(bubble_widget_observation_.IsObservingSource(
webui_bubble_manager_.GetBubbleWidget()));
bubble_widget_observation_.RemoveObservation();
pressed_lock_.reset();
}
......@@ -114,8 +116,8 @@ bool TabSearchButton::ShowTabSearchBubble(bool triggered_by_keyboard_shortcut) {
// There should only ever be a single bubble widget active for the
// TabSearchButton.
DCHECK(!observed_bubble_widget_.IsObservingSources());
observed_bubble_widget_.Add(webui_bubble_manager_.GetBubbleWidget());
DCHECK(!bubble_widget_observation_.IsObserving());
bubble_widget_observation_.Observe(webui_bubble_manager_.GetBubbleWidget());
widget_open_timer_.Reset(webui_bubble_manager_.GetBubbleWidget());
// Hold the pressed lock while the |bubble_| is active.
......
......@@ -80,8 +80,8 @@ class TabSearchButton : public NewTabButton,
// in the process of being shown.
std::unique_ptr<views::MenuButtonController::PressedLock> pressed_lock_;
ScopedObserver<views::Widget, views::WidgetObserver> observed_bubble_widget_{
this};
base::ScopedObservation<views::Widget, views::WidgetObserver>
bubble_widget_observation_{this};
};
#endif // CHROME_BROWSER_UI_VIEWS_TABS_TAB_SEARCH_BUTTON_H_
......@@ -1029,7 +1029,8 @@ TabStrip::~TabStrip() {
// but before moving the mouse.
RemoveMessageLoopObserver();
hover_card_observer_.RemoveAll();
if (hover_card_observation_.IsObserving())
hover_card_observation_.RemoveObservation();
// Since TabGroupViews expects be able to remove the views it creates, clear
// |group_views_| before removing the remaining children below.
......@@ -1937,7 +1938,7 @@ void TabStrip::UpdateHoverCard(Tab* tab) {
if (!tab)
return;
hover_card_ = new TabHoverCardBubbleView(tab);
hover_card_observer_.Add(hover_card_);
hover_card_observation_.Observe(hover_card_);
if (GetWidget()) {
hover_card_event_sniffer_ =
std::make_unique<TabHoverCardEventSniffer>(hover_card_, this);
......@@ -3257,7 +3258,7 @@ TabStrip::DropArrow::DropArrow(const BrowserRootView::DropIndex& index,
arrow_view_ =
arrow_window_->SetContentsView(std::make_unique<views::ImageView>());
arrow_view_->SetImage(GetDropArrowImage(point_down_));
scoped_observer_.Add(arrow_window_);
scoped_observation_.Observe(arrow_window_);
arrow_window_->Show();
}
......@@ -3281,7 +3282,8 @@ void TabStrip::DropArrow::SetWindowBounds(const gfx::Rect& bounds) {
}
void TabStrip::DropArrow::OnWidgetDestroying(views::Widget* widget) {
scoped_observer_.Remove(arrow_window_);
DCHECK(scoped_observation_.IsObservingSource(arrow_window_));
scoped_observation_.RemoveObservation();
arrow_window_ = nullptr;
}
......@@ -3621,7 +3623,8 @@ views::View* TabStrip::TargetForRect(views::View* root, const gfx::Rect& rect) {
void TabStrip::OnViewIsDeleting(views::View* observed_view) {
if (observed_view == hover_card_) {
hover_card_observer_.Remove(hover_card_);
DCHECK(hover_card_observation_.IsObservingSource(hover_card_));
hover_card_observation_.RemoveObservation();
hover_card_event_sniffer_.reset();
hover_card_ = nullptr;
}
......
......@@ -15,7 +15,7 @@
#include "base/memory/ref_counted.h"
#include "base/observer_list.h"
#include "base/optional.h"
#include "base/scoped_observer.h"
#include "base/scoped_observation.h"
#include "base/timer/timer.h"
#include "build/build_config.h"
#include "chrome/browser/ui/tabs/tab_types.h"
......@@ -410,7 +410,8 @@ class TabStrip : public views::View,
views::ImageView* arrow_view_ = nullptr;
ScopedObserver<views::Widget, views::WidgetObserver> scoped_observer_{this};
base::ScopedObservation<views::Widget, views::WidgetObserver>
scoped_observation_{this};
};
void Init();
......@@ -665,7 +666,8 @@ class TabStrip : public views::View,
// The view tracker is used to keep track of if the hover card has been
// destroyed by its widget.
TabHoverCardBubbleView* hover_card_ = nullptr;
ScopedObserver<views::View, views::ViewObserver> hover_card_observer_{this};
base::ScopedObservation<views::View, views::ViewObserver>
hover_card_observation_{this};
std::unique_ptr<ui::EventHandler> hover_card_event_sniffer_;
std::unique_ptr<TabStripController> controller_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment