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