Chromium Code Reviews| Index: third_party/WebKit/Source/core/svg/SVGAnimatedHref.h |
| diff --git a/third_party/WebKit/Source/core/svg/SVGAnimatedHref.h b/third_party/WebKit/Source/core/svg/SVGAnimatedHref.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..18ef03d2bbef16f8216b317c69efb3c47c1c6342 |
| --- /dev/null |
| +++ b/third_party/WebKit/Source/core/svg/SVGAnimatedHref.h |
| @@ -0,0 +1,60 @@ |
| +// Copyright 2016 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. |
| + |
| +#ifndef SVGAnimatedHref_h |
| +#define SVGAnimatedHref_h |
| + |
| +#include "core/svg/SVGAnimatedString.h" |
| + |
| +namespace blink { |
| + |
| +// This is an "access wrapper" for the 'href' attribute. It holds one object |
| +// for 'href' in the null/default NS and one for 'href' in the XLink NS. The |
| +// internal objects are the ones added to an SVGElement's property map and |
| +// hence any updates/synchronization/etc via the "attribute DOM" (setAttribute |
| +// and friends) will operate on the internal objects, while users of 'href' |
| +// will be using this interface (which essentially just selects one of the |
| +// internal objects and forwards the operation to it.) |
| +class SVGAnimatedHref final : public SVGAnimatedString { |
|
pdr.
2016/02/09 23:17:07
So much complexity that will bite us in the future
fs
2016/02/10 14:44:46
Well this is actually the less-complex solution...
|
| +public: |
| + static PassRefPtrWillBeRawPtr<SVGAnimatedHref> create(SVGElement* contextElement); |
| + |
| + SVGString* baseValue() { return backingHref()->baseValue(); } |
| + SVGString* currentValue() { return backingHref()->currentValue(); } |
| + const SVGString* currentValue() const { return backingHref()->currentValue(); } |
| + |
| + // None of the below should be called on this interface. |
| + SVGPropertyBase* currentValueBase() override; |
| + const SVGPropertyBase& baseValueBase() const override; |
| + bool isAnimating() const override; |
| + PassRefPtrWillBeRawPtr<SVGPropertyBase> createAnimatedValue() override; |
| + void setAnimatedValue(PassRefPtrWillBeRawPtr<SVGPropertyBase>) override; |
| + void animationEnded() override; |
| + SVGParsingError setBaseValueAsString(const String&) override; |
| + bool needsSynchronizeAttribute() override; |
| + void synchronizeAttribute() override; |
| + |
| + String baseVal() override; |
| + void setBaseVal(const String&, ExceptionState&) override; |
| + String animVal() override; |
| + |
| + bool isSpecified() const { return m_href->isSpecified() || m_xlinkHref->isSpecified(); } |
| + |
| + static bool isKnownAttribute(const QualifiedName&); |
| + void addToPropertyMap(SVGElement*); |
| + |
| + DECLARE_VIRTUAL_TRACE(); |
| + |
| +private: |
| + explicit SVGAnimatedHref(SVGElement* contextElement); |
| + |
| + SVGAnimatedString* backingHref() const; |
| + |
| + RefPtrWillBeMember<SVGAnimatedString> m_href; |
| + RefPtrWillBeMember<SVGAnimatedString> m_xlinkHref; |
| +}; |
| + |
| +} // namespace blink |
| + |
| +#endif // SVGAnimatedHref_h |