mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-12-04 05:20:30 +00:00
Inspector: Check if RemoteProcess is_inspectable
The previous check of looking at `/proc/PID` was not working, it would always fail even if the process was indeed inspectable. Commit 70117781 introduced a new IPC for asking InspectorServer whether or not a given `pid` is actually inspectable. If a process is not inspectable, the `GUI::ProcessChooser` is redisplayed if it was previously displayed, otherwise it exits.
This commit is contained in:
parent
00c8b74ab4
commit
fe026fef47
Notes:
sideshowbarker
2024-07-18 17:01:31 +09:00
Author: https://github.com/matthewbjones Commit: https://github.com/SerenityOS/serenity/commit/fe026fef47c Pull-request: https://github.com/SerenityOS/serenity/pull/7674 Issue: https://github.com/SerenityOS/serenity/issues/7456
3 changed files with 25 additions and 13 deletions
|
@ -88,6 +88,11 @@ void RemoteProcess::set_property(FlatPtr object, const StringView& name, const J
|
|||
m_client->async_set_object_property(m_pid, object, name, value.to_string());
|
||||
}
|
||||
|
||||
bool RemoteProcess::is_inspectable()
|
||||
{
|
||||
return m_client->is_inspectable(m_pid);
|
||||
}
|
||||
|
||||
void RemoteProcess::update()
|
||||
{
|
||||
{
|
||||
|
|
|
@ -32,6 +32,8 @@ public:
|
|||
|
||||
void set_property(FlatPtr object, const StringView& name, const JsonValue& value);
|
||||
|
||||
bool is_inspectable();
|
||||
|
||||
Function<void()> on_update;
|
||||
|
||||
private:
|
||||
|
|
|
@ -66,11 +66,13 @@ int main(int argc, char** argv)
|
|||
|
||||
unveil(nullptr, nullptr);
|
||||
|
||||
bool gui_mode = argc != 2;
|
||||
pid_t pid;
|
||||
|
||||
auto app = GUI::Application::construct(argc, argv);
|
||||
auto app_icon = GUI::Icon::default_icon("app-inspector");
|
||||
if (argc != 2) {
|
||||
if (gui_mode) {
|
||||
choose_pid:
|
||||
auto process_chooser = GUI::ProcessChooser::construct("Inspector", "Inspect", app_icon.bitmap_for_size(16));
|
||||
if (process_chooser->exec() == GUI::Dialog::ExecCancel)
|
||||
return 0;
|
||||
|
@ -84,21 +86,26 @@ int main(int argc, char** argv)
|
|||
|
||||
auto window = GUI::Window::construct();
|
||||
|
||||
if (!Desktop::Launcher::add_allowed_handler_with_only_specific_urls(
|
||||
"/bin/Help",
|
||||
{ URL::create_with_file_protocol("/usr/share/man/man1/Inspector.md") })
|
||||
|| !Desktop::Launcher::seal_allowlist()) {
|
||||
warnln("Failed to set up allowed launch URLs");
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (pid == getpid()) {
|
||||
GUI::MessageBox::show(window, "Cannot inspect Inspector itself!", "Error", GUI::MessageBox::Type::Error);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (access(String::formatted("/proc/{}", pid).characters(), R_OK) == -1) {
|
||||
GUI::MessageBox::show(window, "Inspector doesn't have permission to access the process.", "Error", GUI::MessageBox::Type::Error);
|
||||
RemoteProcess remote_process(pid);
|
||||
if (!remote_process.is_inspectable()) {
|
||||
GUI::MessageBox::show(window, String::formatted("Process pid={} is not inspectable", remote_process.pid()), "Error", GUI::MessageBox::Type::Error);
|
||||
if (gui_mode) {
|
||||
goto choose_pid;
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (!Desktop::Launcher::add_allowed_handler_with_only_specific_urls(
|
||||
"/bin/Help",
|
||||
{ URL::create_with_file_protocol("/usr/share/man/man1/Inspector.md") })
|
||||
|| !Desktop::Launcher::seal_allowlist()) {
|
||||
warnln("Failed to set up allowed launch URLs");
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -123,8 +130,6 @@ int main(int argc, char** argv)
|
|||
|
||||
auto& splitter = widget.add<GUI::HorizontalSplitter>();
|
||||
|
||||
RemoteProcess remote_process(pid);
|
||||
|
||||
remote_process.on_update = [&] {
|
||||
if (!remote_process.process_name().is_null())
|
||||
window->set_title(String::formatted("{} ({}) - Inspector", remote_process.process_name(), remote_process.pid()));
|
||||
|
|
Loading…
Reference in a new issue