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

Side by Side Diff: components/cronet/android/cronet_url_request_adapter.h

Issue 2844803002: [Cronet] Make metrics reporting happen after terminal callbacks. (Closed)
Patch Set: remove an invalid comment Created 3 years, 7 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
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef COMPONENTS_CRONET_ANDROID_CRONET_URL_REQUEST_ADAPTER_H_ 5 #ifndef COMPONENTS_CRONET_ANDROID_CRONET_URL_REQUEST_ADAPTER_H_
6 #define COMPONENTS_CRONET_ANDROID_CRONET_URL_REQUEST_ADAPTER_H_ 6 #define COMPONENTS_CRONET_ANDROID_CRONET_URL_REQUEST_ADAPTER_H_
7 7
8 #include <jni.h> 8 #include <jni.h>
9 9
10 #include <memory> 10 #include <memory>
11 #include <string> 11 #include <string>
12 12
13 #include "base/android/jni_android.h" 13 #include "base/android/jni_android.h"
14 #include "base/android/jni_array.h" 14 #include "base/android/jni_array.h"
15 #include "base/android/jni_string.h" 15 #include "base/android/jni_string.h"
16 #include "base/android/scoped_java_ref.h" 16 #include "base/android/scoped_java_ref.h"
17 #include "base/callback.h" 17 #include "base/callback.h"
18 #include "base/location.h" 18 #include "base/location.h"
19 #include "base/macros.h" 19 #include "base/macros.h"
20 #include "base/memory/ref_counted.h" 20 #include "base/memory/ref_counted.h"
21 #include "base/memory/weak_ptr.h"
21 #include "base/time/time.h" 22 #include "base/time/time.h"
22 #include "net/base/request_priority.h" 23 #include "net/base/request_priority.h"
23 #include "net/url_request/url_request.h" 24 #include "net/url_request/url_request.h"
24 #include "url/gurl.h" 25 #include "url/gurl.h"
25 26
26 namespace net { 27 namespace net {
27 class HttpRequestHeaders; 28 class HttpRequestHeaders;
28 class SSLCertRequestInfo; 29 class SSLCertRequestInfo;
29 class SSLInfo; 30 class SSLInfo;
30 class UploadDataStream; 31 class UploadDataStream;
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 const base::android::JavaParamRef<jobject>& jcaller, 74 const base::android::JavaParamRef<jobject>& jcaller,
74 const base::android::JavaParamRef<jstring>& jname, 75 const base::android::JavaParamRef<jstring>& jname,
75 const base::android::JavaParamRef<jstring>& jvalue); 76 const base::android::JavaParamRef<jstring>& jvalue);
76 77
77 // Adds a request body to the request before it starts. 78 // Adds a request body to the request before it starts.
78 void SetUpload(std::unique_ptr<net::UploadDataStream> upload); 79 void SetUpload(std::unique_ptr<net::UploadDataStream> upload);
79 80
80 // Starts the request. 81 // Starts the request.
81 void Start(JNIEnv* env, const base::android::JavaParamRef<jobject>& jcaller); 82 void Start(JNIEnv* env, const base::android::JavaParamRef<jobject>& jcaller);
82 83
83 void GetStatus( 84 void GetStatus(JNIEnv* env,
84 JNIEnv* env, 85 const base::android::JavaParamRef<jobject>& jcaller,
85 const base::android::JavaParamRef<jobject>& jcaller, 86 const base::android::JavaParamRef<jobject>& jstatus_listener);
86 const base::android::JavaParamRef<jobject>& jstatus_listener) const;
87 87
88 // Follows redirect. 88 // Follows redirect.
89 void FollowDeferredRedirect( 89 void FollowDeferredRedirect(
90 JNIEnv* env, 90 JNIEnv* env,
91 const base::android::JavaParamRef<jobject>& jcaller); 91 const base::android::JavaParamRef<jobject>& jcaller);
92 92
93 // Reads more data. 93 // Reads more data.
94 jboolean ReadData(JNIEnv* env, 94 jboolean ReadData(JNIEnv* env,
95 const base::android::JavaParamRef<jobject>& jcaller, 95 const base::android::JavaParamRef<jobject>& jcaller,
96 const base::android::JavaParamRef<jobject>& jbyte_buffer, 96 const base::android::JavaParamRef<jobject>& jbyte_buffer,
97 jint jposition, 97 jint jposition,
98 jint jcapacity); 98 jint jcapacity);
99 99
100 // Releases all resources for the request and deletes the object itself. 100 // Releases all resources for the request and deletes the object itself.
101 // |jsend_on_canceled| indicates if Java onCanceled callback should be
102 // issued to indicate when no more callbacks will be issued.
103 void Destroy(JNIEnv* env, 101 void Destroy(JNIEnv* env,
104 const base::android::JavaParamRef<jobject>& jcaller, 102 const base::android::JavaParamRef<jobject>& jcaller);
105 jboolean jsend_on_canceled); 103
104 void Cancel(JNIEnv* env, const base::android::JavaParamRef<jobject>& jcaller);
106 105
107 // net::URLRequest::Delegate implementations: 106 // net::URLRequest::Delegate implementations:
108 107
109 void OnReceivedRedirect(net::URLRequest* request, 108 void OnReceivedRedirect(net::URLRequest* request,
110 const net::RedirectInfo& redirect_info, 109 const net::RedirectInfo& redirect_info,
111 bool* defer_redirect) override; 110 bool* defer_redirect) override;
112 void OnCertificateRequested( 111 void OnCertificateRequested(
113 net::URLRequest* request, 112 net::URLRequest* request,
114 net::SSLCertRequestInfo* cert_request_info) override; 113 net::SSLCertRequestInfo* cert_request_info) override;
115 void OnSSLCertificateError(net::URLRequest* request, 114 void OnSSLCertificateError(net::URLRequest* request,
116 const net::SSLInfo& ssl_info, 115 const net::SSLInfo& ssl_info,
117 bool fatal) override; 116 bool fatal) override;
118 void OnResponseStarted(net::URLRequest* request, int net_error) override; 117 void OnResponseStarted(net::URLRequest* request, int net_error) override;
119 void OnReadCompleted(net::URLRequest* request, int bytes_read) override; 118 void OnReadCompleted(net::URLRequest* request, int bytes_read) override;
120 119
121 private: 120 private:
122 friend class TestUtil; 121 friend class TestUtil;
123 122
124 void StartOnNetworkThread(); 123 void StartOnNetworkThread();
125 void GetStatusOnNetworkThread( 124 void GetStatusOnNetworkThread(
126 const base::android::ScopedJavaGlobalRef<jobject>& jstatus_listener_ref) 125 const base::android::ScopedJavaGlobalRef<jobject>& jstatus_listener_ref)
127 const; 126 const;
128 // Gets response headers on network thread. 127 // Gets response headers on network thread.
129 base::android::ScopedJavaLocalRef<jobjectArray> GetResponseHeaders( 128 base::android::ScopedJavaLocalRef<jobjectArray> GetResponseHeaders(
130 JNIEnv* env); 129 JNIEnv* env);
131 void FollowDeferredRedirectOnNetworkThread(); 130 void FollowDeferredRedirectOnNetworkThread();
132 void ReadDataOnNetworkThread( 131 void ReadDataOnNetworkThread(
133 scoped_refptr<IOBufferWithByteBuffer> read_buffer, 132 scoped_refptr<IOBufferWithByteBuffer> read_buffer,
134 int buffer_size); 133 int buffer_size);
135 void DestroyOnNetworkThread(bool send_on_canceled); 134 void DestroyOnNetworkThread();
135 void CancelOnNetworkThread();
136 136
137 // Report error and cancel request_adapter. 137 // Report error and cancel request_adapter.
138 void ReportError(net::URLRequest* request, int net_error); 138 void ReportError(net::URLRequest* request, int net_error);
139 // Reports metrics collected to the Java layer 139 // Reports metrics collected to the Java layer
140 void MaybeReportMetrics(JNIEnv* env) const; 140 void MaybeReportMetrics(JNIEnv* env) const;
141 141
142 CronetURLRequestContextAdapter* context_; 142 CronetURLRequestContextAdapter* context_;
143 143
144 // Java object that owns this CronetURLRequestContextAdapter. 144 // Java object that owns this CronetURLRequestContextAdapter.
145 base::android::ScopedJavaGlobalRef<jobject> owner_; 145 base::android::ScopedJavaGlobalRef<jobject> owner_;
146 146
147 const GURL initial_url_; 147 const GURL initial_url_;
148 const net::RequestPriority initial_priority_; 148 const net::RequestPriority initial_priority_;
149 std::string initial_method_; 149 std::string initial_method_;
150 int load_flags_; 150 int load_flags_;
151 net::HttpRequestHeaders initial_request_headers_; 151 net::HttpRequestHeaders initial_request_headers_;
152 std::unique_ptr<net::UploadDataStream> upload_; 152 std::unique_ptr<net::UploadDataStream> upload_;
153 153
154 scoped_refptr<IOBufferWithByteBuffer> read_buffer_; 154 scoped_refptr<IOBufferWithByteBuffer> read_buffer_;
155 std::unique_ptr<net::URLRequest> url_request_; 155 std::unique_ptr<net::URLRequest> url_request_;
156 156
157 // Whether detailed metrics should be collected and reported to Java for this 157 // Whether detailed metrics should be collected and reported to Java for this
158 // request. 158 // request.
159 const bool enable_metrics_; 159 const bool enable_metrics_;
160 160
161 // This is needed because Native code can initiate destruction of |this| while
162 // there are posted tasks from Java yet to be run on the network task runner.
163 base::WeakPtrFactory<CronetURLRequestAdapter> weak_ptr_factory_;
164
161 DISALLOW_COPY_AND_ASSIGN(CronetURLRequestAdapter); 165 DISALLOW_COPY_AND_ASSIGN(CronetURLRequestAdapter);
162 }; 166 };
163 167
164 } // namespace cronet 168 } // namespace cronet
165 169
166 #endif // COMPONENTS_CRONET_ANDROID_CRONET_URL_REQUEST_ADAPTER_H_ 170 #endif // COMPONENTS_CRONET_ANDROID_CRONET_URL_REQUEST_ADAPTER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698