File: ResourceLoaderOptionsTest.cpp

package info (click to toggle)
chromium-browser 57.0.2987.98-1~deb8u1
  • links: PTS, VCS
  • area: main
  • in suites: jessie
  • size: 2,637,852 kB
  • ctags: 2,544,394
  • sloc: cpp: 12,815,961; ansic: 3,676,222; python: 1,147,112; asm: 526,608; java: 523,212; xml: 286,794; perl: 92,654; sh: 86,408; objc: 73,271; makefile: 27,698; cs: 18,487; yacc: 13,031; tcl: 12,957; pascal: 4,875; ml: 4,716; lex: 3,904; sql: 3,862; ruby: 1,982; lisp: 1,508; php: 1,368; exp: 404; awk: 325; csh: 117; jsp: 39; sed: 37
file content (110 lines) | stat: -rw-r--r-- 5,419 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
// 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.

#include "core/fetch/ResourceLoaderOptions.h"

#include "testing/gtest/include/gtest/gtest.h"
#include <type_traits>

namespace blink {

namespace {

TEST(ResourceLoaderOptionsTest, DeepCopy) {
  // Check that the fields of ResourceLoaderOptions are enums, except for
  // initiatorInfo and securityOrigin.
  static_assert(std::is_enum<DataBufferingPolicy>::value,
                "DataBufferingPolicy should be an enum");
  static_assert(std::is_enum<StoredCredentials>::value,
                "StoredCredentials should be an enum");
  static_assert(std::is_enum<CredentialRequest>::value,
                "CredentialRequest should be an enum");
  static_assert(std::is_enum<ContentSecurityPolicyDisposition>::value,
                "ContentSecurityPolicyDisposition should be an enum");
  static_assert(std::is_enum<RequestInitiatorContext>::value,
                "RequestInitiatorContext should be an enum");
  static_assert(std::is_enum<SynchronousPolicy>::value,
                "SynchronousPolicy should be an enum");
  static_assert(std::is_enum<CORSEnabled>::value,
                "CORSEnabled should be an 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.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.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