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