OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CHROME_BROWSER_PROFILES_PROFILE_IO_DATA_H_ | 5 #ifndef CHROME_BROWSER_PROFILES_PROFILE_IO_DATA_H_ |
6 #define CHROME_BROWSER_PROFILES_PROFILE_IO_DATA_H_ | 6 #define CHROME_BROWSER_PROFILES_PROFILE_IO_DATA_H_ |
7 #pragma once | 7 #pragma once |
8 | 8 |
9 #include <string> | 9 #include <string> |
10 | 10 |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
78 scoped_refptr<ChromeURLRequestContext> GetMediaRequestContext() const; | 78 scoped_refptr<ChromeURLRequestContext> GetMediaRequestContext() const; |
79 scoped_refptr<ChromeURLRequestContext> GetExtensionsRequestContext() const; | 79 scoped_refptr<ChromeURLRequestContext> GetExtensionsRequestContext() const; |
80 scoped_refptr<ChromeURLRequestContext> GetIsolatedAppRequestContext( | 80 scoped_refptr<ChromeURLRequestContext> GetIsolatedAppRequestContext( |
81 scoped_refptr<ChromeURLRequestContext> main_context, | 81 scoped_refptr<ChromeURLRequestContext> main_context, |
82 const std::string& app_id) const; | 82 const std::string& app_id) const; |
83 | 83 |
84 // These are useful when the Chrome layer is called from the content layer | 84 // These are useful when the Chrome layer is called from the content layer |
85 // with a content::ResourceContext, and they want access to Chrome data for | 85 // with a content::ResourceContext, and they want access to Chrome data for |
86 // that profile. | 86 // that profile. |
87 ExtensionInfoMap* GetExtensionInfoMap() const; | 87 ExtensionInfoMap* GetExtensionInfoMap() const; |
88 HostContentSettingsMap* GetHostContentSettingsMap() const; | |
89 CookieSettings* GetCookieSettings() const; | 88 CookieSettings* GetCookieSettings() const; |
90 | 89 |
91 #if defined(ENABLE_NOTIFICATIONS) | 90 #if defined(ENABLE_NOTIFICATIONS) |
92 DesktopNotificationService* GetNotificationService() const; | 91 DesktopNotificationService* GetNotificationService() const; |
93 #endif | 92 #endif |
94 | 93 |
95 BooleanPrefMember* clear_local_state_on_exit() const { | 94 BooleanPrefMember* clear_local_state_on_exit() const { |
96 return &clear_local_state_on_exit_; | 95 return &clear_local_state_on_exit_; |
97 } | 96 } |
98 | 97 |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
135 ProfileParams(); | 134 ProfileParams(); |
136 ~ProfileParams(); | 135 ~ProfileParams(); |
137 | 136 |
138 FilePath path; | 137 FilePath path; |
139 bool is_incognito; | 138 bool is_incognito; |
140 bool clear_local_state_on_exit; | 139 bool clear_local_state_on_exit; |
141 std::string accept_language; | 140 std::string accept_language; |
142 std::string accept_charset; | 141 std::string accept_charset; |
143 std::string referrer_charset; | 142 std::string referrer_charset; |
144 IOThread* io_thread; | 143 IOThread* io_thread; |
145 scoped_refptr<HostContentSettingsMap> host_content_settings_map; | |
146 scoped_refptr<CookieSettings> cookie_settings; | 144 scoped_refptr<CookieSettings> cookie_settings; |
147 scoped_refptr<net::SSLConfigService> ssl_config_service; | 145 scoped_refptr<net::SSLConfigService> ssl_config_service; |
148 scoped_refptr<net::CookieMonster::Delegate> cookie_monster_delegate; | 146 scoped_refptr<net::CookieMonster::Delegate> cookie_monster_delegate; |
149 scoped_refptr<ExtensionInfoMap> extension_info_map; | 147 scoped_refptr<ExtensionInfoMap> extension_info_map; |
150 | 148 |
151 #if defined(ENABLE_NOTIFICATIONS) | 149 #if defined(ENABLE_NOTIFICATIONS) |
152 DesktopNotificationService* notification_service; | 150 DesktopNotificationService* notification_service; |
153 #endif | 151 #endif |
154 | 152 |
155 scoped_refptr<ProtocolHandlerRegistry> protocol_handler_registry; | 153 scoped_refptr<ProtocolHandlerRegistry> protocol_handler_registry; |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
210 return job_factory_.get(); | 208 return job_factory_.get(); |
211 } | 209 } |
212 | 210 |
213 void set_http_server_properties_manager( | 211 void set_http_server_properties_manager( |
214 chrome_browser_net::HttpServerPropertiesManager* manager) const; | 212 chrome_browser_net::HttpServerPropertiesManager* manager) const; |
215 | 213 |
216 ChromeURLRequestContext* main_request_context() const { | 214 ChromeURLRequestContext* main_request_context() const { |
217 return main_request_context_; | 215 return main_request_context_; |
218 } | 216 } |
219 | 217 |
| 218 // Destroys the ResourceContext first, to cancel any URLRequests that are |
| 219 // using it still, before we destroy the member variables that those |
| 220 // URLRequests may be accessing. |
| 221 void DestroyResourceContext(); |
| 222 |
220 private: | 223 private: |
221 class ResourceContext : public content::ResourceContext { | 224 class ResourceContext : public content::ResourceContext { |
222 public: | 225 public: |
223 explicit ResourceContext(ProfileIOData* io_data); | 226 explicit ResourceContext(ProfileIOData* io_data); |
224 virtual ~ResourceContext(); | 227 virtual ~ResourceContext(); |
225 | 228 |
| 229 // ResourceContext implementation: |
| 230 virtual net::HostResolver* GetHostResolver() OVERRIDE; |
| 231 virtual net::URLRequestContext* GetRequestContext() OVERRIDE; |
| 232 |
226 private: | 233 private: |
227 friend class ProfileIOData; | 234 friend class ProfileIOData; |
228 | 235 |
229 // ResourceContext implementation: | |
230 virtual net::HostResolver* GetHostResolver() OVERRIDE; | |
231 virtual net::URLRequestContext* GetRequestContext() OVERRIDE; | |
232 void EnsureInitialized(); | 236 void EnsureInitialized(); |
233 | 237 |
234 ProfileIOData* const io_data_; | 238 ProfileIOData* const io_data_; |
235 | 239 |
236 net::HostResolver* host_resolver_; | 240 net::HostResolver* host_resolver_; |
237 net::URLRequestContext* request_context_; | 241 net::URLRequestContext* request_context_; |
238 }; | 242 }; |
239 | 243 |
240 typedef base::hash_map<std::string, scoped_refptr<ChromeURLRequestContext> > | 244 typedef base::hash_map<std::string, scoped_refptr<ChromeURLRequestContext> > |
241 AppRequestContextMap; | 245 AppRequestContextMap; |
(...skipping 14 matching lines...) Expand all Loading... |
256 | 260 |
257 // These functions are used to transfer ownership of the lazily initialized | 261 // These functions are used to transfer ownership of the lazily initialized |
258 // context from ProfileIOData to the URLRequestContextGetter. | 262 // context from ProfileIOData to the URLRequestContextGetter. |
259 virtual scoped_refptr<ChromeURLRequestContext> | 263 virtual scoped_refptr<ChromeURLRequestContext> |
260 AcquireMediaRequestContext() const = 0; | 264 AcquireMediaRequestContext() const = 0; |
261 virtual scoped_refptr<ChromeURLRequestContext> | 265 virtual scoped_refptr<ChromeURLRequestContext> |
262 AcquireIsolatedAppRequestContext( | 266 AcquireIsolatedAppRequestContext( |
263 scoped_refptr<ChromeURLRequestContext> main_context, | 267 scoped_refptr<ChromeURLRequestContext> main_context, |
264 const std::string& app_id) const = 0; | 268 const std::string& app_id) const = 0; |
265 | 269 |
| 270 // The order *DOES* matter for the majority of these member variables, so |
| 271 // don't move them around unless you know what you're doing! |
| 272 // General rules: |
| 273 // * ResourceContext references the URLRequestContexts, so |
| 274 // URLRequestContexts must outlive ResourceContext, hence ResourceContext |
| 275 // should be destroyed first. |
| 276 // * URLRequestContexts reference a whole bunch of members, so |
| 277 // URLRequestContext needs to be destroyed before them. |
| 278 // * Therefore, ResourceContext should be listed last, and then the |
| 279 // URLRequestContexts, and then the URLRequestContext members. |
| 280 // * Note that URLRequestContext members have a directed dependency graph |
| 281 // too, so they must themselves be ordered correctly. |
| 282 |
266 // Tracks whether or not we've been lazily initialized. | 283 // Tracks whether or not we've been lazily initialized. |
267 mutable bool initialized_; | 284 mutable bool initialized_; |
268 | 285 |
269 // Data from the UI thread from the Profile, used to initialize ProfileIOData. | 286 // Data from the UI thread from the Profile, used to initialize ProfileIOData. |
270 // Deleted after lazy initialization. | 287 // Deleted after lazy initialization. |
271 mutable scoped_ptr<ProfileParams> profile_params_; | 288 mutable scoped_ptr<ProfileParams> profile_params_; |
272 | 289 |
273 // Member variables which are pointed to by the various context objects. | 290 // Member variables which are pointed to by the various context objects. |
274 mutable BooleanPrefMember enable_referrers_; | 291 mutable BooleanPrefMember enable_referrers_; |
275 mutable BooleanPrefMember clear_local_state_on_exit_; | 292 mutable BooleanPrefMember clear_local_state_on_exit_; |
(...skipping 10 matching lines...) Expand all Loading... |
286 mutable scoped_ptr<net::ServerBoundCertService> server_bound_cert_service_; | 303 mutable scoped_ptr<net::ServerBoundCertService> server_bound_cert_service_; |
287 mutable scoped_ptr<net::NetworkDelegate> network_delegate_; | 304 mutable scoped_ptr<net::NetworkDelegate> network_delegate_; |
288 mutable scoped_ptr<net::FraudulentCertificateReporter> | 305 mutable scoped_ptr<net::FraudulentCertificateReporter> |
289 fraudulent_certificate_reporter_; | 306 fraudulent_certificate_reporter_; |
290 mutable scoped_ptr<net::ProxyService> proxy_service_; | 307 mutable scoped_ptr<net::ProxyService> proxy_service_; |
291 mutable scoped_ptr<net::TransportSecurityState> transport_security_state_; | 308 mutable scoped_ptr<net::TransportSecurityState> transport_security_state_; |
292 mutable scoped_ptr<net::URLRequestJobFactory> job_factory_; | 309 mutable scoped_ptr<net::URLRequestJobFactory> job_factory_; |
293 mutable scoped_ptr<chrome_browser_net::HttpServerPropertiesManager> | 310 mutable scoped_ptr<chrome_browser_net::HttpServerPropertiesManager> |
294 http_server_properties_manager_; | 311 http_server_properties_manager_; |
295 | 312 |
296 // Pointed to by ResourceContext. | |
297 | |
298 // TODO(willchan): Remove from ResourceContext. | |
299 mutable scoped_refptr<ExtensionInfoMap> extension_info_map_; | |
300 mutable scoped_refptr<HostContentSettingsMap> host_content_settings_map_; | |
301 mutable scoped_refptr<CookieSettings> cookie_settings_; | |
302 | |
303 #if defined(ENABLE_NOTIFICATIONS) | 313 #if defined(ENABLE_NOTIFICATIONS) |
304 mutable DesktopNotificationService* notification_service_; | 314 mutable DesktopNotificationService* notification_service_; |
305 #endif | 315 #endif |
306 | 316 |
307 mutable ResourceContext resource_context_; | |
308 | |
309 mutable scoped_ptr<TransportSecurityPersister> | 317 mutable scoped_ptr<TransportSecurityPersister> |
310 transport_security_persister_; | 318 transport_security_persister_; |
311 | 319 |
312 // These are only valid in between LazyInitialize() and their accessor being | 320 // These are only valid in between LazyInitialize() and their accessor being |
313 // called. | 321 // called. |
314 mutable scoped_refptr<ChromeURLRequestContext> main_request_context_; | 322 mutable scoped_refptr<ChromeURLRequestContext> main_request_context_; |
315 mutable scoped_refptr<ChromeURLRequestContext> extensions_request_context_; | 323 mutable scoped_refptr<ChromeURLRequestContext> extensions_request_context_; |
316 // One AppRequestContext per isolated app. | 324 // One AppRequestContext per isolated app. |
317 mutable AppRequestContextMap app_request_context_map_; | 325 mutable AppRequestContextMap app_request_context_map_; |
318 | 326 |
| 327 mutable scoped_ptr<ResourceContext> resource_context_; |
| 328 |
| 329 mutable scoped_refptr<ExtensionInfoMap> extension_info_map_; |
| 330 mutable scoped_refptr<CookieSettings> cookie_settings_; |
| 331 |
319 // TODO(jhawkins): Remove once crbug.com/102004 is fixed. | 332 // TODO(jhawkins): Remove once crbug.com/102004 is fixed. |
320 bool initialized_on_UI_thread_; | 333 bool initialized_on_UI_thread_; |
321 | 334 |
322 DISALLOW_COPY_AND_ASSIGN(ProfileIOData); | 335 DISALLOW_COPY_AND_ASSIGN(ProfileIOData); |
323 }; | 336 }; |
324 | 337 |
325 #endif // CHROME_BROWSER_PROFILES_PROFILE_IO_DATA_H_ | 338 #endif // CHROME_BROWSER_PROFILES_PROFILE_IO_DATA_H_ |
OLD | NEW |