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

Side by Side Diff: content/public/browser/browser_message_filter.cc

Issue 324143002: Decouple IPC::MessageFilter from IPC::Channel (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Landing Created 6 years, 6 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/public/browser/browser_message_filter.h" 5 #include "content/public/browser/browser_message_filter.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 12 matching lines...) Expand all
23 namespace content { 23 namespace content {
24 24
25 class BrowserMessageFilter::Internal : public IPC::MessageFilter { 25 class BrowserMessageFilter::Internal : public IPC::MessageFilter {
26 public: 26 public:
27 explicit Internal(BrowserMessageFilter* filter) : filter_(filter) {} 27 explicit Internal(BrowserMessageFilter* filter) : filter_(filter) {}
28 28
29 private: 29 private:
30 virtual ~Internal() {} 30 virtual ~Internal() {}
31 31
32 // IPC::MessageFilter implementation: 32 // IPC::MessageFilter implementation:
33 virtual void OnFilterAdded(IPC::Channel* channel) OVERRIDE { 33 virtual void OnFilterAdded(IPC::Sender* sender) OVERRIDE {
34 filter_->channel_ = channel; 34 filter_->sender_ = sender;
35 filter_->OnFilterAdded(channel); 35 filter_->OnFilterAdded(sender);
36 } 36 }
37 37
38 virtual void OnFilterRemoved() OVERRIDE { 38 virtual void OnFilterRemoved() OVERRIDE {
39 filter_->OnFilterRemoved(); 39 filter_->OnFilterRemoved();
40 } 40 }
41 41
42 virtual void OnChannelClosing() OVERRIDE { 42 virtual void OnChannelClosing() OVERRIDE {
43 filter_->channel_ = NULL; 43 filter_->sender_ = NULL;
44 filter_->OnChannelClosing(); 44 filter_->OnChannelClosing();
45 } 45 }
46 46
47 virtual void OnChannelConnected(int32 peer_pid) OVERRIDE { 47 virtual void OnChannelConnected(int32 peer_pid) OVERRIDE {
48 filter_->peer_pid_ = peer_pid; 48 filter_->peer_pid_ = peer_pid;
49 filter_->OnChannelConnected(peer_pid); 49 filter_->OnChannelConnected(peer_pid);
50 } 50 }
51 51
52 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE { 52 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE {
53 BrowserThread::ID thread = BrowserThread::IO; 53 BrowserThread::ID thread = BrowserThread::IO;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 return rv; 94 return rv;
95 } 95 }
96 96
97 scoped_refptr<BrowserMessageFilter> filter_; 97 scoped_refptr<BrowserMessageFilter> filter_;
98 98
99 DISALLOW_COPY_AND_ASSIGN(Internal); 99 DISALLOW_COPY_AND_ASSIGN(Internal);
100 }; 100 };
101 101
102 BrowserMessageFilter::BrowserMessageFilter(uint32 message_class_to_filter) 102 BrowserMessageFilter::BrowserMessageFilter(uint32 message_class_to_filter)
103 : internal_(NULL), 103 : internal_(NULL),
104 channel_(NULL), 104 sender_(NULL),
105 #if defined(OS_WIN) 105 #if defined(OS_WIN)
106 peer_handle_(base::kNullProcessHandle), 106 peer_handle_(base::kNullProcessHandle),
107 #endif 107 #endif
108 peer_pid_(base::kNullProcessId), 108 peer_pid_(base::kNullProcessId),
109 message_classes_to_filter_(1, message_class_to_filter) {} 109 message_classes_to_filter_(1, message_class_to_filter) {}
110 110
111 BrowserMessageFilter::BrowserMessageFilter( 111 BrowserMessageFilter::BrowserMessageFilter(
112 const uint32* message_classes_to_filter, 112 const uint32* message_classes_to_filter,
113 size_t num_message_classes_to_filter) 113 size_t num_message_classes_to_filter)
114 : internal_(NULL), 114 : internal_(NULL),
115 channel_(NULL), 115 sender_(NULL),
116 #if defined(OS_WIN) 116 #if defined(OS_WIN)
117 peer_handle_(base::kNullProcessHandle), 117 peer_handle_(base::kNullProcessHandle),
118 #endif 118 #endif
119 peer_pid_(base::kNullProcessId), 119 peer_pid_(base::kNullProcessId),
120 message_classes_to_filter_( 120 message_classes_to_filter_(
121 message_classes_to_filter, 121 message_classes_to_filter,
122 message_classes_to_filter + num_message_classes_to_filter) { 122 message_classes_to_filter + num_message_classes_to_filter) {
123 DCHECK(num_message_classes_to_filter); 123 DCHECK(num_message_classes_to_filter);
124 } 124 }
125 125
(...skipping 28 matching lines...) Expand all
154 154
155 if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) { 155 if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) {
156 BrowserThread::PostTask( 156 BrowserThread::PostTask(
157 BrowserThread::IO, 157 BrowserThread::IO,
158 FROM_HERE, 158 FROM_HERE,
159 base::Bind(base::IgnoreResult(&BrowserMessageFilter::Send), this, 159 base::Bind(base::IgnoreResult(&BrowserMessageFilter::Send), this,
160 message)); 160 message));
161 return true; 161 return true;
162 } 162 }
163 163
164 if (channel_) 164 if (sender_)
165 return channel_->Send(message); 165 return sender_->Send(message);
166 166
167 delete message; 167 delete message;
168 return false; 168 return false;
169 } 169 }
170 170
171 base::TaskRunner* BrowserMessageFilter::OverrideTaskRunnerForMessage( 171 base::TaskRunner* BrowserMessageFilter::OverrideTaskRunnerForMessage(
172 const IPC::Message& message) { 172 const IPC::Message& message) {
173 return NULL; 173 return NULL;
174 } 174 }
175 175
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 218
219 IPC::MessageFilter* BrowserMessageFilter::GetFilter() { 219 IPC::MessageFilter* BrowserMessageFilter::GetFilter() {
220 // We create this on demand so that if a filter is used in a unit test but 220 // We create this on demand so that if a filter is used in a unit test but
221 // never attached to a channel, we don't leak Internal and this; 221 // never attached to a channel, we don't leak Internal and this;
222 DCHECK(!internal_) << "Should only be called once."; 222 DCHECK(!internal_) << "Should only be called once.";
223 internal_ = new Internal(this); 223 internal_ = new Internal(this);
224 return internal_; 224 return internal_;
225 } 225 }
226 226
227 } // namespace content 227 } // namespace content
OLDNEW
« no previous file with comments | « content/public/browser/browser_message_filter.h ('k') | content/renderer/input/input_event_filter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698