| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 174 else | 174 else |
| 175 m_resolver->reject(DOMException::create(ec, errorDetails)); | 175 m_resolver->reject(DOMException::create(ec, errorDetails)); |
| 176 clearResolver(); | 176 clearResolver(); |
| 177 } | 177 } |
| 178 | 178 |
| 179 void CryptoResultImpl::completeWithBuffer(const void* bytes, unsigned bytesSize) | 179 void CryptoResultImpl::completeWithBuffer(const void* bytes, unsigned bytesSize) |
| 180 { | 180 { |
| 181 if (!m_resolver) | 181 if (!m_resolver) |
| 182 return; | 182 return; |
| 183 | 183 |
| 184 m_resolver->resolve(DOMArrayBuffer::create(bytes, bytesSize)); | 184 RefPtr<DOMArrayBuffer> buffer = DOMArrayBuffer::createOrNull(bytes, bytesSiz
e); |
| 185 if (!buffer) { |
| 186 // The specs for all crypto methods that use this code state: "If the |
| 187 // following steps or referenced procedures say to throw an error, |
| 188 // reject promise with the returned error and then terminate the algorit
hm." |
| 189 // In this case, the procedure of allocating an ArrayBuffer is not expli
citly |
| 190 // referenced in the algorithms laid out in the spec, but it is implied, |
| 191 // and the ECMAScript spec says that failure to allocate the buffer shou
ld |
| 192 // result in a RangeError being thrown. |
| 193 // http://ecma-international.org/ecma-262/6.0/#sec-createbytedatablock |
| 194 m_resolver->reject(DOMException::create(V8RangeError, "Out of memory. Co
uld not allocate buffer.")); |
| 195 } else { |
| 196 m_resolver->resolve(buffer); |
| 197 } |
| 185 clearResolver(); | 198 clearResolver(); |
| 186 } | 199 } |
| 187 | 200 |
| 188 void CryptoResultImpl::completeWithJson(const char* utf8Data, unsigned length) | 201 void CryptoResultImpl::completeWithJson(const char* utf8Data, unsigned length) |
| 189 { | 202 { |
| 190 if (!m_resolver) | 203 if (!m_resolver) |
| 191 return; | 204 return; |
| 192 | 205 |
| 193 ScriptState* scriptState = m_resolver->scriptState(); | 206 ScriptState* scriptState = m_resolver->scriptState(); |
| 194 ScriptState::Scope scope(scriptState); | 207 ScriptState::Scope scope(scriptState); |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 246 m_cancel.clear(); | 259 m_cancel.clear(); |
| 247 clearResolver(); | 260 clearResolver(); |
| 248 } | 261 } |
| 249 | 262 |
| 250 ScriptPromise CryptoResultImpl::promise() | 263 ScriptPromise CryptoResultImpl::promise() |
| 251 { | 264 { |
| 252 return m_resolver ? m_resolver->promise() : ScriptPromise(); | 265 return m_resolver ? m_resolver->promise() : ScriptPromise(); |
| 253 } | 266 } |
| 254 | 267 |
| 255 } // namespace blink | 268 } // namespace blink |
| OLD | NEW |