1a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// found in the LICENSE file.
4a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/password_manager/core/browser/psl_matching_helper.h"
6a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
7a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "base/basictypes.h"
8a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/autofill/core/common/password_form.h"
9a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
10a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
11c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochnamespace password_manager {
12c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
13c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochnamespace {
14c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
15a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)TEST(PSLMatchingUtilsTest, IsPublicSuffixDomainMatch) {
16a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  struct TestPair {
17a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    const char* url1;
18a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    const char* url2;
19a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    bool should_match;
20a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  };
21a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
22a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  TestPair pairs[] = {
23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      {"http://facebook.com", "http://facebook.com", true},
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      {"http://facebook.com/path", "http://facebook.com/path", true},
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      {"http://facebook.com/path1", "http://facebook.com/path2", true},
26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      {"http://facebook.com", "http://m.facebook.com", true},
27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      {"http://www.facebook.com", "http://m.facebook.com", true},
28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      {"http://facebook.com/path", "http://m.facebook.com/path", true},
29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      {"http://facebook.com/path1", "http://m.facebook.com/path2", true},
30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      {"http://example.com/has space", "http://example.com/has space", true},
31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      {"http://www.example.com", "http://wwwexample.com", false},
32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      {"http://www.example.com", "https://www.example.com", false},
33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      {"http://www.example.com:123", "http://www.example.com", false},
34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      {"http://www.example.org", "http://www.example.com", false},
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      // Invalid urls should not match anything.
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      {"http://", "http://", false},
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      {"", "", false},
38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      {"bad url", "bad url", false},
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      {"http://www.example.com", "http://", false},
40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      {"", "http://www.example.com", false},
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      {"http://www.example.com", "bad url", false},
42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      {"http://www.example.com/%00", "http://www.example.com/%00", false},
43a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  };
44a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
45a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(pairs); ++i) {
46a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    autofill::PasswordForm form1;
47a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    form1.signon_realm = pairs[i].url1;
48a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    autofill::PasswordForm form2;
49a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    form2.signon_realm = pairs[i].url2;
50a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    EXPECT_EQ(pairs[i].should_match,
511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci              IsPublicSuffixDomainMatch(form1.signon_realm, form2.signon_realm))
52a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        << "First URL = " << pairs[i].url1
53a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        << ", second URL = " << pairs[i].url2;
54a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
55a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
56c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
57c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}  // namespace
58c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
59c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}  // namespace password_manager
60