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

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

Issue 236673003: [WebCrypto] Use ScriptPromiseResolverWithContext. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 8 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 ScriptPromiseResolverWithContext_h 5 #ifndef ScriptPromiseResolverWithContext_h
6 #define ScriptPromiseResolverWithContext_h 6 #define ScriptPromiseResolverWithContext_h
7 7
8 #include "bindings/v8/NewScriptState.h" 8 #include "bindings/v8/NewScriptState.h"
9 #include "bindings/v8/ScopedPersistent.h" 9 #include "bindings/v8/ScopedPersistent.h"
10 #include "bindings/v8/ScriptPromise.h" 10 #include "bindings/v8/ScriptPromise.h"
(...skipping 12 matching lines...) Expand all
23 // functionalities in addition to ScriptPromiseResolver's. 23 // functionalities in addition to ScriptPromiseResolver's.
24 // - A ScriptPromiseResolverWithContext retains a ScriptState. A caller 24 // - A ScriptPromiseResolverWithContext retains a ScriptState. A caller
25 // can call resolve or reject from outside of a V8 context. 25 // can call resolve or reject from outside of a V8 context.
26 // - This class is an ActiveDOMObject and keeps track of the associated 26 // - This class is an ActiveDOMObject and keeps track of the associated
27 // ExecutionContext state. When the ExecutionContext is suspended, 27 // ExecutionContext state. When the ExecutionContext is suspended,
28 // resolve or reject will be delayed. When it is stopped, resolve or reject 28 // resolve or reject will be delayed. When it is stopped, resolve or reject
29 // will be ignored. 29 // will be ignored.
30 class ScriptPromiseResolverWithContext FINAL : public ActiveDOMObject, public Re fCounted<ScriptPromiseResolverWithContext> { 30 class ScriptPromiseResolverWithContext FINAL : public ActiveDOMObject, public Re fCounted<ScriptPromiseResolverWithContext> {
31 WTF_MAKE_NONCOPYABLE(ScriptPromiseResolverWithContext); 31 WTF_MAKE_NONCOPYABLE(ScriptPromiseResolverWithContext);
32 32
33 class NullType {
34 };
35 class UndefinedType {
36 };
33 public: 37 public:
34 static PassRefPtr<ScriptPromiseResolverWithContext> create(NewScriptState* s criptState) 38 static PassRefPtr<ScriptPromiseResolverWithContext> create(NewScriptState* s criptState)
35 { 39 {
36 RefPtr<ScriptPromiseResolverWithContext> resolver = adoptRef(new ScriptP romiseResolverWithContext(scriptState)); 40 RefPtr<ScriptPromiseResolverWithContext> resolver = adoptRef(new ScriptP romiseResolverWithContext(scriptState));
37 resolver->suspendIfNeeded(); 41 resolver->suspendIfNeeded();
38 return resolver.release(); 42 return resolver.release();
39 } 43 }
40 44
45 // Anything that can be passed to one of toV8 functions defined in this
eroman 2014/04/17 02:25:46 "one of toV8" --> "one of the toV8"
46 // class can be passed to this function.
41 template <typename T> 47 template <typename T>
42 void resolve(T value) 48 void resolve(T value)
43 { 49 {
44 if (m_state != Pending || !executionContext() || executionContext()->act iveDOMObjectsAreStopped()) 50 if (m_state != Pending || !executionContext() || executionContext()->act iveDOMObjectsAreStopped())
45 return; 51 return;
46 m_state = Resolving; 52 m_state = Resolving;
47 NewScriptState::Scope scope(m_scriptState.get()); 53 NewScriptState::Scope scope(m_scriptState.get());
48 m_value.set(m_scriptState->isolate(), toV8(value)); 54 m_value.set(m_scriptState->isolate(), toV8(value));
49 if (!executionContext()->activeDOMObjectsAreSuspended()) 55 if (!executionContext()->activeDOMObjectsAreSuspended())
50 resolveOrRejectImmediately(&m_timer); 56 resolveOrRejectImmediately(&m_timer);
51 } 57 }
52 58
59 // Anything that can be passed to one of toV8 functions defined in this
eroman 2014/04/17 02:25:46 "one of toV8" --> "one of the toV8"
60 // class can be passed to this function.
53 template <typename T> 61 template <typename T>
54 void reject(T value) 62 void reject(T value)
55 { 63 {
56 if (m_state != Pending || !executionContext() || executionContext()->act iveDOMObjectsAreStopped()) 64 if (m_state != Pending || !executionContext() || executionContext()->act iveDOMObjectsAreStopped())
57 return; 65 return;
58 m_state = Rejecting; 66 m_state = Rejecting;
59 NewScriptState::Scope scope(m_scriptState.get()); 67 NewScriptState::Scope scope(m_scriptState.get());
60 m_value.set(m_scriptState->isolate(), toV8(value)); 68 m_value.set(m_scriptState->isolate(), toV8(value));
61 if (!executionContext()->activeDOMObjectsAreSuspended()) 69 if (!executionContext()->activeDOMObjectsAreSuspended())
62 resolveOrRejectImmediately(&m_timer); 70 resolveOrRejectImmediately(&m_timer);
63 } 71 }
64 72
73 // null and undefined can be passed to resolve and reject functions.
74 static NullType null() { return NullType(); }
75 static UndefinedType undefined() { return UndefinedType(); }
76 struct Boolean {
77 explicit Boolean(bool value) : value(value) { }
78 const bool value;
79 };
80
65 // Note that an empty ScriptPromise will be returned after resolve or 81 // Note that an empty ScriptPromise will be returned after resolve or
66 // reject is called. 82 // reject is called.
67 ScriptPromise promise() 83 ScriptPromise promise()
68 { 84 {
69 return m_resolver ? m_resolver->promise() : ScriptPromise(); 85 return m_resolver ? m_resolver->promise() : ScriptPromise();
70 } 86 }
71 87
72 // ActiveDOMObject implementation. 88 // ActiveDOMObject implementation.
73 virtual void suspend() OVERRIDE; 89 virtual void suspend() OVERRIDE;
74 virtual void resume() OVERRIDE; 90 virtual void resume() OVERRIDE;
(...skipping 21 matching lines...) Expand all
96 template <typename T, size_t inlineCapacity> 112 template <typename T, size_t inlineCapacity>
97 v8::Handle<v8::Value> toV8(const Vector<T, inlineCapacity>& value) 113 v8::Handle<v8::Value> toV8(const Vector<T, inlineCapacity>& value)
98 { 114 {
99 ASSERT(m_scriptState); 115 ASSERT(m_scriptState);
100 return v8ArrayNoInline(value, m_scriptState->isolate()); 116 return v8ArrayNoInline(value, m_scriptState->isolate());
101 } 117 }
102 v8::Handle<v8::Value> toV8(ScriptValue value) 118 v8::Handle<v8::Value> toV8(ScriptValue value)
103 { 119 {
104 return value.v8Value(); 120 return value.v8Value();
105 } 121 }
122 v8::Handle<v8::Value> toV8(v8::Handle<v8::Value> value) { return value; }
123 v8::Handle<v8::Value> toV8(NullType) { return v8::Null(m_scriptState->isolat e()); }
124 v8::Handle<v8::Value> toV8(UndefinedType) { return v8::Undefined(m_scriptSta te->isolate()); }
125 // We don't define toV8(bool) to avoid implicit conversion.
126 v8::Handle<v8::Value> toV8(Boolean value) { return v8::Boolean::New(m_script State->isolate(), value.value); }
127 v8::Handle<v8::Value> toV8(int8_t value) { return v8::Integer::New(m_scriptS tate->isolate(), value); }
128 v8::Handle<v8::Value> toV8(uint8_t value) { return v8::Integer::New(m_script State->isolate(), value); }
129 v8::Handle<v8::Value> toV8(int16_t value) { return v8::Integer::New(m_script State->isolate(), value); }
130 v8::Handle<v8::Value> toV8(uint16_t value) { return v8::Integer::New(m_scrip tState->isolate(), value); }
131 v8::Handle<v8::Value> toV8(int32_t value) { return v8::Integer::New(m_script State->isolate(), value); }
132 v8::Handle<v8::Value> toV8(uint32_t value) { return v8::Number::New(m_script State->isolate(), value); }
133 v8::Handle<v8::Value> toV8(int64_t value) { return v8::Number::New(m_scriptS tate->isolate(), value); }
134 v8::Handle<v8::Value> toV8(uint64_t value) { return v8::Number::New(m_script State->isolate(), value); }
135 v8::Handle<v8::Value> toV8(double value) { return v8::Number::New(m_scriptSt ate->isolate(), value); }
136 v8::Handle<v8::Value> toV8(const char* value)
137 {
138 return v8::String::NewFromUtf8(m_scriptState->isolate(), value, v8::Stri ng::kInternalizedString, strlen(value));
139 }
140 v8::Handle<v8::Value> toV8(const String& value)
141 {
142 return v8String(m_scriptState->isolate(), value);
143 }
106 144
107 void resolveOrRejectImmediately(Timer<ScriptPromiseResolverWithContext>*); 145 void resolveOrRejectImmediately(Timer<ScriptPromiseResolverWithContext>*);
108 void clear(); 146 void clear();
109 147
110 ResolutionState m_state; 148 ResolutionState m_state;
111 RefPtr<NewScriptState> m_scriptState; 149 RefPtr<NewScriptState> m_scriptState;
112 Timer<ScriptPromiseResolverWithContext> m_timer; 150 Timer<ScriptPromiseResolverWithContext> m_timer;
113 RefPtr<ScriptPromiseResolver> m_resolver; 151 RefPtr<ScriptPromiseResolver> m_resolver;
114 ScopedPersistent<v8::Value> m_value; 152 ScopedPersistent<v8::Value> m_value;
115 }; 153 };
116 154
117 } // namespace WebCore 155 } // namespace WebCore
118 156
119 #endif // #ifndef ScriptPromiseResolverWithContext_h 157 #endif // #ifndef ScriptPromiseResolverWithContext_h
OLDNEW
« no previous file with comments | « no previous file | Source/modules/crypto/CryptoResultImpl.h » ('j') | Source/modules/crypto/CryptoResultImpl.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698