WebSocketChannel* WebSocketChannel::create(ExecutionContext* context, WebSocketChannelClient* client) { ASSERT(context); ASSERT(client); String sourceURL; unsigned lineNumber = 0; RefPtrWillBeRawPtr<ScriptCallStack> callStack = currentScriptCallStack(1); if (callStack && callStack->size()) { sourceURL = callStack->at(0).sourceURL(); lineNumber = callStack->at(0).lineNumber(); } if (context->isWorkerGlobalScope()) { WorkerGlobalScope* workerGlobalScope = toWorkerGlobalScope(context); return WorkerWebSocketChannel::create(*workerGlobalScope, client, sourceURL, lineNumber); } Document* document = toDocument(context); return DocumentWebSocketChannel::create(document, client, sourceURL, lineNumber); }
static void gatherSecurityPolicyViolationEventData(SecurityPolicyViolationEventInit& init, Document* document, const String& directiveText, const String& effectiveDirective, const KURL& blockedURL, const String& header) { if (equalIgnoringCase(effectiveDirective, ContentSecurityPolicy::FrameAncestors)) { // If this load was blocked via 'frame-ancestors', then the URL of |document| has not yet // been initialized. In this case, we'll set both 'documentURI' and 'blockedURI' to the // blocked document's URL. init.setDocumentURI(blockedURL.string()); init.setBlockedURI(blockedURL.string()); } else { init.setDocumentURI(document->url().string()); init.setBlockedURI(stripURLForUseInReport(document, blockedURL)); } init.setReferrer(document->referrer()); init.setViolatedDirective(directiveText); init.setEffectiveDirective(effectiveDirective); init.setOriginalPolicy(header); init.setSourceFile(String()); init.setLineNumber(0); init.setColumnNumber(0); init.setStatusCode(0); if (!SecurityOrigin::isSecure(document->url()) && document->loader()) init.setStatusCode(document->loader()->response().httpStatusCode()); RefPtrWillBeRawPtr<ScriptCallStack> stack = currentScriptCallStack(1); if (!stack || !stack->size()) return; const ScriptCallFrame& callFrame = stack->at(0); if (callFrame.lineNumber()) { KURL source = KURL(ParsedURLString, callFrame.sourceURL()); init.setSourceFile(stripURLForUseInReport(document, source)); init.setLineNumber(callFrame.lineNumber()); init.setColumnNumber(callFrame.columnNumber()); } }