summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorphoglund <phoglund@chromium.org>2015-02-25 08:28:20 -0800
committerCommit bot <commit-bot@chromium.org>2015-02-25 16:29:50 +0000
commitbdf542901eb439619dfc221fda500d4876fad3f4 (patch)
treedb2a654f4fa9854e4f428166e47f9d7db085a40e
parent051001f2edf52d64239f5afc3ac68d9153ec2470 (diff)
downloadchromium_src-bdf542901eb439619dfc221fda500d4876fad3f4.zip
chromium_src-bdf542901eb439619dfc221fda500d4876fad3f4.tar.gz
chromium_src-bdf542901eb439619dfc221fda500d4876fad3f4.tar.bz2
Revert of Revert of ServiceWorker: Use scheduler's default task queue for posting tasks on main thread (patchset #1 id:1 of https://codereview.chromium.org/954993002/)
Reason for revert: Test is still flaky, even after reverting this one. For instance http://build.chromium.org/p/chromium.win/builders/Vista%20Tests%20%281%29/builds/53768 Original issue's description: > Revert of ServiceWorker: Use scheduler's default task queue for posting tasks on main thread (patchset #1 id:1 of https://codereview.chromium.org/958523002/) > > Reason for revert: > Highly speculative revert after views_unittests broke on win7: > > http://build.chromium.org/p/chromium.win/builders/Win7%20Tests%20%28dbg%29%281%29/builds/35660 > > c:\b\build\slave\win_builder__dbg_\build\src\ui\views\accessibility\native_view_accessibility_win_unittest.cc(190): error: Value of: infobar_accessible.IsSameObject(targets[0]) > > This patch does change task queuing, which makes it seem slightly more likely to break stuff than the others in the blamelist. > > Original issue's description: > > ServiceWorker: Use scheduler's default task queue for posting tasks on main thread > > > > This fixes a task ordering bug between WebMessagePortChannelImpl and > > ServiceWorkerScriptContext. The former posts tasks via the Blink > > scheduler's default task queue, and the latter was using the MessageLoop > > directly. This patch makes tasks from service worker to the main thread > > go through the scheduler. > > > > BUG=460833 > > TEST=http/tests/serviceworker/postmessage-msgport-to-client.html > > > > Committed: https://crrev.com/a7fe515e3ca07e260b58ebf460f842601266ed87 > > Cr-Commit-Position: refs/heads/master@{#318022} > > TBR=kinuko@chromium.org,skyostil@chromium.org,ksakamoto@chromium.org > NOPRESUBMIT=true > NOTREECHECKS=true > NOTRY=true > BUG=460833 > > Committed: https://crrev.com/64250e71c15dfe3576d8e4077e4dfb04f9382482 > Cr-Commit-Position: refs/heads/master@{#318040} TBR=kinuko@chromium.org,skyostil@chromium.org,ksakamoto@chromium.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=460833 Review URL: https://codereview.chromium.org/957583003 Cr-Commit-Position: refs/heads/master@{#318058}
-rw-r--r--content/renderer/service_worker/embedded_worker_context_client.cc10
-rw-r--r--content/renderer/service_worker/embedded_worker_context_client.h8
-rw-r--r--content/renderer/service_worker/service_worker_script_context.cc14
3 files changed, 17 insertions, 15 deletions
diff --git a/content/renderer/service_worker/embedded_worker_context_client.cc b/content/renderer/service_worker/embedded_worker_context_client.cc
index 2173ced..b84340b 100644
--- a/content/renderer/service_worker/embedded_worker_context_client.cc
+++ b/content/renderer/service_worker/embedded_worker_context_client.cc
@@ -106,7 +106,7 @@ EmbeddedWorkerContextClient::EmbeddedWorkerContextClient(
script_url_(script_url),
worker_devtools_agent_route_id_(worker_devtools_agent_route_id),
sender_(ChildThreadImpl::current()->thread_safe_sender()),
- main_thread_proxy_(base::MessageLoopProxy::current()),
+ main_thread_task_runner_(RenderThreadImpl::current()->GetTaskRunner()),
weak_factory_(this) {
TRACE_EVENT_ASYNC_BEGIN0("ServiceWorker",
"EmbeddedWorkerContextClient::StartingWorkerContext",
@@ -180,7 +180,7 @@ void EmbeddedWorkerContextClient::workerReadyForInspection() {
}
void EmbeddedWorkerContextClient::workerContextFailedToStart() {
- DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread());
+ DCHECK(main_thread_task_runner_->RunsTasksOnCurrentThread());
DCHECK(!script_context_);
Send(new EmbeddedWorkerHostMsg_WorkerScriptLoadFailed(embedded_worker_id_));
@@ -243,7 +243,7 @@ void EmbeddedWorkerContextClient::workerContextDestroyed() {
// Now we should be able to free the WebEmbeddedWorker container on the
// main thread.
- main_thread_proxy_->PostTask(
+ main_thread_task_runner_->PostTask(
FROM_HERE,
base::Bind(&CallWorkerContextDestroyedOnMainThread,
embedded_worker_id_));
@@ -355,7 +355,7 @@ void EmbeddedWorkerContextClient::didHandleCrossOriginConnectEvent(
blink::WebServiceWorkerNetworkProvider*
EmbeddedWorkerContextClient::createServiceWorkerNetworkProvider(
blink::WebDataSource* data_source) {
- DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread());
+ DCHECK(main_thread_task_runner_->RunsTasksOnCurrentThread());
// Create a content::ServiceWorkerNetworkProvider for this data source so
// we can observe its requests.
@@ -380,7 +380,7 @@ EmbeddedWorkerContextClient::createServiceWorkerNetworkProvider(
blink::WebServiceWorkerProvider*
EmbeddedWorkerContextClient::createServiceWorkerProvider() {
- DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread());
+ DCHECK(main_thread_task_runner_->RunsTasksOnCurrentThread());
DCHECK(provider_context_);
// Blink is responsible for deleting the returned object.
diff --git a/content/renderer/service_worker/embedded_worker_context_client.h b/content/renderer/service_worker/embedded_worker_context_client.h
index 1f7ac8d..89000a7 100644
--- a/content/renderer/service_worker/embedded_worker_context_client.h
+++ b/content/renderer/service_worker/embedded_worker_context_client.h
@@ -14,7 +14,7 @@
#include "url/gurl.h"
namespace base {
-class MessageLoopProxy;
+class SingleThreadTaskRunner;
class TaskRunner;
}
@@ -130,8 +130,8 @@ class EmbeddedWorkerContextClient
// TODO: Implement DevTools related method overrides.
int embedded_worker_id() const { return embedded_worker_id_; }
- base::MessageLoopProxy* main_thread_proxy() const {
- return main_thread_proxy_.get();
+ base::SingleThreadTaskRunner* main_thread_task_runner() const {
+ return main_thread_task_runner_.get();
}
ThreadSafeSender* thread_safe_sender() { return sender_.get(); }
@@ -148,7 +148,7 @@ class EmbeddedWorkerContextClient
const GURL script_url_;
const int worker_devtools_agent_route_id_;
scoped_refptr<ThreadSafeSender> sender_;
- scoped_refptr<base::MessageLoopProxy> main_thread_proxy_;
+ scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner_;
scoped_refptr<base::TaskRunner> worker_task_runner_;
scoped_ptr<ServiceWorkerScriptContext> script_context_;
diff --git a/content/renderer/service_worker/service_worker_script_context.cc b/content/renderer/service_worker/service_worker_script_context.cc
index 61c83be..74df548 100644
--- a/content/renderer/service_worker/service_worker_script_context.cc
+++ b/content/renderer/service_worker/service_worker_script_context.cc
@@ -253,7 +253,7 @@ void ServiceWorkerScriptContext::PostMessageToDocument(
// messages for MessagePort (e.g. QueueMessages) are sent from main thread
// (with thread hopping), so we need to do the same thread hopping here not
// to overtake those messages.
- embedded_context_->main_thread_proxy()->PostTask(
+ embedded_context_->main_thread_task_runner()->PostTask(
FROM_HERE,
base::Bind(&SendPostMessageToDocumentOnMainThread,
make_scoped_refptr(embedded_context_->thread_safe_sender()),
@@ -268,7 +268,7 @@ void ServiceWorkerScriptContext::PostCrossOriginMessageToClient(
// messages for MessagePort (e.g. QueueMessages) are sent from main thread
// (with thread hopping), so we need to do the same thread hopping here not
// to overtake those messages.
- embedded_context_->main_thread_proxy()->PostTask(
+ embedded_context_->main_thread_task_runner()->PostTask(
FROM_HERE,
base::Bind(&SendCrossOriginMessageToClientOnMainThread,
make_scoped_refptr(embedded_context_->thread_safe_sender()),
@@ -412,11 +412,12 @@ void ServiceWorkerScriptContext::OnPostMessage(
"ServiceWorkerScriptContext::OnPostEvent");
std::vector<WebMessagePortChannelImpl*> ports;
if (!sent_message_port_ids.empty()) {
- base::MessageLoopProxy* loop_proxy = embedded_context_->main_thread_proxy();
+ base::SingleThreadTaskRunner* task_runner =
+ embedded_context_->main_thread_task_runner();
ports.resize(sent_message_port_ids.size());
for (size_t i = 0; i < sent_message_port_ids.size(); ++i) {
ports[i] = new WebMessagePortChannelImpl(
- new_routing_ids[i], sent_message_port_ids[i], loop_proxy);
+ new_routing_ids[i], sent_message_port_ids[i], task_runner);
}
}
@@ -438,11 +439,12 @@ void ServiceWorkerScriptContext::OnCrossOriginMessageToWorker(
"ServiceWorkerScriptContext::OnCrossOriginMessageToWorker");
std::vector<WebMessagePortChannelImpl*> ports;
if (!sent_message_port_ids.empty()) {
- base::MessageLoopProxy* loop_proxy = embedded_context_->main_thread_proxy();
+ base::SingleThreadTaskRunner* task_runner =
+ embedded_context_->main_thread_task_runner();
ports.resize(sent_message_port_ids.size());
for (size_t i = 0; i < sent_message_port_ids.size(); ++i) {
ports[i] = new WebMessagePortChannelImpl(
- new_routing_ids[i], sent_message_port_ids[i], loop_proxy);
+ new_routing_ids[i], sent_message_port_ids[i], task_runner);
}
}