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

Side by Side Diff: Source/bindings/v8/ScriptPromiseResolverWithContext.h

Issue 344733004: Stop calling [de]ref in ScriptPromiseResolverWithContext destructor. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 6 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 | « no previous file | Source/bindings/v8/ScriptPromiseResolverWithContext.cpp » ('j') | 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 #ifndef ScriptPromiseResolverWithContext_h 5 #ifndef ScriptPromiseResolverWithContext_h
6 #define ScriptPromiseResolverWithContext_h 6 #define ScriptPromiseResolverWithContext_h
7 7
8 #include "bindings/v8/ScopedPersistent.h" 8 #include "bindings/v8/ScopedPersistent.h"
9 #include "bindings/v8/ScriptPromise.h" 9 #include "bindings/v8/ScriptPromise.h"
10 #include "bindings/v8/ScriptPromiseResolver.h" 10 #include "bindings/v8/ScriptPromiseResolver.h"
(...skipping 20 matching lines...) Expand all
31 WTF_MAKE_NONCOPYABLE(ScriptPromiseResolverWithContext); 31 WTF_MAKE_NONCOPYABLE(ScriptPromiseResolverWithContext);
32 32
33 public: 33 public:
34 static PassRefPtr<ScriptPromiseResolverWithContext> create(ScriptState* scri ptState) 34 static PassRefPtr<ScriptPromiseResolverWithContext> create(ScriptState* scri ptState)
35 { 35 {
36 RefPtr<ScriptPromiseResolverWithContext> resolver = adoptRef(new ScriptP romiseResolverWithContext(scriptState)); 36 RefPtr<ScriptPromiseResolverWithContext> resolver = adoptRef(new ScriptP romiseResolverWithContext(scriptState));
37 resolver->suspendIfNeeded(); 37 resolver->suspendIfNeeded();
38 return resolver.release(); 38 return resolver.release();
39 } 39 }
40 40
41 virtual ~ScriptPromiseResolverWithContext(); 41 virtual ~ScriptPromiseResolverWithContext()
42 {
43 // This assertion fails if:
44 // - promise() is called at least once and
45 // - this resolver is destructed before it is resolved, rejected or
46 // the associated ExecutionContext is stopped.
47 ASSERT(m_state == ResolvedOrRejected || !m_isPromiseCalled);
48 }
42 49
43 // Anything that can be passed to toV8Value can be passed to this function. 50 // Anything that can be passed to toV8Value can be passed to this function.
44 template <typename T> 51 template <typename T>
45 void resolve(T value) 52 void resolve(T value)
46 { 53 {
47 resolveOrReject(value, Resolving); 54 resolveOrReject(value, Resolving);
48 } 55 }
49 56
50 // Anything that can be passed to toV8Value can be passed to this function. 57 // Anything that can be passed to toV8Value can be passed to this function.
51 template <typename T> 58 template <typename T>
52 void reject(T value) 59 void reject(T value)
53 { 60 {
54 resolveOrReject(value, Rejecting); 61 resolveOrReject(value, Rejecting);
55 } 62 }
56 63
57 ScriptState* scriptState() { return m_scriptState.get(); } 64 ScriptState* scriptState() { return m_scriptState.get(); }
58 65
59 // Note that an empty ScriptPromise will be returned after resolve or 66 // Note that an empty ScriptPromise will be returned after resolve or
60 // reject is called. 67 // reject is called.
61 ScriptPromise promise() 68 ScriptPromise promise()
62 { 69 {
70 #if ASSERT_ENABLED
71 m_isPromiseCalled = true;
72 #endif
63 return m_resolver ? m_resolver->promise() : ScriptPromise(); 73 return m_resolver ? m_resolver->promise() : ScriptPromise();
64 } 74 }
65 75
66 ScriptState* scriptState() const { return m_scriptState.get(); } 76 ScriptState* scriptState() const { return m_scriptState.get(); }
67 77
68 // ActiveDOMObject implementation. 78 // ActiveDOMObject implementation.
69 virtual void suspend() OVERRIDE; 79 virtual void suspend() OVERRIDE;
70 virtual void resume() OVERRIDE; 80 virtual void resume() OVERRIDE;
71 virtual void stop() OVERRIDE; 81 virtual void stop() OVERRIDE;
72 82
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 void resolveOrRejectImmediately(); 127 void resolveOrRejectImmediately();
118 void onTimerFired(Timer<ScriptPromiseResolverWithContext>*); 128 void onTimerFired(Timer<ScriptPromiseResolverWithContext>*);
119 void clear(); 129 void clear();
120 130
121 ResolutionState m_state; 131 ResolutionState m_state;
122 const RefPtr<ScriptState> m_scriptState; 132 const RefPtr<ScriptState> m_scriptState;
123 LifetimeMode m_mode; 133 LifetimeMode m_mode;
124 Timer<ScriptPromiseResolverWithContext> m_timer; 134 Timer<ScriptPromiseResolverWithContext> m_timer;
125 RefPtr<ScriptPromiseResolver> m_resolver; 135 RefPtr<ScriptPromiseResolver> m_resolver;
126 ScopedPersistent<v8::Value> m_value; 136 ScopedPersistent<v8::Value> m_value;
137 #if ASSERT_ENABLED
138 // True if promise() is called.
139 bool m_isPromiseCalled;
140 #endif
127 }; 141 };
128 142
129 } // namespace WebCore 143 } // namespace WebCore
130 144
131 #endif // #ifndef ScriptPromiseResolverWithContext_h 145 #endif // #ifndef ScriptPromiseResolverWithContext_h
OLDNEW
« no previous file with comments | « no previous file | Source/bindings/v8/ScriptPromiseResolverWithContext.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698