| Index: components/cronet/android/cronet_url_request_context_adapter.cc
|
| diff --git a/components/cronet/android/cronet_url_request_context_adapter.cc b/components/cronet/android/cronet_url_request_context_adapter.cc
|
| index f195c0447bba811d74dfb0e15cde530b267456b5..dda9ce4852405a045032c2c610282049a4ab170b 100644
|
| --- a/components/cronet/android/cronet_url_request_context_adapter.cc
|
| +++ b/components/cronet/android/cronet_url_request_context_adapter.cc
|
| @@ -58,6 +58,7 @@
|
| #include "net/http/http_server_properties_manager.h"
|
| #include "net/log/file_net_log_observer.h"
|
| #include "net/log/net_log_util.h"
|
| +#include "net/log/write_to_file_net_log_observer.h"
|
| #include "net/nqe/external_estimate_provider.h"
|
| #include "net/nqe/network_qualities_prefs_manager.h"
|
| #include "net/proxy/proxy_config_service_android.h"
|
| @@ -505,7 +506,7 @@
|
| }
|
|
|
| // Stop NetLog observer if there is one.
|
| - StopNetLogOnNetworkThread();
|
| + StopNetLogHelper();
|
| }
|
|
|
| void CronetURLRequestContextAdapter::InitRequestContextOnMainThread(
|
| @@ -609,7 +610,6 @@
|
| DCHECK(GetNetworkTaskRunner()->BelongsToCurrentThread());
|
| DCHECK(!is_context_initialized_);
|
| DCHECK(proxy_config_service_);
|
| -
|
| // TODO(mmenke): Add method to have the builder enable SPDY.
|
| net::URLRequestContextBuilder context_builder;
|
|
|
| @@ -647,9 +647,6 @@
|
| config->ConfigureURLRequestContextBuilder(&context_builder,
|
| g_net_log.Get().net_log(),
|
| GetFileThread()->task_runner());
|
| -
|
| - effective_experimental_options_ =
|
| - std::move(config->effective_experimental_options);
|
|
|
| // Set up pref file if storage path is specified.
|
| if (!config->storage_path.empty()) {
|
| @@ -882,17 +879,28 @@
|
| const JavaParamRef<jobject>& jcaller,
|
| const JavaParamRef<jstring>& jfile_name,
|
| jboolean jlog_all) {
|
| - base::FilePath file_path(
|
| - base::android::ConvertJavaStringToUTF8(env, jfile_name));
|
| + base::AutoLock lock(write_to_file_observer_lock_);
|
| + // Do nothing if already logging to a file.
|
| + if (write_to_file_observer_)
|
| + return true;
|
| + std::string file_name =
|
| + base::android::ConvertJavaStringToUTF8(env, jfile_name);
|
| + base::FilePath file_path(file_name);
|
| base::ScopedFILE file(base::OpenFile(file_path, "w"));
|
| if (!file) {
|
| LOG(ERROR) << "Failed to open NetLog file for writing.";
|
| return false;
|
| }
|
| - PostTaskToNetworkThread(
|
| - FROM_HERE,
|
| - base::Bind(&CronetURLRequestContextAdapter::StartNetLogOnNetworkThread,
|
| - base::Unretained(this), file_path, jlog_all == JNI_TRUE));
|
| +
|
| + write_to_file_observer_.reset(new net::WriteToFileNetLogObserver());
|
| + if (jlog_all == JNI_TRUE) {
|
| + write_to_file_observer_->set_capture_mode(
|
| + net::NetLogCaptureMode::IncludeSocketBytes());
|
| + }
|
| + write_to_file_observer_->StartObserving(
|
| + g_net_log.Get().net_log(), std::move(file),
|
| + /*constants=*/nullptr, /*url_request_context=*/nullptr);
|
| +
|
| return true;
|
| }
|
|
|
| @@ -914,11 +922,7 @@
|
| void CronetURLRequestContextAdapter::StopNetLog(
|
| JNIEnv* env,
|
| const JavaParamRef<jobject>& jcaller) {
|
| - DCHECK(!GetNetworkTaskRunner()->BelongsToCurrentThread());
|
| - PostTaskToNetworkThread(
|
| - FROM_HERE,
|
| - base::Bind(&CronetURLRequestContextAdapter::StopNetLogOnNetworkThread,
|
| - base::Unretained(this)));
|
| + StopNetLogHelper();
|
| }
|
|
|
| void CronetURLRequestContextAdapter::GetCertVerifierData(
|
| @@ -1005,25 +1009,6 @@
|
| (timestamp - base::TimeTicks::UnixEpoch()).InMilliseconds(), source);
|
| }
|
|
|
| -void CronetURLRequestContextAdapter::StartNetLogOnNetworkThread(
|
| - const base::FilePath& file_path,
|
| - bool include_socket_bytes) {
|
| - DCHECK(GetNetworkTaskRunner()->BelongsToCurrentThread());
|
| -
|
| - // Do nothing if already logging to a file.
|
| - if (net_log_file_observer_)
|
| - return;
|
| - net_log_file_observer_ = net::FileNetLogObserver::CreateUnbounded(
|
| - GetFileThread()->task_runner(), file_path, /*constants=*/nullptr);
|
| - CreateNetLogEntriesForActiveObjects({context_.get()},
|
| - net_log_file_observer_.get());
|
| - net::NetLogCaptureMode capture_mode =
|
| - include_socket_bytes ? net::NetLogCaptureMode::IncludeSocketBytes()
|
| - : net::NetLogCaptureMode::Default();
|
| - net_log_file_observer_->StartObserving(g_net_log.Get().net_log(),
|
| - capture_mode);
|
| -}
|
| -
|
| void CronetURLRequestContextAdapter::StartNetLogToBoundedFileOnNetworkThread(
|
| const std::string& dir_path,
|
| bool include_socket_bytes,
|
| @@ -1031,37 +1016,34 @@
|
| DCHECK(GetNetworkTaskRunner()->BelongsToCurrentThread());
|
|
|
| // Do nothing if already logging to a directory.
|
| - if (net_log_file_observer_)
|
| + if (bounded_file_observer_)
|
| return;
|
|
|
| // Filepath for NetLog files must exist and be writable.
|
| base::FilePath file_path(dir_path);
|
| DCHECK(base::PathIsWritable(file_path));
|
|
|
| - net_log_file_observer_ = net::FileNetLogObserver::CreateBounded(
|
| + bounded_file_observer_ = net::FileNetLogObserver::CreateBounded(
|
| GetFileThread()->task_runner(), file_path, size, kNumNetLogEventFiles,
|
| /*constants=*/nullptr);
|
|
|
| CreateNetLogEntriesForActiveObjects({context_.get()},
|
| - net_log_file_observer_.get());
|
| + bounded_file_observer_.get());
|
|
|
| net::NetLogCaptureMode capture_mode =
|
| include_socket_bytes ? net::NetLogCaptureMode::IncludeSocketBytes()
|
| : net::NetLogCaptureMode::Default();
|
| - net_log_file_observer_->StartObserving(g_net_log.Get().net_log(),
|
| + bounded_file_observer_->StartObserving(g_net_log.Get().net_log(),
|
| capture_mode);
|
| }
|
|
|
| -void CronetURLRequestContextAdapter::StopNetLogOnNetworkThread() {
|
| +void CronetURLRequestContextAdapter::StopBoundedFileNetLogOnNetworkThread() {
|
| DCHECK(GetNetworkTaskRunner()->BelongsToCurrentThread());
|
| -
|
| - if (!net_log_file_observer_)
|
| - return;
|
| - net_log_file_observer_->StopObserving(
|
| - GetNetLogInfo(),
|
| + bounded_file_observer_->StopObserving(
|
| + net::GetNetInfo(context_.get(), net::NET_INFO_ALL_SOURCES),
|
| base::Bind(&CronetURLRequestContextAdapter::StopNetLogCompleted,
|
| base::Unretained(this)));
|
| - net_log_file_observer_.reset();
|
| + bounded_file_observer_.reset();
|
| }
|
|
|
| void CronetURLRequestContextAdapter::StopNetLogCompleted() {
|
| @@ -1069,15 +1051,18 @@
|
| base::android::AttachCurrentThread(), jcronet_url_request_context_.obj());
|
| }
|
|
|
| -std::unique_ptr<base::DictionaryValue>
|
| -CronetURLRequestContextAdapter::GetNetLogInfo() const {
|
| - std::unique_ptr<base::DictionaryValue> net_info =
|
| - net::GetNetInfo(context_.get(), net::NET_INFO_ALL_SOURCES);
|
| - if (effective_experimental_options_) {
|
| - net_info->Set("cronetExperimentalParams",
|
| - effective_experimental_options_->CreateDeepCopy());
|
| - }
|
| - return net_info;
|
| +void CronetURLRequestContextAdapter::StopNetLogHelper() {
|
| + base::AutoLock lock(write_to_file_observer_lock_);
|
| + DCHECK(!(write_to_file_observer_ && bounded_file_observer_));
|
| + if (write_to_file_observer_) {
|
| + write_to_file_observer_->StopObserving(/*url_request_context=*/nullptr);
|
| + write_to_file_observer_.reset();
|
| + } else if (bounded_file_observer_) {
|
| + PostTaskToNetworkThread(FROM_HERE,
|
| + base::Bind(&CronetURLRequestContextAdapter::
|
| + StopBoundedFileNetLogOnNetworkThread,
|
| + base::Unretained(this)));
|
| + }
|
| }
|
|
|
| // Create a URLRequestContextConfig from the given parameters.
|
|
|