From abe2c035dd58c29f9c5f00807e502baa2cc462bc Mon Sep 17 00:00:00 2001 From: "sanjeevr@chromium.org" Date: Thu, 31 Mar 2011 18:49:34 +0000 Subject: Moved URLRequestContextGetter to net/ so it can be used by projects such as jingle. BUG=None TEST=Build. Review URL: http://codereview.chromium.org/6778025 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@80033 0039d316-1c4b-4281-b951-d872f2087c98 --- net/url_request/url_request_context_getter.cc | 34 ++++++++++++ net/url_request/url_request_context_getter.h | 74 +++++++++++++++++++++++++++ 2 files changed, 108 insertions(+) create mode 100644 net/url_request/url_request_context_getter.cc create mode 100644 net/url_request/url_request_context_getter.h (limited to 'net/url_request') diff --git a/net/url_request/url_request_context_getter.cc b/net/url_request/url_request_context_getter.cc new file mode 100644 index 0000000..2313c23 --- /dev/null +++ b/net/url_request/url_request_context_getter.cc @@ -0,0 +1,34 @@ +// Copyright (c) 2011 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 "net/url_request/url_request_context_getter.h" + +#include "base/message_loop_proxy.h" +#include "net/url_request/url_request_context.h" + +namespace net { +CookieStore* URLRequestContextGetter::DONTUSEME_GetCookieStore() { + return NULL; +} + +URLRequestContextGetter::URLRequestContextGetter() : is_main_(false) {} + +URLRequestContextGetter::~URLRequestContextGetter() {} + +void URLRequestContextGetter::OnDestruct() const { + scoped_refptr io_message_loop_proxy = + GetIOMessageLoopProxy(); + DCHECK(io_message_loop_proxy); + if (io_message_loop_proxy) { + if (io_message_loop_proxy->BelongsToCurrentThread()) { + delete this; + } else { + io_message_loop_proxy->DeleteSoon(FROM_HERE, this); + } + } + // If no IO message loop proxy was available, we will just leak memory. + // This is also true if the IO thread is gone. +} + +} // namespace net diff --git a/net/url_request/url_request_context_getter.h b/net/url_request/url_request_context_getter.h new file mode 100644 index 0000000..b6c5464 --- /dev/null +++ b/net/url_request/url_request_context_getter.h @@ -0,0 +1,74 @@ +// Copyright (c) 2011 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. + +#ifndef CHROME_COMMON_NET_URL_REQUEST_CONTEXT_GETTER_H_ +#define CHROME_COMMON_NET_URL_REQUEST_CONTEXT_GETTER_H_ +#pragma once + +#include "base/memory/ref_counted.h" +#include "base/task.h" + +namespace base { +class MessageLoopProxy; +} + +namespace net { +class CookieStore; +class URLRequestContext; + +struct URLRequestContextGetterTraits; + +// Interface for retrieving an net::URLRequestContext. +class URLRequestContextGetter + : public base::RefCountedThreadSafe { + public: + virtual URLRequestContext* GetURLRequestContext() = 0; + + // See http://crbug.com/77835 for why this shouldn't be used. Instead use + // GetURLRequestContext()->cookie_store(); + virtual CookieStore* DONTUSEME_GetCookieStore(); + + // Returns a MessageLoopProxy corresponding to the thread on which the + // request IO happens (the thread on which the returned net::URLRequestContext + // may be used). + virtual scoped_refptr + GetIOMessageLoopProxy() const = 0; + + // Controls whether or not the URLRequestContextGetter considers itself to be + // the the "main" URLRequestContextGetter. Note that each Profile will have a + // "default" URLRequestContextGetter. Therefore, "is_main" refers to the + // default URLRequestContextGetter for the "main" Profile. + // TODO(willchan): Move this code to ChromeURLRequestContextGetter, since this + // ia a browser process specific concept. + void set_is_main(bool is_main) { is_main_ = is_main; } + + protected: + friend class DeleteTask; + friend struct URLRequestContextGetterTraits; + + URLRequestContextGetter(); + virtual ~URLRequestContextGetter(); + + bool is_main() const { return is_main_; } + + private: + // OnDestruct is meant to ensure deletion on the thread on which the request + // IO happens. + void OnDestruct() const; + + // Indicates whether or not this is the default URLRequestContextGetter for + // the main Profile. + bool is_main_; +}; + +struct URLRequestContextGetterTraits { + static void Destruct(const URLRequestContextGetter* context_getter) { + context_getter->OnDestruct(); + } +}; + +} // namespace net + +#endif // CHROME_COMMON_NET_URL_REQUEST_CONTEXT_GETTER_H_ -- cgit v1.1