Commit 2ad2e4aa authored by Collin Baker's avatar Collin Baker Committed by Commit Bot

Handle IPH widget destruction without OnWidgetClosing() call

Fixed: 1103167
Change-Id: Ibfd33d4148ad4a776b4112860eaf36f95c9b127d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2289061Reviewed-by: default avatarDana Fried <dfried@chromium.org>
Commit-Queue: Collin Baker <collinbaker@chromium.org>
Cr-Commit-Position: refs/heads/master@{#786905}
parent 8f7878dc
......@@ -78,6 +78,11 @@ void TabGroupsIPHController::OnWidgetClosing(views::Widget* widget) {
HandlePromoClose();
}
void TabGroupsIPHController::OnWidgetDestroying(views::Widget* widget) {
DCHECK_EQ(widget, promo_widget_);
HandlePromoClose();
}
void TabGroupsIPHController::HandlePromoClose() {
widget_observer_.Remove(promo_widget_);
promo_widget_ = nullptr;
......
......@@ -49,6 +49,7 @@ class TabGroupsIPHController : public TabStripModelObserver,
// views::WidgetObserver:
void OnWidgetClosing(views::Widget* widget) override;
void OnWidgetDestroying(views::Widget* widget) override;
private:
void HandlePromoClose();
......
......@@ -36,15 +36,26 @@ class TabGroupsIPHControllerBrowserTest : public DialogBrowserTest {
}
protected:
void ShowUi(const std::string& name) override { OpenTabsToTrigger(); }
void ShowUi(const std::string& name) override {
OpenTabsToTrigger(browser());
}
void OpenTabsToTrigger() {
void OpenTabsToTrigger(Browser* browser) {
// We need to have 6 tabs to trigger our IPH. Browser tests start
// with one tab, so open 5 more.
for (int i = 0; i < 5; ++i)
chrome::NewTab(browser());
chrome::NewTab(browser);
}
void SetUpOnMainThread() override {
DialogBrowserTest::SetUpOnMainThread();
mock_tracker_ = static_cast<feature_engagement::test::MockTracker*>(
feature_engagement::TrackerFactory::GetForBrowserContext(
browser()->profile()));
}
feature_engagement::test::MockTracker* mock_tracker_;
private:
static void RegisterMockTrackerFactory(content::BrowserContext* context) {
feature_engagement::TrackerFactory::GetInstance()->SetTestingFactory(
......@@ -68,13 +79,8 @@ class TabGroupsIPHControllerBrowserTest : public DialogBrowserTest {
};
IN_PROC_BROWSER_TEST_F(TabGroupsIPHControllerBrowserTest, InvokeUi_default) {
auto* const mock_tracker =
static_cast<feature_engagement::test::MockTracker*>(
feature_engagement::TrackerFactory::GetForBrowserContext(
browser()->profile()));
// Allow the controller to show the promo.
EXPECT_CALL(*mock_tracker,
EXPECT_CALL(*mock_tracker_,
ShouldTriggerHelpUI(
Ref(feature_engagement::kIPHDesktopTabGroupsNewGroupFeature)))
.Times(1)
......@@ -82,9 +88,28 @@ IN_PROC_BROWSER_TEST_F(TabGroupsIPHControllerBrowserTest, InvokeUi_default) {
// Expect the controller to notify on dismissal.
EXPECT_CALL(
*mock_tracker,
*mock_tracker_,
Dismissed(Ref(feature_engagement::kIPHDesktopTabGroupsNewGroupFeature)))
.Times(1);
ShowAndVerifyUi();
}
IN_PROC_BROWSER_TEST_F(TabGroupsIPHControllerBrowserTest,
HandlesBrowserShutdown) {
Browser* second_browser = CreateBrowser(browser()->profile());
EXPECT_CALL(*mock_tracker_,
ShouldTriggerHelpUI(
Ref(feature_engagement::kIPHDesktopTabGroupsNewGroupFeature)))
.Times(1)
.WillOnce(Return(true));
EXPECT_CALL(
*mock_tracker_,
Dismissed(Ref(feature_engagement::kIPHDesktopTabGroupsNewGroupFeature)))
.Times(1);
OpenTabsToTrigger(second_browser);
CloseBrowserSynchronously(second_browser);
}
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