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 @@
#include "base/memory/singleton.h"
#include "base/metrics/user_metrics_action.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/strings/string_number_conversions.h"
#include "base/strings/string_util.h"
......@@ -519,6 +521,36 @@ const DataResource kDataResources[] = {
{"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
WebData BlinkPlatformImpl::GetDataResource(const char* name) {
......@@ -741,4 +773,9 @@ scoped_refptr<base::SingleThreadTaskRunner> BlinkPlatformImpl::GetIOTaskRunner()
return io_thread_task_runner_;
}
std::unique_ptr<blink::Platform::NestedMessageLoopRunner>
BlinkPlatformImpl::CreateNestedMessageLoopRunner() const {
return std::make_unique<NestedMessageLoopRunnerImpl>();
}
} // namespace content
......@@ -116,6 +116,8 @@ class CONTENT_EXPORT BlinkPlatformImpl : public blink::Platform {
void WaitUntilWebThreadTLSUpdate(blink::scheduler::WebThreadBase* thread);
scoped_refptr<base::SingleThreadTaskRunner> GetIOTaskRunner() const override;
std::unique_ptr<NestedMessageLoopRunner> CreateNestedMessageLoopRunner()
const override;
private:
void UpdateWebThreadTLS(blink::WebThread* thread, base::WaitableEvent* event);
......
......@@ -11,9 +11,6 @@
#include "base/json/json_writer.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/threading/thread_task_runner_handle.h"
#include "base/trace_event/trace_event.h"
......@@ -48,37 +45,6 @@ namespace {
const size_t kMaxDevToolsMessageChunkSize = 128 * 1024 * 1024 / 4;
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
class DevToolsAgent::MessageImpl : public WebDevToolsAgent::MessageDescriptor {
......@@ -252,17 +218,6 @@ void DevToolsAgent::SendProtocolMessage(int session_id,
state_cookie.Utf8());
}
// static
blink::WebDevToolsAgentClient::WebKitClientMessageLoop*
DevToolsAgent::createMessageLoopWrapper() {
return new WebKitClientMessageLoopImpl();
}
blink::WebDevToolsAgentClient::WebKitClientMessageLoop*
DevToolsAgent::CreateClientMessageLoop() {
return createMessageLoopWrapper();
}
void DevToolsAgent::WillEnterDebugLoop() {
paused_ = true;
}
......
......@@ -38,9 +38,6 @@ class CONTENT_EXPORT DevToolsAgent : public RenderFrameObserver,
explicit DevToolsAgent(RenderFrameImpl* frame);
~DevToolsAgent() override;
static blink::WebDevToolsAgentClient::WebKitClientMessageLoop*
createMessageLoopWrapper();
void BindRequest(mojom::DevToolsAgentAssociatedRequest request);
base::WeakPtr<DevToolsAgent> GetWeakPtr();
bool IsAttached();
......@@ -69,8 +66,6 @@ class CONTENT_EXPORT DevToolsAgent : public RenderFrameObserver,
int call_id,
const blink::WebString& message,
const blink::WebString& state_cookie) override;
blink::WebDevToolsAgentClient::WebKitClientMessageLoop*
CreateClientMessageLoop() override;
void WillEnterDebugLoop() override;
void DidExitDebugLoop() override;
bool RequestDevToolsForFrame(int session_id,
......
......@@ -31,7 +31,6 @@
#include "content/public/renderer/child_url_loader_factory_getter.h"
#include "content/public/renderer/content_renderer_client.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/web_data_consumer_handle_impl.h"
#include "content/renderer/loader/web_url_loader_impl.h"
......@@ -922,11 +921,6 @@ void ServiceWorkerContextClient::SendDevToolsMessage(
sender_.get(), session_id, call_id, message.Utf8(), state_cookie.Utf8());
}
blink::WebDevToolsAgentClient::WebKitClientMessageLoop*
ServiceWorkerContextClient::CreateDevToolsMessageLoop() {
return DevToolsAgent::createMessageLoopWrapper();
}
void ServiceWorkerContextClient::DidHandleActivateEvent(
int request_id,
blink::mojom::ServiceWorkerEventStatus status,
......
......@@ -156,8 +156,6 @@ class CONTENT_EXPORT ServiceWorkerContextClient
int call_id,
const blink::WebString& message,
const blink::WebString& state) override;
blink::WebDevToolsAgentClient::WebKitClientMessageLoop*
CreateDevToolsMessageLoop() override;
void DidHandleActivateEvent(int request_id,
blink::mojom::ServiceWorkerEventStatus status,
double dispatch_event_time) override;
......
......@@ -17,7 +17,6 @@
#include "content/public/renderer/child_url_loader_factory_getter.h"
#include "content/renderer/appcache/appcache_dispatcher.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/render_thread_impl.h"
#include "content/renderer/renderer_blink_platform_impl.h"
......@@ -255,11 +254,6 @@ void EmbeddedSharedWorkerStub::SendDevToolsMessage(
session_id, call_id, message, state);
}
blink::WebDevToolsAgentClient::WebKitClientMessageLoop*
EmbeddedSharedWorkerStub::CreateDevToolsMessageLoop() {
return DevToolsAgent::createMessageLoopWrapper();
}
std::unique_ptr<blink::WebWorkerFetchContext>
EmbeddedSharedWorkerStub::CreateWorkerFetchContext(
blink::WebServiceWorkerNetworkProvider* web_network_provider) {
......
......@@ -87,8 +87,6 @@ class EmbeddedSharedWorkerStub : public IPC::Listener,
int call_id,
const blink::WebString& message,
const blink::WebString& state) override;
blink::WebDevToolsAgentClient::WebKitClientMessageLoop*
CreateDevToolsMessageLoop() override;
std::unique_ptr<blink::WebWorkerFetchContext> CreateWorkerFetchContext(
blink::WebServiceWorkerNetworkProvider*) override;
......
......@@ -107,9 +107,9 @@ class ClientMessageLoopAdapter : public MainThreadDebugger::ClientMessageLoop {
static void EnsureMainThreadDebuggerCreated(WebDevToolsAgentClient* client) {
if (instance_)
return;
std::unique_ptr<ClientMessageLoopAdapter> instance =
WTF::WrapUnique(new ClientMessageLoopAdapter(
WTF::WrapUnique(client->CreateClientMessageLoop())));
std::unique_ptr<ClientMessageLoopAdapter> instance(
new ClientMessageLoopAdapter(
Platform::Current()->CreateNestedMessageLoopRunner()));
instance_ = instance.get();
MainThreadDebugger::Instance()->SetClientMessageLoop(std::move(instance));
}
......@@ -131,8 +131,7 @@ class ClientMessageLoopAdapter : public MainThreadDebugger::ClientMessageLoop {
private:
ClientMessageLoopAdapter(
std::unique_ptr<WebDevToolsAgentClient::WebKitClientMessageLoop>
message_loop)
std::unique_ptr<Platform::NestedMessageLoopRunner> message_loop)
: running_for_debug_break_(false),
running_for_create_window_(false),
message_loop_(std::move(message_loop)) {
......@@ -218,8 +217,7 @@ class ClientMessageLoopAdapter : public MainThreadDebugger::ClientMessageLoop {
bool running_for_debug_break_;
bool running_for_create_window_;
std::unique_ptr<WebDevToolsAgentClient::WebKitClientMessageLoop>
message_loop_;
std::unique_ptr<Platform::NestedMessageLoopRunner> message_loop_;
static ClientMessageLoopAdapter* instance_;
};
......
......@@ -161,12 +161,6 @@ void WebSharedWorkerImpl::ResumeStartup() {
}
}
WebDevToolsAgentClient::WebKitClientMessageLoop*
WebSharedWorkerImpl::CreateClientMessageLoop() {
DCHECK(IsMainThread());
return client_->CreateDevToolsMessageLoop();
}
const WebString& WebSharedWorkerImpl::GetInstrumentationToken() {
return instrumentation_token_;
}
......
......@@ -79,8 +79,6 @@ class CORE_EXPORT WebSharedWorkerImpl final : public WebSharedWorker,
const WebString&,
const WebString&) override;
void ResumeStartup() override;
WebDevToolsAgentClient::WebKitClientMessageLoop* CreateClientMessageLoop()
override;
const WebString& GetInstrumentationToken() override;
// WebSharedWorker methods:
......
......@@ -324,11 +324,6 @@ void WebEmbeddedWorkerImpl::ResumeStartup() {
shadow_page_->Initialize(worker_start_data_.script_url);
}
WebDevToolsAgentClient::WebKitClientMessageLoop*
WebEmbeddedWorkerImpl::CreateClientMessageLoop() {
return worker_context_client_->CreateDevToolsMessageLoop();
}
const WebString& WebEmbeddedWorkerImpl::GetInstrumentationToken() {
return instrumentation_token_;
}
......
......@@ -100,8 +100,6 @@ class MODULES_EXPORT WebEmbeddedWorkerImpl final
const WebString&,
const WebString&) override;
void ResumeStartup() override;
WebDevToolsAgentClient::WebKitClientMessageLoop* CreateClientMessageLoop()
override;
const WebString& GetInstrumentationToken() override;
void OnScriptLoaderFinished();
......
......@@ -477,6 +477,18 @@ class BLINK_PLATFORM_EXPORT Platform {
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 -------------------------------------------------------------
// Gets a pointer to URLLoaderMockFactory for testing. Will not be available
......
......@@ -59,13 +59,6 @@ class WebDevToolsAgentClient {
// initialize its state.
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 DidExitDebugLoop() {}
......
......@@ -77,10 +77,6 @@ class WebSharedWorkerClient {
int call_id,
const WebString& message,
const WebString& state) {}
virtual WebDevToolsAgentClient::WebKitClientMessageLoop*
CreateDevToolsMessageLoop() {
return nullptr;
}
// Returns a new WebWorkerFetchContext for the shared worker. Ownership of the
// returned object is transferred to the caller. This is used only when
......
......@@ -158,12 +158,6 @@ class WebServiceWorkerContextClient {
const WebString& message,
const WebString& state) {}
// Message loop for debugging.
virtual WebDevToolsAgentClient::WebKitClientMessageLoop*
CreateDevToolsMessageLoop() {
return nullptr;
}
// Called after an 'activate' event completed.
virtual void DidHandleActivateEvent(int event_id,
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