chromium : extensions, how a extension list on web store was installed to chrome

If you find a liked extension on chrome web store, you can install it just by simple click the "ADD TO CHROME" button.
addtochrome
Let's go deep into chromium codes, and see how it happened.
The key module is chrome.webstore, which a buildin JS object in chrome.
chrome/renderer/extensions/webstore_bindings.cc
chrome/renderer/extensions/webstore_bindings.h
chrome-install-extensions
 
WebstoreBindings::Install
TabHelper::DoInlineInstall
WebstoreInlineInstaller::BeginInstall
WebstoreStandaloneInstaller::ProceedWithInstallPrompt
ShowInstallUI
 
show install prompt dialog

WebstoreStandaloneInstaller::ProceedWithInstallPrompt
NavigationObserver::OnInstallPromptDone
ExtensionService::EnableExtension
ExtensionRegistrar::EnableExtension

chromium : extensions, how background scripts/page get loaded.

Summary

a generated background page such as
chrome-extension://ffdhgjkakefolmigapfdgbcneopmidbf/_generated_background_page.html
will be loaded soon afer extensions service init.
the content of background page is generated by GeneratedBackgroundPageJob.
specially for scheme "chrome-extension://"

GenerateBackgroundPageContents

#3 0x56110ab93b63 extensions::(anonymous namespace)::GeneratedBackgroundPageJob::GetData()
#4 0x7fb7125791e9 net::URLRequestSimpleJob::GetRefCountedData()
#5 0x7fb712578baf net::URLRequestSimpleJob::StartAsync()

extensions::CreateExtensionProtocolHandler

void ProfileIOData::SetUpJobFactoryDefaultsForBuilder(
    net::URLRequestContextBuilder* builder,
    content::URLRequestInterceptorScopedVector request_interceptors,
    std::unique_ptr<ProtocolHandlerRegistry::JobInterceptorFactory>
        protocol_handler_interceptor) const {
// NOTE(willchan): Keep these protocol handlers in sync with
// ProfileIOData::IsHandledProtocol().
#if BUILDFLAG(ENABLE_EXTENSIONS)
  DCHECK(extension_info_map_.get());
  // Check only for incognito (and not Chrome OS guest mode GUEST_PROFILE).
  bool is_incognito = profile_type() == Profile::INCOGNITO_PROFILE;
  builder->SetProtocolHandler(extensions::kExtensionScheme,
                              extensions::CreateExtensionProtocolHandler(
                                  is_incognito, extension_info_map_.get()));
#endif

GeneratedBackgroundPageJob

#2 0x55593de3c42e extensions::(anonymous namespace)::GeneratedBackgroundPageJob::GeneratedBackgroundPageJob()
#3 0x55593de3b4cd extensions::(anonymous namespace)::ExtensionProtocolHandler::MaybeCreateJob()
#4 0x7f0f359c0352 net::URLRequestJobFactoryImpl::MaybeCreateJobWithProtocolHandler()
#5 0x7f0f359ba13e net::URLRequestInterceptingJobFactory::MaybeCreateJobWithProtocolHandler()
#6 0x7f0f359ba13e net::URLRequestInterceptingJobFactory::MaybeCreateJobWithProtocolHandler()
#7 0x7f0f359ba13e net::URLRequestInterceptingJobFactory::MaybeCreateJobWithProtocolHandler()
#8 0x7f0f359ba13e net::URLRequestInterceptingJobFactory::MaybeCreateJobWithProtocolHandler()
#9 0x7f0f359ba13e net::URLRequestInterceptingJobFactory::MaybeCreateJobWithProtocolHandler()
#10 0x7f0f359ba13e net::URLRequestInterceptingJobFactory::MaybeCreateJobWithProtocolHandler()
#11 0x55593f4ea748 ProtocolHandlerRegistry::JobInterceptorFactory::MaybeCreateJobWithProtocolHandler()
#12 0x7f0f359c0c5f net::URLRequestJobManager::CreateJob()
#13 0x7f0f35981e78 net::URLRequest::BeforeRequestComplete()

LoadURL("chrome-extension://ffdhgjkakefolmigapfdgbcneopmidbf/_generated_background_page.html")

[20357:20357:0120/200335.076376:INFO:navigation_controller_impl.cc(659)]  url chrome-extension://ffdhgjkakefolmigapfdgbcneopmidbf/_generated_background_page.html
#2 0x7f4943d1ba52 content::NavigationControllerImpl::LoadURL()
#3 0x56433d6fdc98 extensions::ExtensionHost::LoadInitialURL()
#4 0x56433d6fce59 extensions::ExtensionHost::CreateRenderViewNow()
#5 0x56433d80b5ce extensions::SerialExtensionHostQueue::ProcessOneHost()

CreateBackgroundHostForExtensionLoad

#2 0x557dfb4320c8 extensions::SerialExtensionHostQueue::PostTask()
#3 0x557dfb432074 extensions::SerialExtensionHostQueue::Add()
#4 0x557dfb3f3ffd extensions::LoadMonitoringExtensionHostQueue::Add()
#5 0x557dfb323dae extensions::ExtensionHost::CreateRenderViewSoon()
#6 0x557dfb3fe434 extensions::ProcessManager::CreateBackgroundHost()
#7 0x557dfb40381e extensions::(anonymous namespace)::CreateBackgroundHostForExtensionLoad()
#8 0x557dfb3ff6ad extensions::ProcessManager::CreateStartupBackgroundHosts()
#9 0x557dfb3ff45f extensions::ProcessManager::MaybeCreateStartupBackgroundHosts()
#10 0x557dfb402520 extensions::ProcessManager::Observe()
#11 0x7fbea48e3558 content::NotificationServiceImpl::Notify()
#12 0x557dfeed50af ExtensionService::SetReadyAndNotifyListeners()
#13 0x557dfeed36a0 ExtensionService::Init()
#14 0x557dfef12dc2 extensions::ExtensionSystemImpl::Shared::Init()
#15 0x557dfef137a2 extensions::ExtensionSystemImpl::InitForRegularProfile()
#16 0x557dfcb664ba ProfileManager::DoFinalInitForServices()
#17 0x557dfcb662f3 ProfileManager::DoFinalInit()
#18 0x557dfcb68093 ProfileManager::AddProfile()
#19 0x557dfcb599f2 ProfileManager::CreateAndInitializeProfile()
#20 0x557dfcb59547 ProfileManager::GetProfile()
#21 0x557e002cda08 GetStartupProfile()
#22 0x557dfc6dd99f (anonymous namespace)::CreatePrimaryProfile()
#23 0x557dfc6db686 ChromeBrowserMainParts::PreMainMessageLoopRunImpl()
#24 0x557dfc6da8ec ChromeBrowserMainParts::PreMainMessageLoopRun()
#25 0x7fbea41181e4 content::BrowserMainLoop::PreMainMessageLoopRun()

chromium : extensions, how content scripts get executed

extensions::Dispatcher::RunScriptsAtDocumentEnd

#2 0x5595477272c3 extensions::Dispatcher::RunScriptsAtDocumentEnd()
#3 0x55954c42bb3c ChromeExtensionsRendererClient::RunScriptsAtDocumentEnd()
#4 0x55954c382721 ChromeContentRendererClient::RunScriptsAtDocumentEnd()
#5 0x7ff32f28b88c content::RenderFrameImpl::RunScriptsAtDocumentReady()
#6 0x7ff3226b9739 blink::LocalFrameClientImpl::RunScriptsAtDocumentReady()
#7 0x7ff322f6de36 blink::FrameLoader::FinishedParsing()
#8 0x7ff32239b40b blink::Document::FinishedParsing()
#9 0x7ff323a6a773 blink::HTMLConstructionSite::FinishedParsing()
#10 0x7ff323adf2d7 blink::HTMLTreeBuilder::Finished()
#11 0x7ff323a7e316 blink::HTMLDocumentParser::end()
#12 0x7ff323a74c7f blink::HTMLDocumentParser::AttemptToRunDeferredScriptsAndEnd()
#13 0x7ff323a749a6 blink::HTMLDocumentParser::PrepareToStopParsing()
#14 0x7ff323a7a9cc blink::HTMLDocumentParser::ProcessTokenizedChunkFromBackgroundParser()
#15 0x7ff323a7657d blink::HTMLDocumentParser::PumpPendingSpeculations()
#16 0x7ff323a75eea blink::HTMLDocumentParser::ResumeParsingAfterYield()
#17 0x7ff323a9e2ad blink::HTMLParserScheduler::ContinueParsing()

extensions::Dispatcher::RunScriptsAtDocumentIdle

#2 0x559547727403 extensions::Dispatcher::RunScriptsAtDocumentIdle()
#3 0x55954c42bb8c ChromeExtensionsRendererClient::RunScriptsAtDocumentIdle()
#4 0x55954c382751 ChromeContentRendererClient::RunScriptsAtDocumentIdle()
#5 0x7ff32f28bb0f content::RenderFrameImpl::RunScriptsAtDocumentIdle()
#6 0x7ff3226b9801 blink::LocalFrameClientImpl::RunScriptsAtDocumentIdle()
#7 0x7ff32238dcf3 blink::Document::CheckCompleted()
#8 0x7ff322f6de52 blink::FrameLoader::FinishedParsing()
#9 0x7ff32239b40b blink::Document::FinishedParsing()
#10 0x7ff323a6a773 blink::HTMLConstructionSite::FinishedParsing()
#11 0x7ff323adf2d7 blink::HTMLTreeBuilder::Finished()
#12 0x7ff323a7e316 blink::HTMLDocumentParser::end()
#13 0x7ff323a74c7f blink::HTMLDocumentParser::AttemptToRunDeferredScriptsAndEnd()
#14 0x7ff323a749a6 blink::HTMLDocumentParser::PrepareToStopParsing()
#15 0x7ff323a7a9cc blink::HTMLDocumentParser::ProcessTokenizedChunkFromBackgroundParser()
#16 0x7ff323a7657d blink::HTMLDocumentParser::PumpPendingSpeculations()
#17 0x7ff323a75eea blink::HTMLDocumentParser::ResumeParsingAfterYield()
#18 0x7ff323a9e2ad blink::HTMLParserScheduler::ContinueParsing()

#2 0x559547727403 extensions::Dispatcher::RunScriptsAtDocumentIdle()
#3 0x55954c42bb8c ChromeExtensionsRendererClient::RunScriptsAtDocumentIdle()
#4 0x55954c382751 ChromeContentRendererClient::RunScriptsAtDocumentIdle()
#5 0x7ff32f28bb0f content::RenderFrameImpl::RunScriptsAtDocumentIdle()
#6 0x7ff3226b9801 blink::LocalFrameClientImpl::RunScriptsAtDocumentIdle()
#7 0x7ff32238dcf3 blink::Document::CheckCompleted()
#8 0x7ff32237ce49 blink::Document::LoadEventDelayTimerFired()
#9 0x7ff321e243c1 blink::TaskRunnerTimer<>::Fired()
#10 0x7ff3203dac39 blink::TimerBase::RunInternal()

extensions::Dispatcher::RunScriptsAtDocumentStart

#2 0x559547727183 extensions::Dispatcher::RunScriptsAtDocumentStart()
#3 0x55954c42baec ChromeExtensionsRendererClient::RunScriptsAtDocumentStart()
#4 0x55954c3826f1 ChromeContentRendererClient::RunScriptsAtDocumentStart()
#5 0x7ff32f28a58f content::RenderFrameImpl::RunScriptsAtDocumentElementAvailable()
#6 0x7ff3226b9631 blink::LocalFrameClientImpl::RunScriptsAtDocumentElementAvailable()
#7 0x7ff322f74199 blink::FrameLoader::RunScriptsAtDocumentElementAvailable()
#8 0x7ff3228d47fa blink::HTMLHtmlElement::InsertedByParser()
#9 0x7ff323a68417 blink::HTMLConstructionSite::InsertHTMLHtmlStartTagBeforeHTML()
#10 0x7ff323ad9f86 blink::HTMLTreeBuilder::DefaultForBeforeHTML()
#11 0x7ff323ad3cd3 blink::HTMLTreeBuilder::ProcessEndOfFile()
#12 0x7ff323acdba8 blink::HTMLTreeBuilder::ProcessToken()
#13 0x7ff323acca3e blink::HTMLTreeBuilder::ConstructTree()
#14 0x7ff323a7c569 blink::HTMLDocumentParser::ConstructTreeFromHTMLToken()
#15 0x7ff323a7554f blink::HTMLDocumentParser::PumpTokenizer()
#16 0x7ff323a74a9e blink::HTMLDocumentParser::PumpTokenizerIfPossible()
#17 0x7ff323a7490b blink::HTMLDocumentParser::PrepareToStopParsing()
#18 0x7ff323a7e38f blink::HTMLDocumentParser::AttemptToEnd()
#19 0x7ff323a7ec09 blink::HTMLDocumentParser::Finish()
#20 0x7ff322f48a9f blink::DocumentLoader::FinishedLoading()
#21 0x7ff322f4bef7 blink::DocumentLoader::MaybeLoadEmpty()
#22 0x7ff322f4c0aa blink::DocumentLoader::StartLoading()
#23 0x7ff322f6cf3b blink::FrameLoader::Init()
#24 0x7ff32278e370 blink::LocalFrame::Init()
#25 0x7ff32283843b blink::WebLocalFrameImpl::InitializeCoreFrame()
#26 0x7ff322839643 blink::WebLocalFrameImpl::CreateChildFrame()
#27 0x7ff3226bc864 blink::LocalFrameClientImpl::CreateFrame()
#28 0x7ff3228d01ff blink::HTMLFrameOwnerElement::LoadOrRedirectSubframe()
#29 0x7ff3228cd834 blink::HTMLFrameElementBase::OpenURL()
#30 0x7ff3228ce314 blink::HTMLFrameElementBase::SetNameAndOpenURL()
#31 0x7ff3228ce4ce blink::HTMLFrameElementBase::DidNotifySubtreeInsertionsToDocument()
#32 0x7ff322358190 blink::ContainerNode::DidInsertNodeVector()
#33 0x7ff322358b63 blink::ContainerNode::AppendChild()
#34 0x7ff32245fe9a blink::Node::appendChild()
#35 0x7ff323537216 blink::NodeV8Internal::appendChildMethodForMainWorld()
#36 0x7ff323536ed7 blink::V8Node::appendChildMethodCallbackForMainWorld()
#37 0x7ff3244240f2 v8::internal::FunctionCallbackArguments::Call()
#38 0x7ff32451f0a5 v8::internal::(anonymous namespace)::HandleApiCallHelper<>()
#39 0x7ff32451d199 v8::internal::Builtin_Impl_HandleApiCall()
#40 0x7ff32451cbdd v8::internal::Builtin_HandleApiCall()

chromium : how extension install prompt dialog get showed

installerprompt
 
#2 0x5589ca9aaeba ExtensionInstallPrompt::ShowDialog()
#3 0x5589ca9aac7c ExtensionInstallPrompt::ShowDialog()
#4 0x5589ca9aa96e ExtensionInstallPrompt::ShowDialog()
#5 0x5589cb168cca extensions::WebstorePrivateBeginInstallWithManifest3Function::OnWebstoreParseSuccess()
#6 0x5589cab3821b extensions::WebstoreInstallHelper::ReportResultsIfComplete()
#7 0x5589cab37efd extensions::WebstoreInstallHelper::OnFetchComplete()
#8 0x5589c85da07b chrome::BitmapFetcher::OnImageDecoded()
#9 0x5589c85dc1d1 ImageDecoder::OnDecodeImageSucceeded()
#10 0x5589c7303c4f _ZN4base8internal13FunctorTraitsIMN10extensions8internal26ScopedCallbackRunnerHelperIFvRKNSt3__16vectorIhNS5_9allocatorIhEEEEN6device5mojom18SerialReceiveErrorEEEEFvSB_SE_EvE6InvokeIPSG_JS9_SE_EEEvSI_OT_DpOT0_
#11 0x5589c7303baa _ZN4base8internal12InvokeHelperILb0EvE8MakeItSoIMN10extensions8internal26ScopedCallbackRunnerHelperIFvRKNSt3__16vectorIhNS7_9allocatorIhEEEEN6device5mojom18SerialReceiveErrorEEEEFvSD_SG_EJPSI_SB_SG_EEEvOT_DpOT0_
#12 0x5589c85dda95 _ZN4base8internal7InvokerINS0_9BindStateIM22SiteDataCountingHelperFvRKNSt3__13setI4GURLNS4_4lessIS6_EENS4_9allocatorIS6_EEEEN7storage11StorageTypeEEJNS0_17UnretainedWrapperIS3_EEEEEFvSD_SF_EE7RunImplIRKSH_RKNS4_5tupleIJSJ_EEEJLm0EEEEvOT_OT0_NS4_16integer_sequenceImJXspT1_EEEESD_OSF_
#13 0x5589c85dda13 _ZN4base8internal7InvokerINS0_9BindStateIM22SiteDataCountingHelperFvRKNSt3__13setI4GURLNS4_4lessIS6_EENS4_9allocatorIS6_EEEEN7storage11StorageTypeEEJNS0_17UnretainedWrapperIS3_EEEEEFvSD_SF_EE3RunEPNS0_13BindStateBaseESD_SF_
#14 0x5589c8300fb6 _ZNKR4base17RepeatingCallbackIFvRKNS_8FilePathEN30DownloadPathReservationTracker22FilenameConflictActionEEE3RunES3_S5_
#15 0x5589c85db8cc (anonymous namespace)::OnDecodeImageDone()
#16 0x5589c85dddd9 _ZN4base8internal13FunctorTraitsIPFvNS_17RepeatingCallbackIFviEEENS2_IFvRK8SkBitmapiEEEiS7_EvE6InvokeIJRKS4_RKS9_RKiS7_EEEvSB_DpOT_
#17 0x5589c85ddd50 _ZN4base8internal12InvokeHelperILb0EvE8MakeItSoIRKPFvNS_17RepeatingCallbackIFviEEENS4_IFvRK8SkBitmapiEEEiS9_EJRKS6_RKSB_RKiS9_EEEvOT_DpOT0_
#18 0x5589c85ddcd9 _ZN4base8internal7InvokerINS0_9BindStateIPFvNS_17RepeatingCallbackIFviEEENS3_IFvRK8SkBitmapiEEEiS8_EJS5_SA_iEEEFvS8_EE7RunImplIRKSC_RKNSt3__15tupleIJS5_SA_iEEEJLm0ELm1ELm2EEEEvOT_OT0_NSJ_16integer_sequenceImJXspT1_EEEES8_
#19 0x5589c85ddb94 _ZN4base8internal7InvokerINS0_9BindStateIPFvNS_17RepeatingCallbackIFviEEENS3_IFvRK8SkBitmapiEEEiS8_EJS5_SA_iEEEFvS8_EE3RunEPNS0_13BindStateBaseES8_
#20 0x5589c6a440a1 _ZNO4base12OnceCallbackIFvRKN13safe_browsing22ArchiveAnalyzerResultsEEE3RunES4_
#21 0x5589c6f7c660 _ZN4base8internal13FunctorTraitsINS_12OnceCallbackIFvRKN13update_client12CrxInstaller6ResultEEEEvE6InvokeIS9_JS5_EEEvOT_DpOT0_
#22 0x5589c6f7c55d _ZN4base8internal12InvokeHelperILb0EvE8MakeItSoINS_12OnceCallbackIFvRKN13update_client12CrxInstaller6ResultEEEEJS7_EEEvOT_DpOT0_
#23 0x5589c6f7c520 _ZN4base8internal7InvokerINS0_9BindStateINS_12OnceCallbackIFvRKN13update_client12CrxInstaller6ResultEEEEJS6_EEEFvvEE7RunImplISA_NSt3__15tupleIJS6_EEEJLm0EEEEvOT_OT0_NSF_16integer_sequenceImJXspT1_EEEE
#24 0x5589c6f7c479 _ZN4base8internal7InvokerINS0_9BindStateINS_12OnceCallbackIFvRKN13update_client12CrxInstaller6ResultEEEEJS6_EEEFvvEE7RunOnceEPNS0_13BindStateBaseE
#25 0x7f636ffcc061 _ZNO4base12OnceCallbackIFvvEE3RunEv
#26 0x7f63700261ca base::debug::TaskAnnotator::RunTask()
#27 0x7f63700c7105 base::internal::IncomingTaskQueue::RunTask()
#28 0x7f63700d005a base::MessageLoop::RunTask()
#29 0x7f63700d0306 base::MessageLoop::DeferOrRunPendingTask()
#30 0x7f63700d0650 base::MessageLoop::DoWork()
#31 0x7f63700d3cfc base::MessagePumpGlib::HandleDispatch()
#32 0x7f63700d44a1 base::(anonymous namespace)::WorkSourceDispatch()
#33 0x7f6358d36e04 g_main_context_dispatch
#34 0x7f6358d37048 <unknown>
#35 0x7f6358d370ec g_main_context_iteration
#36 0x7f63700d3dff base::MessagePumpGlib::Run()
#37 0x7f63700cf7dc base::MessageLoop::Run()
#38 0x7f637017c79b base::RunLoop::Run()
#39 0x5589c81d6e4d ChromeBrowserMainParts::MainMessageLoopRun()
#40 0x7f636a340b56 content::BrowserMainLoop::RunMainMessageLoopParts()
#41 0x7f636a34a95f content::BrowserMainRunnerImpl::Run()
#42 0x7f636a3346ab content::BrowserMain()
#43 0x7f636bf029b8 content::RunNamedProcessTypeMain()
#44 0x7f636bf055aa content::ContentMainRunnerImpl::Run()
#45 0x7f636befba6d content::ContentServiceManagerMainDelegate::RunEmbedderProcess()
#46 0x7f637083d89d service_manager::Main()
#47 0x7f636bf017ff content::ContentMain()
#48 0x5589c69b623e ChromeMain
#49 0x5589c69b6152 main
#50 0x7f635721cf45 __libc_start_main
#51 0x5589c69b602a _start
 

#2 0x56342b8ac561 extensions::WebstoreInstallHelper::Start()
#3 0x56342bedc79e extensions::WebstorePrivateBeginInstallWithManifest3Function::Run()
#4 0x563427b821cd ExtensionFunction::RunWithValidation()
#5 0x563427b894d0 extensions::ExtensionFunctionDispatcher::DispatchWithCallbackInternal()
#6 0x563427b884e4 extensions::ExtensionFunctionDispatcher::Dispatch()
#7 0x563427bf08ec extensions::ExtensionWebContentsObserver::OnRequest()
#8 0x563427b05fd2 _ZN3IPC20DispatchToMethodImplIN10extensions21AppWindowContentsImplEMS2_FvPN7content15RenderFrameHostERKNSt3__16vectorINS1_15DraggableRegionENS6_9allocatorIS8_EEEEES4_NS6_5tupleIJSB_EEEJLm0EEEEvPT_T0_PT1_OT2_NS6_16integer_sequenceImJXspT3_EEEE
#9 0x563427b05f00 _ZN3IPC16DispatchToMethodIN10extensions21AppWindowContentsImplEN7content15RenderFrameHostEJRKNSt3__16vectorINS1_15DraggableRegionENS5_9allocatorIS7_EEEEENS5_5tupleIJSA_EEEEENS5_9enable_ifIXeqsZT1_sr3std10tuple_sizeINS5_5decayIT2_E4typeEEE5valueEvE4typeEPT_MSM_FvPT0_DpT1_ESP_OSH_
#10 0x563427bf1021 _ZN3IPC8MessageTI29ExtensionHostMsg_Request_MetaNSt3__15tupleIJ31ExtensionHostMsg_Request_ParamsEEEvE8DispatchIN10extensions28ExtensionWebContentsObserverES9_N7content15RenderFrameHostEMS9_FvPSB_RKS4_EEEbPKNS_7MessageEPT_PT0_PT1_T2_
#11 0x563427bf085c extensions::ExtensionWebContentsObserver::OnMessageReceived()
#12 0x56342b60544a extensions::ChromeExtensionWebContentsObserver::OnMessageReceived()
#13 0x7f0fbfc2b229 content::WebContentsImpl::OnMessageReceived()
#14 0x7f0fbf38664a content::RenderFrameHostImpl::OnMessageReceived()
#15 0x7f0fbf914861 content::RenderProcessHostImpl::OnMessageReceived()
#16 0x7f0fc30edbc8 IPC::ChannelProxy::Context::OnDispatchMessage()
#17 0x7f0fc30f403f _ZN4base8internal13FunctorTraitsIMN3IPC12ChannelProxy7ContextEFvRKNS2_7MessageEEvE6InvokeIRK13scoped_refptrIS4_EJS7_EEEvS9_OT_DpOT0_
#18 0x7f0fc30f3f9f _ZN4base8internal12InvokeHelperILb0EvE8MakeItSoIRKMN3IPC12ChannelProxy7ContextEFvRKNS4_7MessageEEJRK13scoped_refptrIS6_ES9_EEEvOT_DpOT0_
#19 0x7f0fc30f3f2d _ZN4base8internal7InvokerINS0_9BindStateIMN3IPC12ChannelProxy7ContextEFvRKNS3_7MessageEEJ13scoped_refptrIS5_ES6_EEEFvvEE7RunImplIRKSA_RKNSt3__15tupleIJSC_S6_EEEJLm0ELm1EEEEvOT_OT0_NSJ_16integer_sequenceImJXspT1_EEEE
#20 0x7f0fc30f3e3c _ZN4base8internal7InvokerINS0_9BindStateIMN3IPC12ChannelProxy7ContextEFvRKNS3_7MessageEEJ13scoped_refptrIS5_ES6_EEEFvvEE3RunEPNS0_13BindStateBaseE
#21 0x7f0fc4bd9061 _ZNO4base12OnceCallbackIFvvEE3RunEv
#22 0x7f0fc4c331ca base::debug::TaskAnnotator::RunTask()
#23 0x7f0fc4cd4105 base::internal::IncomingTaskQueue::RunTask()
#24 0x7f0fc4cdd05a base::MessageLoop::RunTask()
#25 0x7f0fc4cdd306 base::MessageLoop::DeferOrRunPendingTask()
#26 0x7f0fc4cdd650 base::MessageLoop::DoWork()
#27 0x7f0fc4ce0cfc base::MessagePumpGlib::HandleDispatch()
#28 0x7f0fc4ce14a1 base::(anonymous namespace)::WorkSourceDispatch()
#29 0x7f0fad943e04 g_main_context_dispatch
#30 0x7f0fad944048 <unknown>
#31 0x7f0fad9440ec g_main_context_iteration
#32 0x7f0fc4ce0dff base::MessagePumpGlib::Run()
#33 0x7f0fc4cdc7dc base::MessageLoop::Run()
#34 0x7f0fc4d8979b base::RunLoop::Run()
#35 0x563428f4be4d ChromeBrowserMainParts::MainMessageLoopRun()
#36 0x7f0fbef4db56 content::BrowserMainLoop::RunMainMessageLoopParts()
#37 0x7f0fbef5795f content::BrowserMainRunnerImpl::Run()
#38 0x7f0fbef416ab content::BrowserMain()
#39 0x7f0fc0b0f9b8 content::RunNamedProcessTypeMain()
#40 0x7f0fc0b125aa content::ContentMainRunnerImpl::Run()
#41 0x7f0fc0b08a6d content::ContentServiceManagerMainDelegate::RunEmbedderProcess()
#42 0x7f0fc544a89d service_manager::Main()
#43 0x7f0fc0b0e7ff content::ContentMain()
#44 0x56342772b23e ChromeMain
#45 0x56342772b152 main
#46 0x7f0fabe29f45 __libc_start_main
#47 0x56342772b02a _start

chromium : extensions load back trace

#2 0x55c01d36db9d extensions::ExtensionRegistry::AddEnabled()
#3 0x55c01d3696cf extensions::ExtensionRegistrar::AddExtension()
#4 0x55c020eda0f6 ExtensionService::AddExtension()
#5 0x55c020f7e344 extensions::InstalledLoader::Load()
#6 0x55c020f7f31b extensions::InstalledLoader::LoadAllExtensions()
#7 0x55c020ed12e5 ExtensionService::Init()
#8 0x55c020f10a82 extensions::ExtensionSystemImpl::Shared::Init()
#9 0x55c020f11462 extensions::ExtensionSystemImpl::InitForRegularProfile()
#10 0x55c01eb6419a ProfileManager::DoFinalInitForServices()
#11 0x55c01eb63fd3 ProfileManager::DoFinalInit()
#12 0x55c01eb65d73 ProfileManager::AddProfile()
#13 0x55c01eb576d2 ProfileManager::CreateAndInitializeProfile()
#14 0x55c01eb57227 ProfileManager::GetProfile()
#15 0x55c0222cb5f8 GetStartupProfile()
#16 0x55c01e6db67f (anonymous namespace)::CreatePrimaryProfile()
#17 0x55c01e6d9366 ChromeBrowserMainParts::PreMainMessageLoopRunImpl()
#18 0x55c01e6d85cc ChromeBrowserMainParts::PreMainMessageLoopRun()
#19 0x7fccb0fb41e4 content::BrowserMainLoop::PreMainMessageLoopRun()
#20 0x7fccafe9bcfd _ZN4base8internal13FunctorTraitsIMN7content14NetworkContext11DiskCheckerEFvvEvE6InvokeIPS4_JEEEvS6_OT_DpOT0_
#21 0x7fccafe9bc74 _ZN4base8internal12InvokeHelperILb0EvE8MakeItSoIMN7content14NetworkContextEFvvEJPS5_EEEvOT_DpOT0_
#22 0x7fccafe9bc25 _ZN4base8internal7InvokerINS0_9BindStateIMN7content14NetworkContext11DiskCheckerEFvvEJNS0_17UnretainedWrapperIS5_EEEEEFvvEE7RunImplIRKS7_RKNSt3__15tupleIJS9_EEEJLm0EEEEvOT_OT0_NSG_16integer_sequenceImJXspT1_EEEE
#23 0x7fccafea19dc _ZN4base8internal7InvokerINS0_9BindStateIMN7content14NetworkContext11DiskCheckerEFvvEJNS0_17UnretainedWrapperIS5_EEEEEFvvEE3RunEPNS0_13BindStateBaseE
#24 0x7fccafe5c50d _ZNKR4base17RepeatingCallbackIFvvEE3RunEv
#25 0x7fccb1c19edd content::StartupTaskRunner::RunAllTasksNow()
#26 0x7fccb0fafa67 content::BrowserMainLoop::CreateStartupTasks()
#27 0x7fccb0fbe60d content::BrowserMainRunnerImpl::Initialize()
#28 0x7fccb0fa8644 content::BrowserMain()
#29 0x7fccb2b769b8 content::RunNamedProcessTypeMain()
#30 0x7fccb2b795aa content::ContentMainRunnerImpl::Run()
#31 0x7fccb2b6fa6d content::ContentServiceManagerMainDelegate::RunEmbedderProcess()
#32 0x7fccb74b189d service_manager::Main()
#33 0x7fccb2b757ff content::ContentMain()
#34 0x55c01cebb23e ChromeMain
#35 0x55c01cebb152 main
#36 0x7fcc9de90f45 __libc_start_main

chromium : How KeyedService was created

DependencyManager::CreateContextServices

void DependencyManager::CreateContextServices(base::SupportsUserData* context,
                                              bool is_testing_context) {
  MarkContextLive(context);

  std::vector<DependencyNode*> construction_order;
  if (!dependency_graph_.GetConstructionOrder(&construction_order)) {
    NOTREACHED();
  }

#ifndef NDEBUG
  DumpContextDependencies(context);
#endif

  for (auto* dependency_node : construction_order) {
    KeyedServiceBaseFactory* factory =
        static_cast<KeyedServiceBaseFactory*>(dependency_node);
    if (is_testing_context && factory->ServiceIsNULLWhileTesting() &&
        !factory->HasTestingFactory(context)) {
      factory->SetEmptyTestingFactory(context);
    } else if (factory->ServiceIsCreatedWithContext()) {
      factory->CreateServiceNow(context);
    }
  }
}
 
#14 0x7f08ec0395de DependencyManager::CreateContextServices()
#15 0x7f08eb2b2410 BrowserContextDependencyManager::DoCreateBrowserContextServices()
#16 0x7f08eb2b22df BrowserContextDependencyManager::CreateBrowserContextServices()
#17 0x55aa9c98a995 ProfileImpl::OnLocaleReady()
#18 0x55aa9c986389 ProfileImpl::OnPrefsLoaded()
#19 0x55aa9c98605d ProfileImpl::ProfileImpl()
#20 0x55aa9c982084 Profile::CreateProfile()
#21 0x55aa9c9f7887 ProfileManager::CreateProfileHelper()
#22 0x55aa9c9e96ba ProfileManager::CreateAndInitializeProfile()
#23 0x55aa9c9e9237 ProfileManager::GetProfile()
#24 0x55aaa015d608 GetStartupProfile()
#25 0x55aa9c56d68f (anonymous namespace)::CreatePrimaryProfile()
#26 0x55aa9c56b376 ChromeBrowserMainParts::PreMainMessageLoopRunImpl()
#27 0x55aa9c56a5dc ChromeBrowserMainParts::PreMainMessageLoopRun()
#28 0x7f08f12591e4 content::BrowserMainLoop::PreMainMessageLoopRun()
#29 0x7f08f0140cfd _ZN4base8internal13FunctorTraitsIMN7content14NetworkContext11DiskCheckerEFvvEvE6InvokeIPS4_JEEEvS6_OT_DpOT0_
#30 0x7f08f0140c74 _ZN4base8internal12InvokeHelperILb0EvE8MakeItSoIMN7content14NetworkContextEFvvEJPS5_EEEvOT_DpOT0_
#31 0x7f08f0140c25 _ZN4base8internal7InvokerINS0_9BindStateIMN7content14NetworkContext11DiskCheckerEFvvEJNS0_17UnretainedWrapperIS5_EEEEEFvvEE7RunImplIRKS7_RKNSt3__15tupleIJS9_EEEJLm0EEEEvOT_OT0_NSG_16integer_sequenceImJXspT1_EEEE
#32 0x7f08f01469dc _ZN4base8internal7InvokerINS0_9BindStateIMN7content14NetworkContext11DiskCheckerEFvvEJNS0_17UnretainedWrapperIS5_EEEEEFvvEE3RunEPNS0_13BindStateBaseE
#33 0x7f08f010150d _ZNKR4base17RepeatingCallbackIFvvEE3RunEv
#34 0x7f08f1ebeedd content::StartupTaskRunner::RunAllTasksNow()
#35 0x7f08f1254a67 content::BrowserMainLoop::CreateStartupTasks()
#36 0x7f08f126360d content::BrowserMainRunnerImpl::Initialize()
#37 0x7f08f124d644 content::BrowserMain()
#38 0x7f08f2e1b9b8 content::RunNamedProcessTypeMain()
#39 0x7f08f2e1e5aa content::ContentMainRunnerImpl::Run()
#40 0x7f08f2e14a6d content::ContentServiceManagerMainDelegate::RunEmbedderProcess()
#41 0x7f08f775689d service_manager::Main()
#42 0x7f08f2e1a7ff content::ContentMain()
#43 0x55aa9ad4d23e ChromeMain
#44 0x55aa9ad4d152 main
#45 0x7f08de135f45 __libc_start_main
#46 0x55aa9ad4d02a _start

BuildServiceInstanceFor AppShortcutManager

#9 0x55aa9b11a513 AppShortcutManager::AppShortcutManager()
#10 0x55aa9b11be82 AppShortcutManagerFactory::BuildServiceInstanceFor()
#11 0x7f08eb2b605a BrowserContextKeyedServiceFactory::BuildServiceInstanceFor()
#12 0x7f08ec03d727 KeyedServiceFactory::GetServiceForContext()
#13 0x7f08ec03ea52 KeyedServiceFactory::CreateServiceNow()

AppShortcutManagerFactory::GetInstance

#2 0x7f5a9625a2d6 DependencyGraph::AddNode()
#3 0x7f5a96269e3c DependencyManager::AddComponent()
#4 0x7f5a9626cdab KeyedServiceBaseFactory::KeyedServiceBaseFactory()
#5 0x7f5a9626d88a KeyedServiceFactory::KeyedServiceFactory()
#6 0x7f5a954e6d7a BrowserContextKeyedServiceFactory::BrowserContextKeyedServiceFactory()
#7 0x5635734e7de3 AppShortcutManagerFactory::AppShortcutManagerFactory()
#8 0x5635734e7fc0 base::DefaultSingletonTraits<>::New()
#9 0x5635734e7f36 base::Singleton<>::get()
#10 0x5635734e7da9 AppShortcutManagerFactory::GetInstance()
#11 0x5635734e3f92 chrome_apps::EnsureBrowserContextKeyedServiceFactoriesBuilt()
#12 0x563574ccc9f8 ChromeBrowserMainExtraPartsProfiles::EnsureBrowserContextKeyedServiceFactoriesBuilt()
#13 0x563574cccdf1 ChromeBrowserMainExtraPartsProfiles::PreProfileInit()
#14 0x5635749387b5 ChromeBrowserMainParts::PreProfileInit()
#15 0x56357492ef9c ChromeBrowserMainPartsLinux::PreProfileInit()
#16 0x5635749371e0 ChromeBrowserMainParts::PreMainMessageLoopRunImpl()
#17 0x5635749365dc ChromeBrowserMainParts::PreMainMessageLoopRun()
#18 0x7f5a9b48a1e4 content::BrowserMainLoop::PreMainMessageLoopRun()

Summary

each KeyedService, such as AppShortcutManager, has a KeyedServiceFactory which are derived from KeyedServiceBaseFactory.
each KeyedServiceFactory must implement BuildServiceInstanceFor interface.
When new instance for each KeyedServiceFactory, it will be added to DependencyManager as a component.
Chromium will call DependencyManager::CreateContextServices at the initial state.
Then traverse all node in DependencyGraph and call each BuildServiceInstanceFor to create the real KeyedService.

chromium : extensions UI(chrome://extensions) create back trace

#2 0x561c61ba4b95 (anonymous namespace)::GetWebUIFactoryFunction()
#3 0x561c61ba35b2 ChromeWebUIControllerFactory::GetWebUIType()
#4 0x561c61ba5962 ChromeWebUIControllerFactory::UseWebUIForURL()
#5 0x7fe6df4aa299 content::WebUIControllerFactoryRegistry::UseWebUIForURL()
#6 0x7fe6df4aa3f5 content::WebUIControllerFactoryRegistry::IsURLAcceptableForWebUI()
#7 0x7fe6df4b2147 content::WebUIImpl::OnWebUISend()
#8 0x7fe6df4b59ef _ZN3IPC20DispatchToMethodImplIN7content9WebUIImplEMS2_FvPNS1_15RenderFrameHostERK4GURLRKNSt3__112basic_stringIcNS8_11char_traitsIcEENS8_9allocatorIcEEEERKN4base9ListValueEES3_NS8_5tupleIJS5_SE_SI_EEEJLm0ELm1ELm2EEEEvPT_T0_PT1_OT2_NS8_16integer_sequenceImJXspT3_EEEE
#9 0x7fe6df4b58d0 _ZN3IPC16DispatchToMethodIN7content9WebUIImplENS1_15RenderFrameHostEJRK4GURLRKNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEERKN4base9ListValueEENS7_5tupleIJS4_SD_SH_EEEEENS7_9enable_ifIXeqsZT1_sr3std10tuple_sizeINS7_5decayIT2_E4typeEEE5valueEvE4typeEPT_MST_FvPT0_DpT1_ESW_OSO_
#10 0x7fe6df4b5780 _ZN3IPC8MessageTI27FrameHostMsg_WebUISend_MetaNSt3__15tupleIJ4GURLNS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEN4base9ListValueEEEEvE8DispatchIN7content9WebUIImplESH_NSG_15RenderFrameHostEMSH_FvPSI_RKS4_RKSA_RKSC_EEEbPKNS_7MessageEPT_PT0_PT1_T2_
#11 0x7fe6df4b207c content::WebUIImpl::OnMessageReceived()
#12 0x7fe6df43d18e content::WebContentsImpl::OnMessageReceived()
#13 0x7fe6deb9864a content::RenderFrameHostImpl::OnMessageReceived()
#14 0x7fe6df126861 content::RenderProcessHostImpl::OnMessageReceived()
#15 0x7fe6e28ffbc8 IPC::ChannelProxy::Context::OnDispatchMessage()
#16 0x7fe6e290603f _ZN4base8internal13FunctorTraitsIMN3IPC12ChannelProxy7ContextEFvRKNS2_7MessageEEvE6InvokeIRK13scoped_refptrIS4_EJS7_EEEvS9_OT_DpOT0_
#17 0x7fe6e2905f9f _ZN4base8internal12InvokeHelperILb0EvE8MakeItSoIRKMN3IPC12ChannelProxy7ContextEFvRKNS4_7MessageEEJRK13scoped_refptrIS6_ES9_EEEvOT_DpOT0_
#18 0x7fe6e2905f2d _ZN4base8internal7InvokerINS0_9BindStateIMN3IPC12ChannelProxy7ContextEFvRKNS3_7MessageEEJ13scoped_refptrIS5_ES6_EEEFvvEE7RunImplIRKSA_RKNSt3__15tupleIJSC_S6_EEEJLm0ELm1EEEEvOT_OT0_NSJ_16integer_sequenceImJXspT1_EEEE
#19 0x7fe6e2905e3c _ZN4base8internal7InvokerINS0_9BindStateIMN3IPC12ChannelProxy7ContextEFvRKNS3_7MessageEEJ13scoped_refptrIS5_ES6_EEEFvvEE3RunEPNS0_13BindStateBaseE
#20 0x7fe6e43eb061 _ZNO4base12OnceCallbackIFvvEE3RunEv
#21 0x7fe6e44451ca base::debug::TaskAnnotator::RunTask()
#22 0x7fe6e44e6105 base::internal::IncomingTaskQueue::RunTask()
#23 0x7fe6e44ef05a base::MessageLoop::RunTask()
#24 0x7fe6e44ef306 base::MessageLoop::DeferOrRunPendingTask()
#25 0x7fe6e44ef650 base::MessageLoop::DoWork()
#26 0x7fe6e44f2e36 base::MessagePumpGlib::Run()
#27 0x7fe6e44ee7dc base::MessageLoop::Run()
#28 0x7fe6e459b79b base::RunLoop::Run()
#29 0x561c5e0fad2d ChromeBrowserMainParts::MainMessageLoopRun()
#30 0x7fe6de75fb56 content::BrowserMainLoop::RunMainMessageLoopParts()
#31 0x7fe6de76995f content::BrowserMainRunnerImpl::Run()
#32 0x7fe6de7536ab content::BrowserMain()
#33 0x7fe6e03219b8 content::RunNamedProcessTypeMain()
#34 0x7fe6e03245aa content::ContentMainRunnerImpl::Run()
#35 0x7fe6e031aa6d content::ContentServiceManagerMainDelegate::RunEmbedderProcess()
#36 0x7fe6e4c5c89d service_manager::Main()
#37 0x7fe6e03207ff content::ContentMain()
#38 0x561c5c8da23e ChromeMain
#39 0x561c5c8da152 main
#40 0x7fe6cb63bf45 __libc_start_main
#41 0x561c5c8da02a _start

fixed: embedded-redis: Unable to run on macOS Sonoma

Issue you might see below error while trying to run embedded-redis for your testing on your macOS after you upgrade to Sonoma. java.la...