mirror of
https://github.com/SerenityOS/serenity
synced 2024-10-07 00:19:27 +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
|
@ -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