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

Side by Side Diff: Source/core/dom/ScriptLoader.cpp

Issue 229753004: Handle didMoveToNewDocument() for <script> (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 8 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 | Annotate | Revision Log
« no previous file with comments | « Source/core/dom/ScriptLoader.h ('k') | Source/core/html/HTMLScriptElement.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2001 Dirk Mueller (mueller@kde.org) 4 * (C) 2001 Dirk Mueller (mueller@kde.org)
5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserv ed. 5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserv ed.
6 * Copyright (C) 2008 Nikolas Zimmermann <zimmermann@kde.org> 6 * Copyright (C) 2008 Nikolas Zimmermann <zimmermann@kde.org>
7 * 7 *
8 * This library is free software; you can redistribute it and/or 8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Library General Public 9 * modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; either 10 * License as published by the Free Software Foundation; either
(...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after
356 ASSERT(resource); 356 ASSERT(resource);
357 if (resource->errorOccurred()) { 357 if (resource->errorOccurred()) {
358 dispatchErrorEvent(); 358 dispatchErrorEvent();
359 } else if (!resource->wasCanceled()) { 359 } else if (!resource->wasCanceled()) {
360 executeScript(ScriptSourceCode(resource)); 360 executeScript(ScriptSourceCode(resource));
361 dispatchLoadEvent(); 361 dispatchLoadEvent();
362 } 362 }
363 resource->removeClient(this); 363 resource->removeClient(this);
364 } 364 }
365 365
366 void ScriptLoader::cancel(Document* contextDocument)
367 {
368 if (!m_resource)
369 return;
370 finishLoading(contextDocument, FinishWithErrorOrCancel);
371 stopLoadRequest();
372 }
373
366 void ScriptLoader::notifyFinished(Resource* resource) 374 void ScriptLoader::notifyFinished(Resource* resource)
367 { 375 {
368 ASSERT(!m_willBeParserExecuted);
369
370 RefPtr<Document> elementDocument(m_element->document());
371 RefPtr<Document> contextDocument = elementDocument->contextDocument().get();
372 if (!contextDocument)
373 return;
374
375 // Resource possibly invokes this notifyFinished() more than 376 // Resource possibly invokes this notifyFinished() more than
376 // once because ScriptLoader doesn't unsubscribe itself from 377 // once because ScriptLoader doesn't unsubscribe itself from
377 // Resource here and does it in execute() instead. 378 // Resource here and does it in execute() instead.
378 // We use m_resource to check if this function is already called. 379 // We use m_resource to check if this function is already called.
379 ASSERT_UNUSED(resource, resource == m_resource); 380 ASSERT_UNUSED(resource, resource == m_resource);
380 if (!m_resource) 381 if (!m_resource)
381 return; 382 return;
382 if (m_resource->errorOccurred()) { 383
384 RefPtr<Document> elementDocument(m_element->document());
385 RefPtr<Document> contextDocument = elementDocument->contextDocument().get();
386 finishLoading(contextDocument.get(), resource->errorOccurred() ? FinishWithE rrorOrCancel : FinishSuccessfully);
387 }
388
389 void ScriptLoader::finishLoading(Document* contextDocument, ScriptLoader::Finish Type type)
390 {
391 ASSERT(!m_willBeParserExecuted);
392
393 if (!contextDocument)
394 return;
395
396 if (type == FinishWithErrorOrCancel) {
383 dispatchErrorEvent(); 397 dispatchErrorEvent();
384 contextDocument->scriptRunner()->notifyScriptLoadError(this, m_willExecu teInOrder ? ScriptRunner::IN_ORDER_EXECUTION : ScriptRunner::ASYNC_EXECUTION); 398 contextDocument->scriptRunner()->notifyScriptLoadError(this, m_willExecu teInOrder ? ScriptRunner::IN_ORDER_EXECUTION : ScriptRunner::ASYNC_EXECUTION);
385 return; 399 return;
386 } 400 }
387 if (m_willExecuteInOrder) 401 if (m_willExecuteInOrder)
388 contextDocument->scriptRunner()->notifyScriptReady(this, ScriptRunner::I N_ORDER_EXECUTION); 402 contextDocument->scriptRunner()->notifyScriptReady(this, ScriptRunner::I N_ORDER_EXECUTION);
389 else 403 else
390 contextDocument->scriptRunner()->notifyScriptReady(this, ScriptRunner::A SYNC_EXECUTION); 404 contextDocument->scriptRunner()->notifyScriptReady(this, ScriptRunner::A SYNC_EXECUTION);
391 405
392 m_resource = 0; 406 m_resource = 0;
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
435 if (isHTMLScriptLoader(element)) 449 if (isHTMLScriptLoader(element))
436 return toHTMLScriptElement(element)->loader(); 450 return toHTMLScriptElement(element)->loader();
437 451
438 if (isSVGScriptLoader(element)) 452 if (isSVGScriptLoader(element))
439 return toSVGScriptElement(element)->loader(); 453 return toSVGScriptElement(element)->loader();
440 454
441 return 0; 455 return 0;
442 } 456 }
443 457
444 } 458 }
OLDNEW
« no previous file with comments | « Source/core/dom/ScriptLoader.h ('k') | Source/core/html/HTMLScriptElement.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698