| OLD | NEW |
| 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 "ipc/ipc_channel_proxy.h" | 5 #include "ipc/ipc_channel_proxy.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 66 | 66 |
| 67 void ChannelProxy::Context::ClearIPCTaskRunner() { | 67 void ChannelProxy::Context::ClearIPCTaskRunner() { |
| 68 ipc_task_runner_ = NULL; | 68 ipc_task_runner_ = NULL; |
| 69 } | 69 } |
| 70 | 70 |
| 71 void ChannelProxy::Context::CreateChannel( | 71 void ChannelProxy::Context::CreateChannel( |
| 72 std::unique_ptr<ChannelFactory> factory) { | 72 std::unique_ptr<ChannelFactory> factory) { |
| 73 base::AutoLock l(channel_lifetime_lock_); | 73 base::AutoLock l(channel_lifetime_lock_); |
| 74 DCHECK(!channel_); | 74 DCHECK(!channel_); |
| 75 DCHECK_EQ(factory->GetIPCTaskRunner(), ipc_task_runner_); | 75 DCHECK_EQ(factory->GetIPCTaskRunner(), ipc_task_runner_); |
| 76 channel_id_ = factory->GetName(); | |
| 77 channel_ = factory->BuildChannel(this); | 76 channel_ = factory->BuildChannel(this); |
| 78 | 77 |
| 79 Channel::AssociatedInterfaceSupport* support = | 78 Channel::AssociatedInterfaceSupport* support = |
| 80 channel_->GetAssociatedInterfaceSupport(); | 79 channel_->GetAssociatedInterfaceSupport(); |
| 81 if (support) { | 80 if (support) { |
| 82 associated_group_ = *support->GetAssociatedGroup(); | 81 associated_group_ = *support->GetAssociatedGroup(); |
| 83 | 82 |
| 84 base::AutoLock l(pending_filters_lock_); | 83 base::AutoLock l(pending_filters_lock_); |
| 85 for (auto& entry : pending_interfaces_) | 84 for (auto& entry : pending_interfaces_) |
| 86 support->AddGenericAssociatedInterface(entry.first, entry.second); | 85 support->AddGenericAssociatedInterface(entry.first, entry.second); |
| 87 pending_interfaces_.clear(); | 86 pending_interfaces_.clear(); |
| 88 } | 87 } |
| 89 } | 88 } |
| 90 | 89 |
| 91 bool ChannelProxy::Context::TryFilters(const Message& message) { | 90 bool ChannelProxy::Context::TryFilters(const Message& message) { |
| 92 DCHECK(message_filter_router_); | 91 DCHECK(message_filter_router_); |
| 93 #ifdef IPC_MESSAGE_LOG_ENABLED | 92 #ifdef IPC_MESSAGE_LOG_ENABLED |
| 94 Logging* logger = Logging::GetInstance(); | 93 Logging* logger = Logging::GetInstance(); |
| 95 if (logger->Enabled()) | 94 if (logger->Enabled()) |
| 96 logger->OnPreDispatchMessage(message); | 95 logger->OnPreDispatchMessage(message); |
| 97 #endif | 96 #endif |
| 98 | 97 |
| 99 if (message_filter_router_->TryFilters(message)) { | 98 if (message_filter_router_->TryFilters(message)) { |
| 100 if (message.dispatch_error()) { | 99 if (message.dispatch_error()) { |
| 101 listener_task_runner_->PostTask( | 100 listener_task_runner_->PostTask( |
| 102 FROM_HERE, base::Bind(&Context::OnDispatchBadMessage, this, message)); | 101 FROM_HERE, base::Bind(&Context::OnDispatchBadMessage, this, message)); |
| 103 } | 102 } |
| 104 #ifdef IPC_MESSAGE_LOG_ENABLED | 103 #ifdef IPC_MESSAGE_LOG_ENABLED |
| 105 if (logger->Enabled()) | 104 if (logger->Enabled()) |
| 106 logger->OnPostDispatchMessage(message, channel_id_); | 105 logger->OnPostDispatchMessage(message); |
| 107 #endif | 106 #endif |
| 108 return true; | 107 return true; |
| 109 } | 108 } |
| 110 return false; | 109 return false; |
| 111 } | 110 } |
| 112 | 111 |
| 113 // Called on the IPC::Channel thread | 112 // Called on the IPC::Channel thread |
| 114 void ChannelProxy::Context::PauseChannel() { | 113 void ChannelProxy::Context::PauseChannel() { |
| 115 DCHECK(channel_); | 114 DCHECK(channel_); |
| 116 channel_->Pause(); | 115 channel_->Pause(); |
| (...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 342 if (logger->Enabled()) | 341 if (logger->Enabled()) |
| 343 logger->OnPreDispatchMessage(message); | 342 logger->OnPreDispatchMessage(message); |
| 344 #endif | 343 #endif |
| 345 | 344 |
| 346 listener_->OnMessageReceived(message); | 345 listener_->OnMessageReceived(message); |
| 347 if (message.dispatch_error()) | 346 if (message.dispatch_error()) |
| 348 listener_->OnBadMessageReceived(message); | 347 listener_->OnBadMessageReceived(message); |
| 349 | 348 |
| 350 #ifdef IPC_MESSAGE_LOG_ENABLED | 349 #ifdef IPC_MESSAGE_LOG_ENABLED |
| 351 if (logger->Enabled()) | 350 if (logger->Enabled()) |
| 352 logger->OnPostDispatchMessage(message, channel_id_); | 351 logger->OnPostDispatchMessage(message); |
| 353 #endif | 352 #endif |
| 354 } | 353 } |
| 355 | 354 |
| 356 // Called on the listener's thread | 355 // Called on the listener's thread |
| 357 void ChannelProxy::Context::OnDispatchConnected() { | 356 void ChannelProxy::Context::OnDispatchConnected() { |
| 358 if (channel_connected_called_) | 357 if (channel_connected_called_) |
| 359 return; | 358 return; |
| 360 | 359 |
| 361 base::ProcessId peer_pid; | 360 base::ProcessId peer_pid; |
| 362 { | 361 { |
| (...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 563 | 562 |
| 564 #ifdef ENABLE_IPC_FUZZER | 563 #ifdef ENABLE_IPC_FUZZER |
| 565 // In IPC fuzzing builds, it is possible to define a filter to apply to | 564 // In IPC fuzzing builds, it is possible to define a filter to apply to |
| 566 // outgoing messages. It will either rewrite the message and return a new | 565 // outgoing messages. It will either rewrite the message and return a new |
| 567 // one, freeing the original, or return the message unchanged. | 566 // one, freeing the original, or return the message unchanged. |
| 568 if (outgoing_message_filter()) | 567 if (outgoing_message_filter()) |
| 569 message = outgoing_message_filter()->Rewrite(message); | 568 message = outgoing_message_filter()->Rewrite(message); |
| 570 #endif | 569 #endif |
| 571 | 570 |
| 572 #ifdef IPC_MESSAGE_LOG_ENABLED | 571 #ifdef IPC_MESSAGE_LOG_ENABLED |
| 573 Logging::GetInstance()->OnSendMessage(message, context_->channel_id()); | 572 Logging::GetInstance()->OnSendMessage(message); |
| 574 #endif | 573 #endif |
| 575 | 574 |
| 576 context_->Send(message); | 575 context_->Send(message); |
| 577 return true; | 576 return true; |
| 578 } | 577 } |
| 579 | 578 |
| 580 void ChannelProxy::AddFilter(MessageFilter* filter) { | 579 void ChannelProxy::AddFilter(MessageFilter* filter) { |
| 581 DCHECK(CalledOnValidThread()); | 580 DCHECK(CalledOnValidThread()); |
| 582 | 581 |
| 583 context_->AddFilter(filter); | 582 context_->AddFilter(filter); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 621 | 620 |
| 622 context()->ClearIPCTaskRunner(); | 621 context()->ClearIPCTaskRunner(); |
| 623 } | 622 } |
| 624 | 623 |
| 625 void ChannelProxy::OnChannelInit() { | 624 void ChannelProxy::OnChannelInit() { |
| 626 } | 625 } |
| 627 | 626 |
| 628 //----------------------------------------------------------------------------- | 627 //----------------------------------------------------------------------------- |
| 629 | 628 |
| 630 } // namespace IPC | 629 } // namespace IPC |
| OLD | NEW |