1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- // Copyright 2020 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #ifndef COMPONENTS_NET_LOG_NET_LOG_PROXY_SOURCE_H_
- #define COMPONENTS_NET_LOG_NET_LOG_PROXY_SOURCE_H_
- #include "base/memory/weak_ptr.h"
- #include "mojo/public/cpp/bindings/receiver.h"
- #include "mojo/public/cpp/bindings/remote.h"
- #include "net/log/net_log.h"
- #include "services/network/public/mojom/network_service.mojom.h"
- namespace base {
- class SequencedTaskRunner;
- }
- namespace net_log {
- // Implementation of NetLogProxySource mojo interface which observes local
- // NetLog events and proxies them over mojo to a remote NetLogProxySink.
- // Observing and proxying is only active when notified through
- // UpdateCaptureModes() that capturing is active in the remote process.
- class NetLogProxySource : public net::NetLog::ThreadSafeObserver,
- public network::mojom::NetLogProxySource {
- public:
- // When notified through |proxy_source_receiver| that capturing is active,
- // registers a local NetLog observer and sends all NetLog events to
- // |proxy_sink_remote|.
- // The caller is expected to create a new NetLogProxySource if the remote
- // process is restarted.
- NetLogProxySource(
- mojo::PendingReceiver<network::mojom::NetLogProxySource>
- proxy_source_receiver,
- mojo::Remote<network::mojom::NetLogProxySink> proxy_sink_remote);
- ~NetLogProxySource() override;
- NetLogProxySource(const NetLogProxySource&) = delete;
- NetLogProxySource& operator=(const NetLogProxySource&) = delete;
- // Remove NetLog observer and close mojo pipes.
- void ShutDown();
- // NetLog::ThreadSafeObserver:
- void OnAddEntry(const net::NetLogEntry& entry) override;
- // mojom::NetLogProxySource:
- void UpdateCaptureModes(net::NetLogCaptureModeSet modes) override;
- private:
- // Proxy entry to the remote. Must only be called on |task_runner_|.
- void SendNetLogEntry(net::NetLogEventType type,
- net::NetLogSourceType source_type,
- uint32_t source_id,
- base::TimeTicks source_start_time,
- net::NetLogEventPhase phase,
- base::TimeTicks time,
- base::Value params);
- mojo::Receiver<network::mojom::NetLogProxySource> proxy_source_receiver_;
- mojo::Remote<network::mojom::NetLogProxySink> proxy_sink_remote_;
- scoped_refptr<base::SequencedTaskRunner> task_runner_;
- // A WeakPtr to |this|, which is used when posting tasks from the
- // NetLog::ThreadSafeObserver to |task_runner_|. This single WeakPtr instance
- // is used for all tasks as the ThreadSafeObserver may call on any thread, so
- // the weak_factory_ cannot be accessed safely from those threads.
- base::WeakPtr<NetLogProxySource> weak_this_;
- base::WeakPtrFactory<NetLogProxySource> weak_factory_{this};
- };
- } // namespace net_log
- #endif // COMPONENTS_NET_LOG_NET_LOG_PROXY_SOURCE_H_
|