1/*
2 * Copyright (C) 2011 Google Inc.  All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are
6 * met:
7 *
8 *     * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 *     * Redistributions in binary form must reproduce the above
11 * copyright notice, this list of conditions and the following disclaimer
12 * in the documentation and/or other materials provided with the
13 * distribution.
14 *     * Neither the name of Google Inc. nor the names of its
15 * contributors may be used to endorse or promote products derived from
16 * this software without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31#ifndef CloseEvent_h
32#define CloseEvent_h
33
34#include "Event.h"
35#include "EventNames.h"
36
37namespace WebCore {
38
39struct CloseEventInit : public EventInit {
40    CloseEventInit()
41        : wasClean(false)
42        , code(0)
43    {
44    };
45
46    bool wasClean;
47    unsigned short code;
48    String reason;
49};
50
51class CloseEvent : public Event {
52public:
53    static PassRefPtr<CloseEvent> create()
54    {
55        return adoptRef(new CloseEvent());
56    }
57
58    static PassRefPtr<CloseEvent> create(bool wasClean, unsigned short code, const String& reason)
59    {
60        return adoptRef(new CloseEvent(wasClean, code, reason));
61    }
62
63    static PassRefPtr<CloseEvent> create(const AtomicString& type, const CloseEventInit& initializer)
64    {
65        return adoptRef(new CloseEvent(type, initializer));
66    }
67
68    bool wasClean() const { return m_wasClean; }
69    unsigned short code() const { return m_code; }
70    String reason() const { return m_reason; }
71
72    // Event function.
73    virtual const AtomicString& interfaceName() const OVERRIDE { return eventNames().interfaceForCloseEvent; }
74
75private:
76    CloseEvent()
77        : Event(eventNames().closeEvent, false, false)
78        , m_wasClean(false)
79        , m_code(0)
80    {
81    }
82
83    CloseEvent(bool wasClean, int code, const String& reason)
84        : Event(eventNames().closeEvent, false, false)
85        , m_wasClean(wasClean)
86        , m_code(code)
87        , m_reason(reason)
88    {
89    }
90
91    CloseEvent(const AtomicString& type, const CloseEventInit& initializer)
92        : Event(type, initializer)
93        , m_wasClean(initializer.wasClean)
94        , m_code(initializer.code)
95        , m_reason(initializer.reason)
96    {
97    }
98
99    bool m_wasClean;
100    unsigned short m_code;
101    String m_reason;
102};
103
104} // namespace WebCore
105
106#endif // CloseEvent_h
107