Files
ladybird/Ladybird/AppKit/Application/Application.mm
Andrew Kaster 4b5541e1b7 Everywhere: Transition ImageDecoder to be single-instance, owned by UI
This is the same behavior as RequestServer, with the added benefit that
we know how to gracefully reconnect ImageDecoder to all WebContent
processes on restart.
2024-06-26 16:09:33 -06:00

76 lines
1.5 KiB
Plaintext

/*
* Copyright (c) 2023, Tim Flynn <trflynn89@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include <AK/ByteString.h>
#include <Application/ApplicationBridge.h>
#include <LibCore/EventLoop.h>
#include <LibCore/ThreadEventQueue.h>
#include <LibWebView/WebContentClient.h>
#import <Application/Application.h>
#if !__has_feature(objc_arc)
# error "This project requires ARC"
#endif
@interface Application ()
{
OwnPtr<Ladybird::ApplicationBridge> m_application_bridge;
}
@end
@implementation Application
- (instancetype)init
{
if (self = [super init]) {
m_application_bridge = make<Ladybird::ApplicationBridge>();
}
return self;
}
#pragma mark - Public methods
- (ErrorOr<void>)launchRequestServer:(Vector<ByteString> const&)certificates
{
return m_application_bridge->launch_request_server(certificates);
}
- (ErrorOr<void>)launchImageDecoder
{
return m_application_bridge->launch_image_decoder();
}
- (ErrorOr<NonnullRefPtr<WebView::WebContentClient>>)launchWebContent:(Ladybird::WebViewBridge&)web_view_bridge
{
return m_application_bridge->launch_web_content(web_view_bridge);
}
- (ErrorOr<IPC::File>)launchWebWorker
{
return m_application_bridge->launch_web_worker();
}
#pragma mark - NSApplication
- (void)terminate:(id)sender
{
Core::EventLoop::current().quit(0);
}
- (void)sendEvent:(NSEvent*)event
{
if ([event type] == NSEventTypeApplicationDefined) {
Core::ThreadEventQueue::current().process();
} else {
[super sendEvent:event];
}
}
@end