New issue
Advanced search Search tips

Issue 855114 link

Starred by 1 user

Issue metadata

Status: Fixed
Owner:
Closed: Jun 2018
Components:
EstimatedDays: ----
NextAction: ----
OS: ----
Pri: 3
Type: Bug

Blocking:
issue 808143



Sign in to add a comment

PageSignalReceiver::AddObserver fails on Android

Project Member Reported by u...@chromium.org, Jun 21 2018

Issue description

Calling PageSignalReceiver::AddObserver during WebContents initialization on Android fails with the following error:

[FATAL:binding_state.cc(93)] Check failed: !is_bound(). Attempting to bind interface that is already bound: resource_coordinator.mojom.PageSignalReceiver

The lazy interface binding is guarded by (!observers_.might_have_observers()) check, which seems fragile because the list of observers can become empty after binding.

I am working on a fix.

Stack trace from https://chromium-review.googlesource.com/c/chromium/src/+/1097481:
 000cc1dd logging::LogMessage::~LogMessage() chrome/src/base/logging.cc:592:29
 000128c9 mojo::internal::BindingStateBase::BindInternal(mojo::ScopedHandleBase<mojo::MessagePipeHandle>, scoped_refptr<base::SingleThreadTaskRunner>, char const*, std::__ndk1::unique_ptr<mojo::MessageReceiver, std::__ndk1::default_delete<mojo::MessageReceiver> >, bool, bool, mojo::MessageReceiverWithResponderStatus*, unsigned int) chrome/src/mojo/public/cpp/bindings/lib/binding_state.cc:93:3
 00a10115 mojo::internal::BindingState<resource_coordinator::mojom::PageSignalReceiver, mojo::RawPtrImplRefTraits<resource_coordinator::mojom::PageSignalReceiver> >::Bind(mojo::ScopedHandleBase<mojo::MessagePipeHandle>, scoped_refptr<base::SingleThreadTaskRunner>) chrome/src/mojo/public/cpp/bindings/lib/binding_state.h:112:23
 00a0ff57 mojo::Binding<resource_coordinator::mojom::PageSignalReceiver, mojo::RawPtrImplRefTraits<resource_coordinator::mojom::PageSignalReceiver> >::Bind(mojo::InterfaceRequest<resource_coordinator::mojom::PageSignalReceiver>, scoped_refptr<base::SingleThreadTaskRunner>) chrome/src/mojo/public/cpp/bindings/binding.h:101:21
 00a0fe71 resource_coordinator::PageSignalReceiver::AddObserver(resource_coordinator::PageSignalObserver*) chrome/src/chrome/browser/resource_coordinator/page_signal_receiver.cc:98:16
 00e0beb1 BloatedRendererTabHelper::BloatedRendererTabHelper(content::WebContents*) chrome/src/chrome/browser/ui/bloated_renderer/bloated_renderer_tab_helper.cc:40:27
 00e19cb3 content::WebContentsUserData<BloatedRendererTabHelper>::CreateForWebContents(content::WebContents*) chrome/src/content/public/browser/web_contents_user_data.h:39:65
 00e19941 TabHelpers::AttachTabHelpers(content::WebContents*) chrome/src/chrome/browser/ui/tab_helpers.cc:191:3
 00a86ba9 TabAndroid::AttachTabHelpers(content::WebContents*) chrome/src/chrome/browser/android/tab_android.cc:197:3
 00a855b1 TabAndroid::InitWebContents(_JNIEnv*, base::android::JavaParamRef<_jobject*> const&, unsigned char, unsigned char, base::android::JavaParamRef<_jobject*> const&, int, base::android::JavaParamRef<_jobject*> const&, base::android::JavaParamRef<_jobject*> const&) chrome/src/chrome/browser/android/tab_android.cc:424:3
 00a85549 Java_org_chromium_chrome_browser_tab_Tab_nativeInitWebContents chrome/src/out/Android/gen/chrome/browser/jni_headers/chrome/jni/Tab_jni.h:67:18
 

Comment 1 by u...@chromium.org, Jun 21 2018

Blocking: 808143
Project Member

Comment 2 by bugdroid1@chromium.org, Jun 22 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/0f9a9c53bc100d3b85b688753777ca7a31462311

commit 0f9a9c53bc100d3b85b688753777ca7a31462311
Author: Ulan Degenbaev <ulan@chromium.org>
Date: Fri Jun 22 09:22:55 2018

Ensure that PageSignalReceiver creates at most one mojo channel.

This changes the guard of lazy mojo channel construction from the one
that is based on observer list emptiness to a separate boolean flag.

The existing guard is fragile because the observer list can become
empty after channel construction. See details in the bug and the test.

Bug:  855114 
Tbr: fdoray@chromium.org
Change-Id: I5585c3ac2aa6425d9401bebd3a6c132199f2e011
Reviewed-on: https://chromium-review.googlesource.com/1110365
Reviewed-by: Ulan Degenbaev <ulan@chromium.org>
Commit-Queue: Ulan Degenbaev <ulan@chromium.org>
Cr-Commit-Position: refs/heads/master@{#569565}
[modify] https://crrev.com/0f9a9c53bc100d3b85b688753777ca7a31462311/chrome/browser/resource_coordinator/page_signal_receiver.cc
[modify] https://crrev.com/0f9a9c53bc100d3b85b688753777ca7a31462311/chrome/browser/resource_coordinator/page_signal_receiver_unittest.cc

Comment 3 by u...@chromium.org, Jun 22 2018

Status: Fixed (was: Assigned)

Sign in to add a comment