Bug 1569183: Update OnConnected callbacks to specify what type of proxying (if any) is being used, and implement IsProxied based on this information. r=mjf

Differential Revision: https://phabricator.services.mozilla.com/D45186

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Byron Campen [:bwc] 2019-09-17 18:18:33 +00:00
Родитель 57de6c6130
Коммит 2fe90843a0
14 изменённых файлов: 37 добавлений и 28 удалений

Просмотреть файл

@ -125,13 +125,13 @@ void WebrtcTCPSocketWrapper::OnRead(nsTArray<uint8_t>&& aReadData) {
&WebrtcTCPSocketCallback::OnRead, std::move(aReadData))));
}
void WebrtcTCPSocketWrapper::OnConnected() {
void WebrtcTCPSocketWrapper::OnConnected(const nsCString& aProxyType) {
MOZ_ASSERT(NS_IsMainThread(), "not on main thread");
MOZ_ASSERT(mProxyCallbacks, "webrtc TCP callbacks should be non-null");
MOZ_ALWAYS_SUCCEEDS(mSocketThread->Dispatch(
NewRunnableMethod("WebrtcTCPSocketWrapper::OnConnected", mProxyCallbacks,
&WebrtcTCPSocketCallback::OnConnected)));
MOZ_ALWAYS_SUCCEEDS(mSocketThread->Dispatch(NewRunnableMethod<nsCString>(
"WebrtcTCPSocketWrapper::OnConnected", mProxyCallbacks,
&WebrtcTCPSocketCallback::OnConnected, aProxyType)));
}
} // namespace net

Просмотреть файл

@ -50,7 +50,7 @@ class WebrtcTCPSocketWrapper : public WebrtcTCPSocketCallback {
// WebrtcTCPSocketCallback
virtual void OnClose(nsresult aReason) override;
virtual void OnConnected() override;
virtual void OnConnected(const nsCString& aProxyType) override;
virtual void OnRead(nsTArray<uint8_t>&& aReadData) override;
protected:

Просмотреть файл

@ -32,7 +32,7 @@ parent:
child:
async OnClose(nsresult aReason);
async OnConnected();
async OnConnected(nsCString aProxyType);
async OnRead(uint8_t[] aReadData);
async __delete__();

Просмотреть файл

@ -231,17 +231,16 @@ NS_IMETHODIMP WebrtcTCPSocket::OnProxyAvailable(nsICancelable* aRequest,
nsresult rv;
if (NS_SUCCEEDED(aResult) && aProxyinfo) {
nsCString proxyType;
rv = aProxyinfo->GetType(proxyType);
rv = aProxyinfo->GetType(mProxyType);
if (NS_WARN_IF(NS_FAILED(rv))) {
CloseWithReason(rv);
return rv;
}
if (proxyType == "http" || proxyType == "https") {
if (mProxyType == "http" || mProxyType == "https") {
rv = OpenWithHttpProxy();
} else if (proxyType == "socks" || proxyType == "socks4" ||
proxyType == "direct") {
} else if (mProxyType == "socks" || mProxyType == "socks4" ||
mProxyType == "direct") {
rv = OpenWithoutHttpProxy(aProxyinfo);
}
} else {
@ -452,7 +451,7 @@ void WebrtcTCPSocket::InvokeOnConnected() {
MOZ_ASSERT(mProxyCallbacks, "webrtc TCP callback should be non-null");
mProxyCallbacks->OnConnected();
mProxyCallbacks->OnConnected(mProxyType);
}
void WebrtcTCPSocket::InvokeOnRead(nsTArray<uint8_t>&& aReadData) {

Просмотреть файл

@ -82,6 +82,7 @@ class WebrtcTCPSocket : public nsIHttpUpgradeListener,
bool mForceProxy = false;
nsCString mLocalAddress;
uint16_t mLocalPort = 0;
nsCString mProxyType;
nsresult DoProxyConfigLookup();
nsresult OpenWithHttpProxy();

Просмотреть файл

@ -17,7 +17,7 @@ class WebrtcTCPSocketCallback {
NS_INLINE_DECL_PURE_VIRTUAL_REFCOUNTING
virtual void OnClose(nsresult aReason) = 0;
virtual void OnConnected() = 0;
virtual void OnConnected(const nsCString& aProxyType) = 0;
virtual void OnRead(nsTArray<uint8_t>&& aReadData) = 0;
protected:

Просмотреть файл

@ -30,11 +30,12 @@ mozilla::ipc::IPCResult WebrtcTCPSocketChild::RecvOnClose(
return IPC_OK();
}
mozilla::ipc::IPCResult WebrtcTCPSocketChild::RecvOnConnected() {
mozilla::ipc::IPCResult WebrtcTCPSocketChild::RecvOnConnected(
const nsCString& aProxyType) {
LOG(("WebrtcTCPSocketChild::RecvOnConnected %p\n", this));
MOZ_ASSERT(mProxyCallbacks, "webrtc TCP callbacks should be non-null");
mProxyCallbacks->OnConnected();
mProxyCallbacks->OnConnected(aProxyType);
return IPC_OK();
}

Просмотреть файл

@ -23,7 +23,7 @@ class WebrtcTCPSocketChild : public PWebrtcTCPSocketChild {
mozilla::ipc::IPCResult RecvOnClose(const nsresult& aReason) override;
mozilla::ipc::IPCResult RecvOnConnected() override;
mozilla::ipc::IPCResult RecvOnConnected(const nsCString& aProxyType) override;
mozilla::ipc::IPCResult RecvOnRead(nsTArray<uint8_t>&& aReadData) override;

Просмотреть файл

@ -107,10 +107,10 @@ void WebrtcTCPSocketParent::OnRead(nsTArray<uint8_t>&& aReadData) {
}
}
void WebrtcTCPSocketParent::OnConnected() {
void WebrtcTCPSocketParent::OnConnected(const nsCString& aProxyType) {
LOG(("WebrtcTCPSocketParent::OnConnected %p\n", this));
if (mChannel && !SendOnConnected()) {
if (mChannel && !SendOnConnected(aProxyType)) {
CleanupChannel();
}
}

Просмотреть файл

@ -39,7 +39,7 @@ class WebrtcTCPSocketParent : public PWebrtcTCPSocketParent,
// WebrtcTCPSocketCallback
void OnClose(nsresult aReason) override;
void OnConnected() override;
void OnConnected(const nsCString& aProxyType) override;
void OnRead(nsTArray<uint8_t>&& bytes) override;
void AddIPDLReference() { AddRef(); }

Просмотреть файл

@ -246,8 +246,9 @@ void NrTcpSocket::OnClose(nsresult aReason) {
DoCallbacks();
}
void NrTcpSocket::OnConnected() {
void NrTcpSocket::OnConnected(const nsCString& aProxyType) {
r_log(LOG_GENERIC, LOG_DEBUG, "NrTcpSocket::OnConnected %p\n", this);
mProxyType = aProxyType;
DoCallbacks();
}

Просмотреть файл

@ -86,11 +86,13 @@ class NrTcpSocket : public NrSocketBase, public WebrtcTCPSocketCallback {
int listen(int aBacklog) override;
int accept(nr_transport_addr* aAddr, nr_socket** aSocket) override;
bool IsProxied() const override { return true; }
bool IsProxied() const override {
return mProxyType != "" && mProxyType != "direct";
}
// WebrtcTCPSocketCallback
void OnClose(nsresult aReason) override;
void OnConnected() override;
void OnConnected(const nsCString& aProxyType) override;
void OnRead(nsTArray<uint8_t>&& aReadData) override;
size_t CountUnreadBytes() const;
@ -107,6 +109,7 @@ class NrTcpSocket : public NrSocketBase, public WebrtcTCPSocketCallback {
bool mClosed;
size_t mReadOffset;
nsCString mProxyType;
std::list<NrTcpSocketData> mReadQueue;
std::shared_ptr<NrSocketProxyConfig> mConfig;

Просмотреть файл

@ -110,7 +110,7 @@ TEST_F(NrTcpSocketTest, TestConnected) {
// still not connected just registered for writes...
ASSERT_TRUE(!mConnected);
mSProxy->OnConnected();
mSProxy->OnConnected(NS_LITERAL_CSTRING("http"));
ASSERT_TRUE(mConnected);
}

Просмотреть файл

@ -472,7 +472,7 @@ void FakeWebrtcTCPSocket::InvokeOnClose(nsresult aReason) {
}
void FakeWebrtcTCPSocket::InvokeOnConnected() {
mProxyCallbacks->OnConnected();
mProxyCallbacks->OnConnected(NS_LITERAL_CSTRING("http"));
}
void FakeWebrtcTCPSocket::InvokeOnRead(nsTArray<uint8_t>&& aReadData) {
@ -494,7 +494,7 @@ class WebrtcTCPSocketTest : public MtransportTest {
// WebrtcTCPSocketCallback forwards from mCallback
void OnClose(nsresult aReason);
void OnConnected();
void OnConnected(const nsCString& aProxyType);
void OnRead(nsTArray<uint8_t>&& aReadData);
void SetUp() override;
@ -534,7 +534,7 @@ class WebrtcTCPSocketTestCallback : public WebrtcTCPSocketCallback {
// WebrtcTCPSocketCallback
void OnClose(nsresult aReason) override;
void OnConnected() override;
void OnConnected(const nsCString& aProxyType) override;
void OnRead(nsTArray<uint8_t>&& aReadData) override;
protected:
@ -566,7 +566,9 @@ void WebrtcTCPSocketTest::OnRead(nsTArray<uint8_t>&& aReadData) {
AppendReadData(aReadData.Elements(), aReadData.Length());
}
void WebrtcTCPSocketTest::OnConnected() { mOnConnectedCalled = true; }
void WebrtcTCPSocketTest::OnConnected(const nsCString& aProxyType) {
mOnConnectedCalled = true;
}
void WebrtcTCPSocketTest::OnClose(nsresult aReason) { mOnCloseCalled = true; }
@ -614,7 +616,9 @@ void WebrtcTCPSocketTestCallback::OnClose(nsresult aReason) {
mTest->OnClose(aReason);
}
void WebrtcTCPSocketTestCallback::OnConnected() { mTest->OnConnected(); }
void WebrtcTCPSocketTestCallback::OnConnected(const nsCString& aProxyType) {
mTest->OnConnected(aProxyType);
}
void WebrtcTCPSocketTestCallback::OnRead(nsTArray<uint8_t>&& aReadData) {
mTest->OnRead(std::move(aReadData));