Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(271)

Side by Side Diff: components/cronet/android/chromium_url_request_context.cc

Issue 2339223002: Cronet API Refactoring (Closed)
Patch Set: Moved CronetSampleApp to AppCompat Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
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
5 #include "components/cronet/android/chromium_url_request_context.h"
6
7 #include <memory>
8 #include <string>
9 #include <utility>
10
11 #include "base/android/jni_android.h"
12 #include "base/android/jni_string.h"
13 #include "base/json/json_reader.h"
14 #include "base/logging.h"
15 #include "base/metrics/statistics_recorder.h"
16 #include "base/values.h"
17 #include "components/cronet/android/chromium_url_request.h"
18 #include "components/cronet/android/url_request_adapter.h"
19 #include "components/cronet/android/url_request_context_adapter.h"
20 #include "components/cronet/url_request_context_config.h"
21 #include "jni/ChromiumUrlRequestContext_jni.h"
22
23 using base::android::ConvertUTF8ToJavaString;
24 using base::android::ConvertJavaStringToUTF8;
25 using base::android::JavaParamRef;
26 using base::android::ScopedJavaLocalRef;
27
28 namespace {
29
30 // Delegate of URLRequestContextAdapter that delivers callbacks to the Java
31 // layer.
32 class JniURLRequestContextAdapterDelegate
33 : public cronet::URLRequestContextAdapter::
34 URLRequestContextAdapterDelegate {
35 public:
36 JniURLRequestContextAdapterDelegate(JNIEnv* env, jobject owner)
37 : owner_(env->NewGlobalRef(owner)) {}
38
39 void OnContextInitialized(
40 cronet::URLRequestContextAdapter* context_adapter) override {
41 JNIEnv* env = base::android::AttachCurrentThread();
42 cronet::Java_ChromiumUrlRequestContext_initNetworkThread(env, owner_);
43 // TODO(dplotnikov): figure out if we need to detach from the thread.
44 // The documentation says we should detach just before the thread exits.
45 }
46
47 protected:
48 ~JniURLRequestContextAdapterDelegate() override {
49 JNIEnv* env = base::android::AttachCurrentThread();
50 env->DeleteGlobalRef(owner_);
51 }
52
53 private:
54 jobject owner_;
55 };
56
57 } // namespace
58
59 namespace cronet {
60
61 // Explicitly register static JNI functions.
62 bool ChromiumUrlRequestContextRegisterJni(JNIEnv* env) {
63 return RegisterNativesImpl(env);
64 }
65
66 // Sets global user-agent to be used for all subsequent requests.
67 static jlong CreateRequestContextAdapter(
68 JNIEnv* env,
69 const JavaParamRef<jobject>& jcaller,
70 const JavaParamRef<jstring>& juser_agent,
71 jint jlog_level,
72 jlong jconfig) {
73 std::string user_agent = ConvertJavaStringToUTF8(env, juser_agent);
74
75 std::unique_ptr<URLRequestContextConfig> context_config(
76 reinterpret_cast<URLRequestContextConfig*>(jconfig));
77
78 // TODO(mef): MinLogLevel is global, shared by all URLRequestContexts.
79 // Revisit this if each URLRequestContext would need an individual log level.
80 logging::SetMinLogLevel(static_cast<int>(jlog_level));
81
82 // TODO(dplotnikov): set application context.
83 URLRequestContextAdapter* context_adapter = new URLRequestContextAdapter(
84 new JniURLRequestContextAdapterDelegate(env, jcaller), user_agent);
85 context_adapter->AddRef(); // Hold onto this ref-counted object.
86 context_adapter->Initialize(std::move(context_config));
87 return reinterpret_cast<jlong>(context_adapter);
88 }
89
90 // Releases native objects.
91 static void ReleaseRequestContextAdapter(JNIEnv* env,
92 const JavaParamRef<jobject>& jcaller,
93 jlong jurl_request_context_adapter) {
94 URLRequestContextAdapter* context_adapter =
95 reinterpret_cast<URLRequestContextAdapter*>(jurl_request_context_adapter);
96 // TODO(mef): Revisit this from thread safety point of view: Can we delete a
97 // thread while running on that thread?
98 // URLRequestContextAdapter is a ref-counted object, and may have pending
99 // tasks,
100 // so we need to release it instead of deleting here.
101 context_adapter->Release();
102 }
103
104 // Starts recording statistics.
105 static void InitializeStatistics(JNIEnv* env,
106 const JavaParamRef<jobject>& jcaller) {
107 base::StatisticsRecorder::Initialize();
108 }
109
110 // Gets current statistics with |jfilter| as a substring as JSON text (an empty
111 // |jfilter| will include all registered histograms).
112 static ScopedJavaLocalRef<jstring> GetStatisticsJSON(
113 JNIEnv* env,
114 const JavaParamRef<jobject>& jcaller,
115 const JavaParamRef<jstring>& jfilter) {
116 std::string query = ConvertJavaStringToUTF8(env, jfilter);
117 std::string json = base::StatisticsRecorder::ToJSON(query);
118 return ConvertUTF8ToJavaString(env, json);
119 }
120
121 // Starts recording NetLog into file with |jfilename|.
122 static void StartNetLogToFile(JNIEnv* env,
123 const JavaParamRef<jobject>& jcaller,
124 jlong jurl_request_context_adapter,
125 const JavaParamRef<jstring>& jfilename,
126 jboolean jlog_all) {
127 URLRequestContextAdapter* context_adapter =
128 reinterpret_cast<URLRequestContextAdapter*>(jurl_request_context_adapter);
129 std::string filename = ConvertJavaStringToUTF8(env, jfilename);
130 context_adapter->StartNetLogToFile(filename, jlog_all);
131 }
132
133 // Stops recording NetLog.
134 static void StopNetLog(JNIEnv* env,
135 const JavaParamRef<jobject>& jcaller,
136 jlong jurl_request_context_adapter) {
137 URLRequestContextAdapter* context_adapter =
138 reinterpret_cast<URLRequestContextAdapter*>(jurl_request_context_adapter);
139 context_adapter->StopNetLog();
140 }
141
142 // Called on application's main Java thread.
143 static void InitRequestContextOnMainThread(JNIEnv* env,
144 const JavaParamRef<jobject>& jcaller,
145 jlong jurl_request_context_adapter) {
146 URLRequestContextAdapter* context_adapter =
147 reinterpret_cast<URLRequestContextAdapter*>(jurl_request_context_adapter);
148 context_adapter->InitRequestContextOnMainThread();
149 }
150
151 } // namespace cronet
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698