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

Side by Side Diff: Source/bindings/core/v8/ScriptPromisePropertyTest.cpp

Issue 367263004: Oilpan: fix build after r177450. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Move ScriptPromisePropertyBase to the heap Created 6 years, 5 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
« no previous file with comments | « Source/bindings/core/v8/ScriptPromisePropertyBase.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 #include "config.h" 5 #include "config.h"
6 #include "bindings/core/v8/ScriptPromiseProperty.h" 6 #include "bindings/core/v8/ScriptPromiseProperty.h"
7 7
8 #include "bindings/core/v8/DOMWrapperWorld.h" 8 #include "bindings/core/v8/DOMWrapperWorld.h"
9 #include "bindings/core/v8/ScriptFunction.h" 9 #include "bindings/core/v8/ScriptFunction.h"
10 #include "bindings/core/v8/ScriptPromise.h" 10 #include "bindings/core/v8/ScriptPromise.h"
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
86 86
87 void gc() { v8::Isolate::GetCurrent()->RequestGarbageCollectionForTesting(v8 ::Isolate::kFullGarbageCollection); } 87 void gc() { v8::Isolate::GetCurrent()->RequestGarbageCollectionForTesting(v8 ::Isolate::kFullGarbageCollection); }
88 88
89 PassOwnPtr<ScriptFunction> notReached() { return adoptPtr(new NotReached()); } 89 PassOwnPtr<ScriptFunction> notReached() { return adoptPtr(new NotReached()); }
90 PassOwnPtr<ScriptFunction> stub(ScriptValue& value, size_t& callCount) { ret urn adoptPtr(new StubFunction(value, callCount)); } 90 PassOwnPtr<ScriptFunction> stub(ScriptValue& value, size_t& callCount) { ret urn adoptPtr(new StubFunction(value, callCount)); }
91 91
92 // These tests use Event because it is simple to manufacture lots 92 // These tests use Event because it is simple to manufacture lots
93 // of events, and 'Ready' because it is an available property name 93 // of events, and 'Ready' because it is an available property name
94 // that won't bloat V8HiddenValue with a test property name. 94 // that won't bloat V8HiddenValue with a test property name.
95 95
96 ScriptValue wrap(PassRefPtr<Event> event) 96 ScriptValue wrap(PassRefPtrWillBeRawPtr<Event> event)
97 { 97 {
98 ScriptState::Scope scope(scriptState()); 98 ScriptState::Scope scope(scriptState());
99 return ScriptValue(scriptState(), V8ValueTraits<Event>::toV8Value(event, scriptState()->context()->Global(), isolate())); 99 return ScriptValue(scriptState(), V8ValueTraits<Event>::toV8Value(event, scriptState()->context()->Global(), isolate()));
100 } 100 }
101 101
102 typedef ScriptPromiseProperty<RefPtr<Event>, Event*, Event*> Property; 102 typedef ScriptPromiseProperty<RefPtrWillBeMember<Event>, Event*, Event*> Pro perty;
103 PassRefPtr<Property> newProperty() { return Property::create(&document(), Ev ent::create(), Property::Ready); } 103 PassRefPtrWillBeRawPtr<Property> newProperty() { return Property::create(&do cument(), Event::create(), Property::Ready); }
104 104
105 private: 105 private:
106 OwnPtr<DummyPageHolder> m_page; 106 OwnPtr<DummyPageHolder> m_page;
107 }; 107 };
108 108
109 TEST_F(ScriptPromisePropertyTest, Promise_IsStableObject) 109 TEST_F(ScriptPromisePropertyTest, Promise_IsStableObject)
110 { 110 {
111 RefPtr<Property> p(newProperty()); 111 RefPtr<Property> p(newProperty());
112 ScriptPromise v = p->promise(DOMWrapperWorld::mainWorld()); 112 ScriptPromise v = p->promise(DOMWrapperWorld::mainWorld());
113 ScriptPromise w = p->promise(DOMWrapperWorld::mainWorld()); 113 ScriptPromise w = p->promise(DOMWrapperWorld::mainWorld());
114 EXPECT_EQ(v, w); 114 EXPECT_EQ(v, w);
115 EXPECT_FALSE(v.isEmpty()); 115 EXPECT_FALSE(v.isEmpty());
116 EXPECT_EQ(Property::Pending, p->state()); 116 EXPECT_EQ(Property::Pending, p->state());
117 } 117 }
118 118
119 TEST_F(ScriptPromisePropertyTest, Promise_IsStableObjectAfterSettling) 119 TEST_F(ScriptPromisePropertyTest, Promise_IsStableObjectAfterSettling)
120 { 120 {
121 RefPtr<Property> p(newProperty()); 121 RefPtr<Property> p(newProperty());
122 ScriptPromise v = p->promise(DOMWrapperWorld::mainWorld()); 122 ScriptPromise v = p->promise(DOMWrapperWorld::mainWorld());
123 123
124 RefPtr<Event> value(Event::create()); 124 RefPtrWillBeRawPtr<Event> value(Event::create());
125 p->resolve(value.get()); 125 p->resolve(value.get());
126 EXPECT_EQ(Property::Resolved, p->state()); 126 EXPECT_EQ(Property::Resolved, p->state());
127 127
128 ScriptPromise w = p->promise(DOMWrapperWorld::mainWorld()); 128 ScriptPromise w = p->promise(DOMWrapperWorld::mainWorld());
129 EXPECT_EQ(v, w); 129 EXPECT_EQ(v, w);
130 EXPECT_FALSE(v.isEmpty()); 130 EXPECT_FALSE(v.isEmpty());
131 } 131 }
132 132
133 TEST_F(ScriptPromisePropertyTest, Promise_DoesNotImpedeGarbageCollection) 133 TEST_F(ScriptPromisePropertyTest, Promise_DoesNotImpedeGarbageCollection)
134 { 134 {
135 RefPtr<Event> holder(Event::create()); 135 RefPtrWillBePersistent<Event> holder(Event::create());
136 ScriptValue holderWrapper = wrap(holder); 136 ScriptValue holderWrapper = wrap(holder);
137 137
138 RefPtr<Property> p(Property::create(&document(), holder, Property::Ready)); 138 RefPtr<Property> p(Property::create(&document(), holder.get(), Property::Rea dy));
139 139
140 RefPtr<GCObservation> observation; 140 RefPtrWillBePersistent<GCObservation> observation;
141 { 141 {
142 ScriptState::Scope scope(scriptState()); 142 ScriptState::Scope scope(scriptState());
143 observation = GCObservation::create(p->promise(DOMWrapperWorld::mainWorl d()).v8Value()); 143 observation = GCObservation::create(p->promise(DOMWrapperWorld::mainWorl d()).v8Value());
144 } 144 }
145 145
146 gc(); 146 gc();
147 EXPECT_FALSE(observation->wasCollected()); 147 EXPECT_FALSE(observation->wasCollected());
148 148
149 holderWrapper.clear(); 149 holderWrapper.clear();
150 gc(); 150 gc();
151 EXPECT_TRUE(observation->wasCollected()); 151 EXPECT_TRUE(observation->wasCollected());
152 152
153 EXPECT_EQ(Property::Pending, p->state()); 153 EXPECT_EQ(Property::Pending, p->state());
154 } 154 }
155 155
156 TEST_F(ScriptPromisePropertyTest, Resolve_ResolvesScriptPromise) 156 TEST_F(ScriptPromisePropertyTest, Resolve_ResolvesScriptPromise)
157 { 157 {
158 RefPtr<Property> p(newProperty()); 158 RefPtr<Property> p(newProperty());
159 159
160 ScriptPromise promise = p->promise(DOMWrapperWorld::mainWorld()); 160 ScriptPromise promise = p->promise(DOMWrapperWorld::mainWorld());
161 ScriptValue value; 161 ScriptValue value;
162 size_t nResolveCalls = 0; 162 size_t nResolveCalls = 0;
163 163
164 { 164 {
165 ScriptState::Scope scope(scriptState()); 165 ScriptState::Scope scope(scriptState());
166 promise.then(stub(value, nResolveCalls), notReached()); 166 promise.then(stub(value, nResolveCalls), notReached());
167 } 167 }
168 168
169 RefPtr<Event> event(Event::create()); 169 RefPtrWillBeRawPtr<Event> event(Event::create());
170 p->resolve(event.get()); 170 p->resolve(event.get());
171 EXPECT_EQ(Property::Resolved, p->state()); 171 EXPECT_EQ(Property::Resolved, p->state());
172 172
173 isolate()->RunMicrotasks(); 173 isolate()->RunMicrotasks();
174 EXPECT_EQ(1u, nResolveCalls); 174 EXPECT_EQ(1u, nResolveCalls);
175 EXPECT_EQ(wrap(event), value); 175 EXPECT_EQ(wrap(event), value);
176 } 176 }
177 177
178 TEST_F(ScriptPromisePropertyTest, Reject_RejectsScriptPromise) 178 TEST_F(ScriptPromisePropertyTest, Reject_RejectsScriptPromise)
179 { 179 {
180 RefPtr<Property> p(newProperty()); 180 RefPtr<Property> p(newProperty());
181 181
182 RefPtr<Event> event(Event::create()); 182 RefPtrWillBeRawPtr<Event> event(Event::create());
183 p->reject(event.get()); 183 p->reject(event.get());
184 EXPECT_EQ(Property::Rejected, p->state()); 184 EXPECT_EQ(Property::Rejected, p->state());
185 185
186 ScriptValue value; 186 ScriptValue value;
187 size_t nRejectCalls = 0; 187 size_t nRejectCalls = 0;
188 188
189 { 189 {
190 ScriptState::Scope scope(scriptState()); 190 ScriptState::Scope scope(scriptState());
191 p->promise(DOMWrapperWorld::mainWorld()).then(notReached(), stub(value, nRejectCalls)); 191 p->promise(DOMWrapperWorld::mainWorld()).then(notReached(), stub(value, nRejectCalls));
192 } 192 }
193 193
194 isolate()->RunMicrotasks(); 194 isolate()->RunMicrotasks();
195 EXPECT_EQ(1u, nRejectCalls); 195 EXPECT_EQ(1u, nRejectCalls);
196 EXPECT_EQ(wrap(event), value); 196 EXPECT_EQ(wrap(event), value);
197 } 197 }
198 198
199 TEST_F(ScriptPromisePropertyTest, Promise_DeadContext) 199 TEST_F(ScriptPromisePropertyTest, Promise_DeadContext)
200 { 200 {
201 RefPtr<Property> p(newProperty()); 201 RefPtr<Property> p(newProperty());
202 202
203 RefPtr<Event> event(Event::create()); 203 RefPtrWillBeRawPtr<Event> event(Event::create());
204 p->resolve(event.get()); 204 p->resolve(event.get());
205 EXPECT_EQ(Property::Resolved, p->state()); 205 EXPECT_EQ(Property::Resolved, p->state());
206 206
207 destroyContext(); 207 destroyContext();
208 208
209 EXPECT_TRUE(p->promise(DOMWrapperWorld::mainWorld()).isEmpty()); 209 EXPECT_TRUE(p->promise(DOMWrapperWorld::mainWorld()).isEmpty());
210 } 210 }
211 211
212 TEST_F(ScriptPromisePropertyTest, Resolve_DeadContext) 212 TEST_F(ScriptPromisePropertyTest, Resolve_DeadContext)
213 { 213 {
214 RefPtr<Property> p(newProperty()); 214 RefPtr<Property> p(newProperty());
215 215
216 { 216 {
217 ScriptState::Scope scope(scriptState()); 217 ScriptState::Scope scope(scriptState());
218 p->promise(DOMWrapperWorld::mainWorld()).then(notReached(), notReached() ); 218 p->promise(DOMWrapperWorld::mainWorld()).then(notReached(), notReached() );
219 } 219 }
220 220
221 destroyContext(); 221 destroyContext();
222 222
223 RefPtr<Event> event(Event::create()); 223 RefPtrWillBeRawPtr<Event> event(Event::create());
224 p->resolve(event.get()); 224 p->resolve(event.get());
225 EXPECT_EQ(Property::Pending, p->state()); 225 EXPECT_EQ(Property::Pending, p->state());
226 226
227 v8::Isolate::GetCurrent()->RunMicrotasks(); 227 v8::Isolate::GetCurrent()->RunMicrotasks();
228 } 228 }
229 229
230 } // namespace 230 } // namespace
OLDNEW
« no previous file with comments | « Source/bindings/core/v8/ScriptPromisePropertyBase.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698