15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_PROFILES_PROFILE_IMPL_IO_DATA_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_PROFILES_PROFILE_IMPL_IO_DATA_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/callback.h"
107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/containers/hash_tables.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/custom_handlers/protocol_handler_registry.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile_io_data.h"
14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/domain_reliability/clear_mode.h"
155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/public/browser/cookie_store_factory.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chrome_browser_net {
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class HttpServerPropertiesManager;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Predictor;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace chrome_browser_net
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace content {
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class CookieCryptoDelegate;
245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  // namespace content
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)namespace domain_reliability {
2723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)class DomainReliabilityMonitor;
2823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}  // namespace domain_reliability
2923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net {
31b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)class FtpTransactionFactory;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class HttpServerProperties;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class HttpTransactionFactory;
34f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class SDCHManager;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace net
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace quota {
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SpecialStoragePolicy;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace quota
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ProfileImplIOData : public ProfileIOData {
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  class Handle {
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   public:
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    explicit Handle(Profile* profile);
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ~Handle();
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // Init() must be called before ~Handle(). It records most of the
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // parameters needed to construct a ChromeURLRequestContextGetter.
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    void Init(const base::FilePath& cookie_path,
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              const base::FilePath& server_bound_cert_path,
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              const base::FilePath& cache_path,
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              int cache_max_size,
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              const base::FilePath& media_cache_path,
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              int media_cache_max_size,
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              const base::FilePath& extensions_cookie_path,
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              const base::FilePath& profile_path,
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              const base::FilePath& infinite_cache_path,
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              chrome_browser_net::Predictor* predictor,
605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)              content::CookieStoreConfig::SessionCookieMode
615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                  session_cookie_mode,
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              quota::SpecialStoragePolicy* special_storage_policy);
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // These Create*ContextGetter() functions are only exposed because the
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // circular relationship between Profile, ProfileIOData::Handle, and the
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // ChromeURLRequestContextGetter factories requires Profile be able to call
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // these functions.
68a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    scoped_refptr<ChromeURLRequestContextGetter> CreateMainRequestContextGetter(
69a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        content::ProtocolHandlerMap* protocol_handlers,
70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        content::URLRequestInterceptorScopedVector request_interceptors,
71a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        PrefService* local_state,
72a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        IOThread* io_thread) const;
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    scoped_refptr<ChromeURLRequestContextGetter>
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        CreateIsolatedAppRequestContextGetter(
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            const base::FilePath& partition_path,
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            bool in_memory,
77a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)            content::ProtocolHandlerMap* protocol_handlers,
78cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)            content::URLRequestInterceptorScopedVector
79cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                request_interceptors) const;
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content::ResourceContext* GetResourceContext() const;
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // GetResourceContextNoInit() does not call LazyInitialize() so it can be
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // safely be used during initialization.
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content::ResourceContext* GetResourceContextNoInit() const;
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_refptr<ChromeURLRequestContextGetter>
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GetMediaRequestContextGetter() const;
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_refptr<ChromeURLRequestContextGetter>
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GetExtensionsRequestContextGetter() const;
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_refptr<ChromeURLRequestContextGetter>
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GetIsolatedMediaRequestContextGetter(
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            const base::FilePath& partition_path,
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            bool in_memory) const;
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    // Returns the DevToolsNetworkController attached to ProfileIOData.
9546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    DevToolsNetworkController* GetDevToolsNetworkController() const;
9646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Deletes all network related data since |time|. It deletes transport
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // security state since |time| and also deletes HttpServerProperties data.
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Works asynchronously, however if the |completion| callback is non-null,
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // it will be posted on the UI thread once the removal process completes.
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void ClearNetworkingHistorySince(base::Time time,
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     const base::Closure& completion);
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
104cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    // Clears part or all of the state of the Domain Reliability Monitor. If
105cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    // |clear_contexts| is true, clears the (site-provided) contexts, which are
106cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    // cookie-esque; if it is false, clears only the (logged) beacons within
107cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    // them, which are history-esque.
108cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    void ClearDomainReliabilityMonitor(
109cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        domain_reliability::DomainReliabilityClearMode mode,
110cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        const base::Closure& completion);
111cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   private:
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    typedef std::map<StoragePartitionDescriptor,
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     scoped_refptr<ChromeURLRequestContextGetter>,
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     StoragePartitionDescriptorLess>
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ChromeURLRequestContextGetterMap;
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Lazily initialize ProfileParams. We do this on the calls to
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Get*RequestContextGetter(), so we only initialize ProfileParams right
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // before posting a task to the IO thread to start using them. This prevents
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // objects that are supposed to be deleted on the IO thread, but are created
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // on the UI thread from being unnecessarily initialized.
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void LazyInitialize() const;
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Ordering is important here. Do not reorder unless you know what you're
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // doing. We need to release |io_data_| *before* the getters, because we
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // want to make sure that the last reference for |io_data_| is on the IO
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // thread. The getters will be deleted on the IO thread, so they will
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // release their refs to their contexts, which will release the last refs to
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // the ProfileIOData on the IO thread.
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mutable scoped_refptr<ChromeURLRequestContextGetter>
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        main_request_context_getter_;
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mutable scoped_refptr<ChromeURLRequestContextGetter>
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        media_request_context_getter_;
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mutable scoped_refptr<ChromeURLRequestContextGetter>
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        extensions_request_context_getter_;
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mutable ChromeURLRequestContextGetterMap app_request_context_getter_map_;
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mutable ChromeURLRequestContextGetterMap
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        isolated_media_request_context_getter_map_;
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ProfileImplIOData* const io_data_;
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Profile* const profile_;
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mutable bool initialized_;
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DISALLOW_COPY_AND_ASSIGN(Handle);
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  friend class base::RefCountedThreadSafe<ProfileImplIOData>;
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  struct LazyParams {
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    LazyParams();
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ~LazyParams();
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // All of these parameters are intended to be read on the IO thread.
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    base::FilePath cookie_path;
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    base::FilePath server_bound_cert_path;
1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    base::FilePath cache_path;
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int cache_max_size;
1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    base::FilePath media_cache_path;
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int media_cache_max_size;
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    base::FilePath extensions_cookie_path;
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    base::FilePath infinite_cache_path;
1655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    content::CookieStoreConfig::SessionCookieMode session_cookie_mode;
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_refptr<quota::SpecialStoragePolicy> special_storage_policy;
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ProfileImplIOData();
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~ProfileImplIOData();
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void InitializeInternal(
1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ProfileParams* profile_params,
174a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      content::ProtocolHandlerMap* protocol_handlers,
175cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      content::URLRequestInterceptorScopedVector request_interceptors)
176a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)          const OVERRIDE;
1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void InitializeExtensionsRequestContext(
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ProfileParams* profile_params) const OVERRIDE;
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ChromeURLRequestContext* InitializeAppRequestContext(
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ChromeURLRequestContext* main_context,
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const StoragePartitionDescriptor& partition_descriptor,
1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      scoped_ptr<ProtocolHandlerRegistry::JobInterceptorFactory>
1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          protocol_handler_interceptor,
184a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      content::ProtocolHandlerMap* protocol_handlers,
185cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      content::URLRequestInterceptorScopedVector request_interceptors)
186a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)          const OVERRIDE;
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ChromeURLRequestContext* InitializeMediaRequestContext(
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ChromeURLRequestContext* original_context,
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const StoragePartitionDescriptor& partition_descriptor) const OVERRIDE;
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ChromeURLRequestContext*
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      AcquireMediaRequestContext() const OVERRIDE;
192a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual ChromeURLRequestContext* AcquireIsolatedAppRequestContext(
193a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      ChromeURLRequestContext* main_context,
194a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      const StoragePartitionDescriptor& partition_descriptor,
195a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      scoped_ptr<ProtocolHandlerRegistry::JobInterceptorFactory>
196a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)          protocol_handler_interceptor,
197a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      content::ProtocolHandlerMap* protocol_handlers,
198cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      content::URLRequestInterceptorScopedVector request_interceptors)
199a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)          const OVERRIDE;
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ChromeURLRequestContext*
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      AcquireIsolatedMediaRequestContext(
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ChromeURLRequestContext* app_context,
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          const StoragePartitionDescriptor& partition_descriptor)
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              const OVERRIDE;
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Deletes all network related data since |time|. It deletes transport
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // security state since |time| and also deletes HttpServerProperties data.
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Works asynchronously, however if the |completion| callback is non-null,
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // it will be posted on the UI thread once the removal process completes.
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ClearNetworkingHistorySinceOnIOThread(base::Time time,
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                             const base::Closure& completion);
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
213cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void ClearDomainReliabilityMonitorOnIOThread(
214cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      domain_reliability::DomainReliabilityClearMode mode,
215cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      const base::Closure& completion);
216cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Lazy initialization params.
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable scoped_ptr<LazyParams> lazy_params_;
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable scoped_ptr<net::HttpTransactionFactory> main_http_factory_;
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable scoped_ptr<net::FtpTransactionFactory> ftp_factory_;
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Same as |ProfileIOData::http_server_properties_|, owned there to maintain
2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // destruction ordering.
2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  mutable chrome_browser_net::HttpServerPropertiesManager*
2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    http_server_properties_manager_;
2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable scoped_ptr<chrome_browser_net::Predictor> predictor_;
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable scoped_ptr<ChromeURLRequestContext> media_request_context_;
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable scoped_ptr<net::URLRequestJobFactory> main_job_factory_;
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable scoped_ptr<net::URLRequestJobFactory> extensions_job_factory_;
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
23523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  mutable scoped_ptr<domain_reliability::DomainReliabilityMonitor>
23623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      domain_reliability_monitor_;
23723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
238f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  mutable scoped_ptr<net::SdchManager> sdch_manager_;
239f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Parameters needed for isolated apps.
2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath profile_path_;
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int app_cache_max_size_;
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int app_media_cache_max_size_;
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ProfileImplIOData);
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_PROFILES_PROFILE_IMPL_IO_DATA_H_
249