You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
struct LoadInfo {
uint32 process_id;
uint32 routing_id;
string host;
uint32 load_state; // net::LoadState enum
mojo_base.mojom.String16 state_param;
uint64 upload_position;
uint64 upload_size;
};
// Network service interface to the browser.
// network接口发送到browser接口
interface NetworkServiceClient {
// Called periodically to update the client about progress of the current
// loads. To avoid flooding the client, it has to ack the update before it can
// receive the next update.
OnLoadingStateUpdate(array<LoadInfo> infos) => ();
// Called to send raw header information and information about excluded
// cookies. Only called when |devtool_request_id| is available to the
// URLLoader.
OnRawRequest(
int32 process_id,
int32 routing_id,
string devtool_request_id,
array<CookieWithStatus> cookies_with_status,
array<HttpRawHeaderPair> headers);
// Called to send information about the cookies blocked from storage from a
// received response. Only called when |devtool_request_id| is available to
// the URLLoader.
OnRawResponse(
int32 process_id,
int32 routing_id,
string devtool_request_id,
array<CookieAndLineWithStatus> cookies_with_status,
array<HttpRawHeaderPair> headers,
string? raw_response_headers);
};
// ...
// Parameters needed to initialize the network service.
struct NetworkServiceParams {
ConnectionType initial_connection_type = CONNECTION_UNKNOWN;
ConnectionSubtype initial_connection_subtype = SUBTYPE_UNKNOWN;
// A set of environment variables that should be set in the network
// service when starting up.
array<EnvironmentVariable> environment;
};
// Information about how logging should be configured.
// Corresponds to logging::LoggingSettings.
[EnableIf=is_chromeos]
struct LoggingSettings {
uint32 logging_dest;
handle log_file_descriptor;
};
// Browser interface to the network service.
// browser接口发送数据到network接口
interface NetworkService {
// Sets client used by all |NetworkContext|s creating by |NetworkService|.
// Pending requests may hang if the |client| pipe is closed before they
// complete.
SetClient(pending_remote<NetworkServiceClient> client,
NetworkServiceParams params);
// Reinitializes the Network Service's logging with the given settings. This
// is needed on Chrome OS, which switches to a log file in the user's home
// directory once they log in.
[EnableIf=is_chromeos]
ReinitializeLogging(LoggingSettings settings);
// Starts logging SSL key material to the |file|. This must be called before
// any SSL connections are made. (See |SSLClientSocket::SetSSLKeyLogger()|
// for more details).
SetSSLKeyLogFile(mojo_base.mojom.File file);
// Creates a new network context with the given parameters.
CreateNetworkContext(pending_receiver<NetworkContext> context,
NetworkContextParams params);
//...
// Binds the test service's testing interface. Available only in some test
// environments.
BindTestInterface(pending_receiver<NetworkServiceTest> receiver);
};
本文主要是我在调试
chromium
代码中,遇到不知道如何找到mojo
调用方代码所做的测试,主要以NetworkService
为案例,其他mojo
也相同案例
在调试过程中有如下日志输出
现在想找到
CreateDefault
具体的调用者位置,根据上面的日志可以发现CreateDefault
是在"网络线程"中被调用,具体由谁发起的,这是我们需要关心的根据日志找到如下
mojom
定义在
mojom
中定义了两个接口实现:通常在浏览器进程中实现。它定义了网络服务可以调用的回调,以通知浏览器进程网络事件或状态的变化。
调用:当网络服务需要通知浏览器进程某些事件(例如,网络状态变化或其他通知)时,网络服务会调用这个接口的方法。这些调用通常发生在网络服务进程的线程中。
实现:在网络服务进程中实现。它定义了浏览器进程可以调用的网络操作或查询。
调用:当浏览器进程需要执行网络操作或查询时(例如,发起一个新的网络请求或获取网络状态),它会调用这个接口的方法。这些调用通常发生在浏览器进程的主线程或网络线程中。
可以看一下
mojom
生成后的文件这两个生成的文件最主要是定义了8个结构
NetworkServiceClient (Interface):
.mojom
文件定义的接口,描述了客户端应该实现的方法集合。NetworkServiceClientProxy:
NetworkServiceClient
接口的实例。当你调用其上的方法时,它会将这些调用打包成mojo
消息并发送到其他进程。mojo
消息并发送它们。NetworkServiceClientStub:
mojo
消息并将它们分派给实现NetworkServiceClient
接口的对象。NetworkServiceStubDispatch:
NetworkServiceStub
类提供支持。NetworkServiceStub
接收到一个mojo
消息时,它会使用NetworkServiceStubDispatch
中的方法来确定如何处理该消息。这同样涉及确定要调用哪个 NetworkService 接口的方法,并进行相应的参数解码。NetworkServiceClientStubDispatch
一样,这个类也通常包含静态方法,这些方法知道如何为每个在.mojom
文件中定义的方法处理消息。NetworkService (Interface):
.mojom
文件定义的接口,描述了网络服务应该实现的方法集合。NetworkServiceProxy:
NetworkService
接口的实例。当你调用其上的方法时,它会将这些调用打包成mojo
消息并发送到其他进程。mojo
消息并发送它们。NetworkServiceStub:
mojo
消息并将它们分派给实现NetworkService
接口的对象。NetworkServiceClientStubDispatch:
NetworkServiceClientStub
类提供支持。NetworkServiceClientStub
接收到一个mojo
消息时,它会使用NetworkServiceClientStubDispatch
中的方法来确定如何处理该消息。这包括确定要调用哪个NetworkServiceClient
接口的方法,并将消息的参数解码为正确的格式。.mojom
文件中定义的方法处理消息。简而言之:
NetworkServiceClient
和NetworkService
)定义了方法的集合,这些方法可以通过IPC
进行远程调用。mojo
消息。这种结构允许两个运行在不同进程中的对象通过
mojo IPC
机制相互通信。对
mojo
生成的代码有了基础的了解之后再来看一下开始的日志信息上文中说明了
NetworkServiceProxy
的作用,其相当于在其他进程中NetworkService
的代理,所以理论上来说,我们只要在proxy
代理这部分获取调用栈,应该就能获取到对应使用该功能的代码注意
STACK
设置位置是生成的mojo
实现代码中,在out
目录类似于这样的位置src\out\Release\gen\services\network\public\mojom\network_service.mojom.cc
设置
启动
chrome
,并查看调用栈类似的还有不少,可以根据自己的需要去找到真正调用该
NetworkService
的功能代码。上述文中用到的打印调用栈代码
The text was updated successfully, but these errors were encountered: