Index: third_party/WebKit/Source/core/dom/ClassicPendingScript.h |
diff --git a/third_party/WebKit/Source/core/dom/PendingScript.h b/third_party/WebKit/Source/core/dom/ClassicPendingScript.h |
similarity index 27% |
copy from third_party/WebKit/Source/core/dom/PendingScript.h |
copy to third_party/WebKit/Source/core/dom/ClassicPendingScript.h |
index 0be3dcfaacfa6df6aabdf69964b4fca89ff747e7..1874164f003d7602c2c83f2e81139fd2d7387fad 100644 |
--- a/third_party/WebKit/Source/core/dom/PendingScript.h |
+++ b/third_party/WebKit/Source/core/dom/ClassicPendingScript.h |
@@ -1,120 +1,82 @@ |
-/* |
- * 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 |
+// Copyright 2017 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef ClassicPendingScript_h |
+#define ClassicPendingScript_h |
#include "bindings/core/v8/ScriptStreamer.h" |
-#include "core/CoreExport.h" |
-#include "core/dom/ScriptElementBase.h" |
+#include "core/dom/ClassicScript.h" |
+#include "core/dom/PendingScript.h" |
#include "core/loader/resource/ScriptResource.h" |
#include "platform/MemoryCoordinator.h" |
-#include "platform/heap/Handle.h" |
#include "platform/loader/fetch/ResourceOwner.h" |
-#include "platform/wtf/Noncopyable.h" |
-#include "platform/wtf/text/TextPosition.h" |
namespace blink { |
-class PendingScript; |
-class ClassicScript; |
- |
-class CORE_EXPORT PendingScriptClient : public GarbageCollectedMixin { |
- public: |
- virtual ~PendingScriptClient() {} |
- |
- // Invoked when the pending script has finished loading. This could be during |
- // |watchForLoad| (if the pending script was already ready), or when the |
- // resource loads (if script streaming is not occurring), or when script |
- // streaming finishes. |
- virtual void PendingScriptFinished(PendingScript*) = 0; |
- |
- DEFINE_INLINE_VIRTUAL_TRACE() {} |
-}; |
- |
-// A container for an external script which may be loaded and executed. |
+// PendingScript for a classic script |
+// https://html.spec.whatwg.org/#classic-script. |
// |
// TODO(kochi): The comment below is from pre-oilpan age and may not be correct |
// now. |
// A RefPtr alone does not prevent the underlying Resource 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 CORE_EXPORT PendingScript final |
- : public GarbageCollectedFinalized<PendingScript>, |
+class CORE_EXPORT ClassicPendingScript final |
+ : public PendingScript, |
public ResourceOwner<ScriptResource>, |
public MemoryCoordinatorClient { |
- USING_GARBAGE_COLLECTED_MIXIN(PendingScript); |
- USING_PRE_FINALIZER(PendingScript, Dispose); |
- WTF_MAKE_NONCOPYABLE(PendingScript); |
+ USING_GARBAGE_COLLECTED_MIXIN(ClassicPendingScript); |
+ |
+ // In order to call Dispose() before ResourceOwner's prefinalizer, we |
+ // also register ClassicPendingScript::Dispose() as the prefinalizer of |
+ // ClassicPendingScript here. https://crbug.com/711703 |
+ USING_PRE_FINALIZER(ClassicPendingScript, Dispose); |
public: |
// For script from an external file. |
- static PendingScript* Create(ScriptElementBase*, ScriptResource*); |
+ static ClassicPendingScript* Create(ScriptElementBase*, ScriptResource*); |
// For inline script. |
- static PendingScript* Create(ScriptElementBase*, const TextPosition&); |
- |
- static PendingScript* CreateForTesting(ScriptResource*); |
- |
- ~PendingScript() override; |
- |
- TextPosition StartingPosition() const { return starting_position_; } |
- void MarkParserBlockingLoadStartTime(); |
- // Returns the time the load of this script started blocking the parser, or |
- // zero if this script hasn't yet blocked the parser, in |
- // monotonicallyIncreasingTime. |
- double ParserBlockingLoadStartTime() const { |
- return parser_blocking_load_start_time_; |
- } |
- |
- void WatchForLoad(PendingScriptClient*); |
- void StopWatchingForLoad(); |
- |
- ScriptElementBase* GetElement() const; |
+ static ClassicPendingScript* Create(ScriptElementBase*, const TextPosition&); |
- DECLARE_TRACE(); |
+ static ClassicPendingScript* CreateForTesting(ScriptResource*); |
- ClassicScript* GetSource(const KURL& document_url, |
- bool& error_occurred) const; |
+ ~ClassicPendingScript() override; |
void SetStreamer(ScriptStreamer*); |
void StreamingFinished(); |
- bool IsReady() const; |
- bool ErrorOccurred() const; |
+ DECLARE_TRACE(); |
- void StartStreamingIfPossible(Document*, ScriptStreamer::Type); |
+ blink::ScriptType GetScriptType() const override { |
+ return blink::ScriptType::kClassic; |
+ } |
+ |
+ ClassicScript* GetSource(const KURL& document_url, |
+ bool& error_occurred) const override; |
+ bool IsReady() const override; |
+ KURL Url() const override; |
+ bool IsExternal() const override { return GetResource(); } |
+ bool ErrorOccurred() const override; |
+ bool WasCanceled() const override; |
+ void StartStreamingIfPossible(Document*, ScriptStreamer::Type) override; |
+ void RemoveFromMemoryCache() override; |
+ void DisposeInternal() override; |
+ |
+ // Just used as the prefinalizer, does the same as PendingScript::Dispose(). |
+ // We define Dispose() with NOINLINE in ClassicPendingScript just to make |
+ // the prefinalizers of PendingScript and ClassicPendingScript have |
+ // different addresses to avoid assertion failures on Windows test bots. |
void Dispose(); |
private: |
- PendingScript(ScriptElementBase*, |
- ScriptResource*, |
- const TextPosition&, |
- bool is_for_testing = false); |
- PendingScript() = delete; |
+ ClassicPendingScript(ScriptElementBase*, |
+ ScriptResource*, |
+ const TextPosition&, |
+ bool is_for_testing = false); |
+ ClassicPendingScript() = delete; |
- void CheckState() const; |
+ void CheckState() const override; |
// ScriptResourceClient |
void NotifyFinished(Resource*) override; |
@@ -124,19 +86,9 @@ class CORE_EXPORT PendingScript final |
// MemoryCoordinatorClient |
void OnPurgeMemory() override; |
- bool watching_for_load_; |
- |
- // |m_element| must points to the corresponding ScriptLoader's |
- // ScriptElementBase and thus must be non-null before dispose() is called |
- // (except for unit tests). |
- Member<ScriptElementBase> element_; |
- |
- TextPosition starting_position_; // Only used for inline script tags. |
bool integrity_failure_; |
- double parser_blocking_load_start_time_; |
Member<ScriptStreamer> streamer_; |
- Member<PendingScriptClient> client_; |
// This flag is used to skip non-null checks of |m_element| in unit |
// tests, because |m_element| can be null in unit tests. |