1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
|
// Copyright 2019 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 WEBLAYER_BROWSER_PROFILE_IMPL_H_
#define WEBLAYER_BROWSER_PROFILE_IMPL_H_
#include <set>
#include "base/files/file_path.h"
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "build/build_config.h"
#include "weblayer/browser/i18n_util.h"
#include "weblayer/browser/profile_disk_operations.h"
#include "weblayer/public/profile.h"
#if defined(OS_ANDROID)
#include <jni.h>
#include "base/android/scoped_java_ref.h"
#endif
namespace content {
class BrowserContext;
}
namespace weblayer {
class BrowserContextImpl;
class CookieManagerImpl;
class ProfileImpl : public Profile {
public:
// Return the cache directory path for this BrowserContext. On some
// platforms, file in cache directory may be deleted by the operating
// system. So it is suitable for storing data that can be recreated such
// as caches.
// |context| must not be null.
static base::FilePath GetCachePath(content::BrowserContext* context);
static std::unique_ptr<ProfileImpl> DestroyAndDeleteDataFromDisk(
std::unique_ptr<ProfileImpl> profile,
base::OnceClosure done_callback);
explicit ProfileImpl(const std::string& name);
~ProfileImpl() override;
// Returns the ProfileImpl from the specified BrowserContext.
static ProfileImpl* FromBrowserContext(
content::BrowserContext* browser_context);
static std::set<ProfileImpl*> GetAllProfiles();
// Allows getting notified when profiles are created or destroyed.
class ProfileObserver {
public:
virtual void ProfileCreated(ProfileImpl* profile) {}
virtual void ProfileDestroyed(ProfileImpl* profile) {}
protected:
virtual ~ProfileObserver() = default;
};
static void AddProfileObserver(ProfileObserver* observer);
static void RemoveProfileObserver(ProfileObserver* observer);
BrowserContextImpl* GetBrowserContext();
// Called when the download subsystem has finished initializing. By this point
// information about downloads that were interrupted by a previous crash would
// be available.
void DownloadsInitialized();
// Path data is stored at, empty if off-the-record.
const base::FilePath& data_path() const { return info_.data_path; }
const std::string& name() const { return info_.name; }
DownloadDelegate* download_delegate() { return download_delegate_; }
// Profile implementation:
void ClearBrowsingData(const std::vector<BrowsingDataType>& data_types,
base::Time from_time,
base::Time to_time,
base::OnceClosure callback) override;
void SetDownloadDirectory(const base::FilePath& directory) override;
void SetDownloadDelegate(DownloadDelegate* delegate) override;
CookieManager* GetCookieManager() override;
void GetBrowserPersistenceIds(
base::OnceCallback<void(base::flat_set<std::string>)> callback) override;
void RemoveBrowserPersistenceStorage(
base::OnceCallback<void(bool)> done_callback,
base::flat_set<std::string> ids) override;
void SetBooleanSetting(SettingType type, bool value) override;
bool GetBooleanSetting(SettingType type) override;
void PrepareForPossibleCrossOriginNavigation() override;
#if defined(OS_ANDROID)
ProfileImpl(JNIEnv* env,
const base::android::JavaParamRef<jstring>& path,
const base::android::JavaParamRef<jobject>& java_profile);
jint GetNumBrowserImpl(JNIEnv* env);
jlong GetBrowserContext(JNIEnv* env);
void DestroyAndDeleteDataFromDisk(
JNIEnv* env,
const base::android::JavaRef<jobject>& j_completion_callback);
void ClearBrowsingData(
JNIEnv* env,
const base::android::JavaParamRef<jintArray>& j_data_types,
const jlong j_from_time_millis,
const jlong j_to_time_millis,
const base::android::JavaRef<jobject>& j_callback);
void SetDownloadDirectory(
JNIEnv* env,
const base::android::JavaParamRef<jstring>& directory);
jlong GetCookieManager(JNIEnv* env);
void EnsureBrowserContextInitialized(JNIEnv* env);
void SetBooleanSetting(JNIEnv* env, jint j_type, jboolean j_value);
jboolean GetBooleanSetting(JNIEnv* env, jint j_type);
void GetBrowserPersistenceIds(
JNIEnv* env,
const base::android::JavaRef<jobject>& j_callback);
void RemoveBrowserPersistenceStorage(
JNIEnv* env,
const base::android::JavaRef<jobjectArray>& j_ids,
const base::android::JavaRef<jobject>& j_callback);
void PrepareForPossibleCrossOriginNavigation(JNIEnv* env);
#endif
const base::FilePath& download_directory() { return download_directory_; }
// Get the directory where BrowserPersister stores tab state data. This will
// be a real file path even for the off-the-record profile.
base::FilePath GetBrowserPersisterDataBaseDir() const;
private:
class DataClearer;
static void OnProfileMarked(std::unique_ptr<ProfileImpl> profile,
base::OnceClosure done_callback);
static void NukeDataAfterRemovingData(std::unique_ptr<ProfileImpl> profile,
base::OnceClosure done_callback);
static void DoNukeData(std::unique_ptr<ProfileImpl> profile,
base::OnceClosure done_callback);
void ClearRendererCache();
// Callback when the system locale has been updated.
void OnLocaleChanged();
// Returns the number of Browsers with this profile.
int GetNumberOfBrowsers();
ProfileInfo info_;
std::unique_ptr<BrowserContextImpl> browser_context_;
base::FilePath download_directory_;
DownloadDelegate* download_delegate_ = nullptr;
std::unique_ptr<i18n::LocaleChangeSubscription> locale_change_subscription_;
std::unique_ptr<CookieManagerImpl> cookie_manager_;
#if defined(OS_ANDROID)
base::android::ScopedJavaGlobalRef<jobject> java_profile_;
#endif
DISALLOW_COPY_AND_ASSIGN(ProfileImpl);
};
} // namespace weblayer
#endif // WEBLAYER_BROWSER_PROFILE_IMPL_H_
|