ScriptSourceCode HTMLScriptRunner::sourceFromPendingScript(const PendingScript& script, bool& errorOccurred) const { if (script.cachedScript()) { errorOccurred = script.cachedScript()->errorOccurred(); ASSERT(script.cachedScript()->isLoaded()); return ScriptSourceCode(script.cachedScript()); } errorOccurred = false; return ScriptSourceCode(script.element()->textContent(), documentURLForScriptExecution(m_document), script.startingPosition()); }
void ScriptRunner::notifyFinished(PendingScript& pendingScript) { if (pendingScript.element().willExecuteInOrder()) ASSERT(!m_scriptsToExecuteInOrder.isEmpty()); else { ASSERT(m_pendingAsyncScripts.contains(pendingScript)); m_scriptsToExecuteSoon.append(m_pendingAsyncScripts.take(pendingScript)->ptr()); } pendingScript.clearClient(); m_timer.startOneShot(0); }
bool HTMLScriptRunner::requestPendingScript(PendingScript& pendingScript, Element* script) const { ASSERT(!pendingScript.element()); pendingScript.setElement(script); // This should correctly return 0 for empty or invalid srcValues. CachedScript* cachedScript = toScriptElement(script)->cachedScript().get(); if (!cachedScript) { notImplemented(); // Dispatch error event. return false; } pendingScript.setCachedScript(cachedScript); return true; }
bool HTMLScriptRunner::requestPendingScript(PendingScript& pendingScript, Element* script) const { ASSERT(!pendingScript.element()); pendingScript.setElement(script); // This should correctly return 0 for empty or invalid srcValues. ScriptResource* resource = toScriptLoaderIfPossible(script)->resource().get(); if (!resource) { notImplemented(); // Dispatch error event. return false; } pendingScript.setScriptResource(resource); return true; }
bool HTMLScriptRunner::requestPendingScript(PendingScript& pendingScript, Element* script) const { ASSERT(!pendingScript.element()); const AtomicString& srcValue = script->getAttribute(srcAttr); // Allow the host to disllow script loads (using the XSSAuditor, etc.) if (!m_host->shouldLoadExternalScriptFromSrc(srcValue)) return false; // FIXME: We need to resolve the url relative to the element. if (!script->dispatchBeforeLoadEvent(srcValue)) return false; pendingScript.adoptElement(script); // This should correctly return 0 for empty or invalid srcValues. CachedScript* cachedScript = m_document->cachedResourceLoader()->requestScript(srcValue, toScriptElement(script)->scriptCharset()); if (!cachedScript) { notImplemented(); // Dispatch error event. return false; } pendingScript.setCachedScript(cachedScript); return true; }
bool HTMLScriptRunner::requestPendingScript(PendingScript& pendingScript, Element* script) const { ASSERT(!pendingScript.element()); if (V8IsolatedContext::getEntered() != 0) { std::ostringstream wid; int worldID = V8IsolatedContext::getEntered()->getWorldID(); wid << worldID; std::string aclid = wid.str()+";"; std::string aclname = "ACL"; std::string ROACLname = "ROACL"; ExceptionCode ec; if (worldID!=0) { script->setAttribute("worldID",wid.str().c_str(),ec,worldID,false); script->setAttribute(aclname.c_str(),aclid.c_str(),ec,worldID,false); script->setAttribute(ROACLname.c_str(),aclid.c_str(),ec,worldID,false); } } const AtomicString& srcValue = script->getAttribute(srcAttr); // Allow the host to disllow script loads (using the XSSAuditor, etc.) if (!m_host->shouldLoadExternalScriptFromSrc(srcValue)) return false; // FIXME: We need to resolve the url relative to the element. if (!script->dispatchBeforeLoadEvent(srcValue)) return false; pendingScript.adoptElement(script); // This should correctly return 0 for empty or invalid srcValues. CachedScript* cachedScript = m_document->docLoader()->requestScript(srcValue, toScriptElement(script)->scriptCharset()); if (!cachedScript) { notImplemented(); // Dispatch error event. return false; } pendingScript.setCachedScript(cachedScript); return true; }