1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef ServiceWorkerContainerClient_h
6#define ServiceWorkerContainerClient_h
7
8#include "core/dom/DocumentSupplementable.h"
9#include "core/workers/WorkerClients.h"
10#include "wtf/Forward.h"
11
12namespace blink {
13
14class ExecutionContext;
15class WebServiceWorkerProvider;
16
17// This mainly exists to provide access to WebServiceWorkerProvider.
18// Owned by Document (or WorkerClients).
19class ServiceWorkerContainerClient FINAL
20    : public NoBaseWillBeGarbageCollectedFinalized<ServiceWorkerContainerClient>
21    , public DocumentSupplement
22    , public WillBeHeapSupplement<WorkerClients> {
23    WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(ServiceWorkerContainerClient);
24    WTF_MAKE_NONCOPYABLE(ServiceWorkerContainerClient);
25public:
26    static PassOwnPtrWillBeRawPtr<ServiceWorkerContainerClient> create(PassOwnPtr<WebServiceWorkerProvider>);
27    virtual ~ServiceWorkerContainerClient();
28
29    WebServiceWorkerProvider* provider() { return m_provider.get(); }
30
31    static const char* supplementName();
32    static ServiceWorkerContainerClient* from(ExecutionContext*);
33
34    virtual void trace(Visitor* visitor) OVERRIDE
35    {
36        DocumentSupplement::trace(visitor);
37        WillBeHeapSupplement<WorkerClients>::trace(visitor);
38    }
39
40protected:
41    explicit ServiceWorkerContainerClient(PassOwnPtr<WebServiceWorkerProvider>);
42
43    OwnPtr<WebServiceWorkerProvider> m_provider;
44};
45
46void provideServiceWorkerContainerClientToWorker(WorkerClients*, PassOwnPtr<WebServiceWorkerProvider>);
47
48} // namespace blink
49
50#endif // ServiceWorkerContainerClient_h
51