/*
* 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<NonnullRefPtr<SQL::SQLClient>>)launchSQLServer
{
return m_application_bridge->launch_sql_server();
}
- (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();
}
- (void)dumpConnectionInfo:(id)sender
{
m_application_bridge->dump_connection_info();
}
#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