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

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

Issue 1260263002: Move ShouldFilterAutofillResult from ChromePasswordManagerClient to PasswordManager (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Just rebased Created 5 years, 4 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
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"
(...skipping 22 matching lines...) Expand all
33 #include "components/password_manager/content/common/credential_manager_messages .h" 33 #include "components/password_manager/content/common/credential_manager_messages .h"
34 #include "components/password_manager/core/browser/browser_save_password_progres s_logger.h" 34 #include "components/password_manager/core/browser/browser_save_password_progres s_logger.h"
35 #include "components/password_manager/core/browser/log_receiver.h" 35 #include "components/password_manager/core/browser/log_receiver.h"
36 #include "components/password_manager/core/browser/password_form_manager.h" 36 #include "components/password_manager/core/browser/password_form_manager.h"
37 #include "components/password_manager/core/browser/password_manager_internals_se rvice.h" 37 #include "components/password_manager/core/browser/password_manager_internals_se rvice.h"
38 #include "components/password_manager/core/browser/password_manager_metrics_util .h" 38 #include "components/password_manager/core/browser/password_manager_metrics_util .h"
39 #include "components/password_manager/core/browser/password_manager_util.h" 39 #include "components/password_manager/core/browser/password_manager_util.h"
40 #include "components/password_manager/core/common/credential_manager_types.h" 40 #include "components/password_manager/core/common/credential_manager_types.h"
41 #include "components/password_manager/core/common/password_manager_pref_names.h" 41 #include "components/password_manager/core/common/password_manager_pref_names.h"
42 #include "components/password_manager/core/common/password_manager_switches.h" 42 #include "components/password_manager/core/common/password_manager_switches.h"
43 #include "components/password_manager/sync/browser/sync_store_result_filter.h"
43 #include "components/version_info/version_info.h" 44 #include "components/version_info/version_info.h"
44 #include "content/public/browser/navigation_entry.h" 45 #include "content/public/browser/navigation_entry.h"
45 #include "content/public/browser/render_view_host.h" 46 #include "content/public/browser/render_view_host.h"
46 #include "content/public/browser/web_contents.h" 47 #include "content/public/browser/web_contents.h"
47 #include "google_apis/gaia/gaia_urls.h" 48 #include "google_apis/gaia/gaia_urls.h"
48 #include "net/base/url_util.h" 49 #include "net/base/url_util.h"
49 #include "third_party/re2/re2/re2.h" 50 #include "third_party/re2/re2/re2.h"
50 51
51 #if defined(OS_ANDROID) 52 #if defined(OS_ANDROID)
52 #include "chrome/browser/password_manager/generated_password_saved_infobar_deleg ate_android.h" 53 #include "chrome/browser/password_manager/generated_password_saved_infobar_deleg ate_android.h"
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 106
106 ChromePasswordManagerClient::ChromePasswordManagerClient( 107 ChromePasswordManagerClient::ChromePasswordManagerClient(
107 content::WebContents* web_contents, 108 content::WebContents* web_contents,
108 autofill::AutofillClient* autofill_client) 109 autofill::AutofillClient* autofill_client)
109 : content::WebContentsObserver(web_contents), 110 : content::WebContentsObserver(web_contents),
110 profile_(Profile::FromBrowserContext(web_contents->GetBrowserContext())), 111 profile_(Profile::FromBrowserContext(web_contents->GetBrowserContext())),
111 password_manager_(this), 112 password_manager_(this),
112 driver_factory_(nullptr), 113 driver_factory_(nullptr),
113 credential_manager_dispatcher_(web_contents, this), 114 credential_manager_dispatcher_(web_contents, this),
114 observer_(nullptr), 115 observer_(nullptr),
115 can_use_log_router_(false), 116 can_use_log_router_(false) {
116 autofill_sync_state_(ALLOW_SYNC_CREDENTIALS),
117 sync_credential_was_filtered_(false) {
118 ContentPasswordManagerDriverFactory::CreateForWebContents(web_contents, this, 117 ContentPasswordManagerDriverFactory::CreateForWebContents(web_contents, this,
119 autofill_client); 118 autofill_client);
120 driver_factory_ = 119 driver_factory_ =
121 ContentPasswordManagerDriverFactory::FromWebContents(web_contents); 120 ContentPasswordManagerDriverFactory::FromWebContents(web_contents);
122 121
123 PasswordManagerInternalsService* service = 122 PasswordManagerInternalsService* service =
124 PasswordManagerInternalsServiceFactory::GetForBrowserContext(profile_); 123 PasswordManagerInternalsServiceFactory::GetForBrowserContext(profile_);
125 if (service) 124 if (service)
126 can_use_log_router_ = service->RegisterClient(this); 125 can_use_log_router_ = service->RegisterClient(this);
127 SetUpAutofillSyncState();
128 saving_passwords_enabled_.Init( 126 saving_passwords_enabled_.Init(
129 password_manager::prefs::kPasswordManagerSavingEnabled, GetPrefs()); 127 password_manager::prefs::kPasswordManagerSavingEnabled, GetPrefs());
130 ReportMetrics(*saving_passwords_enabled_, this); 128 ReportMetrics(*saving_passwords_enabled_, this);
131 } 129 }
132 130
133 ChromePasswordManagerClient::~ChromePasswordManagerClient() { 131 ChromePasswordManagerClient::~ChromePasswordManagerClient() {
134 PasswordManagerInternalsService* service = 132 PasswordManagerInternalsService* service =
135 PasswordManagerInternalsServiceFactory::GetForBrowserContext(profile_); 133 PasswordManagerInternalsServiceFactory::GetForBrowserContext(profile_);
136 if (service) 134 if (service)
137 service->UnregisterClient(this); 135 service->UnregisterClient(this);
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 } 169 }
172 return is_enabled; 170 return is_enabled;
173 } 171 }
174 172
175 bool ChromePasswordManagerClient::IsSavingEnabledForCurrentPage() const { 173 bool ChromePasswordManagerClient::IsSavingEnabledForCurrentPage() const {
176 return *saving_passwords_enabled_ && !IsOffTheRecord() && 174 return *saving_passwords_enabled_ && !IsOffTheRecord() &&
177 !DidLastPageLoadEncounterSSLErrors() && 175 !DidLastPageLoadEncounterSSLErrors() &&
178 IsPasswordManagementEnabledForCurrentPage(); 176 IsPasswordManagementEnabledForCurrentPage();
179 } 177 }
180 178
181 bool ChromePasswordManagerClient::ShouldFilterAutofillResult(
182 const autofill::PasswordForm& form) {
183 if (!IsSyncAccountCredential(base::UTF16ToUTF8(form.username_value),
184 form.signon_realm))
185 return false;
186
187 if (autofill_sync_state_ == DISALLOW_SYNC_CREDENTIALS) {
188 sync_credential_was_filtered_ = true;
189 return true;
190 }
191
192 if (autofill_sync_state_ == DISALLOW_SYNC_CREDENTIALS_FOR_REAUTH &&
193 LastLoadWasTransactionalReauthPage()) {
194 sync_credential_was_filtered_ = true;
195 return true;
196 }
197
198 return false;
199 }
200
201 std::string ChromePasswordManagerClient::GetSyncUsername() const { 179 std::string ChromePasswordManagerClient::GetSyncUsername() const {
202 return password_manager_sync_metrics::GetSyncUsername(profile_); 180 return password_manager_sync_metrics::GetSyncUsername(profile_);
203 } 181 }
204 182
205 bool ChromePasswordManagerClient::IsSyncAccountCredential( 183 bool ChromePasswordManagerClient::IsSyncAccountCredential(
206 const std::string& username, 184 const std::string& username,
207 const std::string& realm) const { 185 const std::string& realm) const {
208 return password_manager_sync_metrics::IsSyncAccountCredential( 186 return password_manager_sync_metrics::IsSyncAccountCredential(
209 profile_, username, realm); 187 profile_, username, realm);
210 } 188 }
211 189
212 void ChromePasswordManagerClient::AutofillResultsComputed() {
213 UMA_HISTOGRAM_BOOLEAN("PasswordManager.SyncCredentialFiltered",
214 sync_credential_was_filtered_);
215 sync_credential_was_filtered_ = false;
216 }
217
218 bool ChromePasswordManagerClient::PromptUserToSaveOrUpdatePassword( 190 bool ChromePasswordManagerClient::PromptUserToSaveOrUpdatePassword(
219 scoped_ptr<password_manager::PasswordFormManager> form_to_save, 191 scoped_ptr<password_manager::PasswordFormManager> form_to_save,
220 password_manager::CredentialSourceType type, 192 password_manager::CredentialSourceType type,
221 bool update_password) { 193 bool update_password) {
222 // Save password infobar and the password bubble prompts in case of 194 // Save password infobar and the password bubble prompts in case of
223 // "webby" URLs and do not prompt in case of "non-webby" URLS (e.g. file://). 195 // "webby" URLs and do not prompt in case of "non-webby" URLS (e.g. file://).
224 if (!BrowsingDataHelper::IsWebScheme( 196 if (!BrowsingDataHelper::IsWebScheme(
225 web_contents()->GetLastCommittedURL().scheme())) { 197 web_contents()->GetLastCommittedURL().scheme())) {
226 return false; 198 return false;
227 } 199 }
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after
480 452
481 void ChromePasswordManagerClient::NotifyRendererOfLoggingAvailability() { 453 void ChromePasswordManagerClient::NotifyRendererOfLoggingAvailability() {
482 if (!web_contents()) 454 if (!web_contents())
483 return; 455 return;
484 456
485 web_contents()->GetRenderViewHost()->Send(new AutofillMsg_SetLoggingState( 457 web_contents()->GetRenderViewHost()->Send(new AutofillMsg_SetLoggingState(
486 web_contents()->GetRenderViewHost()->GetRoutingID(), 458 web_contents()->GetRenderViewHost()->GetRoutingID(),
487 can_use_log_router_)); 459 can_use_log_router_));
488 } 460 }
489 461
490 bool ChromePasswordManagerClient::LastLoadWasTransactionalReauthPage() const {
491 DCHECK(web_contents());
492 content::NavigationEntry* entry =
493 web_contents()->GetController().GetLastCommittedEntry();
494 if (!entry)
495 return false;
496
497 if (entry->GetURL().GetOrigin() !=
498 GaiaUrls::GetInstance()->gaia_url().GetOrigin())
499 return false;
500
501 // "rart" is the transactional reauth paramter.
502 std::string ignored_value;
503 return net::GetValueForKeyInQuery(entry->GetURL(),
504 "rart",
505 &ignored_value);
506 }
507
508 bool ChromePasswordManagerClient::IsURLPasswordWebsiteReauth( 462 bool ChromePasswordManagerClient::IsURLPasswordWebsiteReauth(
509 const GURL& url) const { 463 const GURL& url) const {
510 if (url.GetOrigin() != GaiaUrls::GetInstance()->gaia_url().GetOrigin()) 464 if (url.GetOrigin() != GaiaUrls::GetInstance()->gaia_url().GetOrigin())
511 return false; 465 return false;
512 466
513 // "rart" param signals this page is for transactional reauth. 467 // "rart" param signals this page is for transactional reauth.
514 std::string param_value; 468 std::string param_value;
515 if (!net::GetValueForKeyInQuery(url, "rart", &param_value)) 469 if (!net::GetValueForKeyInQuery(url, "rart", &param_value))
516 return false; 470 return false;
517 471
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
565 if (command_line->HasSwitch( 519 if (command_line->HasSwitch(
566 password_manager::switches::kEnableManagerForSyncSignin)) 520 password_manager::switches::kEnableManagerForSyncSignin))
567 return true; 521 return true;
568 522
569 // Default is enabled. 523 // Default is enabled.
570 std::string group_name = 524 std::string group_name =
571 base::FieldTrialList::FindFullName("PasswordManagerStateForSyncSignin"); 525 base::FieldTrialList::FindFullName("PasswordManagerStateForSyncSignin");
572 return group_name != "Disabled"; 526 return group_name != "Disabled";
573 } 527 }
574 528
575 void ChromePasswordManagerClient::SetUpAutofillSyncState() {
576 std::string group_name =
577 base::FieldTrialList::FindFullName("AutofillSyncCredential");
578
579 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
580 if (command_line->HasSwitch(
581 password_manager::switches::kAllowAutofillSyncCredential)) {
582 autofill_sync_state_ = ALLOW_SYNC_CREDENTIALS;
583 return;
584 }
585 if (command_line->HasSwitch(
586 password_manager::switches::
587 kDisallowAutofillSyncCredentialForReauth)) {
588 autofill_sync_state_ = DISALLOW_SYNC_CREDENTIALS_FOR_REAUTH;
589 return;
590 }
591 if (command_line->HasSwitch(
592 password_manager::switches::kDisallowAutofillSyncCredential)) {
593 autofill_sync_state_ = DISALLOW_SYNC_CREDENTIALS;
594 return;
595 }
596
597 if (group_name == "DisallowSyncCredentialsForReauth") {
598 autofill_sync_state_ = DISALLOW_SYNC_CREDENTIALS_FOR_REAUTH;
599 } else if (group_name == "DisallowSyncCredentials") {
600 autofill_sync_state_ = DISALLOW_SYNC_CREDENTIALS;
601 } else {
602 // Allow by default.
603 autofill_sync_state_ = ALLOW_SYNC_CREDENTIALS;
604 }
605 }
606
607 const GURL& ChromePasswordManagerClient::GetMainFrameURL() const { 529 const GURL& ChromePasswordManagerClient::GetMainFrameURL() const {
608 return web_contents()->GetVisibleURL(); 530 return web_contents()->GetVisibleURL();
609 } 531 }
532
533 const GURL& ChromePasswordManagerClient::GetLastCommittedEntryURL() const {
534 DCHECK(web_contents());
535 content::NavigationEntry* entry =
536 web_contents()->GetController().GetLastCommittedEntry();
537 if (!entry)
538 return GURL::EmptyGURL();
539
540 return entry->GetURL();
541 }
542
543 scoped_ptr<password_manager::StoreResultFilter>
544 ChromePasswordManagerClient::CreateStoreResultFilter() const {
545 return make_scoped_ptr(new password_manager::SyncStoreResultFilter(this));
546 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698