2 * Copyright (C) 2011 Google Inc. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are
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
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.
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.
32 #include "public/web/WebDOMMessageEvent.h"
34 #include "bindings/core/v8/SerializedScriptValue.h"
35 #include "core/dom/Document.h"
36 #include "core/dom/MessagePort.h"
37 #include "core/events/MessageEvent.h"
38 #include "core/frame/LocalDOMWindow.h"
39 #include "public/platform/WebString.h"
40 #include "public/web/WebDocument.h"
41 #include "public/web/WebFrame.h"
42 #include "public/web/WebSerializedScriptValue.h"
43 #include "web/WebLocalFrameImpl.h"
47 void WebDOMMessageEvent::initMessageEvent(const WebString
& type
, bool canBubble
, bool cancelable
, const WebSerializedScriptValue
& messageData
, const WebString
& origin
, const WebFrame
* sourceFrame
, const WebDocument
& targetDocument
, const WebString
& lastEventId
, const WebMessagePortChannelArray
& webChannels
)
49 ASSERT(m_private
.get());
50 ASSERT(isMessageEvent());
51 DOMWindow
* window
= nullptr;
53 window
= toCoreFrame(sourceFrame
)->domWindow();
54 MessagePortArray
* ports
= nullptr;
55 if (!targetDocument
.isNull()) {
56 RefPtrWillBeRawPtr
<Document
> coreDocument
= PassRefPtrWillBeRawPtr
<Document
>(targetDocument
);
57 ports
= MessagePort::toMessagePortArray(coreDocument
.get(), webChannels
);
59 // Use an empty array for |ports| when it is null because this function
60 // is used to implement postMessage().
62 ports
= new MessagePortArray
;
63 unwrap
<MessageEvent
>()->initMessageEvent(type
, canBubble
, cancelable
, messageData
, origin
, lastEventId
, window
, ports
);
66 WebSerializedScriptValue
WebDOMMessageEvent::data() const
68 return WebSerializedScriptValue(constUnwrap
<MessageEvent
>()->dataAsSerializedScriptValue());
71 WebString
WebDOMMessageEvent::origin() const
73 return WebString(constUnwrap
<MessageEvent
>()->origin());
76 WebMessagePortChannelArray
WebDOMMessageEvent::releaseChannels()
78 MessagePortChannelArray
* channels
= constUnwrap
<MessageEvent
>()->channels();
79 WebMessagePortChannelArray
webChannels(channels
? channels
->size() : 0);
81 for (size_t i
= 0; i
< channels
->size(); ++i
)
82 webChannels
[i
] = (*channels
)[i
].leakPtr();