diff options
Diffstat (limited to 'Source/WebCore/dom/PendingScript.h')
-rw-r--r-- | Source/WebCore/dom/PendingScript.h | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/Source/WebCore/dom/PendingScript.h b/Source/WebCore/dom/PendingScript.h new file mode 100644 index 0000000..fcbe06e --- /dev/null +++ b/Source/WebCore/dom/PendingScript.h @@ -0,0 +1,107 @@ +/* + * Copyright (C) 2010 Google, Inc. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef PendingScript_h +#define PendingScript_h + +#include "CachedResourceClient.h" +#include "CachedResourceHandle.h" +#include <wtf/text/TextPosition.h> +#include <wtf/PassRefPtr.h> + +namespace WebCore { + +class CachedScript; +class Element; + +// A container for an external script which may be loaded and executed. +// +// A CachedResourceHandle alone does not prevent the underlying CachedResource +// from purging its data buffer. This class holds a dummy client open for its +// lifetime in order to guarantee that the data buffer will not be purged. +class PendingScript : public CachedResourceClient { +public: + PendingScript() + : m_watchingForLoad(false) + , m_startingPosition(TextPosition1::belowRangePosition()) + { + } + + PendingScript(Element* element, CachedScript* cachedScript) + : m_watchingForLoad(false) + , m_element(element) + { + setCachedScript(cachedScript); + } + + PendingScript(const PendingScript& other) + : CachedResourceClient(other) + , m_watchingForLoad(other.m_watchingForLoad) + , m_element(other.m_element) + , m_startingPosition(other.m_startingPosition) + { + setCachedScript(other.cachedScript()); + } + + ~PendingScript(); + + PendingScript& operator=(const PendingScript& other) + { + if (this == &other) + return *this; + + m_watchingForLoad = other.m_watchingForLoad; + m_element = other.m_element; + m_startingPosition = other.m_startingPosition; + setCachedScript(other.cachedScript()); + + return *this; + } + + TextPosition1 startingPosition() const { return m_startingPosition; } + void setStartingPosition(const TextPosition1& position) { m_startingPosition = position; } + + bool watchingForLoad() const { return m_watchingForLoad; } + void setWatchingForLoad(bool b) { m_watchingForLoad = b; } + + Element* element() const { return m_element.get(); } + void setElement(Element* element) { m_element = element; } + PassRefPtr<Element> releaseElementAndClear(); + + CachedScript* cachedScript() const; + void setCachedScript(CachedScript*); + + virtual void notifyFinished(CachedResource*); + +private: + bool m_watchingForLoad; + RefPtr<Element> m_element; + TextPosition1 m_startingPosition; // Only used for inline script tags. + CachedResourceHandle<CachedScript> m_cachedScript; +}; + +} + +#endif |