| 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 #include "chrome/browser/signin/signin_manager.h" | 5 #include "chrome/browser/signin/signin_manager.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/memory/ref_counted.h" | 10 #include "base/memory/ref_counted.h" |
| (...skipping 15 matching lines...) Expand all Loading... |
| 26 #include "chrome/browser/signin/signin_manager_cookie_helper.h" | 26 #include "chrome/browser/signin/signin_manager_cookie_helper.h" |
| 27 #include "chrome/browser/signin/signin_manager_delegate.h" | 27 #include "chrome/browser/signin/signin_manager_delegate.h" |
| 28 #include "chrome/browser/signin/signin_manager_factory.h" | 28 #include "chrome/browser/signin/signin_manager_factory.h" |
| 29 #include "chrome/browser/ui/global_error/global_error_service.h" | 29 #include "chrome/browser/ui/global_error/global_error_service.h" |
| 30 #include "chrome/browser/ui/global_error/global_error_service_factory.h" | 30 #include "chrome/browser/ui/global_error/global_error_service_factory.h" |
| 31 #include "chrome/common/pref_names.h" | 31 #include "chrome/common/pref_names.h" |
| 32 #include "chrome/common/profile_management_switches.h" | 32 #include "chrome/common/profile_management_switches.h" |
| 33 #include "content/public/browser/browser_thread.h" | 33 #include "content/public/browser/browser_thread.h" |
| 34 #include "content/public/browser/notification_service.h" | 34 #include "content/public/browser/notification_service.h" |
| 35 #include "content/public/browser/render_process_host.h" | 35 #include "content/public/browser/render_process_host.h" |
| 36 #include "content/public/common/child_process_host.h" |
| 36 #include "google_apis/gaia/gaia_auth_fetcher.h" | 37 #include "google_apis/gaia/gaia_auth_fetcher.h" |
| 37 #include "google_apis/gaia/gaia_auth_util.h" | 38 #include "google_apis/gaia/gaia_auth_util.h" |
| 38 #include "google_apis/gaia/gaia_constants.h" | 39 #include "google_apis/gaia/gaia_constants.h" |
| 39 #include "google_apis/gaia/gaia_urls.h" | 40 #include "google_apis/gaia/gaia_urls.h" |
| 40 #include "net/base/escape.h" | 41 #include "net/base/escape.h" |
| 41 #include "net/url_request/url_request_context.h" | 42 #include "net/url_request/url_request_context.h" |
| 42 #include "third_party/icu/source/i18n/unicode/regex.h" | 43 #include "third_party/icu/source/i18n/unicode/regex.h" |
| 43 | 44 |
| 44 using namespace signin_internals_util; | 45 using namespace signin_internals_util; |
| 45 | 46 |
| 46 using content::BrowserThread; | 47 using content::BrowserThread; |
| 48 using content::ChildProcessHost; |
| 47 | 49 |
| 48 namespace { | 50 namespace { |
| 49 | 51 |
| 50 const char kGetInfoDisplayEmailKey[] = "displayEmail"; | 52 const char kGetInfoDisplayEmailKey[] = "displayEmail"; |
| 51 const char kGetInfoEmailKey[] = "email"; | 53 const char kGetInfoEmailKey[] = "email"; |
| 52 | 54 |
| 53 const int kInvalidProcessId = -1; | |
| 54 | |
| 55 const char kChromiumSyncService[] = "service=chromiumsync"; | 55 const char kChromiumSyncService[] = "service=chromiumsync"; |
| 56 | 56 |
| 57 } // namespace | 57 } // namespace |
| 58 | 58 |
| 59 // Under the covers, we use a dummy chrome-extension ID to serve the purposes | 59 // Under the covers, we use a dummy chrome-extension ID to serve the purposes |
| 60 // outlined in the .h file comment for this string. | 60 // outlined in the .h file comment for this string. |
| 61 const char* SigninManager::kChromeSigninEffectiveSite = | 61 const char* SigninManager::kChromeSigninEffectiveSite = |
| 62 "chrome-extension://acfccoigjajmmgbhpfbjnpckhjjegnih"; | 62 "chrome-extension://acfccoigjajmmgbhpfbjnpckhjjegnih"; |
| 63 | 63 |
| 64 // static | 64 // static |
| (...skipping 14 matching lines...) Expand all Loading... |
| 79 return net::UnescapeURLComponent( | 79 return net::UnescapeURLComponent( |
| 80 url.query(), net::UnescapeRule::URL_SPECIAL_CHARS) | 80 url.query(), net::UnescapeRule::URL_SPECIAL_CHARS) |
| 81 .find(kChromiumSyncService) != std::string::npos; | 81 .find(kChromiumSyncService) != std::string::npos; |
| 82 } | 82 } |
| 83 | 83 |
| 84 SigninManager::SigninManager(scoped_ptr<SigninManagerDelegate> delegate) | 84 SigninManager::SigninManager(scoped_ptr<SigninManagerDelegate> delegate) |
| 85 : prohibit_signout_(false), | 85 : prohibit_signout_(false), |
| 86 had_two_factor_error_(false), | 86 had_two_factor_error_(false), |
| 87 type_(SIGNIN_TYPE_NONE), | 87 type_(SIGNIN_TYPE_NONE), |
| 88 weak_pointer_factory_(this), | 88 weak_pointer_factory_(this), |
| 89 signin_process_id_(kInvalidProcessId), | 89 signin_host_id_(ChildProcessHost::kInvalidChildProcessUniqueId), |
| 90 delegate_(delegate.Pass()) { | 90 delegate_(delegate.Pass()) { |
| 91 } | 91 } |
| 92 | 92 |
| 93 void SigninManager::SetSigninProcess(int process_id) { | 93 void SigninManager::SetSigninProcess(int process_id) { |
| 94 if (process_id == signin_process_id_) | 94 if (process_id == signin_host_id_) |
| 95 return; | 95 return; |
| 96 DLOG_IF(WARNING, signin_process_id_ != kInvalidProcessId) << | 96 DLOG_IF(WARNING, |
| 97 "Replacing in-use signin process."; | 97 signin_host_id_ != ChildProcessHost::kInvalidChildProcessUniqueId) |
| 98 signin_process_id_ = process_id; | 98 << "Replacing in-use signin process."; |
| 99 signin_host_id_ = process_id; |
| 99 const content::RenderProcessHost* process = | 100 const content::RenderProcessHost* process = |
| 100 content::RenderProcessHost::FromID(process_id); | 101 content::RenderProcessHost::FromID(process_id); |
| 101 DCHECK(process); | 102 DCHECK(process); |
| 102 registrar_.Add(this, | 103 registrar_.Add(this, |
| 103 content::NOTIFICATION_RENDERER_PROCESS_TERMINATED, | 104 content::NOTIFICATION_RENDERER_PROCESS_TERMINATED, |
| 104 content::Source<content::RenderProcessHost>(process)); | 105 content::Source<content::RenderProcessHost>(process)); |
| 105 } | 106 } |
| 106 | 107 |
| 107 void SigninManager::ClearSigninProcess() { | 108 void SigninManager::ClearSigninProcess() { |
| 108 signin_process_id_ = kInvalidProcessId; | 109 signin_host_id_ = ChildProcessHost::kInvalidChildProcessUniqueId; |
| 109 } | 110 } |
| 110 | 111 |
| 111 bool SigninManager::IsSigninProcess(int process_id) const { | 112 bool SigninManager::IsSigninProcess(int process_id) const { |
| 112 return process_id == signin_process_id_; | 113 return process_id == signin_host_id_; |
| 113 } | 114 } |
| 114 | 115 |
| 115 bool SigninManager::HasSigninProcess() const { | 116 bool SigninManager::HasSigninProcess() const { |
| 116 return signin_process_id_ != kInvalidProcessId; | 117 return signin_host_id_ != ChildProcessHost::kInvalidChildProcessUniqueId; |
| 117 } | 118 } |
| 118 | 119 |
| 119 SigninManager::~SigninManager() { | 120 SigninManager::~SigninManager() { |
| 120 } | 121 } |
| 121 | 122 |
| 122 void SigninManager::InitTokenService() { | 123 void SigninManager::InitTokenService() { |
| 123 ProfileOAuth2TokenService* token_service = | 124 ProfileOAuth2TokenService* token_service = |
| 124 ProfileOAuth2TokenServiceFactory::GetForProfile(profile_); | 125 ProfileOAuth2TokenServiceFactory::GetForProfile(profile_); |
| 125 if (token_service && !GetAuthenticatedUsername().empty()) | 126 if (token_service && !GetAuthenticatedUsername().empty()) |
| 126 token_service->LoadCredentials(); | 127 token_service->LoadCredentials(); |
| (...skipping 472 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 599 OnClientLoginFailure(error); | 600 OnClientLoginFailure(error); |
| 600 } | 601 } |
| 601 | 602 |
| 602 void SigninManager::Observe(int type, | 603 void SigninManager::Observe(int type, |
| 603 const content::NotificationSource& source, | 604 const content::NotificationSource& source, |
| 604 const content::NotificationDetails& details) { | 605 const content::NotificationDetails& details) { |
| 605 DCHECK_EQ(content::NOTIFICATION_RENDERER_PROCESS_TERMINATED, type); | 606 DCHECK_EQ(content::NOTIFICATION_RENDERER_PROCESS_TERMINATED, type); |
| 606 | 607 |
| 607 // It's possible we're listening to a "stale" renderer because it was | 608 // It's possible we're listening to a "stale" renderer because it was |
| 608 // replaced with a new process by process-per-site. In either case, | 609 // replaced with a new process by process-per-site. In either case, |
| 609 // stop listening to it, but only reset signin_process_id_ tracking | 610 // stop listening to it, but only reset signin_host_id_ tracking |
| 610 // if this was from the current signin process. | 611 // if this was from the current signin process. |
| 611 registrar_.Remove(this, | 612 registrar_.Remove(this, |
| 612 content::NOTIFICATION_RENDERER_PROCESS_TERMINATED, | 613 content::NOTIFICATION_RENDERER_PROCESS_TERMINATED, |
| 613 source); | 614 source); |
| 614 if (signin_process_id_ == | 615 if (signin_host_id_ == |
| 615 content::Source<content::RenderProcessHost>(source)->GetID()) { | 616 content::Source<content::RenderProcessHost>(source)->GetID()) { |
| 616 signin_process_id_ = kInvalidProcessId; | 617 signin_host_id_ = ChildProcessHost::kInvalidChildProcessUniqueId; |
| 617 } | 618 } |
| 618 } | 619 } |
| 619 | 620 |
| 620 void SigninManager::ProhibitSignout(bool prohibit_signout) { | 621 void SigninManager::ProhibitSignout(bool prohibit_signout) { |
| 621 prohibit_signout_ = prohibit_signout; | 622 prohibit_signout_ = prohibit_signout; |
| 622 } | 623 } |
| 623 | 624 |
| 624 bool SigninManager::IsSignoutProhibited() const { | 625 bool SigninManager::IsSignoutProhibited() const { |
| 625 return prohibit_signout_; | 626 return prohibit_signout_; |
| 626 } | 627 } |
| OLD | NEW |