Commit 0688f63e authored by Dmitry Gozman's avatar Dmitry Gozman Committed by Commit Bot

[DevTools] Move WebKitClientMessageLoop to platform

This unblocks moving DevToolsAgent to blink.

Bug: 776009
Change-Id: I65b30774d1057402de891acb3a5fec187b6eeee5
Reviewed-on: https://chromium-review.googlesource.com/827926Reviewed-by: default avatarPavel Feldman <pfeldman@chromium.org>
Commit-Queue: Dmitry Gozman <dgozman@chromium.org>
Cr-Commit-Position: refs/heads/master@{#524275}
parent aebd73d2
...@@ -17,6 +17,8 @@ ...@@ -17,6 +17,8 @@
#include "base/memory/singleton.h" #include "base/memory/singleton.h"
#include "base/metrics/user_metrics_action.h" #include "base/metrics/user_metrics_action.h"
#include "base/rand_util.h" #include "base/rand_util.h"
#include "base/run_loop.h"
#include "base/sequence_checker.h"
#include "base/single_thread_task_runner.h" #include "base/single_thread_task_runner.h"
#include "base/strings/string_number_conversions.h" #include "base/strings/string_number_conversions.h"
#include "base/strings/string_util.h" #include "base/strings/string_util.h"
...@@ -519,6 +521,36 @@ const DataResource kDataResources[] = { ...@@ -519,6 +521,36 @@ const DataResource kDataResources[] = {
{"placeholderIcon", IDR_PLACEHOLDER_ICON, ui::SCALE_FACTOR_100P, false}, {"placeholderIcon", IDR_PLACEHOLDER_ICON, ui::SCALE_FACTOR_100P, false},
}; };
class NestedMessageLoopRunnerImpl
: public blink::Platform::NestedMessageLoopRunner {
public:
NestedMessageLoopRunnerImpl() = default;
~NestedMessageLoopRunnerImpl() override {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
}
void Run() override {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
base::RunLoop* const previous_run_loop = run_loop_;
base::RunLoop run_loop(base::RunLoop::Type::kNestableTasksAllowed);
run_loop_ = &run_loop;
run_loop.Run();
run_loop_ = previous_run_loop;
}
void QuitNow() override {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
DCHECK(run_loop_);
run_loop_->Quit();
}
private:
base::RunLoop* run_loop_ = nullptr;
SEQUENCE_CHECKER(sequence_checker_);
};
} // namespace } // namespace
WebData BlinkPlatformImpl::GetDataResource(const char* name) { WebData BlinkPlatformImpl::GetDataResource(const char* name) {
...@@ -741,4 +773,9 @@ scoped_refptr<base::SingleThreadTaskRunner> BlinkPlatformImpl::GetIOTaskRunner() ...@@ -741,4 +773,9 @@ scoped_refptr<base::SingleThreadTaskRunner> BlinkPlatformImpl::GetIOTaskRunner()
return io_thread_task_runner_; return io_thread_task_runner_;
} }
std::unique_ptr<blink::Platform::NestedMessageLoopRunner>
BlinkPlatformImpl::CreateNestedMessageLoopRunner() const {
return std::make_unique<NestedMessageLoopRunnerImpl>();
}
} // namespace content } // namespace content
...@@ -116,6 +116,8 @@ class CONTENT_EXPORT BlinkPlatformImpl : public blink::Platform { ...@@ -116,6 +116,8 @@ class CONTENT_EXPORT BlinkPlatformImpl : public blink::Platform {
void WaitUntilWebThreadTLSUpdate(blink::scheduler::WebThreadBase* thread); void WaitUntilWebThreadTLSUpdate(blink::scheduler::WebThreadBase* thread);
scoped_refptr<base::SingleThreadTaskRunner> GetIOTaskRunner() const override; scoped_refptr<base::SingleThreadTaskRunner> GetIOTaskRunner() const override;
std::unique_ptr<NestedMessageLoopRunner> CreateNestedMessageLoopRunner()
const override;
private: private:
void UpdateWebThreadTLS(blink::WebThread* thread, base::WaitableEvent* event); void UpdateWebThreadTLS(blink::WebThread* thread, base::WaitableEvent* event);
......
...@@ -11,9 +11,6 @@ ...@@ -11,9 +11,6 @@
#include "base/json/json_writer.h" #include "base/json/json_writer.h"
#include "base/lazy_instance.h" #include "base/lazy_instance.h"
#include "base/message_loop/message_loop.h"
#include "base/run_loop.h"
#include "base/sequence_checker.h"
#include "base/strings/string_number_conversions.h" #include "base/strings/string_number_conversions.h"
#include "base/threading/thread_task_runner_handle.h" #include "base/threading/thread_task_runner_handle.h"
#include "base/trace_event/trace_event.h" #include "base/trace_event/trace_event.h"
...@@ -48,37 +45,6 @@ namespace { ...@@ -48,37 +45,6 @@ namespace {
const size_t kMaxDevToolsMessageChunkSize = 128 * 1024 * 1024 / 4; const size_t kMaxDevToolsMessageChunkSize = 128 * 1024 * 1024 / 4;
const char kPageGetAppManifest[] = "Page.getAppManifest"; const char kPageGetAppManifest[] = "Page.getAppManifest";
class WebKitClientMessageLoopImpl
: public WebDevToolsAgentClient::WebKitClientMessageLoop {
public:
WebKitClientMessageLoopImpl() = default;
~WebKitClientMessageLoopImpl() override {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
}
void Run() override {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
base::RunLoop* const previous_run_loop = run_loop_;
base::RunLoop run_loop(base::RunLoop::Type::kNestableTasksAllowed);
run_loop_ = &run_loop;
run_loop.Run();
run_loop_ = previous_run_loop;
}
void QuitNow() override {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
DCHECK(run_loop_);
run_loop_->Quit();
}
private:
base::RunLoop* run_loop_ = nullptr;
SEQUENCE_CHECKER(sequence_checker_);
};
} // namespace } // namespace
class DevToolsAgent::MessageImpl : public WebDevToolsAgent::MessageDescriptor { class DevToolsAgent::MessageImpl : public WebDevToolsAgent::MessageDescriptor {
...@@ -252,17 +218,6 @@ void DevToolsAgent::SendProtocolMessage(int session_id, ...@@ -252,17 +218,6 @@ void DevToolsAgent::SendProtocolMessage(int session_id,
state_cookie.Utf8()); state_cookie.Utf8());
} }
// static
blink::WebDevToolsAgentClient::WebKitClientMessageLoop*
DevToolsAgent::createMessageLoopWrapper() {
return new WebKitClientMessageLoopImpl();
}
blink::WebDevToolsAgentClient::WebKitClientMessageLoop*
DevToolsAgent::CreateClientMessageLoop() {
return createMessageLoopWrapper();
}
void DevToolsAgent::WillEnterDebugLoop() { void DevToolsAgent::WillEnterDebugLoop() {
paused_ = true; paused_ = true;
} }
......
...@@ -38,9 +38,6 @@ class CONTENT_EXPORT DevToolsAgent : public RenderFrameObserver, ...@@ -38,9 +38,6 @@ class CONTENT_EXPORT DevToolsAgent : public RenderFrameObserver,
explicit DevToolsAgent(RenderFrameImpl* frame); explicit DevToolsAgent(RenderFrameImpl* frame);
~DevToolsAgent() override; ~DevToolsAgent() override;
static blink::WebDevToolsAgentClient::WebKitClientMessageLoop*
createMessageLoopWrapper();
void BindRequest(mojom::DevToolsAgentAssociatedRequest request); void BindRequest(mojom::DevToolsAgentAssociatedRequest request);
base::WeakPtr<DevToolsAgent> GetWeakPtr(); base::WeakPtr<DevToolsAgent> GetWeakPtr();
bool IsAttached(); bool IsAttached();
...@@ -69,8 +66,6 @@ class CONTENT_EXPORT DevToolsAgent : public RenderFrameObserver, ...@@ -69,8 +66,6 @@ class CONTENT_EXPORT DevToolsAgent : public RenderFrameObserver,
int call_id, int call_id,
const blink::WebString& message, const blink::WebString& message,
const blink::WebString& state_cookie) override; const blink::WebString& state_cookie) override;
blink::WebDevToolsAgentClient::WebKitClientMessageLoop*
CreateClientMessageLoop() override;
void WillEnterDebugLoop() override; void WillEnterDebugLoop() override;
void DidExitDebugLoop() override; void DidExitDebugLoop() override;
bool RequestDevToolsForFrame(int session_id, bool RequestDevToolsForFrame(int session_id,
......
...@@ -31,7 +31,6 @@ ...@@ -31,7 +31,6 @@
#include "content/public/renderer/child_url_loader_factory_getter.h" #include "content/public/renderer/child_url_loader_factory_getter.h"
#include "content/public/renderer/content_renderer_client.h" #include "content/public/renderer/content_renderer_client.h"
#include "content/public/renderer/document_state.h" #include "content/public/renderer/document_state.h"
#include "content/renderer/devtools/devtools_agent.h"
#include "content/renderer/loader/request_extra_data.h" #include "content/renderer/loader/request_extra_data.h"
#include "content/renderer/loader/web_data_consumer_handle_impl.h" #include "content/renderer/loader/web_data_consumer_handle_impl.h"
#include "content/renderer/loader/web_url_loader_impl.h" #include "content/renderer/loader/web_url_loader_impl.h"
...@@ -922,11 +921,6 @@ void ServiceWorkerContextClient::SendDevToolsMessage( ...@@ -922,11 +921,6 @@ void ServiceWorkerContextClient::SendDevToolsMessage(
sender_.get(), session_id, call_id, message.Utf8(), state_cookie.Utf8()); sender_.get(), session_id, call_id, message.Utf8(), state_cookie.Utf8());
} }
blink::WebDevToolsAgentClient::WebKitClientMessageLoop*
ServiceWorkerContextClient::CreateDevToolsMessageLoop() {
return DevToolsAgent::createMessageLoopWrapper();
}
void ServiceWorkerContextClient::DidHandleActivateEvent( void ServiceWorkerContextClient::DidHandleActivateEvent(
int request_id, int request_id,
blink::mojom::ServiceWorkerEventStatus status, blink::mojom::ServiceWorkerEventStatus status,
......
...@@ -156,8 +156,6 @@ class CONTENT_EXPORT ServiceWorkerContextClient ...@@ -156,8 +156,6 @@ class CONTENT_EXPORT ServiceWorkerContextClient
int call_id, int call_id,
const blink::WebString& message, const blink::WebString& message,
const blink::WebString& state) override; const blink::WebString& state) override;
blink::WebDevToolsAgentClient::WebKitClientMessageLoop*
CreateDevToolsMessageLoop() override;
void DidHandleActivateEvent(int request_id, void DidHandleActivateEvent(int request_id,
blink::mojom::ServiceWorkerEventStatus status, blink::mojom::ServiceWorkerEventStatus status,
double dispatch_event_time) override; double dispatch_event_time) override;
......
...@@ -17,7 +17,6 @@ ...@@ -17,7 +17,6 @@
#include "content/public/renderer/child_url_loader_factory_getter.h" #include "content/public/renderer/child_url_loader_factory_getter.h"
#include "content/renderer/appcache/appcache_dispatcher.h" #include "content/renderer/appcache/appcache_dispatcher.h"
#include "content/renderer/appcache/web_application_cache_host_impl.h" #include "content/renderer/appcache/web_application_cache_host_impl.h"
#include "content/renderer/devtools/devtools_agent.h"
#include "content/renderer/loader/request_extra_data.h" #include "content/renderer/loader/request_extra_data.h"
#include "content/renderer/render_thread_impl.h" #include "content/renderer/render_thread_impl.h"
#include "content/renderer/renderer_blink_platform_impl.h" #include "content/renderer/renderer_blink_platform_impl.h"
...@@ -255,11 +254,6 @@ void EmbeddedSharedWorkerStub::SendDevToolsMessage( ...@@ -255,11 +254,6 @@ void EmbeddedSharedWorkerStub::SendDevToolsMessage(
session_id, call_id, message, state); session_id, call_id, message, state);
} }
blink::WebDevToolsAgentClient::WebKitClientMessageLoop*
EmbeddedSharedWorkerStub::CreateDevToolsMessageLoop() {
return DevToolsAgent::createMessageLoopWrapper();
}
std::unique_ptr<blink::WebWorkerFetchContext> std::unique_ptr<blink::WebWorkerFetchContext>
EmbeddedSharedWorkerStub::CreateWorkerFetchContext( EmbeddedSharedWorkerStub::CreateWorkerFetchContext(
blink::WebServiceWorkerNetworkProvider* web_network_provider) { blink::WebServiceWorkerNetworkProvider* web_network_provider) {
......
...@@ -87,8 +87,6 @@ class EmbeddedSharedWorkerStub : public IPC::Listener, ...@@ -87,8 +87,6 @@ class EmbeddedSharedWorkerStub : public IPC::Listener,
int call_id, int call_id,
const blink::WebString& message, const blink::WebString& message,
const blink::WebString& state) override; const blink::WebString& state) override;
blink::WebDevToolsAgentClient::WebKitClientMessageLoop*
CreateDevToolsMessageLoop() override;
std::unique_ptr<blink::WebWorkerFetchContext> CreateWorkerFetchContext( std::unique_ptr<blink::WebWorkerFetchContext> CreateWorkerFetchContext(
blink::WebServiceWorkerNetworkProvider*) override; blink::WebServiceWorkerNetworkProvider*) override;
......
...@@ -107,9 +107,9 @@ class ClientMessageLoopAdapter : public MainThreadDebugger::ClientMessageLoop { ...@@ -107,9 +107,9 @@ class ClientMessageLoopAdapter : public MainThreadDebugger::ClientMessageLoop {
static void EnsureMainThreadDebuggerCreated(WebDevToolsAgentClient* client) { static void EnsureMainThreadDebuggerCreated(WebDevToolsAgentClient* client) {
if (instance_) if (instance_)
return; return;
std::unique_ptr<ClientMessageLoopAdapter> instance = std::unique_ptr<ClientMessageLoopAdapter> instance(
WTF::WrapUnique(new ClientMessageLoopAdapter( new ClientMessageLoopAdapter(
WTF::WrapUnique(client->CreateClientMessageLoop()))); Platform::Current()->CreateNestedMessageLoopRunner()));
instance_ = instance.get(); instance_ = instance.get();
MainThreadDebugger::Instance()->SetClientMessageLoop(std::move(instance)); MainThreadDebugger::Instance()->SetClientMessageLoop(std::move(instance));
} }
...@@ -131,8 +131,7 @@ class ClientMessageLoopAdapter : public MainThreadDebugger::ClientMessageLoop { ...@@ -131,8 +131,7 @@ class ClientMessageLoopAdapter : public MainThreadDebugger::ClientMessageLoop {
private: private:
ClientMessageLoopAdapter( ClientMessageLoopAdapter(
std::unique_ptr<WebDevToolsAgentClient::WebKitClientMessageLoop> std::unique_ptr<Platform::NestedMessageLoopRunner> message_loop)
message_loop)
: running_for_debug_break_(false), : running_for_debug_break_(false),
running_for_create_window_(false), running_for_create_window_(false),
message_loop_(std::move(message_loop)) { message_loop_(std::move(message_loop)) {
...@@ -218,8 +217,7 @@ class ClientMessageLoopAdapter : public MainThreadDebugger::ClientMessageLoop { ...@@ -218,8 +217,7 @@ class ClientMessageLoopAdapter : public MainThreadDebugger::ClientMessageLoop {
bool running_for_debug_break_; bool running_for_debug_break_;
bool running_for_create_window_; bool running_for_create_window_;
std::unique_ptr<WebDevToolsAgentClient::WebKitClientMessageLoop> std::unique_ptr<Platform::NestedMessageLoopRunner> message_loop_;
message_loop_;
static ClientMessageLoopAdapter* instance_; static ClientMessageLoopAdapter* instance_;
}; };
......
...@@ -161,12 +161,6 @@ void WebSharedWorkerImpl::ResumeStartup() { ...@@ -161,12 +161,6 @@ void WebSharedWorkerImpl::ResumeStartup() {
} }
} }
WebDevToolsAgentClient::WebKitClientMessageLoop*
WebSharedWorkerImpl::CreateClientMessageLoop() {
DCHECK(IsMainThread());
return client_->CreateDevToolsMessageLoop();
}
const WebString& WebSharedWorkerImpl::GetInstrumentationToken() { const WebString& WebSharedWorkerImpl::GetInstrumentationToken() {
return instrumentation_token_; return instrumentation_token_;
} }
......
...@@ -79,8 +79,6 @@ class CORE_EXPORT WebSharedWorkerImpl final : public WebSharedWorker, ...@@ -79,8 +79,6 @@ class CORE_EXPORT WebSharedWorkerImpl final : public WebSharedWorker,
const WebString&, const WebString&,
const WebString&) override; const WebString&) override;
void ResumeStartup() override; void ResumeStartup() override;
WebDevToolsAgentClient::WebKitClientMessageLoop* CreateClientMessageLoop()
override;
const WebString& GetInstrumentationToken() override; const WebString& GetInstrumentationToken() override;
// WebSharedWorker methods: // WebSharedWorker methods:
......
...@@ -324,11 +324,6 @@ void WebEmbeddedWorkerImpl::ResumeStartup() { ...@@ -324,11 +324,6 @@ void WebEmbeddedWorkerImpl::ResumeStartup() {
shadow_page_->Initialize(worker_start_data_.script_url); shadow_page_->Initialize(worker_start_data_.script_url);
} }
WebDevToolsAgentClient::WebKitClientMessageLoop*
WebEmbeddedWorkerImpl::CreateClientMessageLoop() {
return worker_context_client_->CreateDevToolsMessageLoop();
}
const WebString& WebEmbeddedWorkerImpl::GetInstrumentationToken() { const WebString& WebEmbeddedWorkerImpl::GetInstrumentationToken() {
return instrumentation_token_; return instrumentation_token_;
} }
......
...@@ -100,8 +100,6 @@ class MODULES_EXPORT WebEmbeddedWorkerImpl final ...@@ -100,8 +100,6 @@ class MODULES_EXPORT WebEmbeddedWorkerImpl final
const WebString&, const WebString&,
const WebString&) override; const WebString&) override;
void ResumeStartup() override; void ResumeStartup() override;
WebDevToolsAgentClient::WebKitClientMessageLoop* CreateClientMessageLoop()
override;
const WebString& GetInstrumentationToken() override; const WebString& GetInstrumentationToken() override;
void OnScriptLoaderFinished(); void OnScriptLoaderFinished();
......
...@@ -477,6 +477,18 @@ class BLINK_PLATFORM_EXPORT Platform { ...@@ -477,6 +477,18 @@ class BLINK_PLATFORM_EXPORT Platform {
return nullptr; return nullptr;
} }
// Returns an interface to run nested message loop. Used for debugging.
class NestedMessageLoopRunner {
public:
virtual ~NestedMessageLoopRunner() {}
virtual void Run() = 0;
virtual void QuitNow() = 0;
};
virtual std::unique_ptr<NestedMessageLoopRunner>
CreateNestedMessageLoopRunner() const {
return nullptr;
}
// Testing ------------------------------------------------------------- // Testing -------------------------------------------------------------
// Gets a pointer to URLLoaderMockFactory for testing. Will not be available // Gets a pointer to URLLoaderMockFactory for testing. Will not be available
......
...@@ -59,13 +59,6 @@ class WebDevToolsAgentClient { ...@@ -59,13 +59,6 @@ class WebDevToolsAgentClient {
// initialize its state. // initialize its state.
virtual void ResumeStartup() {} virtual void ResumeStartup() {}
class WebKitClientMessageLoop {
public:
virtual ~WebKitClientMessageLoop() {}
virtual void Run() = 0;
virtual void QuitNow() = 0;
};
virtual WebKitClientMessageLoop* CreateClientMessageLoop() { return 0; }
virtual void WillEnterDebugLoop() {} virtual void WillEnterDebugLoop() {}
virtual void DidExitDebugLoop() {} virtual void DidExitDebugLoop() {}
......
...@@ -77,10 +77,6 @@ class WebSharedWorkerClient { ...@@ -77,10 +77,6 @@ class WebSharedWorkerClient {
int call_id, int call_id,
const WebString& message, const WebString& message,
const WebString& state) {} const WebString& state) {}
virtual WebDevToolsAgentClient::WebKitClientMessageLoop*
CreateDevToolsMessageLoop() {
return nullptr;
}
// Returns a new WebWorkerFetchContext for the shared worker. Ownership of the // Returns a new WebWorkerFetchContext for the shared worker. Ownership of the
// returned object is transferred to the caller. This is used only when // returned object is transferred to the caller. This is used only when
......
...@@ -158,12 +158,6 @@ class WebServiceWorkerContextClient { ...@@ -158,12 +158,6 @@ class WebServiceWorkerContextClient {
const WebString& message, const WebString& message,
const WebString& state) {} const WebString& state) {}
// Message loop for debugging.
virtual WebDevToolsAgentClient::WebKitClientMessageLoop*
CreateDevToolsMessageLoop() {
return nullptr;
}
// Called after an 'activate' event completed. // Called after an 'activate' event completed.
virtual void DidHandleActivateEvent(int event_id, virtual void DidHandleActivateEvent(int event_id,
mojom::ServiceWorkerEventStatus, mojom::ServiceWorkerEventStatus,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment