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

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

Issue 7043007: Kill URLRequestJobTracker. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merge. Created 9 years, 7 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
« no previous file with comments | « chrome/browser/profiles/profile_manager.h ('k') | chrome/browser/task_manager/task_manager.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 <set> 5 #include <set>
6 6
7 #include "chrome/browser/profiles/profile_manager.h" 7 #include "chrome/browser/profiles/profile_manager.h"
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"
(...skipping 14 matching lines...) Expand all
25 #include "chrome/common/logging_chrome.h" 25 #include "chrome/common/logging_chrome.h"
26 #include "chrome/common/pref_names.h" 26 #include "chrome/common/pref_names.h"
27 #include "content/browser/browser_thread.h" 27 #include "content/browser/browser_thread.h"
28 #include "content/common/notification_service.h" 28 #include "content/common/notification_service.h"
29 #include "content/common/notification_type.h" 29 #include "content/common/notification_type.h"
30 #include "grit/generated_resources.h" 30 #include "grit/generated_resources.h"
31 #include "net/http/http_transaction_factory.h" 31 #include "net/http/http_transaction_factory.h"
32 #include "net/url_request/url_request_context.h" 32 #include "net/url_request/url_request_context.h"
33 #include "net/url_request/url_request_context_getter.h" 33 #include "net/url_request/url_request_context_getter.h"
34 #include "net/url_request/url_request_job.h" 34 #include "net/url_request/url_request_job.h"
35 #include "net/url_request/url_request_job_tracker.h"
36 35
37 #if defined(OS_CHROMEOS) 36 #if defined(OS_CHROMEOS)
38 #include "chrome/browser/chromeos/cros/cros_library.h" 37 #include "chrome/browser/chromeos/cros/cros_library.h"
39 #include "chrome/browser/chromeos/cros/cryptohome_library.h" 38 #include "chrome/browser/chromeos/cros/cryptohome_library.h"
40 #endif 39 #endif
41 40
42 namespace {
43
44 void SuspendURLRequestJobs() {
45 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
46 for (net::URLRequestJobTracker::JobIterator i =
47 net::g_url_request_job_tracker.begin();
48 i != net::g_url_request_job_tracker.end(); ++i)
49 (*i)->Kill();
50 }
51
52 void SuspendRequestContext(
53 net::URLRequestContextGetter* request_context_getter) {
54 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
55
56 scoped_refptr<net::URLRequestContext> request_context =
57 request_context_getter->GetURLRequestContext();
58
59 request_context->http_transaction_factory()->Suspend(true);
60 }
61
62 void ResumeRequestContext(
63 net::URLRequestContextGetter* request_context_getter) {
64 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
65
66 scoped_refptr<net::URLRequestContext> request_context =
67 request_context_getter->GetURLRequestContext();
68 request_context->http_transaction_factory()->Suspend(false);
69 }
70
71 } // namespace
72
73
74 bool ProfileManagerObserver::DeleteAfterCreation() { 41 bool ProfileManagerObserver::DeleteAfterCreation() {
75 return false; 42 return false;
76 } 43 }
77 44
78 // The NewProfileLauncher class is created when to wait for a multi-profile 45 // The NewProfileLauncher class is created when to wait for a multi-profile
79 // to be created asynchronously. Upon completion of profile creation, the 46 // to be created asynchronously. Upon completion of profile creation, the
80 // NPL takes care of launching a new browser window and signing the user 47 // NPL takes care of launching a new browser window and signing the user
81 // in to their Google account. 48 // in to their Google account.
82 class NewProfileLauncher : public ProfileManagerObserver { 49 class NewProfileLauncher : public ProfileManagerObserver {
83 public: 50 public:
(...skipping 20 matching lines...) Expand all
104 71
105 // static 72 // static
106 Profile* ProfileManager::GetDefaultProfile() { 73 Profile* ProfileManager::GetDefaultProfile() {
107 FilePath user_data_dir; 74 FilePath user_data_dir;
108 PathService::Get(chrome::DIR_USER_DATA, &user_data_dir); 75 PathService::Get(chrome::DIR_USER_DATA, &user_data_dir);
109 ProfileManager* profile_manager = g_browser_process->profile_manager(); 76 ProfileManager* profile_manager = g_browser_process->profile_manager();
110 return profile_manager->GetDefaultProfile(user_data_dir); 77 return profile_manager->GetDefaultProfile(user_data_dir);
111 } 78 }
112 79
113 ProfileManager::ProfileManager() : logged_in_(false) { 80 ProfileManager::ProfileManager() : logged_in_(false) {
114 base::SystemMonitor::Get()->AddObserver(this);
115 BrowserList::AddObserver(this); 81 BrowserList::AddObserver(this);
116 #if defined(OS_CHROMEOS) 82 #if defined(OS_CHROMEOS)
117 registrar_.Add( 83 registrar_.Add(
118 this, 84 this,
119 NotificationType::LOGIN_USER_CHANGED, 85 NotificationType::LOGIN_USER_CHANGED,
120 NotificationService::AllSources()); 86 NotificationService::AllSources());
121 #endif 87 #endif
122 } 88 }
123 89
124 ProfileManager::~ProfileManager() { 90 ProfileManager::~ProfileManager() {
125 base::SystemMonitor* system_monitor = base::SystemMonitor::Get();
126 if (system_monitor)
127 system_monitor->RemoveObserver(this);
128 BrowserList::RemoveObserver(this); 91 BrowserList::RemoveObserver(this);
129 } 92 }
130 93
131 FilePath ProfileManager::GetDefaultProfileDir( 94 FilePath ProfileManager::GetDefaultProfileDir(
132 const FilePath& user_data_dir) { 95 const FilePath& user_data_dir) {
133 FilePath default_profile_dir(user_data_dir); 96 FilePath default_profile_dir(user_data_dir);
134 default_profile_dir = 97 default_profile_dir =
135 default_profile_dir.AppendASCII(chrome::kNotSignedInProfile); 98 default_profile_dir.AppendASCII(chrome::kNotSignedInProfile);
136 return default_profile_dir; 99 return default_profile_dir;
137 } 100 }
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
340 ProfilesInfoMap::iterator new_elem = 303 ProfilesInfoMap::iterator new_elem =
341 (profiles_info_.insert(std::make_pair(profile->GetPath(), info))).first; 304 (profiles_info_.insert(std::make_pair(profile->GetPath(), info))).first;
342 return info; 305 return info;
343 } 306 }
344 307
345 Profile* ProfileManager::GetProfileByPath(const FilePath& path) const { 308 Profile* ProfileManager::GetProfileByPath(const FilePath& path) const {
346 ProfilesInfoMap::const_iterator iter = profiles_info_.find(path); 309 ProfilesInfoMap::const_iterator iter = profiles_info_.find(path);
347 return (iter == profiles_info_.end()) ? NULL : iter->second->profile.get(); 310 return (iter == profiles_info_.end()) ? NULL : iter->second->profile.get();
348 } 311 }
349 312
350 void ProfileManager::OnSuspend() {
351 DCHECK(CalledOnValidThread());
352
353 bool posted = BrowserThread::PostTask(
354 BrowserThread::IO, FROM_HERE,
355 NewRunnableFunction(&SuspendURLRequestJobs));
356 DCHECK(posted);
357
358 scoped_refptr<net::URLRequestContextGetter> request_context;
359 std::vector<Profile*> profiles(GetLoadedProfiles());
360 for (size_t i = 0; i < profiles.size(); ++i) {
361 request_context = profiles[i]->GetRequestContext();
362 posted = BrowserThread::PostTask(
363 BrowserThread::IO, FROM_HERE,
364 NewRunnableFunction(&SuspendRequestContext, request_context));
365 DCHECK(posted);
366 request_context = profiles[i]->GetRequestContextForMedia();
367 posted = BrowserThread::PostTask(
368 BrowserThread::IO, FROM_HERE,
369 NewRunnableFunction(&SuspendRequestContext, request_context));
370 DCHECK(posted);
371 }
372 }
373
374 void ProfileManager::OnResume() {
375 DCHECK(CalledOnValidThread());
376
377 scoped_refptr<net::URLRequestContextGetter> request_context;
378 std::vector<Profile*> profiles(GetLoadedProfiles());
379 for (size_t i = 0; i < profiles.size(); ++i) {
380 request_context = profiles[i]->GetRequestContext();
381 bool posted = BrowserThread::PostTask(
382 BrowserThread::IO, FROM_HERE,
383 NewRunnableFunction(&ResumeRequestContext, request_context));
384 DCHECK(posted);
385 request_context = profiles[i]->GetRequestContextForMedia();
386 posted = BrowserThread::PostTask(
387 BrowserThread::IO, FROM_HERE,
388 NewRunnableFunction(&ResumeRequestContext, request_context));
389 DCHECK(posted);
390 }
391 }
392
393 void ProfileManager::Observe( 313 void ProfileManager::Observe(
394 NotificationType type, 314 NotificationType type,
395 const NotificationSource& source, 315 const NotificationSource& source,
396 const NotificationDetails& details) { 316 const NotificationDetails& details) {
397 #if defined(OS_CHROMEOS) 317 #if defined(OS_CHROMEOS)
398 if (type == NotificationType::LOGIN_USER_CHANGED) { 318 if (type == NotificationType::LOGIN_USER_CHANGED) {
399 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); 319 const CommandLine& command_line = *CommandLine::ForCurrentProcess();
400 if (!command_line.HasSwitch(switches::kTestType)) { 320 if (!command_line.HasSwitch(switches::kTestType)) {
401 // This will fail when running on non cros os. 321 // This will fail when running on non cros os.
402 // TODO(davemoore) Need to mock this enough to enable testing. 322 // TODO(davemoore) Need to mock this enough to enable testing.
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
502 NewProfileLauncher* launcher = new NewProfileLauncher(); 422 NewProfileLauncher* launcher = new NewProfileLauncher();
503 profile_manager->CreateProfileAsync(new_path, launcher); 423 profile_manager->CreateProfileAsync(new_path, launcher);
504 } 424 }
505 425
506 // static 426 // static
507 void ProfileManager::RegisterPrefs(PrefService* prefs) { 427 void ProfileManager::RegisterPrefs(PrefService* prefs) {
508 prefs->RegisterStringPref(prefs::kProfileLastUsed, ""); 428 prefs->RegisterStringPref(prefs::kProfileLastUsed, "");
509 prefs->RegisterDictionaryPref(prefs::kProfileDirectoryMap); 429 prefs->RegisterDictionaryPref(prefs::kProfileDirectoryMap);
510 prefs->RegisterIntegerPref(prefs::kProfilesNumCreated, 1); 430 prefs->RegisterIntegerPref(prefs::kProfilesNumCreated, 1);
511 } 431 }
OLDNEW
« no previous file with comments | « chrome/browser/profiles/profile_manager.h ('k') | chrome/browser/task_manager/task_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698