diff options
Diffstat (limited to 'Source/WebKit/chromium/src/SharedWorkerRepository.cpp')
-rw-r--r-- | Source/WebKit/chromium/src/SharedWorkerRepository.cpp | 50 |
1 files changed, 38 insertions, 12 deletions
diff --git a/Source/WebKit/chromium/src/SharedWorkerRepository.cpp b/Source/WebKit/chromium/src/SharedWorkerRepository.cpp index d9188ddee..da019b42e 100644 --- a/Source/WebKit/chromium/src/SharedWorkerRepository.cpp +++ b/Source/WebKit/chromium/src/SharedWorkerRepository.cpp @@ -58,6 +58,30 @@ #include <public/WebString.h> #include <public/WebURL.h> +namespace WebKit { + +WebSharedWorkerRepository* s_sharedWorkerRepository = 0; + +void setSharedWorkerRepository(WebSharedWorkerRepository* repository) +{ + s_sharedWorkerRepository = repository; +} + +static WebSharedWorkerRepository* sharedWorkerRepository() +{ + WebSharedWorkerRepository* repository; + + repository = s_sharedWorkerRepository; + if (!repository) { + repository = webKitPlatformSupport()->sharedWorkerRepository(); + setSharedWorkerRepository(repository); + } + + return repository; +} + +} + namespace WebCore { class Document; @@ -194,8 +218,9 @@ void SharedWorkerScriptLoader::connected() bool SharedWorkerRepository::isAvailable() { - // Allow the WebKitPlatformSupport to determine if SharedWorkers are available. - return WebKit::webKitPlatformSupport()->sharedWorkerRepository(); + // Allow the WebKitPlatformSupport to determine if SharedWorkers + // are available. + return WebKit::sharedWorkerRepository(); } static WebSharedWorkerRepository::DocumentID getId(void* document) @@ -206,9 +231,11 @@ static WebSharedWorkerRepository::DocumentID getId(void* document) void SharedWorkerRepository::connect(PassRefPtr<SharedWorker> worker, PassOwnPtr<MessagePortChannel> port, const KURL& url, const String& name, ExceptionCode& ec) { + WebKit::WebSharedWorkerRepository* repository = WebKit::sharedWorkerRepository(); + // This should not be callable unless there's a SharedWorkerRepository for // this context (since isAvailable() should have returned null). - ASSERT(WebKit::webKitPlatformSupport()->sharedWorkerRepository()); + ASSERT(repository); // No nested workers (for now) - connect() should only be called from document context. ASSERT(worker->scriptExecutionContext()->isDocument()); @@ -223,8 +250,7 @@ void SharedWorkerRepository::connect(PassRefPtr<SharedWorker> worker, PassOwnPtr return; } - WebKit::webKitPlatformSupport()->sharedWorkerRepository()->addSharedWorker( - webWorker.get(), getId(document)); + repository->addSharedWorker(webWorker.get(), getId(document)); // The loader object manages its own lifecycle (and the lifecycles of the two worker objects). // It will free itself once loading is completed. @@ -234,9 +260,10 @@ void SharedWorkerRepository::connect(PassRefPtr<SharedWorker> worker, PassOwnPtr void SharedWorkerRepository::documentDetached(Document* document) { - WebSharedWorkerRepository* repo = WebKit::webKitPlatformSupport()->sharedWorkerRepository(); - if (repo) - repo->documentDetached(getId(document)); + WebKit::WebSharedWorkerRepository* repository = WebKit::sharedWorkerRepository(); + + if (repository) + repository->documentDetached(getId(document)); // Stop the creation of any pending SharedWorkers for this context. // FIXME: Need a way to invoke this for WorkerContexts as well when we support for nested workers. @@ -245,11 +272,10 @@ void SharedWorkerRepository::documentDetached(Document* document) bool SharedWorkerRepository::hasSharedWorkers(Document* document) { - WebSharedWorkerRepository* repo = WebKit::webKitPlatformSupport()->sharedWorkerRepository(); - return repo && repo->hasSharedWorkers(getId(document)); -} - + WebKit::WebSharedWorkerRepository* repository = WebKit::sharedWorkerRepository(); + return repository && repository->hasSharedWorkers(getId(document)); +} } // namespace WebCore |