OLD | NEW |
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 "components/password_manager/content/browser/credential_manager_dispatc
her.h" | 5 #include "components/password_manager/content/browser/credential_manager_dispatc
her.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/strings/string16.h" | 10 #include "base/strings/string16.h" |
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
218 PasswordManagerDriver* driver = | 218 PasswordManagerDriver* driver = |
219 driver_factory->GetDriverForFrame(web_contents()->GetMainFrame()); | 219 driver_factory->GetDriverForFrame(web_contents()->GetMainFrame()); |
220 return driver->AsWeakPtr(); | 220 return driver->AsWeakPtr(); |
221 } | 221 } |
222 | 222 |
223 void CredentialManagerDispatcher::SendCredential(int request_id, | 223 void CredentialManagerDispatcher::SendCredential(int request_id, |
224 const CredentialInfo& info) { | 224 const CredentialInfo& info) { |
225 DCHECK(pending_request_); | 225 DCHECK(pending_request_); |
226 DCHECK_EQ(pending_request_->id(), request_id); | 226 DCHECK_EQ(pending_request_->id(), request_id); |
227 | 227 |
228 if (PasswordStore* store = GetPasswordStore()) { | |
229 if (info.type != CredentialType::CREDENTIAL_TYPE_EMPTY && | |
230 IsZeroClickAllowed()) { | |
231 DCHECK(IsUpdatingCredentialAllowed()); | |
232 scoped_ptr<autofill::PasswordForm> form( | |
233 CreatePasswordFormFromCredentialInfo(info, | |
234 pending_request_->origin())); | |
235 form->skip_zero_click = false; | |
236 store->UpdateLogin(*form); | |
237 } | |
238 } | |
239 | |
240 web_contents()->GetRenderViewHost()->Send( | 228 web_contents()->GetRenderViewHost()->Send( |
241 new CredentialManagerMsg_SendCredential( | 229 new CredentialManagerMsg_SendCredential( |
242 web_contents()->GetRenderViewHost()->GetRoutingID(), | 230 web_contents()->GetRenderViewHost()->GetRoutingID(), |
243 pending_request_->id(), info)); | 231 pending_request_->id(), info)); |
244 pending_request_.reset(); | 232 pending_request_.reset(); |
245 } | 233 } |
246 | 234 |
| 235 void CredentialManagerDispatcher::SendPasswordForm( |
| 236 int request_id, |
| 237 const autofill::PasswordForm* form) { |
| 238 CredentialInfo info; |
| 239 if (form) { |
| 240 password_manager::CredentialType type_to_return = |
| 241 form->federation_origin.unique() |
| 242 ? CredentialType::CREDENTIAL_TYPE_PASSWORD |
| 243 : CredentialType::CREDENTIAL_TYPE_FEDERATED; |
| 244 info = CredentialInfo(*form, type_to_return); |
| 245 if (PasswordStore* store = GetPasswordStore()) { |
| 246 if (form->skip_zero_click && IsZeroClickAllowed()) { |
| 247 DCHECK(IsUpdatingCredentialAllowed()); |
| 248 autofill::PasswordForm update_form = *form; |
| 249 update_form.skip_zero_click = false; |
| 250 store->UpdateLogin(update_form); |
| 251 } |
| 252 } |
| 253 } |
| 254 SendCredential(request_id, info); |
| 255 } |
| 256 |
247 PasswordManagerClient* CredentialManagerDispatcher::client() const { | 257 PasswordManagerClient* CredentialManagerDispatcher::client() const { |
248 return client_; | 258 return client_; |
249 } | 259 } |
250 | 260 |
251 autofill::PasswordForm | 261 autofill::PasswordForm |
252 CredentialManagerDispatcher::GetSynthesizedFormForOrigin() const { | 262 CredentialManagerDispatcher::GetSynthesizedFormForOrigin() const { |
253 autofill::PasswordForm synthetic_form; | 263 autofill::PasswordForm synthetic_form; |
254 synthetic_form.origin = web_contents()->GetLastCommittedURL().GetOrigin(); | 264 synthetic_form.origin = web_contents()->GetLastCommittedURL().GetOrigin(); |
255 synthetic_form.signon_realm = synthetic_form.origin.spec(); | 265 synthetic_form.signon_realm = synthetic_form.origin.spec(); |
256 synthetic_form.scheme = autofill::PasswordForm::SCHEME_HTML; | 266 synthetic_form.scheme = autofill::PasswordForm::SCHEME_HTML; |
257 synthetic_form.ssl_valid = synthetic_form.origin.SchemeIsCryptographic() && | 267 synthetic_form.ssl_valid = synthetic_form.origin.SchemeIsCryptographic() && |
258 !client_->DidLastPageLoadEncounterSSLErrors(); | 268 !client_->DidLastPageLoadEncounterSSLErrors(); |
259 return synthetic_form; | 269 return synthetic_form; |
260 } | 270 } |
261 | 271 |
262 void CredentialManagerDispatcher::DoneRequiringUserMediation() { | 272 void CredentialManagerDispatcher::DoneRequiringUserMediation() { |
263 DCHECK(pending_require_user_mediation_); | 273 DCHECK(pending_require_user_mediation_); |
264 pending_require_user_mediation_.reset(); | 274 pending_require_user_mediation_.reset(); |
265 } | 275 } |
266 | 276 |
267 bool CredentialManagerDispatcher::IsUpdatingCredentialAllowed() const { | 277 bool CredentialManagerDispatcher::IsUpdatingCredentialAllowed() const { |
268 return !client_->DidLastPageLoadEncounterSSLErrors() && | 278 return !client_->DidLastPageLoadEncounterSSLErrors() && |
269 !client_->IsOffTheRecord(); | 279 !client_->IsOffTheRecord(); |
270 } | 280 } |
271 | 281 |
272 } // namespace password_manager | 282 } // namespace password_manager |
OLD | NEW |