1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
|
/*
* Copyright (C) 2025 Igalia S.L. All rights reserved.
* Copyright (C) 2025 Metrological Group B.V.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#pragma once
#if USE(LIBRICE)
#include "MessageReceiver.h"
#include "MessageSender.h"
#include "SharedPreferencesForWebProcess.h"
#include "WebPageProxyIdentifier.h"
#include "WebProcess.h"
#include <WebCore/Document.h>
#include <WebCore/GStreamerIceAgent.h>
#include <WebCore/RTCIceComponent.h>
#include <WebCore/RTCIceConnectionState.h>
#include <WebCore/SharedMemory.h>
#include <wtf/ThreadSafeWeakPtr.h>
namespace IPC {
class Connection;
class Decoder;
}
namespace WebKit {
struct RiceBackendIdentifierType { };
using RiceBackendIdentifier = ObjectIdentifier<RiceBackendIdentifierType>;
class RiceBackendProxy : public IPC::MessageSender, public IPC::MessageReceiver, public WebCore::RiceBackend, public ThreadSafeRefCountedAndCanMakeThreadSafeWeakPtr<RiceBackendProxy, WTF::DestructionThread::MainRunLoop> {
public:
static RefPtr<RiceBackendProxy> create(WebPageProxyIdentifier, WebCore::RiceBackendClient&);
~RiceBackendProxy();
void ref() const final { ThreadSafeRefCountedAndCanMakeThreadSafeWeakPtr::ref(); }
void deref() const final { ThreadSafeRefCountedAndCanMakeThreadSafeWeakPtr::deref(); }
void didReceiveMessage(IPC::Connection&, IPC::Decoder&);
private:
RiceBackendProxy(Ref<IPC::Connection>&&, WebPageProxyIdentifier, RiceBackendIdentifier, WebCore::RiceBackendClient&);
// RiceBackend (Web -> Network)
void resolveAddress(const String&, WebCore::RiceBackend::ResolveAddressCallback&&) final;
void send(unsigned, WebCore::RTCIceProtocol, String&&, String&&, WebCore::SharedMemory::Handle&&) final;
HashMap<WebCore::RiceBackend::Socket, String> gatherSocketAddresses(WebCore::ScriptExecutionContextIdentifier, unsigned) final;
void finalizeStream(unsigned) final;
void refRiceBackend() final { ref(); }
void derefRiceBackend() final { deref(); }
// RiceBackendClient (Network -> Web)
void notifyIncomingData(unsigned, WebCore::RTCIceProtocol, String&&, String&&, WebCore::SharedMemory::Handle&&);
// MessageSender
IPC::Connection* messageSenderConnection() const final;
uint64_t messageSenderDestinationID() const final;
const Ref<IPC::Connection> m_connection;
WebPageProxyIdentifier m_webPageProxyID;
RefPtr<WebCore::RiceBackendClient> m_client;
const RiceBackendIdentifier m_identifier;
};
} // namespace WebKit
#endif // USE(LIBRICE)
|