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

Unified Diff: content/child/cross_thread_message_filter.h

Issue 63843002: Add ChildMessageFilter, a base class for renderer/worker cross-thread MessageFilter (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 1 month 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/child/cross_thread_message_filter.h
diff --git a/content/child/cross_thread_message_filter.h b/content/child/cross_thread_message_filter.h
new file mode 100644
index 0000000000000000000000000000000000000000..27391e0537bb6adcdb8cd8186cc8aa6f84074296
--- /dev/null
+++ b/content/child/cross_thread_message_filter.h
@@ -0,0 +1,60 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_CHILD_CROSS_THREAD_MESSAGE_FILTER_H_
+#define CONTENT_CHILD_CROSS_THREAD_MESSAGE_FILTER_H_
+
+#include "ipc/ipc_channel_proxy.h"
+
+namespace content {
+
+// A base class of cross-thread message filter for dispatching messages
+// to blink's worker threads via WorkerTaskRunner.
jam 2013/11/08 19:51:59 nit: no need to mention blink here, this class can
kinuko 2013/11/15 14:40:36 Done.
+class CrossThreadMessageFilter
jam 2013/11/08 19:51:59 nit: I think ChildMessageFilter is sufficient, tha
kinuko 2013/11/15 14:40:36 Ok, done. (scherkus@, hope it's ok that I'm steali
scherkus (not reviewing) 2013/11/15 19:12:19 go for it! I don't have the bandwidth at the momen
+ : public base::RefCountedThreadSafe<CrossThreadMessageFilter> {
+ public:
+ // If implementors want to run OnMessageReceived on a different thread
+ // it should set |thread_id| to a thee thread ID and return true.
+ // 0 thread_id indicates OnMessageReceived should be dispatched to
+ // the main child thread.
+ // Returning false indicates OnMessageReceived should be called on the
+ // IPC thread.
+ virtual bool OverrideThreadIDForMessage(
+ const IPC::Message& msg,
+ int* thread_id) = 0;
+
+ // If OverrideThreadIDForMessage returned true this is called on the
+ // target thread that is returned by OverrideThreadIDForMessage.
+ virtual bool OnMessageReceived(const IPC::Message& msg) = 0;
+
+ // This method is called when WorkerTaskRunner::PostTask() returned false
+ // for the target thread. Note that there's still a listtle chance that
+ // PostTask() returns true but OnMessageReceivedOnTargetThread() is
+ // never called. By default this does nothing.
+ virtual void OnStaleMessageReceived(const IPC::Message& msg) {}
jam 2013/11/08 19:51:59 can you also add a Send() method, i.e. see https:/
kinuko 2013/11/15 14:40:36 Done.
+
+ protected:
+ CrossThreadMessageFilter();
+ virtual ~CrossThreadMessageFilter();
+
+ private:
+ class Internal;
+ friend class ChildThread;
+ friend class RenderThreadImpl;
+ friend class WorkerThread;
+
+ friend class base::RefCountedThreadSafe<CrossThreadMessageFilter>;
+
+ IPC::ChannelProxy::MessageFilter* GetFilter();
+
+ // This implements IPC::ChannelProxy::MessageFilter to hide the actual
+ // filter methods from child classes.
+ Internal* internal_;
+
+ DISALLOW_COPY_AND_ASSIGN(CrossThreadMessageFilter);
+};
+
+} // namespace content
+
+#endif // CONTENT_CHILD_CROSS_THREAD_MESSAGE_FILTER_H_

Powered by Google App Engine
This is Rietveld 408576698