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