73e33bc876
* chore: bump chromium in DEPS to 119.0.5994.0 * chore: update patches * Add some more debugging for navigation origin & process lock mismatch https://chromium-review.googlesource.com/c/chromium/src/+/4829483 * chore: bump chromium in DEPS to 119.0.5996.2 * chore: bump chromium in DEPS to 119.0.5997.0 * chore: bump chromium in DEPS to 119.0.6000.0 * chore: bump chromium in DEPS to 119.0.6002.0 * 4781766: Port remaining control color ids to the color pipeline https://chromium-review.googlesource.com/c/chromium/src/+/4781766 * 4846057: Preloading: Move prefetch_prefs to chrome/browser/preloading/ https://chromium-review.googlesource.com/c/chromium/src/+/4846057 * chore: fixup patch indices * 4848108: Pass v8::Isolate into FromV8Value calls on blink API https://chromium-review.googlesource.com/c/chromium/src/+/4848108 * 4834471: Reland "[api] allow v8::Data as internal field" https://chromium-review.googlesource.com/c/v8/v8/+/4834471 * 4808884: Major overhaul of ExceptionState in the v8 bindings https://chromium-review.googlesource.com/c/chromium/src/+/4808884 * 4791643: [sandbox] Add a TRUSTED_SPACE and TRUSTED_LO_SPACE to the V8 heap https://chromium-review.googlesource.com/c/v8/v8/+/4791643 * chore: bump chromium in DEPS to 119.0.6005.0 * 4776268: [v8][etw] Enables filtering of ETW tracing by URL https://chromium-review.googlesource.com/c/chromium/src/+/4776268 * chore: fixup patch indices * 4673258: WebSQL: Disable WebSQL by default https://chromium-review.googlesource.com/c/chromium/src/+/4673258 * chore: bump chromium in DEPS to 119.0.6006.0 * chore: update patches * 4854732: Reland^2 "[iterator-helpers] Unship due to incompat" https://chromium-review.googlesource.com/c/v8/v8/+/4854732 * 4794133: [AWC] Add `display-state` CSS @media feature https://chromium-review.googlesource.com/c/chromium/src/+/4794133 * fixup! Add some more debugging for navigation origin & process lock mismatch * Revert "fixup! Add some more debugging for navigation origin & process lock mismatch" This reverts commit 38fef075fc5690f7db6d4bbcabbe877a1618a964. * 4858437: Revert "[iOS] Delete GN flags for mach absolute time ticks" https://chromium-review.googlesource.com/c/chromium/src/+/4858437 * refactor: fix_crash_loading_non-standard_schemes_in_iframes.patch (#39879) * chore: 4869108: handle absolute and relative gn imports in autoninja https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/4869108 * chore: set GOMA_DIR for autoninja * Revert "chore: 4869108: handle absolute and relative gn imports in autoninja" This reverts commit d94c7720bab96d1de25499383948da2cb8862d90. --------- Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com> Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org> Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com> Co-authored-by: Robo <hop2deep@gmail.com>
104 lines
3 KiB
C++
104 lines
3 KiB
C++
// Copyright (c) 2020 Samuel Maddock <sam@samuelmaddock.com>.
|
|
// Use of this source code is governed by the MIT license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#include "shell/common/gin_converters/frame_converter.h"
|
|
|
|
#include "content/public/browser/render_frame_host.h"
|
|
#include "content/public/browser/render_process_host.h"
|
|
#include "shell/browser/api/electron_api_web_frame_main.h"
|
|
#include "shell/common/gin_helper/accessor.h"
|
|
|
|
namespace gin {
|
|
|
|
namespace {
|
|
|
|
v8::Persistent<v8::ObjectTemplate> rfh_templ;
|
|
|
|
} // namespace
|
|
|
|
// static
|
|
v8::Local<v8::Value> Converter<content::RenderFrameHost*>::ToV8(
|
|
v8::Isolate* isolate,
|
|
content::RenderFrameHost* val) {
|
|
if (!val)
|
|
return v8::Null(isolate);
|
|
return electron::api::WebFrameMain::From(isolate, val).ToV8();
|
|
}
|
|
|
|
// static
|
|
bool Converter<content::RenderFrameHost*>::FromV8(
|
|
v8::Isolate* isolate,
|
|
v8::Local<v8::Value> val,
|
|
content::RenderFrameHost** out) {
|
|
electron::api::WebFrameMain* web_frame_main = nullptr;
|
|
if (!ConvertFromV8(isolate, val, &web_frame_main))
|
|
return false;
|
|
*out = web_frame_main->render_frame_host();
|
|
|
|
return true;
|
|
}
|
|
|
|
// static
|
|
v8::Local<v8::Value>
|
|
Converter<gin_helper::AccessorValue<content::RenderFrameHost*>>::ToV8(
|
|
v8::Isolate* isolate,
|
|
gin_helper::AccessorValue<content::RenderFrameHost*> val) {
|
|
content::RenderFrameHost* rfh = val.Value;
|
|
if (!rfh)
|
|
return v8::Null(isolate);
|
|
|
|
const int process_id = rfh->GetProcess()->GetID();
|
|
const int routing_id = rfh->GetRoutingID();
|
|
|
|
if (rfh_templ.IsEmpty()) {
|
|
v8::EscapableHandleScope inner(isolate);
|
|
v8::Local<v8::ObjectTemplate> local = v8::ObjectTemplate::New(isolate);
|
|
local->SetInternalFieldCount(2);
|
|
rfh_templ.Reset(isolate, inner.Escape(local));
|
|
}
|
|
|
|
v8::Local<v8::Object> rfh_obj =
|
|
v8::Local<v8::ObjectTemplate>::New(isolate, rfh_templ)
|
|
->NewInstance(isolate->GetCurrentContext())
|
|
.ToLocalChecked();
|
|
|
|
rfh_obj->SetInternalField(0, v8::Number::New(isolate, process_id));
|
|
rfh_obj->SetInternalField(1, v8::Number::New(isolate, routing_id));
|
|
|
|
return rfh_obj;
|
|
}
|
|
|
|
// static
|
|
bool Converter<gin_helper::AccessorValue<content::RenderFrameHost*>>::FromV8(
|
|
v8::Isolate* isolate,
|
|
v8::Local<v8::Value> val,
|
|
gin_helper::AccessorValue<content::RenderFrameHost*>* out) {
|
|
v8::Local<v8::Object> rfh_obj;
|
|
if (!ConvertFromV8(isolate, val, &rfh_obj))
|
|
return false;
|
|
|
|
if (rfh_obj->InternalFieldCount() != 2)
|
|
return false;
|
|
|
|
v8::Local<v8::Value> process_id_wrapper =
|
|
rfh_obj->GetInternalField(0).As<v8::Value>();
|
|
v8::Local<v8::Value> routing_id_wrapper =
|
|
rfh_obj->GetInternalField(1).As<v8::Value>();
|
|
|
|
if (process_id_wrapper.IsEmpty() || !process_id_wrapper->IsNumber() ||
|
|
routing_id_wrapper.IsEmpty() || !routing_id_wrapper->IsNumber())
|
|
return false;
|
|
|
|
const int process_id = process_id_wrapper.As<v8::Number>()->Value();
|
|
const int routing_id = routing_id_wrapper.As<v8::Number>()->Value();
|
|
|
|
auto* rfh = content::RenderFrameHost::FromID(process_id, routing_id);
|
|
if (!rfh)
|
|
return false;
|
|
|
|
out->Value = rfh;
|
|
return true;
|
|
}
|
|
|
|
} // namespace gin
|