summaryrefslogtreecommitdiffstats
path: root/chrome/browser/profiles/profile_impl_io_data.h
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/profiles/profile_impl_io_data.h')
-rw-r--r--chrome/browser/profiles/profile_impl_io_data.h114
1 files changed, 114 insertions, 0 deletions
diff --git a/chrome/browser/profiles/profile_impl_io_data.h b/chrome/browser/profiles/profile_impl_io_data.h
new file mode 100644
index 0000000..ffc5e82
--- /dev/null
+++ b/chrome/browser/profiles/profile_impl_io_data.h
@@ -0,0 +1,114 @@
+// 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_BROWSER_PROFILES_PROFILE_IMPL_IO_DATA_H_
+#define CHROME_BROWSER_PROFILES_PROFILE_IMPL_IO_DATA_H_
+#pragma once
+
+#include "base/basictypes.h"
+#include "base/ref_counted.h"
+#include "chrome/browser/profiles/profile_io_data.h"
+
+class ProfileImplIOData : public ProfileIOData {
+ public:
+ class Handle {
+ public:
+ explicit Handle(Profile* profile);
+ ~Handle();
+
+ bool HasMainRequestContext() const {
+ return main_request_context_getter_ != NULL;
+ }
+
+ // Init() must be called before ~Handle(). It records all the necessary
+ // parameters needed to construct a ChromeURLRequestContextGetter.
+ void Init(const FilePath& cookie_path,
+ const FilePath& cache_path,
+ int cache_max_size,
+ const FilePath& media_cache_path,
+ int media_cache_max_size,
+ const FilePath& extensions_cookie_path);
+
+ scoped_refptr<ChromeURLRequestContextGetter>
+ GetMainRequestContextGetter() const;
+ scoped_refptr<ChromeURLRequestContextGetter>
+ GetMediaRequestContextGetter() const;
+ scoped_refptr<ChromeURLRequestContextGetter>
+ GetExtensionsRequestContextGetter() const;
+
+ private:
+ // Lazily initialize ProfileParams. We do this on the calls to
+ // Get*RequestContextGetter(), so we only initialize ProfileParams right
+ // before posting a task to the IO thread to start using them. This prevents
+ // objects that are supposed to be deleted on the IO thread, but are created
+ // on the UI thread from being unnecessarily initialized.
+ void LazyInitialize() const;
+
+ // Ordering is important here. Do not reorder unless you know what you're
+ // doing. We need to release |io_data_| *before* the getters, because we
+ // want to make sure that the last reference for |io_data_| is on the IO
+ // thread. The getters will be deleted on the IO thread, so they will
+ // release their refs to their contexts, which will release the last refs to
+ // the ProfileIOData on the IO thread.
+ mutable scoped_refptr<ChromeURLRequestContextGetter>
+ main_request_context_getter_;
+ mutable scoped_refptr<ChromeURLRequestContextGetter>
+ media_request_context_getter_;
+ mutable scoped_refptr<ChromeURLRequestContextGetter>
+ extensions_request_context_getter_;
+ const scoped_refptr<ProfileImplIOData> io_data_;
+
+ Profile* const profile_;
+
+ mutable bool initialized_;
+
+ DISALLOW_COPY_AND_ASSIGN(Handle);
+ };
+
+ private:
+ friend class base::RefCountedThreadSafe<ProfileImplIOData>;
+
+ struct LazyParams {
+ LazyParams();
+ ~LazyParams();
+
+ // All of these parameters are intended to be read on the IO thread.
+ FilePath cookie_path;
+ FilePath cache_path;
+ int cache_max_size;
+ FilePath media_cache_path;
+ int media_cache_max_size;
+ FilePath extensions_cookie_path;
+ IOThread* io_thread;
+
+ ProfileParams profile_params;
+ };
+
+ ProfileImplIOData();
+ virtual ~ProfileImplIOData();
+
+ // Lazily initializes ProfileImplIOData.
+ virtual void LazyInitializeInternal() const;
+ virtual scoped_refptr<ChromeURLRequestContext>
+ AcquireMainRequestContext() const;
+ virtual scoped_refptr<ChromeURLRequestContext>
+ AcquireMediaRequestContext() const;
+ virtual scoped_refptr<ChromeURLRequestContext>
+ AcquireExtensionsRequestContext() const;
+
+ // Lazy initialization params.
+ mutable scoped_ptr<LazyParams> lazy_params_;
+
+ mutable scoped_refptr<RequestContext> main_request_context_;
+ mutable scoped_refptr<RequestContext> media_request_context_;
+ mutable scoped_refptr<RequestContext> extensions_request_context_;
+
+ mutable scoped_ptr<net::DnsCertProvenanceChecker> dns_cert_checker_;
+ mutable scoped_ptr<net::HttpTransactionFactory> main_http_factory_;
+ mutable scoped_ptr<net::HttpTransactionFactory> media_http_factory_;
+
+ DISALLOW_COPY_AND_ASSIGN(ProfileImplIOData);
+};
+
+#endif // CHROME_BROWSER_PROFILES_PROFILE_IMPL_IO_DATA_H_