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 "content/renderer/p2p/socket_dispatcher.h" | 5 #include "content/renderer/p2p/socket_dispatcher.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/memory/ref_counted.h" | 8 #include "base/memory/ref_counted.h" |
9 #include "base/message_loop_proxy.h" | 9 #include "base/message_loop_proxy.h" |
10 #include "content/common/p2p_messages.h" | 10 #include "content/common/p2p_messages.h" |
11 #include "content/renderer/p2p/host_address_request.h" | 11 #include "content/renderer/p2p/host_address_request.h" |
12 #include "content/renderer/p2p/socket_client.h" | 12 #include "content/renderer/p2p/socket_client.h" |
13 #include "content/renderer/render_view_impl.h" | 13 #include "content/renderer/render_view_impl.h" |
| 14 #include "webkit/glue/network_list_observer.h" |
14 | 15 |
15 namespace content { | 16 namespace content { |
16 | 17 |
17 class P2PSocketDispatcher::AsyncMessageSender | 18 class P2PSocketDispatcher::AsyncMessageSender |
18 : public base::RefCountedThreadSafe<AsyncMessageSender> { | 19 : public base::RefCountedThreadSafe<AsyncMessageSender> { |
19 public: | 20 public: |
20 explicit AsyncMessageSender(IPC::Message::Sender* message_sender) | 21 explicit AsyncMessageSender(IPC::Message::Sender* message_sender) |
21 : message_loop_(base::MessageLoopProxy::current()), | 22 : message_loop_(base::MessageLoopProxy::current()), |
22 message_sender_(message_sender) { | 23 message_sender_(message_sender) { |
23 } | 24 } |
(...skipping 19 matching lines...) Expand all Loading... |
43 IPC::Message::Sender* message_sender_; | 44 IPC::Message::Sender* message_sender_; |
44 | 45 |
45 DISALLOW_COPY_AND_ASSIGN(AsyncMessageSender); | 46 DISALLOW_COPY_AND_ASSIGN(AsyncMessageSender); |
46 }; | 47 }; |
47 | 48 |
48 P2PSocketDispatcher::P2PSocketDispatcher(RenderViewImpl* render_view) | 49 P2PSocketDispatcher::P2PSocketDispatcher(RenderViewImpl* render_view) |
49 : content::RenderViewObserver(render_view), | 50 : content::RenderViewObserver(render_view), |
50 message_loop_(base::MessageLoopProxy::current()), | 51 message_loop_(base::MessageLoopProxy::current()), |
51 network_notifications_started_(false), | 52 network_notifications_started_(false), |
52 network_list_observers_( | 53 network_list_observers_( |
53 new ObserverListThreadSafe<NetworkListObserver>()), | 54 new ObserverListThreadSafe<webkit_glue::NetworkListObserver>()), |
54 async_message_sender_(new AsyncMessageSender(this)) { | 55 async_message_sender_(new AsyncMessageSender(this)) { |
55 } | 56 } |
56 | 57 |
57 P2PSocketDispatcher::~P2PSocketDispatcher() { | 58 P2PSocketDispatcher::~P2PSocketDispatcher() { |
58 network_list_observers_->AssertEmpty(); | 59 network_list_observers_->AssertEmpty(); |
59 if (network_notifications_started_) | 60 if (network_notifications_started_) |
60 Send(new P2PHostMsg_StopNetworkNotifications(routing_id())); | 61 Send(new P2PHostMsg_StopNetworkNotifications(routing_id())); |
61 for (IDMap<P2PSocketClient>::iterator i(&clients_); !i.IsAtEnd(); | 62 for (IDMap<P2PSocketClient>::iterator i(&clients_); !i.IsAtEnd(); |
62 i.Advance()) { | 63 i.Advance()) { |
63 i.GetCurrentValue()->Detach(); | 64 i.GetCurrentValue()->Detach(); |
64 } | 65 } |
65 async_message_sender_->Detach(); | 66 async_message_sender_->Detach(); |
66 } | 67 } |
67 | 68 |
68 void P2PSocketDispatcher::AddNetworkListObserver( | 69 void P2PSocketDispatcher::AddNetworkListObserver( |
69 NetworkListObserver* network_list_observer) { | 70 webkit_glue::NetworkListObserver* network_list_observer) { |
70 network_list_observers_->AddObserver(network_list_observer); | 71 network_list_observers_->AddObserver(network_list_observer); |
71 network_notifications_started_ = true; | 72 network_notifications_started_ = true; |
72 async_message_sender_->Send( | 73 async_message_sender_->Send( |
73 new P2PHostMsg_StartNetworkNotifications(routing_id())); | 74 new P2PHostMsg_StartNetworkNotifications(routing_id())); |
74 } | 75 } |
75 | 76 |
76 void P2PSocketDispatcher::RemoveNetworkListObserver( | 77 void P2PSocketDispatcher::RemoveNetworkListObserver( |
77 NetworkListObserver* network_list_observer) { | 78 webkit_glue::NetworkListObserver* network_list_observer) { |
78 network_list_observers_->RemoveObserver(network_list_observer); | 79 network_list_observers_->RemoveObserver(network_list_observer); |
79 } | 80 } |
80 | 81 |
81 bool P2PSocketDispatcher::OnMessageReceived(const IPC::Message& message) { | 82 bool P2PSocketDispatcher::OnMessageReceived(const IPC::Message& message) { |
82 bool handled = true; | 83 bool handled = true; |
83 IPC_BEGIN_MESSAGE_MAP(P2PSocketDispatcher, message) | 84 IPC_BEGIN_MESSAGE_MAP(P2PSocketDispatcher, message) |
84 IPC_MESSAGE_HANDLER(P2PMsg_NetworkListChanged, OnNetworkListChanged) | 85 IPC_MESSAGE_HANDLER(P2PMsg_NetworkListChanged, OnNetworkListChanged) |
85 IPC_MESSAGE_HANDLER(P2PMsg_GetHostAddressResult, OnGetHostAddressResult) | 86 IPC_MESSAGE_HANDLER(P2PMsg_GetHostAddressResult, OnGetHostAddressResult) |
86 IPC_MESSAGE_HANDLER(P2PMsg_OnSocketCreated, OnSocketCreated) | 87 IPC_MESSAGE_HANDLER(P2PMsg_OnSocketCreated, OnSocketCreated) |
87 IPC_MESSAGE_HANDLER(P2PMsg_OnIncomingTcpConnection, OnIncomingTcpConnection) | 88 IPC_MESSAGE_HANDLER(P2PMsg_OnIncomingTcpConnection, OnIncomingTcpConnection) |
(...skipping 25 matching lines...) Expand all Loading... |
113 P2PHostAddressRequest* request) { | 114 P2PHostAddressRequest* request) { |
114 return host_address_requests_.Add(request); | 115 return host_address_requests_.Add(request); |
115 } | 116 } |
116 | 117 |
117 void P2PSocketDispatcher::UnregisterHostAddressRequest(int id) { | 118 void P2PSocketDispatcher::UnregisterHostAddressRequest(int id) { |
118 host_address_requests_.Remove(id); | 119 host_address_requests_.Remove(id); |
119 } | 120 } |
120 | 121 |
121 void P2PSocketDispatcher::OnNetworkListChanged( | 122 void P2PSocketDispatcher::OnNetworkListChanged( |
122 const net::NetworkInterfaceList& networks) { | 123 const net::NetworkInterfaceList& networks) { |
123 network_list_observers_->Notify(&NetworkListObserver::OnNetworkListChanged, | 124 network_list_observers_->Notify( |
124 networks); | 125 &webkit_glue::NetworkListObserver::OnNetworkListChanged, networks); |
125 } | 126 } |
126 | 127 |
127 void P2PSocketDispatcher::OnGetHostAddressResult( | 128 void P2PSocketDispatcher::OnGetHostAddressResult( |
128 int32 request_id, | 129 int32 request_id, |
129 const net::IPAddressNumber& address) { | 130 const net::IPAddressNumber& address) { |
130 P2PHostAddressRequest* request = host_address_requests_.Lookup(request_id); | 131 P2PHostAddressRequest* request = host_address_requests_.Lookup(request_id); |
131 if (!request) { | 132 if (!request) { |
132 VLOG(1) << "Received P2P message for socket that doesn't exist."; | 133 VLOG(1) << "Received P2P message for socket that doesn't exist."; |
133 return; | 134 return; |
134 } | 135 } |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
175 // hasn't processed the close message by the time it sends the | 176 // hasn't processed the close message by the time it sends the |
176 // message to the renderer. | 177 // message to the renderer. |
177 VLOG(1) << "Received P2P message for socket that doesn't exist."; | 178 VLOG(1) << "Received P2P message for socket that doesn't exist."; |
178 return NULL; | 179 return NULL; |
179 } | 180 } |
180 | 181 |
181 return client; | 182 return client; |
182 } | 183 } |
183 | 184 |
184 } // namespace content | 185 } // namespace content |
OLD | NEW |