#include "net/url_request/url_request_context_getter.h"
#include "base/debug/leak_annotations.h"
#include "base/location.h"
#include "base/observer_list.h"
#include "base/task/single_thread_task_runner.h"
#include "net/url_request/url_request_context.h"
#include "net/url_request/url_request_context_getter_observer.h"
namespace net {
void URLRequestContextGetter::AddObserver(
URLRequestContextGetterObserver* observer) {
DCHECK(GetNetworkTaskRunner()->BelongsToCurrentThread());
observer_list_.AddObserver(observer);
}
void URLRequestContextGetter::RemoveObserver(
URLRequestContextGetterObserver* observer) {
DCHECK(GetNetworkTaskRunner()->BelongsToCurrentThread());
observer_list_.RemoveObserver(observer);
}
URLRequestContextGetter::URLRequestContextGetter() = default;
URLRequestContextGetter::~URLRequestContextGetter() = default;
void URLRequestContextGetter::OnDestruct() const {
scoped_refptr<base::SingleThreadTaskRunner> network_task_runner =
GetNetworkTaskRunner();
DCHECK(network_task_runner.get());
if (network_task_runner.get()) {
if (network_task_runner->BelongsToCurrentThread()) {
delete this;
} else {
if (!network_task_runner->DeleteSoon(FROM_HERE, this)) {
DLOG(WARNING) << "URLRequestContextGetter leaking due to no owning"
<< " thread.";
ANNOTATE_LEAKING_OBJECT_PTR(this);
}
}
}
}
void URLRequestContextGetter::NotifyContextShuttingDown() {
DCHECK(GetNetworkTaskRunner()->BelongsToCurrentThread());
DCHECK(!GetURLRequestContext());
for (auto& observer : observer_list_)
observer.OnContextShuttingDown();
}
}