| OLD | NEW |
| (Empty) |
| 1 // Copyright 2014 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 "core/fetch/ResourceLoaderOptions.h" | |
| 6 | |
| 7 #include "testing/gtest/include/gtest/gtest.h" | |
| 8 #include <type_traits> | |
| 9 | |
| 10 namespace blink { | |
| 11 | |
| 12 namespace { | |
| 13 | |
| 14 TEST(ResourceLoaderOptionsTest, DeepCopy) { | |
| 15 // Check that the fields of ResourceLoaderOptions are enums, except for | |
| 16 // initiatorInfo and securityOrigin. | |
| 17 static_assert(std::is_enum<DataBufferingPolicy>::value, | |
| 18 "DataBufferingPolicy should be an enum"); | |
| 19 static_assert(std::is_enum<StoredCredentials>::value, | |
| 20 "StoredCredentials should be an enum"); | |
| 21 static_assert(std::is_enum<CredentialRequest>::value, | |
| 22 "CredentialRequest should be an enum"); | |
| 23 static_assert(std::is_enum<ContentSecurityPolicyDisposition>::value, | |
| 24 "ContentSecurityPolicyDisposition should be an enum"); | |
| 25 static_assert(std::is_enum<RequestInitiatorContext>::value, | |
| 26 "RequestInitiatorContext should be an enum"); | |
| 27 static_assert(std::is_enum<SynchronousPolicy>::value, | |
| 28 "SynchronousPolicy should be an enum"); | |
| 29 static_assert(std::is_enum<CORSEnabled>::value, | |
| 30 "CORSEnabled should be an enum"); | |
| 31 | |
| 32 ResourceLoaderOptions original; | |
| 33 RefPtr<SecurityOrigin> securityOrigin = | |
| 34 SecurityOrigin::createFromString("http://www.google.com"); | |
| 35 original.securityOrigin = securityOrigin; | |
| 36 original.initiatorInfo.name = AtomicString("xmlhttprequest"); | |
| 37 | |
| 38 CrossThreadResourceLoaderOptionsData copyData = | |
| 39 CrossThreadCopier<ResourceLoaderOptions>::copy(original); | |
| 40 ResourceLoaderOptions copy = copyData; | |
| 41 | |
| 42 // Check that contents are correctly copied to |copyData| | |
| 43 EXPECT_EQ(original.dataBufferingPolicy, copyData.dataBufferingPolicy); | |
| 44 EXPECT_EQ(original.allowCredentials, copyData.allowCredentials); | |
| 45 EXPECT_EQ(original.credentialsRequested, copyData.credentialsRequested); | |
| 46 EXPECT_EQ(original.contentSecurityPolicyOption, | |
| 47 copyData.contentSecurityPolicyOption); | |
| 48 EXPECT_EQ(original.initiatorInfo.name, copyData.initiatorInfo.name); | |
| 49 EXPECT_EQ(original.initiatorInfo.position, copyData.initiatorInfo.position); | |
| 50 EXPECT_EQ(original.initiatorInfo.startTime, copyData.initiatorInfo.startTime); | |
| 51 EXPECT_EQ(original.requestInitiatorContext, copyData.requestInitiatorContext); | |
| 52 EXPECT_EQ(original.synchronousPolicy, copyData.synchronousPolicy); | |
| 53 EXPECT_EQ(original.corsEnabled, copyData.corsEnabled); | |
| 54 EXPECT_EQ(original.securityOrigin->protocol(), | |
| 55 copyData.securityOrigin->protocol()); | |
| 56 EXPECT_EQ(original.securityOrigin->host(), copyData.securityOrigin->host()); | |
| 57 EXPECT_EQ(original.securityOrigin->domain(), | |
| 58 copyData.securityOrigin->domain()); | |
| 59 | |
| 60 // Check that pointers are different between |original| and |copyData| | |
| 61 EXPECT_NE(original.initiatorInfo.name.impl(), | |
| 62 copyData.initiatorInfo.name.impl()); | |
| 63 EXPECT_NE(original.securityOrigin.get(), copyData.securityOrigin.get()); | |
| 64 EXPECT_NE(original.securityOrigin->protocol().impl(), | |
| 65 copyData.securityOrigin->protocol().impl()); | |
| 66 EXPECT_NE(original.securityOrigin->host().impl(), | |
| 67 copyData.securityOrigin->host().impl()); | |
| 68 EXPECT_NE(original.securityOrigin->domain().impl(), | |
| 69 copyData.securityOrigin->domain().impl()); | |
| 70 | |
| 71 // Check that contents are correctly copied to |copy| | |
| 72 EXPECT_EQ(original.dataBufferingPolicy, copy.dataBufferingPolicy); | |
| 73 EXPECT_EQ(original.allowCredentials, copy.allowCredentials); | |
| 74 EXPECT_EQ(original.credentialsRequested, copy.credentialsRequested); | |
| 75 EXPECT_EQ(original.contentSecurityPolicyOption, | |
| 76 copy.contentSecurityPolicyOption); | |
| 77 EXPECT_EQ(original.initiatorInfo.name, copy.initiatorInfo.name); | |
| 78 EXPECT_EQ(original.initiatorInfo.position, copy.initiatorInfo.position); | |
| 79 EXPECT_EQ(original.initiatorInfo.startTime, copy.initiatorInfo.startTime); | |
| 80 EXPECT_EQ(original.requestInitiatorContext, copy.requestInitiatorContext); | |
| 81 EXPECT_EQ(original.synchronousPolicy, copy.synchronousPolicy); | |
| 82 EXPECT_EQ(original.corsEnabled, copy.corsEnabled); | |
| 83 EXPECT_EQ(original.securityOrigin->protocol(), | |
| 84 copy.securityOrigin->protocol()); | |
| 85 EXPECT_EQ(original.securityOrigin->host(), copy.securityOrigin->host()); | |
| 86 EXPECT_EQ(original.securityOrigin->domain(), copy.securityOrigin->domain()); | |
| 87 | |
| 88 // Check that pointers are different between |original| and |copy| | |
| 89 // FIXME: When |original| and |copy| are in different threads, then | |
| 90 // EXPECT_NE(original.initiatorInfo.name.impl(), | |
| 91 // copy.initiatorInfo.name.impl()); | |
| 92 // should pass. However, in the unit test here, these two pointers are the | |
| 93 // same, because initiatorInfo.name is AtomicString. | |
| 94 EXPECT_NE(original.securityOrigin.get(), copy.securityOrigin.get()); | |
| 95 EXPECT_NE(original.securityOrigin->protocol().impl(), | |
| 96 copy.securityOrigin->protocol().impl()); | |
| 97 EXPECT_NE(original.securityOrigin->host().impl(), | |
| 98 copy.securityOrigin->host().impl()); | |
| 99 EXPECT_NE(original.securityOrigin->domain().impl(), | |
| 100 copy.securityOrigin->domain().impl()); | |
| 101 | |
| 102 // FIXME: The checks for content equality/pointer inequality for | |
| 103 // securityOrigin here is not complete (i.e. m_filePath is not checked). A | |
| 104 // unit test for SecurityOrigin::isolatedCopy() that covers these checks | |
| 105 // should be added. | |
| 106 } | |
| 107 | |
| 108 } // namespace | |
| 109 | |
| 110 } // namespace blink | |
| OLD | NEW |