2019-10-18 00:31:29 +00:00
|
|
|
// 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.chromium file.
|
|
|
|
|
2021-11-22 07:34:31 +00:00
|
|
|
#ifndef ELECTRON_SHELL_COMMON_GIN_HELPER_ARGUMENTS_H_
|
|
|
|
#define ELECTRON_SHELL_COMMON_GIN_HELPER_ARGUMENTS_H_
|
2019-10-18 00:31:29 +00:00
|
|
|
|
2019-10-21 07:05:40 +00:00
|
|
|
#include "gin/arguments.h"
|
|
|
|
|
2019-10-18 00:31:29 +00:00
|
|
|
namespace gin_helper {
|
|
|
|
|
|
|
|
// Provides additional APIs to the gin::Arguments class.
|
|
|
|
class Arguments : public gin::Arguments {
|
|
|
|
public:
|
|
|
|
// Get the next argument, if conversion to T fails then state is unchanged.
|
|
|
|
//
|
|
|
|
// This is difference from gin::Arguments::GetNext which always advances the
|
|
|
|
// |next_| counter no matter whether the conversion succeeds.
|
|
|
|
template <typename T>
|
|
|
|
bool GetNext(T* out) {
|
|
|
|
v8::Local<v8::Value> val = PeekNext();
|
|
|
|
if (val.IsEmpty())
|
|
|
|
return false;
|
|
|
|
if (!gin::ConvertFromV8(isolate(), val, out))
|
|
|
|
return false;
|
|
|
|
Skip();
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2019-10-21 07:05:40 +00:00
|
|
|
// Gin always returns true when converting V8 value to boolean, we do not want
|
|
|
|
// this behavior when parsing parameters.
|
|
|
|
bool GetNext(bool* out) {
|
|
|
|
v8::Local<v8::Value> val = PeekNext();
|
|
|
|
if (val.IsEmpty() || !val->IsBoolean())
|
|
|
|
return false;
|
|
|
|
*out = val->BooleanValue(isolate());
|
|
|
|
Skip();
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Throw error with custom error message.
|
|
|
|
void ThrowError() const;
|
|
|
|
void ThrowError(base::StringPiece message) const;
|
|
|
|
|
2019-10-18 00:31:29 +00:00
|
|
|
private:
|
|
|
|
// MUST NOT ADD ANY DATA MEMBER.
|
|
|
|
};
|
|
|
|
|
|
|
|
} // namespace gin_helper
|
|
|
|
|
2021-11-22 07:34:31 +00:00
|
|
|
#endif // ELECTRON_SHELL_COMMON_GIN_HELPER_ARGUMENTS_H_
|