| Index: Source/core/workers/SharedWorker.cpp
|
| diff --git a/Source/core/workers/SharedWorker.cpp b/Source/core/workers/SharedWorker.cpp
|
| index 781c4f6ca4eb9a7d7007305c7f68d80c220b47be..a7a72c5e2dcf55fd7164fe9286d3db81ec677487 100644
|
| --- a/Source/core/workers/SharedWorker.cpp
|
| +++ b/Source/core/workers/SharedWorker.cpp
|
| @@ -38,8 +38,9 @@
|
| #include "core/dom/MessageChannel.h"
|
| #include "core/dom/MessagePort.h"
|
| #include "core/inspector/InspectorInstrumentation.h"
|
| +#include "core/page/Page.h"
|
| #include "core/page/UseCounter.h"
|
| -#include "core/workers/SharedWorkerRepository.h"
|
| +#include "core/workers/SharedWorkerRepositoryClient.h"
|
| #include "weborigin/KURL.h"
|
| #include "weborigin/SecurityOrigin.h"
|
|
|
| @@ -54,6 +55,8 @@ inline SharedWorker::SharedWorker(ExecutionContext* context)
|
| PassRefPtr<SharedWorker> SharedWorker::create(ExecutionContext* context, const String& url, const String& name, ExceptionState& es)
|
| {
|
| ASSERT(isMainThread());
|
| + ASSERT_WITH_SECURITY_IMPLICATION(context->isDocument());
|
| +
|
| UseCounter::count(toDocument(context)->domWindow(), UseCounter::SharedWorkerStart);
|
|
|
| RefPtr<SharedWorker> worker = adoptRef(new SharedWorker(context));
|
| @@ -66,7 +69,6 @@ PassRefPtr<SharedWorker> SharedWorker::create(ExecutionContext* context, const S
|
| worker->suspendIfNeeded();
|
|
|
| // We don't currently support nested workers, so workers can only be created from documents.
|
| - ASSERT_WITH_SECURITY_IMPLICATION(context->isDocument());
|
| Document* document = toDocument(context);
|
| if (!document->securityOrigin()->canAccessSharedWorkers()) {
|
| es.throwSecurityError("Failed to create 'SharedWorker': access to shared workers is denied to origin '" + document->securityOrigin()->toString() + "'.");
|
| @@ -77,7 +79,8 @@ PassRefPtr<SharedWorker> SharedWorker::create(ExecutionContext* context, const S
|
| if (scriptURL.isEmpty())
|
| return 0;
|
|
|
| - SharedWorkerRepository::connect(worker.get(), remotePort.release(), scriptURL, name, es);
|
| + if (document->page() && document->page()->sharedWorkerRepositoryClient())
|
| + document->page()->sharedWorkerRepositoryClient()->connect(worker.get(), remotePort.release(), scriptURL, name, es);
|
|
|
| return worker.release();
|
| }
|
|
|