Commit 1e9fb953 authored by Glen Robertson's avatar Glen Robertson Committed by Chromium LUCI CQ

Check if WebContents::IsBeingDestroyed when it comes to the foreground.

Seems to be possible on shutdown. For more context see attached bug.

Also switched scoped_observ{er->ation} because we always observe a
single source (no functional change here).

Bug: 1167491
Change-Id: I675f0bc57abe7067960500a7e6607be3f7b8d36f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2631979Reviewed-by: default avatarDominick Ng <dominickn@chromium.org>
Commit-Queue: Glen Robertson <glenrob@chromium.org>
Cr-Commit-Position: refs/heads/master@{#844451}
parent d3c5ed40
...@@ -379,14 +379,18 @@ void WebAppMetrics::UpdateUkmData(WebContents* web_contents, ...@@ -379,14 +379,18 @@ void WebAppMetrics::UpdateUkmData(WebContents* web_contents,
void WebAppMetrics::UpdateForegroundWebContents(WebContents* web_contents) { void WebAppMetrics::UpdateForegroundWebContents(WebContents* web_contents) {
if (web_contents == foreground_web_contents_) if (web_contents == foreground_web_contents_)
return; return;
app_banner_manager_observer_.RemoveAll(); if (web_contents && web_contents->IsBeingDestroyed()) {
base::debug::DumpWithoutCrashing();
web_contents = nullptr;
}
app_banner_manager_observer_.Reset();
foreground_web_contents_ = web_contents; foreground_web_contents_ = web_contents;
WebContentsObserver::Observe(web_contents); WebContentsObserver::Observe(web_contents);
if (web_contents) { if (web_contents) {
auto* app_banner_manager = auto* app_banner_manager =
webapps::AppBannerManager::FromWebContents(web_contents); webapps::AppBannerManager::FromWebContents(web_contents);
DCHECK(app_banner_manager); DCHECK(app_banner_manager);
app_banner_manager_observer_.Add(app_banner_manager); app_banner_manager_observer_.Observe(app_banner_manager);
} }
} }
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
#include "base/memory/weak_ptr.h" #include "base/memory/weak_ptr.h"
#include "base/power_monitor/power_observer.h" #include "base/power_monitor/power_observer.h"
#include "base/scoped_observer.h" #include "base/scoped_observation.h"
#include "chrome/browser/banners/app_banner_manager.h" #include "chrome/browser/banners/app_banner_manager.h"
#include "chrome/browser/ui/browser_tab_strip_tracker.h" #include "chrome/browser/ui/browser_tab_strip_tracker.h"
#include "chrome/browser/ui/tabs/tab_strip_model_observer.h" #include "chrome/browser/ui/tabs/tab_strip_model_observer.h"
...@@ -96,7 +96,8 @@ class WebAppMetrics : public KeyedService, ...@@ -96,7 +96,8 @@ class WebAppMetrics : public KeyedService,
Profile* const profile_; Profile* const profile_;
BrowserTabStripTracker browser_tab_strip_tracker_; BrowserTabStripTracker browser_tab_strip_tracker_;
ScopedObserver<webapps::AppBannerManager, webapps::AppBannerManager::Observer> base::ScopedObservation<webapps::AppBannerManager,
webapps::AppBannerManager::Observer>
app_banner_manager_observer_{this}; app_banner_manager_observer_{this};
base::WeakPtrFactory<WebAppMetrics> weak_ptr_factory_{this}; base::WeakPtrFactory<WebAppMetrics> weak_ptr_factory_{this};
......
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