1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "net/url_request/url_request_context_getter.h"
6
7#include "base/location.h"
8#include "base/single_thread_task_runner.h"
9#include "net/url_request/url_request_context.h"
10
11namespace net {
12
13URLRequestContextGetter::URLRequestContextGetter() {}
14
15URLRequestContextGetter::~URLRequestContextGetter() {}
16
17void URLRequestContextGetter::OnDestruct() const {
18  scoped_refptr<base::SingleThreadTaskRunner> network_task_runner =
19      GetNetworkTaskRunner();
20  DCHECK(network_task_runner.get());
21  if (network_task_runner.get()) {
22    if (network_task_runner->BelongsToCurrentThread()) {
23      delete this;
24    } else {
25      if (!network_task_runner->DeleteSoon(FROM_HERE, this)) {
26        // Can't force-delete the object here, because some derived classes
27        // can only be deleted on the owning thread, so just emit a warning to
28        // aid in debugging.
29        DLOG(WARNING) << "URLRequestContextGetter leaking due to no owning"
30                      << " thread.";
31      }
32    }
33  }
34  // If no IO message loop proxy was available, we will just leak memory.
35  // This is also true if the IO thread is gone.
36}
37
38TrivialURLRequestContextGetter::TrivialURLRequestContextGetter(
39    net::URLRequestContext* context,
40    const scoped_refptr<base::SingleThreadTaskRunner>& main_task_runner)
41    : context_(context), main_task_runner_(main_task_runner) {}
42
43TrivialURLRequestContextGetter::~TrivialURLRequestContextGetter() {}
44
45net::URLRequestContext*
46TrivialURLRequestContextGetter::GetURLRequestContext() {
47  return context_;
48}
49
50scoped_refptr<base::SingleThreadTaskRunner>
51TrivialURLRequestContextGetter::GetNetworkTaskRunner() const {
52  return main_task_runner_;
53}
54
55
56}  // namespace net
57