diff --git a/dom/base/ResizeObserver.cpp b/dom/base/ResizeObserver.cpp index 51fd603217..ca25c06e43 100644 --- a/dom/base/ResizeObserver.cpp +++ b/dom/base/ResizeObserver.cpp @@ -303,6 +303,30 @@ ResizeObserverEntry::Constructor(const GlobalObject& aGlobal, return observerEntry.forget(); } +void ResizeObserverEntry::GetBorderBoxSize( + nsTArray>& aRetVal) const { + // In the resize-observer-1 spec, there will only be a single + // ResizeObserverSize returned in the FrozenArray. + // + // Note: the usage of FrozenArray is to support elements that have multiple + // fragments, which occur in multi-column scenarios. See: + // https://drafts.csswg.org/resize-observer/#resize-observer-entry-interface + aRetVal.Clear(); + aRetVal.AppendElement(mBorderBoxSize); +} + +void ResizeObserverEntry::GetContentBoxSize( + nsTArray>& aRetVal) const { + // In the resize-observer-1 spec, there will only be a single + // ResizeObserverSize returned in the FrozenArray. + // + // Note: the usage of FrozenArray is to support elements that have multiple + // fragments, which occur in multi-column scenarios. + // https://drafts.csswg.org/resize-observer/#resize-observer-entry-interface + aRetVal.Clear(); + aRetVal.AppendElement(mContentBoxSize); +} + void ResizeObserverEntry::SetBorderBoxSize(const nsSize& aSize) { nsIFrame* frame = mTarget->GetPrimaryFrame(); diff --git a/dom/base/ResizeObserver.h b/dom/base/ResizeObserver.h index 56675693ce..ca87a080b4 100644 --- a/dom/base/ResizeObserver.h +++ b/dom/base/ResizeObserver.h @@ -163,14 +163,10 @@ public: /** * Returns target's logical border-box size and content-box size as - * ResizeObserverSize. + * a ResizeObserverSize array. */ - ResizeObserverSize* BorderBoxSize() const { - return mBorderBoxSize; - } - ResizeObserverSize* ContentBoxSize() const { - return mContentBoxSize; - } + void GetBorderBoxSize(nsTArray>& aRetVal) const; + void GetContentBoxSize(nsTArray>& aRetVal) const; // Set borderBoxSize. void SetBorderBoxSize(const nsSize& aSize); diff --git a/dom/webidl/MediaQueryListEvent.webidl b/dom/webidl/MediaQueryListEvent.webidl index f3a66fb57f..5e53e9734f 100644 --- a/dom/webidl/MediaQueryListEvent.webidl +++ b/dom/webidl/MediaQueryListEvent.webidl @@ -1,18 +1,18 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this file, - * You can obtain one at http://mozilla.org/MPL/2.0/. - * - * https://drafts.csswg.org/cssom-view/#mediaquerylistevent - */ - -[Constructor(DOMString type, optional MediaQueryListEventInit eventInitDict)] -interface MediaQueryListEvent : Event { - readonly attribute DOMString media; - readonly attribute boolean matches; -}; - -dictionary MediaQueryListEventInit : EventInit { - DOMString media = ""; - boolean matches = false; -}; +/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. + * + * https://drafts.csswg.org/cssom-view/#mediaquerylistevent + */ + +[Constructor(DOMString type, optional MediaQueryListEventInit eventInitDict)] +interface MediaQueryListEvent : Event { + readonly attribute DOMString media; + readonly attribute boolean matches; +}; + +dictionary MediaQueryListEventInit : EventInit { + DOMString media = ""; + boolean matches = false; +}; diff --git a/dom/webidl/ResizeObserver.webidl b/dom/webidl/ResizeObserver.webidl index d764af7cbd..183bf42304 100644 --- a/dom/webidl/ResizeObserver.webidl +++ b/dom/webidl/ResizeObserver.webidl @@ -1,52 +1,56 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this file, - * You can obtain one at http://mozilla.org/MPL/2.0/. - * - * The origin of this IDL file is - * https://wicg.github.io/ResizeObserver/ - */ - -enum ResizeObserverBoxOptions { - "border-box", - "content-box" -}; - -dictionary ResizeObserverOptions { - ResizeObserverBoxOptions box = "content-box"; -}; - -[Constructor(ResizeObserverCallback callback), - Exposed=Window, - Pref="layout.css.resizeobserver.enabled"] -interface ResizeObserver { - [Throws] - void observe(Element? target, optional ResizeObserverOptions options); - [Throws] - void unobserve(Element? target); - void disconnect(); -}; - -callback ResizeObserverCallback = void (sequence entries, ResizeObserver observer); - -[Constructor(Element? target), - Pref="layout.css.resizeobserver.enabled"] -interface ResizeObserverEntry { - readonly attribute Element target; - readonly attribute DOMRectReadOnly? contentRect; - readonly attribute ResizeObserverSize borderBoxSize; - readonly attribute ResizeObserverSize contentBoxSize; -}; - -[Pref="layout.css.resizeobserver.enabled"] -interface ResizeObserverSize { - readonly attribute unrestricted double inlineSize; - readonly attribute unrestricted double blockSize; -}; - -[ChromeOnly, - Pref="layout.css.resizeobserver.enabled"] -interface ResizeObservation { - readonly attribute Element target; - boolean isActive(); -}; +/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. + * + * The origin of this IDL file is + * https://wicg.github.io/ResizeObserver/ + */ + +enum ResizeObserverBoxOptions { + "border-box", + "content-box" +}; + +dictionary ResizeObserverOptions { + ResizeObserverBoxOptions box = "content-box"; +}; + +[Constructor(ResizeObserverCallback callback), + Exposed=Window, + Pref="layout.css.resizeobserver.enabled"] +interface ResizeObserver { + [Throws] + void observe(Element? target, optional ResizeObserverOptions options); + [Throws] + void unobserve(Element? target); + void disconnect(); +}; + +callback ResizeObserverCallback = void (sequence entries, ResizeObserver observer); + +[Constructor(Element? target), + Pref="layout.css.resizeobserver.enabled"] +interface ResizeObserverEntry { + readonly attribute Element target; + readonly attribute DOMRectReadOnly? contentRect; + // We are using a [Pure, Cached, Frozen] sequence since `FrozenArray` is not implemented in webidl. + // This is functionally similar enough. As of #2340 Mozilla has not implemented this yet, either. + [Frozen, Cached, Pure] + readonly attribute sequence borderBoxSize; + [Frozen, Cached, Pure] + readonly attribute sequence contentBoxSize; +}; + +[Pref="layout.css.resizeobserver.enabled"] +interface ResizeObserverSize { + readonly attribute unrestricted double inlineSize; + readonly attribute unrestricted double blockSize; +}; + +[ChromeOnly, + Pref="layout.css.resizeobserver.enabled"] +interface ResizeObservation { + readonly attribute Element target; + boolean isActive(); +};