| 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..98c9b7a4387a10ca8de4db3dbd6188ecee08ed5c
|
| --- /dev/null
|
| +++ b/content/browser/render_widget_view_service_listener.cc
|
| @@ -0,0 +1,82 @@
|
| +// 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) {
|
| + fprintf(stderr, ">>>%s routing_id: %d\n", __PRETTY_FUNCTION__, routing_id);
|
| + RenderViewHostImpl* rvh =
|
| + RenderViewHostImpl::FromID(render_process_id_, routing_id);
|
| + RenderWidgetHostImpl* rwh =
|
| + rvh ? rvh->GetWidget() : nullptr;
|
| + RenderWidgetHostViewMus* rwhvmus = rwh ?
|
| + static_cast<RenderWidgetHostViewMus*>(rwh->GetView()): nullptr;
|
| + fprintf(stderr, ">>>%s rwh: %p rwhvmus: %p\n", __PRETTY_FUNCTION__, rwh, rwhvmus);
|
| + 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() {
|
| + delete this;
|
| +}
|
| +
|
| +void RenderWidgetViewServiceListener::Create(
|
| + mojo::ApplicationConnection* connection,
|
| + mojo::InterfaceRequest<mojom::RenderWidgetViewFactory> request) {
|
| + const char kChromeRenderer[] = "renderer";
|
| + std::string remote_url(connection->GetRemoteApplicationURL());
|
| + size_t pos = remote_url.find_last_of(kChromeRenderer);
|
| + fprintf(stderr, "[before] >>>%s \n", __PRETTY_FUNCTION__);
|
| + 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;
|
| + fprintf(stderr, ">>>%s remote URL: %d\n", __PRETTY_FUNCTION__,
|
| + render_process_id);
|
| + new RenderWidgetViewFactoryImpl(render_process_id, request.Pass());
|
| +}
|
| +
|
| +} // namespace content
|
|
|