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

Side by Side Diff: content/renderer/service_worker/service_worker_script_context.cc

Issue 958523002: ServiceWorker: Use scheduler's default task queue for posting tasks on main thread (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 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 unified diff | Download patch
« no previous file with comments | « content/renderer/service_worker/embedded_worker_context_client.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/service_worker/service_worker_script_context.h" 5 #include "content/renderer/service_worker/service_worker_script_context.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/metrics/histogram.h" 8 #include "base/metrics/histogram.h"
9 #include "base/trace_event/trace_event.h" 9 #include "base/trace_event/trace_event.h"
10 #include "content/child/notifications/notification_data_conversions.h" 10 #include "content/child/notifications/notification_data_conversions.h"
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after
246 } 246 }
247 247
248 void ServiceWorkerScriptContext::PostMessageToDocument( 248 void ServiceWorkerScriptContext::PostMessageToDocument(
249 int client_id, 249 int client_id,
250 const base::string16& message, 250 const base::string16& message,
251 scoped_ptr<blink::WebMessagePortChannelArray> channels) { 251 scoped_ptr<blink::WebMessagePortChannelArray> channels) {
252 // This may send channels for MessagePorts, and all internal book-keeping 252 // This may send channels for MessagePorts, and all internal book-keeping
253 // messages for MessagePort (e.g. QueueMessages) are sent from main thread 253 // messages for MessagePort (e.g. QueueMessages) are sent from main thread
254 // (with thread hopping), so we need to do the same thread hopping here not 254 // (with thread hopping), so we need to do the same thread hopping here not
255 // to overtake those messages. 255 // to overtake those messages.
256 embedded_context_->main_thread_proxy()->PostTask( 256 embedded_context_->main_thread_task_runner()->PostTask(
257 FROM_HERE, 257 FROM_HERE,
258 base::Bind(&SendPostMessageToDocumentOnMainThread, 258 base::Bind(&SendPostMessageToDocumentOnMainThread,
259 make_scoped_refptr(embedded_context_->thread_safe_sender()), 259 make_scoped_refptr(embedded_context_->thread_safe_sender()),
260 GetRoutingID(), client_id, message, base::Passed(&channels))); 260 GetRoutingID(), client_id, message, base::Passed(&channels)));
261 } 261 }
262 262
263 void ServiceWorkerScriptContext::PostCrossOriginMessageToClient( 263 void ServiceWorkerScriptContext::PostCrossOriginMessageToClient(
264 const blink::WebCrossOriginServiceWorkerClient& client, 264 const blink::WebCrossOriginServiceWorkerClient& client,
265 const base::string16& message, 265 const base::string16& message,
266 scoped_ptr<blink::WebMessagePortChannelArray> channels) { 266 scoped_ptr<blink::WebMessagePortChannelArray> channels) {
267 // This may send channels for MessagePorts, and all internal book-keeping 267 // This may send channels for MessagePorts, and all internal book-keeping
268 // messages for MessagePort (e.g. QueueMessages) are sent from main thread 268 // messages for MessagePort (e.g. QueueMessages) are sent from main thread
269 // (with thread hopping), so we need to do the same thread hopping here not 269 // (with thread hopping), so we need to do the same thread hopping here not
270 // to overtake those messages. 270 // to overtake those messages.
271 embedded_context_->main_thread_proxy()->PostTask( 271 embedded_context_->main_thread_task_runner()->PostTask(
272 FROM_HERE, 272 FROM_HERE,
273 base::Bind(&SendCrossOriginMessageToClientOnMainThread, 273 base::Bind(&SendCrossOriginMessageToClientOnMainThread,
274 make_scoped_refptr(embedded_context_->thread_safe_sender()), 274 make_scoped_refptr(embedded_context_->thread_safe_sender()),
275 client.clientID, message, base::Passed(&channels))); 275 client.clientID, message, base::Passed(&channels)));
276 } 276 }
277 277
278 void ServiceWorkerScriptContext::FocusClient( 278 void ServiceWorkerScriptContext::FocusClient(
279 int client_id, blink::WebServiceWorkerClientCallbacks* callback) { 279 int client_id, blink::WebServiceWorkerClientCallbacks* callback) {
280 DCHECK(callback); 280 DCHECK(callback);
281 int request_id = pending_client_callbacks_.Add(callback); 281 int request_id = pending_client_callbacks_.Add(callback);
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
405 } 405 }
406 406
407 void ServiceWorkerScriptContext::OnPostMessage( 407 void ServiceWorkerScriptContext::OnPostMessage(
408 const base::string16& message, 408 const base::string16& message,
409 const std::vector<int>& sent_message_port_ids, 409 const std::vector<int>& sent_message_port_ids,
410 const std::vector<int>& new_routing_ids) { 410 const std::vector<int>& new_routing_ids) {
411 TRACE_EVENT0("ServiceWorker", 411 TRACE_EVENT0("ServiceWorker",
412 "ServiceWorkerScriptContext::OnPostEvent"); 412 "ServiceWorkerScriptContext::OnPostEvent");
413 std::vector<WebMessagePortChannelImpl*> ports; 413 std::vector<WebMessagePortChannelImpl*> ports;
414 if (!sent_message_port_ids.empty()) { 414 if (!sent_message_port_ids.empty()) {
415 base::MessageLoopProxy* loop_proxy = embedded_context_->main_thread_proxy(); 415 base::SingleThreadTaskRunner* task_runner =
416 embedded_context_->main_thread_task_runner();
416 ports.resize(sent_message_port_ids.size()); 417 ports.resize(sent_message_port_ids.size());
417 for (size_t i = 0; i < sent_message_port_ids.size(); ++i) { 418 for (size_t i = 0; i < sent_message_port_ids.size(); ++i) {
418 ports[i] = new WebMessagePortChannelImpl( 419 ports[i] = new WebMessagePortChannelImpl(
419 new_routing_ids[i], sent_message_port_ids[i], loop_proxy); 420 new_routing_ids[i], sent_message_port_ids[i], task_runner);
420 } 421 }
421 } 422 }
422 423
423 // dispatchMessageEvent is expected to execute onmessage function 424 // dispatchMessageEvent is expected to execute onmessage function
424 // synchronously. 425 // synchronously.
425 base::TimeTicks before = base::TimeTicks::Now(); 426 base::TimeTicks before = base::TimeTicks::Now();
426 proxy_->dispatchMessageEvent(message, ports); 427 proxy_->dispatchMessageEvent(message, ports);
427 UMA_HISTOGRAM_TIMES( 428 UMA_HISTOGRAM_TIMES(
428 "ServiceWorker.MessageEventExecutionTime", 429 "ServiceWorker.MessageEventExecutionTime",
429 base::TimeTicks::Now() - before); 430 base::TimeTicks::Now() - before);
430 } 431 }
431 432
432 void ServiceWorkerScriptContext::OnCrossOriginMessageToWorker( 433 void ServiceWorkerScriptContext::OnCrossOriginMessageToWorker(
433 const NavigatorConnectClient& client, 434 const NavigatorConnectClient& client,
434 const base::string16& message, 435 const base::string16& message,
435 const std::vector<int>& sent_message_port_ids, 436 const std::vector<int>& sent_message_port_ids,
436 const std::vector<int>& new_routing_ids) { 437 const std::vector<int>& new_routing_ids) {
437 TRACE_EVENT0("ServiceWorker", 438 TRACE_EVENT0("ServiceWorker",
438 "ServiceWorkerScriptContext::OnCrossOriginMessageToWorker"); 439 "ServiceWorkerScriptContext::OnCrossOriginMessageToWorker");
439 std::vector<WebMessagePortChannelImpl*> ports; 440 std::vector<WebMessagePortChannelImpl*> ports;
440 if (!sent_message_port_ids.empty()) { 441 if (!sent_message_port_ids.empty()) {
441 base::MessageLoopProxy* loop_proxy = embedded_context_->main_thread_proxy(); 442 base::SingleThreadTaskRunner* task_runner =
443 embedded_context_->main_thread_task_runner();
442 ports.resize(sent_message_port_ids.size()); 444 ports.resize(sent_message_port_ids.size());
443 for (size_t i = 0; i < sent_message_port_ids.size(); ++i) { 445 for (size_t i = 0; i < sent_message_port_ids.size(); ++i) {
444 ports[i] = new WebMessagePortChannelImpl( 446 ports[i] = new WebMessagePortChannelImpl(
445 new_routing_ids[i], sent_message_port_ids[i], loop_proxy); 447 new_routing_ids[i], sent_message_port_ids[i], task_runner);
446 } 448 }
447 } 449 }
448 450
449 blink::WebCrossOriginServiceWorkerClient web_client; 451 blink::WebCrossOriginServiceWorkerClient web_client;
450 web_client.origin = client.origin; 452 web_client.origin = client.origin;
451 web_client.targetURL = client.target_url; 453 web_client.targetURL = client.target_url;
452 web_client.clientID = client.message_port_id; 454 web_client.clientID = client.message_port_id;
453 proxy_->dispatchCrossOriginMessageEvent(web_client, message, ports); 455 proxy_->dispatchCrossOriginMessageEvent(web_client, message, ports);
454 } 456 }
455 457
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
581 new blink::WebServiceWorkerError(error_type, message)); 583 new blink::WebServiceWorkerError(error_type, message));
582 callbacks->onError(error.release()); 584 callbacks->onError(error.release());
583 pending_claim_clients_callbacks_.Remove(request_id); 585 pending_claim_clients_callbacks_.Remove(request_id);
584 } 586 }
585 587
586 void ServiceWorkerScriptContext::OnPing() { 588 void ServiceWorkerScriptContext::OnPing() {
587 Send(new ServiceWorkerHostMsg_Pong(GetRoutingID())); 589 Send(new ServiceWorkerHostMsg_Pong(GetRoutingID()));
588 } 590 }
589 591
590 } // namespace content 592 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/service_worker/embedded_worker_context_client.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698