| 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 |