// Copyright (c) 2018 GitHub, Inc. // Use of this source code is governed by the MIT license that can be // found in the LICENSE file. #ifndef ELECTRON_SHELL_BROWSER_API_ELECTRON_API_NET_LOG_H_ #define ELECTRON_SHELL_BROWSER_API_ELECTRON_API_NET_LOG_H_ #include #include "base/memory/raw_ptr.h" #include "base/memory/weak_ptr.h" #include "base/values.h" #include "gin/wrappable.h" #include "mojo/public/cpp/bindings/remote.h" #include "net/log/net_log_capture_mode.h" #include "services/network/public/mojom/net_log.mojom.h" #include "shell/common/gin_helper/promise.h" namespace base { class FilePath; class TaskRunner; } // namespace base namespace gin { class Arguments; template class Handle; } // namespace gin namespace electron { class ElectronBrowserContext; namespace api { // The code is referenced from the net_log::NetExportFileWriter class. class NetLog final : public gin::Wrappable { public: static gin::Handle Create(v8::Isolate* isolate, ElectronBrowserContext* browser_context); v8::Local StartLogging(base::FilePath log_path, gin::Arguments* args); v8::Local StopLogging(gin::Arguments* args); bool IsCurrentlyLogging() const; // gin::Wrappable static gin::WrapperInfo kWrapperInfo; gin::ObjectTemplateBuilder GetObjectTemplateBuilder( v8::Isolate* isolate) override; const char* GetTypeName() override; // disable copy NetLog(const NetLog&) = delete; NetLog& operator=(const NetLog&) = delete; protected: explicit NetLog(v8::Isolate* isolate, ElectronBrowserContext* browser_context); ~NetLog() override; void OnConnectionError(); void StartNetLogAfterCreateFile(net::NetLogCaptureMode capture_mode, uint64_t max_file_size, base::Value::Dict custom_constants, base::File output_file); void NetLogStarted(int32_t error); private: raw_ptr browser_context_; mojo::Remote net_log_exporter_; std::optional> pending_start_promise_; scoped_refptr file_task_runner_; base::WeakPtrFactory weak_ptr_factory_{this}; }; } // namespace api } // namespace electron #endif // ELECTRON_SHELL_BROWSER_API_ELECTRON_API_NET_LOG_H_