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

Side by Side Diff: chrome/common/child_thread.h

Issue 1625015: Refactor ChildProcess and related classes to create a framework outside of br... (Closed) Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: Created 10 years, 8 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 | Annotate | Revision Log
« no previous file with comments | « chrome/common/child_process.cc ('k') | chrome/common/child_thread.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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 #ifndef CHROME_COMMON_CHILD_THREAD_H_ 5 #ifndef CHROME_COMMON_CHILD_THREAD_H_
6 #define CHROME_COMMON_CHILD_THREAD_H_ 6 #define CHROME_COMMON_CHILD_THREAD_H_
7 7
8 #include "base/basictypes.h" 8 #include "base/basictypes.h"
9 #include "base/scoped_ptr.h" 9 #include "base/scoped_ptr.h"
10 #include "chrome/common/message_router.h" 10 #include "base/mp/mp_child_thread.h"
11 #include "chrome/common/notification_service.h"
11 #include "chrome/common/resource_dispatcher.h" 12 #include "chrome/common/resource_dispatcher.h"
12 #include "ipc/ipc_sync_channel.h" 13 #include "chrome/common/socket_stream_dispatcher.h"
13 #include "ipc/ipc_message.h"
14 14
15 class NotificationService;
16 class SocketStreamDispatcher;
17
18 namespace IPC {
19 class SyncMessageFilter;
20 }
21 15
22 // The main thread of a child process derives from this class. 16 // The main thread of a child process derives from this class.
23 class ChildThread : public IPC::Channel::Listener, 17 class ChildThread : public base::MpChildThread {
24 public IPC::Message::Sender {
25 public: 18 public:
26 // Creates the thread. 19 // Creates the thread.
27 ChildThread(); 20 ChildThread();
28 // Used for single-process mode. 21 // Used for single-process mode.
29 explicit ChildThread(const std::string& channel_name); 22 explicit ChildThread(const std::string& channel_name);
30 virtual ~ChildThread(); 23 virtual ~ChildThread();
31 24
32 // IPC::Message::Sender implementation:
33 virtual bool Send(IPC::Message* msg);
34
35 // See documentation on MessageRouter for AddRoute and RemoveRoute
36 void AddRoute(int32 routing_id, IPC::Channel::Listener* listener);
37 void RemoveRoute(int32 routing_id);
38
39 IPC::Channel::Listener* ResolveRoute(int32 routing_id);
40
41 // Creates a ResourceLoaderBridge. 25 // Creates a ResourceLoaderBridge.
42 // Tests can override this method if they want a custom loading behavior. 26 // Tests can override this method if they want a custom loading behavior.
43 virtual webkit_glue::ResourceLoaderBridge* CreateBridge( 27 virtual webkit_glue::ResourceLoaderBridge* CreateBridge(
44 const webkit_glue::ResourceLoaderBridge::RequestInfo& request_info, 28 const webkit_glue::ResourceLoaderBridge::RequestInfo& request_info,
45 int host_renderer_id, 29 int host_renderer_id,
46 int host_render_view_id); 30 int host_render_view_id);
47 31
48 ResourceDispatcher* resource_dispatcher() { 32 ResourceDispatcher* resource_dispatcher() {
49 return resource_dispatcher_.get(); 33 return resource_dispatcher_.get();
50 } 34 }
51 35
52 SocketStreamDispatcher* socket_stream_dispatcher() { 36 SocketStreamDispatcher* socket_stream_dispatcher() {
53 return socket_stream_dispatcher_.get(); 37 return socket_stream_dispatcher_.get();
54 } 38 }
55 39
56 // Safe to call on any thread, as long as it's guaranteed that the thread's
57 // lifetime is less than the main thread.
58 IPC::SyncMessageFilter* sync_message_filter() { return sync_message_filter_; }
59
60 MessageLoop* message_loop() { return message_loop_; }
61
62 // Returns the one child thread.
63 static ChildThread* current();
64
65 protected:
66 friend class ChildProcess;
67
68 // Called when the process refcount is 0.
69 void OnProcessFinalRelease();
70
71 virtual void OnControlMessageReceived(const IPC::Message& msg) { }
72 virtual void OnAskBeforeShutdown();
73 virtual void OnShutdown();
74
75 #ifdef IPC_MESSAGE_LOG_ENABLED
76 virtual void OnSetIPCLoggingEnabled(bool enable);
77 #endif
78
79 IPC::SyncChannel* channel() { return channel_.get(); }
80
81 void set_on_channel_error_called(bool on_channel_error_called) {
82 on_channel_error_called_ = on_channel_error_called;
83 }
84
85 private: 40 private:
86 void Init(); 41 void Init();
87 42
88 // IPC::Channel::Listener implementation: 43 // IPC::Channel::Listener implementation:
89 virtual void OnMessageReceived(const IPC::Message& msg); 44 virtual void OnMessageReceived(const IPC::Message& msg);
90 virtual void OnChannelError();
91
92 std::string channel_name_;
93 scoped_ptr<IPC::SyncChannel> channel_;
94
95 // Allows threads other than the main thread to send sync messages.
96 scoped_refptr<IPC::SyncMessageFilter> sync_message_filter_;
97
98 // Implements message routing functionality to the consumers of ChildThread.
99 MessageRouter router_;
100 45
101 // Handles resource loads for this process. 46 // Handles resource loads for this process.
102 scoped_ptr<ResourceDispatcher> resource_dispatcher_; 47 scoped_ptr<ResourceDispatcher> resource_dispatcher_;
103 48
104 // Handles SocketStream for this process. 49 // Handles SocketStream for this process.
105 scoped_ptr<SocketStreamDispatcher> socket_stream_dispatcher_; 50 scoped_ptr<SocketStreamDispatcher> socket_stream_dispatcher_;
106 51
107 // If true, checks with the browser process before shutdown. This avoids race
108 // conditions if the process refcount is 0 but there's an IPC message inflight
109 // that would addref it.
110 bool check_with_browser_before_shutdown_;
111
112 // The OnChannelError() callback was invoked - the channel is dead, don't
113 // attempt to communicate.
114 bool on_channel_error_called_;
115
116 MessageLoop* message_loop_;
117
118 scoped_ptr<NotificationService> notification_service_; 52 scoped_ptr<NotificationService> notification_service_;
119 53
120 DISALLOW_COPY_AND_ASSIGN(ChildThread); 54 DISALLOW_COPY_AND_ASSIGN(ChildThread);
121 }; 55 };
122 56
123 #endif // CHROME_COMMON_CHILD_THREAD_H_ 57 #endif // CHROME_COMMON_CHILD_THREAD_H_
OLDNEW
« no previous file with comments | « chrome/common/child_process.cc ('k') | chrome/common/child_thread.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698