Chromium 前端window对象c++实现定义

前端中window.document window.alert()等一些列方法和对象在c++对应定义如下:

1、window对象接口定义文件window.idl

third_party\blink\renderer\core\frame\window.idl


// https://html.spec.whatwg.org/C/#the-window-object// FIXME: explain all uses of [CrossOrigin]
// NOTE: In the spec, Window inherits from EventTarget. We inject an additional
// layer to implement window's named properties object.
[ImplementedAs=DOMWindow,Global=Window,Exposed=Window
] interface Window : WindowProperties {// the current browsing context// FIXME: The spec uses the WindowProxy type for this and many other attributes.[LegacyUnforgeable, CrossOrigin, CachedAccessor=kWindowProxy] readonly attribute Window window;[Replaceable, CrossOrigin, CachedAccessor=kWindowProxy] readonly attribute Window self;[LegacyUnforgeable, CachedAccessor=kWindowDocument] readonly attribute Document document;attribute DOMString name;[PutForwards=href, LegacyUnforgeable, CrossOrigin=(Getter,Setter)] readonly attribute Location location;[CallWith=ScriptState] readonly attribute CustomElementRegistry customElements;readonly attribute History history;[Replaceable] readonly attribute Navigation navigation;[Replaceable, MeasureAs=BarPropLocationbar] readonly attribute BarProp locationbar;[Replaceable, MeasureAs=BarPropMenubar] readonly attribute BarProp menubar;[Replaceable, MeasureAs=BarPropPersonalbar] readonly attribute BarProp personalbar;[Replaceable, MeasureAs=BarPropScrollbars] readonly attribute BarProp scrollbars;[Replaceable, MeasureAs=BarPropStatusbar] readonly attribute BarProp statusbar;[Replaceable, MeasureAs=BarPropToolbar] readonly attribute BarProp toolbar;attribute DOMString status;[CrossOrigin, CallWith=Isolate] void close();[MeasureAs=WindowClosed, CrossOrigin] readonly attribute boolean closed;void stop();[CrossOrigin, CallWith=Isolate] void focus();[CrossOrigin] void blur();// other browsing contexts[Replaceable, CrossOrigin, CachedAccessor=kWindowProxy] readonly attribute Window frames;[Replaceable, CrossOrigin] readonly attribute unsigned long length;[LegacyUnforgeable, CrossOrigin] readonly attribute Window? top;// FIXME: opener should be of type any.[CrossOrigin, ImplementedAs=openerForBindings, CallWith=Isolate, RaisesException=Setter] attribute any opener;[Replaceable, CrossOrigin] readonly attribute Window? parent;[CheckSecurity=ReturnValue] readonly attribute Element? frameElement;[CallWith=Isolate, RaisesException] Window? open(optional USVString url="", optional DOMString target = "_blank", optional [LegacyNullToEmptyString] DOMString features = "");// indexed properties// https://html.spec.whatwg.org/C/browsers.html#windowproxy-getownproperty[NotEnumerable, CrossOrigin] getter Window (unsigned long index);// named properties// The spec defines the named getter on the Window interface, but we inject// the named properties object as its own interface that Window inherits// from.// getter object (DOMString name);// the user agent[LogActivity=GetterOnly] readonly attribute Navigator navigator;[RuntimeEnabled=OriginIsolationHeader] readonly attribute boolean originAgentCluster;// user prompts[Measure, CallWith=ScriptState] void alert();[Measure, CallWith=ScriptState] void alert(DOMString message);[Measure, CallWith=ScriptState] boolean confirm(optional DOMString message = "");[Measure, CallWith=ScriptState] DOMString? prompt(optional DOMString message = "", optional DOMString defaultValue = "");[Measure, CallWith=ScriptState] void print();[CrossOrigin, CallWith=Isolate, RaisesException] void postMessage(any message, USVString targetOrigin, optional sequence<object> transfer = []);[CrossOrigin, CallWith=Isolate, RaisesException] void postMessage(any message, optional WindowPostMessageOptions options = {});// WindowOrWorkerGlobalScope mixin// https://html.spec.whatwg.org/C/#windoworworkerglobalscope-mixin// https://wicg.github.io/origin-policy/#monkeypatch-html-windoworworkerglobalscope[Replaceable] readonly attribute DOMString origin;void queueMicrotask(VoidFunction callback);// AnimationFrameProvider mixin// https://html.spec.whatwg.org/C/#animation-frames[MeasureAs=UnprefixedRequestAnimationFrame] long requestAnimationFrame(FrameRequestCallback callback);void cancelAnimationFrame(long handle);// HTML obsolete features// https://html.spec.whatwg.org/C/#Window-partial[MeasureAs=WindowCaptureEvents] void captureEvents();[MeasureAs=WindowReleaseEvents] void releaseEvents();[Replaceable, SameObject] readonly attribute External external;// CSS Object Model (CSSOM)// https://drafts.csswg.org/cssom/#extensions-to-the-window-interface[Affects=Nothing, NewObject] CSSStyleDeclaration getComputedStyle(Element elt, optional DOMString? pseudoElt);// CSSOM View Module// https://drafts.csswg.org/cssom-view/#extensions-to-the-window-interface[HighEntropy, Measure, NewObject] MediaQueryList matchMedia(DOMString query);[SameObject, Replaceable] readonly attribute Screen screen;// browsing context[MeasureAs=WindowMove] void moveTo(long x, long y);[MeasureAs=WindowMove] void moveBy(long x, long y);[MeasureAs=WindowResize, RaisesException] void resizeTo(long x, long y);[MeasureAs=WindowResize, RaisesException] void resizeBy(long x, long y);// viewport[HighEntropy=Direct, MeasureAs=WindowInnerWidth, Replaceable] readonly attribute long innerWidth;[HighEntropy=Direct, MeasureAs=WindowInnerHeight, Replaceable] readonly attribute long innerHeight;// viewport scrolling[HighEntropy=Direct, MeasureAs=WindowScrollX, Replaceable] readonly attribute double scrollX;[HighEntropy=Direct, MeasureAs=WindowPageXOffset, Replaceable] readonly attribute double pageXOffset;[HighEntropy=Direct, MeasureAs=WindowScrollY, Replaceable] readonly attribute double scrollY;[HighEntropy=Direct, MeasureAs=WindowPageYOffset, Replaceable] readonly attribute double pageYOffset;void scroll(optional ScrollToOptions options = {});void scroll(unrestricted double x, unrestricted double y);void scrollTo(optional ScrollToOptions options = {});void scrollTo(unrestricted double x, unrestricted double y);void scrollBy(optional ScrollToOptions options = {});void scrollBy(unrestricted double x, unrestricted double y);// Visual Viewport API// https://github.com/WICG/ViewportAPI[Replaceable, SameObject] readonly attribute VisualViewport visualViewport;// client[HighEntropy=Direct, MeasureAs=WindowScreenX, Replaceable] readonly attribute long screenX;[HighEntropy=Direct, MeasureAs=WindowScreenY, Replaceable] readonly attribute long screenY;[HighEntropy=Direct, MeasureAs=WindowOuterWidth, Replaceable] readonly attribute long outerWidth;[HighEntropy=Direct, MeasureAs=WindowOuterHeight, Replaceable] readonly attribute long outerHeight;[HighEntropy=Direct, MeasureAs=WindowDevicePixelRatio, Replaceable] readonly attribute double devicePixelRatio;// Selection API// https://w3c.github.io/selection-api/#extensions-to-window-interface[Affects=Nothing] Selection? getSelection();// Console API// https://console.spec.whatwg.org/#console-interface// [Replaceable] readonly attribute Console console;// Console is installed by v8 inspector when context is created// and is left commented here just for documentation.// Compatibility// https://compat.spec.whatwg.org/#windoworientation-interface[RuntimeEnabled=OrientationEvent] attribute EventHandler onorientationchange;// This is the interface orientation in degrees. Some examples are://  0 is straight up; -90 is when the device is rotated 90 clockwise;//  90 is when rotated counter clockwise.[HighEntropy=Direct, MeasureAs=WindowOrientation, RuntimeEnabled=OrientationEvent] readonly attribute long orientation;// Event handler attribute for the pagereveal event.// https://drafts.csswg.org/css-view-transitions-2/#reveal-event[RuntimeEnabled=PageRevealEvent] attribute EventHandler onpagereveal;// Accessibility Object Model// https://github.com/WICG/aom/blob/HEAD/explainer.md[RuntimeEnabled=AccessibilityObjectModel, CallWith=ScriptState] Promise<ComputedAccessibleNode> getComputedAccessibleNode(Element element);// https://dom.spec.whatwg.org/#interface-window-extensions[Replaceable, GetterCallWith=ScriptState, MeasureAs=WindowEvent, NotEnumerable] readonly attribute any event;// Non-standard APIs[MeasureAs=WindowClientInformation, Replaceable] readonly attribute Navigator clientInformation;[MeasureAs=WindowFind] boolean find(optional DOMString string = "",optional boolean caseSensitive = false,optional boolean backwards = false,optional boolean wrap = false,optional boolean wholeWord = false,optional boolean searchInFrames = false,optional boolean showDialog = false);[MeasureAs=WindowOffscreenBuffering, Replaceable, NotEnumerable] readonly attribute boolean offscreenBuffering;[HighEntropy=Direct, MeasureAs=WindowScreenLeft, Replaceable] readonly attribute long screenLeft;[HighEntropy=Direct, MeasureAs=WindowScreenTop, Replaceable] readonly attribute long screenTop;[RuntimeEnabled=WindowDefaultStatus,MeasureAs=WindowDefaultStatus] attribute DOMString defaultStatus;[RuntimeEnabled=WindowDefaultStatus,MeasureAs=WindowDefaultstatus, ImplementedAs=defaultStatus] attribute DOMString defaultstatus;[MeasureAs=StyleMedia] readonly attribute StyleMedia styleMedia;[DeprecateAs=PrefixedRequestAnimationFrame] long webkitRequestAnimationFrame(FrameRequestCallback callback);[DeprecateAs=PrefixedCancelAnimationFrame, ImplementedAs=cancelAnimationFrame] void webkitCancelAnimationFrame(long id);// Event handler attributesattribute EventHandler onsearch;// https://w3c.github.io/webappsec-secure-contexts/#monkey-patching-global-objectreadonly attribute boolean isSecureContext;// TrustedTypes API: http://github.com/w3c/trusted-types[CallWith=ScriptState] readonly attribute TrustedTypePolicyFactory trustedTypes;// Anonymous iframe:// https://github.com/WICG/anonymous-iframe[RuntimeEnabled=AnonymousIframe] readonly attribute boolean credentialless;// Collection of fenced frame APIs// https://github.com/shivanigithub/fenced-frame/issues/14[RuntimeEnabled=FencedFrames] readonly attribute Fence? fence;
};Window includes GlobalEventHandlers;
Window includes WindowEventHandlers;
Window includes WindowOrWorkerGlobalScope;

2、window对象接口定义实现文件(blink):

third_party\blink\renderer\core\frame\dom_window.h

third_party\blink\renderer\core\frame\dom_window.cc

third_party\blink\renderer\core\frame\local_dom_window.h

third_party\blink\renderer\core\frame\local_dom_window.cc

继承关系:

// Note: if you're thinking of returning something DOM-related by reference,
// please ping dcheng@chromium.org first. You probably don't want to do that.
class CORE_EXPORT LocalDOMWindow final : public DOMWindow,public ExecutionContext,public WindowOrWorkerGlobalScope,public WindowEventHandlers,public Supplementable<LocalDOMWindow>

在local_dom_window.h  LocalDOMWindow类中对应这前端window所有方法和对象实现


#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_LOCAL_DOM_WINDOW_H_
#define THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_LOCAL_DOM_WINDOW_H_#include <memory>#include "base/task/single_thread_task_runner.h"
#include "services/metrics/public/cpp/ukm_recorder.h"
#include "services/metrics/public/cpp/ukm_source_id.h"
#include "services/network/public/mojom/content_security_policy.mojom-blink.h"
#include "third_party/blink/public/common/frame/delegated_capability_request_token.h"
#include "third_party/blink/public/common/frame/history_user_activation_state.h"
#include "third_party/blink/public/common/metrics/post_message_counter.h"
#include "third_party/blink/public/common/tokens/tokens.h"
#include "third_party/blink/renderer/bindings/core/v8/script_value.h"
#include "third_party/blink/renderer/core/core_export.h"
#include "third_party/blink/renderer/core/dom/document.h"
#include "third_party/blink/renderer/core/dom/events/event_target.h"
#include "third_party/blink/renderer/core/editing/spellcheck/spell_checker.h"
#include "third_party/blink/renderer/core/editing/suggestion/text_suggestion_controller.h"
#include "third_party/blink/renderer/core/execution_context/execution_context.h"
#include "third_party/blink/renderer/core/frame/dom_window.h"
#include "third_party/blink/renderer/core/frame/local_frame.h"
#include "third_party/blink/renderer/core/frame/use_counter_impl.h"
#include "third_party/blink/renderer/core/frame/window_event_handlers.h"
#include "third_party/blink/renderer/core/frame/window_or_worker_global_scope.h"
#include "third_party/blink/renderer/core/html/closewatcher/close_watcher.h"
#include "third_party/blink/renderer/core/loader/frame_loader.h"
#include "third_party/blink/renderer/platform/heap/collection_support/heap_hash_map.h"
#include "third_party/blink/renderer/platform/heap/collection_support/heap_hash_set.h"
#include "third_party/blink/renderer/platform/heap/garbage_collected.h"
#include "third_party/blink/renderer/platform/heap/prefinalizer.h"
#include "third_party/blink/renderer/platform/storage/blink_storage_key.h"
#include "third_party/blink/renderer/platform/supplementable.h"
#include "third_party/blink/renderer/platform/wtf/casting.h"
#include "third_party/blink/renderer/platform/wtf/forward.h"
#include "third_party/blink/renderer/platform/wtf/uuid.h"namespace blink {class BarProp;
class CSSStyleDeclaration;
class CustomElementRegistry;
class Document;
class DocumentInit;
class DOMSelection;
class DOMVisualViewport;
class Element;
class ExceptionState;
class External;
class Fence;
class FrameConsole;
class History;
class InputMethodController;
class LocalFrame;
class MediaQueryList;
class MessageEvent;
class Modulator;
class NavigationApi;
class Navigator;
class Screen;
class ScriptController;
class ScriptPromise;
class ScriptState;
class ScrollToOptions;
class SecurityOrigin;
class SerializedScriptValue;
class SourceLocation;
class StyleMedia;
class TrustedTypePolicyFactory;
class V8FrameRequestCallback;
class V8VoidFunction;
struct WebPictureInPictureWindowOptions;
class WindowAgent;namespace scheduler {
class TaskAttributionInfo;
}enum PageTransitionEventPersistence {kPageTransitionEventNotPersisted = 0,kPageTransitionEventPersisted = 1
};// Note: if you're thinking of returning something DOM-related by reference,
// please ping dcheng@chromium.org first. You probably don't want to do that.
class CORE_EXPORT LocalDOMWindow final : public DOMWindow,public ExecutionContext,public WindowOrWorkerGlobalScope,public WindowEventHandlers,public Supplementable<LocalDOMWindow> {USING_PRE_FINALIZER(LocalDOMWindow, Dispose);public:class CORE_EXPORT EventListenerObserver : public GarbageCollectedMixin {public:virtual void DidAddEventListener(LocalDOMWindow*, const AtomicString&) = 0;virtual void DidRemoveEventListener(LocalDOMWindow*,const AtomicString&) = 0;virtual void DidRemoveAllEventListeners(LocalDOMWindow*) = 0;};static LocalDOMWindow* From(const ScriptState*);LocalDOMWindow(LocalFrame&, WindowAgent*);~LocalDOMWindow() override;// Returns the token identifying the frame that this ExecutionContext was// associated with at the moment of its creation. This remains valid even// after the frame has been destroyed and the ExecutionContext is detached.// This is used as a stable and persistent identifier for attributing detached// context memory usage.const LocalFrameToken& GetLocalFrameToken() const { return token_; }ExecutionContextToken GetExecutionContextToken() const final {return token_;}LocalFrame* GetFrame() const {// UnsafeTo<> is safe here because DOMWindow's frame can only change to// nullptr, and it was constructed with a LocalFrame in the constructor.return UnsafeTo<LocalFrame>(DOMWindow::GetFrame());}ScriptController& GetScriptController() const { return *script_controller_; }void Initialize();void ClearForReuse() { document_ = nullptr; }void ResetWindowAgent(WindowAgent*);mojom::blink::V8CacheOptions GetV8CacheOptions() const override;// Bind Content Security Policy to this window. This will cause the// CSP to resolve the 'self' attribute and all policies will then be// applied to this document.void BindContentSecurityPolicy();void Trace(Visitor*) const override;// ExecutionContext overrides:bool IsWindow() const final { return true; }bool IsContextThread() const final;bool ShouldInstallV8Extensions() const final;ContentSecurityPolicy* GetContentSecurityPolicyForWorld(const DOMWrapperWorld* world) final;const KURL& Url() const final;const KURL& BaseURL() const final;KURL CompleteURL(const String&) const final;void DisableEval(const String& error_message) final;void SetWasmEvalErrorMessage(const String& error_message) final;String UserAgent() const final;UserAgentMetadata GetUserAgentMetadata() const final;HttpsState GetHttpsState() const final;ResourceFetcher* Fetcher() final;bool CanExecuteScripts(ReasonForCallingCanExecuteScripts) final;void ExceptionThrown(ErrorEvent*) final;void AddInspectorIssue(AuditsIssue) final;EventTarget* ErrorEventTarget() final { return this; }String OutgoingReferrer() const final;CoreProbeSink* GetProbeSink() final;const BrowserInterfaceBrokerProxy& GetBrowserInterfaceBroker() const final;FrameOrWorkerScheduler* GetScheduler() final;scoped_refptr<base::SingleThreadTaskRunner> GetTaskRunner(TaskType) final;TrustedTypePolicyFactory* GetTrustedTypes() const final {return GetTrustedTypesForWorld(*GetCurrentWorld());}ScriptWrappable* ToScriptWrappable() final { return this; }void ReportPermissionsPolicyViolation(mojom::blink::PermissionsPolicyFeature,mojom::blink::PolicyDisposition,const absl::optional<String>& reporting_endpoint,const String& message = g_empty_string) const final;void ReportDocumentPolicyViolation(mojom::blink::DocumentPolicyFeature,mojom::blink::PolicyDisposition,const String& message = g_empty_string,// If source_file is set to empty string,// current JS file would be used as source_file instead.const String& source_file = g_empty_string) const final;void SetIsInBackForwardCache(bool) final;bool HasStorageAccess() const final;void AddConsoleMessageImpl(ConsoleMessage*, bool discard_duplicates) final;scoped_refptr<base::SingleThreadTaskRunner>GetAgentGroupSchedulerCompositorTaskRunner() final;// UseCounter orverrides:void CountUse(mojom::WebFeature feature) final;// Count |feature| only when this window is associated with a cross-origin// iframe.void CountUseOnlyInCrossOriginIframe(mojom::blink::WebFeature feature);// Count |feature| only when this window is associated with a same-origin// iframe with the outermost main frame.void CountUseOnlyInSameOriginIframe(mojom::blink::WebFeature feature);// Count |feature| only when this window is associated with a cross-site// iframe. A "site" is a scheme and registrable domain.void CountUseOnlyInCrossSiteIframe(mojom::blink::WebFeature feature) override;// Count permissions policy feature usage through use counter.void CountPermissionsPolicyUsage(mojom::blink::PermissionsPolicyFeature feature,UseCounterImpl::PermissionsPolicyUsageType type);// Checks if navigation to Javascript URL is allowed. This check should run// before any action is taken (e.g. creating new window) for all// same-origin navigations.String CheckAndGetJavascriptUrl(const DOMWrapperWorld* world,const KURL& url,Element* element,network::mojom::CSPDisposition csp_disposition =network::mojom::CSPDisposition::CHECK);Document* InstallNewDocument(const DocumentInit&);// EventTarget overrides:ExecutionContext* GetExecutionContext() const override;const LocalDOMWindow* ToLocalDOMWindow() const override;LocalDOMWindow* ToLocalDOMWindow() override;// Same-origin DOM Level 0Screen* screen();History* history();BarProp* locationbar();BarProp* menubar();BarProp* personalbar();BarProp* scrollbars();BarProp* statusbar();BarProp* toolbar();Navigator* navigator();Navigator* clientInformation() { return navigator(); }bool offscreenBuffering() const;int outerHeight() const;int outerWidth() const;int innerHeight() const;int innerWidth() const;int screenX() const;int screenY() const;int screenLeft() const { return screenX(); }int screenTop() const { return screenY(); }double scrollX() const;double scrollY() const;double pageXOffset() const { return scrollX(); }double pageYOffset() const { return scrollY(); }DOMVisualViewport* visualViewport();const AtomicString& name() const;void setName(const AtomicString&);String status() const;void setStatus(const String&);String defaultStatus() const;void setDefaultStatus(const String&);String origin() const;// DOM Level 2 AbstractView InterfaceDocument* document() const;// CSSOM View ModuleStyleMedia* styleMedia();// WebKit extensionsdouble devicePixelRatio() const;// This is the interface orientation in degrees. Some examples are://  0 is straight up; -90 is when the device is rotated 90 clockwise;//  90 is when rotated counter clockwise.int orientation() const;DOMSelection* getSelection();void print(ScriptState*);void stop();void alert(ScriptState*, const String& message = String());bool confirm(ScriptState*, const String& message);String prompt(ScriptState*,const String& message,const String& default_value);bool find(const String&,bool case_sensitive,bool backwards,bool wrap,bool whole_word,bool search_in_frames,bool show_dialog) const;// FIXME: ScrollBehaviorSmooth is currently unsupported in VisualViewport.// crbug.com/434497void scrollBy(double x, double y) const;void scrollBy(const ScrollToOptions*) const;void scrollTo(double x, double y) const;void scrollTo(const ScrollToOptions*) const;void scroll(double x, double y) const { scrollTo(x, y); }void scroll(const ScrollToOptions* scroll_to_options) const {scrollTo(scroll_to_options);}void moveBy(int x, int y) const;void moveTo(int x, int y) const;void resizeBy(int x, int y, ExceptionState&) const;void resizeTo(int width, int height, ExceptionState&) const;MediaQueryList* matchMedia(const String&);// DOM Level 2 Style InterfaceCSSStyleDeclaration* getComputedStyle(Element*,const String& pseudo_elt = String()) const;// Acessibility Object ModelScriptPromise getComputedAccessibleNode(ScriptState*, Element*);// WebKit animation extensionsint requestAnimationFrame(V8FrameRequestCallback*);int webkitRequestAnimationFrame(V8FrameRequestCallback*);void cancelAnimationFrame(int id);// https://html.spec.whatwg.org/C/#windoworworkerglobalscope-mixinvoid queueMicrotask(V8VoidFunction*);// https://html.spec.whatwg.org/C/#dom-originagentclusterbool originAgentCluster() const;// Custom elementsCustomElementRegistry* customElements(ScriptState*) const;CustomElementRegistry* customElements() const;CustomElementRegistry* MaybeCustomElements() const;void SetModulator(Modulator*);// Obsolete APIsvoid captureEvents() {}void releaseEvents() {}External* external();bool isSecureContext() const;DEFINE_ATTRIBUTE_EVENT_LISTENER(search, kSearch)DEFINE_ATTRIBUTE_EVENT_LISTENER(orientationchange, kOrientationchange)DEFINE_ATTRIBUTE_EVENT_LISTENER(pagereveal, kPagereveal)void RegisterEventListenerObserver(EventListenerObserver*);void FrameDestroyed();void Reset();Element* frameElement() const;DOMWindow* open(v8::Isolate*,const String& url_string,const AtomicString& target,const String& features,ExceptionState&);DOMWindow* openPictureInPictureWindow(v8::Isolate*,const WebPictureInPictureWindowOptions&,ExceptionState&);FrameConsole* GetFrameConsole() const;void PrintErrorMessage(const String&) const;void DispatchPostMessage(MessageEvent* event,scoped_refptr<const SecurityOrigin> intended_target_origin,std::unique_ptr<SourceLocation> location,const base::UnguessableToken& source_agent_cluster_id);void DispatchMessageEventWithOriginCheck(const SecurityOrigin* intended_target_origin,MessageEvent*,std::unique_ptr<SourceLocation>,const base::UnguessableToken& source_agent_cluster_id);// Events// EventTarget APIvoid RemoveAllEventListeners() override;using EventTarget::DispatchEvent;DispatchEventResult DispatchEvent(Event&, EventTarget*);void FinishedLoading(FrameLoader::NavigationFinishState);// Dispatch the (deprecated) orientationchange event to this DOMWindow and// recurse on its child frames.void SendOrientationChangeEvent();void EnqueueWindowEvent(Event&, TaskType);void EnqueueDocumentEvent(Event&, TaskType);void EnqueueNonPersistedPageshowEvent();void EnqueueHashchangeEvent(const String& old_url, const String& new_url);void DispatchPopstateEvent(scoped_refptr<SerializedScriptValue>,scheduler::TaskAttributionInfo* parent_task);void DispatchWindowLoadEvent();void DocumentWasClosed();void AcceptLanguagesChanged();// https://dom.spec.whatwg.org/#dom-window-eventScriptValue event(ScriptState*);Event* CurrentEvent() const;void SetCurrentEvent(Event*);TrustedTypePolicyFactory* trustedTypes(ScriptState*) const;TrustedTypePolicyFactory* GetTrustedTypesForWorld(const DOMWrapperWorld&) const;// Returns true if this window is cross-site to the outermost main frame.// Defaults to false in a detached window. Note: This uses an outdated// definition of "site" which only includes the registrable domain and not the// scheme. IsCrossSiteSubframeIncludingScheme() uses HTML's definition of// "site" as a registrable domain and scheme.bool IsCrossSiteSubframe() const;bool IsCrossSiteSubframeIncludingScheme() const;void DispatchPersistedPageshowEvent(base::TimeTicks navigation_start);void DispatchPagehideEvent(PageTransitionEventPersistence persistence);InputMethodController& GetInputMethodController() const {return *input_method_controller_;}TextSuggestionController& GetTextSuggestionController() const {return *text_suggestion_controller_;}SpellChecker& GetSpellChecker() const { return *spell_checker_; }void ClearIsolatedWorldCSPForTesting(int32_t world_id);bool CrossOriginIsolatedCapability() const override;bool IsIsolatedContext() const override;// These delegate to the document_.ukm::UkmRecorder* UkmRecorder() override;ukm::SourceId UkmSourceID() const override;const BlinkStorageKey& GetStorageKey() const { return storage_key_; }void SetStorageKey(const BlinkStorageKey& storage_key);// This storage key must only be used when binding session storage.//// TODO(crbug.com/1407150): Remove this when deprecation trial is complete.const BlinkStorageKey& GetSessionStorageKey() const {return session_storage_key_;}void SetSessionStorageKey(const BlinkStorageKey& session_storage_key);void DidReceiveUserActivation();// Returns the state of the |payment_request_token_| in this document.bool IsPaymentRequestTokenActive() const;// Consumes the |payment_request_token_| if it was active in this document.bool ConsumePaymentRequestToken();// Returns the state of the |fullscreen_request_token_| in this document.bool IsFullscreenRequestTokenActive() const;// Consumes the |fullscreen_request_token_| if it was active in this document.bool ConsumeFullscreenRequestToken();// Returns the state of the |display_capture_request_token_| in this document.bool IsDisplayCaptureRequestTokenActive() const;// Consumes the |display_capture_request_token_| if it was active in this// document.bool ConsumeDisplayCaptureRequestToken();// Called when a network request buffered an additional `num_bytes` while this// frame is in back-forward cache.void DidBufferLoadWhileInBackForwardCache(bool update_process_wide_count,size_t num_bytes);// Whether the window is credentialless or not.bool credentialless() const;bool IsInFencedFrame() const override;Fence* fence();CloseWatcher::WatcherStack* closewatcher_stack() {return closewatcher_stack_.Get();}void GenerateNewNavigationId();String GetNavigationId() const { return navigation_id_; }NavigationApi* navigation();// Is this a Document Picture in Picture window?bool IsPictureInPictureWindow() const;void set_is_picture_in_picture_window_for_testing(bool is_picture_in_picture) {is_picture_in_picture_window_ = is_picture_in_picture;}// Sets the HasStorageAccess member. Note that it can only be granted for a// given window, it cannot be taken away.void SetHasStorageAccess();protected:// EventTarget overrides.void AddedEventListener(const AtomicString& event_type,RegisteredEventListener&) override;void RemovedEventListener(const AtomicString& event_type,const RegisteredEventListener&) override;// Protected DOMWindow overrides.void SchedulePostMessage(PostedMessage*) override;private:class NetworkStateObserver;// Intentionally private to prevent redundant checks.bool IsLocalDOMWindow() const override { return true; }bool HasInsecureContextInAncestors() const override;Document& GetDocumentForWindowEventHandler() const override {return *document();}void Dispose();void DispatchLoadEvent();void SetIsPictureInPictureWindow();// Return the viewport size including scrollbars.gfx::Size GetViewportSize() const;Member<ScriptController> script_controller_;Member<Document> document_;Member<DOMVisualViewport> visualViewport_;bool should_print_when_finished_loading_;mutable Member<Screen> screen_;mutable Member<History> history_;mutable Member<BarProp> locationbar_;mutable Member<BarProp> menubar_;mutable Member<BarProp> personalbar_;mutable Member<BarProp> scrollbars_;mutable Member<BarProp> statusbar_;mutable Member<BarProp> toolbar_;mutable Member<Navigator> navigator_;mutable Member<StyleMedia> media_;mutable Member<CustomElementRegistry> custom_elements_;Member<External> external_;Member<NavigationApi> navigation_;String status_;String default_status_;HeapHashSet<WeakMember<EventListenerObserver>> event_listener_observers_;// Trackers for delegated payment, fullscreen, and display-capture requests.// These are related to |Frame::user_activation_state_|.DelegatedCapabilityRequestToken payment_request_token_;DelegatedCapabilityRequestToken fullscreen_request_token_;DelegatedCapabilityRequestToken display_capture_request_token_;// https://dom.spec.whatwg.org/#window-current-event// We represent the "undefined" value as nullptr.Member<Event> current_event_;// Store TrustedTypesPolicyFactory, per DOMWrapperWorld.mutable HeapHashMap<scoped_refptr<const DOMWrapperWorld>,Member<TrustedTypePolicyFactory>>trusted_types_map_;// A dummy scheduler to return when the window is detached.// All operations on it result in no-op, but due to this it's safe to// use the returned value of GetScheduler() without additional checks.// A task posted to a task runner obtained from one of its task runners// will be forwarded to the default task runner.// TODO(altimin): We should be able to remove it after we complete// frame:document lifetime refactoring.std::unique_ptr<FrameOrWorkerScheduler> detached_scheduler_;Member<InputMethodController> input_method_controller_;Member<SpellChecker> spell_checker_;Member<TextSuggestionController> text_suggestion_controller_;// Map from isolated world IDs to their ContentSecurityPolicy instances.Member<HeapHashMap<int, Member<ContentSecurityPolicy>>>isolated_world_csp_map_;// Tracks which features have already been potentially violated in this// document. This helps to count them only once per page load.// We don't use std::bitset to avoid to include// permissions_policy.mojom-blink.h.mutable Vector<bool> potentially_violated_features_;// Token identifying the LocalFrame that this window was associated with at// creation. Remains valid even after the frame is destroyed and the context// is detached.const LocalFrameToken token_;// Tracks which document policy violation reports have already been sent in// this document, to avoid reporting duplicates. The value stored comes// from |DocumentPolicyViolationReport::MatchId()|.mutable HashSet<unsigned> document_policy_violation_reports_sent_;// Tracks metrics related to postMessage usage.// TODO(crbug.com/1159586): Remove when no longer needed.PostMessageCounter post_message_counter_;// The storage key for this LocalDomWindow.BlinkStorageKey storage_key_;// The storage key here is the one to use when binding session storage. This// may differ from `storage_key_` as a deprecation trial can prevent the// partitioning of session storage.//// TODO(crbug.com/1407150): Remove this when deprecation trial is complete.BlinkStorageKey session_storage_key_;// Fire "online" and "offline" events.Member<NetworkStateObserver> network_state_observer_;// The total bytes buffered by all network requests in this frame while frozen// due to back-forward cache. This number gets reset when the frame gets out// of the back-forward cache.size_t total_bytes_buffered_while_in_back_forward_cache_ = 0;// Collection of fenced frame APIs.// https://github.com/shivanigithub/fenced-frame/issues/14Member<Fence> fence_;Member<CloseWatcher::WatcherStack> closewatcher_stack_;// If set, this window is a Document Picture in Picture window.// https://wicg.github.io/document-picture-in-picture/bool is_picture_in_picture_window_ = false;// The navigation id of a document is to identify navigation of special types// like bfcache navigation or soft navigation. It changes when navigations// of these types occur.String navigation_id_;// Records whether this window has obtained storage access. It cannot be// revoked once set to true.bool has_storage_access_ = false;// Tracks whether this window has shown a payment request without a user// activation. It cannot be revoked once set to true.// TODO(crbug.com/1439565): Move this bit to a new payments-specific// per-LocalDOMWindow class in the payments module.bool had_activationless_payment_request_ = false;
};template <>
struct DowncastTraits<LocalDOMWindow> {static bool AllowFrom(const ExecutionContext& context) {return context.IsWindow();}static bool AllowFrom(const DOMWindow& window) {return window.IsLocalDOMWindow();}
};inline String LocalDOMWindow::status() const {return status_;
}inline String LocalDOMWindow::defaultStatus() const {DCHECK(RuntimeEnabledFeatures::WindowDefaultStatusEnabled());return default_status_;
}}  // namespace blink#endif  // THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_LOCAL_DOM_WINDOW_H_

3、window对象接口定义实现文件(v8):

out\Debug\gen\third_party\blink\renderer\bindings\modules\v8\v8_window.cc

out\Debug\gen\third_party\blink\renderer\bindings\modules\v8\v8_window.h

部分定义:

void SelfAttributeSetCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_DOMWindow_self_Setter");
BLINK_BINDINGS_TRACE_EVENT("Window.self.set");v8::Isolate* isolate = info.GetIsolate();
const char* const property_name = "self";
if (UNLIKELY(info.Length() < 1)) {const ExceptionContextType exception_context_type = ExceptionContextType::kAttributeSet;
const char* const class_like_name = "Window";
ExceptionState exception_state(isolate, exception_context_type, class_like_name, property_name);
exception_state.ThrowTypeError(ExceptionMessages::NotEnoughArguments(1, info.Length()));
return;
}// [Replaceable]
bool did_create;
v8::Local<v8::Object> v8_receiver = info.This();
v8::Local<v8::Context> current_context = isolate->GetCurrentContext();
v8::Local<v8::Value> v8_property_value = info[0];
if (!v8_receiver->CreateDataProperty(current_context, V8AtomicString(isolate, property_name), v8_property_value).To(&did_create)) {return;
}
}void DocumentAttributeGetCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_DOMWindow_document_Getter");
BLINK_BINDINGS_TRACE_EVENT("Window.document.get");v8::Local<v8::Object> v8_receiver = info.This();
LocalDOMWindow* blink_receiver = &UnsafeTo<LocalDOMWindow>(*V8Window::ToWrappableUnsafe(v8_receiver));
auto&& return_value = blink_receiver->document();
bindings::V8SetReturnValue(info, return_value, blink_receiver);
}

4、控制台输入window看下和c++代码对比效果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/56691.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git 报错 SSL certificate problem: certificate has expired

git小乌龟 报错 SSL certificate problem: certificate has expired 场景复现&#xff1a; 原因&#xff1a; 这个错误表明你在使用Git时尝试通过HTTPS进行通信&#xff0c;但是SSL证书已经过期。这通常发生在使用自签名证书或证书有效期已到期的情况下。 解决方法: 1.如果是…

【思维导图】C语言—常见概念

hello&#xff0c;友友们&#xff0c;今天我们进入一个新的专栏——思维导图&#xff01; 思维导图帮助我们复习知识的同时建构出一个清晰的框架&#xff0c;我往后会不断更新各个专栏的思维导图&#xff0c;关注我&#xff0c;一起加油&#xff01; 今天我们回顾C语言中的常见…

智慧社区服务平台:基于Spring Boot的实现

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理基于web的智慧社区设计与实现的相关信息成…

意外发现!AI写作这样用,热点文章轻松超越同行90%!

做自媒体&#xff0c;写热点文章很重要。 热点自带流量&#xff0c;能很快吸引不少读者。 可很多自媒体新手很犯愁。 干货文还能勉强写出来&#xff0c;碰到热点文就不知咋办了。 为啥写热点文章这么难呢&#xff1f; 关键是得找个新颖角度切入。 要是只在网上反复复制粘贴那些…

R语言机器学习算法实战系列(九)决策树分类算法 (Decision Trees Classifier)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍教程下载数据加载R包导入数据数据预处理数据描述数据切割调节参数构建模型模型的决策树预测测试数据评估模型模型准确性混淆矩阵模型评估指标ROC CurvePRC Curve特征的重要性保存模…

Spring Boot技术栈的电影评论网站设计与实现

6系统测试 6.1概念和意义 测试的定义&#xff1a;程序测试是为了发现错误而执行程序的过程。测试(Testing)的任务与目的可以描述为&#xff1a; 目的&#xff1a;发现程序的错误&#xff1b; 任务&#xff1a;通过在计算机上执行程序&#xff0c;暴露程序中潜在的错误。 另一个…

基于手机模拟器开发游戏辅助的技术选择

开发基于手机模拟器的游戏辅助工具是一项复杂且具有挑战性的任务。为了帮助开发人员选择适合的技术方案并提供详尽的开发指导&#xff0c;我们将从以下几个方面进行分析&#xff1a;发展背景、技术选型、实现原理、实际案例和相关的法律与道德考量。 1. 发展背景 随着智能手机…

Android--第一个android程序

写在前边 ※安卓开发工具常用模拟器汇总Android开发者必备工具-常见Android模拟器(MuMu、夜神、蓝叠、逍遥、雷电、Genymotion...)_安卓模拟器-CSDN博客 ※一般游戏模拟器运行速度相对较快&#xff0c;本文选择逍遥模拟器_以下是Android Studio连接模拟器实现(先从以上博文中…

C++初阶(五)--类和对象(中)--默认成员函数

目录 一、默认成员函数&#xff08;Default Member Functions&#xff09; 二、构造函数&#xff08; Constructor&#xff09; 1.构造函数的基本概念 2.构造函数的特征 3.构造函数的使用 无参构造函数 和 带参构造函数 注意事项&#xff1a; 4.默认构造函数 隐式生成的…

Node-RED开源项目的modbus通信(TCP)

一、Modbus 通信协议 Modbus是一种串行通信协议&#xff0c;是Modicon公司&#xff08;现在的施耐德电气 Schneider Electric&#xff09;于1979年为使用可编程逻辑控制器&#xff08;PLC&#xff09;通信而发表。Modbus已经成为工业领域通信协议的业界标准&#xff08;De fact…

重庆大学软件工程考研,难度如何?

C哥专业提供——计软考研院校选择分析专业课备考指南规划 重大软件专业可谓是最好上岸的985院校&#xff01;重庆大学24考研各大学院复试录取情况已出&#xff0c; 我们先说学硕部分&#xff1a; 招生人数&#xff1a; 重庆大学软件工程学硕近几年计划统招人数都不多&#xf…

【 截稿倒计时 | JPCS独立出版 | 检索快速稳定】第三届能源与动力工程国际学术会议(EPE 2024)

第三届能源与动力工程国际学术会议&#xff08;EPE 2024&#xff09; 2024 3rd International Conference on Energy and Power Engineering 2024年10月18日 线上会议 往届平均会后3个月完成见刊及EI检索&#xff0c;检索快速稳定~ EPE 2023 EI检索 EPE 2023 Scopus检索 …

Git_GitHub

Git_GitHub 创建远程仓库 远程仓库操作 创建远程仓库别名 基本语法 案例实操 推送本地分支到远程仓库 基本语法 案例实操 拉取代码 基本语法 案例实操 克隆远程仓库到本地 基本语法 案例实操 邀请加入团队 选择邀请合作者 填入想要合作的人 复制邀请函 接受邀…

C语言笔记(数据的存储篇)

目录 1.数据类型的详细介绍 2.整型在内存中的存储&#xff1a;原码、反码、补码 3.大小端字节序介绍及判断 4.浮点型的内存中的存储解析 1.数据类型的详细介绍 下述是内置类型&#xff1a; char // 字符数据类型 short // 短整型 int // 整型 long …

MySQL-事务Transaction详解

文章目录 事务概述事务基本概念事务四大特性(ACID)演示MySQL事务手动开启事务MySQL默认事务机制 事务的隔离级别隔离级别基本概述三种现象脏读不可重复读幻读 查看和设置隔离级别四种隔离级别及演示读未提交(read uncommitted)读提交(read committed)可重复读(repeatable read)…

sql-labs靶场第十八关测试报告

目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、寻找注入点 2、注入数据库 ①寻找注入方法 ②爆库&#xff0c;查看数据库名称 ③爆表&#xff0c;查看security库的所有表 ④爆列&#xff0c;查看users表的所有列 ⑤成功获取用户名…

用Spring AI 做智能客服,基于私有知识库和RAG技术

Java智能客服系统运用RAG技术提升答疑精准度 基于Spring ai 的 RAG&#xff08;检索增强生成&#xff09;技术&#xff0c;Java智能客服系统能够利用私有知识库中的信息提供更准确的答疑服务。 它的核心思路是&#xff1a; 首先&#xff0c;将客服QA以Word形式导入到系统中&…

基于FreeRTOS的LWIP移植

目录 前言一、移植准备工作二、以太网固件库与驱动2.1 固件库文件添加2.2 库文件修改2.3 添加网卡驱动 三、LWIP 数据包和网络接口管理3.1 添加LWIP源文件3.2 Lwip文件修改3.2.1 修改cc.h3.2.2 修改lwipopts.h3.2.3 修改icmp.c3.2.4 修改sys_arch.h和sys_arch.c3.2.5 修改ether…

量子门电路开销——T门、clifford门、toffoli门、fredkin门

在量子计算中&#xff0c;T门的成本比Clifford门高出很多倍的原因与量子计算中纠错的实现、物理门操作的复杂性以及容错量子计算架构中的成本评估有关。以下是几个关键原因&#xff0c;解释了为什么 T 门的成本在量子计算中远远高于 Clifford 门&#xff1a; 1. T 门和 Cliffo…

录微课专用提词器,不会被录进视频中的提词器,还能显示PPT中备注的内容

不坑提词器&#xff0c;全称&#xff1a;不坑隐形提词器。是一款能够在截图、录屏、直播过程中隐藏界面的提词器软件。 系统要求&#xff1a;Win10 1024 以上&#xff08;特别提醒&#xff1a;Win7状态下不可隐身&#xff09; ⏬下载 提词器默认放在不坑盒子的安装目录下&…