diff options
m--------- | src/3rdparty | 0 | ||||
-rw-r--r-- | src/core/chromium_overrides.cpp | 78 | ||||
-rw-r--r-- | src/core/content_browser_client_qt.cpp | 9 | ||||
-rw-r--r-- | src/core/net/webui_controller_factory_qt.cpp | 18 | ||||
-rw-r--r-- | src/core/qtwebengine_resources.gni | 9 | ||||
-rw-r--r-- | src/core/qtwebengine_sources.gni | 46 | ||||
-rw-r--r-- | src/core/renderer/content_renderer_client_qt.cpp | 24 | ||||
-rw-r--r-- | src/core/renderer/content_renderer_client_qt.h | 12 | ||||
-rw-r--r-- | src/core/web_engine_context.cpp | 21 | ||||
-rw-r--r-- | src/core/web_engine_context.h | 7 | ||||
-rw-r--r-- | tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp | 2 |
11 files changed, 217 insertions, 9 deletions
diff --git a/src/3rdparty b/src/3rdparty -Subproject 471e102ba11517b5e5a3a996c621b2006e41070 +Subproject 7d71aca116de5f2a4e6ceaef91f0d989dcf69d1 diff --git a/src/core/chromium_overrides.cpp b/src/core/chromium_overrides.cpp index 121f664e9..979f91ba2 100644 --- a/src/core/chromium_overrides.cpp +++ b/src/core/chromium_overrides.cpp @@ -70,6 +70,10 @@ #include "net/ssl/openssl_client_key_store.h" #endif +#if !QT_CONFIG(webengine_webrtc) && QT_CONFIG(webengine_extensions) +#include "chrome/browser/extensions/api/webrtc_logging_private/webrtc_logging_private_api.h" +#endif + void *GetQtXDisplay() { return GLContextHelper::getXDisplay(); @@ -197,3 +201,77 @@ std::unique_ptr<ui::OSExchangeDataProvider> ui::OSExchangeDataProviderFactory::C { return nullptr; } + +#if !QT_CONFIG(webengine_webrtc) && QT_CONFIG(webengine_extensions) +namespace extensions { +ExtensionFunction::ResponseAction WebrtcLoggingPrivateSetMetaDataFunction::Run() +{ + return RespondNow(NoArguments()); +} + +ExtensionFunction::ResponseAction WebrtcLoggingPrivateStartFunction::Run() +{ + return RespondNow(NoArguments()); +} + +ExtensionFunction::ResponseAction WebrtcLoggingPrivateSetUploadOnRenderCloseFunction::Run() +{ + return RespondNow(NoArguments()); +} + +ExtensionFunction::ResponseAction WebrtcLoggingPrivateStopFunction::Run() +{ + return RespondNow(NoArguments()); +} + +ExtensionFunction::ResponseAction WebrtcLoggingPrivateStoreFunction::Run() +{ + return RespondNow(NoArguments()); +} + +ExtensionFunction::ResponseAction WebrtcLoggingPrivateUploadStoredFunction::Run() +{ + return RespondNow(NoArguments()); +} + +ExtensionFunction::ResponseAction WebrtcLoggingPrivateUploadFunction::Run() +{ + return RespondNow(NoArguments()); +} + +ExtensionFunction::ResponseAction WebrtcLoggingPrivateDiscardFunction::Run() +{ + return RespondNow(NoArguments()); +} + +ExtensionFunction::ResponseAction WebrtcLoggingPrivateStartRtpDumpFunction::Run() +{ + return RespondNow(NoArguments()); +} + +ExtensionFunction::ResponseAction WebrtcLoggingPrivateStopRtpDumpFunction::Run() +{ + return RespondNow(NoArguments()); +} + +ExtensionFunction::ResponseAction WebrtcLoggingPrivateStartAudioDebugRecordingsFunction::Run() +{ + return RespondNow(NoArguments()); +} + +ExtensionFunction::ResponseAction WebrtcLoggingPrivateStopAudioDebugRecordingsFunction::Run() +{ + return RespondNow(NoArguments()); +} + +ExtensionFunction::ResponseAction WebrtcLoggingPrivateStartEventLoggingFunction::Run() +{ + return RespondNow(NoArguments()); +} + +ExtensionFunction::ResponseAction WebrtcLoggingPrivateGetLogsDirectoryFunction::Run() +{ + return RespondNow(NoArguments()); +} +} // namespace extensions +#endif // !QT_CONFIG(webengine_webrtc) && QT_CONFIG(webengine_extensions) diff --git a/src/core/content_browser_client_qt.cpp b/src/core/content_browser_client_qt.cpp index 5a30a4388..fbc57999e 100644 --- a/src/core/content_browser_client_qt.cpp +++ b/src/core/content_browser_client_qt.cpp @@ -111,6 +111,7 @@ #include "web_contents_adapter.h" #include "web_contents_delegate_qt.h" #include "web_contents_view_qt.h" +#include "web_engine_context.h" #include "web_engine_library_info.h" #include "api/qwebenginecookiestore.h" #include "api/qwebenginecookiestore_p.h" @@ -140,6 +141,10 @@ #include "components/spellcheck/common/spellcheck.mojom.h" #endif +#if QT_CONFIG(webengine_webrtc) && QT_CONFIG(webengine_extensions) +#include "chrome/browser/media/webrtc/webrtc_logging_controller.h" +#endif + #if defined(Q_OS_LINUX) #include "global_descriptors_qt.h" #endif @@ -319,6 +324,10 @@ void ContentBrowserClientQt::RenderProcessWillLaunch(content::RenderProcessHost const int id = host->GetID(); Profile *profile = Profile::FromBrowserContext(host->GetBrowserContext()); +#if QT_CONFIG(webengine_webrtc) && QT_CONFIG(webengine_extensions) + WebRtcLoggingController::AttachToRenderProcessHost(host, WebEngineContext::current()->webRtcLogUploader()); +#endif + // Allow requesting custom schemes. const auto policy = content::ChildProcessSecurityPolicy::GetInstance(); const auto profileAdapter = static_cast<ProfileQt *>(profile)->profileAdapter(); diff --git a/src/core/net/webui_controller_factory_qt.cpp b/src/core/net/webui_controller_factory_qt.cpp index aec192cd0..59c5ca205 100644 --- a/src/core/net/webui_controller_factory_qt.cpp +++ b/src/core/net/webui_controller_factory_qt.cpp @@ -44,6 +44,8 @@ #include "webui_controller_factory_qt.h" +#include "build_config_qt.h" + #include "base/bind.h" #include "build/build_config.h" #include "chrome/browser/accessibility/accessibility_ui.h" @@ -64,15 +66,15 @@ #include "chrome/browser/ui/webui/sandbox/sandbox_internals_ui.h" #endif +#if QT_CONFIG(webengine_webrtc) && QT_CONFIG(webengine_extensions) +#include "chrome/browser/ui/webui/media/webrtc_logs_ui.h" +#endif + // The Following WebUIs are disabled because they currently doesn't build // or doesn't work, but would be interesting for us if they did: // #include "chrome/browser/ui/webui/inspect_ui.h" -// #if BUILDFLAG(ENABLE_WEBRTC) -// #include "chrome/browser/ui/webui/media/webrtc_logs_ui.h" -// #endif - // #if BUILDFLAG(ENABLE_PRINT_PREVIEW) // #include "chrome/browser/ui/webui/print_preview/print_preview_ui.h" // #endif @@ -152,10 +154,10 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI *web_ui, Profile *profile, co // return &NewWebUI<PrintPreviewUI>; // } //#endif -//#if BUILDFLAG(ENABLE_WEBRTC) -// if (url.host_piece() == chrome::kChromeUIWebRtcLogsHost) -// return &NewWebUI<WebRtcLogsUI>; -//#endif +#if QT_CONFIG(webengine_webrtc) && QT_CONFIG(webengine_extensions) + if (url.host_piece() == chrome::kChromeUIWebRtcLogsHost) + return &NewWebUI<WebRtcLogsUI>; +#endif #if defined(OS_LINUX) || defined(OS_ANDROID) if (url.host_piece() == chrome::kChromeUISandboxHost) return &NewWebUI<SandboxInternalsUI>; diff --git a/src/core/qtwebengine_resources.gni b/src/core/qtwebengine_resources.gni index 38e824f5e..dfc3ea8d5 100644 --- a/src/core/qtwebengine_resources.gni +++ b/src/core/qtwebengine_resources.gni @@ -70,6 +70,15 @@ repack("qtwebengine_repack_resources") { "//content/browser/webrtc/resources", ] } + + if (enable_webrtc && enable_extensions) { + sources += [ + "$root_gen_dir/chrome/webrtc_logs_resources.pak", + ] + deps += [ + "//chrome/browser/resources/media:webrtc_logs_resources", + ] + } } repack("qtwebengine_repack_resources_100") { diff --git a/src/core/qtwebengine_sources.gni b/src/core/qtwebengine_sources.gni index c715b6432..7ff192bf3 100644 --- a/src/core/qtwebengine_sources.gni +++ b/src/core/qtwebengine_sources.gni @@ -89,6 +89,8 @@ source_set("qtwebengine_sources") { "//chrome/browser/ui/webui/user_actions/user_actions_ui.h", "//chrome/browser/ui/webui/user_actions/user_actions_ui_handler.cc", "//chrome/browser/ui/webui/user_actions/user_actions_ui_handler.h", + "//chrome/browser/ui/webui/webui_util.cc", + "//chrome/browser/ui/webui/webui_util.h", "//chrome/common/custom_handlers/protocol_handler.cc", "//chrome/common/custom_handlers/protocol_handler.h", "//chrome/common/chrome_switches.cc", @@ -198,6 +200,50 @@ source_set("qtwebengine_sources") { "//components/printing/renderer", ] } + + if (enable_webrtc && enable_extensions) { + deps += [ + "//chrome/browser/resources/media:webrtc_logs_resources", + "//components/upload_list", + "//components/webrtc_logging/browser", + "//components/webrtc_logging/common", + ] + + sources += [ + "//chrome/browser/extensions/api/webrtc_logging_private/webrtc_logging_private_api.cc", + "//chrome/browser/extensions/api/webrtc_logging_private/webrtc_logging_private_api.h", + "//chrome/browser/media/webrtc/audio_debug_recordings_handler.cc", + "//chrome/browser/media/webrtc/audio_debug_recordings_handler.h", + "//chrome/browser/media/webrtc/webrtc_event_log_history.cc", + "//chrome/browser/media/webrtc/webrtc_event_log_history.h", + "//chrome/browser/media/webrtc/webrtc_event_log_manager.cc", + "//chrome/browser/media/webrtc/webrtc_event_log_manager.h", + "//chrome/browser/media/webrtc/webrtc_event_log_manager_common.cc", + "//chrome/browser/media/webrtc/webrtc_event_log_manager_common.h", + "//chrome/browser/media/webrtc/webrtc_event_log_manager_local.cc", + "//chrome/browser/media/webrtc/webrtc_event_log_manager_local.h", + "//chrome/browser/media/webrtc/webrtc_event_log_manager_remote.cc", + "//chrome/browser/media/webrtc/webrtc_event_log_manager_remote.h", + "//chrome/browser/media/webrtc/webrtc_event_log_uploader.cc", + "//chrome/browser/media/webrtc/webrtc_event_log_uploader.h", + "//chrome/browser/media/webrtc/webrtc_log_buffer.cc", + "//chrome/browser/media/webrtc/webrtc_log_buffer.h", + "//chrome/browser/media/webrtc/webrtc_log_uploader.cc", + "//chrome/browser/media/webrtc/webrtc_log_uploader.h", + "//chrome/browser/media/webrtc/webrtc_logging_controller.cc", + "//chrome/browser/media/webrtc/webrtc_logging_controller.h", + "//chrome/browser/media/webrtc/webrtc_rtp_dump_handler.cc", + "//chrome/browser/media/webrtc/webrtc_rtp_dump_handler.h", + "//chrome/browser/media/webrtc/webrtc_rtp_dump_writer.cc", + "//chrome/browser/media/webrtc/webrtc_rtp_dump_writer.h", + "//chrome/browser/media/webrtc/webrtc_text_log_handler.cc", + "//chrome/browser/media/webrtc/webrtc_text_log_handler.h", + "//chrome/browser/ui/webui/media/webrtc_logs_ui.cc", + "//chrome/browser/ui/webui/media/webrtc_logs_ui.h", + "//chrome/renderer/media/webrtc_logging_agent_impl.cc", + "//chrome/renderer/media/webrtc_logging_agent_impl.h", + ] + } } if (is_win) { diff --git a/src/core/renderer/content_renderer_client_qt.cpp b/src/core/renderer/content_renderer_client_qt.cpp index 8dddf7a15..cafdeddb4 100644 --- a/src/core/renderer/content_renderer_client_qt.cpp +++ b/src/core/renderer/content_renderer_client_qt.cpp @@ -113,6 +113,10 @@ #include "third_party/widevine/cdm/widevine_cdm_common.h" #endif +#if QT_CONFIG(webengine_webrtc) && QT_CONFIG(webengine_extensions) +#include "chrome/renderer/media/webrtc_logging_agent_impl.h" +#endif + namespace QtWebEngineCore { static const char kHttpErrorDomain[] = "http"; @@ -183,6 +187,15 @@ void ContentRendererClientQt::ExposeInterfacesToBrowser(mojo::BinderMap* binders }, this), base::SequencedTaskRunnerHandle::Get()); #endif + +#if QT_CONFIG(webengine_webrtc) && QT_CONFIG(webengine_extensions) + binders->Add(base::BindRepeating( + [](ContentRendererClientQt *client, + mojo::PendingReceiver<chrome::mojom::WebRtcLoggingAgent> receiver) { + client->GetWebRtcLoggingAgent()->AddReceiver(std::move(receiver)); + }, this), + base::SequencedTaskRunnerHandle::Get()); +#endif } void ContentRendererClientQt::RenderFrameCreated(content::RenderFrame *render_frame) @@ -367,6 +380,17 @@ blink::WebPlugin* ContentRendererClientQt::CreatePlugin(content::RenderFrame* re } #endif //BUILDFLAG(ENABLE_PLUGINS) +#if QT_CONFIG(webengine_webrtc) && QT_CONFIG(webengine_extensions) +chrome::WebRtcLoggingAgentImpl *ContentRendererClientQt::GetWebRtcLoggingAgent() +{ + if (!m_webrtcLoggingAgentImpl) { + m_webrtcLoggingAgentImpl = std::make_unique<chrome::WebRtcLoggingAgentImpl>(); + } + + return m_webrtcLoggingAgentImpl.get(); +} +#endif // QT_CONFIG(webengine_webrtc) && QT_CONFIG(webengine_extensions) + void ContentRendererClientQt::GetInterface(const std::string &interface_name, mojo::ScopedMessagePipeHandle interface_pipe) { content::RenderThread::Get()->BindHostReceiver(mojo::GenericPendingReceiver(interface_name, std::move(interface_pipe))); diff --git a/src/core/renderer/content_renderer_client_qt.h b/src/core/renderer/content_renderer_client_qt.h index 82d8af514..0b0a7b68c 100644 --- a/src/core/renderer/content_renderer_client_qt.h +++ b/src/core/renderer/content_renderer_client_qt.h @@ -53,6 +53,10 @@ #include <QScopedPointer> +namespace chrome { +class WebRtcLoggingAgentImpl; +} + namespace error_page { class Error; } @@ -130,6 +134,11 @@ public: const chrome::mojom::PluginInfo& plugin_info); #endif +#if QT_CONFIG(webengine_webrtc) && QT_CONFIG(webengine_extensions) + chrome::WebRtcLoggingAgentImpl *GetWebRtcLoggingAgent(); +#endif + + private: #if BUILDFLAG(ENABLE_SPELLCHECK) void InitSpellCheck(); @@ -147,6 +156,9 @@ private: #if QT_CONFIG(webengine_spellchecker) QScopedPointer<SpellCheck> m_spellCheck; #endif +#if QT_CONFIG(webengine_webrtc) && QT_CONFIG(webengine_extensions) + std::unique_ptr<chrome::WebRtcLoggingAgentImpl> m_webrtcLoggingAgentImpl; +#endif DISALLOW_COPY_AND_ASSIGN(ContentRendererClientQt); }; diff --git a/src/core/web_engine_context.cpp b/src/core/web_engine_context.cpp index 5f3212374..863b46a57 100644 --- a/src/core/web_engine_context.cpp +++ b/src/core/web_engine_context.cpp @@ -52,6 +52,9 @@ #include "base/task/thread_pool/thread_pool_instance.h" #include "base/threading/thread_restrictions.h" #include "cc/base/switches.h" +#if QT_CONFIG(webengine_webrtc) && QT_CONFIG(webengine_extensions) +#include "chrome/browser/media/webrtc/webrtc_log_uploader.h" +#endif #include "chrome/common/chrome_switches.h" #include "content/gpu/gpu_child_thread.h" #include "content/browser/compositor/surface_utils.h" @@ -356,6 +359,10 @@ void WebEngineContext::destroy() if (m_devtoolsServer) m_devtoolsServer->stop(); +#if QT_CONFIG(webengine_webrtc) && QT_CONFIG(webengine_extensions) + if (m_webrtcLogUploader) + m_webrtcLogUploader->Shutdown(); +#endif base::MessagePump::Delegate *delegate = static_cast<base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl *>( @@ -413,6 +420,10 @@ void WebEngineContext::destroy() // Drop the false reference. m_handle->Release(); + +#if QT_CONFIG(webengine_webrtc) && QT_CONFIG(webengine_extensions) + m_webrtcLogUploader.reset(); +#endif } WebEngineContext::~WebEngineContext() @@ -841,6 +852,16 @@ printing::PrintJobManager* WebEngineContext::getPrintJobManager() } #endif +#if QT_CONFIG(webengine_webrtc) && QT_CONFIG(webengine_extensions) +WebRtcLogUploader *WebEngineContext::webRtcLogUploader() +{ + if (!m_webrtcLogUploader) + m_webrtcLogUploader = std::make_unique<WebRtcLogUploader>(); + return m_webrtcLogUploader.get(); +} +#endif + + static QMutex s_spmMutex; QAtomicPointer<gpu::SyncPointManager> WebEngineContext::s_syncPointManager; diff --git a/src/core/web_engine_context.h b/src/core/web_engine_context.h index e2190f8a2..a74b83eae 100644 --- a/src/core/web_engine_context.h +++ b/src/core/web_engine_context.h @@ -86,6 +86,7 @@ struct SandboxInterfaceInfo; #endif QT_FORWARD_DECLARE_CLASS(QObject) +class WebRtcLogUploader; namespace QtWebEngineCore { @@ -115,6 +116,9 @@ public: #if QT_CONFIG(webengine_printing_and_pdf) printing::PrintJobManager* getPrintJobManager(); #endif +#if QT_CONFIG(webengine_webrtc) && QT_CONFIG(webengine_extensions) + WebRtcLogUploader *webRtcLogUploader(); +#endif void destroyProfileAdapter(); void addProfileAdapter(ProfileAdapter *profileAdapter); void removeProfileAdapter(ProfileAdapter *profileAdapter); @@ -152,6 +156,9 @@ private: #if QT_CONFIG(webengine_printing_and_pdf) std::unique_ptr<printing::PrintJobManager> m_printJobManager; #endif +#if QT_CONFIG(webengine_webrtc) && QT_CONFIG(webengine_extensions) + std::unique_ptr<WebRtcLogUploader> m_webrtcLogUploader; +#endif static scoped_refptr<QtWebEngineCore::WebEngineContext> m_handle; static bool m_destroyed; static QAtomicPointer<gpu::SyncPointManager> s_syncPointManager; diff --git a/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp b/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp index ed62d3638..bf3774702 100644 --- a/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp +++ b/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp @@ -3142,7 +3142,7 @@ void tst_QWebEngineView::webUIURLs_data() QTest::newRow("user-actions") << QUrl("chrome://user-actions") << true; QTest::newRow("version") << QUrl("chrome://version") << false; QTest::newRow("webrtc-internals") << QUrl("chrome://webrtc-internals") << true; - QTest::newRow("webrtc-logs") << QUrl("chrome://webrtc-logs") << false; + QTest::newRow("webrtc-logs") << QUrl("chrome://webrtc-logs") << true; } void tst_QWebEngineView::webUIURLs() |