| // Copyright 2019 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_FILESYSTEM_ASYNC_CALLBACK_HELPER_H_ |
| #define THIRD_PARTY_BLINK_RENDERER_MODULES_FILESYSTEM_ASYNC_CALLBACK_HELPER_H_ |
| |
| #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h" |
| #include "third_party/blink/renderer/core/dom/dom_exception.h" |
| #include "third_party/blink/renderer/core/execution_context/execution_context.h" |
| #include "third_party/blink/renderer/core/fileapi/file_error.h" |
| #include "third_party/blink/renderer/modules/filesystem/directory_entry.h" |
| #include "third_party/blink/renderer/modules/filesystem/dom_file_system.h" |
| #include "third_party/blink/renderer/modules/filesystem/entry.h" |
| #include "third_party/blink/renderer/platform/bindings/script_state.h" |
| #include "third_party/blink/renderer/platform/heap/handle.h" |
| #include "third_party/blink/renderer/platform/wtf/functional.h" |
| |
| namespace blink { |
| |
| class AsyncCallbackHelper { |
| STATIC_ONLY(AsyncCallbackHelper); |
| |
| public: |
| template <typename CallbackParam, typename V8Callback> |
| static base::OnceCallback<void(CallbackParam*)> SuccessCallback( |
| V8Callback* success_callback) { |
| if (!success_callback) |
| return base::OnceCallback<void(CallbackParam*)>(); |
| |
| auto success_callback_wrapper = WTF::Bind( |
| [](V8Callback* persistent_callback, CallbackParam* param) { |
| persistent_callback->InvokeAndReportException(nullptr, param); |
| }, |
| WrapPersistent(success_callback)); |
| return success_callback_wrapper; |
| } |
| |
| static base::OnceCallback<void(base::File::Error)> ErrorCallback( |
| V8ErrorCallback* error_callback) { |
| if (!error_callback) |
| return base::OnceCallback<void(base::File::Error)>(); |
| |
| return WTF::Bind( |
| [](V8ErrorCallback* persistent_callback, base::File::Error error) { |
| persistent_callback->InvokeAndReportException( |
| nullptr, file_error::CreateDOMException(error)); |
| }, |
| WrapPersistent(error_callback)); |
| } |
| |
| // The method below is not templatized, to be used exclusively for |
| // VoidCallbacks. |
| static base::OnceCallback<void()> VoidSuccessCallback( |
| V8VoidCallback* success_callback) { |
| if (!success_callback) |
| return VoidCallbacks::SuccessCallback(); |
| |
| auto success_callback_wrapper = WTF::Bind( |
| [](V8VoidCallback* persistent_callback) { |
| persistent_callback->InvokeAndReportException(nullptr); |
| }, |
| WrapPersistent(success_callback)); |
| return success_callback_wrapper; |
| } |
| }; |
| |
| } // namespace blink |
| |
| #endif // THIRD_PARTY_BLINK_RENDERER_MODULES_FILESYSTEM_ASYNC_CALLBACK_HELPER_H_ |