Commit 260e4e44 authored by jongdeok.kim's avatar jongdeok.kim Committed by Commit Bot

Use ScopedObserver where feasible in ui/views/accessibility, and view_tracker.{h,cc}.

This CL changes some classes in ui/views/accessibility/ and view_tracker.{h,cc} to use ScopedObserver.

Bug: https://bugs.chromium.org/p/chromium/issues/detail?id=940796
Change-Id: Iee16691098fae2e3cba4f11a9d970181ca28f659
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1558558
Commit-Queue: Peter Kasting <pkasting@chromium.org>
Reviewed-by: default avatarPeter Kasting <pkasting@chromium.org>
Cr-Commit-Position: refs/heads/master@{#714983}
parent d1ff082a
......@@ -56,14 +56,14 @@ bool ChromeWebContentsViewFocusHelper::TakeFocus(bool reverse) {
}
void ChromeWebContentsViewFocusHelper::StoreFocus() {
last_focused_view_tracker_.Clear();
last_focused_view_tracker_.SetView(nullptr);
if (GetFocusManager())
last_focused_view_tracker_.SetView(GetFocusManager()->GetFocusedView());
}
bool ChromeWebContentsViewFocusHelper::RestoreFocus() {
views::View* view_to_focus = GetStoredFocus();
last_focused_view_tracker_.Clear();
last_focused_view_tracker_.SetView(nullptr);
if (view_to_focus) {
view_to_focus->RequestFocus();
return true;
......@@ -72,7 +72,7 @@ bool ChromeWebContentsViewFocusHelper::RestoreFocus() {
}
void ChromeWebContentsViewFocusHelper::ResetStoredFocus() {
last_focused_view_tracker_.Clear();
last_focused_view_tracker_.SetView(nullptr);
}
views::View* ChromeWebContentsViewFocusHelper::GetStoredFocus() {
......
......@@ -6,7 +6,6 @@
#include "base/strings/utf_string_conversions.h"
#include "ui/accessibility/platform/aura_window_properties.h"
#include "ui/aura/env.h"
#include "ui/aura/window.h"
#include "ui/compositor/layer_type.h"
#include "ui/views/accessibility/ax_aura_obj_cache.h"
......@@ -24,12 +23,10 @@ AccessibilityAlertWindow::AccessibilityAlertWindow(aura::Window* parent,
alert_window_->Init(ui::LayerType::LAYER_NOT_DRAWN);
alert_window_->SetProperty(ui::kAXRoleOverride, ax::mojom::Role::kAlert);
parent->AddChild(alert_window_.get());
aura::Env::GetInstance()->AddObserver(this);
observer_.Add(aura::Env::GetInstance());
}
AccessibilityAlertWindow::~AccessibilityAlertWindow() {
aura::Env::GetInstance()->RemoveObserver(this);
}
AccessibilityAlertWindow::~AccessibilityAlertWindow() = default;
void AccessibilityAlertWindow::HandleAlert(const std::string& alert_string) {
if (!alert_window_->parent())
......@@ -40,10 +37,8 @@ void AccessibilityAlertWindow::HandleAlert(const std::string& alert_string) {
ax::mojom::Event::kAlert);
}
void AccessibilityAlertWindow::OnWindowInitialized(aura::Window* window) {}
void AccessibilityAlertWindow::OnWillDestroyEnv() {
observer_.RemoveAll();
alert_window_.reset();
}
} // namespace views
......@@ -8,6 +8,8 @@
#include <memory>
#include <string>
#include "base/scoped_observer.h"
#include "ui/aura/env.h"
#include "ui/aura/env_observer.h"
#include "ui/views/views_export.h"
......@@ -34,7 +36,6 @@ class VIEWS_EXPORT AccessibilityAlertWindow : public aura::EnvObserver {
private:
// aura::EnvObserver:
void OnWindowInitialized(aura::Window* window) override;
void OnWillDestroyEnv() override;
// The child alert window.
......@@ -42,6 +43,8 @@ class VIEWS_EXPORT AccessibilityAlertWindow : public aura::EnvObserver {
// The accessibility cache associated with |alert_window_|.
views::AXAuraObjCache* cache_;
ScopedObserver<aura::Env, aura::EnvObserver> observer_{this};
};
} // namespace views
......
......@@ -10,7 +10,6 @@
#include "ui/views/accessibility/ax_aura_obj_cache.h"
#include "ui/views/accessibility/ax_virtual_view.h"
#include "ui/views/accessibility/view_accessibility.h"
#include "ui/views/view.h"
#include "ui/views/widget/widget.h"
namespace views {
......@@ -19,15 +18,10 @@ AXViewObjWrapper::AXViewObjWrapper(AXAuraObjCache* aura_obj_cache, View* view)
: AXAuraObjWrapper(aura_obj_cache), view_(view) {
if (view->GetWidget())
aura_obj_cache_->GetOrCreate(view->GetWidget());
view->AddObserver(this);
observer_.Add(view);
}
AXViewObjWrapper::~AXViewObjWrapper() {
if (view_) {
view_->RemoveObserver(this);
view_ = nullptr;
}
}
AXViewObjWrapper::~AXViewObjWrapper() = default;
bool AXViewObjWrapper::IsIgnored() {
return view_ ? view_->GetViewAccessibility().IsIgnored() : true;
......@@ -97,6 +91,7 @@ bool AXViewObjWrapper::HandleAccessibleAction(const ui::AXActionData& action) {
}
void AXViewObjWrapper::OnViewIsDeleting(View* observed_view) {
observer_.RemoveAll();
view_ = nullptr;
}
......
......@@ -7,12 +7,13 @@
#include <stdint.h>
#include "base/scoped_observer.h"
#include "ui/views/accessibility/ax_aura_obj_wrapper.h"
#include "ui/views/view.h"
#include "ui/views/view_observer.h"
namespace views {
class AXAuraObjCache;
class View;
// Describes a |View| for use with other AX classes.
class AXViewObjWrapper : public AXAuraObjWrapper, public ViewObserver {
......@@ -38,6 +39,8 @@ class AXViewObjWrapper : public AXAuraObjWrapper, public ViewObserver {
private:
View* view_;
ScopedObserver<View, ViewObserver> observer_{this};
};
} // namespace views
......
......@@ -4,12 +4,13 @@
#include "ui/views/accessibility/ax_widget_obj_wrapper.h"
#include <vector>
#include "base/strings/utf_string_conversions.h"
#include "ui/accessibility/ax_enums.mojom.h"
#include "ui/accessibility/ax_node_data.h"
#include "ui/views/accessibility/ax_aura_obj_cache.h"
#include "ui/views/accessibility/ax_aura_obj_wrapper.h"
#include "ui/views/widget/widget.h"
#include "ui/views/widget/widget_delegate.h"
namespace views {
......@@ -17,12 +18,11 @@ namespace views {
AXWidgetObjWrapper::AXWidgetObjWrapper(AXAuraObjCache* aura_obj_cache,
Widget* widget)
: AXAuraObjWrapper(aura_obj_cache), widget_(widget) {
widget->AddObserver(this);
widget_observer_.Add(widget);
widget->AddRemovalsObserver(this);
}
AXWidgetObjWrapper::~AXWidgetObjWrapper() {
widget_->RemoveObserver(this);
widget_->RemoveRemovalsObserver(this);
}
......
......@@ -7,14 +7,15 @@
#include <stdint.h>
#include "base/scoped_observer.h"
#include "ui/accessibility/platform/ax_unique_id.h"
#include "ui/views/accessibility/ax_aura_obj_wrapper.h"
#include "ui/views/widget/widget.h"
#include "ui/views/widget/widget_observer.h"
#include "ui/views/widget/widget_removals_observer.h"
namespace views {
class AXAuraObjCache;
class Widget;
// Describes a |Widget| for use with other AX classes.
class AXWidgetObjWrapper : public AXAuraObjWrapper,
......@@ -46,6 +47,8 @@ class AXWidgetObjWrapper : public AXAuraObjWrapper,
Widget* widget_;
const ui::AXUniqueId unique_id_;
ScopedObserver<Widget, WidgetObserver> widget_observer_{this};
};
} // namespace views
......
......@@ -12,7 +12,6 @@
#include "ui/accessibility/ax_tree_id.h"
#include "ui/accessibility/platform/aura_window_properties.h"
#include "ui/aura/client/focus_client.h"
#include "ui/aura/window.h"
#include "ui/views/accessibility/ax_aura_obj_cache.h"
#include "ui/views/widget/widget.h"
......@@ -66,15 +65,13 @@ AXWindowObjWrapper::AXWindowObjWrapper(AXAuraObjCache* aura_obj_cache,
: AXAuraObjWrapper(aura_obj_cache),
window_(window),
is_root_window_(window->IsRootWindow()) {
window->AddObserver(this);
observer_.Add(window);
if (is_root_window_)
aura_obj_cache_->OnRootWindowObjCreated(window);
}
AXWindowObjWrapper::~AXWindowObjWrapper() {
window_->RemoveObserver(this);
}
AXWindowObjWrapper::~AXWindowObjWrapper() = default;
bool AXWindowObjWrapper::IsIgnored() {
return false;
......
......@@ -7,15 +7,13 @@
#include <stdint.h>
#include "base/scoped_observer.h"
#include "ui/accessibility/ax_enums.mojom-forward.h"
#include "ui/accessibility/platform/ax_unique_id.h"
#include "ui/aura/window.h"
#include "ui/aura/window_observer.h"
#include "ui/views/accessibility/ax_aura_obj_wrapper.h"
namespace aura {
class Window;
} // namespace aura
namespace views {
class AXAuraObjCache;
......@@ -61,6 +59,8 @@ class AXWindowObjWrapper : public AXAuraObjWrapper,
bool is_root_window_;
const ui::AXUniqueId unique_id_;
ScopedObserver<aura::Window, aura::WindowObserver> observer_{this};
};
} // namespace views
......
......@@ -2914,7 +2914,7 @@ void MenuController::SendMouseReleaseToActiveView(SubmenuView* event_source,
event.changed_button_flags());
// Reset the active mouse view before sending mouse released. That way if it
// calls back to us, we aren't in a weird state.
active_mouse_view_tracker_->Clear();
active_mouse_view_tracker_->SetView(nullptr);
active_mouse_view->OnMouseReleased(release_event);
}
......@@ -2925,7 +2925,7 @@ void MenuController::SendMouseCaptureLostToActiveView() {
// Reset the active mouse view before sending mouse capture lost. That way if
// it calls back to us, we aren't in a weird state.
active_mouse_view_tracker_->Clear();
active_mouse_view_tracker_->SetView(nullptr);
active_mouse_view->OnMouseCaptureLost();
}
......
......@@ -4,27 +4,22 @@
#include "ui/views/view_tracker.h"
#include "ui/views/view.h"
namespace views {
ViewTracker::ViewTracker(View* view) {
SetView(view);
}
ViewTracker::~ViewTracker() {
SetView(nullptr);
}
ViewTracker::~ViewTracker() = default;
void ViewTracker::SetView(View* view) {
if (view == view_)
return;
if (view_)
view_->RemoveObserver(this);
observer_.RemoveAll();
view_ = view;
if (view_)
view_->AddObserver(this);
observer_.Add(view_);
}
void ViewTracker::OnViewIsDeleting(View* observed_view) {
......
......@@ -5,20 +5,21 @@
#ifndef UI_VIEWS_VIEW_TRACKER_H_
#define UI_VIEWS_VIEW_TRACKER_H_
#include "base/macros.h"
#include "base/scoped_observer.h"
#include "ui/views/view.h"
#include "ui/views/view_observer.h"
#include "ui/views/views_export.h"
namespace views {
// ViewTracker tracks a single View. When the View is deleted it's removed.
class VIEWS_EXPORT ViewTracker : public ViewObserver {
public:
explicit ViewTracker(View* view = nullptr);
ViewTracker(const ViewTracker&) = delete;
ViewTracker& operator=(const ViewTracker&) = delete;
~ViewTracker() override;
void SetView(View* view);
void Clear() { SetView(nullptr); }
View* view() { return view_; }
// ViewObserver:
......@@ -27,7 +28,7 @@ class VIEWS_EXPORT ViewTracker : public ViewObserver {
private:
View* view_ = nullptr;
DISALLOW_COPY_AND_ASSIGN(ViewTracker);
ScopedObserver<View, ViewObserver> observer_{this};
};
} // namespace views
......
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