Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(333)

Unified Diff: components/navigation_interception/intercept_navigation_throttle.cc

Issue 1579603004: Gather more information related to crash in InterceptNavigationThrottle (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/navigation_interception/intercept_navigation_throttle.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/navigation_interception/intercept_navigation_throttle.cc
diff --git a/components/navigation_interception/intercept_navigation_throttle.cc b/components/navigation_interception/intercept_navigation_throttle.cc
index 4ad87b22273a3356717314e901baa31953904327..84292c9f8bb201cb2eb98f1eeb99e05dbe5be8cb 100644
--- a/components/navigation_interception/intercept_navigation_throttle.cc
+++ b/components/navigation_interception/intercept_navigation_throttle.cc
@@ -14,7 +14,7 @@ namespace navigation_interception {
namespace {
-using ChecksPerformedCallback = base::Callback<void(bool)>;
+using ChecksPerformedCallback = base::Callback<void(bool, bool)>;
// This is used to run |should_ignore_callback| if it can destroy the
// WebContents (and the InterceptNavigationThrottle along). In that case,
@@ -23,14 +23,18 @@ void RunCallback(
content::WebContents* web_contents,
const NavigationParams& navigation_params,
InterceptNavigationThrottle::CheckCallback should_ignore_callback,
- ChecksPerformedCallback on_checks_performed_callback) {
+ ChecksPerformedCallback on_checks_performed_callback,
+ base::WeakPtr<InterceptNavigationThrottle> throttle) {
bool should_ignore_navigation =
should_ignore_callback.Run(web_contents, navigation_params);
// If the InterceptNavigationThrottle that called RunCallback is still alive
// after |should_ignore_callback| has run, this will run
// InterceptNavigationThrottle::OnAsynchronousChecksPerformed.
- on_checks_performed_callback.Run(should_ignore_navigation);
+ // TODO(clamy): remove this boolean after crbug.com/570200 is fixed.
+ bool throttle_was_destroyed = !throttle.get();
+ on_checks_performed_callback.Run(should_ignore_navigation,
+ throttle_was_destroyed);
}
} // namespace
@@ -97,7 +101,8 @@ void InterceptNavigationThrottle::RunCallbackAsynchronously(
navigation_handle()->GetWebContents(), navigation_params,
should_ignore_callback_,
base::Bind(&InterceptNavigationThrottle::OnAsynchronousChecksPerformed,
- weak_factory_.GetWeakPtr()));
+ weak_factory_.GetWeakPtr()),
+ weak_factory_.GetWeakPtr());
// DO NOT ADD CODE AFTER HERE: at this point the InterceptNavigationThrottle
// may have been destroyed by the |should_ignore_callback_|. Adding code here
@@ -110,12 +115,16 @@ void InterceptNavigationThrottle::RunCallbackAsynchronously(
}
void InterceptNavigationThrottle::OnAsynchronousChecksPerformed(
- bool should_ignore_navigation) {
+ bool should_ignore_navigation,
+ bool throttle_was_destroyed) {
+ CHECK(!throttle_was_destroyed);
+ content::NavigationHandle* handle = navigation_handle();
+ CHECK(handle);
if (should_ignore_navigation) {
navigation_handle()->CancelDeferredNavigation(
content::NavigationThrottle::CANCEL_AND_IGNORE);
} else {
- navigation_handle()->Resume();
+ handle->Resume();
}
}
« no previous file with comments | « components/navigation_interception/intercept_navigation_throttle.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698