Commit 7419e70c authored by sigbjornf@opera.com's avatar sigbjornf@opera.com

Oilpan: move ScriptLoader to the heap.

So as to be able to trace its PendingScript part object.

R=haraken
BUG=

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

git-svn-id: svn://svn.chromium.org/blink/trunk@183909 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 33e547db
......@@ -128,6 +128,6 @@ private:
RefPtr<ScriptStreamer> m_streamer;
};
}
} // namespace blink
#endif
#endif // PendingScript_h
......@@ -78,6 +78,12 @@ ScriptLoader::~ScriptLoader()
m_pendingScript.stopWatchingForLoad(this);
}
void ScriptLoader::trace(Visitor* visitor)
{
visitor->trace(m_element);
visitor->trace(m_pendingScript);
}
void ScriptLoader::didNotifySubtreeInsertionsToDocument()
{
if (!m_parserInserted)
......@@ -366,7 +372,8 @@ void ScriptLoader::execute()
ASSERT(m_pendingScript.resource());
bool errorOccurred = false;
ScriptSourceCode source = m_pendingScript.getSource(KURL(), errorOccurred);
RefPtr<Element> element = m_pendingScript.releaseElementAndClear();
RefPtrWillBeRawPtr<Element> element = m_pendingScript.releaseElementAndClear();
ALLOW_UNUSED_LOCAL(element);
if (errorOccurred) {
dispatchErrorEvent();
} else if (!m_resource->wasCanceled()) {
......@@ -449,4 +456,4 @@ ScriptLoader* toScriptLoaderIfPossible(Element* element)
return 0;
}
}
} // namespace blink
......@@ -36,10 +36,15 @@ class ScriptLoaderClient;
class ScriptSourceCode;
class ScriptLoader final : private ScriptResourceClient {
class ScriptLoader final : public NoBaseWillBeGarbageCollectedFinalized<ScriptLoader>, private ScriptResourceClient {
public:
static PassOwnPtr<ScriptLoader> create(Element*, bool createdByParser, bool isEvaluated);
static PassOwnPtrWillBeRawPtr<ScriptLoader> create(Element* element, bool createdByParser, bool isEvaluated)
{
return adoptPtrWillBeNoop(new ScriptLoader(element, createdByParser, isEvaluated));
}
virtual ~ScriptLoader();
virtual void trace(Visitor*);
Element* element() const { return m_element; }
......@@ -88,10 +93,14 @@ private:
// ResourceClient
virtual void notifyFinished(Resource*) override;
// FIXME: Oilpan: This should become a Member once ResourceClient is moved to the heap.
Element* m_element;
RawPtrWillBeMember<Element> m_element;
ResourcePtr<ScriptResource> m_resource;
WTF::OrdinalNumber m_startLineNumber;
String m_characterEncoding;
String m_fallbackCharacterEncoding;
PendingScript m_pendingScript;
bool m_parserInserted : 1;
bool m_isExternalScript : 1;
bool m_alreadyStarted : 1;
......@@ -101,20 +110,10 @@ private:
bool m_willExecuteWhenDocumentFinishedParsing : 1;
bool m_forceAsync : 1;
bool m_willExecuteInOrder : 1;
String m_characterEncoding;
String m_fallbackCharacterEncoding;
PendingScript m_pendingScript;
};
ScriptLoader* toScriptLoaderIfPossible(Element*);
inline PassOwnPtr<ScriptLoader> ScriptLoader::create(Element* element, bool createdByParser, bool isEvaluated)
{
return adoptPtr(new ScriptLoader(element, createdByParser, isEvaluated));
}
}
} // namespace blink
#endif
#endif // ScriptLoader_h
......@@ -123,7 +123,7 @@ void ScriptRunner::timerFired(Timer<ScriptRunner>* timer)
RefPtrWillBeRawPtr<Document> protect(m_document.get());
Vector<ScriptLoader*> scriptLoaders;
WillBeHeapVector<RawPtrWillBeMember<ScriptLoader> > scriptLoaders;
scriptLoaders.swap(m_scriptsToExecuteSoon);
size_t numInOrderScriptsToExecute = 0;
......
......@@ -69,9 +69,10 @@ private:
void addPendingAsyncScript(ScriptLoader*);
RawPtrWillBeMember<Document> m_document;
Vector<ScriptLoader*> m_scriptsToExecuteInOrder;
Vector<ScriptLoader*> m_scriptsToExecuteSoon; // http://www.whatwg.org/specs/web-apps/current-work/#set-of-scripts-that-will-execute-as-soon-as-possible
HashSet<ScriptLoader*> m_pendingAsyncScripts;
WillBeHeapVector<RawPtrWillBeMember<ScriptLoader> > m_scriptsToExecuteInOrder;
// http://www.whatwg.org/specs/web-apps/current-work/#set-of-scripts-that-will-execute-as-soon-as-possible
WillBeHeapVector<RawPtrWillBeMember<ScriptLoader> > m_scriptsToExecuteSoon;
WillBeHeapHashSet<RawPtrWillBeMember<ScriptLoader> > m_pendingAsyncScripts;
Timer<ScriptRunner> m_timer;
};
......
......@@ -208,4 +208,10 @@ PassRefPtrWillBeRawPtr<Element> HTMLScriptElement::cloneElementWithoutAttributes
return adoptRefWillBeNoop(new HTMLScriptElement(document(), false, m_loader->alreadyStarted()));
}
void HTMLScriptElement::trace(Visitor* visitor)
{
visitor->trace(m_loader);
HTMLElement::trace(visitor);
}
}
......@@ -46,6 +46,8 @@ public:
ScriptLoader* loader() const { return m_loader.get(); }
virtual void trace(Visitor*) override;
private:
HTMLScriptElement(Document&, bool wasInsertedByParser, bool alreadyStarted);
......@@ -74,7 +76,7 @@ private:
virtual PassRefPtrWillBeRawPtr<Element> cloneElementWithoutAttributesAndChildren() override;
OwnPtr<ScriptLoader> m_loader;
OwnPtrWillBeMember<ScriptLoader> m_loader;
};
} // namespace blink
......
......@@ -178,4 +178,10 @@ bool SVGScriptElement::isAnimatableAttribute(const QualifiedName& name) const
}
#endif
void SVGScriptElement::trace(Visitor* visitor)
{
visitor->trace(m_loader);
SVGElement::trace(visitor);
}
} // namespace blink
......@@ -46,6 +46,8 @@ public:
virtual bool isAnimatableAttribute(const QualifiedName&) const override;
#endif
virtual void trace(Visitor*) override;
private:
SVGScriptElement(Document&, bool wasInsertedByParser, bool alreadyStarted);
virtual ~SVGScriptElement();
......@@ -80,9 +82,8 @@ private:
virtual Timer<SVGElement>* svgLoadEventTimer() override { return &m_svgLoadEventTimer; }
Timer<SVGElement> m_svgLoadEventTimer;
OwnPtr<ScriptLoader> m_loader;
OwnPtrWillBeMember<ScriptLoader> m_loader;
};
} // namespace blink
......
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