diff options
author | mkwst <mkwst@chromium.org> | 2016-02-25 22:46:22 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-02-26 06:47:35 +0000 |
commit | 0604e9e30c88836aaab577189b7c1f19f2ab55d8 (patch) | |
tree | dc8f79824bf7f9bd7bc2eb4de3da4815be95d9da /chrome | |
parent | 84b8e54216a4df727934d61ecd483e2edd0d5d58 (diff) | |
download | chromium_src-0604e9e30c88836aaab577189b7c1f19f2ab55d8.zip chromium_src-0604e9e30c88836aaab577189b7c1f19f2ab55d8.tar.gz chromium_src-0604e9e30c88836aaab577189b7c1f19f2ab55d8.tar.bz2 |
CREDENTIAL: Convert federations from URLs to origins throughout.
We've been loosely treating federations as URLs, as it was simple and
easy. That laxness, however, has caused some issues with the Android
integration, as they are doing exact string comparisons as opposed to
origin comparisons. In particular, they expect the serialization stored
to sync to exclude the trailing '/'.
This patch converts the field to an origin throughout, which ensures
both that the serialization matches Android's expectations, but also
that we're properly excluding paths and etc. from the comparisons we
make in various places in the codebase.
BUG=589016
R=vabr@chromium.org, vasilii@chromium.org, jochen@chromium.org
TBR=marq@chromium.org
Review URL: https://codereview.chromium.org/1723583004
Cr-Commit-Position: refs/heads/master@{#377834}
Diffstat (limited to 'chrome')
24 files changed, 120 insertions, 74 deletions
diff --git a/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.cc b/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.cc index b9a05db..09a3a99 100644 --- a/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.cc +++ b/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.cc @@ -171,11 +171,10 @@ void PasswordsPrivateDelegateImpl::SetPasswordList( entry->login_pair.username = base::UTF16ToUTF8(form->username_value); entry->num_characters_in_password = form->password_value.length(); - const GURL& federation_url = form->federation_url; - if (!federation_url.is_empty()) { + if (!form->federation_origin.unique()) { entry->federation_text.reset(new std::string(l10n_util::GetStringFUTF8( IDS_PASSWORDS_VIA_FEDERATION, - base::UTF8ToUTF16(federation_url.host_piece())))); + base::UTF8ToUTF16(form->federation_origin.host())))); } current_entries_.push_back(entry); diff --git a/chrome/browser/password_manager/credential_android.cc b/chrome/browser/password_manager/credential_android.cc index c1be78d..f1dc98b 100644 --- a/chrome/browser/password_manager/credential_android.cc +++ b/chrome/browser/password_manager/credential_android.cc @@ -9,6 +9,7 @@ #include "chrome/grit/generated_resources.h" #include "jni/Credential_jni.h" #include "ui/base/l10n/l10n_util.h" +#include "url/origin.h" base::android::ScopedJavaLocalRef<jobject> CreateNativeCredential( JNIEnv* env, @@ -18,11 +19,11 @@ base::android::ScopedJavaLocalRef<jobject> CreateNativeCredential( using base::android::ConvertUTF16ToJavaString; using base::android::ConvertUTF8ToJavaString; std::string federation = - password_form.federation_url.is_empty() + password_form.federation_origin.unique() ? std::string() : l10n_util::GetStringFUTF8( IDS_PASSWORDS_VIA_FEDERATION, - base::ASCIIToUTF16(password_form.federation_url.host())); + base::ASCIIToUTF16(password_form.federation_origin.host())); return Java_Credential_createCredential( env, ConvertUTF16ToJavaString(env, password_form.username_value).obj(), ConvertUTF16ToJavaString(env, password_form.display_name).obj(), diff --git a/chrome/browser/password_manager/native_backend_gnome_x.cc b/chrome/browser/password_manager/native_backend_gnome_x.cc index 6771e7d..2134b20 100644 --- a/chrome/browser/password_manager/native_backend_gnome_x.cc +++ b/chrome/browser/password_manager/native_backend_gnome_x.cc @@ -157,7 +157,8 @@ scoped_ptr<PasswordForm> FormFromAttributes(GnomeKeyringAttributeList* attrs) { form->date_synced = base::Time::FromInternalValue(date_synced); form->display_name = UTF8ToUTF16(string_attr_map["display_name"]); form->icon_url = GURL(string_attr_map["avatar_url"]); - form->federation_url = GURL(string_attr_map["federation_url"]); + form->federation_origin = + url::Origin(GURL(string_attr_map["federation_url"])); form->skip_zero_click = uint_attr_map["skip_zero_click"]; form->generation_upload_status = static_cast<PasswordForm::GenerationUploadStatus>( @@ -344,13 +345,13 @@ void GKRMethod::AddLogin(const PasswordForm& form, const char* app_string) { int64_t date_synced = form.date_synced.ToInternalValue(); std::string form_data; SerializeFormDataToBase64String(form.form_data, &form_data); + // clang-format off gnome_keyring_store_password( &kGnomeSchema, - nullptr, // Default keyring. + nullptr, // Default keyring. form.origin.spec().c_str(), // Display name. - UTF16ToUTF8(form.password_value).c_str(), - OnOperationDone, - this, // data + UTF16ToUTF8(form.password_value).c_str(), OnOperationDone, + this, // data nullptr, // destroy_data "origin_url", form.origin.spec().c_str(), "action_url", form.action.spec().c_str(), @@ -369,12 +370,13 @@ void GKRMethod::AddLogin(const PasswordForm& form, const char* app_string) { "date_synced", base::Int64ToString(date_synced).c_str(), "display_name", UTF16ToUTF8(form.display_name).c_str(), "avatar_url", form.icon_url.spec().c_str(), - "federation_url", form.federation_url.spec().c_str(), + "federation_url", form.federation_origin.Serialize().c_str(), "skip_zero_click", form.skip_zero_click, "generation_upload_status", form.generation_upload_status, "form_data", form_data.c_str(), "application", app_string, nullptr); + // clang-format on } void GKRMethod::LoginSearch(const PasswordForm& form, diff --git a/chrome/browser/password_manager/native_backend_gnome_x_unittest.cc b/chrome/browser/password_manager/native_backend_gnome_x_unittest.cc index 93d79a55..f94dc95 100644 --- a/chrome/browser/password_manager/native_backend_gnome_x_unittest.cc +++ b/chrome/browser/password_manager/native_backend_gnome_x_unittest.cc @@ -317,7 +317,8 @@ void CheckPasswordChanges(const PasswordStoreChangeList& expected_list, EXPECT_EQ(expected.date_synced, actual.date_synced); EXPECT_EQ(expected.display_name, actual.display_name); EXPECT_EQ(expected.icon_url, actual.icon_url); - EXPECT_EQ(expected.federation_url, actual.federation_url); + EXPECT_EQ(expected.federation_origin.Serialize(), + actual.federation_origin.Serialize()); EXPECT_EQ(expected.skip_zero_click, actual.skip_zero_click); EXPECT_EQ(expected.generation_upload_status, actual.generation_upload_status); @@ -371,7 +372,8 @@ class NativeBackendGnomeTest : public testing::Test { form_google_.date_synced = base::Time::Now(); form_google_.display_name = UTF8ToUTF16("Joe Schmoe"); form_google_.icon_url = GURL("http://www.google.com/icon"); - form_google_.federation_url = GURL("http://www.google.com/federation_url"); + form_google_.federation_origin = + url::Origin(GURL("http://www.google.com/")); form_google_.skip_zero_click = true; form_google_.generation_upload_status = PasswordForm::POSITIVE_SIGNAL_SENT; form_google_.form_data.name = UTF8ToUTF16("form_name"); @@ -388,7 +390,8 @@ class NativeBackendGnomeTest : public testing::Test { form_facebook_.date_synced = base::Time::Now(); form_facebook_.display_name = UTF8ToUTF16("Joe Schmoe"); form_facebook_.icon_url = GURL("http://www.facebook.com/icon"); - form_facebook_.federation_url = GURL("http://www.facebook.com/federation"); + form_facebook_.federation_origin = + url::Origin(GURL("http://www.facebook.com/")); form_facebook_.skip_zero_click = true; form_facebook_.generation_upload_status = PasswordForm::NO_SIGNAL_SENT; @@ -488,7 +491,8 @@ class NativeBackendGnomeTest : public testing::Test { form.date_synced.ToInternalValue())); CheckStringAttribute(item, "display_name", UTF16ToUTF8(form.display_name)); CheckStringAttribute(item, "avatar_url", form.icon_url.spec()); - CheckStringAttribute(item, "federation_url", form.federation_url.spec()); + CheckStringAttribute(item, "federation_url", + form.federation_origin.Serialize()); CheckUint32Attribute(item, "skip_zero_click", form.skip_zero_click); CheckUint32Attribute(item, "generation_upload_status", form.generation_upload_status); diff --git a/chrome/browser/password_manager/native_backend_kwallet_x.cc b/chrome/browser/password_manager/native_backend_kwallet_x.cc index b94523f..cf46681 100644 --- a/chrome/browser/password_manager/native_backend_kwallet_x.cc +++ b/chrome/browser/password_manager/native_backend_kwallet_x.cc @@ -28,6 +28,7 @@ #include "dbus/object_path.h" #include "dbus/object_proxy.h" #include "ui/base/l10n/l10n_util.h" +#include "url/origin.h" using autofill::PasswordForm; using content::BrowserThread; @@ -84,6 +85,22 @@ bool ReadGURL(base::PickleIterator* iter, bool warn_only, GURL* url) { return true; } +// Convenience function to read a url::Origin from a Pickle. Assumes the origin +// has been written as a UTF-8 string. Returns true on success. +bool ReadOrigin(base::PickleIterator* iter, + bool warn_only, + url::Origin* origin) { + std::string origin_string; + if (!iter->ReadString(&origin_string)) { + if (!warn_only) + LOG(ERROR) << "Failed to deserialize Origin."; + *origin = url::Origin(); + return false; + } + *origin = url::Origin(GURL(origin_string)); + return true; +} + void LogDeserializationWarning(int version, std::string signon_realm, bool warn_only) { @@ -199,7 +216,7 @@ bool DeserializeValueSize(const std::string& signon_realm, if (version > 3) { if (!iter.ReadString16(&form->display_name) || !ReadGURL(&iter, warn_only, &form->icon_url) || - !ReadGURL(&iter, warn_only, &form->federation_url) || + !ReadOrigin(&iter, warn_only, &form->federation_origin) || !iter.ReadBool(&form->skip_zero_click)) { LogDeserializationWarning(version, signon_realm, false); return false; @@ -258,7 +275,7 @@ void SerializeValue(const std::vector<autofill::PasswordForm*>& forms, pickle->WriteInt64(form->date_synced.ToInternalValue()); pickle->WriteString16(form->display_name); pickle->WriteString(form->icon_url.spec()); - pickle->WriteString(form->federation_url.spec()); + pickle->WriteString(form->federation_origin.Serialize()); pickle->WriteBool(form->skip_zero_click); pickle->WriteInt(form->generation_upload_status); } diff --git a/chrome/browser/password_manager/native_backend_kwallet_x_unittest.cc b/chrome/browser/password_manager/native_backend_kwallet_x_unittest.cc index 9b166e4..212918e 100644 --- a/chrome/browser/password_manager/native_backend_kwallet_x_unittest.cc +++ b/chrome/browser/password_manager/native_backend_kwallet_x_unittest.cc @@ -184,7 +184,8 @@ class NativeBackendKWalletTestBase : form_google_.date_created = old_form_google_.date_created; form_google_.display_name = UTF8ToUTF16("Joe Schmoe"); form_google_.icon_url = GURL("http://www.google.com/icon"); - form_google_.federation_url = GURL("http://www.google.com/federation_url"); + form_google_.federation_origin = + url::Origin(GURL("http://www.google.com/")); form_google_.skip_zero_click = true; form_google_.generation_upload_status = PasswordForm::NEGATIVE_SIGNAL_SENT; @@ -240,7 +241,8 @@ void NativeBackendKWalletTestBase::CheckPasswordForm( EXPECT_EQ(expected.date_synced, actual.date_synced); EXPECT_EQ(expected.display_name, actual.display_name); EXPECT_EQ(expected.icon_url, actual.icon_url); - EXPECT_EQ(expected.federation_url, actual.federation_url); + EXPECT_EQ(expected.federation_origin.Serialize(), + actual.federation_origin.Serialize()); EXPECT_EQ(expected.skip_zero_click, actual.skip_zero_click); EXPECT_EQ(expected.generation_upload_status, actual.generation_upload_status); } @@ -1146,7 +1148,7 @@ void NativeBackendKWalletPickleTest::CreateVersion1PlusPickle( return; pickle->WriteString16(form.display_name); pickle->WriteString(form.icon_url.spec()); - pickle->WriteString(form.federation_url.spec()); + pickle->WriteString(form.federation_origin.Serialize()); pickle->WriteBool(form.skip_zero_click); if (effective_version < 7) return; @@ -1227,7 +1229,7 @@ void NativeBackendKWalletPickleTest::CheckVersion3Pickle() { // Remove the fields which were not present in version #3. form.display_name = default_values.display_name; form.icon_url = default_values.icon_url; - form.federation_url = default_values.federation_url; + form.federation_origin = default_values.federation_origin; form.skip_zero_click = default_values.skip_zero_click; form.generation_upload_status = default_values.generation_upload_status; CreateVersion1PlusPickle(form, &pickle, 3, 3); diff --git a/chrome/browser/password_manager/native_backend_libsecret.cc b/chrome/browser/password_manager/native_backend_libsecret.cc index 5c86c42..25cd9eb 100644 --- a/chrome/browser/password_manager/native_backend_libsecret.cc +++ b/chrome/browser/password_manager/native_backend_libsecret.cc @@ -21,6 +21,7 @@ #include "base/strings/utf_string_conversions.h" #include "components/password_manager/core/browser/password_manager_metrics_util.h" #include "components/password_manager/core/browser/password_manager_util.h" +#include "url/origin.h" using autofill::PasswordForm; using base::UTF8ToUTF16; @@ -192,7 +193,8 @@ scoped_ptr<PasswordForm> FormOutOfAttributes(GHashTable* attrs) { form->display_name = UTF8ToUTF16(GetStringFromAttributes(attrs, "display_name")); form->icon_url = GURL(GetStringFromAttributes(attrs, "avatar_url")); - form->federation_url = GURL(GetStringFromAttributes(attrs, "federation_url")); + form->federation_origin = + url::Origin(GURL(GetStringFromAttributes(attrs, "federation_url"))); form->skip_zero_click = GetUintFromAttributes(attrs, "skip_zero_click"); form->generation_upload_status = static_cast<PasswordForm::GenerationUploadStatus>( @@ -448,6 +450,7 @@ bool NativeBackendLibsecret::RawAddLogin(const PasswordForm& form) { std::string form_data; SerializeFormDataToBase64String(form.form_data, &form_data); GError* error = nullptr; + // clang-format off secret_password_store_sync( &kLibsecretSchema, nullptr, // Default collection. @@ -472,11 +475,13 @@ bool NativeBackendLibsecret::RawAddLogin(const PasswordForm& form) { "date_synced", base::Int64ToString(date_synced).c_str(), "display_name", UTF16ToUTF8(form.display_name).c_str(), "avatar_url", form.icon_url.spec().c_str(), - "federation_url", form.federation_url.spec().c_str(), + "federation_url", form.federation_origin.Serialize().c_str(), "skip_zero_click", form.skip_zero_click, "generation_upload_status", form.generation_upload_status, "form_data", form_data.c_str(), - "application", app_string_.c_str(), nullptr); + "application", app_string_.c_str(), + nullptr); + // clang-format on if (error) { LOG(ERROR) << "Libsecret add raw login failed: " << error->message; diff --git a/chrome/browser/password_manager/native_backend_libsecret_unittest.cc b/chrome/browser/password_manager/native_backend_libsecret_unittest.cc index c26802d..a589863 100644 --- a/chrome/browser/password_manager/native_backend_libsecret_unittest.cc +++ b/chrome/browser/password_manager/native_backend_libsecret_unittest.cc @@ -292,7 +292,8 @@ class NativeBackendLibsecretTest : public testing::Test { form_google_.date_synced = base::Time::Now(); form_google_.display_name = UTF8ToUTF16("Joe Schmoe"); form_google_.icon_url = GURL("http://www.google.com/icon"); - form_google_.federation_url = GURL("http://www.google.com/federation_url"); + form_google_.federation_origin = + url::Origin(GURL("http://www.google.com/")); form_google_.skip_zero_click = true; form_google_.generation_upload_status = PasswordForm::POSITIVE_SIGNAL_SENT; form_google_.form_data.name = UTF8ToUTF16("form_name"); @@ -309,7 +310,8 @@ class NativeBackendLibsecretTest : public testing::Test { form_facebook_.date_synced = base::Time::Now(); form_facebook_.display_name = UTF8ToUTF16("Joe Schmoe"); form_facebook_.icon_url = GURL("http://www.facebook.com/icon"); - form_facebook_.federation_url = GURL("http://www.facebook.com/federation"); + form_facebook_.federation_origin = + url::Origin(GURL("http://www.facebook.com/")); form_facebook_.skip_zero_click = true; form_facebook_.generation_upload_status = PasswordForm::NO_SIGNAL_SENT; @@ -396,7 +398,8 @@ class NativeBackendLibsecretTest : public testing::Test { base::Int64ToString(form.date_synced.ToInternalValue())); CheckStringAttribute(item, "display_name", UTF16ToUTF8(form.display_name)); CheckStringAttribute(item, "avatar_url", form.icon_url.spec()); - CheckStringAttribute(item, "federation_url", form.federation_url.spec()); + CheckStringAttribute(item, "federation_url", + form.federation_origin.Serialize()); CheckUint32Attribute(item, "skip_zero_click", form.skip_zero_click); CheckUint32Attribute(item, "generation_upload_status", form.generation_upload_status); diff --git a/chrome/browser/password_manager/password_store_mac.cc b/chrome/browser/password_manager/password_store_mac.cc index ed350b0..dd567f8 100644 --- a/chrome/browser/password_manager/password_store_mac.cc +++ b/chrome/browser/password_manager/password_store_mac.cc @@ -243,7 +243,7 @@ inline void MoveAllFormsOut(ScopedVector<autofill::PasswordForm>* forms, // True if the form has no password to be stored in Keychain. bool IsLoginDatabaseOnlyForm(const autofill::PasswordForm& form) { - return form.blacklisted_by_user || !form.federation_url.is_empty() || + return form.blacklisted_by_user || !form.federation_origin.unique() || form.scheme == autofill::PasswordForm::SCHEME_USERNAME_ONLY; } diff --git a/chrome/browser/password_manager/password_store_mac_unittest.cc b/chrome/browser/password_manager/password_store_mac_unittest.cc index d6c7fb4..6b21254 100644 --- a/chrome/browser/password_manager/password_store_mac_unittest.cc +++ b/chrome/browser/password_manager/password_store_mac_unittest.cc @@ -29,6 +29,7 @@ #include "crypto/mock_apple_keychain.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" +#include "url/origin.h" using autofill::PasswordForm; using base::ASCIIToUTF16; @@ -143,12 +144,13 @@ void CheckFormsAgainstExpectations( wcscmp(expectation->password_value, password_manager::kTestingFederatedLoginMarker) == 0) { EXPECT_TRUE(form->password_value.empty()); - EXPECT_EQ(GURL(password_manager::kTestingFederationUrlSpec), - form->federation_url); + EXPECT_EQ( + url::Origin(GURL(password_manager::kTestingFederationUrlSpec)), + form->federation_origin); } else { EXPECT_EQ(WideToUTF16(expectation->password_value), form->password_value); - EXPECT_TRUE(form->federation_url.is_empty()); + EXPECT_TRUE(form->federation_origin.unique()); } } else { EXPECT_TRUE(form->blacklisted_by_user); @@ -876,7 +878,8 @@ TEST_F(PasswordStoreMacInternalsTest, TestFormMatch) { // Federated login forms should never match for merging either. { PasswordForm form_b(base_form); - form_b.federation_url = GURL(password_manager::kTestingFederationUrlSpec); + form_b.federation_origin = + url::Origin(GURL(password_manager::kTestingFederationUrlSpec)); EXPECT_FALSE(FormsMatchForMerge(base_form, form_b, STRICT_FORM_MATCH)); EXPECT_FALSE(FormsMatchForMerge(form_b, base_form, STRICT_FORM_MATCH)); EXPECT_FALSE(FormsMatchForMerge(form_b, form_b, STRICT_FORM_MATCH)); @@ -1805,7 +1808,8 @@ TEST_F(PasswordStoreMacTest, StoringAndRetrievingAndroidCredentials) { TEST_F(PasswordStoreMacTest, StoringAndRetrievingFederatedCredentials) { PasswordForm form; form.signon_realm = "android://7x7IDboo8u9YKraUsbmVkuf1@net.rateflix.app/"; - form.federation_url = GURL(password_manager::kTestingFederationUrlSpec); + form.federation_origin = + url::Origin(GURL(password_manager::kTestingFederationUrlSpec)); form.username_value = base::UTF8ToUTF16("randomusername"); form.password_value = base::UTF8ToUTF16(""); // No password. @@ -1875,7 +1879,7 @@ TEST_F(PasswordStoreMacTest, ImportFederatedFromLockedKeychain) { form1.origin = GURL("http://example.com/Login"); form1.signon_realm = "http://example.com/"; form1.username_value = ASCIIToUTF16("my_username"); - form1.federation_url = GURL("https://accounts.google.com/"); + form1.federation_origin = url::Origin(GURL("https://accounts.google.com/")); store()->AddLogin(form1); FinishAsyncProcessing(); diff --git a/chrome/browser/password_manager/password_store_proxy_mac_unittest.cc b/chrome/browser/password_manager/password_store_proxy_mac_unittest.cc index 2ea0d46..1a8f769 100644 --- a/chrome/browser/password_manager/password_store_proxy_mac_unittest.cc +++ b/chrome/browser/password_manager/password_store_proxy_mac_unittest.cc @@ -25,6 +25,7 @@ #include "crypto/mock_apple_keychain.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" +#include "url/origin.h" namespace { @@ -224,7 +225,8 @@ void PasswordStoreProxyMacTest::CheckRemoveLoginsBetween(bool check_created) { old_form.origin = GURL("http://accounts.google.com/LoginAuth"); old_form.signon_realm = "http://accounts.google.com/"; old_form.username_value = base::ASCIIToUTF16("my_username"); - old_form.federation_url = GURL("http://accounts.google.com/federation"); + old_form.federation_origin = + url::Origin(GURL("http://accounts.google.com/federation")); PasswordForm new_form = old_form; new_form.origin = GURL("http://accounts.google2.com/LoginAuth"); diff --git a/chrome/browser/password_manager/save_password_infobar_delegate.cc b/chrome/browser/password_manager/save_password_infobar_delegate.cc index dfb8dc0..8372e14 100644 --- a/chrome/browser/password_manager/save_password_infobar_delegate.cc +++ b/chrome/browser/password_manager/save_password_infobar_delegate.cc @@ -20,6 +20,7 @@ #include "content/public/browser/web_contents.h" #include "grit/theme_resources.h" #include "ui/base/l10n/l10n_util.h" +#include "url/origin.h" // static void SavePasswordInfoBarDelegate::Create( @@ -95,9 +96,9 @@ SavePasswordInfoBarDelegate::SavePasswordInfoBarDelegate( base::string16 message; gfx::Range message_link_range = gfx::Range(); PasswordTittleType type = - form_to_save_->pending_credentials().federation_url.is_empty() - ? PasswordTittleType::SAVE_PASSWORD - : PasswordTittleType::SAVE_ACCOUNT; + form_to_save_->pending_credentials().federation_origin.unique() + ? PasswordTittleType::SAVE_PASSWORD + : PasswordTittleType::UPDATE_PASSWORD; GetSavePasswordDialogTitleTextAndLinkRange( web_contents->GetVisibleURL(), form_to_save_->observed_form().origin, is_smartlock_branding_enabled, type, diff --git a/chrome/browser/ui/cocoa/passwords/account_chooser_view_controller_unittest.mm b/chrome/browser/ui/cocoa/passwords/account_chooser_view_controller_unittest.mm index ad27954..c8ef42e 100644 --- a/chrome/browser/ui/cocoa/passwords/account_chooser_view_controller_unittest.mm +++ b/chrome/browser/ui/cocoa/passwords/account_chooser_view_controller_unittest.mm @@ -21,7 +21,7 @@ #include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest_mac.h" #include "url/gurl.h" - +#include "url/origin.h" @interface AccountAvatarFetcherTestManager : AccountAvatarFetcherManager { std::vector<GURL> fetchedAvatars_; @@ -159,7 +159,7 @@ TEST_F(AccountChooserViewControllerTest, ConfiguresFederatedCredential) { const char name[] = "Peter the Great"; PasswordDialogController::FormsVector local_forms; local_forms.push_back(Credential("pizza")); - local_forms.back()->federation_url = GURL(federation); + local_forms.back()->federation_origin = url::Origin(GURL(federation)); local_forms.back()->display_name = base::ASCIIToUTF16(name); SetUpAccountChooser(&local_forms); diff --git a/chrome/browser/ui/cocoa/passwords/passwords_list_view_controller.mm b/chrome/browser/ui/cocoa/passwords/passwords_list_view_controller.mm index a8b8f50..da2cd9b 100644 --- a/chrome/browser/ui/cocoa/passwords/passwords_list_view_controller.mm +++ b/chrome/browser/ui/cocoa/passwords/passwords_list_view_controller.mm @@ -23,6 +23,7 @@ #include "ui/base/l10n/l10n_util.h" #include "ui/gfx/image/image.h" #include "ui/resources/grit/ui_resources.h" +#include "url/origin.h" namespace { @@ -136,12 +137,12 @@ NSTextField* FederationLabel(const base::string16& text) { usernameField_.reset([UsernameLabel(GetDisplayUsername(form)) retain]); [self addSubview:usernameField_]; - if (form.federation_url.is_empty()) { + if (form.federation_origin.unique()) { passwordField_.reset([PasswordLabel(form.password_value) retain]); } else { base::string16 text = l10n_util::GetStringFUTF16( IDS_PASSWORDS_VIA_FEDERATION, - base::UTF8ToUTF16(form.federation_url.host())); + base::UTF8ToUTF16(form.federation_origin.host())); passwordField_.reset([FederationLabel(text) retain]); } [self addSubview:passwordField_]; @@ -207,12 +208,12 @@ NSTextField* FederationLabel(const base::string16& text) { usernameField_.reset([UsernameLabel(GetDisplayUsername(form)) retain]); [self addSubview:usernameField_]; - if (form.federation_url.is_empty()) { + if (form.federation_origin.unique()) { passwordField_.reset([PasswordLabel(form.password_value) retain]); } else { base::string16 text = l10n_util::GetStringFUTF16( IDS_PASSWORDS_VIA_FEDERATION, - base::UTF8ToUTF16(form.federation_url.host())); + base::UTF8ToUTF16(form.federation_origin.host())); passwordField_.reset([FederationLabel(text) retain]); } [self addSubview:passwordField_]; diff --git a/chrome/browser/ui/cocoa/passwords/passwords_list_view_controller_unittest.mm b/chrome/browser/ui/cocoa/passwords/passwords_list_view_controller_unittest.mm index 0832ab9..79f3d93 100644 --- a/chrome/browser/ui/cocoa/passwords/passwords_list_view_controller_unittest.mm +++ b/chrome/browser/ui/cocoa/passwords/passwords_list_view_controller_unittest.mm @@ -21,6 +21,7 @@ #include "components/password_manager/core/browser/password_store.h" #include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest_mac.h" +#include "url/origin.h" using namespace testing; @@ -72,7 +73,8 @@ class PasswordsListViewControllerTest : public ManagePasswordsControllerTest { autofill::PasswordForm federated_credential() { autofill::PasswordForm form; form.username_value = base::SysNSStringToUTF16(kItemTestUsername); - form.federation_url = GURL(base::SysNSStringToUTF16(kFederation)); + form.federation_origin = + url::Origin(GURL(base::SysNSStringToUTF16(kFederation))); return form; } @@ -164,7 +166,7 @@ TEST_F(PasswordsListViewControllerTest, [GetControllerAt(1) contentView]); EXPECT_NSEQ(kItemTestUsername, manageView.usernameField.stringValue); EXPECT_THAT(base::SysNSStringToUTF8(manageView.passwordField.stringValue), - HasSubstr(federated_credential().federation_url.host())); + HasSubstr(federated_credential().federation_origin.host())); } TEST_F(PasswordsListViewControllerTest, PendingStateShouldHavePendingView) { @@ -200,5 +202,5 @@ TEST_F(PasswordsListViewControllerTest, // Ensure the fields are populated properly and the password is obscured. EXPECT_NSEQ(kItemTestUsername, pendingView.usernameField.stringValue); EXPECT_THAT(base::SysNSStringToUTF8(pendingView.passwordField.stringValue), - HasSubstr(federated_credential().federation_url.host())); + HasSubstr(federated_credential().federation_origin.host())); } diff --git a/chrome/browser/ui/passwords/manage_passwords_bubble_model.cc b/chrome/browser/ui/passwords/manage_passwords_bubble_model.cc index 2fa046a..50ccf00 100644 --- a/chrome/browser/ui/passwords/manage_passwords_bubble_model.cc +++ b/chrome/browser/ui/passwords/manage_passwords_bubble_model.cc @@ -345,10 +345,10 @@ void ManagePasswordsBubbleModel::UpdatePendingStateTitle() { title_brand_link_range_ = gfx::Range(); PasswordTittleType type = state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE - ? PasswordTittleType::UPDATE_PASSWORD - : (pending_password_.federation_url.is_empty() - ? PasswordTittleType::SAVE_PASSWORD - : PasswordTittleType::SAVE_ACCOUNT); + ? PasswordTittleType::UPDATE_PASSWORD + : (pending_password_.federation_origin.unique() + ? PasswordTittleType::SAVE_PASSWORD + : PasswordTittleType::SAVE_ACCOUNT); GetSavePasswordDialogTitleTextAndLinkRange( web_contents()->GetVisibleURL(), origin(), GetSmartLockBrandingState(GetProfile()) != diff --git a/chrome/browser/ui/passwords/manage_passwords_state.cc b/chrome/browser/ui/passwords/manage_passwords_state.cc index 6d4508c..dc8657d 100644 --- a/chrome/browser/ui/passwords/manage_passwords_state.cc +++ b/chrome/browser/ui/passwords/manage_passwords_state.cc @@ -229,14 +229,14 @@ void ManagePasswordsState::ChooseCredential( // cross-origin. // // If |credential_type| is local, the credential MIGHT be a PasswordCredential - // or it MIGHT be a FederatedCredential. We inspect the |federation_url| + // or it MIGHT be a FederatedCredential. We inspect the |federation_origin| // field to determine which we should return. // // TODO(mkwst): Clean this up. It is confusing. password_manager::CredentialType type_to_return; if (credential_type == password_manager::CredentialType::CREDENTIAL_TYPE_PASSWORD && - form.federation_url.is_empty()) { + form.federation_origin.unique()) { type_to_return = password_manager::CredentialType::CREDENTIAL_TYPE_PASSWORD; } else if (credential_type == password_manager::CredentialType::CREDENTIAL_TYPE_EMPTY) { diff --git a/chrome/browser/ui/passwords/manage_passwords_state_unittest.cc b/chrome/browser/ui/passwords/manage_passwords_state_unittest.cc index 1c8b56d..5fd7eea 100644 --- a/chrome/browser/ui/passwords/manage_passwords_state_unittest.cc +++ b/chrome/browser/ui/passwords/manage_passwords_state_unittest.cc @@ -571,7 +571,7 @@ TEST_F(ManagePasswordsStateTest, ChooseCredentialLocalWithNonEmptyFederation) { ScopedVector<autofill::PasswordForm>(), test_local_form().origin); autofill::PasswordForm form(test_federated_form()); - form.federation_url = GURL("https://federation.test/"); + form.federation_origin = url::Origin(GURL("https://federation.test/")); passwords_data().set_credentials_callback(base::Bind( &ManagePasswordsStateTest::CredentialCallback, base::Unretained(this))); password_manager::CredentialInfo credential_info( diff --git a/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc b/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc index 66566a9..bd75b39 100644 --- a/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc +++ b/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc @@ -206,7 +206,8 @@ void ManagePasswordsUIControllerTest::SetUp() { test_federated_form_.origin = GURL("http://example.com/login"); test_federated_form_.username_value = base::ASCIIToUTF16("username"); - test_federated_form_.federation_url = GURL("https://federation.test/"); + test_federated_form_.federation_origin = + url::Origin(GURL("https://federation.test/")); // We need to be on a "webby" URL for most tests. content::WebContentsTester::For(web_contents()) @@ -495,7 +496,7 @@ TEST_F(ManagePasswordsUIControllerTest, ChooseCredentialLocal) { ASSERT_TRUE(credential_info()); EXPECT_EQ(test_local_form().username_value, credential_info()->id); EXPECT_EQ(test_local_form().password_value, credential_info()->password); - EXPECT_TRUE(credential_info()->federation.is_empty()); + EXPECT_TRUE(credential_info()->federation.unique()); EXPECT_EQ(password_manager::CredentialType::CREDENTIAL_TYPE_PASSWORD, credential_info()->type); } @@ -531,7 +532,7 @@ TEST_F(ManagePasswordsUIControllerTest, ChooseCredentialLocalButFederated) { EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->GetState()); ASSERT_TRUE(credential_info()); EXPECT_EQ(test_federated_form().username_value, credential_info()->id); - EXPECT_EQ(test_federated_form().federation_url, + EXPECT_EQ(test_federated_form().federation_origin, credential_info()->federation); EXPECT_TRUE(credential_info()->password.empty()); EXPECT_EQ(password_manager::CredentialType::CREDENTIAL_TYPE_FEDERATED, @@ -595,7 +596,7 @@ TEST_F(ManagePasswordsUIControllerTest, ChooseCredentialCancel) { dialog_controller->OnCloseDialog(); EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->GetState()); ASSERT_TRUE(credential_info()); - EXPECT_TRUE(credential_info()->federation.is_empty()); + EXPECT_TRUE(credential_info()->federation.unique()); EXPECT_TRUE(credential_info()->password.empty()); EXPECT_EQ(password_manager::CredentialType::CREDENTIAL_TYPE_EMPTY, credential_info()->type); diff --git a/chrome/browser/ui/passwords/manage_passwords_view_utils.cc b/chrome/browser/ui/passwords/manage_passwords_view_utils.cc index 4ff7e5a..dbacbca 100644 --- a/chrome/browser/ui/passwords/manage_passwords_view_utils.cc +++ b/chrome/browser/ui/passwords/manage_passwords_view_utils.cc @@ -26,6 +26,7 @@ #include "ui/gfx/image/image_skia_operations.h" #include "ui/gfx/range/range.h" #include "url/gurl.h" +#include "url/origin.h" namespace { @@ -59,13 +60,13 @@ std::pair<base::string16, base::string16> GetCredentialLabelsForAccountChooser( const base::string16& upper_string = form.display_name.empty() ? form.username_value : form.display_name; base::string16 lower_string; - if (form.federation_url.is_empty()) { + if (form.federation_origin.unique()) { if (!form.display_name.empty()) lower_string = form.username_value; } else { lower_string = l10n_util::GetStringFUTF16( IDS_PASSWORDS_VIA_FEDERATION, - base::UTF8ToUTF16(form.federation_url.host())); + base::UTF8ToUTF16(form.federation_origin.host())); } return std::make_pair(upper_string, lower_string); } diff --git a/chrome/browser/ui/views/passwords/account_chooser_dialog_view.cc b/chrome/browser/ui/views/passwords/account_chooser_dialog_view.cc index fe617ff..6f11721 100644 --- a/chrome/browser/ui/views/passwords/account_chooser_dialog_view.cc +++ b/chrome/browser/ui/views/passwords/account_chooser_dialog_view.cc @@ -159,13 +159,13 @@ void AccountChooserDialogView::InitWindow() { const base::string16& upper_string = form->display_name.empty() ? form->username_value : form->display_name; base::string16 lower_string; - if (form->federation_url.is_empty()) { + if (form->federation_origin.unique()) { if (!form->display_name.empty()) lower_string = form->username_value; } else { lower_string = l10n_util::GetStringFUTF16( IDS_PASSWORDS_VIA_FEDERATION, - base::UTF8ToUTF16(form->federation_url.host())); + base::UTF8ToUTF16(form->federation_origin.host())); } layout->StartRow(0, SINGLE_VIEW_COLUMN_SET_NO_PADDING); CredentialsItemView* view = new CredentialsItemView( diff --git a/chrome/browser/ui/views/passwords/manage_password_items_view.cc b/chrome/browser/ui/views/passwords/manage_password_items_view.cc index 1ca7115..1ad9058 100644 --- a/chrome/browser/ui/views/passwords/manage_password_items_view.cc +++ b/chrome/browser/ui/views/passwords/manage_password_items_view.cc @@ -77,16 +77,17 @@ scoped_ptr<views::Label> GenerateUsernameLabel( scoped_ptr<views::Label> GeneratePasswordLabel( const autofill::PasswordForm& form) { - base::string16 text = form.federation_url.is_empty() - ? form.password_value - : l10n_util::GetStringFUTF16( - IDS_PASSWORDS_VIA_FEDERATION, - base::UTF8ToUTF16(form.federation_url.host())); + base::string16 text = + form.federation_origin.unique() + ? form.password_value + : l10n_util::GetStringFUTF16( + IDS_PASSWORDS_VIA_FEDERATION, + base::UTF8ToUTF16(form.federation_origin.host())); scoped_ptr<views::Label> label(new views::Label(text)); label->SetFontList(ui::ResourceBundle::GetSharedInstance().GetFontList( ui::ResourceBundle::SmallFont)); label->SetHorizontalAlignment(gfx::ALIGN_LEFT); - if (form.federation_url.is_empty()) + if (form.federation_origin.unique()) label->SetObscured(true); return label; } diff --git a/chrome/browser/ui/views/passwords/password_dialog_view_browsertest.cc b/chrome/browser/ui/views/passwords/password_dialog_view_browsertest.cc index 63fef5a..2f96f7f 100644 --- a/chrome/browser/ui/views/passwords/password_dialog_view_browsertest.cc +++ b/chrome/browser/ui/views/passwords/password_dialog_view_browsertest.cc @@ -180,7 +180,7 @@ IN_PROC_BROWSER_TEST_F(PasswordDialogViewTest, GURL icon_url("https://google.com/icon.png"); form.icon_url = icon_url; form.display_name = base::ASCIIToUTF16("Peter Pen"); - form.federation_url = GURL("https://google.com/federation"); + form.federation_origin = url::Origin(GURL("https://google.com/federation")); local_credentials.push_back(new autofill::PasswordForm(form)); // Prepare to capture the network request. @@ -220,7 +220,7 @@ IN_PROC_BROWSER_TEST_F( GURL icon_url("https://google.com/icon.png"); form.icon_url = icon_url; form.display_name = base::ASCIIToUTF16("Peter Pen"); - form.federation_url = GURL("https://google.com/federation"); + form.federation_origin = url::Origin(GURL("https://google.com/federation")); local_credentials.push_back(new autofill::PasswordForm(form)); SetupChooseCredentials(std::move(local_credentials), diff --git a/chrome/browser/ui/webui/options/password_manager_handler.cc b/chrome/browser/ui/webui/options/password_manager_handler.cc index 77256a7..374e6e5 100644 --- a/chrome/browser/ui/webui/options/password_manager_handler.cc +++ b/chrome/browser/ui/webui/options/password_manager_handler.cc @@ -239,12 +239,12 @@ void PasswordManagerHandler::SetPasswordList( kPasswordField, base::string16(saved_password->password_value.length(), ' ')); } - const GURL& federation_url = saved_password->federation_url; - if (!federation_url.is_empty()) { + if (!saved_password->federation_origin.unique()) { entry->SetString( kFederationField, - l10n_util::GetStringFUTF16(IDS_PASSWORDS_VIA_FEDERATION, - base::UTF8ToUTF16(federation_url.host()))); + l10n_util::GetStringFUTF16( + IDS_PASSWORDS_VIA_FEDERATION, + base::UTF8ToUTF16(saved_password->federation_origin.host()))); } entries.Append(entry.release()); |