10bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/* 20bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Copyright (C) 2009 Google Inc. All rights reserved. 3e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * Copyright (C) 2010 Apple Inc. All rights reserved. 40bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * 50bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Redistribution and use in source and binary forms, with or without 60bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * modification, are permitted provided that the following conditions are 70bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * met: 80bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * 90bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * * Redistributions of source code must retain the above copyright 100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * notice, this list of conditions and the following disclaimer. 110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * * Redistributions in binary form must reproduce the above 120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * copyright notice, this list of conditions and the following disclaimer 130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * in the documentation and/or other materials provided with the 140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * distribution. 150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * * Neither the name of Google Inc. nor the names of its 160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * contributors may be used to endorse or promote products derived from 170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * this software without specific prior written permission. 180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * 190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch */ 310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "config.h" 330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#if ENABLE(SHARED_WORKERS) 350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "SharedWorker.h" 370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 3865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "InspectorInstrumentation.h" 390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "KURL.h" 400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "MessageChannel.h" 410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "MessagePort.h" 42a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "ScriptExecutionContext.h" 430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "SharedWorkerRepository.h" 440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochnamespace WebCore { 460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 47e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarkeinline SharedWorker::SharedWorker(ScriptExecutionContext* context) 480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch : AbstractWorker(context) 490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 50e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke} 51e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke 52e458d70a0d18538346f41b503114c9ebe6b2ce12Leon ClarkePassRefPtr<SharedWorker> SharedWorker::create(const String& url, const String& name, ScriptExecutionContext* context, ExceptionCode& ec) 53e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke{ 54e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke RefPtr<SharedWorker> worker = adoptRef(new SharedWorker(context)); 55e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke 56e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke RefPtr<MessageChannel> channel = MessageChannel::create(context); 57e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke worker->m_port = channel->port1(); 580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch OwnPtr<MessagePortChannel> remotePort = channel->port2()->disentangle(ec); 59e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke ASSERT(remotePort); 60e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke 61e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke KURL scriptURL = worker->resolveURL(url, ec); 62e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke if (scriptURL.isEmpty()) 63e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke return 0; 64e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke 65e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke SharedWorkerRepository::connect(worker.get(), remotePort.release(), scriptURL, name, ec); 660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 6765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch InspectorInstrumentation::didCreateWorker(context, worker->asID(), scriptURL.string(), true); 68e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke 69e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke return worker.release(); 700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochSharedWorker::~SharedWorker() 730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} // namespace WebCore 770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif // ENABLE(SHARED_WORKERS) 79