Index: Source/core/fetch/ResourceLoaderOptionsTest.cpp |
diff --git a/Source/core/fetch/ResourceLoaderOptionsTest.cpp b/Source/core/fetch/ResourceLoaderOptionsTest.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..98e391bc40cfef9cd49bdfacd15c42059a67d1a8 |
--- /dev/null |
+++ b/Source/core/fetch/ResourceLoaderOptionsTest.cpp |
@@ -0,0 +1,99 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef ResourceLoaderOptionsTest_h |
+#define ResourceLoaderOptionsTest_h |
+ |
+#include "config.h" |
+#include "core/fetch/ResourceLoaderOptions.h" |
+ |
+#include "wtf/TypeTraits.h" |
+ |
+#include <gtest/gtest.h> |
+ |
+namespace blink { |
+ |
+namespace { |
+ |
+TEST(ResourceLoaderOptionsTest, DeepCopy) |
+{ |
+ // Check that the fields of ResourceLoaderOptions are enums, |
+ // except for initiatorInfo and securityOrigin. |
+ COMPILE_ASSERT(WTF::IsConvertibleToInteger<DataBufferingPolicy>::value, DataBufferingPolicy_is_enum); |
+ COMPILE_ASSERT(WTF::IsConvertibleToInteger<StoredCredentials>::value, StoredCredentials_is_enum); |
+ COMPILE_ASSERT(WTF::IsConvertibleToInteger<CredentialRequest>::value, CredentialRequest_is_enum); |
+ COMPILE_ASSERT(WTF::IsConvertibleToInteger<ContentSecurityPolicyCheck>::value, ContentSecurityPolicyCheck_is_enum); |
+ COMPILE_ASSERT(WTF::IsConvertibleToInteger<RequestInitiatorContext>::value, RequestInitiatorContext_is_enum); |
+ COMPILE_ASSERT(WTF::IsConvertibleToInteger<MixedContentBlockingTreatment>::value, MixedContentBlockingTreatment_is_enum); |
+ COMPILE_ASSERT(WTF::IsConvertibleToInteger<SynchronousPolicy>::value, SynchronousPolicy_is_enum); |
+ COMPILE_ASSERT(WTF::IsConvertibleToInteger<CORSEnabled>::value, CORSEnabled_is_enum); |
+ |
+ ResourceLoaderOptions original; |
+ RefPtr<SecurityOrigin> securityOrigin = SecurityOrigin::createFromString("http://www.google.com"); |
+ original.securityOrigin = securityOrigin; |
+ original.initiatorInfo.name = AtomicString("xmlhttprequest"); |
+ |
+ CrossThreadResourceLoaderOptionsData copyData = CrossThreadCopier<ResourceLoaderOptions>::copy(original); |
+ ResourceLoaderOptions copy = copyData; |
+ |
+ // Check that contents are correctly copied to |copyData| |
+ EXPECT_EQ(original.dataBufferingPolicy, copyData.dataBufferingPolicy); |
+ EXPECT_EQ(original.allowCredentials, copyData.allowCredentials); |
+ EXPECT_EQ(original.credentialsRequested, copyData.credentialsRequested); |
+ EXPECT_EQ(original.contentSecurityPolicyOption, copyData.contentSecurityPolicyOption); |
+ EXPECT_EQ(original.initiatorInfo.name, copyData.initiatorInfo.name); |
+ EXPECT_EQ(original.initiatorInfo.position, copyData.initiatorInfo.position); |
+ EXPECT_EQ(original.initiatorInfo.startTime, copyData.initiatorInfo.startTime); |
+ EXPECT_EQ(original.requestInitiatorContext, copyData.requestInitiatorContext); |
+ EXPECT_EQ(original.mixedContentBlockingTreatment, copyData.mixedContentBlockingTreatment); |
+ EXPECT_EQ(original.synchronousPolicy, copyData.synchronousPolicy); |
+ EXPECT_EQ(original.corsEnabled, copyData.corsEnabled); |
+ EXPECT_EQ(original.securityOrigin->protocol(), copyData.securityOrigin->protocol()); |
+ EXPECT_EQ(original.securityOrigin->host(), copyData.securityOrigin->host()); |
+ EXPECT_EQ(original.securityOrigin->domain(), copyData.securityOrigin->domain()); |
+ |
+ // Check that pointers are different between |original| and |copyData| |
+ EXPECT_NE(original.initiatorInfo.name.impl(), copyData.initiatorInfo.name.impl()); |
+ EXPECT_NE(original.securityOrigin.get(), copyData.securityOrigin.get()); |
+ EXPECT_NE(original.securityOrigin->protocol().impl(), copyData.securityOrigin->protocol().impl()); |
+ EXPECT_NE(original.securityOrigin->host().impl(), copyData.securityOrigin->host().impl()); |
+ EXPECT_NE(original.securityOrigin->domain().impl(), copyData.securityOrigin->domain().impl()); |
+ |
+ // Check that contents are correctly copied to |copy| |
+ EXPECT_EQ(original.dataBufferingPolicy, copy.dataBufferingPolicy); |
+ EXPECT_EQ(original.allowCredentials, copy.allowCredentials); |
+ EXPECT_EQ(original.credentialsRequested, copy.credentialsRequested); |
+ EXPECT_EQ(original.contentSecurityPolicyOption, copy.contentSecurityPolicyOption); |
+ EXPECT_EQ(original.initiatorInfo.name, copy.initiatorInfo.name); |
+ EXPECT_EQ(original.initiatorInfo.position, copy.initiatorInfo.position); |
+ EXPECT_EQ(original.initiatorInfo.startTime, copy.initiatorInfo.startTime); |
+ EXPECT_EQ(original.requestInitiatorContext, copy.requestInitiatorContext); |
+ EXPECT_EQ(original.mixedContentBlockingTreatment, copy.mixedContentBlockingTreatment); |
+ EXPECT_EQ(original.synchronousPolicy, copy.synchronousPolicy); |
+ EXPECT_EQ(original.corsEnabled, copy.corsEnabled); |
+ EXPECT_EQ(original.securityOrigin->protocol(), copy.securityOrigin->protocol()); |
+ EXPECT_EQ(original.securityOrigin->host(), copy.securityOrigin->host()); |
+ EXPECT_EQ(original.securityOrigin->domain(), copy.securityOrigin->domain()); |
+ |
+ // Check that pointers are different between |original| and |copy| |
+ // FIXME: When |original| and |copy| are in different threads, then |
+ // EXPECT_NE(original.initiatorInfo.name.impl(), copy.initiatorInfo.name.impl()); |
+ // should pass. However, in the unit test here, these two pointers are the |
+ // same, because initiatorInfo.name is AtomicString. |
+ EXPECT_NE(original.securityOrigin.get(), copy.securityOrigin.get()); |
+ EXPECT_NE(original.securityOrigin->protocol().impl(), copy.securityOrigin->protocol().impl()); |
+ EXPECT_NE(original.securityOrigin->host().impl(), copy.securityOrigin->host().impl()); |
+ EXPECT_NE(original.securityOrigin->domain().impl(), copy.securityOrigin->domain().impl()); |
+ |
+ // FIXME: The checks for content equality/pointer inequality for |
+ // securityOrigin here is not complete (i.e. m_filePath is not checked). |
+ // A unit test for SecurityOrigin::isolatedCopy() that covers these checks |
+ // should be added. |
+} |
+ |
+} // namespace |
+ |
+} // namespace blink |
+ |
+#endif // ResourceLoaderOptionsTest_h |