1a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch// found in the LICENSE file.
4a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch
5a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch#ifndef PushController_h
6a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch#define PushController_h
7a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch
8a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch#include "core/page/Page.h"
9a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch#include "platform/Supplementable.h"
10a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch#include "wtf/Forward.h"
11a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch#include "wtf/Noncopyable.h"
12a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch#include "wtf/PassOwnPtr.h"
13a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch
14a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdochnamespace blink {
15a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch
16e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)class WebPushClient;
17a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch
18f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liuclass PushController FINAL : public NoBaseWillBeGarbageCollected<PushController>, public WillBeHeapSupplement<Page> {
19f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(PushController);
20a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    WTF_MAKE_NONCOPYABLE(PushController);
21a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch
22a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdochpublic:
23e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    static PassOwnPtrWillBeRawPtr<PushController> create(WebPushClient*);
24a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    static const char* supplementName();
25f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    static PushController* from(Page* page) { return static_cast<PushController*>(WillBeHeapSupplement<Page>::from(page, supplementName())); }
26e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    static WebPushClient* clientFrom(Page*);
27a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch
28e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    WebPushClient* client() const { return m_client; }
29a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch
30323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    virtual void trace(Visitor* visitor) OVERRIDE { WillBeHeapSupplement<Page>::trace(visitor); }
31a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch
32a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdochprivate:
33e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    explicit PushController(WebPushClient*);
34a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch
35e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    WebPushClient* m_client;
36a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch};
37a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch
38e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)void providePushControllerTo(Page&, WebPushClient*);
39a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch
40c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink
41a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch
42a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch#endif // PushController_h
43