blob: e456dc02af7a7f438fdaa4d2825e6b22ecbb98a5 [file]
// Copyright 2026 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "net/proxy_resolution/system_proxy_resolution_request.h"
#include <utility>
#include "base/check.h"
#include "net/log/net_log_event_type.h"
#include "net/proxy_resolution/system_proxy_resolution_service.h"
namespace net {
SystemProxyResolutionRequest::SystemProxyResolutionRequest(
SystemProxyResolutionService* service,
GURL url,
std::string method,
NetworkAnonymizationKey network_anonymization_key,
ProxyInfo* results,
CompletionOnceCallback user_callback,
const NetLogWithSource& net_log)
: service_(service),
user_callback_(std::move(user_callback)),
results_(results),
url_(std::move(url)),
method_(std::move(method)),
network_anonymization_key_(std::move(network_anonymization_key)),
net_log_(net_log),
creation_time_(base::TimeTicks::Now()) {
DCHECK(!user_callback_.is_null());
}
SystemProxyResolutionRequest::~SystemProxyResolutionRequest() {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
if (service_) {
// At this point the derived sub-object is already destroyed (C++ destructor
// ordering). RemovePendingRequest uses |this| only as a pointer value for
// set lookup — no virtual dispatch or derived member access occurs.
service_->RemovePendingRequest(this);
net_log_.AddEvent(NetLogEventType::CANCELLED);
// Note: platform subclass destructor runs first and is responsible for
// cancelling the platform-specific resolver request (e.g., resetting
// the WinHTTP resolver handle). C++ destructor ordering guarantees
// derived-first, so platform cleanup happens before we get here.
net_log_.EndEvent(NetLogEventType::PROXY_RESOLUTION_SERVICE);
}
}
void SystemProxyResolutionRequest::MarkCompleted() {
DCHECK(service_);
service_->RemovePendingRequest(this);
service_ = nullptr;
}
LoadState SystemProxyResolutionRequest::GetLoadState() const {
// TODO(crbug.com/40111093): Consider adding a LoadState for "We're
// waiting on system APIs to do their thing".
return LOAD_STATE_RESOLVING_PROXY_FOR_URL;
}
} // namespace net