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.
5 #include "mojo/services/network/network_service_impl.h"
7 #include "mojo/services/network/cookie_store_impl.h"
8 #include "mojo/services/network/net_adapters.h"
9 #include "mojo/services/network/tcp_bound_socket_impl.h"
10 #include "mojo/services/network/udp_socket_impl.h"
11 #include "mojo/services/network/url_loader_impl.h"
12 #include "mojo/services/network/web_socket_impl.h"
13 #include "third_party/mojo/src/mojo/public/cpp/application/application_connection.h"
17 NetworkServiceImpl::NetworkServiceImpl(ApplicationConnection
* connection
,
18 NetworkContext
* context
)
20 origin_(GURL(connection
->GetRemoteApplicationURL()).GetOrigin()) {
23 NetworkServiceImpl::~NetworkServiceImpl() {
26 void NetworkServiceImpl::CreateURLLoader(InterfaceRequest
<URLLoader
> loader
) {
27 // TODO(darin): Plumb origin_. Use for CORS.
28 // The loader will delete itself when the pipe is closed, unless a request is
29 // in progress. In which case, the loader will delete itself when the request
31 new URLLoaderImpl(context_
, loader
.Pass());
34 void NetworkServiceImpl::GetCookieStore(InterfaceRequest
<CookieStore
> store
) {
35 BindToRequest(new CookieStoreImpl(context_
, origin_
), &store
);
38 void NetworkServiceImpl::CreateWebSocket(InterfaceRequest
<WebSocket
> socket
) {
39 BindToRequest(new WebSocketImpl(context_
), &socket
);
42 void NetworkServiceImpl::CreateTCPBoundSocket(
43 NetAddressPtr local_address
,
44 InterfaceRequest
<TCPBoundSocket
> bound_socket
,
45 const Callback
<void(NetworkErrorPtr
, NetAddressPtr
)>& callback
) {
46 scoped_ptr
<TCPBoundSocketImpl
> bound(new TCPBoundSocketImpl
);
47 int net_error
= bound
->Bind(local_address
.Pass());
48 if (net_error
!= net::OK
) {
49 callback
.Run(MakeNetworkError(net_error
), NetAddressPtr());
52 NetAddressPtr
resulting_local_address(bound
->GetLocalAddress());
53 BindToRequest(bound
.release(), &bound_socket
);
54 callback
.Run(MakeNetworkError(net::OK
), resulting_local_address
.Pass());
57 void NetworkServiceImpl::CreateTCPConnectedSocket(
58 NetAddressPtr remote_address
,
59 ScopedDataPipeConsumerHandle send_stream
,
60 ScopedDataPipeProducerHandle receive_stream
,
61 InterfaceRequest
<TCPConnectedSocket
> client_socket
,
62 const Callback
<void(NetworkErrorPtr
, NetAddressPtr
)>& callback
) {
63 // TODO(brettw) implement this. We need to know what type of socket to use
64 // so we can create the right one (i.e. to pass to TCPSocket::Open) before
66 callback
.Run(MakeNetworkError(net::ERR_NOT_IMPLEMENTED
), NetAddressPtr());
69 void NetworkServiceImpl::CreateUDPSocket(InterfaceRequest
<UDPSocket
> request
) {
70 // The lifetime of this UDPSocketImpl is bound to that of the underlying pipe.
71 new UDPSocketImpl(request
.Pass());