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

Side by Side Diff: chrome/browser/password_manager/chrome_password_manager_client.cc

Issue 269513003: Password manager internals page service: wiring it in (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Just rebased Created 6 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/password_manager/chrome_password_manager_client.h" 5 #include "chrome/browser/password_manager/chrome_password_manager_client.h"
6 6
7 #include "base/bind_helpers.h" 7 #include "base/bind_helpers.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/memory/singleton.h" 9 #include "base/memory/singleton.h"
10 #include "base/metrics/histogram.h" 10 #include "base/metrics/histogram.h"
11 #include "chrome/browser/password_manager/password_manager_util.h" 11 #include "chrome/browser/password_manager/password_manager_util.h"
12 #include "chrome/browser/password_manager/password_store_factory.h" 12 #include "chrome/browser/password_manager/password_store_factory.h"
13 #include "chrome/browser/password_manager/save_password_infobar_delegate.h" 13 #include "chrome/browser/password_manager/save_password_infobar_delegate.h"
14 #include "chrome/browser/profiles/profile.h" 14 #include "chrome/browser/profiles/profile.h"
15 #include "chrome/browser/sync/profile_sync_service.h" 15 #include "chrome/browser/sync/profile_sync_service.h"
16 #include "chrome/browser/sync/profile_sync_service_factory.h" 16 #include "chrome/browser/sync/profile_sync_service_factory.h"
17 #include "chrome/browser/ui/autofill/password_generation_popup_controller_impl.h " 17 #include "chrome/browser/ui/autofill/password_generation_popup_controller_impl.h "
18 #include "chrome/browser/ui/passwords/manage_passwords_ui_controller.h" 18 #include "chrome/browser/ui/passwords/manage_passwords_ui_controller.h"
19 #include "chrome/common/chrome_switches.h" 19 #include "chrome/common/chrome_switches.h"
20 #include "chrome/common/chrome_version_info.h" 20 #include "chrome/common/chrome_version_info.h"
21 #include "components/autofill/content/common/autofill_messages.h" 21 #include "components/autofill/content/common/autofill_messages.h"
22 #include "components/autofill/core/browser/password_generator.h" 22 #include "components/autofill/core/browser/password_generator.h"
23 #include "components/autofill/core/common/password_form.h" 23 #include "components/autofill/core/common/password_form.h"
24 #include "components/password_manager/content/browser/password_manager_internals _service_factory.h"
24 #include "components/password_manager/core/browser/password_form_manager.h" 25 #include "components/password_manager/core/browser/password_form_manager.h"
25 #include "components/password_manager/core/browser/password_manager.h" 26 #include "components/password_manager/core/browser/password_manager.h"
27 #include "components/password_manager/core/browser/password_manager_internals_se rvice.h"
26 #include "components/password_manager/core/browser/password_manager_logger.h" 28 #include "components/password_manager/core/browser/password_manager_logger.h"
27 #include "components/password_manager/core/browser/password_manager_metrics_util .h" 29 #include "components/password_manager/core/browser/password_manager_metrics_util .h"
28 #include "components/password_manager/core/common/password_manager_switches.h" 30 #include "components/password_manager/core/common/password_manager_switches.h"
29 #include "content/public/browser/render_view_host.h" 31 #include "content/public/browser/render_view_host.h"
30 #include "content/public/browser/web_contents.h" 32 #include "content/public/browser/web_contents.h"
31 33
32 #if defined(OS_ANDROID) 34 #if defined(OS_ANDROID)
33 #include "chrome/browser/android/password_authentication_manager.h" 35 #include "chrome/browser/android/password_authentication_manager.h"
34 #endif // OS_ANDROID 36 #endif // OS_ANDROID
35 37
38 using password_manager::PasswordManagerInternalsService;
39 using password_manager::PasswordManagerInternalsServiceFactory;
40
36 namespace { 41 namespace {
37 42
38 bool IsTheHotNewBubbleUIEnabled() { 43 bool IsTheHotNewBubbleUIEnabled() {
39 #if !defined(USE_AURA) 44 #if !defined(USE_AURA)
40 return false; 45 return false;
41 #endif 46 #endif
42 CommandLine* command_line = CommandLine::ForCurrentProcess(); 47 CommandLine* command_line = CommandLine::ForCurrentProcess();
43 if (command_line->HasSwitch(switches::kDisableSavePasswordBubble)) 48 if (command_line->HasSwitch(switches::kDisableSavePasswordBubble))
44 return false; 49 return false;
45 50
(...skipping 18 matching lines...) Expand all
64 return; 69 return;
65 70
66 contents->SetUserData(UserDataKey(), 71 contents->SetUserData(UserDataKey(),
67 new ChromePasswordManagerClient(contents, delegate)); 72 new ChromePasswordManagerClient(contents, delegate));
68 } 73 }
69 74
70 ChromePasswordManagerClient::ChromePasswordManagerClient( 75 ChromePasswordManagerClient::ChromePasswordManagerClient(
71 content::WebContents* web_contents, 76 content::WebContents* web_contents,
72 autofill::AutofillManagerDelegate* autofill_manager_delegate) 77 autofill::AutofillManagerDelegate* autofill_manager_delegate)
73 : content::WebContentsObserver(web_contents), 78 : content::WebContentsObserver(web_contents),
79 profile_(Profile::FromBrowserContext(web_contents->GetBrowserContext())),
74 driver_(web_contents, this, autofill_manager_delegate), 80 driver_(web_contents, this, autofill_manager_delegate),
75 observer_(NULL), 81 observer_(NULL),
76 weak_factory_(this), 82 weak_factory_(this),
77 logger_(NULL) {} 83 can_use_log_router_(false) {
84 PasswordManagerInternalsService* service =
85 PasswordManagerInternalsServiceFactory::GetForBrowserContext(profile_);
86 if (service)
87 can_use_log_router_ = service->RegisterClient(this);
88 }
78 89
79 ChromePasswordManagerClient::~ChromePasswordManagerClient() {} 90 ChromePasswordManagerClient::~ChromePasswordManagerClient() {
91 PasswordManagerInternalsService* service =
92 PasswordManagerInternalsServiceFactory::GetForBrowserContext(profile_);
93 if (service)
94 service->UnregisterClient(this);
95 }
80 96
81 bool ChromePasswordManagerClient::IsAutomaticPasswordSavingEnabled() const { 97 bool ChromePasswordManagerClient::IsAutomaticPasswordSavingEnabled() const {
82 return CommandLine::ForCurrentProcess()->HasSwitch( 98 return CommandLine::ForCurrentProcess()->HasSwitch(
83 password_manager::switches::kEnableAutomaticPasswordSaving) && 99 password_manager::switches::kEnableAutomaticPasswordSaving) &&
84 chrome::VersionInfo::GetChannel() == 100 chrome::VersionInfo::GetChannel() ==
85 chrome::VersionInfo::CHANNEL_UNKNOWN; 101 chrome::VersionInfo::CHANNEL_UNKNOWN;
86 } 102 }
87 103
88 void ChromePasswordManagerClient::PromptUserToSavePassword( 104 void ChromePasswordManagerClient::PromptUserToSavePassword(
89 password_manager::PasswordFormManager* form_to_save) { 105 password_manager::PasswordFormManager* form_to_save) {
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 base::Bind(&ChromePasswordManagerClient::CommitFillPasswordForm, 145 base::Bind(&ChromePasswordManagerClient::CommitFillPasswordForm,
130 weak_factory_.GetWeakPtr(), 146 weak_factory_.GetWeakPtr(),
131 base::Owned(fill_data.release()))); 147 base::Owned(fill_data.release())));
132 #else 148 #else
133 // Additional authentication is currently only available for Android, so all 149 // Additional authentication is currently only available for Android, so all
134 // other plaftorms should just fill the password form directly. 150 // other plaftorms should just fill the password form directly.
135 CommitFillPasswordForm(fill_data.get()); 151 CommitFillPasswordForm(fill_data.get());
136 #endif // OS_ANDROID 152 #endif // OS_ANDROID
137 } 153 }
138 154
139 Profile* ChromePasswordManagerClient::GetProfile() {
140 return Profile::FromBrowserContext(web_contents()->GetBrowserContext());
141 }
142
143 void ChromePasswordManagerClient::HidePasswordGenerationPopup() { 155 void ChromePasswordManagerClient::HidePasswordGenerationPopup() {
144 if (popup_controller_) 156 if (popup_controller_)
145 popup_controller_->HideAndDestroy(); 157 popup_controller_->HideAndDestroy();
146 } 158 }
147 159
148 PrefService* ChromePasswordManagerClient::GetPrefs() { 160 PrefService* ChromePasswordManagerClient::GetPrefs() {
149 return GetProfile()->GetPrefs(); 161 return profile_->GetPrefs();
150 } 162 }
151 163
152 password_manager::PasswordStore* 164 password_manager::PasswordStore*
153 ChromePasswordManagerClient::GetPasswordStore() { 165 ChromePasswordManagerClient::GetPasswordStore() {
154 // Always use EXPLICIT_ACCESS as the password manager checks IsOffTheRecord 166 // Always use EXPLICIT_ACCESS as the password manager checks IsOffTheRecord
155 // itself when it shouldn't access the PasswordStore. 167 // itself when it shouldn't access the PasswordStore.
156 // TODO(gcasto): Is is safe to change this to Profile::IMPLICIT_ACCESS? 168 // TODO(gcasto): Is is safe to change this to Profile::IMPLICIT_ACCESS?
157 return PasswordStoreFactory::GetForProfile(GetProfile(), 169 return PasswordStoreFactory::GetForProfile(profile_, Profile::EXPLICIT_ACCESS)
158 Profile::EXPLICIT_ACCESS).get(); 170 .get();
159 } 171 }
160 172
161 password_manager::PasswordManagerDriver* 173 password_manager::PasswordManagerDriver*
162 ChromePasswordManagerClient::GetDriver() { 174 ChromePasswordManagerClient::GetDriver() {
163 return &driver_; 175 return &driver_;
164 } 176 }
165 177
166 base::FieldTrial::Probability 178 base::FieldTrial::Probability
167 ChromePasswordManagerClient::GetProbabilityForExperiment( 179 ChromePasswordManagerClient::GetProbabilityForExperiment(
168 const std::string& experiment_name) { 180 const std::string& experiment_name) {
169 base::FieldTrial::Probability enabled_probability = 0; 181 base::FieldTrial::Probability enabled_probability = 0;
170 if (experiment_name == 182 if (experiment_name ==
171 password_manager::PasswordManager::kOtherPossibleUsernamesExperiment) { 183 password_manager::PasswordManager::kOtherPossibleUsernamesExperiment) {
172 switch (chrome::VersionInfo::GetChannel()) { 184 switch (chrome::VersionInfo::GetChannel()) {
173 case chrome::VersionInfo::CHANNEL_DEV: 185 case chrome::VersionInfo::CHANNEL_DEV:
174 case chrome::VersionInfo::CHANNEL_BETA: 186 case chrome::VersionInfo::CHANNEL_BETA:
175 enabled_probability = 50; 187 enabled_probability = 50;
176 break; 188 break;
177 default: 189 default:
178 break; 190 break;
179 } 191 }
180 } 192 }
181 return enabled_probability; 193 return enabled_probability;
182 } 194 }
183 195
184 bool ChromePasswordManagerClient::IsPasswordSyncEnabled() { 196 bool ChromePasswordManagerClient::IsPasswordSyncEnabled() {
185 ProfileSyncService* sync_service = 197 ProfileSyncService* sync_service =
186 ProfileSyncServiceFactory::GetForProfile(GetProfile()); 198 ProfileSyncServiceFactory::GetForProfile(profile_);
187 // Don't consider sync enabled if the user has a custom passphrase. See 199 // Don't consider sync enabled if the user has a custom passphrase. See
188 // crbug.com/358998 for more details. 200 // crbug.com/358998 for more details.
189 if (sync_service && 201 if (sync_service &&
190 sync_service->HasSyncSetupCompleted() && 202 sync_service->HasSyncSetupCompleted() &&
191 sync_service->sync_initialized() && 203 sync_service->sync_initialized() &&
192 !sync_service->IsUsingSecondaryPassphrase()) { 204 !sync_service->IsUsingSecondaryPassphrase()) {
193 return sync_service->GetActiveDataTypes().Has(syncer::PASSWORDS); 205 return sync_service->GetActiveDataTypes().Has(syncer::PASSWORDS);
194 } 206 }
195 return false; 207 return false;
196 } 208 }
197 209
198 void ChromePasswordManagerClient::SetLogger( 210 void ChromePasswordManagerClient::NotifyCanUseLogRouter(
Ilya Sherman 2014/05/13 04:32:18 I find this method name pretty confusing. Perhaps
vabr (Chromium) 2014/05/13 09:27:11 Done.
199 password_manager::PasswordManagerLogger* logger) { 211 bool router_can_be_used) {
200 // We should never be replacing one logger with a different one, because that 212 if (can_use_log_router_ == router_can_be_used)
201 // will leave the first without further updates, and the user likely confused. 213 return;
202 // TODO(vabr): For the reason above, before moving the internals page from 214 can_use_log_router_ = router_can_be_used;
203 // behind the flag, make sure to restrict the number of internals page 215
204 // instances to 1 in normal profiles, and 0 in incognito. 216 if (!web_contents())
205 DCHECK(!logger || !logger_); 217 return;
206 logger_ = logger;
207 218
208 // Also inform the renderer process to start or stop logging. 219 // Also inform the renderer process to start or stop logging.
209 web_contents()->GetRenderViewHost()->Send(new AutofillMsg_ChangeLoggingState( 220 web_contents()->GetRenderViewHost()->Send(new AutofillMsg_ChangeLoggingState(
210 web_contents()->GetRenderViewHost()->GetRoutingID(), logger != NULL)); 221 web_contents()->GetRenderViewHost()->GetRoutingID(),
222 can_use_log_router_));
211 } 223 }
212 224
213 void ChromePasswordManagerClient::LogSavePasswordProgress( 225 void ChromePasswordManagerClient::LogSavePasswordProgress(
214 const std::string& text) { 226 const std::string& text) {
215 if (IsLoggingActive()) 227 if (!IsLoggingActive())
216 logger_->LogSavePasswordProgress(text); 228 return;
229 PasswordManagerInternalsService* service =
230 PasswordManagerInternalsServiceFactory::GetForBrowserContext(profile_);
231 if (service)
232 service->ProcessLog(text);
217 } 233 }
218 234
219 bool ChromePasswordManagerClient::IsLoggingActive() const { 235 bool ChromePasswordManagerClient::IsLoggingActive() const {
220 return logger_ != NULL; 236 // WebUI tabs do not need to log password saving progress.
Ilya Sherman 2014/05/13 04:32:18 nit: It would probably be useful to mention that t
vabr (Chromium) 2014/05/13 09:27:11 Done.
237 return can_use_log_router_ && !web_contents()->GetWebUI();
221 } 238 }
222 239
223 // static 240 // static
224 password_manager::PasswordGenerationManager* 241 password_manager::PasswordGenerationManager*
225 ChromePasswordManagerClient::GetGenerationManagerFromWebContents( 242 ChromePasswordManagerClient::GetGenerationManagerFromWebContents(
226 content::WebContents* contents) { 243 content::WebContents* contents) {
227 ChromePasswordManagerClient* client = 244 ChromePasswordManagerClient* client =
228 ChromePasswordManagerClient::FromWebContents(contents); 245 ChromePasswordManagerClient::FromWebContents(contents);
229 if (!client) 246 if (!client)
230 return NULL; 247 return NULL;
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
310 web_contents(), 327 web_contents(),
311 web_contents()->GetNativeView()); 328 web_contents()->GetNativeView());
312 popup_controller_->Show(false /* display_password */); 329 popup_controller_->Show(false /* display_password */);
313 #endif // #if defined(USE_AURA) 330 #endif // #if defined(USE_AURA)
314 } 331 }
315 332
316 void ChromePasswordManagerClient::CommitFillPasswordForm( 333 void ChromePasswordManagerClient::CommitFillPasswordForm(
317 autofill::PasswordFormFillData* data) { 334 autofill::PasswordFormFillData* data) {
318 driver_.FillPasswordForm(*data); 335 driver_.FillPasswordForm(*data);
319 } 336 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698