1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/extensions/api/passwords_private/passwords_private_utils.h"
6
7 #include "components/password_manager/core/browser/password_form.h"
8 #include "testing/gmock/include/gmock/gmock.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10 #include "url/gurl.h"
11
12 namespace extensions {
13
TEST(CreateUrlCollectionFromFormTest,UrlsFromHtmlForm)14 TEST(CreateUrlCollectionFromFormTest, UrlsFromHtmlForm) {
15 password_manager::PasswordForm html_form;
16 html_form.url = GURL("http://example.com/LoginAuth");
17 html_form.signon_realm = html_form.url.GetOrigin().spec();
18
19 api::passwords_private::UrlCollection html_urls =
20 CreateUrlCollectionFromForm(html_form);
21 EXPECT_EQ(html_urls.origin, "http://example.com/");
22 EXPECT_EQ(html_urls.shown, "example.com");
23 EXPECT_EQ(html_urls.link, "http://example.com/LoginAuth");
24 }
25
TEST(CreateUrlCollectionFromFormTest,UrlsFromFederatedForm)26 TEST(CreateUrlCollectionFromFormTest, UrlsFromFederatedForm) {
27 password_manager::PasswordForm federated_form;
28 federated_form.signon_realm = "federation://example.com/google.com";
29 federated_form.url = GURL("https://example.com/");
30 federated_form.federation_origin =
31 url::Origin::Create(GURL("https://google.com/"));
32
33 api::passwords_private::UrlCollection federated_urls =
34 CreateUrlCollectionFromForm(federated_form);
35 EXPECT_EQ(federated_urls.origin, "federation://example.com/google.com");
36 EXPECT_EQ(federated_urls.shown, "example.com");
37 EXPECT_EQ(federated_urls.link, "https://example.com/");
38 }
39
TEST(CreateUrlCollectionFromFormTest,UrlsFromAndroidFormWithoutDisplayName)40 TEST(CreateUrlCollectionFromFormTest, UrlsFromAndroidFormWithoutDisplayName) {
41 password_manager::PasswordForm android_form;
42 android_form.signon_realm = "android://example@com.example.android";
43 android_form.app_display_name.clear();
44
45 api::passwords_private::UrlCollection android_urls =
46 CreateUrlCollectionFromForm(android_form);
47 EXPECT_EQ("android://example@com.example.android", android_urls.origin);
48 EXPECT_EQ("android.example.com", android_urls.shown);
49 EXPECT_EQ("https://play.google.com/store/apps/details?id=com.example.android",
50 android_urls.link);
51 }
52
TEST(CreateUrlCollectionFromFormTest,UrlsFromAndroidFormWithAppName)53 TEST(CreateUrlCollectionFromFormTest, UrlsFromAndroidFormWithAppName) {
54 password_manager::PasswordForm android_form;
55 android_form.signon_realm = "android://hash@com.example.android";
56 android_form.app_display_name = "Example Android App";
57
58 api::passwords_private::UrlCollection android_urls =
59 CreateUrlCollectionFromForm(android_form);
60 EXPECT_EQ(android_urls.origin, "android://hash@com.example.android");
61 EXPECT_EQ("Example Android App", android_urls.shown);
62 EXPECT_EQ("https://play.google.com/store/apps/details?id=com.example.android",
63 android_urls.link);
64 }
65
TEST(IdGeneratorTest,GenerateIds)66 TEST(IdGeneratorTest, GenerateIds) {
67 using ::testing::Pointee;
68 using ::testing::Eq;
69
70 IdGenerator<std::string> id_generator;
71 int foo_id = id_generator.GenerateId("foo");
72
73 // Check idempotence.
74 EXPECT_EQ(foo_id, id_generator.GenerateId("foo"));
75
76 // Check TryGetKey(id) == s iff id == GenerateId(*s).
77 EXPECT_THAT(id_generator.TryGetKey(foo_id), Pointee(Eq("foo")));
78 EXPECT_EQ(nullptr, id_generator.TryGetKey(foo_id + 1));
79
80 // Check that different sort keys result in different ids.
81 int bar_id = id_generator.GenerateId("bar");
82 int baz_id = id_generator.GenerateId("baz");
83 EXPECT_NE(foo_id, bar_id);
84 EXPECT_NE(bar_id, baz_id);
85
86 EXPECT_THAT(id_generator.TryGetKey(bar_id), Pointee(Eq("bar")));
87 EXPECT_THAT(id_generator.TryGetKey(baz_id), Pointee(Eq("baz")));
88 }
89
90 } // namespace extensions
91