Commit 407d1d4b authored by Yue Li's avatar Yue Li Committed by Commit Bot

Fix crash on shutdown while showing quick answers view

QuickAnswersUiController should not try to access the quick answers view
in destructor, since the view is owned by view hierarchy.

Set the pointer to null instead and added a unittest case for it.

Bug: b/162806534
Test: Run the newly added test in ash_unittests
Change-Id: Iedc5ca63c178a62b54b55525d5469874e97704c0
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2336495Reviewed-by: default avatarXiyuan Xia <xiyuan@chromium.org>
Commit-Queue: Yue Li <updowndota@chromium.org>
Cr-Commit-Position: refs/heads/master@{#794736}
parent e19703fd
...@@ -1883,6 +1883,7 @@ test("ash_unittests") { ...@@ -1883,6 +1883,7 @@ test("ash_unittests") {
"power/hfp_battery_listener_unittest.cc", "power/hfp_battery_listener_unittest.cc",
"power/hid_battery_listener_unittest.cc", "power/hid_battery_listener_unittest.cc",
"power/hid_battery_util_unittest.cc", "power/hid_battery_util_unittest.cc",
"quick_answers/quick_answers_ui_controller_unittest.cc",
"quick_answers/ui/quick_answers_view_unittest.cc", "quick_answers/ui/quick_answers_view_unittest.cc",
"root_window_controller_unittest.cc", "root_window_controller_unittest.cc",
"rotator/screen_rotation_animation_unittest.cc", "rotator/screen_rotation_animation_unittest.cc",
......
...@@ -28,8 +28,8 @@ QuickAnswersUiController::QuickAnswersUiController( ...@@ -28,8 +28,8 @@ QuickAnswersUiController::QuickAnswersUiController(
: controller_(controller) {} : controller_(controller) {}
QuickAnswersUiController::~QuickAnswersUiController() { QuickAnswersUiController::~QuickAnswersUiController() {
CloseQuickAnswersView(); quick_answers_view_ = nullptr;
CloseUserConsentView(); user_consent_view_ = nullptr;
} }
void QuickAnswersUiController::CreateQuickAnswersView( void QuickAnswersUiController::CreateQuickAnswersView(
......
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ash/quick_answers/ui/quick_answers_view.h"
#include "ash/quick_answers/quick_answers_controller_impl.h"
#include "ash/quick_answers/quick_answers_ui_controller.h"
#include "ash/test/ash_test_base.h"
#include "base/test/scoped_feature_list.h"
#include "chromeos/constants/chromeos_features.h"
namespace ash {
namespace {
constexpr gfx::Rect kDefaultAnchorBoundsInScreen =
gfx::Rect(gfx::Point(500, 250), gfx::Size(80, 140));
} // namespace
class QuickAnswersUiControllerTest : public AshTestBase {
protected:
QuickAnswersUiControllerTest() {
scoped_feature_list_.InitWithFeatures(
{chromeos::features::kQuickAnswers,
chromeos::features::kQuickAnswersRichUi},
{});
}
QuickAnswersUiControllerTest(const QuickAnswersUiControllerTest&) = delete;
QuickAnswersUiControllerTest& operator=(const QuickAnswersUiControllerTest&) =
delete;
~QuickAnswersUiControllerTest() override = default;
// AshTestBase:
void SetUp() override {
AshTestBase::SetUp();
ui_controller_ =
static_cast<QuickAnswersControllerImpl*>(QuickAnswersController::Get())
->quick_answers_ui_controller();
}
// Currently instantiated QuickAnswersView instance.
QuickAnswersUiController* ui_controller() { return ui_controller_; }
private:
QuickAnswersUiController* ui_controller_ = nullptr;
base::test::ScopedFeatureList scoped_feature_list_;
};
TEST_F(QuickAnswersUiControllerTest, TearDownWhileQuickAnswersViewShowing) {
EXPECT_FALSE(ui_controller()->is_showing_quick_answers_view());
ui_controller()->CreateQuickAnswersView(kDefaultAnchorBoundsInScreen,
"default_title", "default_query");
EXPECT_TRUE(ui_controller()->is_showing_quick_answers_view());
}
TEST_F(QuickAnswersUiControllerTest, TearDownWhileConsentViewShowing) {
EXPECT_FALSE(ui_controller()->is_showing_user_consent_view());
ui_controller()->CreateUserConsentView(kDefaultAnchorBoundsInScreen,
base::string16(), base::string16());
EXPECT_TRUE(ui_controller()->is_showing_user_consent_view());
}
} // namespace ash
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