Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(56)

Side by Side Diff: third_party/WebKit/Source/core/dom/ClassicPendingScript.cpp

Issue 2724673002: [WIP] Introduce ScriptResourceData
Patch Set: Fix Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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"
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 // while having proper Fetch checks in the fetch module for use in the 141 // while having proper Fetch checks in the fetch module for use in the
142 // fetch JavaScript API. In a future world where the ResourceFetcher uses 142 // fetch JavaScript API. In a future world where the ResourceFetcher uses
143 // the Fetch algorithm, this should be fixed by having separate Response 143 // the Fetch algorithm, this should be fixed by having separate Response
144 // objects (perhaps attached to identical Resource objects) per request. 144 // objects (perhaps attached to identical Resource objects) per request.
145 // 145 //
146 // See https://crbug.com/500701 for more information. 146 // See https://crbug.com/500701 for more information.
147 CheckState(); 147 CheckState();
148 if (GetElement()) { 148 if (GetElement()) {
149 integrity_failure_ = !CheckScriptResourceIntegrity(resource, GetElement()); 149 integrity_failure_ = !CheckScriptResourceIntegrity(resource, GetElement());
150 } 150 }
151 DCHECK(!resource_data_);
152 resource_data_ = GetResource()->ResourceData();
153 DCHECK(resource_data_);
151 154
152 // If script streaming is in use, the client will be notified in 155 // If script streaming is in use, the client will be notified in
153 // streamingFinished. 156 // streamingFinished.
154 if (streamer_) 157 if (streamer_)
155 streamer_->NotifyFinished(resource); 158 streamer_->NotifyFinished(resource);
156 else if (Client()) 159 else if (Client())
157 Client()->PendingScriptFinished(this); 160 Client()->PendingScriptFinished(this);
158 } 161 }
159 162
160 void ClassicPendingScript::NotifyAppendData(ScriptResource* resource) { 163 void ClassicPendingScript::NotifyAppendData(ScriptResource* resource) {
161 if (streamer_) 164 if (streamer_)
162 streamer_->NotifyAppendData(resource); 165 streamer_->NotifyAppendData(resource);
163 } 166 }
164 167
165 DEFINE_TRACE(ClassicPendingScript) { 168 DEFINE_TRACE(ClassicPendingScript) {
166 visitor->Trace(streamer_); 169 visitor->Trace(streamer_);
170 visitor->Trace(resource_data_);
167 ResourceOwner<ScriptResource>::Trace(visitor); 171 ResourceOwner<ScriptResource>::Trace(visitor);
168 MemoryCoordinatorClient::Trace(visitor); 172 MemoryCoordinatorClient::Trace(visitor);
169 PendingScript::Trace(visitor); 173 PendingScript::Trace(visitor);
170 } 174 }
171 175
172 ClassicScript* ClassicPendingScript::GetSource(const KURL& document_url, 176 ClassicScript* ClassicPendingScript::GetSource(const KURL& document_url,
173 bool& error_occurred) const { 177 bool& error_occurred) const {
174 CheckState(); 178 CheckState();
175 179
176 error_occurred = this->ErrorOccurred(); 180 error_occurred = this->ErrorOccurred();
177 if (is_external_) { 181 if (is_external_) {
178 DCHECK(GetResource()->IsLoaded()); 182 CHECK(ResourceData());
179 if (streamer_ && !streamer_->StreamingSuppressed()) 183 if (streamer_ && !streamer_->StreamingSuppressed())
180 return ClassicScript::Create(ScriptSourceCode(streamer_, GetResource())); 184 return ClassicScript::Create(ScriptSourceCode(streamer_, ResourceData()));
181 return ClassicScript::Create(ScriptSourceCode(GetResource())); 185 return ClassicScript::Create(ScriptSourceCode(ResourceData()));
182 } 186 }
183 187
184 return ClassicScript::Create(ScriptSourceCode( 188 return ClassicScript::Create(ScriptSourceCode(
185 GetElement()->TextContent(), document_url, StartingPosition())); 189 GetElement()->TextContent(), document_url, StartingPosition()));
186 } 190 }
187 191
188 void ClassicPendingScript::SetStreamer(ScriptStreamer* streamer) { 192 void ClassicPendingScript::SetStreamer(ScriptStreamer* streamer) {
189 DCHECK(!streamer_); 193 DCHECK(!streamer_);
190 DCHECK(!IsWatchingForLoad()); 194 DCHECK(!IsWatchingForLoad());
191 streamer_ = streamer; 195 streamer_ = streamer;
192 CheckState(); 196 CheckState();
193 } 197 }
194 198
195 bool ClassicPendingScript::IsReady() const { 199 bool ClassicPendingScript::IsReady() const {
196 CheckState(); 200 CheckState();
197 if (is_external_) { 201 if (is_external_) {
198 return GetResource()->IsLoaded() && (!streamer_ || streamer_->IsFinished()); 202 return ResourceData() && (!streamer_ || streamer_->IsFinished());
199 } 203 }
200 204
201 return true; 205 return true;
202 } 206 }
203 207
204 bool ClassicPendingScript::ErrorOccurred() const { 208 bool ClassicPendingScript::ErrorOccurred() const {
205 CheckState(); 209 CheckState();
206 if (is_external_) 210 if (is_external_) {
207 return GetResource()->ErrorOccurred() || integrity_failure_; 211 CHECK(ResourceData());
212 return ResourceData()->ErrorOccurred() || integrity_failure_;
213 }
208 214
209 return false; 215 return false;
210 } 216 }
211 217
212 void ClassicPendingScript::OnPurgeMemory() { 218 void ClassicPendingScript::OnPurgeMemory() {
213 CheckState(); 219 CheckState();
214 if (!streamer_) 220 if (!streamer_)
215 return; 221 return;
216 streamer_->Cancel(); 222 streamer_->Cancel();
217 streamer_ = nullptr; 223 streamer_ = nullptr;
(...skipping 12 matching lines...) Expand all
230 ScriptStreamer::StartStreaming( 236 ScriptStreamer::StartStreaming(
231 this, streamer_type, document->GetFrame()->GetSettings(), script_state, 237 this, streamer_type, document->GetFrame()->GetSettings(), script_state,
232 TaskRunnerHelper::Get(TaskType::kNetworking, document)); 238 TaskRunnerHelper::Get(TaskType::kNetworking, document));
233 } 239 }
234 240
235 bool ClassicPendingScript::WasCanceled() const { 241 bool ClassicPendingScript::WasCanceled() const {
236 return GetResource()->WasCanceled(); 242 return GetResource()->WasCanceled();
237 } 243 }
238 244
239 KURL ClassicPendingScript::UrlForClassicScript() const { 245 KURL ClassicPendingScript::UrlForClassicScript() const {
246 if (ResourceData())
247 return ResourceData()->Url();
248 CHECK(GetResource());
240 return GetResource()->Url(); 249 return GetResource()->Url();
241 } 250 }
242 251
243 void ClassicPendingScript::RemoveFromMemoryCache() { 252 void ClassicPendingScript::RemoveFromMemoryCache() {
244 GetMemoryCache()->Remove(GetResource()); 253 GetMemoryCache()->Remove(GetResource());
245 } 254 }
246 255
247 } // namespace blink 256 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698