OLD | NEW |
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 "components/webcrypto/webcrypto_impl.h" | 5 #include "components/webcrypto/webcrypto_impl.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/lazy_instance.h" | 8 #include "base/lazy_instance.h" |
9 #include "base/location.h" | 9 #include "base/location.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
11 #include "base/memory/scoped_ptr.h" | 11 #include "base/memory/scoped_ptr.h" |
12 #include "base/single_thread_task_runner.h" | 12 #include "base/single_thread_task_runner.h" |
13 #include "base/stl_util.h" | |
14 #include "base/task_runner.h" | 13 #include "base/task_runner.h" |
15 #include "base/thread_task_runner_handle.h" | 14 #include "base/thread_task_runner_handle.h" |
16 #include "base/threading/sequenced_worker_pool.h" | 15 #include "base/threading/sequenced_worker_pool.h" |
17 #include "base/threading/worker_pool.h" | 16 #include "base/threading/worker_pool.h" |
18 #include "components/webcrypto/algorithm_dispatch.h" | 17 #include "components/webcrypto/algorithm_dispatch.h" |
19 #include "components/webcrypto/crypto_data.h" | 18 #include "components/webcrypto/crypto_data.h" |
20 #include "components/webcrypto/generate_key_result.h" | 19 #include "components/webcrypto/generate_key_result.h" |
21 #include "components/webcrypto/status.h" | 20 #include "components/webcrypto/status.h" |
22 #include "third_party/WebKit/public/platform/WebCryptoKeyAlgorithm.h" | 21 #include "third_party/WebKit/public/platform/WebCryptoKeyAlgorithm.h" |
23 #include "third_party/WebKit/public/platform/WebString.h" | 22 #include "third_party/WebKit/public/platform/WebString.h" |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
111 const std::vector<uint8_t>& buffer, | 110 const std::vector<uint8_t>& buffer, |
112 blink::WebCryptoResult* result) { | 111 blink::WebCryptoResult* result) { |
113 if (status.IsError()) { | 112 if (status.IsError()) { |
114 CompleteWithError(status, result); | 113 CompleteWithError(status, result); |
115 } else { | 114 } else { |
116 if (buffer.size() > UINT_MAX) { | 115 if (buffer.size() > UINT_MAX) { |
117 // WebArrayBuffers have a smaller range than std::vector<>, so | 116 // WebArrayBuffers have a smaller range than std::vector<>, so |
118 // theoretically this could overflow. | 117 // theoretically this could overflow. |
119 CompleteWithError(Status::ErrorUnexpected(), result); | 118 CompleteWithError(Status::ErrorUnexpected(), result); |
120 } else { | 119 } else { |
121 result->completeWithBuffer(vector_as_array(&buffer), | 120 result->completeWithBuffer(buffer.data(), |
122 static_cast<unsigned int>(buffer.size())); | 121 static_cast<unsigned int>(buffer.size())); |
123 } | 122 } |
124 } | 123 } |
125 } | 124 } |
126 | 125 |
127 void CompleteWithKeyOrError(const Status& status, | 126 void CompleteWithKeyOrError(const Status& status, |
128 const blink::WebCryptoKey& key, | 127 const blink::WebCryptoKey& key, |
129 blink::WebCryptoResult* result) { | 128 blink::WebCryptoResult* result) { |
130 if (status.IsError()) { | 129 if (status.IsError()) { |
131 CompleteWithError(status, result); | 130 CompleteWithError(status, result); |
(...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
460 void DoExportKeyReply(scoped_ptr<ExportKeyState> state) { | 459 void DoExportKeyReply(scoped_ptr<ExportKeyState> state) { |
461 if (state->format != blink::WebCryptoKeyFormatJwk) { | 460 if (state->format != blink::WebCryptoKeyFormatJwk) { |
462 CompleteWithBufferOrError(state->status, state->buffer, &state->result); | 461 CompleteWithBufferOrError(state->status, state->buffer, &state->result); |
463 return; | 462 return; |
464 } | 463 } |
465 | 464 |
466 if (state->status.IsError()) { | 465 if (state->status.IsError()) { |
467 CompleteWithError(state->status, &state->result); | 466 CompleteWithError(state->status, &state->result); |
468 } else { | 467 } else { |
469 state->result.completeWithJson( | 468 state->result.completeWithJson( |
470 reinterpret_cast<const char*>(vector_as_array(&state->buffer)), | 469 reinterpret_cast<const char*>(state->buffer.data()), |
471 static_cast<unsigned int>(state->buffer.size())); | 470 static_cast<unsigned int>(state->buffer.size())); |
472 } | 471 } |
473 } | 472 } |
474 | 473 |
475 void DoExportKey(scoped_ptr<ExportKeyState> passed_state) { | 474 void DoExportKey(scoped_ptr<ExportKeyState> passed_state) { |
476 ExportKeyState* state = passed_state.get(); | 475 ExportKeyState* state = passed_state.get(); |
477 if (state->cancelled()) | 476 if (state->cancelled()) |
478 return; | 477 return; |
479 state->status = | 478 state->status = |
480 webcrypto::ExportKey(state->format, state->key, &state->buffer); | 479 webcrypto::ExportKey(state->format, state->key, &state->buffer); |
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
782 webcrypto::CryptoData(key_data, key_data_size), &key); | 781 webcrypto::CryptoData(key_data, key_data_size), &key); |
783 } | 782 } |
784 | 783 |
785 bool WebCryptoImpl::serializeKeyForClone( | 784 bool WebCryptoImpl::serializeKeyForClone( |
786 const blink::WebCryptoKey& key, | 785 const blink::WebCryptoKey& key, |
787 blink::WebVector<unsigned char>& key_data) { | 786 blink::WebVector<unsigned char>& key_data) { |
788 return webcrypto::SerializeKeyForClone(key, &key_data); | 787 return webcrypto::SerializeKeyForClone(key, &key_data); |
789 } | 788 } |
790 | 789 |
791 } // namespace webcrypto | 790 } // namespace webcrypto |
OLD | NEW |