| 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.
|
|
|