| OLD | NEW |
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "core/dom/ClassicPendingScript.h" | 5 #include "core/dom/ClassicPendingScript.h" |
| 6 | 6 |
| 7 #include "bindings/core/v8/ScriptSourceCode.h" | 7 #include "bindings/core/v8/ScriptSourceCode.h" |
| 8 #include "bindings/core/v8/ScriptState.h" | 8 #include "bindings/core/v8/ScriptState.h" |
| 9 #include "bindings/core/v8/ScriptStreamer.h" | 9 #include "bindings/core/v8/ScriptStreamer.h" |
| 10 #include "bindings/core/v8/V8BindingForCore.h" | 10 #include "bindings/core/v8/V8BindingForCore.h" |
| 11 #include "core/dom/Document.h" | 11 #include "core/dom/Document.h" |
| 12 #include "core/dom/TaskRunnerHelper.h" | 12 #include "core/dom/TaskRunnerHelper.h" |
| 13 #include "core/frame/LocalFrame.h" | 13 #include "core/frame/LocalFrame.h" |
| 14 #include "core/frame/SubresourceIntegrity.h" | 14 #include "core/frame/SubresourceIntegrity.h" |
| 15 #include "platform/loader/fetch/MemoryCache.h" | 15 #include "platform/loader/fetch/MemoryCache.h" |
| 16 | 16 |
| 17 namespace blink { | 17 namespace blink { |
| 18 | 18 |
| 19 ClassicPendingScript* ClassicPendingScript::Create(ScriptElementBase* element, | 19 ClassicPendingScript* ClassicPendingScript::Create(ScriptElementBase* element, |
| 20 ScriptResource* resource) { | 20 ScriptResource* resource) { |
| 21 return new ClassicPendingScript(element, resource, TextPosition()); | 21 return new ClassicPendingScript(element, resource, TextPosition()); |
| 22 } | 22 } |
| 23 | 23 |
| 24 ClassicPendingScript* ClassicPendingScript::Create( | 24 ClassicPendingScript* ClassicPendingScript::Create( |
| 25 ScriptElementBase* element, | 25 ScriptElementBase* element, |
| 26 const TextPosition& starting_position) { | 26 const TextPosition& starting_position) { |
| 27 return new ClassicPendingScript(element, nullptr, starting_position); | 27 return new ClassicPendingScript(element, nullptr, starting_position); |
| 28 } | 28 } |
| 29 | 29 |
| 30 ClassicPendingScript* ClassicPendingScript::CreateForTesting( | |
| 31 ScriptResource* resource) { | |
| 32 return new ClassicPendingScript(nullptr, resource, TextPosition(), true); | |
| 33 } | |
| 34 | |
| 35 ClassicPendingScript::ClassicPendingScript( | 30 ClassicPendingScript::ClassicPendingScript( |
| 36 ScriptElementBase* element, | 31 ScriptElementBase* element, |
| 37 ScriptResource* resource, | 32 ScriptResource* resource, |
| 38 const TextPosition& starting_position, | 33 const TextPosition& starting_position) |
| 39 bool is_for_testing) | 34 : PendingScript(element, starting_position), integrity_failure_(false) { |
| 40 : PendingScript(element, starting_position), | |
| 41 integrity_failure_(false), | |
| 42 is_for_testing_(is_for_testing) { | |
| 43 CheckState(); | 35 CheckState(); |
| 44 SetResource(resource); | 36 SetResource(resource); |
| 45 MemoryCoordinator::Instance().RegisterClient(this); | 37 MemoryCoordinator::Instance().RegisterClient(this); |
| 46 } | 38 } |
| 47 | 39 |
| 48 ClassicPendingScript::~ClassicPendingScript() {} | 40 ClassicPendingScript::~ClassicPendingScript() {} |
| 49 | 41 |
| 50 NOINLINE void ClassicPendingScript::CheckState() const { | 42 NOINLINE void ClassicPendingScript::CheckState() const { |
| 51 // TODO(hiroshige): Turn these CHECK()s into DCHECK() before going to beta. | 43 // TODO(hiroshige): Turn these CHECK()s into DCHECK() before going to beta. |
| 52 CHECK(is_for_testing_ || GetElement()); | 44 CHECK(GetElement()); |
| 53 CHECK(GetResource() || !streamer_); | 45 CHECK(GetResource() || !streamer_); |
| 54 CHECK(!streamer_ || streamer_->GetResource() == GetResource()); | 46 CHECK(!streamer_ || streamer_->GetResource() == GetResource()); |
| 55 } | 47 } |
| 56 | 48 |
| 57 NOINLINE void ClassicPendingScript::Dispose() { | 49 NOINLINE void ClassicPendingScript::Dispose() { |
| 58 PendingScript::Dispose(); | 50 PendingScript::Dispose(); |
| 59 } | 51 } |
| 60 | 52 |
| 61 void ClassicPendingScript::DisposeInternal() { | 53 void ClassicPendingScript::DisposeInternal() { |
| 62 MemoryCoordinator::Instance().UnregisterClient(this); | 54 MemoryCoordinator::Instance().UnregisterClient(this); |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 136 // In order to simulate the correct behavior, Blink explicitly does the SRI | 128 // In order to simulate the correct behavior, Blink explicitly does the SRI |
| 137 // checks here, when a PendingScript tied to a particular request is | 129 // checks here, when a PendingScript tied to a particular request is |
| 138 // finished (and in the case of a StyleSheet, at the point of execution), | 130 // finished (and in the case of a StyleSheet, at the point of execution), |
| 139 // while having proper Fetch checks in the fetch module for use in the | 131 // while having proper Fetch checks in the fetch module for use in the |
| 140 // fetch JavaScript API. In a future world where the ResourceFetcher uses | 132 // fetch JavaScript API. In a future world where the ResourceFetcher uses |
| 141 // the Fetch algorithm, this should be fixed by having separate Response | 133 // the Fetch algorithm, this should be fixed by having separate Response |
| 142 // objects (perhaps attached to identical Resource objects) per request. | 134 // objects (perhaps attached to identical Resource objects) per request. |
| 143 // | 135 // |
| 144 // See https://crbug.com/500701 for more information. | 136 // See https://crbug.com/500701 for more information. |
| 145 CheckState(); | 137 CheckState(); |
| 146 if (!is_for_testing_ && GetElement()) { | 138 if (GetElement()) { |
| 147 integrity_failure_ = !CheckScriptResourceIntegrity(resource, GetElement()); | 139 integrity_failure_ = !CheckScriptResourceIntegrity(resource, GetElement()); |
| 148 } | 140 } |
| 149 | 141 |
| 150 // If script streaming is in use, the client will be notified in | 142 // If script streaming is in use, the client will be notified in |
| 151 // streamingFinished. | 143 // streamingFinished. |
| 152 if (streamer_) | 144 if (streamer_) |
| 153 streamer_->NotifyFinished(resource); | 145 streamer_->NotifyFinished(resource); |
| 154 else if (Client()) | 146 else if (Client()) |
| 155 Client()->PendingScriptFinished(this); | 147 Client()->PendingScriptFinished(this); |
| 156 } | 148 } |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 236 | 228 |
| 237 KURL ClassicPendingScript::Url() const { | 229 KURL ClassicPendingScript::Url() const { |
| 238 return GetResource()->Url(); | 230 return GetResource()->Url(); |
| 239 } | 231 } |
| 240 | 232 |
| 241 void ClassicPendingScript::RemoveFromMemoryCache() { | 233 void ClassicPendingScript::RemoveFromMemoryCache() { |
| 242 GetMemoryCache()->Remove(GetResource()); | 234 GetMemoryCache()->Remove(GetResource()); |
| 243 } | 235 } |
| 244 | 236 |
| 245 } // namespace blink | 237 } // namespace blink |
| OLD | NEW |