Unreviewed, rolling out r97697.
[WebKit-https.git] / Source / WebCore / dom / MessageEvent.h
1 /*
2  * Copyright (C) 2007 Henry Mason (hmason@mac.com)
3  * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
15  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
18  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
25  *
26  */
27
28 #ifndef MessageEvent_h
29 #define MessageEvent_h
30
31 #include "ArrayBuffer.h"
32 #include "Blob.h"
33 #include "DOMWindow.h"
34 #include "Event.h"
35 #include "MessagePort.h"
36 #include "SerializedScriptValue.h"
37
38 namespace WebCore {
39
40 class DOMWindow;
41
42 struct MessageEventInit : public EventInit {
43     MessageEventInit();
44
45     RefPtr<SerializedScriptValue> data;
46     String origin;
47     String lastEventId;
48     RefPtr<DOMWindow> source;
49     MessagePortArray ports;
50 };
51
52 class MessageEvent : public Event {
53 public:
54     static PassRefPtr<MessageEvent> create()
55     {
56         return adoptRef(new MessageEvent);
57     }
58     static PassRefPtr<MessageEvent> create(PassOwnPtr<MessagePortArray> ports, PassRefPtr<SerializedScriptValue> data = 0, const String& origin = "", const String& lastEventId = "", PassRefPtr<DOMWindow> source = 0)
59     {
60         return adoptRef(new MessageEvent(data, origin, lastEventId, source, ports));
61     }
62     static PassRefPtr<MessageEvent> create(const String& data)
63     {
64         return adoptRef(new MessageEvent(data));
65     }
66     static PassRefPtr<MessageEvent> create(PassRefPtr<Blob> data)
67     {
68         return adoptRef(new MessageEvent(data));
69     }
70     static PassRefPtr<MessageEvent> create(PassRefPtr<ArrayBuffer> data)
71     {
72         return adoptRef(new MessageEvent(data));
73     }
74     static PassRefPtr<MessageEvent> create(const AtomicString& type, const MessageEventInit& initializer)
75     {
76         return adoptRef(new MessageEvent(type, initializer));
77     }
78     virtual ~MessageEvent();
79
80     void initMessageEvent(const AtomicString& type, bool canBubble, bool cancelable, PassRefPtr<SerializedScriptValue> data, const String& origin, const String& lastEventId, DOMWindow* source, PassOwnPtr<MessagePortArray>);
81
82     const String& origin() const { return m_origin; }
83     const String& lastEventId() const { return m_lastEventId; }
84     DOMWindow* source() const { return m_source.get(); }
85     MessagePortArray* ports() const { return m_ports.get(); }
86
87     // FIXME: Remove this when we have custom ObjC binding support.
88     SerializedScriptValue* data() const;
89
90     // FIXME: remove this when we update the ObjC bindings (bug #28774).
91     MessagePort* messagePort();
92     // FIXME: remove this when we update the ObjC bindings (bug #28774).
93     void initMessageEvent(const AtomicString& type, bool canBubble, bool cancelable, PassRefPtr<SerializedScriptValue> data, const String& origin, const String& lastEventId, DOMWindow* source, MessagePort*);
94
95     virtual bool isMessageEvent() const;
96
97     enum DataType {
98         DataTypeSerializedScriptValue,
99         DataTypeString,
100         DataTypeBlob,
101         DataTypeArrayBuffer
102     };
103     DataType dataType() const { return m_dataType; }
104     SerializedScriptValue* dataAsSerializedScriptValue() const { return m_dataAsSerializedScriptValue.get(); }
105     String dataAsString() const { return m_dataAsString; }
106     Blob* dataAsBlob() const { return m_dataAsBlob.get(); }
107     ArrayBuffer* dataAsArrayBuffer() const { return m_dataAsArrayBuffer.get(); }
108
109 private:
110     MessageEvent();
111     MessageEvent(const AtomicString&, const MessageEventInit&);
112     MessageEvent(PassRefPtr<SerializedScriptValue> data, const String& origin, const String& lastEventId, PassRefPtr<DOMWindow> source, PassOwnPtr<MessagePortArray>);
113
114     explicit MessageEvent(const String& data);
115     explicit MessageEvent(PassRefPtr<Blob> data);
116     explicit MessageEvent(PassRefPtr<ArrayBuffer> data);
117
118     DataType m_dataType;
119     RefPtr<SerializedScriptValue> m_dataAsSerializedScriptValue;
120     String m_dataAsString;
121     RefPtr<Blob> m_dataAsBlob;
122     RefPtr<ArrayBuffer> m_dataAsArrayBuffer;
123     String m_origin;
124     String m_lastEventId;
125     RefPtr<DOMWindow> m_source;
126     OwnPtr<MessagePortArray> m_ports;
127 };
128
129 } // namespace WebCore
130
131 #endif // MessageEvent_h