Index: third_party/WebKit/Source/core/dom/ClassicPendingScript.cpp |
diff --git a/third_party/WebKit/Source/core/dom/ClassicPendingScript.cpp b/third_party/WebKit/Source/core/dom/ClassicPendingScript.cpp |
deleted file mode 100644 |
index 2ff50687291613bb34d55af582d2715bc2ebe380..0000000000000000000000000000000000000000 |
--- a/third_party/WebKit/Source/core/dom/ClassicPendingScript.cpp |
+++ /dev/null |
@@ -1,240 +0,0 @@ |
-// 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. |
- |
-#include "core/dom/ClassicPendingScript.h" |
- |
-#include "bindings/core/v8/ScriptSourceCode.h" |
-#include "bindings/core/v8/ScriptState.h" |
-#include "bindings/core/v8/V8Binding.h" |
-#include "core/dom/Document.h" |
-#include "core/dom/TaskRunnerHelper.h" |
-#include "core/frame/LocalFrame.h" |
-#include "core/frame/SubresourceIntegrity.h" |
-#include "platform/loader/fetch/MemoryCache.h" |
- |
-namespace blink { |
- |
-ClassicPendingScript* ClassicPendingScript::Create(ScriptElementBase* element, |
- ScriptResource* resource) { |
- return new ClassicPendingScript(element, resource, TextPosition()); |
-} |
- |
-ClassicPendingScript* ClassicPendingScript::Create( |
- ScriptElementBase* element, |
- const TextPosition& starting_position) { |
- return new ClassicPendingScript(element, nullptr, starting_position); |
-} |
- |
-ClassicPendingScript* ClassicPendingScript::CreateForTesting( |
- ScriptResource* resource) { |
- return new ClassicPendingScript(nullptr, resource, TextPosition(), true); |
-} |
- |
-ClassicPendingScript::ClassicPendingScript( |
- ScriptElementBase* element, |
- ScriptResource* resource, |
- const TextPosition& starting_position, |
- bool is_for_testing) |
- : PendingScript(element, starting_position), |
- integrity_failure_(false), |
- is_for_testing_(is_for_testing) { |
- CheckState(); |
- SetResource(resource); |
- MemoryCoordinator::Instance().RegisterClient(this); |
-} |
- |
-ClassicPendingScript::~ClassicPendingScript() {} |
- |
-NOINLINE void ClassicPendingScript::CheckState() const { |
- // TODO(hiroshige): Turn these CHECK()s into DCHECK() before going to beta. |
- CHECK(is_for_testing_ || GetElement()); |
- CHECK(GetResource() || !streamer_); |
- CHECK(!streamer_ || streamer_->GetResource() == GetResource()); |
-} |
- |
-void ClassicPendingScript::DisposeInternal() { |
- MemoryCoordinator::Instance().UnregisterClient(this); |
- SetResource(nullptr); |
- integrity_failure_ = false; |
- if (streamer_) |
- streamer_->Cancel(); |
- streamer_ = nullptr; |
-} |
- |
-void ClassicPendingScript::StreamingFinished() { |
- CheckState(); |
- DCHECK(GetResource()); |
- if (Client()) |
- Client()->PendingScriptFinished(this); |
-} |
- |
-// Returns true if SRI check passed. |
-static bool CheckScriptResourceIntegrity(Resource* resource, |
- ScriptElementBase* element) { |
- DCHECK_EQ(resource->GetType(), Resource::kScript); |
- ScriptResource* script_resource = ToScriptResource(resource); |
- String integrity_attr = element->IntegrityAttributeValue(); |
- |
- // It is possible to get back a script resource with integrity metadata |
- // for a request with an empty integrity attribute. In that case, the |
- // integrity check should be skipped, so this check ensures that the |
- // integrity attribute isn't empty in addition to checking if the |
- // resource has empty integrity metadata. |
- if (integrity_attr.IsEmpty() || |
- script_resource->IntegrityMetadata().IsEmpty()) |
- return true; |
- |
- switch (script_resource->IntegrityDisposition()) { |
- case ResourceIntegrityDisposition::kPassed: |
- return true; |
- |
- case ResourceIntegrityDisposition::kFailed: |
- // TODO(jww): This should probably also generate a console |
- // message identical to the one produced by |
- // CheckSubresourceIntegrity below. See https://crbug.com/585267. |
- return false; |
- |
- case ResourceIntegrityDisposition::kNotChecked: { |
- if (!resource->ResourceBuffer()) |
- return true; |
- |
- bool passed = SubresourceIntegrity::CheckSubresourceIntegrity( |
- script_resource->IntegrityMetadata(), element->GetDocument(), |
- resource->ResourceBuffer()->Data(), |
- resource->ResourceBuffer()->size(), resource->Url(), *resource); |
- script_resource->SetIntegrityDisposition( |
- passed ? ResourceIntegrityDisposition::kPassed |
- : ResourceIntegrityDisposition::kFailed); |
- return passed; |
- } |
- } |
- |
- NOTREACHED(); |
- return true; |
-} |
- |
-void ClassicPendingScript::NotifyFinished(Resource* resource) { |
- // The following SRI checks need to be here because, unfortunately, fetches |
- // are not done purely according to the Fetch spec. In particular, |
- // different requests for the same resource do not have different |
- // responses; the memory cache can (and will) return the exact same |
- // Resource object. |
- // |
- // For different requests, the same Resource object will be returned and |
- // will not be associated with the particular request. Therefore, when the |
- // body of the response comes in, there's no way to validate the integrity |
- // of the Resource object against a particular request (since there may be |
- // several pending requests all tied to the identical object, and the |
- // actual requests are not stored). |
- // |
- // In order to simulate the correct behavior, Blink explicitly does the SRI |
- // checks here, when a PendingScript tied to a particular request is |
- // finished (and in the case of a StyleSheet, at the point of execution), |
- // while having proper Fetch checks in the fetch module for use in the |
- // fetch JavaScript API. In a future world where the ResourceFetcher uses |
- // the Fetch algorithm, this should be fixed by having separate Response |
- // objects (perhaps attached to identical Resource objects) per request. |
- // |
- // See https://crbug.com/500701 for more information. |
- CheckState(); |
- if (!is_for_testing_ && GetElement()) { |
- integrity_failure_ = !CheckScriptResourceIntegrity(resource, GetElement()); |
- } |
- |
- // If script streaming is in use, the client will be notified in |
- // streamingFinished. |
- if (streamer_) |
- streamer_->NotifyFinished(resource); |
- else if (Client()) |
- Client()->PendingScriptFinished(this); |
-} |
- |
-void ClassicPendingScript::NotifyAppendData(ScriptResource* resource) { |
- if (streamer_) |
- streamer_->NotifyAppendData(resource); |
-} |
- |
-DEFINE_TRACE(ClassicPendingScript) { |
- visitor->Trace(streamer_); |
- ResourceOwner<ScriptResource>::Trace(visitor); |
- MemoryCoordinatorClient::Trace(visitor); |
- PendingScript::Trace(visitor); |
-} |
- |
-ClassicScript* ClassicPendingScript::GetSource(const KURL& document_url, |
- bool& error_occurred) const { |
- CheckState(); |
- |
- error_occurred = this->ErrorOccurred(); |
- if (GetResource()) { |
- DCHECK(GetResource()->IsLoaded()); |
- if (streamer_ && !streamer_->StreamingSuppressed()) |
- return ClassicScript::Create(ScriptSourceCode(streamer_, GetResource())); |
- return ClassicScript::Create(ScriptSourceCode(GetResource())); |
- } |
- |
- return ClassicScript::Create(ScriptSourceCode( |
- GetElement()->TextContent(), document_url, StartingPosition())); |
-} |
- |
-void ClassicPendingScript::SetStreamer(ScriptStreamer* streamer) { |
- DCHECK(!streamer_); |
- DCHECK(!IsWatchingForLoad()); |
- streamer_ = streamer; |
- CheckState(); |
-} |
- |
-bool ClassicPendingScript::IsReady() const { |
- CheckState(); |
- if (GetResource()) { |
- return GetResource()->IsLoaded() && (!streamer_ || streamer_->IsFinished()); |
- } |
- |
- return true; |
-} |
- |
-bool ClassicPendingScript::ErrorOccurred() const { |
- CheckState(); |
- if (GetResource()) |
- return GetResource()->ErrorOccurred() || integrity_failure_; |
- |
- return false; |
-} |
- |
-void ClassicPendingScript::OnPurgeMemory() { |
- CheckState(); |
- if (!streamer_) |
- return; |
- streamer_->Cancel(); |
- streamer_ = nullptr; |
-} |
- |
-void ClassicPendingScript::StartStreamingIfPossible( |
- Document* document, |
- ScriptStreamer::Type streamer_type) { |
- if (!document->GetFrame()) |
- return; |
- |
- ScriptState* script_state = ToScriptStateForMainWorld(document->GetFrame()); |
- if (!script_state) |
- return; |
- |
- ScriptStreamer::StartStreaming( |
- this, streamer_type, document->GetFrame()->GetSettings(), script_state, |
- TaskRunnerHelper::Get(TaskType::kNetworking, document)); |
-} |
- |
-bool ClassicPendingScript::WasCanceled() const { |
- return GetResource()->WasCanceled(); |
-} |
- |
-KURL ClassicPendingScript::Url() const { |
- return GetResource()->Url(); |
-} |
- |
-void ClassicPendingScript::RemoveFromMemoryCache() { |
- GetMemoryCache()->Remove(GetResource()); |
-} |
- |
-} // namespace blink |