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 "net/http/url_security_manager.h" 6 7#include "base/basictypes.h" 8#include "net/base/net_errors.h" 9#include "net/http/http_auth_filter.h" 10#include "testing/gtest/include/gtest/gtest.h" 11#include "url/gurl.h" 12 13namespace net { 14 15namespace { 16 17struct TestData { 18 const char* url; 19 bool succeds_in_windows_default; 20 bool succeeds_in_whitelist; 21}; 22 23const char* kTestAuthWhitelist = "*example.com,*foobar.com,baz"; 24 25// Under Windows the following will be allowed by default: 26// localhost 27// host names without a period. 28// In Posix systems (or on Windows if a whitelist is specified explicitly), 29// everything depends on the whitelist. 30const TestData kTestDataList[] = { 31 { "http://localhost", true, false }, 32 { "http://bat", true, false }, 33 { "http://www.example.com", false, true }, 34 { "http://example.com", false, true }, 35 { "http://foobar.com", false, true }, 36 { "http://boo.foobar.com", false, true }, 37 { "http://baz", true, true }, 38 { "http://www.exampl.com", false, false }, 39 { "http://example.org", false, false }, 40 { "http://foobar.net", false, false }, 41 { "http://boo.fubar.com", false, false }, 42}; 43 44} // namespace 45 46TEST(URLSecurityManager, UseDefaultCredentials) { 47 HttpAuthFilterWhitelist* auth_filter = new HttpAuthFilterWhitelist( 48 kTestAuthWhitelist); 49 ASSERT_TRUE(auth_filter); 50 // The URL security manager takes ownership of |auth_filter|. 51 scoped_ptr<URLSecurityManager> url_security_manager( 52 URLSecurityManager::Create(auth_filter, NULL)); 53 ASSERT_TRUE(url_security_manager.get()); 54 55 for (size_t i = 0; i < arraysize(kTestDataList); ++i) { 56 GURL gurl(kTestDataList[i].url); 57 bool can_use_default = 58 url_security_manager->CanUseDefaultCredentials(gurl); 59 60 EXPECT_EQ(kTestDataList[i].succeeds_in_whitelist, can_use_default) 61 << " Run: " << i << " URL: '" << gurl << "'"; 62 } 63} 64 65TEST(URLSecurityManager, CanDelegate) { 66 HttpAuthFilterWhitelist* auth_filter = new HttpAuthFilterWhitelist( 67 kTestAuthWhitelist); 68 ASSERT_TRUE(auth_filter); 69 // The URL security manager takes ownership of |auth_filter|. 70 scoped_ptr<URLSecurityManager> url_security_manager( 71 URLSecurityManager::Create(NULL, auth_filter)); 72 ASSERT_TRUE(url_security_manager.get()); 73 74 for (size_t i = 0; i < arraysize(kTestDataList); ++i) { 75 GURL gurl(kTestDataList[i].url); 76 bool can_delegate = url_security_manager->CanDelegate(gurl); 77 EXPECT_EQ(kTestDataList[i].succeeds_in_whitelist, can_delegate) 78 << " Run: " << i << " URL: '" << gurl << "'"; 79 } 80} 81 82TEST(URLSecurityManager, CanDelegate_NoWhitelist) { 83 // Nothing can delegate in this case. 84 scoped_ptr<URLSecurityManager> url_security_manager( 85 URLSecurityManager::Create(NULL, NULL)); 86 ASSERT_TRUE(url_security_manager.get()); 87 88 for (size_t i = 0; i < arraysize(kTestDataList); ++i) { 89 GURL gurl(kTestDataList[i].url); 90 bool can_delegate = url_security_manager->CanDelegate(gurl); 91 EXPECT_FALSE(can_delegate); 92 } 93} 94 95 96} // namespace net 97