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