1010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <algorithm> 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "extensions/common/error_utils.h" 83551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "extensions/common/manifest_constants.h" 9010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "extensions/common/manifest_handlers/externally_connectable.h" 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/common/manifest_test.h" 1146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "extensions/common/permissions/permissions_data.h" 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using testing::ElementsAre; 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace extensions { 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace errors = externally_connectable_errors; 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass ExternallyConnectableTest : public ManifestTest { 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExternallyConnectableTest() {} 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual ~ExternallyConnectableTest() {} 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 265e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) protected: 275e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) ExternallyConnectableInfo* GetExternallyConnectableInfo( 285e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) scoped_refptr<Extension> extension) { 29010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return static_cast<ExternallyConnectableInfo*>( 30010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) extension->GetManifestData(manifest_keys::kExternallyConnectable)); 315e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) } 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(ExternallyConnectableTest, IDsAndMatches) { 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<Extension> extension = 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LoadAndExpectSuccess("externally_connectable_ids_and_matches.json"); 37868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ASSERT_TRUE(extension.get()); 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(extension->permissions_data()->HasAPIPermission( 4046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) APIPermission::kWebConnectable)); 41868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 42868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ExternallyConnectableInfo* info = 43868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ExternallyConnectableInfo::Get(extension.get()); 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(info); 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 46010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_THAT(info->ids, 47010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ElementsAre("abcdefghijklmnopabcdefghijklmnop", 48010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "ponmlkjihgfedcbaponmlkjihgfedcba")); 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 50868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FALSE(info->all_ids); 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(info->matches.MatchesURL(GURL("http://example.com"))); 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(info->matches.MatchesURL(GURL("http://example.com/"))); 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(info->matches.MatchesURL(GURL("http://example.com/index.html"))); 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(info->matches.MatchesURL(GURL("http://google.com"))); 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(info->matches.MatchesURL(GURL("http://google.com/"))); 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(info->matches.MatchesURL(GURL("http://google.com/index.html"))); 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(info->matches.MatchesURL(GURL("http://www.google.com"))); 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(info->matches.MatchesURL(GURL("http://www.google.com/"))); 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(info->matches.MatchesURL(GURL("https://google.com"))); 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(info->matches.MatchesURL(GURL("https://google.com/"))); 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(info->matches.MatchesURL(GURL("http://build.chromium.org"))); 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(info->matches.MatchesURL(GURL("http://build.chromium.org/"))); 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE( 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) info->matches.MatchesURL(GURL("http://build.chromium.org/index.html"))); 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(info->matches.MatchesURL(GURL("https://build.chromium.org"))); 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(info->matches.MatchesURL(GURL("https://build.chromium.org/"))); 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE( 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) info->matches.MatchesURL(GURL("http://foo.chromium.org/index.html"))); 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(info->matches.MatchesURL(GURL("http://yahoo.com"))); 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(info->matches.MatchesURL(GURL("http://yahoo.com/"))); 75868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 76868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // TLD-style patterns should match just the TLD. 77868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(info->matches.MatchesURL(GURL("http://appspot.com/foo.html"))); 78868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(info->matches.MatchesURL(GURL("http://com"))); 79868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(info->matches.MatchesURL(GURL("http://go/here"))); 80868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 81868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // TLD-style patterns should *not* match any subdomains of the TLD. 82868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FALSE( 83868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) info->matches.MatchesURL(GURL("http://codereview.appspot.com/foo.html"))); 84868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FALSE( 85868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) info->matches.MatchesURL(GURL("http://chromium.com/index.html"))); 86868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FALSE(info->matches.MatchesURL(GURL("http://here.go/somewhere"))); 87868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 88868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Paths that don't have any wildcards should match the exact domain, but 89868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // ignore the trailing slash. This is kind of a corner case, so let's test it. 90868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(info->matches.MatchesURL(GURL("http://no.wildcard.path"))); 91868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(info->matches.MatchesURL(GURL("http://no.wildcard.path/"))); 92010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_FALSE( 93010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) info->matches.MatchesURL(GURL("http://no.wildcard.path/index.html"))); 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(ExternallyConnectableTest, IDs) { 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<Extension> extension = 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LoadAndExpectSuccess("externally_connectable_ids.json"); 99868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ASSERT_TRUE(extension.get()); 100868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 10146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(extension->permissions_data()->HasAPIPermission( 10246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) APIPermission::kWebConnectable)); 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 104868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ExternallyConnectableInfo* info = 105868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ExternallyConnectableInfo::Get(extension.get()); 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(info); 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 108010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_THAT(info->ids, 109010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ElementsAre("abcdefghijklmnopabcdefghijklmnop", 110010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "ponmlkjihgfedcbaponmlkjihgfedcba")); 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 112868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FALSE(info->all_ids); 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(info->matches.MatchesURL(GURL("http://google.com/index.html"))); 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(ExternallyConnectableTest, Matches) { 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<Extension> extension = 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LoadAndExpectSuccess("externally_connectable_matches.json"); 120868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ASSERT_TRUE(extension.get()); 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 12246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(extension->permissions_data()->HasAPIPermission( 12346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) APIPermission::kWebConnectable)); 124868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 125868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ExternallyConnectableInfo* info = 126868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ExternallyConnectableInfo::Get(extension.get()); 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(info); 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_THAT(info->ids, ElementsAre()); 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 131868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FALSE(info->all_ids); 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_FALSE(info->accepts_tls_channel_id); 1344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(info->matches.MatchesURL(GURL("http://example.com"))); 136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(info->matches.MatchesURL(GURL("http://example.com/"))); 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(info->matches.MatchesURL(GURL("http://example.com/index.html"))); 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(info->matches.MatchesURL(GURL("http://google.com"))); 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(info->matches.MatchesURL(GURL("http://google.com/"))); 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(info->matches.MatchesURL(GURL("http://google.com/index.html"))); 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(info->matches.MatchesURL(GURL("http://www.google.com"))); 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(info->matches.MatchesURL(GURL("http://www.google.com/"))); 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(info->matches.MatchesURL(GURL("https://google.com"))); 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(info->matches.MatchesURL(GURL("https://google.com/"))); 146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(info->matches.MatchesURL(GURL("http://build.chromium.org"))); 148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(info->matches.MatchesURL(GURL("http://build.chromium.org/"))); 149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE( 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) info->matches.MatchesURL(GURL("http://build.chromium.org/index.html"))); 151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(info->matches.MatchesURL(GURL("https://build.chromium.org"))); 152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(info->matches.MatchesURL(GURL("https://build.chromium.org/"))); 153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE( 154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) info->matches.MatchesURL(GURL("http://foo.chromium.org/index.html"))); 155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(info->matches.MatchesURL(GURL("http://yahoo.com"))); 157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(info->matches.MatchesURL(GURL("http://yahoo.com/"))); 158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TEST_F(ExternallyConnectableTest, MatchesWithTlsChannelId) { 161010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) scoped_refptr<Extension> extension = LoadAndExpectSuccess( 162010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "externally_connectable_matches_tls_channel_id.json"); 1634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_TRUE(extension.get()); 1644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 16546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(extension->permissions_data()->HasAPIPermission( 16646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) APIPermission::kWebConnectable)); 1674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ExternallyConnectableInfo* info = 1694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ExternallyConnectableInfo::Get(extension.get()); 1704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_TRUE(info); 1714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_THAT(info->ids, ElementsAre()); 1734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_FALSE(info->all_ids); 1754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_TRUE(info->accepts_tls_channel_id); 1774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // The matches portion of the manifest is identical to those in 1794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // externally_connectable_matches, so only a subset of the Matches tests is 1804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // repeated here. 1814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_TRUE(info->matches.MatchesURL(GURL("http://example.com"))); 1824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_FALSE(info->matches.MatchesURL(GURL("http://example.com/index.html"))); 1834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 1844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(ExternallyConnectableTest, AllIDs) { 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<Extension> extension = 187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LoadAndExpectSuccess("externally_connectable_all_ids.json"); 188868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ASSERT_TRUE(extension.get()); 189868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 19046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(extension->permissions_data()->HasAPIPermission( 19146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) APIPermission::kWebConnectable)); 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 193868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ExternallyConnectableInfo* info = 194868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ExternallyConnectableInfo::Get(extension.get()); 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(info); 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 197010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_THAT(info->ids, 198010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ElementsAre("abcdefghijklmnopabcdefghijklmnop", 199010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "ponmlkjihgfedcbaponmlkjihgfedcba")); 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 201868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(info->all_ids); 202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(info->matches.MatchesURL(GURL("http://google.com/index.html"))); 204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 206868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)TEST_F(ExternallyConnectableTest, IdCanConnect) { 207868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Not in order to test that ExternallyConnectableInfo sorts it. 208010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) std::string matches_ids_array[] = {"g", "h", "c", "i", "a", "z", "b"}; 209868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::vector<std::string> matches_ids( 210868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) matches_ids_array, matches_ids_array + arraysize(matches_ids_array)); 211868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 212010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) std::string nomatches_ids_array[] = {"2", "3", "1"}; 213868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 214868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // all_ids = false. 215868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) { 2164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ExternallyConnectableInfo info(URLPatternSet(), matches_ids, false, false); 217868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) for (size_t i = 0; i < matches_ids.size(); ++i) 218868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(info.IdCanConnect(matches_ids[i])); 219868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) for (size_t i = 0; i < arraysize(nomatches_ids_array); ++i) 220868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FALSE(info.IdCanConnect(nomatches_ids_array[i])); 221868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 222868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 223868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // all_ids = true. 224868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) { 2254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ExternallyConnectableInfo info(URLPatternSet(), matches_ids, true, false); 226868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) for (size_t i = 0; i < matches_ids.size(); ++i) 227868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(info.IdCanConnect(matches_ids[i])); 228868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) for (size_t i = 0; i < arraysize(nomatches_ids_array); ++i) 229868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(info.IdCanConnect(nomatches_ids_array[i])); 230868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 231868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 232868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(ExternallyConnectableTest, ErrorWrongFormat) { 2345e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) LoadAndExpectError("externally_connectable_error_wrong_format.json", 2353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "expected dictionary, got string"); 236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 237c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(ExternallyConnectableTest, ErrorBadID) { 2395e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) LoadAndExpectError( 2405e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) "externally_connectable_bad_id.json", 2415e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) ErrorUtils::FormatErrorMessage(errors::kErrorInvalidId, "badid")); 242c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 243c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 244c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(ExternallyConnectableTest, ErrorBadMatches) { 245010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) LoadAndExpectError("externally_connectable_error_bad_matches.json", 246010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ErrorUtils::FormatErrorMessage( 247010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) errors::kErrorInvalidMatchPattern, "www.yahoo.com")); 248c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 249c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2505e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)TEST_F(ExternallyConnectableTest, WarningNoAllURLs) { 2515e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) scoped_refptr<Extension> extension = LoadAndExpectWarning( 2525e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) "externally_connectable_error_all_urls.json", 2535e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) ErrorUtils::FormatErrorMessage(errors::kErrorWildcardHostsNotAllowed, 2545e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) "<all_urls>")); 2555e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) ExternallyConnectableInfo* info = GetExternallyConnectableInfo(extension); 2561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(info->matches.MatchesAllURLs()); 2575e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) EXPECT_FALSE(info->matches.ContainsPattern( 2585e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) URLPattern(URLPattern::SCHEME_ALL, "<all_urls>"))); 2595e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) EXPECT_TRUE(info->matches.MatchesURL(GURL("https://example.com"))); 2601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(info->matches.MatchesURL(GURL("http://build.chromium.org"))); 2611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 2621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(ExternallyConnectableTest, AllURLsNotWhitelisted) { 2641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<Extension> extension = LoadAndExpectSuccess( 2651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "externally_connectable_all_urls_not_whitelisted.json"); 2661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExternallyConnectableInfo* info = GetExternallyConnectableInfo(extension); 2671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(info->matches.MatchesAllURLs()); 2681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 2691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(ExternallyConnectableTest, AllURLsWhitelisted) { 2711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<Extension> extension = 2721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LoadAndExpectSuccess("externally_connectable_all_urls_whitelisted.json"); 2731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExternallyConnectableInfo* info = GetExternallyConnectableInfo(extension); 2741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(info->matches.MatchesAllURLs()); 2751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci URLPattern pattern(URLPattern::SCHEME_ALL, "<all_urls>"); 2761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(info->matches.ContainsPattern(pattern)); 2771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(info->matches.MatchesURL(GURL("https://example.com"))); 2785e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) EXPECT_TRUE(info->matches.MatchesURL(GURL("http://build.chromium.org"))); 279868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 280868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 2815e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)TEST_F(ExternallyConnectableTest, WarningWildcardHost) { 2825e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) scoped_refptr<Extension> extension = LoadAndExpectWarning( 2835e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) "externally_connectable_error_wildcard_host.json", 2845e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) ErrorUtils::FormatErrorMessage(errors::kErrorWildcardHostsNotAllowed, 2855e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) "http://*/*")); 2865e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) ExternallyConnectableInfo* info = GetExternallyConnectableInfo(extension); 2875e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) EXPECT_FALSE(info->matches.ContainsPattern( 2885e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) URLPattern(URLPattern::SCHEME_ALL, "http://*/*"))); 2895e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) EXPECT_TRUE(info->matches.MatchesURL(GURL("https://example.com"))); 2905e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) EXPECT_TRUE(info->matches.MatchesURL(GURL("http://build.chromium.org"))); 291868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 292868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 2935e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)TEST_F(ExternallyConnectableTest, WarningNoTLD) { 2945e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) scoped_refptr<Extension> extension = LoadAndExpectWarning( 2955e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) "externally_connectable_error_tld.json", 296010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ErrorUtils::FormatErrorMessage(errors::kErrorTopLevelDomainsNotAllowed, 297010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "co.uk", 298010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "http://*.co.uk/*")); 2995e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) ExternallyConnectableInfo* info = GetExternallyConnectableInfo(extension); 3005e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) EXPECT_FALSE(info->matches.ContainsPattern( 3015e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) URLPattern(URLPattern::SCHEME_ALL, "http://*.co.uk/*"))); 3025e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) EXPECT_TRUE(info->matches.MatchesURL(GURL("https://example.com"))); 3035e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) EXPECT_TRUE(info->matches.MatchesURL(GURL("http://build.chromium.org"))); 304868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 305868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 3065e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)TEST_F(ExternallyConnectableTest, WarningNoEffectiveTLD) { 3075e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) scoped_refptr<Extension> extension = LoadAndExpectWarning( 3085e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) "externally_connectable_error_effective_tld.json", 309010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ErrorUtils::FormatErrorMessage(errors::kErrorTopLevelDomainsNotAllowed, 310010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "appspot.com", 311010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "http://*.appspot.com/*")); 3125e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) ExternallyConnectableInfo* info = GetExternallyConnectableInfo(extension); 3135e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) EXPECT_FALSE(info->matches.ContainsPattern( 3145e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) URLPattern(URLPattern::SCHEME_ALL, "http://*.appspot.com/*"))); 3155e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) EXPECT_TRUE(info->matches.MatchesURL(GURL("https://example.com"))); 3165e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) EXPECT_TRUE(info->matches.MatchesURL(GURL("http://build.chromium.org"))); 317868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 318868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 3195e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)TEST_F(ExternallyConnectableTest, WarningUnknownTLD) { 3205e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) scoped_refptr<Extension> extension = LoadAndExpectWarning( 3215e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) "externally_connectable_error_unknown_tld.json", 322010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ErrorUtils::FormatErrorMessage(errors::kErrorTopLevelDomainsNotAllowed, 323010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "notatld", 324010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "http://*.notatld/*")); 3255e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) ExternallyConnectableInfo* info = GetExternallyConnectableInfo(extension); 3265e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) EXPECT_FALSE(info->matches.ContainsPattern( 3275e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) URLPattern(URLPattern::SCHEME_ALL, "http://*.notatld/*"))); 3285e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) EXPECT_TRUE(info->matches.MatchesURL(GURL("https://example.com"))); 3295e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) EXPECT_TRUE(info->matches.MatchesURL(GURL("http://build.chromium.org"))); 330868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 331868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 3327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(ExternallyConnectableTest, WarningNothingSpecified) { 3337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) LoadAndExpectWarning("externally_connectable_nothing_specified.json", 3347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) errors::kErrorNothingSpecified); 3357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 3367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 337c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace extensions 338