blob: ee5ddacf29bd64e2ee3901b51d5baf89de3ee68b [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef EXTENSIONS_BROWSER_API_SOCKETS_UDP_SOCKETS_UDP_API_H_
#define EXTENSIONS_BROWSER_API_SOCKETS_UDP_SOCKETS_UDP_API_H_
#include <stddef.h>
#include "base/gtest_prod_util.h"
#include "extensions/browser/api/socket/socket_api.h"
#include "extensions/common/api/sockets_udp.h"
namespace extensions {
class ResumableUDPSocket;
}
namespace extensions {
namespace api {
class UDPSocketEventDispatcher;
class UDPSocketAsyncApiFunction : public SocketAsyncApiFunction {
protected:
~UDPSocketAsyncApiFunction() override;
std::unique_ptr<SocketResourceManagerInterface> CreateSocketResourceManager()
override;
ResumableUDPSocket* GetUdpSocket(int socket_id);
};
class UDPSocketExtensionWithDnsLookupFunction
: public SocketExtensionWithDnsLookupFunction {
protected:
~UDPSocketExtensionWithDnsLookupFunction() override;
std::unique_ptr<SocketResourceManagerInterface> CreateSocketResourceManager()
override;
ResumableUDPSocket* GetUdpSocket(int socket_id);
};
class SocketsUdpCreateFunction : public UDPSocketAsyncApiFunction {
public:
DECLARE_EXTENSION_FUNCTION("sockets.udp.create", SOCKETS_UDP_CREATE)
SocketsUdpCreateFunction();
protected:
~SocketsUdpCreateFunction() override;
// AsyncApiFunction:
bool Prepare() override;
void Work() override;
private:
FRIEND_TEST_ALL_PREFIXES(SocketsUdpUnitTest, Create);
network::mojom::UDPSocketPtrInfo socket_;
network::mojom::UDPSocketReceiverRequest socket_receiver_request_;
std::unique_ptr<sockets_udp::Create::Params> params_;
};
class SocketsUdpUpdateFunction : public UDPSocketAsyncApiFunction {
public:
DECLARE_EXTENSION_FUNCTION("sockets.udp.update", SOCKETS_UDP_UPDATE)
SocketsUdpUpdateFunction();
protected:
~SocketsUdpUpdateFunction() override;
// AsyncApiFunction:
bool Prepare() override;
void Work() override;
private:
std::unique_ptr<sockets_udp::Update::Params> params_;
};
class SocketsUdpSetPausedFunction : public UDPSocketAsyncApiFunction {
public:
DECLARE_EXTENSION_FUNCTION("sockets.udp.setPaused", SOCKETS_UDP_SETPAUSED)
SocketsUdpSetPausedFunction();
protected:
~SocketsUdpSetPausedFunction() override;
// AsyncApiFunction
bool Prepare() override;
void Work() override;
private:
std::unique_ptr<sockets_udp::SetPaused::Params> params_;
UDPSocketEventDispatcher* socket_event_dispatcher_;
};
class SocketsUdpBindFunction : public UDPSocketAsyncApiFunction {
public:
DECLARE_EXTENSION_FUNCTION("sockets.udp.bind", SOCKETS_UDP_BIND)
SocketsUdpBindFunction();
protected:
~SocketsUdpBindFunction() override;
// AsyncApiFunction:
bool Prepare() override;
void AsyncWorkStart() override;
void OnCompleted(int net_result);
private:
std::unique_ptr<sockets_udp::Bind::Params> params_;
UDPSocketEventDispatcher* socket_event_dispatcher_;
};
class SocketsUdpSendFunction : public UDPSocketExtensionWithDnsLookupFunction {
public:
DECLARE_EXTENSION_FUNCTION("sockets.udp.send", SOCKETS_UDP_SEND)
SocketsUdpSendFunction();
protected:
~SocketsUdpSendFunction() override;
// AsyncApiFunction:
bool Prepare() override;
void AsyncWorkStart() override;
void OnCompleted(int net_result);
void SetSendResult(int net_result, int bytes_sent);
// SocketExtensionWithDnsLookupFunction:
void AfterDnsLookup(int lookup_result) override;
private:
void StartSendTo();
std::unique_ptr<sockets_udp::Send::Params> params_;
scoped_refptr<net::IOBuffer> io_buffer_;
size_t io_buffer_size_;
};
class SocketsUdpCloseFunction : public UDPSocketAsyncApiFunction {
public:
DECLARE_EXTENSION_FUNCTION("sockets.udp.close", SOCKETS_UDP_CLOSE)
SocketsUdpCloseFunction();
protected:
~SocketsUdpCloseFunction() override;
// AsyncApiFunction:
bool Prepare() override;
void Work() override;
private:
std::unique_ptr<sockets_udp::Close::Params> params_;
};
class SocketsUdpGetInfoFunction : public UDPSocketAsyncApiFunction {
public:
DECLARE_EXTENSION_FUNCTION("sockets.udp.getInfo", SOCKETS_UDP_GETINFO)
SocketsUdpGetInfoFunction();
protected:
~SocketsUdpGetInfoFunction() override;
// AsyncApiFunction:
bool Prepare() override;
void Work() override;
private:
std::unique_ptr<sockets_udp::GetInfo::Params> params_;
};
class SocketsUdpGetSocketsFunction : public UDPSocketAsyncApiFunction {
public:
DECLARE_EXTENSION_FUNCTION("sockets.udp.getSockets", SOCKETS_UDP_GETSOCKETS)
SocketsUdpGetSocketsFunction();
protected:
~SocketsUdpGetSocketsFunction() override;
// AsyncApiFunction:
bool Prepare() override;
void Work() override;
};
class SocketsUdpJoinGroupFunction : public UDPSocketAsyncApiFunction {
public:
DECLARE_EXTENSION_FUNCTION("sockets.udp.joinGroup", SOCKETS_UDP_JOINGROUP)
SocketsUdpJoinGroupFunction();
protected:
~SocketsUdpJoinGroupFunction() override;
// AsyncApiFunction
bool Prepare() override;
void AsyncWorkStart() override;
private:
void OnCompleted(int result);
std::unique_ptr<sockets_udp::JoinGroup::Params> params_;
};
class SocketsUdpLeaveGroupFunction : public UDPSocketAsyncApiFunction {
public:
DECLARE_EXTENSION_FUNCTION("sockets.udp.leaveGroup", SOCKETS_UDP_LEAVEGROUP)
SocketsUdpLeaveGroupFunction();
protected:
~SocketsUdpLeaveGroupFunction() override;
// AsyncApiFunction
bool Prepare() override;
void AsyncWorkStart() override;
private:
void OnCompleted(int result);
std::unique_ptr<sockets_udp::LeaveGroup::Params> params_;
};
class SocketsUdpSetMulticastTimeToLiveFunction
: public UDPSocketAsyncApiFunction {
public:
DECLARE_EXTENSION_FUNCTION("sockets.udp.setMulticastTimeToLive",
SOCKETS_UDP_SETMULTICASTTIMETOLIVE)
SocketsUdpSetMulticastTimeToLiveFunction();
protected:
~SocketsUdpSetMulticastTimeToLiveFunction() override;
// AsyncApiFunction
bool Prepare() override;
void Work() override;
private:
std::unique_ptr<sockets_udp::SetMulticastTimeToLive::Params> params_;
};
class SocketsUdpSetMulticastLoopbackModeFunction
: public UDPSocketAsyncApiFunction {
public:
DECLARE_EXTENSION_FUNCTION("sockets.udp.setMulticastLoopbackMode",
SOCKETS_UDP_SETMULTICASTLOOPBACKMODE)
SocketsUdpSetMulticastLoopbackModeFunction();
protected:
~SocketsUdpSetMulticastLoopbackModeFunction() override;
// AsyncApiFunction
bool Prepare() override;
void Work() override;
private:
std::unique_ptr<sockets_udp::SetMulticastLoopbackMode::Params> params_;
};
class SocketsUdpGetJoinedGroupsFunction : public UDPSocketAsyncApiFunction {
public:
DECLARE_EXTENSION_FUNCTION("sockets.udp.getJoinedGroups",
SOCKETS_UDP_GETJOINEDGROUPS)
SocketsUdpGetJoinedGroupsFunction();
protected:
~SocketsUdpGetJoinedGroupsFunction() override;
// AsyncApiFunction
bool Prepare() override;
void Work() override;
private:
std::unique_ptr<sockets_udp::GetJoinedGroups::Params> params_;
};
class SocketsUdpSetBroadcastFunction : public UDPSocketAsyncApiFunction {
public:
DECLARE_EXTENSION_FUNCTION("sockets.udp.setBroadcast",
SOCKETS_UDP_SETBROADCAST)
SocketsUdpSetBroadcastFunction();
protected:
~SocketsUdpSetBroadcastFunction() override;
// AsyncApiFunction
bool Prepare() override;
void AsyncWorkStart() override;
private:
void OnCompleted(int net_result);
std::unique_ptr<sockets_udp::SetBroadcast::Params> params_;
};
} // namespace api
} // namespace extensions
#endif // EXTENSIONS_BROWSER_API_SOCKETS_UDP_SOCKETS_UDP_API_H_