9743a78c7708444937b6f9ae1f168e7e26fbe16d
[WebKit-https.git] / Source / WebKit2 / Shared / WebConnection.cpp
1 /*
2  * Copyright (C) 2011 Apple 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
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #include "config.h"
27 #include "WebConnection.h"
28
29 #include "ArgumentCoders.h"
30 #include "Connection.h"
31 #include "DataReference.h"
32 #include "WebConnectionMessages.h"
33 #include <wtf/text/WTFString.h>
34
35 namespace WebKit {
36
37 WebConnection::WebConnection(PassRefPtr<CoreIPC::Connection> connection)
38     : m_connection(connection)
39 {
40 }
41
42 WebConnection::~WebConnection()
43 {
44 }
45
46 void WebConnection::initializeConnectionClient(const WKConnectionClient* client)
47 {
48     m_client.initialize(client);
49 }
50
51 void WebConnection::postMessage(const String& messageName, APIObject* messageBody)
52 {
53     if (!m_connection)
54         return;
55
56     OwnPtr<CoreIPC::ArgumentEncoder> messageData = CoreIPC::ArgumentEncoder::create();
57     messageData->encode(messageName);
58     encodeMessageBody(messageData.get(), messageBody);
59
60     m_connection->send(Messages::WebConnection::HandleMessage(CoreIPC::DataReference(messageData->buffer(), messageData->bufferSize())), 0);
61 }
62
63 void WebConnection::handleMessage(const CoreIPC::DataReference& messageData)
64 {
65     OwnPtr<CoreIPC::ArgumentDecoder> decoder = CoreIPC::ArgumentDecoder::create(messageData.data(), messageData.size());
66
67     String messageName;
68     if (!decoder->decode(messageName))
69         return;
70
71     RefPtr<APIObject> messageBody;
72     if (!decodeMessageBody(decoder.get(), messageBody))
73         return;
74
75     m_client.didReceiveMessage(this, messageName, messageBody.get());
76 }
77
78 void WebConnection::invalidate()
79 {
80     m_connection->invalidate();
81     m_connection = nullptr;
82 }
83
84 } // namespace WebKit