Chromium Code Reviews| Index: content/browser/render_widget_view_service_listener.cc |
| diff --git a/content/browser/render_widget_view_service_listener.cc b/content/browser/render_widget_view_service_listener.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..a042af93ff9917a105c6e1496b21cbf3144cbd0a |
| --- /dev/null |
| +++ b/content/browser/render_widget_view_service_listener.cc |
| @@ -0,0 +1,73 @@ |
| +// Copyright 2015 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/browser/render_widget_view_service_listener.h" |
| + |
| +#include "base/logging.h" |
| +#include "base/strings/string_number_conversions.h" |
| +#include "components/mus/public/interfaces/window_tree.mojom.h" |
| +#include "content/browser/renderer_host/render_view_host_impl.h" |
| +#include "content/browser/renderer_host/render_widget_host_impl.h" |
| +#include "content/browser/renderer_host/render_widget_host_view_mus.h" |
| +#include "mojo/application/public/cpp/application_connection.h" |
| +#include "url/gurl.h" |
| + |
| +namespace content { |
| + |
| +RenderWidgetViewFactoryImpl::RenderWidgetViewFactoryImpl( |
| + int render_process_id, |
| + mojo::InterfaceRequest<mojom::RenderWidgetViewFactory> request) |
| + : render_process_id_(render_process_id), binding_(this, request.Pass()) {} |
| + |
| +RenderWidgetViewFactoryImpl::~RenderWidgetViewFactoryImpl() {} |
| + |
| +void RenderWidgetViewFactoryImpl::CreateRenderWidgetView( |
| + uint32_t routing_id, |
| + mus::mojom::WindowTreeClientPtr tree_client) { |
| + RenderViewHostImpl* rvh = |
| + RenderViewHostImpl::FromID(render_process_id_, routing_id); |
| + RenderWidgetHostImpl* rwh = rvh ? rvh->GetWidget() : nullptr; |
| + RenderWidgetHostViewMus* rwhvmus = |
| + rwh ? static_cast<RenderWidgetHostViewMus*>(rwh->GetView()) : nullptr; |
| + // TODO(fsamuel): How do we get a RWHV that isn't a Mus View? |
|
Ben Goodger (Google)
2015/11/24 06:42:40
??
If you wanted to you could add AsMusView() tha
Fady Samuel
2015/11/24 13:32:06
Done.
|
| + if (rwhvmus->IsMusView()) |
| + rwhvmus->EmbedWindowTreeClient(tree_client.Pass()); |
| +} |
| + |
| +// static |
| +void RenderWidgetViewServiceListener::Create() { |
| + new RenderWidgetViewServiceListener; |
| +} |
| + |
| +RenderWidgetViewServiceListener::RenderWidgetViewServiceListener() { |
| + DCHECK(MojoShellConnection::Get()); |
| + MojoShellConnection::Get()->AddListener(this); |
| +} |
| + |
| +RenderWidgetViewServiceListener::~RenderWidgetViewServiceListener() {} |
| + |
| +bool RenderWidgetViewServiceListener::ConfigureIncomingConnection( |
| + mojo::ApplicationConnection* connection) { |
| + connection->AddService<mojom::RenderWidgetViewFactory>(this); |
| + return true; |
| +} |
| + |
| +void RenderWidgetViewServiceListener::OnDestroy() { |
|
Ben Goodger (Google)
2015/11/24 06:42:40
instead of adding this method maybe make MojoShell
Fady Samuel
2015/11/24 13:32:06
Done.
|
| + delete this; |
| +} |
| + |
| +void RenderWidgetViewServiceListener::Create( |
| + mojo::ApplicationConnection* connection, |
| + mojo::InterfaceRequest<mojom::RenderWidgetViewFactory> request) { |
| + const char kChromeRenderer[] = "renderer"; |
|
Ben Goodger (Google)
2015/11/24 06:42:40
maybe put all of this in a helper function in cont
Fady Samuel
2015/11/24 13:32:06
Done.
|
| + std::string remote_url(connection->GetRemoteApplicationURL()); |
| + size_t pos = remote_url.find_last_of(kChromeRenderer); |
| + std::string val(remote_url.substr(pos + 1, remote_url.size() - pos - 2)); |
| + int render_process_id = 0; |
| + if (!base::StringToInt(val, &render_process_id) || !render_process_id) |
| + return; |
| + new RenderWidgetViewFactoryImpl(render_process_id, request.Pass()); |
| +} |
| + |
| +} // namespace content |