Index: chrome_frame/test/util_unittests.cc |
=================================================================== |
--- chrome_frame/test/util_unittests.cc (revision 68604) |
+++ chrome_frame/test/util_unittests.cc (working copy) |
@@ -5,7 +5,10 @@ |
#include "base/file_path.h" |
#include "base/file_version_info.h" |
#include "base/file_version_info_win.h" |
+#include "base/utf_string_conversions.h" |
#include "base/win/registry.h" |
+ |
+#include "chrome_frame/chrome_frame_delegate.h" |
#include "chrome_frame/utils.h" |
#include "testing/gtest/include/gtest/gtest.h" |
@@ -202,8 +205,37 @@ |
HRESULT(DWORD zone, IEnumString** enum_string, DWORD flags)); |
}; |
+// This class provides a partial mock for the NavigationConstraints |
+// interface by providing specialized zone overrides. |
+class MockNavigationConstraintsZoneOverride |
+ : public NavigationConstraintsImpl { |
+ public: |
+ MOCK_METHOD1(IsZoneAllowed, bool(const GURL&url)); |
+}; |
+ |
+// Mock NavigationConstraints |
+class MockNavigationConstraints : public NavigationConstraints { |
+ public: |
+ MOCK_METHOD0(AllowUnsafeUrls, bool()); |
+ MOCK_METHOD1(IsSchemeAllowed, bool(const GURL&url)); |
+ MOCK_METHOD1(IsZoneAllowed, bool(const GURL&url)); |
+}; |
+ |
+// Matcher which returns true if the URL passed in starts with the prefix |
+// specified. |
+MATCHER_P(UrlPathStartsWith, url_prefix, "url starts with prefix") { |
+ return StartsWith(UTF8ToWide(arg.spec()), url_prefix, false); |
+} |
+ |
+ACTION_P3(HandleZone, mock, url_prefix, zone) { |
+ if (StartsWith(UTF8ToWide(arg0.spec()), |
+ url_prefix, false)) |
+ return zone != URLZONE_UNTRUSTED; |
+ return false; |
+} |
+ |
TEST(UtilTests, CanNavigateTest) { |
- MockIInternetSecurityManager mock; |
+ MockNavigationConstraintsZoneOverride mock; |
struct Zones { |
const wchar_t* url_prefix; |
@@ -221,63 +253,40 @@ |
for (int i = 0; i < arraysize(test_zones); ++i) { |
const Zones& zone = test_zones[i]; |
- EXPECT_CALL(mock, MapUrlToZone(testing::StartsWith(zone.url_prefix), |
- testing::_, testing::_)) |
- .WillRepeatedly(testing::DoAll( |
- testing::SetArgumentPointee<1>(zone.zone), |
- testing::Return(S_OK))); |
+ EXPECT_CALL(mock, IsZoneAllowed(UrlPathStartsWith(zone.url_prefix))) |
+ .WillRepeatedly(testing::Return(zone.zone != URLZONE_UNTRUSTED)); |
} |
struct Cases { |
const char* url; |
- bool is_privileged; |
bool default_expected; |
bool unsafe_expected; |
} test_cases[] = { |
// Invalid URL |
- { " ", false, false, false }, |
- { "foo bar", true, false, false }, |
+ { " ", false, false }, |
+ { "foo bar", false, false }, |
// non-privileged test cases |
- { "http://blah/?attach_external_tab&10&1&0&0&100&100&iexplore", false, |
- true, true }, |
- { "http://untrusted/bar.html", false, false, true }, |
- { "http://blah/?attach_external_tab&10&1&0&0&100&100&iexplore", false, |
- true, true }, |
- { "view-source:http://www.google.ca", false, true, true }, |
- { "view-source:javascript:alert('foo');", false, false, true }, |
- { "about:blank", false, true, true }, |
- { "About:Version", false, true, true }, |
- { "about:config", false, false, true }, |
- { "chrome-extension://aaaaaaaaaaaaaaaaaaa/toolstrip.html", false, false, |
- true }, |
- { "ftp://www.google.ca", false, false, true }, |
- { "file://www.google.ca", false, false, true }, |
- { "file://C:\boot.ini", false, false, true }, |
- { "SIP:someone@10.1.2.3", false, false, true }, |
- |
- // privileged test cases |
- { "http://blah/?attach_external_tab&10&1&0&0&100&100&iexplore", true, true, |
- true }, |
- { "http://untrusted/bar.html", true, false, true }, |
- { "http://blah/?attach_external_tab&10&1&0&0&100&100&iexplore", true, true, |
- true }, |
- { "view-source:http://www.google.ca", true, true, true }, |
- { "view-source:javascript:alert('foo');", true, false, true }, |
- { "about:blank", true, true, true }, |
- { "About:Version", true, true, true }, |
- { "about:config", true, false, true }, |
- { "chrome-extension://aaaaaaaaaaaaaaaaaaa/toolstrip.html", true, true, |
- true }, |
- { "ftp://www.google.ca", true, false, true }, |
- { "file://www.google.ca", true, false, true }, |
- { "file://C:\boot.ini", true, false, true }, |
- { "sip:someone@10.1.2.3", false, false, true }, |
+ { "http://blah/?attach_external_tab&10&1&0&0&100&100&iexplore", true, |
+ true }, |
+ { "http://untrusted/bar.html", false, true }, |
+ { "http://blah/?attach_external_tab&10&1&0&0&100&100&iexplore", true, |
+ true }, |
+ { "view-source:http://www.google.ca", true, true }, |
+ { "view-source:javascript:alert('foo');", false, true }, |
+ { "about:blank", true, true }, |
+ { "About:Version", true, true }, |
+ { "about:config", false, true }, |
+ { "chrome-extension://aaaaaaaaaaaaaaaaaaa/toolstrip.html", false, true }, |
+ { "ftp://www.google.ca", false, true }, |
+ { "file://www.google.ca", false, true }, |
+ { "file://C:\boot.ini", false, true }, |
+ { "SIP:someone@10.1.2.3", false, true }, |
}; |
for (int i = 0; i < arraysize(test_cases); ++i) { |
const Cases& test = test_cases[i]; |
- bool actual = CanNavigate(GURL(test.url), &mock, test.is_privileged); |
+ bool actual = CanNavigate(GURL(test.url), &mock); |
EXPECT_EQ(test.default_expected, actual) << "Failure url: " << test.url; |
} |
@@ -286,13 +295,89 @@ |
for (int i = 0; i < arraysize(test_cases); ++i) { |
const Cases& test = test_cases[i]; |
- bool actual = CanNavigate(GURL(test.url), &mock, test.is_privileged); |
+ bool actual = CanNavigate(GURL(test.url), &mock); |
EXPECT_EQ(test.unsafe_expected, actual) << "Failure url: " << test.url; |
} |
SetConfigBool(kAllowUnsafeURLs, enable_gcf); |
} |
+TEST(UtilTests, CanNavigateTestDenyAll) { |
amit
2010/12/10 23:56:17
nice new tests
|
+ MockNavigationConstraints mock; |
+ |
+ EXPECT_CALL(mock, IsZoneAllowed(testing::_)) |
+ .Times(testing::AnyNumber()) |
+ .WillRepeatedly(testing::Return(false)); |
+ |
+ EXPECT_CALL(mock, IsSchemeAllowed(testing::_)) |
+ .Times(testing::AnyNumber()) |
+ .WillRepeatedly(testing::Return(false)); |
+ |
+ EXPECT_CALL(mock, AllowUnsafeUrls()) |
+ .Times(testing::AnyNumber()) |
+ .WillRepeatedly(testing::Return(false)); |
+ |
+ char *urls[] = { |
+ {"http://blah/?attach_external_tab&10&1&0&0&100&100&iexplore"}, |
+ {"http://untrusted/bar.html"}, |
+ {"http://blah/?attach_external_tab&10&1&0&0&100&100&iexplore"}, |
+ {"view-source:http://www.google.ca"}, |
+ {"view-source:javascript:alert('foo');"}, |
+ {"about:blank"}, |
+ {"About:Version"}, |
+ }; |
+ |
+ for (int i = 0; i < arraysize(urls); ++i) { |
+ EXPECT_FALSE(CanNavigate(GURL(urls[i]), &mock)); |
+ } |
+} |
+ |
+TEST(UtilTests, CanNavigateTestAllowAll) { |
+ MockNavigationConstraints mock; |
+ |
+ EXPECT_CALL(mock, AllowUnsafeUrls()) |
+ .Times(testing::AnyNumber()) |
+ .WillRepeatedly(testing::Return(false)); |
+ |
+ EXPECT_CALL(mock, IsSchemeAllowed(testing::_)) |
+ .Times(testing::AnyNumber()) |
+ .WillRepeatedly(testing::Return(true)); |
+ |
+ EXPECT_CALL(mock, IsZoneAllowed(testing::_)) |
+ .Times(testing::AnyNumber()) |
+ .WillRepeatedly(testing::Return(true)); |
+ |
+ char *urls[] = { |
+ {"gcf:about:cache"}, |
+ {"gcf:http://www.google.com"}, |
+ {"view-source:javascript:alert('foo');"}, |
+ {"http://www.google.com"}, |
+ }; |
+ |
+ for (int i = 0; i < arraysize(urls); ++i) { |
+ EXPECT_TRUE(CanNavigate(GURL(urls[i]), &mock)); |
+ } |
+} |
+ |
+TEST(UtilTests, CanNavigateTestAllowAllUnsafeUrs) { |
+ MockNavigationConstraints mock; |
+ |
+ EXPECT_CALL(mock, AllowUnsafeUrls()) |
+ .Times(testing::AnyNumber()) |
+ .WillRepeatedly(testing::Return(true)); |
+ |
+ char *urls[] = { |
+ {"gcf:about:cache"}, |
+ {"gcf:http://www.google.com"}, |
+ {"view-source:javascript:alert('foo');"}, |
+ {"http://www.google.com"}, |
+ }; |
+ |
+ for (int i = 0; i < arraysize(urls); ++i) { |
+ EXPECT_TRUE(CanNavigate(GURL(urls[i]), &mock)); |
+ } |
+} |
+ |
TEST(UtilTests, IsDefaultRendererTest) { |
RegKey config_key(HKEY_CURRENT_USER, kChromeFrameConfigKey, KEY_ALL_ACCESS); |
EXPECT_TRUE(config_key.Valid()); |