blob: 73bc95d33a50c4ceea65ed185eb11caccd37163e [file] [log] [blame]
sdefresnef40c65a2014-11-13 12:25:021// Copyright 2013 The Chromium Authors. All rights reserved.
sdefresnea010b6d2014-11-12 09:32:202// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef IOS_WEB_PUBLIC_BROWSER_STATE_H_
6#define IOS_WEB_PUBLIC_BROWSER_STATE_H_
7
8#include "base/supports_user_data.h"
9
sdefresne6f95f8f2014-11-21 11:21:1010namespace base {
11class FilePath;
12}
13
sdefresnea010b6d2014-11-12 09:32:2014namespace net {
15class URLRequestContextGetter;
16}
17
18namespace web {
shreyasve8d5f062015-05-26 20:21:4219class ActiveStateManager;
stuartmorgand7f6a672015-03-31 22:01:1320class CertificatePolicyCache;
stuartmorganf0e19f912015-04-29 06:01:0121class URLDataManagerIOS;
22class URLDataManagerIOSBackend;
23class URLRequestChromeJob;
sdefresnea010b6d2014-11-12 09:32:2024
25// This class holds the context needed for a browsing session.
26// It lives on the UI thread. All these methods must only be called on the UI
27// thread.
28class BrowserState : public base::SupportsUserData {
29 public:
sdefresnedb52bdf2014-11-13 09:20:3230 ~BrowserState() override;
sdefresnea010b6d2014-11-12 09:32:2031
stuartmorgand7f6a672015-03-31 22:01:1332 // static
33 static scoped_refptr<CertificatePolicyCache> GetCertificatePolicyCache(
34 BrowserState* browser_state);
35
sdefresne6eaff4f2015-12-29 17:11:4036 // Returns whether |browser_state| has an associated ActiveStateManager.
37 // Must only be accessed from main thread.
38 static bool HasActiveStateManager(BrowserState* browser_state);
39
shreyasve8d5f062015-05-26 20:21:4240 // Returns the ActiveStateManager associated with |browser_state.|
41 // Lazily creates one if an ActiveStateManager is not already associated with
42 // the |browser_state|. |browser_state| cannot be a nullptr. Must be accessed
43 // only from the main thread.
44 static ActiveStateManager* GetActiveStateManager(BrowserState* browser_state);
45
sdefresne6f95f8f2014-11-21 11:21:1046 // Returns whether this BrowserState is incognito. Default is false.
sdefresnea010b6d2014-11-12 09:32:2047 virtual bool IsOffTheRecord() const = 0;
48
sdefresne6f95f8f2014-11-21 11:21:1049 // Returns the path where the BrowserState data is stored.
sdefresne2bbdeed2015-03-02 14:24:2650 // Unlike Profile::GetPath(), incognito BrowserState do not share their path
51 // with their original BrowserState.
52 virtual base::FilePath GetStatePath() const = 0;
sdefresne6f95f8f2014-11-21 11:21:1053
sdefresnea010b6d2014-11-12 09:32:2054 // Returns the request context information associated with this
55 // BrowserState.
56 virtual net::URLRequestContextGetter* GetRequestContext() = 0;
57
sdefresneb30864ac2014-11-21 12:40:5258 // Safely cast a base::SupportsUserData to a BrowserState. Returns nullptr
59 // if |supports_user_data| is not a BrowserState.
60 static BrowserState* FromSupportsUserData(
61 base::SupportsUserData* supports_user_data);
62
sdefresnea010b6d2014-11-12 09:32:2063 protected:
64 BrowserState();
stuartmorganf0e19f912015-04-29 06:01:0165
66 private:
67 friend class URLDataManagerIOS;
68 friend class URLRequestChromeJob;
69
70 // Returns the URLDataManagerIOSBackend instance associated with this
71 // BrowserState, creating it if necessary. Should only be called on the IO
72 // thread.
73 // Not intended for usage outside of //web.
74 URLDataManagerIOSBackend* GetURLDataManagerIOSBackendOnIOThread();
75
76 // The URLDataManagerIOSBackend instance associated with this BrowserState.
77 // Created and destroyed on the IO thread, and should be accessed only from
78 // the IO thread.
79 URLDataManagerIOSBackend* url_data_manager_ios_backend_;
sdefresnea010b6d2014-11-12 09:32:2080};
81
82} // namespace web
83
84#endif // IOS_WEB_PUBLIC_BROWSER_STATE_H_