1 // Copyright (c) 2010 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/content_settings/content_settings_pattern.h"
6
7 #include "googleurl/src/gurl.h"
8 #include "testing/gtest/include/gtest/gtest.h"
9
10 namespace {
11
TEST(ContentSettingsPatternTest,PatternSupport)12 TEST(ContentSettingsPatternTest, PatternSupport) {
13 EXPECT_TRUE(ContentSettingsPattern("[*.]example.com").IsValid());
14 EXPECT_TRUE(ContentSettingsPattern("example.com").IsValid());
15 EXPECT_TRUE(ContentSettingsPattern("192.168.0.1").IsValid());
16 EXPECT_TRUE(ContentSettingsPattern("[::1]").IsValid());
17 EXPECT_TRUE(ContentSettingsPattern("file:///tmp/test.html").IsValid());
18 EXPECT_FALSE(ContentSettingsPattern("*example.com").IsValid());
19 EXPECT_FALSE(ContentSettingsPattern("example.*").IsValid());
20 EXPECT_FALSE(ContentSettingsPattern("http://example.com").IsValid());
21
22 EXPECT_TRUE(ContentSettingsPattern("[*.]example.com").Matches(
23 GURL("http://example.com/")));
24 EXPECT_TRUE(ContentSettingsPattern("[*.]example.com").Matches(
25 GURL("http://www.example.com/")));
26 EXPECT_TRUE(ContentSettingsPattern("www.example.com").Matches(
27 GURL("http://www.example.com/")));
28 EXPECT_TRUE(ContentSettingsPattern("file:///tmp/test.html").Matches(
29 GURL("file:///tmp/test.html")));
30 EXPECT_FALSE(ContentSettingsPattern("").Matches(
31 GURL("http://www.example.com/")));
32 EXPECT_FALSE(ContentSettingsPattern("[*.]example.com").Matches(
33 GURL("http://example.org/")));
34 EXPECT_FALSE(ContentSettingsPattern("example.com").Matches(
35 GURL("http://example.org/")));
36 EXPECT_FALSE(ContentSettingsPattern("file:///tmp/test.html").Matches(
37 GURL("file:///tmp/other.html")));
38 EXPECT_FALSE(ContentSettingsPattern("file:///tmp/test.html").Matches(
39 GURL("http://example.org/")));
40 }
41
TEST(ContentSettingsPatternTest,CanonicalizePattern)42 TEST(ContentSettingsPatternTest, CanonicalizePattern) {
43 // Basic patterns.
44 EXPECT_STREQ("[*.]ikea.com", ContentSettingsPattern("[*.]ikea.com")
45 .CanonicalizePattern().c_str());
46 EXPECT_STREQ("example.com", ContentSettingsPattern("example.com")
47 .CanonicalizePattern().c_str());
48 EXPECT_STREQ("192.168.1.1", ContentSettingsPattern("192.168.1.1")
49 .CanonicalizePattern().c_str());
50 EXPECT_STREQ("[::1]", ContentSettingsPattern("[::1]")
51 .CanonicalizePattern().c_str());
52 EXPECT_STREQ("file:///tmp/file.html", ContentSettingsPattern(
53 "file:///tmp/file.html").CanonicalizePattern().c_str());
54
55 // UTF-8 patterns.
56 EXPECT_STREQ("[*.]xn--ira-ppa.com", ContentSettingsPattern(
57 "[*.]\xC4\x87ira.com").CanonicalizePattern().c_str());
58 EXPECT_STREQ("xn--ira-ppa.com", ContentSettingsPattern(
59 "\xC4\x87ira.com").CanonicalizePattern().c_str());
60 EXPECT_STREQ("file:///%C4%87ira.html", ContentSettingsPattern(
61 "file:///\xC4\x87ira.html").CanonicalizePattern().c_str());
62
63 // file:/// normalization.
64 EXPECT_STREQ("file:///tmp/test.html", ContentSettingsPattern(
65 "file:///tmp/bar/../test.html").CanonicalizePattern().c_str());
66
67 // Invalid patterns.
68 EXPECT_STREQ("", ContentSettingsPattern(
69 "*example.com").CanonicalizePattern().c_str());
70 EXPECT_STREQ("", ContentSettingsPattern(
71 "example.*").CanonicalizePattern().c_str());
72 EXPECT_STREQ("", ContentSettingsPattern(
73 "*\xC4\x87ira.com").CanonicalizePattern().c_str());
74 EXPECT_STREQ("", ContentSettingsPattern(
75 "\xC4\x87ira.*").CanonicalizePattern().c_str());
76 }
77
78 } // namespace
79