blob: f26bd1739102a8caf251a05a15a500a3d93ca005 [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.domokit.oknet;
import android.content.Context;
import android.util.Log;
import com.squareup.okhttp.Cache;
import com.squareup.okhttp.OkHttpClient;
import org.chromium.mojo.bindings.InterfaceRequest;
import org.chromium.mojo.system.Core;
import org.chromium.mojo.system.DataPipe;
import org.chromium.mojo.system.MojoException;
import org.chromium.mojom.mojo.CookieStore;
import org.chromium.mojom.mojo.HostResolver;
import org.chromium.mojom.mojo.HttpServerDelegate;
import org.chromium.mojom.mojo.NetAddress;
import org.chromium.mojom.mojo.NetworkService;
import org.chromium.mojom.mojo.TcpBoundSocket;
import org.chromium.mojom.mojo.TcpConnectedSocket;
import org.chromium.mojom.mojo.UdpSocket;
import org.chromium.mojom.mojo.UrlLoader;
import org.chromium.mojom.mojo.UrlLoaderInterceptorFactory;
import org.chromium.mojom.mojo.WebSocket;
import java.io.File;
import java.io.IOException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* OkHttp implementation of NetworkService.
*/
public class NetworkServiceImpl implements NetworkService {
private static final String TAG = "NetworkServiceImpl";
private static ExecutorService sThreadPool;
private static OkHttpClient sClient;
private Core mCore;
public NetworkServiceImpl(Context context, Core core) {
assert core != null;
mCore = core;
if (sThreadPool == null) {
sThreadPool = Executors.newCachedThreadPool();
}
if (sClient == null) {
sClient = new OkHttpClient();
try {
int cacheSize = 10 * 1024 * 1024; // 10 MiB
File cacheDirectory = new File(context.getCacheDir(), "ok_http_cache");
Cache cache = new Cache(cacheDirectory, cacheSize);
sClient.setCache(cache);
} catch (IOException e) {
Log.e(TAG, "Unable to create HTTP cache", e);
}
}
}
@Override
public void close() {}
@Override
public void onConnectionError(MojoException e) {}
@Override
public void createUrlLoader(InterfaceRequest<UrlLoader> loader) {
UrlLoader.MANAGER.bind(new UrlLoaderImpl(mCore, sClient, sThreadPool), loader);
}
@Override
public void getCookieStore(InterfaceRequest<CookieStore> cookieStore) {
cookieStore.close();
}
@Override
public void createWebSocket(InterfaceRequest<WebSocket> socket) {
socket.close();
}
@Override
public void createTcpBoundSocket(NetAddress localAddress,
InterfaceRequest<TcpBoundSocket> boundSocket, CreateTcpBoundSocketResponse callback) {
boundSocket.close();
}
@Override
public void createTcpConnectedSocket(NetAddress remoteAddress,
DataPipe.ConsumerHandle sendStream, DataPipe.ProducerHandle receiveStream,
InterfaceRequest<TcpConnectedSocket> clientSocket,
CreateTcpConnectedSocketResponse callback) {
sendStream.close();
receiveStream.close();
clientSocket.close();
}
@Override
public void createUdpSocket(InterfaceRequest<UdpSocket> socket) {
socket.close();
}
@Override
public void createHttpServer(NetAddress localAddress, HttpServerDelegate delegate,
CreateHttpServerResponse callback) {
delegate.close();
}
@Override
public void registerUrlLoaderInterceptor(UrlLoaderInterceptorFactory factory) {
factory.close();
}
@Override
public void createHostResolver(InterfaceRequest<HostResolver> resolver) {
resolver.close();
}
}