| // Copyright 2023 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #import "ios/web/init/web_main_runner_impl.h" |
| |
| #import "base/check.h" |
| #import "base/i18n/icu_util.h" |
| #import "ios/web/init/web_main_loop.h" |
| #import "ios/web/public/init/ios_global_state.h" |
| #import "ios/web/public/navigation/url_schemes.h" |
| #import "ios/web/web_thread_impl.h" |
| #import "mojo/core/embedder/embedder.h" |
| #import "ui/base/ui_base_paths.h" |
| |
| namespace web { |
| |
| WebMainRunnerImpl::WebMainRunnerImpl() |
| : is_initialized_(false), |
| is_shutdown_(false), |
| completed_basic_startup_(false), |
| delegate_(nullptr) {} |
| |
| WebMainRunnerImpl::~WebMainRunnerImpl() { |
| if (is_initialized_ && !is_shutdown_) { |
| ShutDown(); |
| } |
| } |
| |
| int WebMainRunnerImpl::Initialize(WebMainParams params) { |
| //////////////////////////////////////////////////////////////////////// |
| // ContentMainRunnerImpl::Initialize() |
| // |
| is_initialized_ = true; |
| delegate_ = params.delegate; |
| |
| ios_global_state::CreateParams create_params; |
| create_params.install_at_exit_manager = params.register_exit_manager; |
| create_params.argc = params.argc; |
| create_params.argv = params.argv; |
| ios_global_state::Create(create_params); |
| web::WebThreadImpl::CreateTaskExecutor(); |
| |
| if (delegate_) { |
| delegate_->BasicStartupComplete(); |
| } |
| completed_basic_startup_ = true; |
| |
| mojo::core::Init(); |
| |
| // TODO(crbug.com/965894): Should we instead require that all embedders call |
| // SetWebClient()? |
| if (!GetWebClient()) { |
| SetWebClient(&empty_web_client_); |
| } |
| |
| RegisterWebSchemes(); |
| ui::RegisterPathProvider(); |
| |
| CHECK(base::i18n::InitializeICU()); |
| |
| //////////////////////////////////////////////////////////// |
| // BrowserMainRunnerImpl::Initialize() |
| |
| main_loop_.reset(new WebMainLoop()); |
| main_loop_->Init(); |
| main_loop_->EarlyInitialization(); |
| main_loop_->CreateMainMessageLoop(); |
| main_loop_->CreateStartupTasks(); |
| int result_code = main_loop_->GetResultCode(); |
| if (result_code > 0) { |
| return result_code; |
| } |
| |
| // Return -1 to indicate no early termination. |
| return -1; |
| } |
| |
| void WebMainRunnerImpl::ShutDown() { |
| //////////////////////////////////////////////////////////////////// |
| // BrowserMainRunner::Shutdown() |
| // |
| DCHECK(is_initialized_); |
| DCHECK(!is_shutdown_); |
| main_loop_->ShutdownThreadsAndCleanUp(); |
| main_loop_.reset(nullptr); |
| |
| //////////////////////////////////////////////////////////////////// |
| // ContentMainRunner::Shutdown() |
| // |
| if (delegate_) { |
| delegate_->ProcessExiting(); |
| } |
| |
| ios_global_state::DestroyAtExitManager(); |
| |
| delegate_ = nullptr; |
| is_shutdown_ = true; |
| } |
| |
| } // namespace web |