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