feat: add 'dom-ready' event to WebFrameMain (#29290)

This commit is contained in:
Samuel Maddock 2021-09-01 18:21:15 -04:00 committed by GitHub
parent 49e62f1261
commit 4d89174b41
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 261 additions and 11 deletions

View file

@ -0,0 +1,27 @@
// Copyright (c) 2021 Samuel Maddock <sam@samuelmaddock.com>.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#ifndef SHELL_COMMON_GIN_HELPER_ACCESSOR_H_
#define SHELL_COMMON_GIN_HELPER_ACCESSOR_H_
namespace gin_helper {
// Wrapper for a generic value to be used as an accessor in a
// gin_helper::Dictionary.
template <typename T>
struct AccessorValue {
T Value;
};
template <typename T>
struct AccessorValue<const T&> {
T Value;
};
template <typename T>
struct AccessorValue<const T*> {
T* Value;
};
} // namespace gin_helper
#endif // SHELL_COMMON_GIN_HELPER_ACCESSOR_H_

View file

@ -10,6 +10,7 @@
#include "gin/dictionary.h"
#include "shell/common/gin_converters/std_converter.h"
#include "shell/common/gin_helper/accessor.h"
#include "shell/common/gin_helper/function_template.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
@ -109,6 +110,36 @@ class Dictionary : public gin::Dictionary {
.ToChecked();
}
template <typename K, typename V>
bool SetGetter(const K& key, const V& val) {
AccessorValue<V> acc_value;
acc_value.Value = val;
v8::Local<v8::Value> v8_value_accessor;
if (!gin::TryConvertToV8(isolate(), acc_value, &v8_value_accessor))
return false;
auto context = isolate()->GetCurrentContext();
return GetHandle()
->SetAccessor(
context, gin::StringToV8(isolate(), key),
[](v8::Local<v8::Name> property_name,
const v8::PropertyCallbackInfo<v8::Value>& info) {
AccessorValue<V> acc_value;
if (!gin::ConvertFromV8(info.GetIsolate(), info.Data(),
&acc_value))
return;
V val = acc_value.Value;
v8::Local<v8::Value> v8_value;
if (gin::TryConvertToV8(info.GetIsolate(), val, &v8_value))
info.GetReturnValue().Set(v8_value);
},
NULL, v8_value_accessor)
.ToChecked();
}
template <typename T>
bool SetReadOnly(base::StringPiece key, const T& val) {
v8::Local<v8::Value> v8_value;