Commit cf6a978e authored by Mitsuru Oshima's avatar Mitsuru Oshima Committed by Chromium LUCI CQ

Remove the native view host when CustomTab is closed.

Bug: b/169014289
Test: covered by unittest

Change-Id: I769addac4e172eb16d5c363c8edca96c1877a346
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2637415Reviewed-by: default avatarYuichiro Hanada <yhanada@chromium.org>
Reviewed-by: default avatarDavid Jacobo <djacobo@chromium.org>
Commit-Queue: Mitsuru Oshima <oshima@chromium.org>
Cr-Commit-Position: refs/heads/master@{#846018}
parent 46bbd542
...@@ -404,6 +404,7 @@ source_set("unit_tests") { ...@@ -404,6 +404,7 @@ source_set("unit_tests") {
"ime/key_event_result_receiver_unittest.cc", "ime/key_event_result_receiver_unittest.cc",
"intent_helper/activity_icon_loader_unittest.cc", "intent_helper/activity_icon_loader_unittest.cc",
"intent_helper/arc_intent_helper_bridge_unittest.cc", "intent_helper/arc_intent_helper_bridge_unittest.cc",
"intent_helper/custom_tab_unittest.cc",
"intent_helper/intent_filter_unittest.cc", "intent_helper/intent_filter_unittest.cc",
"intent_helper/link_handler_model_unittest.cc", "intent_helper/link_handler_model_unittest.cc",
"metrics/arc_metrics_service_unittest.cc", "metrics/arc_metrics_service_unittest.cc",
...@@ -470,6 +471,8 @@ source_set("unit_tests") { ...@@ -470,6 +471,8 @@ source_set("unit_tests") {
"//ui/events", "//ui/events",
"//ui/events:dom_keycode_converter", "//ui/events:dom_keycode_converter",
"//ui/ozone", "//ui/ozone",
"//ui/views",
"//ui/views:test_support",
"//url:url", "//url:url",
] ]
} }
......
...@@ -27,7 +27,10 @@ CustomTab::CustomTab(aura::Window* arc_app_window) ...@@ -27,7 +27,10 @@ CustomTab::CustomTab(aura::Window* arc_app_window)
widget->GetContentsView()->AddChildView(host_.get()); widget->GetContentsView()->AddChildView(host_.get());
} }
CustomTab::~CustomTab() = default; CustomTab::~CustomTab() {
if (host_->GetWidget())
host_->GetWidget()->GetContentsView()->RemoveChildView(host_.get());
}
void CustomTab::Attach(gfx::NativeView view) { void CustomTab::Attach(gfx::NativeView view) {
DCHECK(view); DCHECK(view);
......
// Copyright 2021 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 "components/arc/intent_helper/custom_tab.h"
#include <memory>
#include "ui/aura/test/aura_test_base.h"
#include "ui/views/test/test_views_delegate.h"
#include "ui/views/widget/widget.h"
namespace arc {
using CustomTabTest = aura::test::AuraTestBase;
// Make sure resizing the widget after closing custom tab will not crash.
// b/169014289
TEST_F(CustomTabTest, ResizeAfterClose) {
views::TestViewsDelegate views_delegate;
views::Widget toplevel_widget;
{
views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW);
params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
params.activatable = views::Widget::InitParams::ACTIVATABLE_YES;
params.bounds = gfx::Rect(0, 0, 200, 200);
params.parent = root_window();
toplevel_widget.Init(std::move(params));
}
auto custom_tab =
std::make_unique<CustomTab>(toplevel_widget.GetNativeWindow());
views::Widget embedded_widget;
{
views::Widget::InitParams params(views::Widget::InitParams::TYPE_CONTROL);
params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
params.context = root_window();
embedded_widget.Init(std::move(params));
embedded_widget.Show();
}
custom_tab->Attach(embedded_widget.GetNativeWindow());
toplevel_widget.Show();
custom_tab.reset();
// Resize to force re-layout child views to make sure that deleting the custom
// tab removes the native view host inside upon deletion.
toplevel_widget.SetSize(gfx::Size(250, 250));
}
} // namespace arc
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