ServiceWorkerClientData.cpp [plain text]
#include "config.h"
#if ENABLE(SERVICE_WORKER)
#include "ServiceWorkerClientData.h"
#include "DOMWindow.h"
#include "Document.h"
#include "Frame.h"
#include "SWClientConnection.h"
namespace WebCore {
static ServiceWorkerClientFrameType toServiceWorkerClientFrameType(ScriptExecutionContext& context)
{
if (!is<Document>(context))
return ServiceWorkerClientFrameType::None;
auto& document = downcast<Document>(context);
auto* frame = document.frame();
if (!frame)
return ServiceWorkerClientFrameType::None;
if (frame->isMainFrame()) {
if (auto* window = document.domWindow()) {
if (window->opener())
return ServiceWorkerClientFrameType::Auxiliary;
}
return ServiceWorkerClientFrameType::TopLevel;
}
return ServiceWorkerClientFrameType::Nested;
}
ServiceWorkerClientData ServiceWorkerClientData::isolatedCopy() const
{
return { identifier, type, frameType, url.isolatedCopy() };
}
ServiceWorkerClientData ServiceWorkerClientData::from(ScriptExecutionContext& context, SWClientConnection& connection)
{
bool isDocument = is<Document>(context);
RELEASE_ASSERT(isDocument);
return {
{ connection.serverConnectionIdentifier(), downcast<Document>(context).identifier() },
isDocument ? ServiceWorkerClientType::Window : ServiceWorkerClientType::Worker,
toServiceWorkerClientFrameType(context),
context.url()
};
}
}
#endif // ENABLE(SERVICE_WORKER)