☠☠ backed out by 50bd08fad349 ☠ ☠ | |
author | Boris Zbarsky <bzbarsky@mit.edu> |
Fri, 13 Jan 2017 10:41:04 -0500 | |
changeset 376725 | 9bf5bcb3e8c5d51622a0ad18775fa8ebc9b5a5d9 |
parent 376724 | a9cab46e8b45900e54edc1ad952140ed19bfaee6 |
child 376726 | 5f491bf49b8587364f841d6e2b6ab2030212964b |
push id | 1419 |
push user | jlund@mozilla.com |
push date | Mon, 10 Apr 2017 20:44:07 +0000 |
treeherder | mozilla-release@5e6801b73ef6 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | peterv, heycam |
bugs | 851892 |
milestone | 53.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/dom/base/nsDOMClassInfo.cpp +++ b/dom/base/nsDOMClassInfo.cpp @@ -69,17 +69,16 @@ #include "nsIDOMEventTarget.h" // CSS related includes #include "nsCSSRules.h" #include "nsIDOMCSSRule.h" #include "nsMemory.h" // includes needed for the prototype chain interfaces -#include "nsIDOMCSSKeyframesRule.h" #include "nsIDOMCSSCounterStyleRule.h" #include "nsIDOMXULCommandDispatcher.h" #include "nsIControllers.h" #ifdef MOZ_XUL #include "nsITreeSelection.h" #include "nsITreeContentView.h" #include "nsITreeView.h" #include "nsIXULTemplateBuilder.h" @@ -214,20 +213,16 @@ static nsDOMClassInfoData sClassInfoData nsIXPCScriptable::WANT_ENUMERATE | nsIXPCScriptable::IS_GLOBAL_OBJECT) NS_DEFINE_CHROME_ONLY_CLASSINFO_DATA(ChromeMessageBroadcaster, nsDOMGenericSH, DOM_DEFAULT_SCRIPTABLE_FLAGS) NS_DEFINE_CHROME_ONLY_CLASSINFO_DATA(ChromeMessageSender, nsDOMGenericSH, DOM_DEFAULT_SCRIPTABLE_FLAGS) - NS_DEFINE_CLASSINFO_DATA(CSSKeyframesRule, nsCSSRuleSH, - DOM_DEFAULT_SCRIPTABLE_FLAGS | - nsIXPCScriptable::WANT_PRECREATE) - NS_DEFINE_CLASSINFO_DATA(CSSCounterStyleRule, nsCSSRuleSH, DOM_DEFAULT_SCRIPTABLE_FLAGS | nsIXPCScriptable::WANT_PRECREATE) NS_DEFINE_CHROME_XBL_CLASSINFO_DATA(XULControlElement, nsDOMGenericSH, DOM_DEFAULT_SCRIPTABLE_FLAGS) NS_DEFINE_CHROME_XBL_CLASSINFO_DATA(XULLabeledControlElement, nsDOMGenericSH, DOM_DEFAULT_SCRIPTABLE_FLAGS) @@ -537,21 +532,16 @@ nsDOMClassInfo::Init() DOM_CLASSINFO_MAP_BEGIN_NO_CLASS_IF(ChromeMessageSender, nsISupports) DOM_CLASSINFO_MAP_ENTRY(nsIFrameScriptLoader) DOM_CLASSINFO_MAP_ENTRY(nsIProcessScriptLoader) DOM_CLASSINFO_MAP_ENTRY(nsIMessageListenerManager) DOM_CLASSINFO_MAP_ENTRY(nsIMessageSender) DOM_CLASSINFO_MAP_END - DOM_CLASSINFO_MAP_BEGIN(CSSKeyframesRule, nsIDOMCSSKeyframesRule) - DOM_CLASSINFO_MAP_ENTRY(nsIDOMCSSRule) - DOM_CLASSINFO_MAP_ENTRY(nsIDOMCSSKeyframesRule) - DOM_CLASSINFO_MAP_END - DOM_CLASSINFO_MAP_BEGIN(CSSCounterStyleRule, nsIDOMCSSCounterStyleRule) DOM_CLASSINFO_MAP_ENTRY(nsIDOMCSSRule) DOM_CLASSINFO_MAP_ENTRY(nsIDOMCSSCounterStyleRule) DOM_CLASSINFO_MAP_END DOM_CLASSINFO_MAP_BEGIN_NO_CLASS_IF(XULControlElement, nsIDOMXULControlElement) DOM_CLASSINFO_MAP_ENTRY(nsIDOMXULControlElement) DOM_CLASSINFO_MAP_END
--- a/dom/base/nsDOMClassInfoID.h +++ b/dom/base/nsDOMClassInfoID.h @@ -34,18 +34,16 @@ enum nsDOMClassInfoID eDOMClassInfo_XULTreeBuilder_id, #endif eDOMClassInfo_ContentFrameMessageManager_id, eDOMClassInfo_ContentProcessMessageManager_id, eDOMClassInfo_ChromeMessageBroadcaster_id, eDOMClassInfo_ChromeMessageSender_id, - eDOMClassInfo_CSSKeyframesRule_id, - // @counter-style in CSS eDOMClassInfo_CSSCounterStyleRule_id, eDOMClassInfo_XULControlElement_id, eDOMClassInfo_XULLabeledControlElement_id, eDOMClassInfo_XULButtonElement_id, eDOMClassInfo_XULCheckboxElement_id, eDOMClassInfo_XULPopupElement_id,
--- a/dom/base/nsWrapperCache.h +++ b/dom/base/nsWrapperCache.h @@ -18,17 +18,16 @@ namespace mozilla { namespace dom { class TabChildGlobal; class ProcessGlobal; } // namespace dom } // namespace mozilla class SandboxPrivate; class nsInProcessTabChildGlobal; class nsWindowRoot; -class nsCSSKeyframesRule; class nsCSSCounterStyleRule; #define NS_WRAPPERCACHE_IID \ { 0x6f3179a1, 0x36f7, 0x4a5c, \ { 0x8c, 0xf1, 0xad, 0xc8, 0x7c, 0xde, 0x3e, 0x87 } } /** * Class to store the wrapper for an object. This can only be used with objects @@ -277,17 +276,16 @@ private: // Friend declarations for things that need to be able to call // SetIsNotDOMBinding(). The goal is to get rid of all of these, and // SetIsNotDOMBinding() too. friend class mozilla::dom::TabChildGlobal; friend class mozilla::dom::ProcessGlobal; friend class SandboxPrivate; friend class nsInProcessTabChildGlobal; friend class nsWindowRoot; - friend class nsCSSKeyframesRule; friend class nsCSSCounterStyleRule; void SetIsNotDOMBinding() { MOZ_ASSERT(!mWrapper && !(GetWrapperFlags() & ~WRAPPER_IS_NOT_DOM_BINDING), "This flag should be set before creating any wrappers."); SetWrapperFlags(WRAPPER_IS_NOT_DOM_BINDING); }
--- a/dom/bindings/Bindings.conf +++ b/dom/bindings/Bindings.conf @@ -221,16 +221,21 @@ DOMInterfaces = { 'nativeType': 'mozilla::css::ImportRule', }, 'CSSKeyframeRule': { 'nativeType': 'nsCSSKeyframeRule', 'headerFile': 'nsCSSRules.h', }, +'CSSKeyframesRule': { + 'nativeType': 'nsCSSKeyframesRule', + 'headerFile': 'nsCSSRules.h', +}, + 'CSSLexer': { 'wrapperCache': False }, 'CSSMediaRule': { 'nativeType': 'mozilla::css::MediaRule', 'headerFile': 'nsCSSRules.h', },
new file mode 100644 --- /dev/null +++ b/dom/webidl/CSSKeyframesRule.webidl @@ -0,0 +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/. + * + * The origin of this IDL file is + * https://drafts.csswg.org/css-animations/#interface-csskeyframesrule + */ + +// https://drafts.csswg.org/css-animations/#interface-csskeyframesrule +interface CSSKeyframesRule : CSSRule { + attribute DOMString name; + readonly attribute CSSRuleList cssRules; + + void appendRule(DOMString rule); + void deleteRule(DOMString select); + CSSKeyframeRule? findRule(DOMString select); +};
--- a/dom/webidl/moz.build +++ b/dom/webidl/moz.build @@ -90,16 +90,17 @@ WEBIDL_FILES = [ 'CSS.webidl', 'CSSAnimation.webidl', 'CSSConditionRule.webidl', 'CSSFontFaceRule.webidl', 'CSSFontFeatureValuesRule.webidl', 'CSSGroupingRule.webidl', 'CSSImportRule.webidl', 'CSSKeyframeRule.webidl', + 'CSSKeyframesRule.webidl', 'CSSLexer.webidl', 'CSSMediaRule.webidl', 'CSSMozDocumentRule.webidl', 'CSSNamespaceRule.webidl', 'CSSPageRule.webidl', 'CSSPrimitiveValue.webidl', 'CSSPseudoElement.webidl', 'CSSRule.webidl',
--- a/layout/style/nsCSSRules.cpp +++ b/layout/style/nsCSSRules.cpp @@ -37,16 +37,17 @@ #include "mozilla/dom/CSSImportRuleBinding.h" #include "mozilla/dom/CSSMediaRuleBinding.h" #include "mozilla/dom/CSSSupportsRuleBinding.h" #include "mozilla/dom/CSSMozDocumentRuleBinding.h" #include "mozilla/dom/CSSPageRuleBinding.h" #include "mozilla/dom/CSSFontFaceRuleBinding.h" #include "mozilla/dom/CSSFontFeatureValuesRuleBinding.h" #include "mozilla/dom/CSSKeyframeRuleBinding.h" +#include "mozilla/dom/CSSKeyframesRuleBinding.h" #include "StyleRule.h" #include "nsFont.h" #include "nsIURI.h" #include "mozAutoDocUpdate.h" using namespace mozilla; using namespace mozilla::dom; @@ -2203,17 +2204,16 @@ nsCSSKeyframeRule::WrapObject(JSContext* nsCSSKeyframesRule::nsCSSKeyframesRule(const nsCSSKeyframesRule& aCopy) // copy everything except our reference count. GroupRule's copy // constructor also doesn't copy the lazily-constructed // mRuleCollection. : GroupRule(aCopy), mName(aCopy.mName) { - SetIsNotDOMBinding(); } nsCSSKeyframesRule::~nsCSSKeyframesRule() { } /* virtual */ already_AddRefed<css::Rule> nsCSSKeyframesRule::Clone() const @@ -2223,17 +2223,16 @@ nsCSSKeyframesRule::Clone() const } NS_IMPL_ADDREF_INHERITED(nsCSSKeyframesRule, css::GroupRule) NS_IMPL_RELEASE_INHERITED(nsCSSKeyframesRule, css::GroupRule) // QueryInterface implementation for nsCSSKeyframesRule NS_INTERFACE_MAP_BEGIN(nsCSSKeyframesRule) NS_INTERFACE_MAP_ENTRY(nsIDOMCSSKeyframesRule) - NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CSSKeyframesRule) NS_INTERFACE_MAP_END_INHERITING(GroupRule) #ifdef DEBUG void nsCSSKeyframesRule::List(FILE* out, int32_t aIndent) const { nsAutoCString indentStr; for (int32_t indent = aIndent; --indent >= 0; ) { @@ -2384,23 +2383,28 @@ nsCSSKeyframesRule::DeleteRule(const nsA } return NS_OK; } NS_IMETHODIMP nsCSSKeyframesRule::FindRule(const nsAString& aKey, nsIDOMCSSKeyframeRule** aResult) { + NS_IF_ADDREF(*aResult = FindRule(aKey)); + return NS_OK; +} + +nsCSSKeyframeRule* +nsCSSKeyframesRule::FindRule(const nsAString& aKey) +{ uint32_t index = FindRuleIndexForKey(aKey); if (index == RULE_NOT_FOUND) { - *aResult = nullptr; - } else { - NS_ADDREF(*aResult = static_cast<nsCSSKeyframeRule*>(mRules[index])); + return nullptr; } - return NS_OK; + return static_cast<nsCSSKeyframeRule*>(mRules[index]); } // GroupRule interface /* virtual */ bool nsCSSKeyframesRule::UseForPresentation(nsPresContext* aPresContext, nsMediaQueryResultCacheKey& aKey) { MOZ_ASSERT(false, "should not be called"); @@ -2419,18 +2423,17 @@ nsCSSKeyframesRule::SizeOfIncludingThis( return n; } /* virtual */ JSObject* nsCSSKeyframesRule::WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) { - NS_NOTREACHED("We called SetIsNotDOMBinding() in our constructor"); - return nullptr; + return CSSKeyframesRuleBinding::Wrap(aCx, this, aGivenProto); } // ------------------------------------------- // nsCSSPageStyleDeclaration // nsCSSPageStyleDeclaration::nsCSSPageStyleDeclaration(nsCSSPageRule* aRule) : mRule(aRule)
--- a/layout/style/nsCSSRules.h +++ b/layout/style/nsCSSRules.h @@ -464,17 +464,16 @@ class nsCSSKeyframesRule final : public public nsIDOMCSSKeyframesRule { public: nsCSSKeyframesRule(const nsSubstring& aName, uint32_t aLineNumber, uint32_t aColumnNumber) : mozilla::css::GroupRule(aLineNumber, aColumnNumber) , mName(aName) { - SetIsNotDOMBinding(); } private: nsCSSKeyframesRule(const nsCSSKeyframesRule& aCopy); ~nsCSSKeyframesRule(); public: NS_DECL_ISUPPORTS_INHERITED // Rule methods @@ -486,16 +485,22 @@ public: virtual already_AddRefed<mozilla::css::Rule> Clone() const override; // nsIDOMCSSKeyframesRule interface NS_DECL_NSIDOMCSSKEYFRAMESRULE // WebIDL interface uint16_t Type() const override; void GetCssTextImpl(nsAString& aCssText) const override; + // The XPCOM GetName is OK + // The XPCOM SetName is OK + using mozilla::css::GroupRule::CssRules; + // The XPCOM appendRule is OK, since it never throws + // The XPCOM deleteRule is OK, since it never throws + nsCSSKeyframeRule* FindRule(const nsAString& aKey); // rest of GroupRule virtual bool UseForPresentation(nsPresContext* aPresContext, nsMediaQueryResultCacheKey& aKey) override; const nsString& GetName() { return mName; } virtual size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const override;