#ifdef UNSAFE_BUFFERS_BUILD
#pragma allow_unsafe_buffers
#endif
#include "third_party/blink/renderer/core/frame/dom_window.h"
#include <algorithm>
#include <memory>
#include "base/metrics/histogram_macros.h"
#include "services/network/public/mojom/web_sandbox_flags.mojom-blink.h"
#include "third_party/blink/public/mojom/frame/frame.mojom-blink.h"
#include "third_party/blink/renderer/bindings/core/v8/capture_source_location.h"
#include "third_party/blink/renderer/bindings/core/v8/serialization/post_message_helper.h"
#include "third_party/blink/renderer/bindings/core/v8/to_v8_traits.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/bindings/core/v8/v8_window_post_message_options.h"
#include "third_party/blink/renderer/bindings/core/v8/window_proxy_manager.h"
#include "third_party/blink/renderer/core/dom/document.h"
#include "third_party/blink/renderer/core/event_target_names.h"
#include "third_party/blink/renderer/core/events/message_event.h"
#include "third_party/blink/renderer/core/execution_context/execution_context.h"
#include "third_party/blink/renderer/core/execution_context/security_context.h"
#include "third_party/blink/renderer/core/frame/coop_access_violation_report_body.h"
#include "third_party/blink/renderer/core/frame/csp/content_security_policy.h"
#include "third_party/blink/renderer/core/frame/frame.h"
#include "third_party/blink/renderer/core/frame/frame_client.h"
#include "third_party/blink/renderer/core/frame/frame_console.h"
#include "third_party/blink/renderer/core/frame/frame_owner.h"
#include "third_party/blink/renderer/core/frame/local_dom_window.h"
#include "third_party/blink/renderer/core/frame/location.h"
#include "third_party/blink/renderer/core/frame/picture_in_picture_controller.h"
#include "third_party/blink/renderer/core/frame/report.h"
#include "third_party/blink/renderer/core/frame/reporting_context.h"
#include "third_party/blink/renderer/core/frame/settings.h"
#include "third_party/blink/renderer/core/frame/user_activation.h"
#include "third_party/blink/renderer/core/input/input_device_capabilities.h"
#include "third_party/blink/renderer/core/inspector/console_message.h"
#include "third_party/blink/renderer/core/page/chrome_client.h"
#include "third_party/blink/renderer/core/page/focus_controller.h"
#include "third_party/blink/renderer/core/page/page.h"
#include "third_party/blink/renderer/core/probe/core_probes.h"
#include "third_party/blink/renderer/platform/bindings/source_location.h"
#include "third_party/blink/renderer/platform/bindings/v8_dom_wrapper.h"
#include "third_party/blink/renderer/platform/heap/garbage_collected.h"
#include "third_party/blink/renderer/platform/instrumentation/use_counter.h"
#include "third_party/blink/renderer/platform/weborigin/kurl.h"
#include "third_party/blink/renderer/platform/weborigin/security_origin.h"
namespace blink {
namespace {
String CoopReportOnlyErrorMessage(const String& property_name) { … }
}
DOMWindow::DOMWindow(Frame& frame)
: … { … }
DOMWindow::~DOMWindow() { … }
v8::Local<v8::Value> DOMWindow::Wrap(ScriptState* script_state) { … }
v8::Local<v8::Object> DOMWindow::AssociateWithWrapper(
v8::Isolate*,
const WrapperTypeInfo*,
v8::Local<v8::Object> wrapper) { … }
v8::Local<v8::Object> DOMWindow::AssociateWithWrapper(
v8::Isolate* isolate,
DOMWrapperWorld* world,
const WrapperTypeInfo* wrapper_type_info,
v8::Local<v8::Object> wrapper) { … }
const AtomicString& DOMWindow::InterfaceName() const { … }
const DOMWindow* DOMWindow::ToDOMWindow() const { … }
bool DOMWindow::IsWindowOrWorkerGlobalScope() const { … }
Location* DOMWindow::location() const { … }
bool DOMWindow::closed() const { … }
unsigned DOMWindow::length() const { … }
DOMWindow* DOMWindow::self() const { … }
DOMWindow* DOMWindow::window() const { … }
DOMWindow* DOMWindow::frames() const { … }
ScriptValue DOMWindow::openerForBindings(v8::Isolate* isolate) const { … }
DOMWindow* DOMWindow::opener() const { … }
void DOMWindow::setOpenerForBindings(v8::Isolate* isolate,
ScriptValue opener,
ExceptionState& exception_state) { … }
DOMWindow* DOMWindow::parent() const { … }
DOMWindow* DOMWindow::top() const { … }
void DOMWindow::postMessage(v8::Isolate* isolate,
const ScriptValue& message,
const String& target_origin,
HeapVector<ScriptValue>& transfer,
ExceptionState& exception_state) { … }
void DOMWindow::postMessage(v8::Isolate* isolate,
const ScriptValue& message,
const WindowPostMessageOptions* options,
ExceptionState& exception_state) { … }
DOMWindow* DOMWindow::AnonymousIndexedGetter(uint32_t index) { … }
bool DOMWindow::IsCurrentlyDisplayedInFrame() const { … }
String DOMWindow::SanitizedCrossDomainAccessErrorMessage(
const LocalDOMWindow* accessing_window,
CrossDocumentAccessPolicy cross_document_access) const { … }
String DOMWindow::CrossDomainAccessErrorMessage(
const LocalDOMWindow* accessing_window,
CrossDocumentAccessPolicy cross_document_access) const { … }
void DOMWindow::close(v8::Isolate* isolate) { … }
void DOMWindow::Close(LocalDOMWindow* incumbent_window) { … }
void DOMWindow::focus(v8::Isolate* isolate) { … }
void DOMWindow::blur() { … }
InputDeviceCapabilitiesConstants* DOMWindow::GetInputDeviceCapabilities() { … }
void DOMWindow::PostMessageForTesting(
scoped_refptr<SerializedScriptValue> message,
const MessagePortArray& ports,
const String& target_origin,
LocalDOMWindow* source,
ExceptionState& exception_state) { … }
void DOMWindow::InstallCoopAccessMonitor(
LocalFrame* accessing_frame,
network::mojom::blink::CrossOriginOpenerPolicyReporterParamsPtr
coop_reporter_params,
bool is_in_same_virtual_coop_related_group) { … }
void DOMWindow::ReportCoopAccess(const char* property_name) { … }
void DOMWindow::DoPostMessage(scoped_refptr<SerializedScriptValue> message,
const MessagePortArray& ports,
const WindowPostMessageOptions* options,
LocalDOMWindow* source,
ExceptionState& exception_state) { … }
void DOMWindow::RecordWindowProxyAccessMetrics(
WebFeature property_access,
WebFeature property_access_from_other_page,
mojom::blink::WindowProxyAccessType access_type) const { … }
bool DOMWindow::IsAccessBlockedByCoopRestrictProperties(
v8::Isolate* isolate) const { … }
void DOMWindow::PostedMessage::Trace(Visitor* visitor) const { … }
BlinkTransferableMessage
DOMWindow::PostedMessage::ToBlinkTransferableMessage() && { … }
void DOMWindow::Trace(Visitor* visitor) const { … }
void DOMWindow::DisconnectCoopAccessMonitor(
const LocalFrameToken& accessing_main_frame) { … }
}