Chromium Code Reviews| Index: native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_host_resolver_interface.cc |
| diff --git a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_host_resolver_interface.cc b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_host_resolver_interface.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..6d72933edfbed10e3d46a94a5e3fe9bda0e88d44 |
| --- /dev/null |
| +++ b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_host_resolver_interface.cc |
| @@ -0,0 +1,103 @@ |
| +// 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. |
| + |
| +#include "fake_ppapi/fake_host_resolver_interface.h" |
| + |
| +#include <netinet/in.h> |
| + |
| +#include "fake_ppapi/fake_pepper_interface.h" |
| +#include "fake_ppapi/fake_resource_manager.h" |
| +#include "fake_ppapi/fake_var_manager.h" |
| +#include "gtest/gtest.h" |
| + |
| +// This fake resolver only know how to resolve this one |
| +// host to this one IP address. |
| +#define FAKE_HOSTNAME "testhost.com" |
|
binji
2014/01/28 18:13:22
example.com is more traditional, right?
Sam Clegg
2014/01/28 19:55:22
Done.
|
| +#define FAKE_IP 0x01020304 |
|
binji
2014/01/28 18:13:22
In the other fakes, I allowed the user of the fake
Sam Clegg
2014/01/28 19:55:22
I moved these into the .h file and use them in the
|
| + |
| +namespace { |
| + |
| +class FakeHostResolverResource : public FakeResource { |
| + public: |
| + FakeHostResolverResource() : resolved(false), name(NULL) {} |
| + static const char* classname() { return "FakeHostResolverResource"; } |
| + |
| + bool resolved; |
| + in_addr_t address; |
| + const char* name; |
| +}; |
| + |
| +int32_t RunCompletionCallback(PP_CompletionCallback* callback, int32_t result) { |
| + if (callback->func) { |
| + PP_RunCompletionCallback(callback, result); |
| + return PP_OK_COMPLETIONPENDING; |
| + } |
| + return result; |
| +} |
| + |
| +} |
| + |
| +FakeHostResolverInterface::FakeHostResolverInterface(FakePepperInterface* ppapi) |
| + : ppapi_(ppapi) {} |
| + |
| +PP_Resource FakeHostResolverInterface::Create(PP_Instance instance) { |
| + if (instance != ppapi_->GetInstance()) |
| + return PP_ERROR_BADRESOURCE; |
| + |
| + FakeHostResolverResource* resolver_resource = new FakeHostResolverResource; |
| + |
| + return CREATE_RESOURCE(ppapi_->resource_manager(), |
| + FakeHostResolverResource, |
| + resolver_resource); |
| +} |
| + |
| +int32_t FakeHostResolverInterface::Resolve(PP_Resource resource, |
| + const char* hostname, |
| + uint16_t, |
| + const PP_HostResolver_Hint*, |
| + PP_CompletionCallback callback) { |
| + FakeHostResolverResource* resolver = |
| + ppapi_->resource_manager()->Get<FakeHostResolverResource>(resource); |
| + resolver->resolved = false; |
| + if (!strcmp(hostname, FAKE_HOSTNAME)) { |
| + resolver->resolved = true; |
| + resolver->name = FAKE_HOSTNAME; |
| + resolver->address = htonl(FAKE_IP); |
| + return RunCompletionCallback(&callback, PP_OK); |
| + } |
| + return RunCompletionCallback(&callback, PP_ERROR_NAME_NOT_RESOLVED); |
| +} |
| + |
| +PP_Var FakeHostResolverInterface::GetCanonicalName(PP_Resource resource) { |
| + FakeHostResolverResource* res = |
| + ppapi_->resource_manager()->Get<FakeHostResolverResource>(resource); |
| + if (!res->resolved) |
| + return PP_Var(); |
| + return ppapi_->GetVarInterface()->VarFromUtf8(res->name, strlen(res->name)); |
| +} |
| + |
| +uint32_t FakeHostResolverInterface::GetNetAddressCount(PP_Resource resolver) { |
| + FakeHostResolverResource* res = |
| + ppapi_->resource_manager()->Get<FakeHostResolverResource>(resolver); |
| + if (!res->resolved) |
| + return 0; |
| + return 1; |
|
binji
2014/01/28 18:13:22
is it worth testing the cases where this can retur
Sam Clegg
2014/01/28 19:55:22
Yes, CL is a preliminary CL to the one where I add
|
| +} |
| + |
| +PP_Resource FakeHostResolverInterface::GetNetAddress(PP_Resource resource, |
| + uint32_t index) { |
| + FakeHostResolverResource* res = |
| + ppapi_->resource_manager()->Get<FakeHostResolverResource>(resource); |
| + if (!res->resolved) |
| + return 0; |
| + |
| + if (index != 0) |
| + return 0; |
| + |
| + // Create a new NetAddress resource and return it. |
| + PP_NetAddress_IPv4 addr; |
| + memcpy(addr.addr, &res->address, sizeof(res->address)); |
| + nacl_io::NetAddressInterface* iface = ppapi_->GetNetAddressInterface(); |
| + return iface->CreateFromIPv4Address(ppapi_->GetInstance(), &addr); |
| +} |