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.
5 #ifndef ResourceLoaderOptionsTest_h
6 #define ResourceLoaderOptionsTest_h
9 #include "core/fetch/ResourceLoaderOptions.h"
11 #include "wtf/TypeTraits.h"
13 #include <gtest/gtest.h>
19 TEST(ResourceLoaderOptionsTest
, DeepCopy
)
21 // Check that the fields of ResourceLoaderOptions are enums,
22 // except for initiatorInfo and securityOrigin.
23 static_assert(WTF::IsEnum
<DataBufferingPolicy
>::value
, "DataBufferingPolicy should be an enum");
24 static_assert(WTF::IsEnum
<StoredCredentials
>::value
, "StoredCredentials should be an enum");
25 static_assert(WTF::IsEnum
<CredentialRequest
>::value
, "CredentialRequest should be an enum");
26 static_assert(WTF::IsEnum
<ContentSecurityPolicyDisposition
>::value
, "ContentSecurityPolicyDisposition should be an enum");
27 static_assert(WTF::IsEnum
<RequestInitiatorContext
>::value
, "RequestInitiatorContext should be an enum");
28 static_assert(WTF::IsEnum
<SynchronousPolicy
>::value
, "SynchronousPolicy should be an enum");
29 static_assert(WTF::IsEnum
<CORSEnabled
>::value
, "CORSEnabled should be an enum");
31 ResourceLoaderOptions original
;
32 RefPtr
<SecurityOrigin
> securityOrigin
= SecurityOrigin::createFromString("http://www.google.com");
33 original
.securityOrigin
= securityOrigin
;
34 original
.initiatorInfo
.name
= AtomicString("xmlhttprequest");
36 CrossThreadResourceLoaderOptionsData copyData
= CrossThreadCopier
<ResourceLoaderOptions
>::copy(original
);
37 ResourceLoaderOptions copy
= copyData
;
39 // Check that contents are correctly copied to |copyData|
40 EXPECT_EQ(original
.dataBufferingPolicy
, copyData
.dataBufferingPolicy
);
41 EXPECT_EQ(original
.allowCredentials
, copyData
.allowCredentials
);
42 EXPECT_EQ(original
.credentialsRequested
, copyData
.credentialsRequested
);
43 EXPECT_EQ(original
.contentSecurityPolicyOption
, copyData
.contentSecurityPolicyOption
);
44 EXPECT_EQ(original
.initiatorInfo
.name
, copyData
.initiatorInfo
.name
);
45 EXPECT_EQ(original
.initiatorInfo
.position
, copyData
.initiatorInfo
.position
);
46 EXPECT_EQ(original
.initiatorInfo
.startTime
, copyData
.initiatorInfo
.startTime
);
47 EXPECT_EQ(original
.requestInitiatorContext
, copyData
.requestInitiatorContext
);
48 EXPECT_EQ(original
.synchronousPolicy
, copyData
.synchronousPolicy
);
49 EXPECT_EQ(original
.corsEnabled
, copyData
.corsEnabled
);
50 EXPECT_EQ(original
.securityOrigin
->protocol(), copyData
.securityOrigin
->protocol());
51 EXPECT_EQ(original
.securityOrigin
->host(), copyData
.securityOrigin
->host());
52 EXPECT_EQ(original
.securityOrigin
->domain(), copyData
.securityOrigin
->domain());
54 // Check that pointers are different between |original| and |copyData|
55 EXPECT_NE(original
.initiatorInfo
.name
.impl(), copyData
.initiatorInfo
.name
.impl());
56 EXPECT_NE(original
.securityOrigin
.get(), copyData
.securityOrigin
.get());
57 EXPECT_NE(original
.securityOrigin
->protocol().impl(), copyData
.securityOrigin
->protocol().impl());
58 EXPECT_NE(original
.securityOrigin
->host().impl(), copyData
.securityOrigin
->host().impl());
59 EXPECT_NE(original
.securityOrigin
->domain().impl(), copyData
.securityOrigin
->domain().impl());
61 // Check that contents are correctly copied to |copy|
62 EXPECT_EQ(original
.dataBufferingPolicy
, copy
.dataBufferingPolicy
);
63 EXPECT_EQ(original
.allowCredentials
, copy
.allowCredentials
);
64 EXPECT_EQ(original
.credentialsRequested
, copy
.credentialsRequested
);
65 EXPECT_EQ(original
.contentSecurityPolicyOption
, copy
.contentSecurityPolicyOption
);
66 EXPECT_EQ(original
.initiatorInfo
.name
, copy
.initiatorInfo
.name
);
67 EXPECT_EQ(original
.initiatorInfo
.position
, copy
.initiatorInfo
.position
);
68 EXPECT_EQ(original
.initiatorInfo
.startTime
, copy
.initiatorInfo
.startTime
);
69 EXPECT_EQ(original
.requestInitiatorContext
, copy
.requestInitiatorContext
);
70 EXPECT_EQ(original
.synchronousPolicy
, copy
.synchronousPolicy
);
71 EXPECT_EQ(original
.corsEnabled
, copy
.corsEnabled
);
72 EXPECT_EQ(original
.securityOrigin
->protocol(), copy
.securityOrigin
->protocol());
73 EXPECT_EQ(original
.securityOrigin
->host(), copy
.securityOrigin
->host());
74 EXPECT_EQ(original
.securityOrigin
->domain(), copy
.securityOrigin
->domain());
76 // Check that pointers are different between |original| and |copy|
77 // FIXME: When |original| and |copy| are in different threads, then
78 // EXPECT_NE(original.initiatorInfo.name.impl(), copy.initiatorInfo.name.impl());
79 // should pass. However, in the unit test here, these two pointers are the
80 // same, because initiatorInfo.name is AtomicString.
81 EXPECT_NE(original
.securityOrigin
.get(), copy
.securityOrigin
.get());
82 EXPECT_NE(original
.securityOrigin
->protocol().impl(), copy
.securityOrigin
->protocol().impl());
83 EXPECT_NE(original
.securityOrigin
->host().impl(), copy
.securityOrigin
->host().impl());
84 EXPECT_NE(original
.securityOrigin
->domain().impl(), copy
.securityOrigin
->domain().impl());
86 // FIXME: The checks for content equality/pointer inequality for
87 // securityOrigin here is not complete (i.e. m_filePath is not checked).
88 // A unit test for SecurityOrigin::isolatedCopy() that covers these checks
96 #endif // ResourceLoaderOptionsTest_h