Commit a91b046f authored by haraken@chromium.org's avatar haraken@chromium.org

Add a pure virtual method to the GarbageCollectedMixin class

It's easy to miss adding USING_GARBAGE_COLLECTED_MIXIN macros to classes
that inherit from GarbageCollectedMixin. To avoid the programming error,
this CL adds a pure virtual method to the GarbageCollectedMixin class.
If we miss the USING_GARBAGE_COLLECTED_MIXIN macro, we'll hit a compile error.

This CL also fixes existing programming errors.

BUG=420515

Review URL: https://codereview.chromium.org/659953002

git-svn-id: svn://svn.chromium.org/blink/trunk@183799 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent c988f437
...@@ -14,6 +14,8 @@ public: ...@@ -14,6 +14,8 @@ public:
// This callback is called when all data pushed to parser has been consumed. // This callback is called when all data pushed to parser has been consumed.
virtual void notifyParserStopped() = 0; virtual void notifyParserStopped() = 0;
virtual void trace(Visitor*) { }
protected: protected:
DocumentParserClient() { } DocumentParserClient() { }
}; };
......
...@@ -64,7 +64,8 @@ namespace blink { ...@@ -64,7 +64,8 @@ namespace blink {
class TreeScope; class TreeScope;
class VisiblePosition; class VisiblePosition;
class LocalFrame : public Frame, public WillBeHeapSupplementable<LocalFrame> { class LocalFrame : public Frame, public WillBeHeapSupplementable<LocalFrame> {
WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(LocalFrame);
public: public:
static PassRefPtrWillBeRawPtr<LocalFrame> create(FrameLoaderClient*, FrameHost*, FrameOwner*); static PassRefPtrWillBeRawPtr<LocalFrame> create(FrameLoaderClient*, FrameHost*, FrameOwner*);
......
...@@ -233,6 +233,7 @@ void HTMLImportLoader::trace(Visitor* visitor) ...@@ -233,6 +233,7 @@ void HTMLImportLoader::trace(Visitor* visitor)
visitor->trace(m_document); visitor->trace(m_document);
visitor->trace(m_writer); visitor->trace(m_writer);
visitor->trace(m_microtaskQueue); visitor->trace(m_microtaskQueue);
DocumentParserClient::trace(visitor);
} }
} // namespace blink } // namespace blink
...@@ -55,6 +55,7 @@ class HTMLImportsController; ...@@ -55,6 +55,7 @@ class HTMLImportsController;
// //
// //
class HTMLImportLoader final : public NoBaseWillBeGarbageCollectedFinalized<HTMLImportLoader>, public ResourceOwner<RawResource>, public DocumentParserClient { class HTMLImportLoader final : public NoBaseWillBeGarbageCollectedFinalized<HTMLImportLoader>, public ResourceOwner<RawResource>, public DocumentParserClient {
WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(HTMLImportLoader);
public: public:
enum State { enum State {
StateLoading, StateLoading,
......
...@@ -1662,6 +1662,7 @@ void XMLHttpRequest::trace(Visitor* visitor) ...@@ -1662,6 +1662,7 @@ void XMLHttpRequest::trace(Visitor* visitor)
visitor->trace(m_upload); visitor->trace(m_upload);
visitor->trace(m_blobLoader); visitor->trace(m_blobLoader);
XMLHttpRequestEventTarget::trace(visitor); XMLHttpRequestEventTarget::trace(visitor);
DocumentParserClient::trace(visitor);
} }
} // namespace blink } // namespace blink
...@@ -15,6 +15,7 @@ class Presentation final ...@@ -15,6 +15,7 @@ class Presentation final
, public EventTargetWithInlineData , public EventTargetWithInlineData
, public ContextLifecycleObserver { , public ContextLifecycleObserver {
DEFINE_EVENT_TARGET_REFCOUNTING_WILL_BE_REMOVED(RefCountedGarbageCollected<Presentation>); DEFINE_EVENT_TARGET_REFCOUNTING_WILL_BE_REMOVED(RefCountedGarbageCollected<Presentation>);
WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(Presentation);
DEFINE_WRAPPERTYPEINFO(); DEFINE_WRAPPERTYPEINFO();
public: public:
static Presentation* create(ExecutionContext*); static Presentation* create(ExecutionContext*);
......
...@@ -19,6 +19,7 @@ namespace blink { ...@@ -19,6 +19,7 @@ namespace blink {
// ScreenOrientationDispatcher is listening, that means that the platform should // ScreenOrientationDispatcher is listening, that means that the platform should
// be polling if required. // be polling if required.
class ScreenOrientationDispatcher final : public GarbageCollectedFinalized<ScreenOrientationDispatcher>, public PlatformEventDispatcher { class ScreenOrientationDispatcher final : public GarbageCollectedFinalized<ScreenOrientationDispatcher>, public PlatformEventDispatcher {
USING_GARBAGE_COLLECTED_MIXIN(ScreenOrientationDispatcher);
public: public:
static ScreenOrientationDispatcher& instance(); static ScreenOrientationDispatcher& instance();
......
...@@ -585,8 +585,8 @@ template<typename T> bool ObjectAliveTrait<T>::isHeapObjectAlive(Visitor* visito ...@@ -585,8 +585,8 @@ template<typename T> bool ObjectAliveTrait<T>::isHeapObjectAlive(Visitor* visito
class PLATFORM_EXPORT GarbageCollectedMixin { class PLATFORM_EXPORT GarbageCollectedMixin {
public: public:
virtual void adjustAndMark(Visitor*) const { }; virtual void adjustAndMark(Visitor*) const = 0;
virtual bool isHeapObjectAlive(Visitor*) const { return true; }; virtual bool isHeapObjectAlive(Visitor*) const = 0;
virtual void trace(Visitor*) { } virtual void trace(Visitor*) { }
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment