Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1687)

Unified Diff: content/renderer/shared_worker/websharedworker_proxy.cc

Issue 2627123003: SharedWorker: Simplify connection sequence (Closed)
Patch Set: remove unnecessary forward declaration Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/renderer/shared_worker/websharedworker_proxy.cc
diff --git a/content/renderer/shared_worker/websharedworker_proxy.cc b/content/renderer/shared_worker/websharedworker_proxy.cc
index 15d534d9deeee2941383d1881af6d82c48bd1827..628b14df5a38d8dc74af916a4e38f19eb6199d4c 100644
--- a/content/renderer/shared_worker/websharedworker_proxy.cc
+++ b/content/renderer/shared_worker/websharedworker_proxy.cc
@@ -6,6 +6,7 @@
#include <stddef.h>
+#include "content/child/child_thread_impl.h"
#include "content/child/webmessageportchannel_impl.h"
#include "content/common/view_messages.h"
#include "content/common/worker_messages.h"
@@ -13,29 +14,41 @@
namespace content {
-WebSharedWorkerProxy::WebSharedWorkerProxy(IPC::MessageRouter* router,
- int route_id)
- : route_id_(route_id),
- router_(router),
+WebSharedWorkerProxy::WebSharedWorkerProxy(
+ std::unique_ptr<blink::WebSharedWorkerConnectListener> listener,
+ ViewHostMsg_CreateWorker_Params params,
+ blink::WebMessagePortChannel* channel)
+ : route_id_(MSG_ROUTING_NONE),
+ router_(ChildThreadImpl::current()->GetRouter()),
message_port_id_(MSG_ROUTING_NONE),
- connect_listener_(nullptr) {
- DCHECK_NE(MSG_ROUTING_NONE, route_id_);
- router_->AddRoute(route_id_, this);
+ listener_(std::move(listener)) {
+ connect(params, channel);
}
WebSharedWorkerProxy::~WebSharedWorkerProxy() {
+ DCHECK_NE(MSG_ROUTING_NONE, route_id_);
router_->RemoveRoute(route_id_);
}
-void WebSharedWorkerProxy::connect(blink::WebMessagePortChannel* channel,
- ConnectListener* listener) {
+void WebSharedWorkerProxy::connect(ViewHostMsg_CreateWorker_Params params,
+ blink::WebMessagePortChannel* channel) {
+ // Send synchronous IPC to get |route_id|.
+ // TODO(nhiroki): Stop using synchronous IPC (https://crbug.com/679654).
+ ViewHostMsg_CreateWorker_Reply reply;
+ router_->Send(new ViewHostMsg_CreateWorker(params, &reply));
+ route_id_ = reply.route_id;
+ router_->AddRoute(route_id_, this);
+ listener_->workerCreated(reply.error);
+
DCHECK_EQ(MSG_ROUTING_NONE, message_port_id_);
WebMessagePortChannelImpl* webchannel =
static_cast<WebMessagePortChannelImpl*>(channel);
message_port_id_ = webchannel->message_port_id();
DCHECK_NE(MSG_ROUTING_NONE, message_port_id_);
webchannel->QueueMessages();
- connect_listener_ = listener;
+ // |webchannel| is intentionally leaked here: it'll be removed at
+ // WebMessagePortChannelImpl::OnMessagesQueued().
+
// An actual connection request will be issued on OnWorkerCreated().
}
@@ -53,26 +66,19 @@ bool WebSharedWorkerProxy::OnMessageReceived(const IPC::Message& message) {
}
void WebSharedWorkerProxy::OnWorkerCreated() {
- // connect() should be called before.
- DCHECK_NE(MSG_ROUTING_NONE, message_port_id_);
-
// The worker is created - now send off the connection request.
router_->Send(
new ViewHostMsg_ConnectToWorker(route_id_, message_port_id_));
}
void WebSharedWorkerProxy::OnWorkerScriptLoadFailed() {
- if (connect_listener_) {
- // This can result in this object being freed.
- connect_listener_->scriptLoadFailed();
- }
+ listener_->scriptLoadFailed();
+ delete this;
}
void WebSharedWorkerProxy::OnWorkerConnected() {
- if (connect_listener_) {
- // This can result in this object being freed.
- connect_listener_->connected();
- }
+ listener_->connected();
+ delete this;
}
} // namespace content
« no previous file with comments | « content/renderer/shared_worker/websharedworker_proxy.h ('k') | third_party/WebKit/Source/core/workers/SharedWorker.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698