| // Copyright 2024 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "android_webview/browser/aw_net_logs_connection.h" |
| |
| #include <unistd.h> |
| |
| #include <string> |
| |
| #include "base/base64.h" |
| #include "base/files/file.h" |
| #include "base/files/file_path.h" |
| #include "base/files/file_util.h" |
| #include "base/files/scoped_file.h" |
| #include "base/logging.h" |
| #include "net/log/file_net_log_observer.h" |
| #include "net/log/net_log.h" |
| #include "net/log/net_log_util.h" |
| |
| // Must come after all headers that specialize FromJniType() / ToJniType(). |
| #include "android_webview/browser_jni_headers/AwNetLogsConnection_jni.h" |
| |
| using base::android::JavaParamRef; |
| |
| namespace android_webview { |
| |
| AwNetLogsConnection::AwNetLogsConnection() = default; |
| |
| AwNetLogsConnection::~AwNetLogsConnection() { |
| if (aw_net_log_observer_) { |
| aw_net_log_observer_->StopObserving(nullptr, base::OnceClosure()); |
| } |
| } |
| |
| void AwNetLogsConnection::startNetLogBounded(int file_descriptor) { |
| // Do nothing if already logging to a directory. |
| if (aw_net_log_observer_) { |
| return; |
| } |
| |
| aw_net_log_observer_ = net::FileNetLogObserver::CreateBoundedFile( |
| base::File(file_descriptor), max_file_size, |
| net::NetLogCaptureMode::kDefault, /*constants=*/nullptr); |
| aw_net_log_observer_->StartObserving(net::NetLog::Get()); |
| } |
| |
| void AwNetLogsConnection::stopNetLogs() { |
| if (!aw_net_log_observer_) { |
| return; |
| } |
| aw_net_log_observer_->StopObserving(nullptr, base::OnceClosure()); |
| } |
| |
| AwNetLogsConnection* GetInstance() { |
| static AwNetLogsConnection* instance = nullptr; |
| if (!instance) { |
| instance = new AwNetLogsConnection(); |
| } |
| return instance; |
| } |
| |
| static void JNI_AwNetLogsConnection_StartNetLogs(JNIEnv* env, const jint j_fd) { |
| GetInstance()->startNetLogBounded(j_fd); |
| } |
| |
| static void JNI_AwNetLogsConnection_StopNetLogs(JNIEnv* env) { |
| GetInstance()->stopNetLogs(); |
| } |
| |
| } // namespace android_webview |