Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(513)

Unified Diff: third_party/WebKit/Source/core/svg/SVGTreeScopeResources.h

Issue 2824823003: DOM-based SVG resource tracking (Closed)
Patch Set: Update baselines Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/svg/SVGTreeScopeResources.h
diff --git a/third_party/WebKit/Source/core/svg/SVGTreeScopeResources.h b/third_party/WebKit/Source/core/svg/SVGTreeScopeResources.h
index 437f5f87a81eae2aef83c8169cc28a4c28b53827..f0025016a639d4be61048c6785cefeef5c424077 100644
--- a/third_party/WebKit/Source/core/svg/SVGTreeScopeResources.h
+++ b/third_party/WebKit/Source/core/svg/SVGTreeScopeResources.h
@@ -5,6 +5,7 @@
#ifndef SVGTreeScopeResources_h
#define SVGTreeScopeResources_h
+#include "core/dom/IdTargetObserver.h"
#include "platform/heap/Handle.h"
#include "platform/wtf/Forward.h"
#include "platform/wtf/HashMap.h"
@@ -14,8 +15,9 @@
namespace blink {
class Element;
-class TreeScope;
class LayoutSVGResourceContainer;
+class SVGElement;
+class TreeScope;
// This class keeps track of SVG resources and pending references to such for a
// TreeScope. It's per-TreeScope because that matches the lookup scope of an
@@ -28,36 +30,40 @@ class SVGTreeScopeResources
explicit SVGTreeScopeResources(TreeScope*);
~SVGTreeScopeResources();
- void UpdateResource(const AtomicString& id, LayoutSVGResourceContainer*);
- void UpdateResource(const AtomicString& old_id,
- const AtomicString& new_id,
- LayoutSVGResourceContainer*);
- void RemoveResource(const AtomicString& id, LayoutSVGResourceContainer*);
- LayoutSVGResourceContainer* ResourceById(const AtomicString& id) const;
-
- // Pending resources are such which are referenced by any object in the SVG
- // document, but do NOT exist yet. For instance, dynamically built gradients
- // / patterns / clippers...
- void AddPendingResource(const AtomicString& id, Element&);
- bool IsElementPendingResource(Element&, const AtomicString& id) const;
- void NotifyResourceAvailable(const AtomicString& id);
- void RemoveElementFromPendingResources(Element&);
+ class Resource : public IdTargetObserver {
+ public:
+ Resource(TreeScope&, const AtomicString& id);
+ ~Resource() override;
- DECLARE_TRACE();
+ Element* Target() const { return target_; }
+ LayoutSVGResourceContainer* ResourceContainer() const;
- private:
- void ClearHasPendingResourcesIfPossible(Element&);
+ void AddWatch(SVGElement&);
+ void RemoveWatch(SVGElement&);
+
+ bool IsEmpty() const;
+
+ DECLARE_TRACE();
- using SVGPendingElements = HeapHashSet<Member<Element>>;
- using ResourceMap = HashMap<AtomicString, LayoutSVGResourceContainer*>;
+ void NotifyResourceClients();
- void RegisterResource(const AtomicString& id, LayoutSVGResourceContainer*);
- void UnregisterResource(ResourceMap::iterator);
- void NotifyPendingClients(const AtomicString& id);
+ private:
+ void IdTargetChanged() override;
- ResourceMap resources_;
- // Resources that are pending.
- HeapHashMap<AtomicString, Member<SVGPendingElements>> pending_resources_;
+ Member<TreeScope> tree_scope_;
+ Member<Element> target_;
+ HeapHashSet<Member<SVGElement>> pending_clients_;
+ };
+ Resource* ResourceForId(const AtomicString& id);
+ Resource* ExistingResourceForId(const AtomicString& id) const;
+
+ void RemoveUnreferencedResources();
+ void RemoveWatchesForElement(SVGElement&);
+
+ DECLARE_TRACE();
+
+ private:
+ HeapHashMap<AtomicString, Member<Resource>> resources_;
Member<TreeScope> tree_scope_;
};
« no previous file with comments | « third_party/WebKit/Source/core/svg/SVGPatternElement.h ('k') | third_party/WebKit/Source/core/svg/SVGTreeScopeResources.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698