Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(670)

Side by Side Diff: chrome/browser/profiles/off_the_record_profile_impl.cc

Issue 9419033: Move creation of BrowserContext objects that live in content to content, instead of depending on th… (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Fix memory leaks in tests Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 #include "chrome/browser/profiles/off_the_record_profile_impl.h" 5 #include "chrome/browser/profiles/off_the_record_profile_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/compiler_specific.h" 9 #include "base/compiler_specific.h"
10 #include "base/file_path.h" 10 #include "base/file_path.h"
(...skipping 26 matching lines...) Expand all
37 #include "chrome/browser/ui/webui/chrome_url_data_manager.h" 37 #include "chrome/browser/ui/webui/chrome_url_data_manager.h"
38 #include "chrome/browser/ui/webui/extensions/extension_icon_source.h" 38 #include "chrome/browser/ui/webui/extensions/extension_icon_source.h"
39 #include "chrome/common/chrome_constants.h" 39 #include "chrome/common/chrome_constants.h"
40 #include "chrome/common/chrome_notification_types.h" 40 #include "chrome/common/chrome_notification_types.h"
41 #include "chrome/common/chrome_paths.h" 41 #include "chrome/common/chrome_paths.h"
42 #include "chrome/common/chrome_switches.h" 42 #include "chrome/common/chrome_switches.h"
43 #include "chrome/common/extensions/extension.h" 43 #include "chrome/common/extensions/extension.h"
44 #include "chrome/common/json_pref_store.h" 44 #include "chrome/common/json_pref_store.h"
45 #include "chrome/common/pref_names.h" 45 #include "chrome/common/pref_names.h"
46 #include "chrome/common/render_messages.h" 46 #include "chrome/common/render_messages.h"
47 #include "content/browser/appcache/chrome_appcache_service.h"
48 #include "content/browser/chrome_blob_storage_context.h"
49 #include "content/browser/file_system/browser_file_system_helper.h"
50 #include "content/browser/in_process_webkit/webkit_context.h" 47 #include "content/browser/in_process_webkit/webkit_context.h"
51 #include "content/public/browser/browser_thread.h" 48 #include "content/public/browser/browser_thread.h"
52 #include "content/public/browser/host_zoom_map.h" 49 #include "content/public/browser/host_zoom_map.h"
53 #include "content/public/browser/notification_service.h" 50 #include "content/public/browser/notification_service.h"
54 #include "content/public/browser/web_contents.h" 51 #include "content/public/browser/web_contents.h"
55 #include "net/base/transport_security_state.h" 52 #include "net/base/transport_security_state.h"
56 #include "net/http/http_server_properties.h" 53 #include "net/http/http_server_properties.h"
57 #include "webkit/database/database_tracker.h" 54 #include "webkit/database/database_tracker.h"
58 #include "webkit/quota/quota_manager.h"
59 55
60 #if defined(OS_CHROMEOS) 56 #if defined(OS_CHROMEOS)
61 #include "chrome/browser/chromeos/preferences.h" 57 #include "chrome/browser/chromeos/preferences.h"
62 #include "chrome/browser/chromeos/proxy_config_service_impl.h" 58 #include "chrome/browser/chromeos/proxy_config_service_impl.h"
63 #endif 59 #endif
64 60
65 using content::BrowserThread; 61 using content::BrowserThread;
66 using content::DownloadManager; 62 using content::DownloadManager;
67 using content::HostZoomMap; 63 using content::HostZoomMap;
68 64
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 122
127 ChromePluginServiceFilter::GetInstance()->UnregisterResourceContext( 123 ChromePluginServiceFilter::GetInstance()->UnregisterResourceContext(
128 io_data_.GetResourceContextNoInit()); 124 io_data_.GetResourceContextNoInit());
129 125
130 ProfileDependencyManager::GetInstance()->DestroyProfileServices(this); 126 ProfileDependencyManager::GetInstance()->DestroyProfileServices(this);
131 127
132 BrowserThread::PostTask( 128 BrowserThread::PostTask(
133 BrowserThread::IO, FROM_HERE, 129 BrowserThread::IO, FROM_HERE,
134 base::Bind(&NotifyOTRProfileDestroyedOnIOThread, profile_, this)); 130 base::Bind(&NotifyOTRProfileDestroyedOnIOThread, profile_, this));
135 131
136 // Clean up all DB files/directories
137 if (db_tracker_) {
138 BrowserThread::PostTask(
139 BrowserThread::FILE, FROM_HERE,
140 base::Bind(&webkit_database::DatabaseTracker::Shutdown,
141 db_tracker_.get()));
142 }
143
144 BrowserList::RemoveObserver(this); 132 BrowserList::RemoveObserver(this);
145 133
146 if (host_content_settings_map_) 134 if (host_content_settings_map_)
147 host_content_settings_map_->ShutdownOnUIThread(); 135 host_content_settings_map_->ShutdownOnUIThread();
148 136
149 if (pref_proxy_config_tracker_.get()) 137 if (pref_proxy_config_tracker_.get())
150 pref_proxy_config_tracker_->DetachFromPrefService(); 138 pref_proxy_config_tracker_->DetachFromPrefService();
151 139
152 ExtensionService* extension_service = GetExtensionService(); 140 ExtensionService* extension_service = GetExtensionService();
153 if (extension_service) { 141 if (extension_service) {
(...skipping 29 matching lines...) Expand all
183 } 171 }
184 172
185 bool OffTheRecordProfileImpl::HasOffTheRecordProfile() { 173 bool OffTheRecordProfileImpl::HasOffTheRecordProfile() {
186 return true; 174 return true;
187 } 175 }
188 176
189 Profile* OffTheRecordProfileImpl::GetOriginalProfile() { 177 Profile* OffTheRecordProfileImpl::GetOriginalProfile() {
190 return profile_; 178 return profile_;
191 } 179 }
192 180
193 ChromeAppCacheService* OffTheRecordProfileImpl::GetAppCacheService() {
194 CreateQuotaManagerAndClients();
195 return appcache_service_;
196 }
197
198 webkit_database::DatabaseTracker*
199 OffTheRecordProfileImpl::GetDatabaseTracker() {
200 CreateQuotaManagerAndClients();
201 return db_tracker_;
202 }
203
204 VisitedLinkMaster* OffTheRecordProfileImpl::GetVisitedLinkMaster() { 181 VisitedLinkMaster* OffTheRecordProfileImpl::GetVisitedLinkMaster() {
205 // We don't provide access to the VisitedLinkMaster when we're OffTheRecord 182 // We don't provide access to the VisitedLinkMaster when we're OffTheRecord
206 // because we don't want to leak the sites that the user has visited before. 183 // because we don't want to leak the sites that the user has visited before.
207 return NULL; 184 return NULL;
208 } 185 }
209 186
210 ExtensionService* OffTheRecordProfileImpl::GetExtensionService() { 187 ExtensionService* OffTheRecordProfileImpl::GetExtensionService() {
211 return GetOriginalProfile()->GetExtensionService(); 188 return GetOriginalProfile()->GetExtensionService();
212 } 189 }
213 190
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
306 } 283 }
307 284
308 TemplateURLFetcher* OffTheRecordProfileImpl::GetTemplateURLFetcher() { 285 TemplateURLFetcher* OffTheRecordProfileImpl::GetTemplateURLFetcher() {
309 return profile_->GetTemplateURLFetcher(); 286 return profile_->GetTemplateURLFetcher();
310 } 287 }
311 288
312 DownloadManager* OffTheRecordProfileImpl::GetDownloadManager() { 289 DownloadManager* OffTheRecordProfileImpl::GetDownloadManager() {
313 return DownloadServiceFactory::GetForProfile(this)->GetDownloadManager(); 290 return DownloadServiceFactory::GetForProfile(this)->GetDownloadManager();
314 } 291 }
315 292
316 fileapi::FileSystemContext* OffTheRecordProfileImpl::GetFileSystemContext() {
317 CreateQuotaManagerAndClients();
318 return file_system_context_.get();
319 }
320
321 net::URLRequestContextGetter* OffTheRecordProfileImpl::GetRequestContext() { 293 net::URLRequestContextGetter* OffTheRecordProfileImpl::GetRequestContext() {
322 return io_data_.GetMainRequestContextGetter(); 294 return io_data_.GetMainRequestContextGetter();
323 } 295 }
324 296
325 quota::QuotaManager* OffTheRecordProfileImpl::GetQuotaManager() {
326 CreateQuotaManagerAndClients();
327 return quota_manager_.get();
328 }
329
330 net::URLRequestContextGetter* 297 net::URLRequestContextGetter*
331 OffTheRecordProfileImpl::GetRequestContextForRenderProcess( 298 OffTheRecordProfileImpl::GetRequestContextForRenderProcess(
332 int renderer_child_id) { 299 int renderer_child_id) {
333 if (GetExtensionService()) { 300 if (GetExtensionService()) {
334 const Extension* installed_app = GetExtensionService()-> 301 const Extension* installed_app = GetExtensionService()->
335 GetInstalledAppForRenderer(renderer_child_id); 302 GetInstalledAppForRenderer(renderer_child_id);
336 if (installed_app != NULL && installed_app->is_storage_isolated() && 303 if (installed_app != NULL && installed_app->is_storage_isolated() &&
337 installed_app->HasAPIPermission( 304 installed_app->HasAPIPermission(
338 ExtensionAPIPermission::kExperimental)) { 305 ExtensionAPIPermission::kExperimental)) {
339 return GetRequestContextForIsolatedApp(installed_app->id()); 306 return GetRequestContextForIsolatedApp(installed_app->id());
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
402 } 369 }
403 370
404 UserStyleSheetWatcher* OffTheRecordProfileImpl::GetUserStyleSheetWatcher() { 371 UserStyleSheetWatcher* OffTheRecordProfileImpl::GetUserStyleSheetWatcher() {
405 return profile_->GetUserStyleSheetWatcher(); 372 return profile_->GetUserStyleSheetWatcher();
406 } 373 }
407 374
408 bool OffTheRecordProfileImpl::DidLastSessionExitCleanly() { 375 bool OffTheRecordProfileImpl::DidLastSessionExitCleanly() {
409 return profile_->DidLastSessionExitCleanly(); 376 return profile_->DidLastSessionExitCleanly();
410 } 377 }
411 378
379 quota::SpecialStoragePolicy*
380 OffTheRecordProfileImpl::GetSpecialStoragePolicy() {
381 return GetExtensionSpecialStoragePolicy();
382 }
383
412 BookmarkModel* OffTheRecordProfileImpl::GetBookmarkModel() { 384 BookmarkModel* OffTheRecordProfileImpl::GetBookmarkModel() {
413 return profile_->GetBookmarkModel(); 385 return profile_->GetBookmarkModel();
414 } 386 }
415 387
416 ProtocolHandlerRegistry* OffTheRecordProfileImpl::GetProtocolHandlerRegistry() { 388 ProtocolHandlerRegistry* OffTheRecordProfileImpl::GetProtocolHandlerRegistry() {
417 return profile_->GetProtocolHandlerRegistry(); 389 return profile_->GetProtocolHandlerRegistry();
418 } 390 }
419 391
420 TokenService* OffTheRecordProfileImpl::GetTokenService() { 392 TokenService* OffTheRecordProfileImpl::GetTokenService() {
421 return NULL; 393 return NULL;
422 } 394 }
423 395
424 bool OffTheRecordProfileImpl::IsSameProfile(Profile* profile) { 396 bool OffTheRecordProfileImpl::IsSameProfile(Profile* profile) {
425 return (profile == this) || (profile == profile_); 397 return (profile == this) || (profile == profile_);
426 } 398 }
427 399
428 Time OffTheRecordProfileImpl::GetStartTime() const { 400 Time OffTheRecordProfileImpl::GetStartTime() const {
429 return start_time_; 401 return start_time_;
430 } 402 }
431 403
432 WebKitContext* OffTheRecordProfileImpl::GetWebKitContext() {
433 CreateQuotaManagerAndClients();
434 return webkit_context_.get();
435 }
436
437 history::TopSites* OffTheRecordProfileImpl::GetTopSitesWithoutCreating() { 404 history::TopSites* OffTheRecordProfileImpl::GetTopSitesWithoutCreating() {
438 return NULL; 405 return NULL;
439 } 406 }
440 407
441 history::TopSites* OffTheRecordProfileImpl::GetTopSites() { 408 history::TopSites* OffTheRecordProfileImpl::GetTopSites() {
442 return NULL; 409 return NULL;
443 } 410 }
444 411
445 void OffTheRecordProfileImpl::MarkAsCleanShutdown() { 412 void OffTheRecordProfileImpl::MarkAsCleanShutdown() {
446 } 413 }
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
480 // The preferences are associated with the regular user profile. 447 // The preferences are associated with the regular user profile.
481 } 448 }
482 #endif // defined(OS_CHROMEOS) 449 #endif // defined(OS_CHROMEOS)
483 450
484 void OffTheRecordProfileImpl::OnBrowserAdded(const Browser* browser) { 451 void OffTheRecordProfileImpl::OnBrowserAdded(const Browser* browser) {
485 } 452 }
486 453
487 void OffTheRecordProfileImpl::OnBrowserRemoved(const Browser* browser) { 454 void OffTheRecordProfileImpl::OnBrowserRemoved(const Browser* browser) {
488 } 455 }
489 456
490 ChromeBlobStorageContext* OffTheRecordProfileImpl::GetBlobStorageContext() {
491 if (!blob_storage_context_) {
492 blob_storage_context_ = new ChromeBlobStorageContext();
493 BrowserThread::PostTask(
494 BrowserThread::IO, FROM_HERE,
495 base::Bind(&ChromeBlobStorageContext::InitializeOnIOThread,
496 blob_storage_context_.get()));
497 }
498 return blob_storage_context_;
499 }
500
501 ExtensionInfoMap* OffTheRecordProfileImpl::GetExtensionInfoMap() { 457 ExtensionInfoMap* OffTheRecordProfileImpl::GetExtensionInfoMap() {
502 return profile_->GetExtensionInfoMap(); 458 return profile_->GetExtensionInfoMap();
503 } 459 }
504 460
505 ChromeURLDataManager* OffTheRecordProfileImpl::GetChromeURLDataManager() { 461 ChromeURLDataManager* OffTheRecordProfileImpl::GetChromeURLDataManager() {
506 if (!chrome_url_data_manager_.get()) 462 if (!chrome_url_data_manager_.get())
507 chrome_url_data_manager_.reset(new ChromeURLDataManager( 463 chrome_url_data_manager_.reset(new ChromeURLDataManager(
508 io_data_.GetChromeURLDataManagerBackendGetter())); 464 io_data_.GetChromeURLDataManagerBackendGetter()));
509 return chrome_url_data_manager_.get(); 465 return chrome_url_data_manager_.get();
510 } 466 }
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
550 if (type == content::NOTIFICATION_ZOOM_LEVEL_CHANGED) { 506 if (type == content::NOTIFICATION_ZOOM_LEVEL_CHANGED) {
551 const std::string& host = 507 const std::string& host =
552 *(content::Details<const std::string>(details).ptr()); 508 *(content::Details<const std::string>(details).ptr());
553 if (!host.empty()) { 509 if (!host.empty()) {
554 double level = profile_->GetHostZoomMap()->GetZoomLevel(host); 510 double level = profile_->GetHostZoomMap()->GetZoomLevel(host);
555 GetHostZoomMap()->SetZoomLevel(host, level); 511 GetHostZoomMap()->SetZoomLevel(host, level);
556 } 512 }
557 } 513 }
558 } 514 }
559 515
560 void OffTheRecordProfileImpl::CreateQuotaManagerAndClients() {
561 if (quota_manager_.get()) {
562 DCHECK(file_system_context_.get());
563 DCHECK(db_tracker_.get());
564 DCHECK(webkit_context_.get());
565 return;
566 }
567
568 // All of the clients have to be created and registered with the
569 // QuotaManager prior to the QuotaManger being used. So we do them
570 // all together here prior to handing out a reference to anything
571 // that utlizes the QuotaManager.
572 quota_manager_ = new quota::QuotaManager(
573 IsOffTheRecord(),
574 GetPath(),
575 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO),
576 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::DB),
577 GetExtensionSpecialStoragePolicy());
578
579 // Each consumer is responsible for registering its QuotaClient during
580 // its construction.
581 file_system_context_ = CreateFileSystemContext(
582 GetPath(), IsOffTheRecord(),
583 GetExtensionSpecialStoragePolicy(),
584 quota_manager_->proxy());
585 db_tracker_ = new webkit_database::DatabaseTracker(
586 GetPath(), IsOffTheRecord(), false, GetExtensionSpecialStoragePolicy(),
587 quota_manager_->proxy(),
588 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE));
589 webkit_context_ = new WebKitContext(
590 IsOffTheRecord(), GetPath(), GetExtensionSpecialStoragePolicy(),
591 false, quota_manager_->proxy(),
592 BrowserThread::GetMessageLoopProxyForThread(
593 BrowserThread::WEBKIT_DEPRECATED));
594 appcache_service_ = new ChromeAppCacheService(quota_manager_->proxy());
595 BrowserThread::PostTask(
596 BrowserThread::IO, FROM_HERE,
597 base::Bind(&ChromeAppCacheService::InitializeOnIOThread,
598 appcache_service_.get(),
599 IsOffTheRecord()
600 ? FilePath() : GetPath().Append(chrome::kAppCacheDirname),
601 io_data_.GetResourceContextNoInit(),
602 make_scoped_refptr(GetExtensionSpecialStoragePolicy())));
603 }
604
605 #if defined(OS_CHROMEOS) 516 #if defined(OS_CHROMEOS)
606 // Special case of the OffTheRecordProfileImpl which is used while Guest 517 // Special case of the OffTheRecordProfileImpl which is used while Guest
607 // session in CrOS. 518 // session in CrOS.
608 class GuestSessionProfile : public OffTheRecordProfileImpl { 519 class GuestSessionProfile : public OffTheRecordProfileImpl {
609 public: 520 public:
610 explicit GuestSessionProfile(Profile* real_profile) 521 explicit GuestSessionProfile(Profile* real_profile)
611 : OffTheRecordProfileImpl(real_profile) { 522 : OffTheRecordProfileImpl(real_profile) {
612 } 523 }
613 524
614 virtual void InitChromeOSPreferences() { 525 virtual void InitChromeOSPreferences() {
(...skipping 11 matching lines...) Expand all
626 OffTheRecordProfileImpl* profile = NULL; 537 OffTheRecordProfileImpl* profile = NULL;
627 #if defined(OS_CHROMEOS) 538 #if defined(OS_CHROMEOS)
628 if (Profile::IsGuestSession()) 539 if (Profile::IsGuestSession())
629 profile = new GuestSessionProfile(this); 540 profile = new GuestSessionProfile(this);
630 #endif 541 #endif
631 if (!profile) 542 if (!profile)
632 profile = new OffTheRecordProfileImpl(this); 543 profile = new OffTheRecordProfileImpl(this);
633 profile->Init(); 544 profile->Init();
634 return profile; 545 return profile;
635 } 546 }
OLDNEW
« no previous file with comments | « chrome/browser/profiles/off_the_record_profile_impl.h ('k') | chrome/browser/profiles/off_the_record_profile_io_data.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698