| Index: content/test/web_contents_observer_sanity_checker.cc
|
| diff --git a/content/test/web_contents_observer_sanity_checker.cc b/content/test/web_contents_observer_sanity_checker.cc
|
| index 1d85380fc7827c17a154e04b50c26f26e3e561ce..f3a72cb2dede13ee00f41235fa4198622488188b 100644
|
| --- a/content/test/web_contents_observer_sanity_checker.cc
|
| +++ b/content/test/web_contents_observer_sanity_checker.cc
|
| @@ -4,6 +4,7 @@
|
|
|
| #include "content/test/web_contents_observer_sanity_checker.h"
|
|
|
| +#include "base/debug/stack_trace.h"
|
| #include "base/strings/stringprintf.h"
|
| #include "build/build_config.h"
|
| #include "content/browser/frame_host/render_frame_host_impl.h"
|
| @@ -23,6 +24,10 @@ namespace {
|
| const char kWebContentsObserverSanityCheckerKey[] =
|
| "WebContentsObserverSanityChecker";
|
|
|
| +// Set this variable to true to collect stack traces on observer method calls
|
| +// so duplicate ones can be easily debugged.
|
| +static bool g_collect_stack_traces = true;
|
| +
|
| GlobalRoutingID GetRoutingPair(RenderFrameHost* host) {
|
| if (!host)
|
| return GlobalRoutingID(0, 0);
|
| @@ -282,6 +287,16 @@ void WebContentsObserverSanityChecker::DidOpenRequestedURL(
|
| WindowOpenDisposition disposition,
|
| ui::PageTransition transition) {
|
| AssertRenderFrameExists(source_render_frame_host);
|
| +
|
| + std::string trace;
|
| + if (g_collect_stack_traces) {
|
| + base::debug::StackTrace stack_trace;
|
| + trace = stack_trace.ToString();
|
| + }
|
| +
|
| + bool did_not_exist = created_web_contents_.insert(std::make_pair(new_contents, trace)).second;
|
| + CHECK(did_not_exist) << "A WebContents was created for the same address as previously "
|
| + "created one. The original one was allocated by:\n" << trace;
|
| }
|
|
|
| void WebContentsObserverSanityChecker::MediaStartedPlaying(
|
|
|