Chromium Code Reviews| Index: content/browser/message_port_provider.cc |
| diff --git a/content/browser/message_port_provider.cc b/content/browser/message_port_provider.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..e705d062120fe14e35eb5978018e4a5e5385894b |
| --- /dev/null |
| +++ b/content/browser/message_port_provider.cc |
| @@ -0,0 +1,69 @@ |
| +// Copyright 2014 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "content/public/browser/message_port_provider.h" |
| + |
| +#include "base/basictypes.h" |
| +#include "content/browser/message_port_message_filter.h" |
| +#include "content/browser/message_port_service.h" |
| +#include "content/browser/renderer_host/render_process_host_impl.h" |
| +#include "content/common/view_messages.h" |
| +#include "content/public/browser/browser_thread.h" |
| +#include "content/public/browser/render_view_host.h" |
| +#include "content/public/browser/web_contents.h" |
|
jochen (gone - plz use gerrit)
2014/11/18 13:29:41
files in content/ should use the _impl.h versions
jochen (gone - plz use gerrit)
2014/11/18 13:29:41
files in content/ should use the _impl.h versions
sgurun-gerrit only
2014/11/18 22:51:55
Done.
sgurun-gerrit only
2014/11/18 22:51:55
Done.
|
| + |
| +using base::string16; |
|
jochen (gone - plz use gerrit)
2014/11/18 13:29:41
please don't add using for base:: types
sgurun-gerrit only
2014/11/18 22:51:55
Done.
|
| + |
| +namespace content { |
| + |
| +void MessagePortProvider::PostMessageToFrame(WebContents* web_contents, |
| + string16* source_origin, |
| + string16* target_origin, |
| + string16* data, |
| + std::vector<int>* ports) { |
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| + |
| + RenderViewHost* rvh = web_contents->GetRenderViewHost(); |
| + if (!rvh) |
| + return; |
| + |
| + ViewMsg_PostMessage_Params params; |
| + params.is_data_raw_string = true; |
| + params.data = *data; |
| + params.source_routing_id = web_contents->GetRoutingID(); |
| + params.source_origin = *source_origin; |
| + params.target_origin = *target_origin; |
| + |
| + RenderProcessHostImpl* rph = |
| + static_cast<RenderProcessHostImpl*>( |
| + web_contents->GetRenderProcessHost()); |
| + MessagePortMessageFilter* mf = rph->message_port_message_filter(); |
| + |
| + if (!ports->empty()) { |
| + params.message_port_ids = *ports; |
| + mf->UpdateMessagePortsWithNewRoutes(params.message_port_ids, |
| + ¶ms.new_routing_ids); |
| + } |
| + rvh->Send(new ViewMsg_PostMessageEvent( |
| + web_contents->GetRenderViewHost()->GetRoutingID(), |
| + params)); |
| +} |
| + |
| +void MessagePortProvider::CreateMessageChannel(WebContents* web_contents, |
| + int* port1, int* port2) { |
|
jochen (gone - plz use gerrit)
2014/11/18 13:29:41
is this clang-formated?
sgurun-gerrit only
2014/11/18 22:51:55
Done.
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| + |
| + *port1 = 0; |
| + *port2 = 0; |
| + |
| + RenderProcessHostImpl* rph = |
| + static_cast<RenderProcessHostImpl*>( |
| + web_contents->GetRenderProcessHost()); |
| + MessagePortMessageFilter* mf = rph->message_port_message_filter(); |
| + MessagePortService* msp = MessagePortService::GetInstance(); |
| + msp->Create(mf->GetNextRoutingID(), mf, port1); |
| + msp->Create(mf->GetNextRoutingID(), mf, port2); |
| +} |
| + |
| +} // namespace content |