Merge from Chromium at DEPS revision 262940

This commit was generated by merge_to_master.py.

Change-Id: I9a3fddbb29857fa8f68a18c6a0115862b65f84d1
diff --git a/components/cronet/android/java/src/org/chromium/net/UrlRequestContext.java b/components/cronet/android/java/src/org/chromium/net/UrlRequestContext.java
new file mode 100644
index 0000000..102b5a1
--- /dev/null
+++ b/components/cronet/android/java/src/org/chromium/net/UrlRequestContext.java
@@ -0,0 +1,121 @@
+// Copyright 2014 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.chromium.net;
+
+import android.content.Context;
+import android.os.ConditionVariable;
+import android.os.Process;
+
+import org.chromium.base.CalledByNative;
+import org.chromium.base.JNINamespace;
+
+/**
+ * Provides context for the native HTTP operations.
+ */
+@JNINamespace("net")
+public class UrlRequestContext {
+    protected static final int LOG_NONE = 0;
+    protected static final int LOG_DEBUG = 1;
+    protected static final int LOG_VERBOSE = 2;
+
+    /**
+     * Native peer object, owned by UrlRequestContext.
+     */
+    private long mUrlRequestContextPeer;
+
+    private final ConditionVariable mStarted = new ConditionVariable();
+
+    /**
+     * Constructor.
+     *
+     * @param loggingLevel see {@link #LOG_NONE}, {@link #LOG_DEBUG} and
+     *            {@link #LOG_VERBOSE}.
+     */
+    protected UrlRequestContext(Context context, String userAgent,
+            int loggingLevel) {
+        mUrlRequestContextPeer = nativeCreateRequestContextPeer(context,
+                userAgent, loggingLevel);
+        // TODO(mef): Revisit the need of block here.
+        mStarted.block(2000);
+    }
+
+    /**
+     * Returns the version of this network stack formatted as N.N.N.N/X where
+     * N.N.N.N is the version of Chromium and X is the version of the JNI layer.
+     */
+    public static String getVersion() {
+        return nativeGetVersion();
+    }
+
+    /**
+     * Initializes statistics recorder.
+     */
+    public void initializeStatistics() {
+        nativeInitializeStatistics();
+    }
+
+    /**
+     * Gets current statistics recorded since |initializeStatistics| with
+     * |filter| as a substring as JSON text (an empty |filter| will include all
+     * registered histograms).
+     */
+    public String getStatisticsJSON(String filter) {
+        return nativeGetStatisticsJSON(filter);
+    }
+
+    /**
+     * Starts NetLog logging to a file named |fileName| in the
+     * application temporary directory. |fileName| must not be empty. Log level
+     * is LOG_ALL_BUT_BYTES. If the file exists it is truncated before starting.
+     * If actively logging the call is ignored.
+     */
+    public void startNetLogToFile(String fileName) {
+        nativeStartNetLogToFile(mUrlRequestContextPeer, fileName);
+    }
+
+    /**
+     * Stops NetLog logging and flushes file to disk. If a logging session is
+     * not in progress this call is ignored.
+     */
+    public void stopNetLog() {
+        nativeStopNetLog(mUrlRequestContextPeer);
+    }
+
+    @CalledByNative
+    private void initNetworkThread() {
+        Thread.currentThread().setName("ChromiumNet");
+        Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
+        mStarted.open();
+    }
+
+    @Override
+    protected void finalize() throws Throwable {
+        nativeReleaseRequestContextPeer(mUrlRequestContextPeer);
+        super.finalize();
+    }
+
+    protected long getUrlRequestContextPeer() {
+        return mUrlRequestContextPeer;
+    }
+
+    private static native String nativeGetVersion();
+
+    // Returns an instance URLRequestContextPeer to be stored in
+    // mUrlRequestContextPeer.
+    private native long nativeCreateRequestContextPeer(Context context,
+            String userAgent, int loggingLevel);
+
+    private native void nativeReleaseRequestContextPeer(
+            long urlRequestContextPeer);
+
+    private native void nativeInitializeStatistics();
+
+    private native String nativeGetStatisticsJSON(String filter);
+
+    private native void nativeStartNetLogToFile(long urlRequestContextPeer,
+            String fileName);
+
+    private native void nativeStopNetLog(long urlRequestContextPeer);
+}