diff --git a/src/core/content_browser_client_qt.cpp b/src/core/content_browser_client_qt.cpp index f19199cc3db07c3c471850692b165e5fb5285559..022c02ff57604faea978e75c3b2fc8ca45e9ca0e 100644 --- a/src/core/content_browser_client_qt.cpp +++ b/src/core/content_browser_client_qt.cpp @@ -99,18 +99,24 @@ public: // Usually this gets passed through Run, but since we have // our own event loop, attach it explicitly ourselves. : m_delegate(base::MessageLoopForUI::current()) + , m_explicitLoop(0) { } virtual void Run(Delegate *delegate) Q_DECL_OVERRIDE { - // FIXME: This could be needed if we want to run Chromium tests. - // We could run a QEventLoop here. + Q_ASSERT(delegate == m_delegate); + // This is used only when MessagePumpForUIQt is used outside of the GUI thread. + QEventLoop loop; + m_explicitLoop = &loop; + loop.exec(); + m_explicitLoop = 0; } virtual void Quit() Q_DECL_OVERRIDE { - Q_UNREACHABLE(); + Q_ASSERT(m_explicitLoop); + m_explicitLoop->quit(); } virtual void ScheduleWork() Q_DECL_OVERRIDE @@ -159,6 +165,7 @@ private: } Delegate *m_delegate; + QEventLoop *m_explicitLoop; }; scoped_ptr<base::MessagePump> messagePumpFactory()