Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(90)

Unified Diff: Source/core/fetch/ResourceLoaderOptionsTest.cpp

Issue 583903003: [Thread-safe] Take isolatedCopy of SecurityOrigin in ResourceLoaderOptions when passed across thread (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rebase Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/fetch/ResourceLoaderOptions.h ('k') | Source/wtf/text/TextPosition.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « Source/core/fetch/ResourceLoaderOptions.h ('k') | Source/wtf/text/TextPosition.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698