New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 646077 link

Starred by 2 users

Issue metadata

Status: Verified
Owner:
please use my google.com address
Closed: Oct 2016
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Chrome
Pri: 2
Type: Bug



Sign in to add a comment

mash: Wallpaper picker fails: 'Chrome cannot access the image'

Project Member Reported by msw@chromium.org, Sep 12 2016

Issue description

mash: Wallpaper picker fails: 'Chrome cannot access the image'

1) Run chrome --mash
2) Right click the app launcher, select 'Set wallpaper...' and 'Choose File'.
3) Choose a file.

Expected: Thumbnail appears, wallpaper can be set.
Actual: "Chrome cannot access the image." (IDS_WALLPAPER_MANAGER_ACCESS_FILE_FAILURE / accessFileFailure)

This error comes from WallpaperManager.prototype.onFileSystemError_:
https://cs.chromium.org/chromium/src/chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_manager.js?rcl=0&l=702
 

Comment 1 by msw@chromium.org, Oct 3 2016

The error I see now is "Chrome cannot set wallpaper. Learn more" and in the terminal, I see:

[9151:9151:1003/152313:INFO:CONSOLE(0)] "Error in response to wallpaperPrivate.setCustomWallpaper: TypeError: Cannot read property 'code' of undefined
    at WallpaperManager.onFileSystemError_ (chrome-extension://obklkkbkpaoaejdabbfldmcfplpdgolj/js/main_scripts.js:9748:14)
    at chrome-extension://obklkkbkpaoaejdabbfldmcfplpdgolj/js/main_scripts.js:9959:19
    at Object.onFinished [as callback] (chrome-extension://obklkkbkpaoaejdabbfldmcfplpdgolj/js/main_scripts.js:10029:9)
    at WallpaperManager.setCustomWallpaper (chrome-extension://obklkkbkpaoaejdabbfldmcfplpdgolj/js/main_scripts.js:10035:29)
    at FileReader.<anonymous> (chrome-extension://obklkkbkpaoaejdabbfldmcfplpdgolj/js/main_scripts.js:9953:22)", source: chrome-extension://obklkkbkpaoaejdabbfldmcfplpdgolj/main.html (0)
[9151:9151:1003/152313:INFO:CONSOLE(9749)] "Uncaught ReferenceError: FileError is not defined", source: chrome-extension://obklkkbkpaoaejdabbfldmcfplpdgolj/js/main_scripts.js (9749)

Comment 2 by msw@chromium.org, Oct 3 2016

Cc: roc...@chromium.org sky@chromium.org jam@chromium.org ben@chromium.org
Components: Internals>Images
Labels: Stability-Crash
afaict, it seems like the first error handler hit is for setCustomWallpaper here:
  https://cs.chromium.org/chromium/src/chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_manager.js?rcl=0&l=915
It's called here because chrome.runtime.lastError.message is "Chrome cannot set wallpaper."
  https://cs.chromium.org/chromium/src/chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_manager.js?rcl=0&l=985
It seems like that's called via WallpaperFunctionBase::UnsafeWallpaperDecoder::OnDecodeImageFailed:
  https://cs.chromium.org/chromium/src/chrome/browser/chromeos/extensions/wallpaper_function_base.cc?rcl=0&l=89
This is triggered via the call to ImageDecoder::FailAllRequests() from ImageDecoder::OnProcessCrashed, called with exit_code 9:
  https://cs.chromium.org/chromium/src/chrome/browser/image_decoder.cc?rcl=1475522397&l=249
UtilityProcessHostImpl::OnProcessCrashed is called via BrowserChildProcessHostImpl::OnChildDisconnected() with status == 5:
  https://cs.chromium.org/chromium/src/content/browser/browser_child_process_host_impl.cc?rcl=1475522397&l=432

afaict, that value means base::TERMINATION_STATUS_PROCESS_WAS_KILLED_BY_OOM...
I'm not sure why the image decoding utility process would be killed by the cros oom, if that is the case...
This comment says that "// On ChromeOS, only way a process gets kill by SIGKILL is by oom-killer.":
  https://cs.chromium.org/chromium/src/base/process/kill_posix.cc?rcl=0&l=60
Perhaps that's not true when running in mash?

+CC some folks that might have some insight into mash processes.

Comment 3 by msw@chromium.org, Oct 4 2016

OnChildDisconnected is called via mojo::Connector::OnHandleReadyInternal() with result == 9 (MOJO_RESULT_FAILED_PRECONDITION).
Here's the stack trace for OnChildDisconnected:

#0 0x7fea4d3109be base::debug::StackTrace::StackTrace()
#1 0x7fea475d0008 content::BrowserChildProcessHostImpl::OnChildDisconnected()
#2 0x7fea46d8bf7c content::ChildProcessHostImpl::OnChannelError()
#3 0x7fea45a11904 IPC::ChannelMojo::OnPipeError()
#4 0x7fea45a47fa0 IPC::internal::MessagePipeReader::OnPipeError()
#5 0x7fea45a4a8e4 _ZN4base8internal13FunctorTraitsIMN3IPC8internal17MessagePipeReaderEFvjEvE6InvokeIPS4_JRKjEEEvS6_OT_DpOT0_
#6 0x7fea45a4a7a6 _ZN4base8internal12InvokeHelperILb0EvE8MakeItSoIRKMN3IPC8internal17MessagePipeReaderEFvjEJPS6_RKjEEEvOT_DpOT0_
#7 0x7fea45a4a733 _ZN4base8internal7InvokerINS0_9BindStateIMN3IPC8internal17MessagePipeReaderEFvjEJNS0_17UnretainedWrapperIS5_EEjEEEFvvEE7RunImplIRKS7_RKSt5tupleIJS9_jEEJLm0ELm1EEEEvOT_OT0_NS_13IndexSequenceIJXspT1_EEEE
#8 0x7fea45a4a64c _ZN4base8internal7InvokerINS0_9BindStateIMN3IPC8internal17MessagePipeReaderEFvjEJNS0_17UnretainedWrapperIS5_EEjEEEFvvEE3RunEPNS0_13BindStateBaseE
#9 0x7fea4dab8b3b base::internal::RunMixin<>::Run()
#10 0x7fea4dac5b87 mojo::InterfaceEndpointClient::NotifyError()
#11 0x7fea45a5e66e IPC::(anonymous namespace)::ChannelAssociatedGroupController::NotifyEndpointOfError()
#12 0x7fea45a61f55 IPC::(anonymous namespace)::ChannelAssociatedGroupController::OnPipeError()
#13 0x7fea45a64749 _ZN4base8internal13FunctorTraitsIMN3IPC12_GLOBAL__N_132ChannelAssociatedGroupControllerEFvvEvE6InvokeIPS4_JEEEvS6_OT_DpOT0_
#14 0x7fea45a64661 _ZN4base8internal12InvokeHelperILb0EvE8MakeItSoIRKMN3IPC12_GLOBAL__N_132ChannelAssociatedGroupControllerEFvvEJPS6_EEEvOT_DpOT0_
#15 0x7fea45a64607 _ZN4base8internal7InvokerINS0_9BindStateIMN3IPC12_GLOBAL__N_132ChannelAssociatedGroupControllerEFvvEJNS0_17UnretainedWrapperIS5_EEEEEFvvEE7RunImplIRKS7_RKSt5tupleIJS9_EEJLm0EEEEvOT_OT0_NS_13IndexSequenceIJXspT1_EEEE
#16 0x7fea45a6454c _ZN4base8internal7InvokerINS0_9BindStateIMN3IPC12_GLOBAL__N_132ChannelAssociatedGroupControllerEFvvEJNS0_17UnretainedWrapperIS5_EEEEEFvvEE3RunEPNS0_13BindStateBaseE
#17 0x7fea4dab8b3b base::internal::RunMixin<>::Run()
#18 0x7fea4dab6c2c mojo::Connector::HandleError()
#19 0x7fea4dab7a40 mojo::Connector::OnHandleReadyInternal()
#20 0x7fea4dab792b mojo::Connector::OnWatcherHandleReady()
#21 0x7fea4dab9be4 _ZN4base8internal13FunctorTraitsIMN4mojo9ConnectorEFvjEvE6InvokeIPS3_JjEEEvS5_OT_DpOT0_
#22 0x7fea4dab9af6 _ZN4base8internal12InvokeHelperILb0EvE8MakeItSoIRKMN4mojo9ConnectorEFvjEJPS5_jEEEvOT_DpOT0_
#23 0x7fea4dab9a87 _ZN4base8internal7InvokerINS0_9BindStateIMN4mojo9ConnectorEFvjEJNS0_17UnretainedWrapperIS4_EEEEEFvjEE7RunImplIRKS6_RKSt5tupleIJS8_EEJLm0EEEEvOT_OT0_NS_13IndexSequenceIJXspT1_EEEEOj
#24 0x7fea4dab998c _ZN4base8internal7InvokerINS0_9BindStateIMN4mojo9ConnectorEFvjEJNS0_17UnretainedWrapperIS4_EEEEEFvjEE3RunEPNS0_13BindStateBaseEOj
#25 0x7fea4da7776f base::internal::RunMixin<>::Run()
#26 0x7fea4da770d4 mojo::Watcher::OnHandleReady()
#27 0x7fea4da76ec0 mojo::Watcher::CallOnHandleReady()
#28 0x7fea3e3619bf mojo::edk::(anonymous namespace)::CallWatchCallback()
#29 0x7fea3e369957 _ZN4base8internal13FunctorTraitsIPFvPFvmj22MojoHandleSignalsStatejEmjRKN4mojo3edk18HandleSignalsStateEjEvE6InvokeIJRKS4_RKmjS9_jEEEvSB_DpOT_
#30 0x7fea3e36984c _ZN4base8internal12InvokeHelperILb0EvE8MakeItSoIRKPFvPFvmj22MojoHandleSignalsStatejEmjRKN4mojo3edk18HandleSignalsStateEjEJRKS6_RKmjSB_jEEEvOT_DpOT0_
#31 0x7fea3e3697b2 _ZN4base8internal7InvokerINS0_9BindStateIPFvPFvmj22MojoHandleSignalsStatejEmjRKN4mojo3edk18HandleSignalsStateEjEJS5_mEEEFvjSA_jEE7RunImplIRKSC_RKSt5tupleIJS5_mEEJLm0ELm1EEEEvOT_OT0_NS_13IndexSequenceIJXspT1_EEEEOjSA_ST_
#32 0x7fea3e369693 _ZN4base8internal7InvokerINS0_9BindStateIPFvPFvmj22MojoHandleSignalsStatejEmjRKN4mojo3edk18HandleSignalsStateEjEJS5_mEEEFvjSA_jEE3RunEPNS0_13BindStateBaseEOjSA_SI_
#33 0x7fea3e3c044e base::internal::RunMixin<>::Run()
#34 0x7fea3e3c01ad mojo::edk::Watcher::MaybeInvokeCallback()
#35 0x7fea3e3adf76 mojo::edk::RequestContext::~RequestContext()
#36 0x7fea3e3867c8 mojo::edk::NodeChannel::OnChannelMessage()
#37 0x7fea3e35474b mojo::edk::Channel::OnReadComplete()
#38 0x7fea3e35a361 mojo::edk::(anonymous namespace)::ChannelPosix::OnFileCanReadWithoutBlocking()
#39 0x7fea4d3b1cb1 base::MessagePumpLibevent::FileDescriptorWatcher::OnFileCanReadWithoutBlocking()
#40 0x7fea4d3b2fcf base::MessagePumpLibevent::OnLibeventNotification()
#41 0x7fea4d5c894e event_process_active
#42 0x7fea4d5c7f97 event_base_loop
#43 0x7fea4d3b3096 base::MessagePumpLibevent::Run()
#44 0x7fea4d39cb51 base::MessageLoop::RunHandler()
#45 0x7fea4d4356a4 base::RunLoop::Run()
#46 0x7fea4d4d2b89 base::Thread::Run()
#47 0x7fea47606908 content::BrowserThreadImpl::IOThreadRun()
#48 0x7fea47606ba1 content::BrowserThreadImpl::Run()
#49 0x7fea4d4d33c1 base::Thread::ThreadMain()
#50 0x7fea4d4bc17a base::(anonymous namespace)::ThreadFunc()
#51 0x7fea4d718184 start_thread
#52 0x7fea39da437d clone

I think I need help finding the root cause of these errors.
After some investigation, the problem appears to be that these utility
processes are never having their IPC Channel connected.
Owner: roc...@chromium.org
Status: Assigned (was: Available)
This is a manifestation of two problems:

1. "exe:chrome" != "exe:content_browser"

In a mash environemnt, the browser process is "exe:chrome", but because of the complexity of content layering + service manager identity, everything else calls it "exe:content_browser".

Child processes don't allow anyone to connect to their IPC Channel unless they're named "exe:content_browser".


2. Mash doesn't use an embedded ServiceManager

Content relies on its embedder providing a manifest overlay to expose additional capabilities. Chrome provides such an overlay, and the mojom::ImageDecoder interface is exposed by it.

Overlays only work with content's embedded ServiceManager, but mash (and mojo_runner for developers) uses a standalone ServiceManager.



I've kicked around a few ideas for solving these problems, but I'm not happy with any of them yet.
Project Member

Comment 6 by bugdroid1@chromium.org, Oct 7 2016

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

commit 3216b12377127f215e8c57a4b835bc6564506119
Author: rockot <rockot@chromium.org>
Date: Fri Oct 07 06:02:24 2016

Mash: Replaces "exe:chrome" with "service:content_browser"

No more references to exe:chrome, instead anyone wanting browser
interfaces connects to service:content_browser, which is consistent
with the rest of the universe.

ServiceManager and Catalog have some control interfaces added to
override path resolution for executables and manifests. MashRunner
uses this to direct resolution of "exe:chrome_mash" and
"service:content_browser" accordingly, as well as to resolve
content process manifests to chrome's/mash's overlayed versions
on disk.

Also changes the service_manifest GN template to support overlays.
This makes it easy to reuse the existing overlay metadata with
standalone ServiceManager, as well as to layer multiple overlays
(e.g. content_browser + chrome_content_browser + chrome_mash_content_browser).

Adds a browser manifest overlay specifically for Mash, which is
applied on top of Chrome's own overlay.

BUG= 646077 
TEST=chrome --mash seems to "work", can set wallpaper, browse cat photos, run task_viewer, etc

Review-Url: https://codereview.chromium.org/2389133008
Cr-Commit-Position: refs/heads/master@{#423803}

[modify] https://crrev.com/3216b12377127f215e8c57a4b835bc6564506119/ash/common/system/tray/system_tray_controller.cc
[modify] https://crrev.com/3216b12377127f215e8c57a4b835bc6564506119/ash/mus/app_list_presenter_mus.cc
[modify] https://crrev.com/3216b12377127f215e8c57a4b835bc6564506119/ash/mus/keyboard_ui_mus.cc
[modify] https://crrev.com/3216b12377127f215e8c57a4b835bc6564506119/ash/mus/manifest.json
[modify] https://crrev.com/3216b12377127f215e8c57a4b835bc6564506119/ash/mus/wallpaper_delegate_mus.cc
[modify] https://crrev.com/3216b12377127f215e8c57a4b835bc6564506119/chrome/BUILD.gn
[modify] https://crrev.com/3216b12377127f215e8c57a4b835bc6564506119/chrome/app/BUILD.gn
[modify] https://crrev.com/3216b12377127f215e8c57a4b835bc6564506119/chrome/app/mash/BUILD.gn
[modify] https://crrev.com/3216b12377127f215e8c57a4b835bc6564506119/chrome/app/mash/DEPS
[add] https://crrev.com/3216b12377127f215e8c57a4b835bc6564506119/chrome/app/mash/chrome_mash_content_browser_manifest_overlay.json
[modify] https://crrev.com/3216b12377127f215e8c57a4b835bc6564506119/chrome/app/mash/chrome_mash_manifest.json
[modify] https://crrev.com/3216b12377127f215e8c57a4b835bc6564506119/chrome/app/mash/mash_runner.cc
[delete] https://crrev.com/b69d3d2ec0d8bd333157dc33f5e1da1eaf76e5fb/chrome/app/mojo/OWNERS
[delete] https://crrev.com/b69d3d2ec0d8bd333157dc33f5e1da1eaf76e5fb/chrome/app/mojo/chrome_manifest.json
[delete] https://crrev.com/b69d3d2ec0d8bd333157dc33f5e1da1eaf76e5fb/chrome/app/mojo/chrome_renderer_manifest.json
[modify] https://crrev.com/3216b12377127f215e8c57a4b835bc6564506119/chrome/browser/browser_resources.grd
[modify] https://crrev.com/3216b12377127f215e8c57a4b835bc6564506119/chrome/browser/chrome_content_browser_client.cc
[modify] https://crrev.com/3216b12377127f215e8c57a4b835bc6564506119/chrome/browser/chrome_content_browser_manifest_overlay.json
[add] https://crrev.com/3216b12377127f215e8c57a4b835bc6564506119/chrome/browser/chrome_content_renderer_manifest_overlay.json
[modify] https://crrev.com/3216b12377127f215e8c57a4b835bc6564506119/chrome/test/BUILD.gn
[modify] https://crrev.com/3216b12377127f215e8c57a4b835bc6564506119/chrome/test/base/mojo_test_connector.cc
[modify] https://crrev.com/3216b12377127f215e8c57a4b835bc6564506119/mash/app_driver/app_driver.cc
[modify] https://crrev.com/3216b12377127f215e8c57a4b835bc6564506119/mash/session/session.cc
[modify] https://crrev.com/3216b12377127f215e8c57a4b835bc6564506119/services/catalog/catalog.cc
[modify] https://crrev.com/3216b12377127f215e8c57a4b835bc6564506119/services/catalog/catalog.h
[modify] https://crrev.com/3216b12377127f215e8c57a4b835bc6564506119/services/catalog/manifest.json
[modify] https://crrev.com/3216b12377127f215e8c57a4b835bc6564506119/services/catalog/public/interfaces/BUILD.gn
[modify] https://crrev.com/3216b12377127f215e8c57a4b835bc6564506119/services/catalog/public/interfaces/catalog.mojom
[modify] https://crrev.com/3216b12377127f215e8c57a4b835bc6564506119/services/catalog/reader.cc
[modify] https://crrev.com/3216b12377127f215e8c57a4b835bc6564506119/services/catalog/reader.h
[modify] https://crrev.com/3216b12377127f215e8c57a4b835bc6564506119/services/shell/manifest.json
[modify] https://crrev.com/3216b12377127f215e8c57a4b835bc6564506119/services/shell/public/service_manifest.gni
[modify] https://crrev.com/3216b12377127f215e8c57a4b835bc6564506119/services/shell/public/tools/manifest/manifest_collator.py
[modify] https://crrev.com/3216b12377127f215e8c57a4b835bc6564506119/services/shell/service_manager.cc

Status: Fixed (was: Assigned)

Comment 8 by dchan@google.com, Jan 21 2017

Labels: VerifyIn-57

Comment 9 by dchan@google.com, Mar 4 2017

Labels: VerifyIn-58
Labels: mash

Comment 11 by dchan@google.com, Apr 17 2017

Labels: VerifyIn-59
Status: Verified (was: Fixed)

Sign in to add a comment