custom_tab_unittest.cc 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. // Copyright 2021 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "components/arc/intent_helper/custom_tab.h"
  5. #include <memory>
  6. #include "ui/aura/test/aura_test_base.h"
  7. #include "ui/views/test/test_views_delegate.h"
  8. #include "ui/views/widget/widget.h"
  9. namespace arc {
  10. using CustomTabTest = aura::test::AuraTestBase;
  11. // Make sure resizing the widget after closing custom tab will not crash.
  12. // b/169014289
  13. TEST_F(CustomTabTest, ResizeAfterClose) {
  14. views::TestViewsDelegate views_delegate;
  15. views::Widget toplevel_widget;
  16. {
  17. views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW);
  18. params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
  19. params.activatable = views::Widget::InitParams::Activatable::kYes;
  20. params.bounds = gfx::Rect(0, 0, 200, 200);
  21. params.parent = root_window();
  22. toplevel_widget.Init(std::move(params));
  23. }
  24. auto custom_tab =
  25. std::make_unique<CustomTab>(toplevel_widget.GetNativeWindow());
  26. views::Widget embedded_widget;
  27. {
  28. views::Widget::InitParams params(views::Widget::InitParams::TYPE_CONTROL);
  29. params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
  30. params.context = root_window();
  31. embedded_widget.Init(std::move(params));
  32. embedded_widget.Show();
  33. }
  34. custom_tab->Attach(embedded_widget.GetNativeWindow());
  35. toplevel_widget.Show();
  36. custom_tab.reset();
  37. // Resize to force re-layout child views to make sure that deleting the custom
  38. // tab removes the native view host inside upon deletion.
  39. toplevel_widget.SetSize(gfx::Size(250, 250));
  40. }
  41. } // namespace arc