blob: 3d1cf4345d0cf56250f8439c9800f90f2d017a7f [file] [log] [blame]
// Copyright 2015 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 file.
#include "third_party/blink/renderer/bindings/core/v8/v8_page_popup_controller_binding.h"
#include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_core.h"
#include "third_party/blink/renderer/bindings/core/v8/v8_window.h"
#include "third_party/blink/renderer/core/dom/context_features.h"
#include "third_party/blink/renderer/core/dom/document.h"
#include "third_party/blink/renderer/core/execution_context/execution_context.h"
#include "third_party/blink/renderer/core/frame/local_dom_window.h"
#include "third_party/blink/renderer/core/page/page_popup_controller.h"
#include "third_party/blink/renderer/platform/instrumentation/tracing/trace_event.h"
namespace blink {
namespace {
void PagePopupControllerAttributeGetter(
const v8::PropertyCallbackInfo<v8::Value>& info) {
v8::Local<v8::Object> holder = info.Holder();
DOMWindow* impl = V8Window::ToImpl(holder);
PagePopupController* cpp_value = nullptr;
if (LocalFrame* frame = To<LocalDOMWindow>(impl)->GetFrame())
cpp_value = PagePopupController::From(*frame->GetPage());
V8SetReturnValue(info, ToV8(cpp_value, holder, info.GetIsolate()));
}
void PagePopupControllerAttributeGetterCallback(
v8::Local<v8::Name>,
const v8::PropertyCallbackInfo<v8::Value>& info) {
PagePopupControllerAttributeGetter(info);
}
} // namespace
void V8PagePopupControllerBinding::InstallPagePopupController(
v8::Local<v8::Context> context,
v8::Local<v8::Object> window_wrapper) {
Document* document =
ToLocalDOMWindow(window_wrapper->CreationContext())->document();
if (!document || !ContextFeatures::PagePopupEnabled(document))
return;
window_wrapper
->SetAccessor(
context, V8AtomicString(context->GetIsolate(), "pagePopupController"),
PagePopupControllerAttributeGetterCallback)
.ToChecked();
}
} // namespace blink