core里面的通知probe是从content层调用的
1, D:\dev\electron9\src\content\renderer\media\inspector_media_event_handler.cc
构造入参有个agent
InspectorMediaEventHandler::InspectorMediaEventHandler( blink::MediaInspectorContext* inspector_context) : inspector_context_(inspector_context), player_id_(inspector_context_->CreatePlayer()) {}
里面调用:inspector_context_->NotifyPlayerEvents(player_id_, events);
2,上面函数实现在:D:\dev\electron9\src\third_party\blink\renderer\core\inspector\inspector_media_context_impl.cc
// Convert public version of event to protocol version, and send it. void MediaInspectorContextImpl::NotifyPlayerEvents( WebString playerId, InspectorPlayerEvents events) { const auto& player_search = players_.find(playerId); if (player_search == players_.end()) DCHECK(false); Vector<InspectorPlayerEvent> to_send; to_send.ReserveCapacity(events.size()); for (const auto& event : events) { player_search->value->events.emplace_back(event); to_send.push_back(event); } probe::PlayerEventsAdded(GetSupplementable(), playerId, to_send); }
3,发送通知:SendQueuedMediaEvents
0,这个最初初始化在D:\dev\electron9\src\third_party\blink\renderer\modules\modules_initializer.cc
html 的element元素构建而来
std::unique_ptr<WebMediaPlayer> ModulesInitializer::CreateWebMediaPlayer( WebLocalFrameClient* web_frame_client, HTMLMediaElement& html_media_element, const WebMediaPlayerSource& source, WebMediaPlayerClient* media_player_client) const { HTMLMediaElementEncryptedMedia& encrypted_media = HTMLMediaElementEncryptedMedia::From(html_media_element); WebString sink_id( HTMLMediaElementAudioOutputDevice::sinkId(html_media_element)); MediaInspectorContextImpl* context_impl = MediaInspectorContextImpl::FromHtmlMediaElement(html_media_element); return base::WrapUnique(web_frame_client->CreateMediaPlayer( source, media_player_client, context_impl, &encrypted_media, encrypted_media.ContentDecryptionModule(), sink_id)); }