Bug 1807268 - Re-enable verifyShowClipboardSuggestionsToggleTest UI test r=jajohnson
[gecko.git] / netwerk / dns / NativeDNSResolverOverrideParent.cpp
blob47ba16918f10e4f1339f30e2946b894c742d007b
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7 #include "NativeDNSResolverOverrideParent.h"
9 #include "mozilla/ClearOnShutdown.h"
10 #include "mozilla/net/SocketProcessParent.h"
11 #include "nsIOService.h"
12 #include "DNS.h"
14 namespace mozilla {
15 namespace net {
17 NS_IMPL_ISUPPORTS(NativeDNSResolverOverrideParent, nsINativeDNSResolverOverride)
19 static StaticRefPtr<NativeDNSResolverOverrideParent>
20 gNativeDNSResolverOverrideParent;
22 // static
23 already_AddRefed<nsINativeDNSResolverOverride>
24 NativeDNSResolverOverrideParent::GetSingleton() {
25 if (gNativeDNSResolverOverrideParent) {
26 return do_AddRef(gNativeDNSResolverOverrideParent);
29 if (!gIOService) {
30 return nullptr;
33 gNativeDNSResolverOverrideParent = new NativeDNSResolverOverrideParent();
34 ClearOnShutdown(&gNativeDNSResolverOverrideParent);
36 auto initTask = []() {
37 Unused << SocketProcessParent::GetSingleton()
38 ->SendPNativeDNSResolverOverrideConstructor(
39 gNativeDNSResolverOverrideParent);
41 gIOService->CallOrWaitForSocketProcess(initTask);
42 return do_AddRef(gNativeDNSResolverOverrideParent);
45 NS_IMETHODIMP NativeDNSResolverOverrideParent::AddIPOverride(
46 const nsACString& aHost, const nsACString& aIPLiteral) {
47 NetAddr tempAddr;
48 if (!aIPLiteral.Equals("N/A"_ns) &&
49 NS_FAILED(tempAddr.InitFromString(aIPLiteral))) {
50 return NS_ERROR_UNEXPECTED;
53 RefPtr<NativeDNSResolverOverrideParent> self = this;
54 nsCString host(aHost);
55 nsCString ip(aIPLiteral);
56 auto task = [self{std::move(self)}, host, ip]() {
57 Unused << self->SendAddIPOverride(host, ip);
59 gIOService->CallOrWaitForSocketProcess(task);
60 return NS_OK;
63 NS_IMETHODIMP NativeDNSResolverOverrideParent::AddHTTPSRecordOverride(
64 const nsACString& aHost, const uint8_t* aData, uint32_t aLength) {
65 nsCString host(aHost);
66 CopyableTArray<uint8_t> data(aData, aLength);
67 auto task = [self = RefPtr{this}, host, data = std::move(data)]() {
68 Unused << self->SendAddHTTPSRecordOverride(host, data);
70 gIOService->CallOrWaitForSocketProcess(std::move(task));
71 return NS_OK;
74 NS_IMETHODIMP NativeDNSResolverOverrideParent::SetCnameOverride(
75 const nsACString& aHost, const nsACString& aCNAME) {
76 if (aCNAME.IsEmpty()) {
77 return NS_ERROR_UNEXPECTED;
80 RefPtr<NativeDNSResolverOverrideParent> self = this;
81 nsCString host(aHost);
82 nsCString cname(aCNAME);
83 auto task = [self{std::move(self)}, host, cname]() {
84 Unused << self->SendSetCnameOverride(host, cname);
86 gIOService->CallOrWaitForSocketProcess(task);
87 return NS_OK;
90 NS_IMETHODIMP NativeDNSResolverOverrideParent::ClearHostOverride(
91 const nsACString& aHost) {
92 RefPtr<NativeDNSResolverOverrideParent> self = this;
93 nsCString host(aHost);
94 auto task = [self{std::move(self)}, host]() {
95 Unused << self->SendClearHostOverride(host);
97 gIOService->CallOrWaitForSocketProcess(task);
98 return NS_OK;
101 NS_IMETHODIMP NativeDNSResolverOverrideParent::ClearOverrides() {
102 RefPtr<NativeDNSResolverOverrideParent> self = this;
103 auto task = [self{std::move(self)}]() {
104 Unused << self->SendClearOverrides();
106 gIOService->CallOrWaitForSocketProcess(task);
107 return NS_OK;
110 } // namespace net
111 } // namespace mozilla