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 "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/file_path.h" | 10 #include "base/file_path.h" |
11 #include "base/file_util.h" | 11 #include "base/file_util.h" |
12 #include "base/path_service.h" | 12 #include "base/path_service.h" |
13 #include "base/scoped_ptr.h" | 13 #include "base/scoped_ptr.h" |
14 #include "base/string_util.h" | 14 #include "base/string_util.h" |
15 #include "chrome/browser/background_contents_service.h" | 15 #include "chrome/browser/background_contents_service.h" |
16 #include "chrome/browser/browser_list.h" | 16 #include "chrome/browser/browser_list.h" |
17 #include "chrome/browser/browser_process.h" | 17 #include "chrome/browser/browser_process.h" |
18 #include "chrome/browser/browser_thread.h" | 18 #include "chrome/browser/browser_thread.h" |
19 #include "chrome/browser/chrome_blob_storage_context.h" | 19 #include "chrome/browser/chrome_blob_storage_context.h" |
20 #include "chrome/browser/download/download_manager.h" | 20 #include "chrome/browser/download/download_manager.h" |
21 #include "chrome/browser/extensions/extension_message_service.h" | 21 #include "chrome/browser/extensions/extension_message_service.h" |
| 22 #include "chrome/browser/extensions/extension_pref_store.h" |
22 #include "chrome/browser/extensions/extension_process_manager.h" | 23 #include "chrome/browser/extensions/extension_process_manager.h" |
23 #include "chrome/browser/file_system/browser_file_system_helper.h" | 24 #include "chrome/browser/file_system/browser_file_system_helper.h" |
24 #include "chrome/browser/in_process_webkit/webkit_context.h" | 25 #include "chrome/browser/in_process_webkit/webkit_context.h" |
25 #include "chrome/browser/net/chrome_url_request_context.h" | 26 #include "chrome/browser/net/chrome_url_request_context.h" |
| 27 #include "chrome/browser/net/pref_proxy_config_service.h" |
26 #include "chrome/browser/notifications/desktop_notification_service.h" | 28 #include "chrome/browser/notifications/desktop_notification_service.h" |
27 #include "chrome/browser/ssl/ssl_host_state.h" | 29 #include "chrome/browser/ssl/ssl_host_state.h" |
28 #include "chrome/browser/sync/profile_sync_service.h" | 30 #include "chrome/browser/sync/profile_sync_service.h" |
29 #include "chrome/browser/themes/browser_theme_provider.h" | 31 #include "chrome/browser/themes/browser_theme_provider.h" |
30 #include "chrome/browser/ui/find_bar/find_bar_state.h" | 32 #include "chrome/browser/ui/find_bar/find_bar_state.h" |
31 #include "chrome/common/chrome_constants.h" | 33 #include "chrome/common/chrome_constants.h" |
32 #include "chrome/common/chrome_paths.h" | 34 #include "chrome/common/chrome_paths.h" |
33 #include "chrome/common/json_pref_store.h" | 35 #include "chrome/common/json_pref_store.h" |
34 #include "chrome/common/notification_service.h" | 36 #include "chrome/common/notification_service.h" |
35 #include "chrome/common/pref_names.h" | 37 #include "chrome/common/pref_names.h" |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
132 // OffTheRecordProfileImpl is a profile subclass that wraps an existing profile | 134 // OffTheRecordProfileImpl is a profile subclass that wraps an existing profile |
133 // to make it suitable for the off the record mode. | 135 // to make it suitable for the off the record mode. |
134 // | 136 // |
135 //////////////////////////////////////////////////////////////////////////////// | 137 //////////////////////////////////////////////////////////////////////////////// |
136 class OffTheRecordProfileImpl : public Profile, | 138 class OffTheRecordProfileImpl : public Profile, |
137 public BrowserList::Observer { | 139 public BrowserList::Observer { |
138 public: | 140 public: |
139 explicit OffTheRecordProfileImpl(Profile* real_profile) | 141 explicit OffTheRecordProfileImpl(Profile* real_profile) |
140 : profile_(real_profile), | 142 : profile_(real_profile), |
141 start_time_(Time::Now()) { | 143 start_time_(Time::Now()) { |
| 144 prefs_.reset(profile_->GetPrefs()->CreateIncognitoPrefService( |
| 145 new ExtensionPrefStore(profile_->GetExtensionPrefValueMap(), true))); |
| 146 |
142 request_context_ = ChromeURLRequestContextGetter::CreateOffTheRecord(this); | 147 request_context_ = ChromeURLRequestContextGetter::CreateOffTheRecord(this); |
143 extension_process_manager_.reset(ExtensionProcessManager::Create(this)); | 148 extension_process_manager_.reset(ExtensionProcessManager::Create(this)); |
144 | 149 |
145 BrowserList::AddObserver(this); | 150 BrowserList::AddObserver(this); |
146 | 151 |
147 background_contents_service_.reset( | 152 background_contents_service_.reset( |
148 new BackgroundContentsService(this, CommandLine::ForCurrentProcess())); | 153 new BackgroundContentsService(this, CommandLine::ForCurrentProcess())); |
149 } | 154 } |
150 | 155 |
151 virtual ~OffTheRecordProfileImpl() { | 156 virtual ~OffTheRecordProfileImpl() { |
152 NotificationService::current()->Notify(NotificationType::PROFILE_DESTROYED, | 157 NotificationService::current()->Notify(NotificationType::PROFILE_DESTROYED, |
153 Source<Profile>(this), | 158 Source<Profile>(this), |
154 NotificationService::NoDetails()); | 159 NotificationService::NoDetails()); |
155 CleanupRequestContext(request_context_); | 160 CleanupRequestContext(request_context_); |
156 CleanupRequestContext(extensions_request_context_); | 161 CleanupRequestContext(extensions_request_context_); |
157 | 162 |
158 // Clean up all DB files/directories | 163 // Clean up all DB files/directories |
159 BrowserThread::PostTask( | 164 BrowserThread::PostTask( |
160 BrowserThread::FILE, FROM_HERE, | 165 BrowserThread::FILE, FROM_HERE, |
161 NewRunnableMethod( | 166 NewRunnableMethod( |
162 db_tracker_.get(), | 167 db_tracker_.get(), |
163 &webkit_database::DatabaseTracker::DeleteIncognitoDBDirectory)); | 168 &webkit_database::DatabaseTracker::DeleteIncognitoDBDirectory)); |
164 | 169 |
165 BrowserList::RemoveObserver(this); | 170 BrowserList::RemoveObserver(this); |
| 171 |
| 172 if (pref_proxy_config_tracker_) |
| 173 pref_proxy_config_tracker_->DetachFromPrefService(); |
166 } | 174 } |
167 | 175 |
168 virtual ProfileId GetRuntimeId() { | 176 virtual ProfileId GetRuntimeId() { |
169 return reinterpret_cast<ProfileId>(this); | 177 return reinterpret_cast<ProfileId>(this); |
170 } | 178 } |
171 | 179 |
172 virtual FilePath GetPath() { return profile_->GetPath(); } | 180 virtual FilePath GetPath() { return profile_->GetPath(); } |
173 | 181 |
174 virtual bool IsOffTheRecord() { | 182 virtual bool IsOffTheRecord() { |
175 return true; | 183 return true; |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
307 | 315 |
308 virtual PasswordStore* GetPasswordStore(ServiceAccessType sat) { | 316 virtual PasswordStore* GetPasswordStore(ServiceAccessType sat) { |
309 if (sat == EXPLICIT_ACCESS) | 317 if (sat == EXPLICIT_ACCESS) |
310 return profile_->GetPasswordStore(sat); | 318 return profile_->GetPasswordStore(sat); |
311 | 319 |
312 NOTREACHED() << "This profile is OffTheRecord"; | 320 NOTREACHED() << "This profile is OffTheRecord"; |
313 return NULL; | 321 return NULL; |
314 } | 322 } |
315 | 323 |
316 virtual PrefService* GetPrefs() { | 324 virtual PrefService* GetPrefs() { |
317 return profile_->GetPrefs(); | 325 return prefs_.get(); |
318 } | 326 } |
319 | 327 |
320 virtual TemplateURLModel* GetTemplateURLModel() { | 328 virtual TemplateURLModel* GetTemplateURLModel() { |
321 return profile_->GetTemplateURLModel(); | 329 return profile_->GetTemplateURLModel(); |
322 } | 330 } |
323 | 331 |
324 virtual TemplateURLFetcher* GetTemplateURLFetcher() { | 332 virtual TemplateURLFetcher* GetTemplateURLFetcher() { |
325 return profile_->GetTemplateURLFetcher(); | 333 return profile_->GetTemplateURLFetcher(); |
326 } | 334 } |
327 | 335 |
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
605 return NULL; | 613 return NULL; |
606 } | 614 } |
607 | 615 |
608 #if defined(OS_CHROMEOS) | 616 #if defined(OS_CHROMEOS) |
609 virtual void ChangeApplicationLocale( | 617 virtual void ChangeApplicationLocale( |
610 const std::string& locale, bool keep_local) { | 618 const std::string& locale, bool keep_local) { |
611 } | 619 } |
612 #endif // defined(OS_CHROMEOS) | 620 #endif // defined(OS_CHROMEOS) |
613 | 621 |
614 virtual PrefProxyConfigTracker* GetProxyConfigTracker() { | 622 virtual PrefProxyConfigTracker* GetProxyConfigTracker() { |
615 return profile_->GetProxyConfigTracker(); | 623 if (!pref_proxy_config_tracker_) |
| 624 pref_proxy_config_tracker_ = new PrefProxyConfigTracker(GetPrefs()); |
| 625 |
| 626 return pref_proxy_config_tracker_; |
616 } | 627 } |
617 | 628 |
618 virtual PrerenderManager* GetPrerenderManager() { | 629 virtual PrerenderManager* GetPrerenderManager() { |
619 // We do not allow prerendering in OTR profiles at this point. | 630 // We do not allow prerendering in OTR profiles at this point. |
620 // TODO(tburkard): Figure out if we want to support this, and how, at some | 631 // TODO(tburkard): Figure out if we want to support this, and how, at some |
621 // point in the future. | 632 // point in the future. |
622 return NULL; | 633 return NULL; |
623 } | 634 } |
624 | 635 |
| 636 protected: |
| 637 virtual ExtensionPrefValueMap* GetExtensionPrefValueMap() { |
| 638 return profile_->GetExtensionPrefValueMap(); |
| 639 } |
| 640 |
625 private: | 641 private: |
626 NotificationRegistrar registrar_; | 642 NotificationRegistrar registrar_; |
627 | 643 |
628 // The real underlying profile. | 644 // The real underlying profile. |
629 Profile* profile_; | 645 Profile* profile_; |
630 | 646 |
| 647 scoped_ptr<PrefService> prefs_; |
| 648 |
631 scoped_ptr<ExtensionProcessManager> extension_process_manager_; | 649 scoped_ptr<ExtensionProcessManager> extension_process_manager_; |
632 | 650 |
633 // The context to use for requests made from this OTR session. | 651 // The context to use for requests made from this OTR session. |
634 scoped_refptr<ChromeURLRequestContextGetter> request_context_; | 652 scoped_refptr<ChromeURLRequestContextGetter> request_context_; |
635 | 653 |
636 // The context to use for requests made by an extension while in OTR mode. | 654 // The context to use for requests made by an extension while in OTR mode. |
637 scoped_refptr<ChromeURLRequestContextGetter> extensions_request_context_; | 655 scoped_refptr<ChromeURLRequestContextGetter> extensions_request_context_; |
638 | 656 |
639 // The download manager that only stores downloaded items in memory. | 657 // The download manager that only stores downloaded items in memory. |
640 scoped_refptr<DownloadManager> download_manager_; | 658 scoped_refptr<DownloadManager> download_manager_; |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
676 FilePath last_selected_directory_; | 694 FilePath last_selected_directory_; |
677 | 695 |
678 // Tracks all BackgroundContents running under this profile. | 696 // Tracks all BackgroundContents running under this profile. |
679 scoped_ptr<BackgroundContentsService> background_contents_service_; | 697 scoped_ptr<BackgroundContentsService> background_contents_service_; |
680 | 698 |
681 scoped_refptr<ChromeBlobStorageContext> blob_storage_context_; | 699 scoped_refptr<ChromeBlobStorageContext> blob_storage_context_; |
682 | 700 |
683 // The file_system context for this profile. | 701 // The file_system context for this profile. |
684 scoped_refptr<fileapi::SandboxedFileSystemContext> file_system_context_; | 702 scoped_refptr<fileapi::SandboxedFileSystemContext> file_system_context_; |
685 | 703 |
| 704 scoped_refptr<PrefProxyConfigTracker> pref_proxy_config_tracker_; |
| 705 |
686 DISALLOW_COPY_AND_ASSIGN(OffTheRecordProfileImpl); | 706 DISALLOW_COPY_AND_ASSIGN(OffTheRecordProfileImpl); |
687 }; | 707 }; |
688 | 708 |
689 Profile* Profile::CreateOffTheRecordProfile() { | 709 Profile* Profile::CreateOffTheRecordProfile() { |
690 return new OffTheRecordProfileImpl(this); | 710 return new OffTheRecordProfileImpl(this); |
691 } | 711 } |
OLD | NEW |