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.
4
5package org.chromium.net;
6
7import android.content.Context;
8import android.os.Build;
9
10import java.nio.channels.WritableByteChannel;
11import java.util.Map;
12
13/**
14 * Network request factory using the native http stack implementation.
15 */
16@UsedByReflection("HttpUrlRequestFactory.java")
17class ChromiumUrlRequestFactory extends HttpUrlRequestFactory {
18    private UrlRequestContext mRequestContext;
19
20    @UsedByReflection("HttpUrlRequestFactory.java")
21    public ChromiumUrlRequestFactory(
22            Context context, HttpUrlRequestFactoryConfig config) {
23        if (isEnabled()) {
24            System.loadLibrary("cronet");
25            mRequestContext = new UrlRequestContext(
26                    context.getApplicationContext(), UserAgent.from(context),
27                    config.toString());
28        }
29    }
30
31    @Override
32    public boolean isEnabled() {
33        return Build.VERSION.SDK_INT >= 14;
34    }
35
36    @Override
37    public String getName() {
38        return "Chromium/" + UrlRequestContext.getVersion();
39    }
40
41    @Override
42    public HttpUrlRequest createRequest(String url, int requestPriority,
43            Map<String, String> headers, HttpUrlRequestListener listener) {
44        return new ChromiumUrlRequest(mRequestContext, url, requestPriority,
45                headers, listener);
46    }
47
48    @Override
49    public HttpUrlRequest createRequest(String url, int requestPriority,
50            Map<String, String> headers, WritableByteChannel channel,
51            HttpUrlRequestListener listener) {
52        return new ChromiumUrlRequest(mRequestContext, url, requestPriority,
53                headers, channel, listener);
54    }
55}
56