1/*
2 * Copyright 2010, The Android Open Source Project
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *  * Redistributions of source code must retain the above copyright
8 *    notice, this list of conditions and the following disclaimer.
9 *  * Redistributions in binary form must reproduce the above copyright
10 *    notice, this list of conditions and the following disclaimer in the
11 *    documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26// This class gathers state related to a single user profile.
27// On Android, we only use this for AutoFill so methods are mostly
28// just stubs.
29
30#ifndef ANDROID_AUTOFILL_PROFILE_H_
31#define ANDROID_AUTOFILL_PROFILE_H_
32
33#include "android/autofill/android_url_request_context_getter.h"
34#include "base/basictypes.h"
35#include "base/file_path.h"
36#include "base/memory/ref_counted.h"
37#include "base/scoped_ptr.h"
38#include "base/timer.h"
39#include "chrome/browser/prefs/pref_service.h"
40#include "chrome/browser/profiles/profile.h"
41
42namespace base {
43class Time;
44}
45
46namespace history {
47class TopSites;
48}
49
50namespace fileapi {
51class FileSystemContext;
52}
53
54namespace net {
55class TransportSecurityState;
56class SSLConfigService;
57}
58
59namespace policy {
60class ProfilePolicyContext;
61}
62
63namespace prerender {
64class PrerenderManager;
65}
66
67namespace webkit_database {
68class DatabaseTracker;
69}
70
71class AutocompleteClassifier;
72class BackgroundContentsService;
73class BookmarkModel;
74class BrowserSignin;
75class BrowserThemeProvider;
76class ChromeURLRequestContextGetter;
77class DesktopNotificationService;
78class DownloadManager;
79class Extension;
80class ExtensionDevToolsManager;
81class ExtensionIOEventRouter;
82class ExtensionProcessManager;
83class ExtensionMessageService;
84class ExtensionsService;
85class FaviconService;
86class FindBarState;
87class GeolocationContentSettingsMap;
88class GeolocationPermissionContext;
89class HistoryService;
90class HostContentSettingsMap;
91class HostZoomMap;
92class NavigationController;
93class NTPResourceCache;
94class PasswordStore;
95class PersonalDataManager;
96class PinnedTabService;
97class PrefProxyConfigTracker;
98class PromoCounter;
99class ProfileSyncService;
100class ProfileSyncFactory;
101class SessionService;
102class SpellCheckHost;
103class SSLConfigServiceManager;
104class SSLHostState;
105class TransportSecurityPersister;
106class SQLitePersistentCookieStore;
107class TabRestoreService;
108class TemplateURLFetcher;
109class TemplateURLModel;
110class ThemeProvider;
111class TokenService;
112class URLRequestContextGetter;
113class UserScriptMaster;
114class UserStyleSheetWatcher;
115class VisitedLinkMaster;
116class VisitedLinkEventListener;
117class WebDataService;
118class WebKitContext;
119class WebResourceService;
120class CloudPrintProxyService;
121
122typedef intptr_t ProfileId;
123
124// The android profile implementation.
125class ProfileImplAndroid : public Profile {
126 public:
127  virtual ~ProfileImplAndroid();
128
129  void SetRequestContext(net::URLRequestContextGetter* context) { url_request_context_getter_ = context; }
130
131  // Profile implementation.
132  virtual Profile* GetOriginalProfile();
133  virtual PersonalDataManager* GetPersonalDataManager();
134  virtual PrefService* GetPrefs();
135  virtual FilePath GetPath() { return path_; }
136  virtual net::URLRequestContextGetter* GetRequestContext();
137
138  // Functions from Profile that we don't need on Android for AutoFill.
139  virtual ProfileId GetRuntimeId() { NOTREACHED(); return 0; }
140  virtual bool IsOffTheRecord() { NOTREACHED(); return false; }
141  virtual Profile* GetOffTheRecordProfile() { NOTREACHED(); return NULL; }
142  virtual void DestroyOffTheRecordProfile() { NOTREACHED(); }
143  virtual bool HasOffTheRecordProfile() { NOTREACHED(); return false; }
144  virtual ChromeAppCacheService* GetAppCacheService() { NOTREACHED(); return NULL; }
145  virtual webkit_database::DatabaseTracker* GetDatabaseTracker() { NOTREACHED(); return NULL; }
146  virtual history::TopSites* GetTopSites() { NOTREACHED(); return NULL; }
147  virtual VisitedLinkMaster* GetVisitedLinkMaster() { NOTREACHED(); return NULL; }
148  virtual UserScriptMaster* GetUserScriptMaster() { NOTREACHED(); return NULL; }
149  virtual SSLHostState* GetSSLHostState() { NOTREACHED(); return NULL; }
150  virtual net::TransportSecurityState* GetTransportSecurityState() { NOTREACHED(); return NULL; }
151  virtual ExtensionsService* GetExtensionsService() { NOTREACHED(); return NULL; }
152  virtual ExtensionDevToolsManager* GetExtensionDevToolsManager() { NOTREACHED(); return NULL; }
153  virtual ExtensionProcessManager* GetExtensionProcessManager() { NOTREACHED(); return NULL; }
154  virtual ExtensionMessageService* GetExtensionMessageService() { NOTREACHED(); return NULL; }
155  virtual ExtensionEventRouter* GetExtensionEventRouter() { NOTREACHED(); return NULL; }
156  virtual ExtensionIOEventRouter* GetExtensionIOEventRouter() { NOTREACHED(); return NULL; };
157  virtual ExtensionService* GetExtensionService() { NOTREACHED(); return NULL; }
158  virtual ExtensionSpecialStoragePolicy* GetExtensionSpecialStoragePolicy() { NOTREACHED(); return NULL; }
159  virtual FaviconService* GetFaviconService(ServiceAccessType sat) { NOTREACHED(); return NULL; }
160  virtual HistoryService* GetHistoryService(ServiceAccessType sat) { NOTREACHED(); return NULL; }
161  virtual HistoryService* GetHistoryServiceWithoutCreating() { NOTREACHED(); return NULL; }
162  virtual AutocompleteClassifier* GetAutocompleteClassifier() { NOTREACHED(); return NULL; }
163  virtual WebDataService* GetWebDataService(ServiceAccessType sat) { NOTREACHED(); return NULL; }
164  virtual WebDataService* GetWebDataServiceWithoutCreating() { NOTREACHED(); return NULL; }
165  virtual PasswordStore* GetPasswordStore(ServiceAccessType sat) { NOTREACHED(); return NULL; }
166  virtual ProtocolHandlerRegistry* GetProtocolHandlerRegistry() { NOTREACHED(); return NULL; }
167  virtual PrefService* GetOffTheRecordPrefs() { NOTREACHED(); return NULL; }
168  virtual policy::ProfilePolicyConnector* GetPolicyConnector() { NOTREACHED(); return NULL; }
169  virtual TemplateURLModel* GetTemplateURLModel() { NOTREACHED(); return NULL; }
170  virtual TemplateURLFetcher* GetTemplateURLFetcher() { NOTREACHED(); return NULL; }
171  virtual DownloadManager* GetDownloadManager() { NOTREACHED(); return NULL; }
172  virtual fileapi::FileSystemContext* GetFileSystemContext() { NOTREACHED(); return NULL; }
173  virtual void InitPromoResources() { NOTREACHED(); }
174  virtual void InitRegisteredProtocolHandlers() { NOTREACHED(); }
175  virtual void InitThemes() { NOTREACHED(); }
176  virtual void SetTheme(const Extension* extension) { NOTREACHED(); }
177  virtual void SetNativeTheme() { NOTREACHED(); }
178  virtual void ClearTheme() { NOTREACHED(); }
179  virtual const Extension* GetTheme() { NOTREACHED(); return NULL; }
180  virtual BrowserThemeProvider* GetThemeProvider()  { NOTREACHED(); return NULL; }
181  virtual bool HasCreatedDownloadManager() const { NOTREACHED(); return false; }
182  virtual net::URLRequestContextGetter* GetRequestContextForMedia()  { NOTREACHED(); return NULL; }
183  virtual net::URLRequestContextGetter* GetRequestContextForExtensions()  { NOTREACHED(); return NULL; }
184  virtual void RegisterExtensionWithRequestContexts(const Extension* extension) { NOTREACHED(); }
185  virtual void UnregisterExtensionWithRequestContexts(const Extension* extension) { NOTREACHED(); }
186  virtual net::SSLConfigService* GetSSLConfigService()  { NOTREACHED(); return NULL; }
187  virtual HostContentSettingsMap* GetHostContentSettingsMap()  { NOTREACHED(); return NULL; }
188  virtual HostZoomMap* GetHostZoomMap()  { NOTREACHED(); return NULL; }
189  virtual GeolocationContentSettingsMap* GetGeolocationContentSettingsMap()  { NOTREACHED(); return NULL; }
190  virtual GeolocationPermissionContext* GetGeolocationPermissionContext()  { NOTREACHED(); return NULL; }
191  virtual UserStyleSheetWatcher* GetUserStyleSheetWatcher()  { NOTREACHED(); return NULL; }
192  virtual FindBarState* GetFindBarState()  { NOTREACHED(); return NULL; }
193  virtual SessionService* GetSessionService()  { NOTREACHED(); return NULL; }
194  virtual void ShutdownSessionService() { NOTREACHED(); }
195  virtual bool HasSessionService() const { NOTREACHED(); return false; }
196  virtual bool DidLastSessionExitCleanly() { NOTREACHED(); return true; }
197  virtual BookmarkModel* GetBookmarkModel()  { NOTREACHED(); return NULL; }
198  virtual bool IsSameProfile(Profile* profile) { NOTREACHED(); return false; }
199  virtual base::Time GetStartTime() const  { NOTREACHED(); return base::Time(); }
200  virtual TabRestoreService* GetTabRestoreService()  { NOTREACHED(); return NULL; }
201  virtual void ResetTabRestoreService() { NOTREACHED(); }
202  virtual SpellCheckHost* GetSpellCheckHost()  { NOTREACHED(); return NULL; }
203  virtual void ReinitializeSpellCheckHost(bool force) { NOTREACHED(); }
204  virtual WebKitContext* GetWebKitContext()  { NOTREACHED(); return NULL; }
205  virtual DesktopNotificationService* GetDesktopNotificationService() { NOTREACHED(); return NULL; }
206  virtual BackgroundContentsService* GetBackgroundContentsService() const { NOTREACHED(); return NULL; }
207  virtual StatusTray* GetStatusTray() { NOTREACHED(); return NULL; }
208  virtual void MarkAsCleanShutdown() { NOTREACHED(); }
209  virtual void InitExtensions(bool extensions_enabled) { NOTREACHED(); }
210  virtual void InitWebResources() { NOTREACHED(); }
211  virtual NTPResourceCache* GetNTPResourceCache()  { NOTREACHED(); return NULL; }
212  virtual FilePath last_selected_directory() { NOTREACHED(); return FilePath(""); }
213  virtual void set_last_selected_directory(const FilePath& path) { NOTREACHED(); }
214  virtual ChromeBlobStorageContext* GetBlobStorageContext() { NOTREACHED(); return NULL; }
215  virtual ExtensionInfoMap* GetExtensionInfoMap() { NOTREACHED(); return NULL; }
216  virtual PromoCounter* GetInstantPromoCounter() { NOTREACHED(); return NULL; }
217  virtual ProfileSyncService* GetProfileSyncService()  { NOTREACHED();  return NULL; }
218  virtual ProfileSyncService* GetProfileSyncService(const std::string&) { NOTREACHED(); return NULL; }
219  virtual TokenService* GetTokenService()  { NOTREACHED(); return NULL; }
220  void InitSyncService() { NOTREACHED(); }
221  virtual CloudPrintProxyService* GetCloudPrintProxyService()  { NOTREACHED(); return NULL; }
222  void InitCloudPrintProxyService() { NOTREACHED(); }
223
224  virtual history::TopSites* GetTopSitesWithoutCreating() { NOTREACHED(); return NULL; }
225  virtual BrowserSignin* GetBrowserSignin() { NOTREACHED(); return NULL; }
226  virtual bool HasProfileSyncService() const { NOTREACHED(); return false; }
227
228  virtual policy::ProfilePolicyContext* GetPolicyContext() { NOTREACHED(); return NULL; }
229  virtual ChromeURLDataManager* GetChromeURLDataManager() { NOTREACHED(); return NULL; }
230  virtual PrefProxyConfigTracker* GetProxyConfigTracker() { NOTREACHED(); return NULL; }
231  virtual prerender::PrerenderManager* GetPrerenderManager() { NOTREACHED(); return NULL; }
232  virtual net::URLRequestContextGetter* GetRequestContextForPossibleApp(
233      const Extension* installed_app) { NOTREACHED(); return NULL; }
234  virtual net::URLRequestContextGetter* GetRequestContextForIsolatedApp(
235      const std::string& app_id) { NOTREACHED(); return NULL; }
236
237 private:
238  friend class Profile;
239
240  explicit ProfileImplAndroid(const FilePath& path);
241
242  void CreateWebDataService() { NOTREACHED(); }
243  FilePath GetPrefFilePath() { return path_; }
244
245  void CreatePasswordStore() { NOTREACHED(); }
246
247  void StopCreateSessionServiceTimer() { NOTREACHED(); }
248
249  void EnsureRequestContextCreated() {
250    GetRequestContext();
251  }
252
253  void EnsureSessionServiceCreated() {
254    GetSessionService();
255  }
256
257  FilePath path_;
258  scoped_ptr<PrefService> preferences_;
259  scoped_refptr<PersonalDataManager> personal_data_;
260  scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_;
261
262  DISALLOW_COPY_AND_ASSIGN(ProfileImplAndroid);
263};
264
265#endif  // CHROME_BROWSER_PROFILE_H_
266