| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/profile.h" | 5 #include "chrome/browser/profiles/profile.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "app/resource_bundle.h" | 9 #include "app/resource_bundle.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 13 matching lines...) Expand all Loading... |
| 24 #include "chrome/browser/file_system/browser_file_system_helper.h" | 24 #include "chrome/browser/file_system/browser_file_system_helper.h" |
| 25 #include "chrome/browser/in_process_webkit/webkit_context.h" | 25 #include "chrome/browser/in_process_webkit/webkit_context.h" |
| 26 #include "chrome/browser/net/chrome_url_request_context.h" | 26 #include "chrome/browser/net/chrome_url_request_context.h" |
| 27 #include "chrome/browser/notifications/desktop_notification_service.h" | 27 #include "chrome/browser/notifications/desktop_notification_service.h" |
| 28 #include "chrome/browser/ssl/ssl_host_state.h" | 28 #include "chrome/browser/ssl/ssl_host_state.h" |
| 29 #include "chrome/browser/sync/profile_sync_service.h" | 29 #include "chrome/browser/sync/profile_sync_service.h" |
| 30 #include "chrome/browser/themes/browser_theme_provider.h" | 30 #include "chrome/browser/themes/browser_theme_provider.h" |
| 31 #include "chrome/browser/ui/find_bar/find_bar_state.h" | 31 #include "chrome/browser/ui/find_bar/find_bar_state.h" |
| 32 #include "chrome/common/chrome_constants.h" | 32 #include "chrome/common/chrome_constants.h" |
| 33 #include "chrome/common/chrome_paths.h" | 33 #include "chrome/common/chrome_paths.h" |
| 34 #include "chrome/common/chrome_switches.h" |
| 35 #include "chrome/common/extensions/extension.h" |
| 34 #include "chrome/common/json_pref_store.h" | 36 #include "chrome/common/json_pref_store.h" |
| 35 #include "chrome/common/notification_service.h" | 37 #include "chrome/common/notification_service.h" |
| 36 #include "chrome/common/pref_names.h" | 38 #include "chrome/common/pref_names.h" |
| 37 #include "chrome/common/render_messages.h" | 39 #include "chrome/common/render_messages.h" |
| 38 #include "grit/browser_resources.h" | 40 #include "grit/browser_resources.h" |
| 39 #include "grit/locale_settings.h" | 41 #include "grit/locale_settings.h" |
| 40 #include "net/base/transport_security_state.h" | 42 #include "net/base/transport_security_state.h" |
| 41 #include "webkit/database/database_tracker.h" | 43 #include "webkit/database/database_tracker.h" |
| 42 | 44 |
| 43 #if defined(TOOLKIT_USES_GTK) | 45 #if defined(TOOLKIT_USES_GTK) |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 146 new BackgroundContentsService(this, CommandLine::ForCurrentProcess())); | 148 new BackgroundContentsService(this, CommandLine::ForCurrentProcess())); |
| 147 } | 149 } |
| 148 | 150 |
| 149 virtual ~OffTheRecordProfileImpl() { | 151 virtual ~OffTheRecordProfileImpl() { |
| 150 NotificationService::current()->Notify(NotificationType::PROFILE_DESTROYED, | 152 NotificationService::current()->Notify(NotificationType::PROFILE_DESTROYED, |
| 151 Source<Profile>(this), | 153 Source<Profile>(this), |
| 152 NotificationService::NoDetails()); | 154 NotificationService::NoDetails()); |
| 153 CleanupRequestContext(request_context_); | 155 CleanupRequestContext(request_context_); |
| 154 CleanupRequestContext(extensions_request_context_); | 156 CleanupRequestContext(extensions_request_context_); |
| 155 | 157 |
| 158 // Clean up all isolated app request contexts. |
| 159 for (ChromeURLRequestContextGetterMap::iterator iter = |
| 160 app_request_context_map_.begin(); |
| 161 iter != app_request_context_map_.end(); |
| 162 iter++) { |
| 163 CleanupRequestContext(iter->second); |
| 164 } |
| 165 |
| 156 // Clean up all DB files/directories | 166 // Clean up all DB files/directories |
| 157 BrowserThread::PostTask( | 167 BrowserThread::PostTask( |
| 158 BrowserThread::FILE, FROM_HERE, | 168 BrowserThread::FILE, FROM_HERE, |
| 159 NewRunnableMethod( | 169 NewRunnableMethod( |
| 160 db_tracker_.get(), | 170 db_tracker_.get(), |
| 161 &webkit_database::DatabaseTracker::DeleteIncognitoDBDirectory)); | 171 &webkit_database::DatabaseTracker::DeleteIncognitoDBDirectory)); |
| 162 | 172 |
| 163 BrowserList::RemoveObserver(this); | 173 BrowserList::RemoveObserver(this); |
| 164 } | 174 } |
| 165 | 175 |
| (...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 370 } | 380 } |
| 371 | 381 |
| 372 virtual BrowserThemeProvider* GetThemeProvider() { | 382 virtual BrowserThemeProvider* GetThemeProvider() { |
| 373 return profile_->GetThemeProvider(); | 383 return profile_->GetThemeProvider(); |
| 374 } | 384 } |
| 375 | 385 |
| 376 virtual URLRequestContextGetter* GetRequestContext() { | 386 virtual URLRequestContextGetter* GetRequestContext() { |
| 377 return request_context_; | 387 return request_context_; |
| 378 } | 388 } |
| 379 | 389 |
| 390 virtual URLRequestContextGetter* GetRequestContext(const Extension* app) { |
| 391 if (CommandLine::ForCurrentProcess()->HasSwitch( |
| 392 switches::kEnableExperimentalAppManifests) |
| 393 && app != NULL |
| 394 && app->is_storage_isolated()) |
| 395 return GetRequestContextForIsolatedApp(app); |
| 396 |
| 397 return GetRequestContext(); |
| 398 } |
| 399 |
| 380 virtual URLRequestContextGetter* GetRequestContextForMedia() { | 400 virtual URLRequestContextGetter* GetRequestContextForMedia() { |
| 381 // In OTR mode, media request context is the same as the original one. | 401 // In OTR mode, media request context is the same as the original one. |
| 382 return request_context_; | 402 return request_context_; |
| 383 } | 403 } |
| 384 | 404 |
| 385 URLRequestContextGetter* GetRequestContextForExtensions() { | 405 URLRequestContextGetter* GetRequestContextForExtensions() { |
| 386 if (!extensions_request_context_) { | 406 if (!extensions_request_context_) { |
| 387 extensions_request_context_ = | 407 extensions_request_context_ = |
| 388 ChromeURLRequestContextGetter::CreateOffTheRecordForExtensions(this); | 408 ChromeURLRequestContextGetter::CreateOffTheRecordForExtensions(this); |
| 389 } | 409 } |
| 390 | 410 |
| 391 return extensions_request_context_; | 411 return extensions_request_context_; |
| 392 } | 412 } |
| 393 | 413 |
| 414 URLRequestContextGetter* GetRequestContextForIsolatedApp( |
| 415 const Extension* installed_app) { |
| 416 CHECK(installed_app); |
| 417 std::string id = installed_app->id(); |
| 418 |
| 419 // Keep a map of request contexts, one per requested app ID. Once created, |
| 420 // the context will exist for the lifetime of the profile. |
| 421 ChromeURLRequestContextGetterMap::iterator iter = |
| 422 app_request_context_map_.find(id); |
| 423 if (iter != app_request_context_map_.end()) |
| 424 return iter->second; |
| 425 |
| 426 ChromeURLRequestContextGetter* context = |
| 427 ChromeURLRequestContextGetter::CreateOffTheRecordForIsolatedApp(this, |
| 428 installed_app); |
| 429 app_request_context_map_[id] = context; |
| 430 |
| 431 return context; |
| 432 } |
| 433 |
| 394 virtual net::SSLConfigService* GetSSLConfigService() { | 434 virtual net::SSLConfigService* GetSSLConfigService() { |
| 395 return profile_->GetSSLConfigService(); | 435 return profile_->GetSSLConfigService(); |
| 396 } | 436 } |
| 397 | 437 |
| 398 virtual HostContentSettingsMap* GetHostContentSettingsMap() { | 438 virtual HostContentSettingsMap* GetHostContentSettingsMap() { |
| 399 // Retrieve the host content settings map of the parent profile in order to | 439 // Retrieve the host content settings map of the parent profile in order to |
| 400 // ensure the preferences have been migrated. | 440 // ensure the preferences have been migrated. |
| 401 profile_->GetHostContentSettingsMap(); | 441 profile_->GetHostContentSettingsMap(); |
| 402 if (!host_content_settings_map_.get()) | 442 if (!host_content_settings_map_.get()) |
| 403 host_content_settings_map_ = new HostContentSettingsMap(this); | 443 host_content_settings_map_ = new HostContentSettingsMap(this); |
| (...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 621 Profile* profile_; | 661 Profile* profile_; |
| 622 | 662 |
| 623 scoped_ptr<ExtensionProcessManager> extension_process_manager_; | 663 scoped_ptr<ExtensionProcessManager> extension_process_manager_; |
| 624 | 664 |
| 625 // The context to use for requests made from this OTR session. | 665 // The context to use for requests made from this OTR session. |
| 626 scoped_refptr<ChromeURLRequestContextGetter> request_context_; | 666 scoped_refptr<ChromeURLRequestContextGetter> request_context_; |
| 627 | 667 |
| 628 // The context to use for requests made by an extension while in OTR mode. | 668 // The context to use for requests made by an extension while in OTR mode. |
| 629 scoped_refptr<ChromeURLRequestContextGetter> extensions_request_context_; | 669 scoped_refptr<ChromeURLRequestContextGetter> extensions_request_context_; |
| 630 | 670 |
| 671 // A map of request contexts, one per isolated app while in OTR mode. |
| 672 typedef base::hash_map<std::string, |
| 673 scoped_refptr<ChromeURLRequestContextGetter> > |
| 674 ChromeURLRequestContextGetterMap; |
| 675 ChromeURLRequestContextGetterMap app_request_context_map_; |
| 676 |
| 631 // The download manager that only stores downloaded items in memory. | 677 // The download manager that only stores downloaded items in memory. |
| 632 scoped_refptr<DownloadManager> download_manager_; | 678 scoped_refptr<DownloadManager> download_manager_; |
| 633 | 679 |
| 634 // Use a separate desktop notification service for OTR. | 680 // Use a separate desktop notification service for OTR. |
| 635 scoped_ptr<DesktopNotificationService> desktop_notification_service_; | 681 scoped_ptr<DesktopNotificationService> desktop_notification_service_; |
| 636 | 682 |
| 637 // We use a non-writable content settings map for OTR. | 683 // We use a non-writable content settings map for OTR. |
| 638 scoped_refptr<HostContentSettingsMap> host_content_settings_map_; | 684 scoped_refptr<HostContentSettingsMap> host_content_settings_map_; |
| 639 | 685 |
| 640 // Use a separate zoom map for OTR. | 686 // Use a separate zoom map for OTR. |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 674 | 720 |
| 675 // The file_system context for this profile. | 721 // The file_system context for this profile. |
| 676 scoped_refptr<fileapi::SandboxedFileSystemContext> file_system_context_; | 722 scoped_refptr<fileapi::SandboxedFileSystemContext> file_system_context_; |
| 677 | 723 |
| 678 DISALLOW_COPY_AND_ASSIGN(OffTheRecordProfileImpl); | 724 DISALLOW_COPY_AND_ASSIGN(OffTheRecordProfileImpl); |
| 679 }; | 725 }; |
| 680 | 726 |
| 681 Profile* Profile::CreateOffTheRecordProfile() { | 727 Profile* Profile::CreateOffTheRecordProfile() { |
| 682 return new OffTheRecordProfileImpl(this); | 728 return new OffTheRecordProfileImpl(this); |
| 683 } | 729 } |
| OLD | NEW |