WebKit Bugzilla
Attachment 370835 Details for
Bug 185550
: Add referrerpolicy attribute support for <script> elements
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-185550-20190529101749.patch (text/plain), 20.37 KB, created by
Rob Buis
on 2019-05-29 01:17:50 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Rob Buis
Created:
2019-05-29 01:17:50 PDT
Size:
20.37 KB
patch
obsolete
>Subversion Revision: 245803 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index bd93c7f731b34485699086b5562394b2d486f293..201c99f720b495c76580fd77642caef3352aba52 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,40 @@ >+2019-05-28 Rob Buis <rbuis@igalia.com> >+ >+ Add referrerpolicy attribute support for <script> elements >+ https://bugs.webkit.org/show_bug.cgi?id=185550 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * bindings/js/CachedScriptFetcher.cpp: >+ (WebCore::CachedScriptFetcher::requestScriptWithCache const): >+ * bindings/js/CachedScriptFetcher.h: >+ (WebCore::CachedScriptFetcher::CachedScriptFetcher): >+ * dom/InlineClassicScript.h: >+ * dom/LoadableClassicScript.cpp: >+ (WebCore::LoadableClassicScript::create): >+ * dom/LoadableClassicScript.h: >+ * dom/LoadableModuleScript.cpp: >+ (WebCore::LoadableModuleScript::create): >+ (WebCore::LoadableModuleScript::LoadableModuleScript): >+ * dom/LoadableModuleScript.h: >+ * dom/LoadableScript.h: >+ (WebCore::LoadableScript::LoadableScript): >+ * dom/ScriptElement.cpp: >+ (WebCore::ScriptElement::requestClassicScript): >+ (WebCore::ScriptElement::requestModuleScript): >+ * dom/ScriptElement.h: >+ * dom/ScriptElementCachedScriptFetcher.h: >+ (WebCore::ScriptElementCachedScriptFetcher::ScriptElementCachedScriptFetcher): >+ * html/HTMLScriptElement.cpp: >+ (WebCore::HTMLScriptElement::setReferrerPolicyForBindings): >+ (WebCore::HTMLScriptElement::referrerPolicyForBindings const): >+ (WebCore::HTMLScriptElement::referrerPolicy const): >+ * html/HTMLScriptElement.h: >+ * html/HTMLScriptElement.idl: >+ * svg/SVGScriptElement.cpp: >+ (WebCore::SVGScriptElement::referrerPolicy const): >+ * svg/SVGScriptElement.h: >+ > 2019-05-27 Takashi Komori <Takashi.Komori@sony.com> > > [CURL] Fix crashing SocketStreamHandle. >diff --git a/Source/WebCore/bindings/js/CachedScriptFetcher.cpp b/Source/WebCore/bindings/js/CachedScriptFetcher.cpp >index 7c87b23938e433e508c0fb80be9c9e6fde382103..60fc1b24191f2cd0154778c9c87d101b320ffd74 100644 >--- a/Source/WebCore/bindings/js/CachedScriptFetcher.cpp >+++ b/Source/WebCore/bindings/js/CachedScriptFetcher.cpp >@@ -56,6 +56,7 @@ CachedResourceHandle<CachedScript> CachedScriptFetcher::requestScriptWithCache(D > options.contentSecurityPolicyImposition = hasKnownNonce ? ContentSecurityPolicyImposition::SkipPolicyCheck : ContentSecurityPolicyImposition::DoPolicyCheck; > options.sameOriginDataURLFlag = SameOriginDataURLFlag::Set; > options.integrity = WTFMove(integrity); >+ options.referrerPolicy = m_referrerPolicy; > > auto request = createPotentialAccessControlRequest(sourceURL, document, crossOriginMode, WTFMove(options)); > request.upgradeInsecureRequestIfNeeded(document); >diff --git a/Source/WebCore/bindings/js/CachedScriptFetcher.h b/Source/WebCore/bindings/js/CachedScriptFetcher.h >index d5391c697d7cf4f6f5d4079ca272ef77ea9caba7..1db21a19719eb61ff0b3826f4c3ad96ca11dcdc0 100644 >--- a/Source/WebCore/bindings/js/CachedScriptFetcher.h >+++ b/Source/WebCore/bindings/js/CachedScriptFetcher.h >@@ -26,6 +26,7 @@ > #pragma once > > #include "CachedResourceHandle.h" >+#include "ReferrerPolicy.h" > #include <JavaScriptCore/ScriptFetcher.h> > #include <wtf/text/WTFString.h> > >@@ -41,11 +42,12 @@ public: > static Ref<CachedScriptFetcher> create(const String& charset); > > protected: >- CachedScriptFetcher(const String& nonce, const String& charset, const AtomicString& initiatorName, bool isInUserAgentShadowTree) >+ CachedScriptFetcher(const String& nonce, const ReferrerPolicy& referrerPolicy, const String& charset, const AtomicString& initiatorName, bool isInUserAgentShadowTree) > : m_nonce(nonce) > , m_charset(charset) > , m_initiatorName(initiatorName) > , m_isInUserAgentShadowTree(isInUserAgentShadowTree) >+ , m_referrerPolicy(referrerPolicy) > { > } > >@@ -61,6 +63,7 @@ private: > String m_charset; > AtomicString m_initiatorName; > bool m_isInUserAgentShadowTree { false }; >+ ReferrerPolicy m_referrerPolicy { ReferrerPolicy::EmptyString }; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/dom/InlineClassicScript.h b/Source/WebCore/dom/InlineClassicScript.h >index 9fa9f31f4e3f6bd67975ca616a4c2e70c7ad228b..bde6590e2d2cc587c5657699e6f72bd42bcf0bbe 100644 >--- a/Source/WebCore/dom/InlineClassicScript.h >+++ b/Source/WebCore/dom/InlineClassicScript.h >@@ -40,7 +40,7 @@ public: > > private: > InlineClassicScript(const String& nonce, const String& crossOriginMode, const String& charset, const AtomicString& initiatorName, bool isInUserAgentShadowTree) >- : ScriptElementCachedScriptFetcher(nonce, crossOriginMode, charset, initiatorName, isInUserAgentShadowTree) >+ : ScriptElementCachedScriptFetcher(nonce, ReferrerPolicy::EmptyString, crossOriginMode, charset, initiatorName, isInUserAgentShadowTree) > { > } > }; >diff --git a/Source/WebCore/dom/LoadableClassicScript.cpp b/Source/WebCore/dom/LoadableClassicScript.cpp >index d927e95be269a25ae4336a74b00027c1758fe48a..36d5a3be6c5b4b24223a05eadef9a858c4103c24 100644 >--- a/Source/WebCore/dom/LoadableClassicScript.cpp >+++ b/Source/WebCore/dom/LoadableClassicScript.cpp >@@ -35,9 +35,9 @@ > > namespace WebCore { > >-Ref<LoadableClassicScript> LoadableClassicScript::create(const String& nonce, const String& integrityMetadata, const String& crossOriginMode, const String& charset, const AtomicString& initiatorName, bool isInUserAgentShadowTree) >+Ref<LoadableClassicScript> LoadableClassicScript::create(const String& nonce, const String& integrityMetadata, const ReferrerPolicy& policy, const String& crossOriginMode, const String& charset, const AtomicString& initiatorName, bool isInUserAgentShadowTree) > { >- return adoptRef(*new LoadableClassicScript(nonce, integrityMetadata, crossOriginMode, charset, initiatorName, isInUserAgentShadowTree)); >+ return adoptRef(*new LoadableClassicScript(nonce, integrityMetadata, policy, crossOriginMode, charset, initiatorName, isInUserAgentShadowTree)); > } > > LoadableClassicScript::~LoadableClassicScript() >diff --git a/Source/WebCore/dom/LoadableClassicScript.h b/Source/WebCore/dom/LoadableClassicScript.h >index 067644a47d1f9d902b4e196aaeffa8a6f95d4f0f..b2dfbd4c3fdb39933bbb97f623941d6e48a9e610 100644 >--- a/Source/WebCore/dom/LoadableClassicScript.h >+++ b/Source/WebCore/dom/LoadableClassicScript.h >@@ -29,6 +29,7 @@ > #include "CachedResourceHandle.h" > #include "CachedScript.h" > #include "LoadableScript.h" >+#include "ReferrerPolicy.h" > #include <wtf/TypeCasts.h> > > namespace WebCore { >@@ -40,7 +41,7 @@ class LoadableClassicScript final : public LoadableScript, private CachedResourc > public: > virtual ~LoadableClassicScript(); > >- static Ref<LoadableClassicScript> create(const String& nonce, const String& integrity, const String& crossOriginMode, const String& charset, const AtomicString& initiatorName, bool isInUserAgentShadowTree); >+ static Ref<LoadableClassicScript> create(const String& nonce, const String& integrity, const ReferrerPolicy&, const String& crossOriginMode, const String& charset, const AtomicString& initiatorName, bool isInUserAgentShadowTree); > bool isLoaded() const final; > Optional<Error> error() const final; > bool wasCanceled() const final; >@@ -55,8 +56,8 @@ public: > bool load(Document&, const URL&); > > private: >- LoadableClassicScript(const String& nonce, const String& integrity, const String& crossOriginMode, const String& charset, const AtomicString& initiatorName, bool isInUserAgentShadowTree) >- : LoadableScript(nonce, crossOriginMode, charset, initiatorName, isInUserAgentShadowTree) >+ LoadableClassicScript(const String& nonce, const String& integrity, const ReferrerPolicy& policy, const String& crossOriginMode, const String& charset, const AtomicString& initiatorName, bool isInUserAgentShadowTree) >+ : LoadableScript(nonce, policy, crossOriginMode, charset, initiatorName, isInUserAgentShadowTree) > , m_integrity(integrity) > { > } >diff --git a/Source/WebCore/dom/LoadableModuleScript.cpp b/Source/WebCore/dom/LoadableModuleScript.cpp >index 322cd3a7392c9bf0e4570d571275daa367748e21..b72f80203b523ff6612c311167600d0db2993850 100644 >--- a/Source/WebCore/dom/LoadableModuleScript.cpp >+++ b/Source/WebCore/dom/LoadableModuleScript.cpp >@@ -34,13 +34,13 @@ > > namespace WebCore { > >-Ref<LoadableModuleScript> LoadableModuleScript::create(const String& nonce, const String& integrity, const String& crossOriginMode, const String& charset, const AtomicString& initiatorName, bool isInUserAgentShadowTree) >+Ref<LoadableModuleScript> LoadableModuleScript::create(const String& nonce, const String& integrity, const ReferrerPolicy& policy, const String& crossOriginMode, const String& charset, const AtomicString& initiatorName, bool isInUserAgentShadowTree) > { >- return adoptRef(*new LoadableModuleScript(nonce, integrity, crossOriginMode, charset, initiatorName, isInUserAgentShadowTree)); >+ return adoptRef(*new LoadableModuleScript(nonce, integrity, policy, crossOriginMode, charset, initiatorName, isInUserAgentShadowTree)); > } > >-LoadableModuleScript::LoadableModuleScript(const String& nonce, const String& integrity, const String& crossOriginMode, const String& charset, const AtomicString& initiatorName, bool isInUserAgentShadowTree) >- : LoadableScript(nonce, crossOriginMode, charset, initiatorName, isInUserAgentShadowTree) >+LoadableModuleScript::LoadableModuleScript(const String& nonce, const String& integrity, const ReferrerPolicy& policy, const String& crossOriginMode, const String& charset, const AtomicString& initiatorName, bool isInUserAgentShadowTree) >+ : LoadableScript(nonce, policy, crossOriginMode, charset, initiatorName, isInUserAgentShadowTree) > , m_parameters(ModuleFetchParameters::create(integrity)) > { > } >diff --git a/Source/WebCore/dom/LoadableModuleScript.h b/Source/WebCore/dom/LoadableModuleScript.h >index 173dca36aa174c3813182490d1aec6f6f7af64d5..8ea6bf99d6bea25cb598266d8cedf105ff2ab188 100644 >--- a/Source/WebCore/dom/LoadableModuleScript.h >+++ b/Source/WebCore/dom/LoadableModuleScript.h >@@ -37,7 +37,7 @@ class LoadableModuleScript final : public LoadableScript { > public: > virtual ~LoadableModuleScript(); > >- static Ref<LoadableModuleScript> create(const String& nonce, const String& integrity, const String& crossOriginMode, const String& charset, const AtomicString& initiatorName, bool isInUserAgentShadowTree); >+ static Ref<LoadableModuleScript> create(const String& nonce, const String& integrity, const ReferrerPolicy&, const String& crossOriginMode, const String& charset, const AtomicString& initiatorName, bool isInUserAgentShadowTree); > > bool isLoaded() const final; > Optional<Error> error() const final; >@@ -60,7 +60,7 @@ public: > UniquedStringImpl* moduleKey() const { return m_moduleKey.get(); } > > private: >- LoadableModuleScript(const String& nonce, const String& integrity, const String& crossOriginMode, const String& charset, const AtomicString& initiatorName, bool isInUserAgentShadowTree); >+ LoadableModuleScript(const String& nonce, const String& integrity, const ReferrerPolicy&, const String& crossOriginMode, const String& charset, const AtomicString& initiatorName, bool isInUserAgentShadowTree); > > Ref<ModuleFetchParameters> m_parameters; > RefPtr<UniquedStringImpl> m_moduleKey; >diff --git a/Source/WebCore/dom/LoadableScript.h b/Source/WebCore/dom/LoadableScript.h >index 670badf34d8caddd3e5a8ab106a1bc35c4826027..e06f5e8b76db3728ed159a2e6685da6ebaa590be 100644 >--- a/Source/WebCore/dom/LoadableScript.h >+++ b/Source/WebCore/dom/LoadableScript.h >@@ -68,8 +68,8 @@ public: > void removeClient(LoadableScriptClient&); > > protected: >- LoadableScript(const String& nonce, const String& crossOriginMode, const String& charset, const AtomicString& initiatorName, bool isInUserAgentShadowTree) >- : ScriptElementCachedScriptFetcher(nonce, crossOriginMode, charset, initiatorName, isInUserAgentShadowTree) >+ LoadableScript(const String& nonce, const ReferrerPolicy& policy, const String& crossOriginMode, const String& charset, const AtomicString& initiatorName, bool isInUserAgentShadowTree) >+ : ScriptElementCachedScriptFetcher(nonce, policy, crossOriginMode, charset, initiatorName, isInUserAgentShadowTree) > { > } > >diff --git a/Source/WebCore/dom/ScriptElement.cpp b/Source/WebCore/dom/ScriptElement.cpp >index 063d64d2518518d27580f2d2dafaeca6c6c93d9d..113abc46a656e91be17c8df666d13c99d5f9799d 100644 >--- a/Source/WebCore/dom/ScriptElement.cpp >+++ b/Source/WebCore/dom/ScriptElement.cpp >@@ -284,6 +284,7 @@ bool ScriptElement::requestClassicScript(const String& sourceURL) > auto script = LoadableClassicScript::create( > m_element.attributeWithoutSynchronization(HTMLNames::nonceAttr), > m_element.document().settings().subresourceIntegrityEnabled() ? m_element.attributeWithoutSynchronization(HTMLNames::integrityAttr).string() : emptyString(), >+ referrerPolicy(), > m_element.attributeWithoutSynchronization(HTMLNames::crossoriginAttr), > scriptCharset(), > m_element.localName(), >@@ -335,6 +336,7 @@ bool ScriptElement::requestModuleScript(const TextPosition& scriptStartPosition) > auto script = LoadableModuleScript::create( > nonce, > m_element.document().settings().subresourceIntegrityEnabled() ? m_element.attributeWithoutSynchronization(HTMLNames::integrityAttr).string() : emptyString(), >+ referrerPolicy(), > crossOriginMode, > scriptCharset(), > m_element.localName(), >@@ -344,7 +346,7 @@ bool ScriptElement::requestModuleScript(const TextPosition& scriptStartPosition) > return true; > } > >- auto script = LoadableModuleScript::create(nonce, emptyString(), crossOriginMode, scriptCharset(), m_element.localName(), m_element.isInUserAgentShadowTree()); >+ auto script = LoadableModuleScript::create(nonce, emptyString(), referrerPolicy(), crossOriginMode, scriptCharset(), m_element.localName(), m_element.isInUserAgentShadowTree()); > > TextPosition position = m_element.document().isInDocumentWrite() ? TextPosition() : scriptStartPosition; > ScriptSourceCode sourceCode(scriptContent(), URL(m_element.document().url()), position, JSC::SourceProviderSourceType::Module, script.copyRef()); >diff --git a/Source/WebCore/dom/ScriptElement.h b/Source/WebCore/dom/ScriptElement.h >index ac1d7d4dff880fb32ab641d1659b1d422f96ecca..4fed24ce775d8db34feb4403cf9c186fd2943162 100644 >--- a/Source/WebCore/dom/ScriptElement.h >+++ b/Source/WebCore/dom/ScriptElement.h >@@ -23,6 +23,7 @@ > > #include "ContainerNode.h" > #include "LoadableScript.h" >+#include "ReferrerPolicy.h" > #include "UserGestureIndicator.h" > #include <wtf/MonotonicTime.h> > #include <wtf/text/TextPosition.h> >@@ -113,6 +114,7 @@ private: > virtual bool hasDeferAttribute() const = 0; > virtual bool hasSourceAttribute() const = 0; > virtual bool hasNoModuleAttribute() const = 0; >+ virtual ReferrerPolicy referrerPolicy() const = 0; > > Element& m_element; > WTF::OrdinalNumber m_startLineNumber; >diff --git a/Source/WebCore/dom/ScriptElementCachedScriptFetcher.h b/Source/WebCore/dom/ScriptElementCachedScriptFetcher.h >index 03c3896dbed8e462aa9916d8ac7ba68f90ef3fd6..8a759ebc5062f8eba00772765df7c66d156b9a78 100644 >--- a/Source/WebCore/dom/ScriptElementCachedScriptFetcher.h >+++ b/Source/WebCore/dom/ScriptElementCachedScriptFetcher.h >@@ -39,8 +39,8 @@ public: > const String& crossOriginMode() const { return m_crossOriginMode; } > > protected: >- ScriptElementCachedScriptFetcher(const String& nonce, const String& crossOriginMode, const String& charset, const AtomicString& initiatorName, bool isInUserAgentShadowTree) >- : CachedScriptFetcher(nonce, charset, initiatorName, isInUserAgentShadowTree) >+ ScriptElementCachedScriptFetcher(const String& nonce, const ReferrerPolicy& policy, const String& crossOriginMode, const String& charset, const AtomicString& initiatorName, bool isInUserAgentShadowTree) >+ : CachedScriptFetcher(nonce, policy, charset, initiatorName, isInUserAgentShadowTree) > , m_crossOriginMode(crossOriginMode) > { > } >diff --git a/Source/WebCore/html/HTMLScriptElement.cpp b/Source/WebCore/html/HTMLScriptElement.cpp >index 60610984024c18dcceeb02a78c380d946feeaa74..be83843e3b30865653adf91a3e31d0acfeb63458 100644 >--- a/Source/WebCore/html/HTMLScriptElement.cpp >+++ b/Source/WebCore/html/HTMLScriptElement.cpp >@@ -184,4 +184,42 @@ Ref<Element> HTMLScriptElement::cloneElementWithoutAttributesAndChildren(Documen > return adoptRef(*new HTMLScriptElement(tagQName(), targetDocument, false, alreadyStarted())); > } > >+void HTMLScriptElement::setReferrerPolicyForBindings(const AtomicString& value) >+{ >+ setAttributeWithoutSynchronization(referrerpolicyAttr, value); >+} >+ >+String HTMLScriptElement::referrerPolicyForBindings() const >+{ >+ switch (referrerPolicy()) { >+ case ReferrerPolicy::NoReferrer: >+ return "no-referrer"_s; >+ case ReferrerPolicy::UnsafeUrl: >+ return "unsafe-url"_s; >+ case ReferrerPolicy::Origin: >+ return "origin"_s; >+ case ReferrerPolicy::OriginWhenCrossOrigin: >+ return "origin-when-cross-origin"_s; >+ case ReferrerPolicy::SameOrigin: >+ return "same-origin"_s; >+ case ReferrerPolicy::StrictOrigin: >+ return "strict-origin"_s; >+ case ReferrerPolicy::StrictOriginWhenCrossOrigin: >+ return "strict-origin-when-cross-origin"_s; >+ case ReferrerPolicy::NoReferrerWhenDowngrade: >+ return "no-referrer-when-downgrade"_s; >+ case ReferrerPolicy::EmptyString: >+ return { }; >+ } >+ ASSERT_NOT_REACHED(); >+ return { }; >+} >+ >+ReferrerPolicy HTMLScriptElement::referrerPolicy() const >+{ >+ if (RuntimeEnabledFeatures::sharedFeatures().referrerPolicyAttributeEnabled()) >+ return parseReferrerPolicy(attributeWithoutSynchronization(referrerpolicyAttr), ReferrerPolicySource::ReferrerPolicyAttribute).valueOr(ReferrerPolicy::EmptyString); >+ return ReferrerPolicy::EmptyString; >+} >+ > } >diff --git a/Source/WebCore/html/HTMLScriptElement.h b/Source/WebCore/html/HTMLScriptElement.h >index bd1e3ed2f25ede6d92398715d7914793fde0f516..4a0977f34292851a8d9bfa6cdabe683bb8970372 100644 >--- a/Source/WebCore/html/HTMLScriptElement.h >+++ b/Source/WebCore/html/HTMLScriptElement.h >@@ -44,6 +44,10 @@ public: > WEBCORE_EXPORT void setCrossOrigin(const AtomicString&); > WEBCORE_EXPORT String crossOrigin() const; > >+ void setReferrerPolicyForBindings(const AtomicString&); >+ String referrerPolicyForBindings() const; >+ ReferrerPolicy referrerPolicy() const final; >+ > using HTMLElement::ref; > using HTMLElement::deref; > >diff --git a/Source/WebCore/html/HTMLScriptElement.idl b/Source/WebCore/html/HTMLScriptElement.idl >index cb9e6b14e39eec153c3bc72aafb237555f3562a4..6a7fc601fcb7c23bd5a4af0538a530219498b7e8 100644 >--- a/Source/WebCore/html/HTMLScriptElement.idl >+++ b/Source/WebCore/html/HTMLScriptElement.idl >@@ -31,4 +31,5 @@ interface HTMLScriptElement : HTMLElement { > [Reflect] attribute DOMString nonce; > [CEReactions=NotNeeded, Reflect] attribute boolean noModule; > [CEReactions=NotNeeded, Reflect, EnabledBySetting=SubresourceIntegrity] attribute DOMString integrity; >+ [EnabledAtRuntime=ReferrerPolicyAttribute, ImplementedAs=referrerPolicyForBindings, CEReactions=NotNeeded] attribute DOMString referrerPolicy; > }; >diff --git a/Source/WebCore/svg/SVGScriptElement.cpp b/Source/WebCore/svg/SVGScriptElement.cpp >index 1e09454247ea1aa5e88fc75f790523b906fb3945..7d73f3a81e3bce07cf1d02fc48f5ed45266d7be2 100644 >--- a/Source/WebCore/svg/SVGScriptElement.cpp >+++ b/Source/WebCore/svg/SVGScriptElement.cpp >@@ -101,4 +101,9 @@ Ref<Element> SVGScriptElement::cloneElementWithoutAttributesAndChildren(Document > return adoptRef(*new SVGScriptElement(tagQName(), targetDocument, false, alreadyStarted())); > } > >+ReferrerPolicy SVGScriptElement::referrerPolicy() const >+{ >+ return ReferrerPolicy::EmptyString; >+} >+ > } >diff --git a/Source/WebCore/svg/SVGScriptElement.h b/Source/WebCore/svg/SVGScriptElement.h >index f15f3b7cf6f93af148d5032a10dd2b0167afabaf..8313a2d88d12b5f2f72517cac483bb4906b98dd2 100644 >--- a/Source/WebCore/svg/SVGScriptElement.h >+++ b/Source/WebCore/svg/SVGScriptElement.h >@@ -82,6 +82,8 @@ private: > bool filterOutAnimatableAttribute(const QualifiedName& name) const final { return name == SVGNames::typeAttr; } > #endif > >+ ReferrerPolicy referrerPolicy() const final; >+ > PropertyRegistry m_propertyRegistry { *this }; > Timer m_svgLoadEventTimer; > };
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 185550
:
370716
|
370751
|
370759
|
370761
|
370765
|
370768
|
370772
|
370833
|
370835
|
370870
|
370878
|
370884
|
370886
|
370889
|
370892
|
370918
|
370926
|
370928
|
370931
|
370933
|
370936
|
370939
|
374201
|
374204