15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/content_settings/core/common/content_settings_pattern.h"
61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/content_settings/core/common/content_settings_pattern_parser.h"
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef ContentSettingsPattern::BuilderInterface BuilderInterface;
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockBuilder : public ContentSettingsPattern::BuilderInterface {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_METHOD0(WithSchemeWildcard, BuilderInterface*());
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_METHOD0(WithDomainWildcard, BuilderInterface*());
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_METHOD0(WithPortWildcard, BuilderInterface*());
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_METHOD1(WithScheme, BuilderInterface*(const std::string& scheme));
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_METHOD1(WithHost, BuilderInterface*(const std::string& host));
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_METHOD1(WithPort, BuilderInterface*(const std::string& port));
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_METHOD1(WithPath, BuilderInterface*(const std::string& path));
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_METHOD0(WithPathWildcard, BuilderInterface*());
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_METHOD0(Invalid, BuilderInterface*());
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_METHOD0(Build, ContentSettingsPattern());
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ContentSettingsPatternParserTest, ParsePatterns) {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Test valid patterns
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ::testing::StrictMock<MockBuilder> builder;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // WithPathWildcard() is not called for "*". (Need a strict Mock for this
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // case.)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithSchemeWildcard()).Times(1).WillOnce(
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithDomainWildcard()).Times(1).WillOnce(
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithPortWildcard()).Times(1).WillOnce(
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content_settings::PatternParser::Parse("*", &builder);
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ::testing::Mock::VerifyAndClear(&builder);
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithScheme("http")).Times(1).WillOnce(
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithHost("www.youtube.com")).Times(1).WillOnce(
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithPort("8080")).Times(1).WillOnce(
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content_settings::PatternParser::Parse(
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http://www.youtube.com:8080", &builder);
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ::testing::Mock::VerifyAndClear(&builder);
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithSchemeWildcard()).Times(1).WillOnce(
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithHost("www.gmail.com")).Times(1).WillOnce(
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithPort("80")).Times(1).WillOnce(
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content_settings::PatternParser::Parse("*://www.gmail.com:80", &builder);
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ::testing::Mock::VerifyAndClear(&builder);
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithScheme("http")).Times(1).WillOnce(
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithHost("www.gmail.com")).Times(1).WillOnce(
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithPortWildcard()).Times(1).WillOnce(
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content_settings::PatternParser::Parse("http://www.gmail.com:*", &builder);
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ::testing::Mock::VerifyAndClear(&builder);
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithScheme("http")).Times(1).WillOnce(
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithDomainWildcard()).WillOnce(
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithHost("google.com")).Times(1).WillOnce(
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithPort("80")).Times(1).WillOnce(
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content_settings::PatternParser::Parse("http://[*.]google.com:80", &builder);
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ::testing::Mock::VerifyAndClear(&builder);
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithScheme("https")).Times(1).WillOnce(
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithHost("[::1]")).Times(1).WillOnce(
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithPort("8080")).Times(1).WillOnce(
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content_settings::PatternParser::Parse("https://[::1]:8080", &builder);
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ::testing::Mock::VerifyAndClear(&builder);
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithScheme("http")).Times(1).WillOnce(
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithHost("127.0.0.1")).Times(1).WillOnce(
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithPort("8080")).Times(1).WillOnce(
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content_settings::PatternParser::Parse("http://127.0.0.1:8080", &builder);
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ::testing::Mock::VerifyAndClear(&builder);
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Test valid pattern short forms
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithSchemeWildcard()).Times(1).WillOnce(
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithHost("www.youtube.com")).Times(1).WillOnce(
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithPort("8080")).Times(1).WillOnce(
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content_settings::PatternParser::Parse("www.youtube.com:8080", &builder);
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ::testing::Mock::VerifyAndClear(&builder);
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithSchemeWildcard()).Times(1).WillOnce(
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithHost("www.youtube.com")).Times(1).WillOnce(
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithPortWildcard()).Times(1).WillOnce(
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content_settings::PatternParser::Parse("www.youtube.com", &builder);
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ::testing::Mock::VerifyAndClear(&builder);
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithSchemeWildcard()).Times(1).WillOnce(
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithDomainWildcard()).Times(1).WillOnce(
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithHost("youtube.com")).Times(1).WillOnce(
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithPortWildcard()).Times(1).WillOnce(
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content_settings::PatternParser::Parse("[*.]youtube.com", &builder);
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ::testing::Mock::VerifyAndClear(&builder);
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Test invalid patterns
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithSchemeWildcard()).Times(1).WillOnce(
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, Invalid()).Times(1).WillOnce(
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content_settings::PatternParser::Parse("*youtube.com", &builder);
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ::testing::Mock::VerifyAndClear(&builder);
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithSchemeWildcard()).Times(1).WillOnce(
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, Invalid()).Times(1).WillOnce(
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content_settings::PatternParser::Parse("*.youtube.com", &builder);
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ::testing::Mock::VerifyAndClear(&builder);
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithSchemeWildcard()).Times(1).WillOnce(
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, Invalid()).Times(1).WillOnce(
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content_settings::PatternParser::Parse("www.youtube.com*", &builder);
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ::testing::Mock::VerifyAndClear(&builder);
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ContentSettingsPatternParserTest, ParseFilePatterns) {
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ::testing::StrictMock<MockBuilder> builder;
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithScheme("file")).Times(1).WillOnce(
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithPath("/foo/bar/test.html")).Times(1).WillOnce(
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content_settings::PatternParser::Parse(
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "file:///foo/bar/test.html", &builder);
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ::testing::Mock::VerifyAndClear(&builder);
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithScheme("file")).Times(1).WillOnce(
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithDomainWildcard()).Times(1).WillOnce(
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content_settings::PatternParser::Parse(
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "file://*", &builder);
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ::testing::Mock::VerifyAndClear(&builder);
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithScheme("file")).Times(1).WillOnce(
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithDomainWildcard()).Times(1).WillOnce(
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithPath("/")).Times(1).WillOnce(
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content_settings::PatternParser::Parse(
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "file://*/", &builder);
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ::testing::Mock::VerifyAndClear(&builder);
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithScheme("file")).Times(1).WillOnce(
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithDomainWildcard()).Times(1).WillOnce(
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithPathWildcard()).Times(1).WillOnce(
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content_settings::PatternParser::Parse(
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "file://*/*", &builder);
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ::testing::Mock::VerifyAndClear(&builder);
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithScheme("file")).Times(1).WillOnce(
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithPathWildcard()).Times(1).WillOnce(
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content_settings::PatternParser::Parse(
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "file:///*", &builder);
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ::testing::Mock::VerifyAndClear(&builder);
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Invalid file patterns.
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, WithScheme("file")).Times(1).WillOnce(
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(builder, Invalid()).Times(1).WillOnce(
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ::testing::Return(&builder));
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content_settings::PatternParser::Parse(
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "file://**", &builder);
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ::testing::Mock::VerifyAndClear(&builder);
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ContentSettingsPatternParserTest, SerializePatterns) {
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ContentSettingsPattern::PatternParts parts;
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parts.scheme = "http";
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parts.host = "www.youtube.com";
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parts.port = "8080";
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_STREQ("http://www.youtube.com:8080",
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               content_settings::PatternParser::ToString(parts).c_str());
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parts = ContentSettingsPattern::PatternParts();
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parts.scheme = "file";
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parts.path = "/foo/bar/test.html";
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_STREQ("file:///foo/bar/test.html",
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               content_settings::PatternParser::ToString(parts).c_str());
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parts = ContentSettingsPattern::PatternParts();
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parts.scheme = "file";
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parts.path = "";
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parts.is_path_wildcard = true;
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("file:///*", content_settings::PatternParser::ToString(parts));
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
231