mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-25 09:00:22 +00:00
Ladybird: Abstract spawning helper processes into separate methods
This will let us use the same path discovery methods for WebContent, SQLServer, and any other helper processes we need to launch.
This commit is contained in:
parent
792258afe8
commit
3e6d790cf0
Notes:
sideshowbarker
2024-07-17 07:09:53 +09:00
Author: https://github.com/ADKaster Commit: https://github.com/SerenityOS/serenity/commit/3e6d790cf0 Pull-request: https://github.com/SerenityOS/serenity/pull/17272 Issue: https://github.com/SerenityOS/serenity/issues/17062 Reviewed-by: https://github.com/trflynn89 ✅
4 changed files with 56 additions and 6 deletions
|
@ -82,6 +82,7 @@ set(SOURCES
|
|||
${BROWSER_SOURCE_DIR}/History.cpp
|
||||
BrowserWindow.cpp
|
||||
ConsoleWidget.cpp
|
||||
HelperProcess.cpp
|
||||
InspectorWidget.cpp
|
||||
LocationEdit.cpp
|
||||
ModelTranslator.cpp
|
||||
|
|
35
Ladybird/HelperProcess.cpp
Normal file
35
Ladybird/HelperProcess.cpp
Normal file
|
@ -0,0 +1,35 @@
|
|||
/*
|
||||
* Copyright (c) 2023, Andrew Kaster <akaster@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#include "HelperProcess.h"
|
||||
#include "Utilities.h"
|
||||
#include <AK/String.h>
|
||||
#include <QCoreApplication>
|
||||
|
||||
ErrorOr<void> spawn_helper_process(StringView process_name, Span<StringView> arguments, Core::System::SearchInPath search_in_path, Optional<Span<StringView>> environment)
|
||||
{
|
||||
auto paths = TRY(get_paths_for_helper_process(process_name));
|
||||
VERIFY(!paths.is_empty());
|
||||
ErrorOr<void> result;
|
||||
for (auto const& path : paths) {
|
||||
arguments[0] = path.bytes_as_string_view();
|
||||
result = Core::System::exec(path, arguments, search_in_path, environment);
|
||||
if (!result.is_error())
|
||||
break;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
ErrorOr<Vector<String>> get_paths_for_helper_process(StringView process_name)
|
||||
{
|
||||
Vector<String> paths;
|
||||
TRY(paths.try_append(TRY(String::formatted("./{}/{}", process_name, process_name))));
|
||||
TRY(paths.try_append(TRY(String::formatted("{}/{}", TRY(ak_string_from_qstring(QCoreApplication::applicationDirPath())), process_name))));
|
||||
TRY(paths.try_append(TRY(String::formatted("./{}", process_name))));
|
||||
// NOTE: Add platform-specific paths here
|
||||
return paths;
|
||||
}
|
18
Ladybird/HelperProcess.h
Normal file
18
Ladybird/HelperProcess.h
Normal file
|
@ -0,0 +1,18 @@
|
|||
/*
|
||||
* Copyright (c) 2023, Andrew Kaster <akaster@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#define AK_DONT_REPLACE_STD
|
||||
|
||||
#include <AK/Error.h>
|
||||
#include <AK/Optional.h>
|
||||
#include <AK/Span.h>
|
||||
#include <AK/StringView.h>
|
||||
#include <LibCore/System.h>
|
||||
|
||||
ErrorOr<void> spawn_helper_process(StringView process_name, Span<StringView> arguments, Core::System::SearchInPath, Optional<Span<StringView>> environment = {});
|
||||
ErrorOr<Vector<String>> get_paths_for_helper_process(StringView process_name);
|
|
@ -9,6 +9,7 @@
|
|||
|
||||
#include "WebContentView.h"
|
||||
#include "ConsoleWidget.h"
|
||||
#include "HelperProcess.h"
|
||||
#include "InspectorWidget.h"
|
||||
#include "Utilities.h"
|
||||
#include <AK/Assertions.h>
|
||||
|
@ -586,12 +587,7 @@ void WebContentView::create_client()
|
|||
arguments.append(m_webdriver_content_ipc_path);
|
||||
}
|
||||
|
||||
auto result = Core::System::exec("./WebContent/WebContent"sv, arguments, Core::System::SearchInPath::Yes);
|
||||
if (result.is_error()) {
|
||||
auto web_content_path = ak_deprecated_string_from_qstring(QCoreApplication::applicationDirPath() + "/WebContent");
|
||||
result = Core::System::exec(web_content_path, arguments, Core::System::SearchInPath::Yes);
|
||||
}
|
||||
|
||||
auto result = spawn_helper_process("WebContent"sv, arguments, Core::System::SearchInPath::Yes);
|
||||
if (result.is_error())
|
||||
warnln("Could not launch WebContent: {}", result.error());
|
||||
VERIFY_NOT_REACHED();
|
||||
|
|
Loading…
Reference in a new issue