Posts

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 0...

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 0...

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...

chromium : extensions RendererStartupHelper InitializeProcess back trace

#2 0x561c5ce30032 extensions::RendererStartupHelper::InitializeProcess() #3 0x561c5ce2f331 extensions::RendererStartupHelper::Observe() #4 0x7fe6def2a33f content::NotificationServiceImpl::Notify() #5 0x7fe6df12ebac content::RenderProcessHostImpl::OnProcessLaunched() #6 0x7fe6de83aebc content::ChildProcessLauncher::Notify() #7 0x7fe6de83da40 content::internal::ChildProcessLauncherHelper::PostLaunchOnClientThread() #8 0x7fe6de83e529 _ZN4base8internal13FunctorTraitsIMN7content8internal26ChildProcessLauncherHelperEFvNS4_7ProcessEiEvE6InvokeI13scoped_refptrIS4_EJS5_iEEEvS7_OT_DpOT0_ #9 0x7fe6de83e43a _ZN4base8internal12InvokeHelperILb0EvE8MakeItSoIMN7content8internal26ChildProcessLauncherHelperEFvNS6_7ProcessEiEJ13scoped_refptrIS6_ES7_iEEEvOT_DpOT0_ #10 0x7fe6de83e3a3 _ZN4base8internal7InvokerINS0_9BindStateIMN7content8internal26ChildProcessLauncherHelperEFvNS5_7ProcessEiEJ13scoped_refptrIS5_ENS0_13PassedWrapperIS6_EEiEEEFvvEE7RunImplIS8_NSt3__15tupleIJSA_SC_iEEEJLm0ELm1ELm2EEEEvOT_OT0_NSH_...

chromium : extensions::Extension construction back trace in Browser process

#2 0x55aaedfdafa6 extensions::Extension::Create() #3 0x55aaedfdaf22 extensions::Extension::Create() #4 0x55aaeec372eb extensions::ComponentLoader::CreateExtension() #5 0x55aaeec34321 extensions::ComponentLoader::Load() #6 0x55aaeec34100 extensions::ComponentLoader::LoadAll() #7 0x55aaeecc028c ExtensionService::Init() #8 0x55aaeecffa72 extensions::ExtensionSystemImpl::Shared::Init() #9 0x55aaeed00452 extensions::ExtensionSystemImpl::InitForRegularProfile() #10 0x55aaec95317a ProfileManager::DoFinalInitForServices() #11 0x55aaec952fb3 ProfileManager::DoFinalInit() #12 0x55aaec954d53 ProfileManager::AddProfile() #13 0x55aaec9466b2 ProfileManager::CreateAndInitializeProfile() #14 0x55aaec946207 ProfileManager::GetProfile() #15 0x55aaf00ba618 GetStartupProfile() #16 0x55aaec4ca65f (anonymous namespace)::CreatePrimaryProfile() #17 0x55aaec4c8346 ChromeBrowserMainParts::PreMainMessageLoopRunImpl() #18 0x55aaec4c75ac ChromeBrowserMainParts::PreMainMessageLoopRun() #19 0x7f1d0223d1e4 content::B...

chromium : extensions::Extension construction back trace in Render process

extensions/renderer/dispatcher.cc extensions::Dispatcher receive ExtensionMsg_Loaded from extensions/browser/renderer_startup_helper.cc RendererStartupHelper::InitializeProcess // Loaded extensions. std::vector<ExtensionMsg_Loaded_Params> loaded_extensions; BrowserContext* renderer_context = process->GetBrowserContext(); const ExtensionSet& extensions = ExtensionRegistry::Get(browser_context_)->enabled_extensions(); for (const auto& ext : extensions) { // OnLoadedExtension should have already been called for the extension. DCHECK(base::ContainsKey(extension_process_map_, ext->id())); DCHECK(!base::ContainsKey(extension_process_map_[ext->id()], process)); if (!IsExtensionVisibleToContext(*ext, renderer_context)) continue; // TODO(kalman): Only include tab specific permissions for extension // processes, no other process needs it, so it's mildly wasteful. // I am not sure this is possible to know this...

nginx : set up http/https conf for your server(Ghost)

Let me use cluster.errong.win as a example. All you need to do is replace the server name and port. All reqest to cluster.errong.win will be proxyed by http://127.0.0.1:6666 http conf server { listen 80; listen [::]:80; server_name cluster.errong.win; root /home/errong_leng/www/cluster/system/nginx-root; location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; proxy_pass http://127.0.0.1:6666; } location ~ /.well-known { allow all; } client_max_body_size 50m; } enable http server to nginx ln -sf /home/errong_leng/www/cluster/system/files/cluster.errong.win.conf /etc/nginx/sites-available/cluster.errong.win.conf ln -sf /etc/nginx/sites-available/cluster.errong.win.conf /etc/nginx/sites-enabled/cluster.errong.win.conf Use Let's Encrypt Le...