electron/shell/common/gin_helper/arguments.h
Cheng Zhao eb0e55c514
chore: remove native_mate (Part 9) (#20645)
* refactor: remove a few uses of native_mate/gfx_converter.h

* refactor: deprecate mate::EventEmitter

* refactor: add gin_helper::EventEmitter

* refactor: convert a few classes to use gin_helper::EventEmitter

* refactor: get rid of native_mate_converters/gfx_converter.h

* fix: follow native_mate on reporting errors

* fix: gin is weak at guessing parameter types

* fix: incorrect full class name

* fix: gin::Handle does not accept null
2019-10-21 16:05:40 +09:00

51 lines
1.4 KiB
C++

// 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.
#ifndef SHELL_COMMON_GIN_HELPER_ARGUMENTS_H_
#define SHELL_COMMON_GIN_HELPER_ARGUMENTS_H_
#include "gin/arguments.h"
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;
}
// 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;
private:
// MUST NOT ADD ANY DATA MEMBER.
};
} // namespace gin_helper
#endif // SHELL_COMMON_GIN_HELPER_ARGUMENTS_H_