Build cleanly with GCC 9
[WebKit-https.git] / Source / WebCore / dom / PendingScript.h
1 /*
2  * Copyright (C) 2010 Google, Inc. All Rights Reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
24  */
25
26 #pragma once
27
28 #include "LoadableScript.h"
29 #include "LoadableScriptClient.h"
30 #include <wtf/Ref.h>
31 #include <wtf/RefCounted.h>
32 #include <wtf/text/TextPosition.h>
33
34 namespace WebCore {
35
36 class CachedScript;
37 class PendingScriptClient;
38 class ScriptElement;
39
40 // A container for scripts which may be loaded and executed.
41 // This can hold LoadableScript and non external inline script.
42 class PendingScript final : public RefCounted<PendingScript>, public LoadableScriptClient {
43 public:
44     static Ref<PendingScript> create(ScriptElement&, LoadableScript&);
45     static Ref<PendingScript> create(ScriptElement&, TextPosition scriptStartPosition);
46
47     virtual ~PendingScript();
48
49     TextPosition startingPosition() const { return m_startingPosition; }
50     void setStartingPosition(const TextPosition& position) { m_startingPosition = position; }
51
52     bool watchingForLoad() const { return needsLoading() && m_client; }
53
54     ScriptElement& element() { return m_element.get(); }
55     const ScriptElement& element() const { return m_element.get(); }
56
57     LoadableScript* loadableScript() const;
58     bool needsLoading() const { return loadableScript(); }
59
60     bool isLoaded() const;
61     bool error() const;
62
63     void notifyFinished(LoadableScript&) override;
64
65     void setClient(PendingScriptClient&);
66     void clearClient();
67
68 private:
69     PendingScript(ScriptElement&, LoadableScript&);
70     PendingScript(ScriptElement&, TextPosition startingPosition);
71
72     void notifyClientFinished();
73
74     Ref<ScriptElement> m_element;
75     TextPosition m_startingPosition; // Only used for inline script tags.
76     RefPtr<LoadableScript> m_loadableScript;
77     PendingScriptClient* m_client { nullptr };
78 };
79
80 inline LoadableScript* PendingScript::loadableScript() const
81 {
82     return m_loadableScript.get();
83 }
84
85 }