All except `GetAsDictionary()`. Please use new shiny methods instead.
https://chromium.googlesource.com/chromium/src/+/master/base/values.h
atom/common/native_mate_converters/v8_value_converter.cc
v8::Local<v8::Value> val,
                                               v8::Isolate* isolate) const {
  FromV8ValueState::Level state_level(state);
  if (state->HasReachedMaxRecursionDepth())
    return nullptr;
  if (val->IsExternal())
    return std::make_unique<base::Value>().release();
  if (val->IsNull())
    return std::make_unique<base::Value>().release();
  auto context = isolate->GetCurrentContext();
  if (val->IsBoolean())
    return new base::Value(val->ToBoolean(context).ToLocalChecked()->Value());
  if (val->IsInt32())
    return new base::Value(val->ToInt32(context).ToLocalChecked()->Value());
  if (val->IsNumber()) {
    double val_as_double = val->ToNumber(context).ToLocalChecked()->Value();
    if (!std::isfinite(val_as_double))
      return nullptr;
    return new base::Value(val_as_double);
  }
  if (val->IsString()) {
    v8::String::Utf8Value utf8(val->ToString(context).ToLocalChecked());
    return new base::Value(std::string(*utf8, utf8.length()));
  }
  if (val->IsUndefined())