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

Side by Side Diff: third_party/WebKit/Source/bindings/core/v8/ScriptPromiseProperty.h

Issue 2478783002: Resolve FetchEvent.preloadResponse with undefined when Navigation Preload is disabled. (Closed)
Patch Set: ScriptPromiseProperty::resolveWithUndefined() Created 3 years, 11 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef ScriptPromiseProperty_h 5 #ifndef ScriptPromiseProperty_h
6 #define ScriptPromiseProperty_h 6 #define ScriptPromiseProperty_h
7 7
8 #include "bindings/core/v8/ScriptPromise.h" 8 #include "bindings/core/v8/ScriptPromise.h"
9 #include "bindings/core/v8/ScriptPromisePropertyBase.h" 9 #include "bindings/core/v8/ScriptPromisePropertyBase.h"
10 #include "bindings/core/v8/ToV8.h" 10 #include "bindings/core/v8/ToV8.h"
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
53 // ScriptPromiseProperty::Foo to create. The name must be unique 53 // ScriptPromiseProperty::Foo to create. The name must be unique
54 // per kind of holder. 54 // per kind of holder.
55 template <typename PassHolderType> 55 template <typename PassHolderType>
56 ScriptPromiseProperty(ExecutionContext*, PassHolderType, Name); 56 ScriptPromiseProperty(ExecutionContext*, PassHolderType, Name);
57 57
58 ~ScriptPromiseProperty() override {} 58 ~ScriptPromiseProperty() override {}
59 59
60 template <typename PassResolvedType> 60 template <typename PassResolvedType>
61 void resolve(PassResolvedType); 61 void resolve(PassResolvedType);
62 62
63 void resolveWithUndefined();
64
63 template <typename PassRejectedType> 65 template <typename PassRejectedType>
64 void reject(PassRejectedType); 66 void reject(PassRejectedType);
65 67
66 // Resets this property by unregistering the Promise property from the 68 // Resets this property by unregistering the Promise property from the
67 // holder wrapper. Resets the internal state to Pending and clears the 69 // holder wrapper. Resets the internal state to Pending and clears the
68 // resolved and the rejected values. 70 // resolved and the rejected values.
69 // This method keeps the holder object and the property name. 71 // This method keeps the holder object and the property name.
70 void reset(); 72 void reset();
71 73
72 DECLARE_VIRTUAL_TRACE(); 74 DECLARE_VIRTUAL_TRACE();
73 75
74 private: 76 private:
75 v8::Local<v8::Object> holder(v8::Isolate*, 77 v8::Local<v8::Object> holder(v8::Isolate*,
76 v8::Local<v8::Object> creationContext) override; 78 v8::Local<v8::Object> creationContext) override;
77 v8::Local<v8::Value> resolvedValue( 79 v8::Local<v8::Value> resolvedValue(
78 v8::Isolate*, 80 v8::Isolate*,
79 v8::Local<v8::Object> creationContext) override; 81 v8::Local<v8::Object> creationContext) override;
80 v8::Local<v8::Value> rejectedValue( 82 v8::Local<v8::Value> rejectedValue(
81 v8::Isolate*, 83 v8::Isolate*,
82 v8::Local<v8::Object> creationContext) override; 84 v8::Local<v8::Object> creationContext) override;
83 85
84 HolderType m_holder; 86 HolderType m_holder;
85 ResolvedType m_resolved; 87 ResolvedType m_resolved;
86 RejectedType m_rejected; 88 RejectedType m_rejected;
89 bool m_resolvedWithUndefined = false;
87 }; 90 };
88 91
89 template <typename HolderType, typename ResolvedType, typename RejectedType> 92 template <typename HolderType, typename ResolvedType, typename RejectedType>
90 template <typename PassHolderType> 93 template <typename PassHolderType>
91 ScriptPromiseProperty<HolderType, ResolvedType, RejectedType>:: 94 ScriptPromiseProperty<HolderType, ResolvedType, RejectedType>::
92 ScriptPromiseProperty(ExecutionContext* executionContext, 95 ScriptPromiseProperty(ExecutionContext* executionContext,
93 PassHolderType holder, 96 PassHolderType holder,
94 Name name) 97 Name name)
95 : ScriptPromisePropertyBase(executionContext, name), m_holder(holder) {} 98 : ScriptPromisePropertyBase(executionContext, name), m_holder(holder) {}
96 99
97 template <typename HolderType, typename ResolvedType, typename RejectedType> 100 template <typename HolderType, typename ResolvedType, typename RejectedType>
98 template <typename PassResolvedType> 101 template <typename PassResolvedType>
99 void ScriptPromiseProperty<HolderType, ResolvedType, RejectedType>::resolve( 102 void ScriptPromiseProperty<HolderType, ResolvedType, RejectedType>::resolve(
100 PassResolvedType value) { 103 PassResolvedType value) {
101 if (getState() != Pending) { 104 if (getState() != Pending) {
102 ASSERT_NOT_REACHED(); 105 NOTREACHED();
103 return; 106 return;
104 } 107 }
105 if (!getExecutionContext() || getExecutionContext()->isContextDestroyed()) 108 if (!getExecutionContext() || getExecutionContext()->isContextDestroyed())
106 return; 109 return;
107 m_resolved = value; 110 m_resolved = value;
108 resolveOrReject(Resolved); 111 resolveOrReject(Resolved);
109 } 112 }
110 113
111 template <typename HolderType, typename ResolvedType, typename RejectedType> 114 template <typename HolderType, typename ResolvedType, typename RejectedType>
115 void ScriptPromiseProperty<HolderType, ResolvedType, RejectedType>::
116 resolveWithUndefined() {
117 if (getState() != Pending) {
118 NOTREACHED();
119 return;
120 }
121 if (!getExecutionContext() || getExecutionContext()->isContextDestroyed())
122 return;
123 m_resolvedWithUndefined = true;
124 resolveOrReject(Resolved);
125 }
126
127 template <typename HolderType, typename ResolvedType, typename RejectedType>
112 template <typename PassRejectedType> 128 template <typename PassRejectedType>
113 void ScriptPromiseProperty<HolderType, ResolvedType, RejectedType>::reject( 129 void ScriptPromiseProperty<HolderType, ResolvedType, RejectedType>::reject(
114 PassRejectedType value) { 130 PassRejectedType value) {
115 if (getState() != Pending) { 131 if (getState() != Pending) {
116 ASSERT_NOT_REACHED(); 132 NOTREACHED();
117 return; 133 return;
118 } 134 }
119 if (!getExecutionContext() || getExecutionContext()->isContextDestroyed()) 135 if (!getExecutionContext() || getExecutionContext()->isContextDestroyed())
120 return; 136 return;
121 m_rejected = value; 137 m_rejected = value;
122 resolveOrReject(Rejected); 138 resolveOrReject(Rejected);
123 } 139 }
124 140
125 template <typename HolderType, typename ResolvedType, typename RejectedType> 141 template <typename HolderType, typename ResolvedType, typename RejectedType>
126 v8::Local<v8::Object> 142 v8::Local<v8::Object>
127 ScriptPromiseProperty<HolderType, ResolvedType, RejectedType>::holder( 143 ScriptPromiseProperty<HolderType, ResolvedType, RejectedType>::holder(
128 v8::Isolate* isolate, 144 v8::Isolate* isolate,
129 v8::Local<v8::Object> creationContext) { 145 v8::Local<v8::Object> creationContext) {
130 v8::Local<v8::Value> value = ToV8(m_holder, creationContext, isolate); 146 v8::Local<v8::Value> value = ToV8(m_holder, creationContext, isolate);
131 if (value.IsEmpty()) 147 if (value.IsEmpty())
132 return v8::Local<v8::Object>(); 148 return v8::Local<v8::Object>();
133 return value.As<v8::Object>(); 149 return value.As<v8::Object>();
134 } 150 }
135 151
136 template <typename HolderType, typename ResolvedType, typename RejectedType> 152 template <typename HolderType, typename ResolvedType, typename RejectedType>
137 v8::Local<v8::Value> 153 v8::Local<v8::Value>
138 ScriptPromiseProperty<HolderType, ResolvedType, RejectedType>::resolvedValue( 154 ScriptPromiseProperty<HolderType, ResolvedType, RejectedType>::resolvedValue(
139 v8::Isolate* isolate, 155 v8::Isolate* isolate,
140 v8::Local<v8::Object> creationContext) { 156 v8::Local<v8::Object> creationContext) {
141 ASSERT(getState() == Resolved); 157 ASSERT(getState() == Resolved);
142 return ToV8(m_resolved, creationContext, isolate); 158 if (!m_resolvedWithUndefined)
159 return ToV8(m_resolved, creationContext, isolate);
160 return v8::Undefined(isolate);
haraken 2017/01/05 07:56:24 Can we add DCHECK(m_resolved == ResolvedType()) ?
horo 2017/01/05 08:13:07 No we can't. In file included from ../../third_p
143 } 161 }
144 162
145 template <typename HolderType, typename ResolvedType, typename RejectedType> 163 template <typename HolderType, typename ResolvedType, typename RejectedType>
146 v8::Local<v8::Value> 164 v8::Local<v8::Value>
147 ScriptPromiseProperty<HolderType, ResolvedType, RejectedType>::rejectedValue( 165 ScriptPromiseProperty<HolderType, ResolvedType, RejectedType>::rejectedValue(
148 v8::Isolate* isolate, 166 v8::Isolate* isolate,
149 v8::Local<v8::Object> creationContext) { 167 v8::Local<v8::Object> creationContext) {
150 ASSERT(getState() == Rejected); 168 ASSERT(getState() == Rejected);
151 return ToV8(m_rejected, creationContext, isolate); 169 return ToV8(m_rejected, creationContext, isolate);
152 } 170 }
153 171
154 template <typename HolderType, typename ResolvedType, typename RejectedType> 172 template <typename HolderType, typename ResolvedType, typename RejectedType>
155 void ScriptPromiseProperty<HolderType, ResolvedType, RejectedType>::reset() { 173 void ScriptPromiseProperty<HolderType, ResolvedType, RejectedType>::reset() {
156 resetBase(); 174 resetBase();
157 m_resolved = ResolvedType(); 175 m_resolved = ResolvedType();
158 m_rejected = RejectedType(); 176 m_rejected = RejectedType();
177 m_resolvedWithUndefined = false;
159 } 178 }
160 179
161 template <typename HolderType, typename ResolvedType, typename RejectedType> 180 template <typename HolderType, typename ResolvedType, typename RejectedType>
162 void ScriptPromiseProperty<HolderType, ResolvedType, RejectedType>::trace( 181 void ScriptPromiseProperty<HolderType, ResolvedType, RejectedType>::trace(
163 Visitor* visitor) { 182 Visitor* visitor) {
164 traceImpl(visitor); 183 traceImpl(visitor);
165 } 184 }
166 template <typename HolderType, typename ResolvedType, typename RejectedType> 185 template <typename HolderType, typename ResolvedType, typename RejectedType>
167 void ScriptPromiseProperty<HolderType, ResolvedType, RejectedType>::trace( 186 void ScriptPromiseProperty<HolderType, ResolvedType, RejectedType>::trace(
168 InlinedGlobalMarkingVisitor visitor) { 187 InlinedGlobalMarkingVisitor visitor) {
169 traceImpl(visitor); 188 traceImpl(visitor);
170 } 189 }
171 190
172 template <typename HolderType, typename ResolvedType, typename RejectedType> 191 template <typename HolderType, typename ResolvedType, typename RejectedType>
173 template <typename VisitorDispatcher> 192 template <typename VisitorDispatcher>
174 void ScriptPromiseProperty<HolderType, ResolvedType, RejectedType>::traceImpl( 193 void ScriptPromiseProperty<HolderType, ResolvedType, RejectedType>::traceImpl(
175 VisitorDispatcher visitor) { 194 VisitorDispatcher visitor) {
176 TraceIfNeeded<HolderType>::trace(visitor, m_holder); 195 TraceIfNeeded<HolderType>::trace(visitor, m_holder);
177 TraceIfNeeded<ResolvedType>::trace(visitor, m_resolved); 196 TraceIfNeeded<ResolvedType>::trace(visitor, m_resolved);
178 TraceIfNeeded<RejectedType>::trace(visitor, m_rejected); 197 TraceIfNeeded<RejectedType>::trace(visitor, m_rejected);
179 ScriptPromisePropertyBase::trace(visitor); 198 ScriptPromisePropertyBase::trace(visitor);
180 } 199 }
181 200
182 } // namespace blink 201 } // namespace blink
183 202
184 #endif // ScriptPromiseProperty_h 203 #endif // ScriptPromiseProperty_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698