| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/child/webmessageportchannel_impl.h" | 5 #include "content/child/webmessageportchannel_impl.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/message_loop/message_loop_proxy.h" | 8 #include "base/message_loop/message_loop_proxy.h" |
| 9 #include "content/child/child_process.h" | 9 #include "content/child/child_process.h" |
| 10 #include "content/child/child_thread.h" | 10 #include "content/child/child_thread.h" |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 53 } | 53 } |
| 54 | 54 |
| 55 if (message_port_id_ != MSG_ROUTING_NONE) | 55 if (message_port_id_ != MSG_ROUTING_NONE) |
| 56 Send(new MessagePortHostMsg_DestroyMessagePort(message_port_id_)); | 56 Send(new MessagePortHostMsg_DestroyMessagePort(message_port_id_)); |
| 57 | 57 |
| 58 if (route_id_ != MSG_ROUTING_NONE) | 58 if (route_id_ != MSG_ROUTING_NONE) |
| 59 ChildThread::current()->GetRouter()->RemoveRoute(route_id_); | 59 ChildThread::current()->GetRouter()->RemoveRoute(route_id_); |
| 60 } | 60 } |
| 61 | 61 |
| 62 // static | 62 // static |
| 63 void WebMessagePortChannelImpl::CreatePair( |
| 64 base::MessageLoopProxy* child_thread_loop, |
| 65 blink::WebMessagePortChannel** channel1, |
| 66 blink::WebMessagePortChannel** channel2) { |
| 67 WebMessagePortChannelImpl* impl1 = |
| 68 new WebMessagePortChannelImpl(child_thread_loop); |
| 69 WebMessagePortChannelImpl* impl2 = |
| 70 new WebMessagePortChannelImpl(child_thread_loop); |
| 71 |
| 72 impl1->Entangle(impl2); |
| 73 impl2->Entangle(impl1); |
| 74 |
| 75 *channel1 = impl1; |
| 76 *channel2 = impl2; |
| 77 } |
| 78 |
| 79 // static |
| 63 std::vector<int> WebMessagePortChannelImpl::ExtractMessagePortIDs( | 80 std::vector<int> WebMessagePortChannelImpl::ExtractMessagePortIDs( |
| 64 WebMessagePortChannelArray* channels) { | 81 WebMessagePortChannelArray* channels) { |
| 65 std::vector<int> message_port_ids; | 82 std::vector<int> message_port_ids; |
| 66 if (channels) { | 83 if (channels) { |
| 67 message_port_ids.resize(channels->size()); | 84 message_port_ids.resize(channels->size()); |
| 68 // Extract the port IDs from the source array, then free it. | 85 // Extract the port IDs from the source array, then free it. |
| 69 for (size_t i = 0; i < channels->size(); ++i) { | 86 for (size_t i = 0; i < channels->size(); ++i) { |
| 70 WebMessagePortChannelImpl* webchannel = | 87 WebMessagePortChannelImpl* webchannel = |
| 71 static_cast<WebMessagePortChannelImpl*>((*channels)[i]); | 88 static_cast<WebMessagePortChannelImpl*>((*channels)[i]); |
| 72 message_port_ids[i] = webchannel->message_port_id(); | 89 message_port_ids[i] = webchannel->message_port_id(); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 86 | 103 |
| 87 void WebMessagePortChannelImpl::destroy() { | 104 void WebMessagePortChannelImpl::destroy() { |
| 88 setClient(NULL); | 105 setClient(NULL); |
| 89 | 106 |
| 90 // Release the object on the main thread, since the destructor might want to | 107 // Release the object on the main thread, since the destructor might want to |
| 91 // send an IPC, and that has to happen on the main thread. | 108 // send an IPC, and that has to happen on the main thread. |
| 92 child_thread_loop_->ReleaseSoon(FROM_HERE, this); | 109 child_thread_loop_->ReleaseSoon(FROM_HERE, this); |
| 93 } | 110 } |
| 94 | 111 |
| 95 void WebMessagePortChannelImpl::entangle(WebMessagePortChannel* channel) { | 112 void WebMessagePortChannelImpl::entangle(WebMessagePortChannel* channel) { |
| 96 // The message port ids might not be set up yet, if this channel wasn't | 113 NOTREACHED(); // DEPRECATED |
| 97 // created on the main thread. So need to wait until we're on the main thread | |
| 98 // before getting the other message port id. | |
| 99 scoped_refptr<WebMessagePortChannelImpl> webchannel( | |
| 100 static_cast<WebMessagePortChannelImpl*>(channel)); | |
| 101 Entangle(webchannel); | |
| 102 } | 114 } |
| 103 | 115 |
| 104 void WebMessagePortChannelImpl::postMessage( | 116 void WebMessagePortChannelImpl::postMessage( |
| 105 const WebString& message, | 117 const WebString& message, |
| 106 WebMessagePortChannelArray* channels) { | 118 WebMessagePortChannelArray* channels) { |
| 107 if (!child_thread_loop_->BelongsToCurrentThread()) { | 119 if (!child_thread_loop_->BelongsToCurrentThread()) { |
| 108 child_thread_loop_->PostTask( | 120 child_thread_loop_->PostTask( |
| 109 FROM_HERE, | 121 FROM_HERE, |
| 110 base::Bind( | 122 base::Bind( |
| 111 &WebMessagePortChannelImpl::PostMessage, this, message, channels)); | 123 &WebMessagePortChannelImpl::PostMessage, this, message, channels)); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 153 DCHECK(message_port_id_ == MSG_ROUTING_NONE); | 165 DCHECK(message_port_id_ == MSG_ROUTING_NONE); |
| 154 Send(new MessagePortHostMsg_CreateMessagePort( | 166 Send(new MessagePortHostMsg_CreateMessagePort( |
| 155 &route_id_, &message_port_id_)); | 167 &route_id_, &message_port_id_)); |
| 156 } | 168 } |
| 157 | 169 |
| 158 ChildThread::current()->GetRouter()->AddRoute(route_id_, this); | 170 ChildThread::current()->GetRouter()->AddRoute(route_id_, this); |
| 159 } | 171 } |
| 160 | 172 |
| 161 void WebMessagePortChannelImpl::Entangle( | 173 void WebMessagePortChannelImpl::Entangle( |
| 162 scoped_refptr<WebMessagePortChannelImpl> channel) { | 174 scoped_refptr<WebMessagePortChannelImpl> channel) { |
| 175 // The message port ids might not be set up yet, if this channel wasn't |
| 176 // created on the main thread. So need to wait until we're on the main thread |
| 177 // before getting the other message port id. |
| 163 if (!child_thread_loop_->BelongsToCurrentThread()) { | 178 if (!child_thread_loop_->BelongsToCurrentThread()) { |
| 164 child_thread_loop_->PostTask( | 179 child_thread_loop_->PostTask( |
| 165 FROM_HERE, | 180 FROM_HERE, |
| 166 base::Bind(&WebMessagePortChannelImpl::Entangle, this, channel)); | 181 base::Bind(&WebMessagePortChannelImpl::Entangle, this, channel)); |
| 167 return; | 182 return; |
| 168 } | 183 } |
| 169 | 184 |
| 170 Send(new MessagePortHostMsg_Entangle( | 185 Send(new MessagePortHostMsg_Entangle( |
| 171 message_port_id_, channel->message_port_id())); | 186 message_port_id_, channel->message_port_id())); |
| 172 } | 187 } |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 261 | 276 |
| 262 Release(); | 277 Release(); |
| 263 ChildProcess::current()->ReleaseProcess(); | 278 ChildProcess::current()->ReleaseProcess(); |
| 264 } | 279 } |
| 265 | 280 |
| 266 WebMessagePortChannelImpl::Message::Message() {} | 281 WebMessagePortChannelImpl::Message::Message() {} |
| 267 | 282 |
| 268 WebMessagePortChannelImpl::Message::~Message() {} | 283 WebMessagePortChannelImpl::Message::~Message() {} |
| 269 | 284 |
| 270 } // namespace content | 285 } // namespace content |
| OLD | NEW |