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 BeaconLoader_h
6#define BeaconLoader_h
7
8#include "core/loader/PingLoader.h"
9#include "platform/heap/Handle.h"
10#include "wtf/Noncopyable.h"
11
12namespace WTF {
13class ArrayBufferView;
14}
15
16namespace blink {
17
18class Blob;
19class DOMFormData;
20class KURL;
21class LocalFrame;
22
23// Issue asynchronous beacon transmission loads independent of LocalFrame
24// staying alive. PingLoader providing the service.
25class BeaconLoader FINAL : public PingLoader {
26    WTF_MAKE_NONCOPYABLE(BeaconLoader);
27    WTF_MAKE_FAST_ALLOCATED;
28public:
29    virtual ~BeaconLoader() { }
30
31    static bool sendBeacon(LocalFrame*, int, const KURL&, const String&, int&);
32    static bool sendBeacon(LocalFrame*, int, const KURL&, PassRefPtr<WTF::ArrayBufferView>&, int&);
33    static bool sendBeacon(LocalFrame*, int, const KURL&, PassRefPtrWillBeRawPtr<Blob>&, int&);
34    static bool sendBeacon(LocalFrame*, int, const KURL&, PassRefPtrWillBeRawPtr<DOMFormData>&, int&);
35
36private:
37    static void prepareRequest(LocalFrame*, ResourceRequest&);
38    static void issueRequest(LocalFrame*, ResourceRequest&);
39};
40
41} // namespace blink
42
43#endif // BeaconLoader_h
44