Replace ApplicationImpl::CreateApplicationConnector() with a standalone helper function.
I want to hollow out ApplicationImpl.
Admittedly, even the standalone helper function adds little value over
just doing shell->CreateApplicationConnector(GetProxy(&foo)), though
it's nice in certain places to have a return value. (On the other hand,
you'll always get an InterfaceHandle, whereas you may have wanted an
InterfacePtr or SynchronousInterfacePtr.)
R=vardhan@google.com
Review URL: https://codereview.chromium.org/1983263002 .
diff --git a/examples/ui/noodles/noodles_view.cc b/examples/ui/noodles/noodles_view.cc
index 161794e..6c790a6 100644
--- a/examples/ui/noodles/noodles_view.cc
+++ b/examples/ui/noodles/noodles_view.cc
@@ -14,6 +14,7 @@
#include "base/message_loop/message_loop.h"
#include "examples/ui/noodles/frame.h"
#include "examples/ui/noodles/rasterizer.h"
+#include "mojo/public/cpp/application/connect.h"
#include "third_party/skia/include/core/SkCanvas.h"
#include "third_party/skia/include/core/SkColor.h"
#include "third_party/skia/include/core/SkPath.h"
@@ -65,10 +66,11 @@
rasterizer_task_runner_->PostTask(
FROM_HERE,
- base::Bind(&RasterizerDelegate::CreateRasterizer,
- base::Unretained(rasterizer_delegate_.get()),
- base::Passed(app_impl->CreateApplicationConnector()),
- base::Passed(TakeScene().PassInterfaceHandle())));
+ base::Bind(
+ &RasterizerDelegate::CreateRasterizer,
+ base::Unretained(rasterizer_delegate_.get()),
+ base::Passed(mojo::CreateApplicationConnector(app_impl->shell())),
+ base::Passed(TakeScene().PassInterfaceHandle())));
}
NoodlesView::~NoodlesView() {
diff --git a/mojo/public/cpp/application/BUILD.gn b/mojo/public/cpp/application/BUILD.gn
index b2d0620..543207f 100644
--- a/mojo/public/cpp/application/BUILD.gn
+++ b/mojo/public/cpp/application/BUILD.gn
@@ -13,6 +13,7 @@
"connection_context.h",
"lib/application_delegate.cc",
"lib/application_impl.cc",
+ "lib/connect.cc",
"lib/service_provider_impl.cc",
"service_connector.h",
"service_provider_impl.h",
diff --git a/mojo/public/cpp/application/application_impl.h b/mojo/public/cpp/application/application_impl.h
index dd613f1..68dc565 100644
--- a/mojo/public/cpp/application/application_impl.h
+++ b/mojo/public/cpp/application/application_impl.h
@@ -12,7 +12,6 @@
#include "mojo/public/cpp/application/application_delegate.h"
#include "mojo/public/cpp/system/macros.h"
#include "mojo/public/interfaces/application/application.mojom.h"
-#include "mojo/public/interfaces/application/application_connector.mojom.h"
#include "mojo/public/interfaces/application/shell.mojom.h"
namespace mojo {
@@ -55,12 +54,6 @@
const std::vector<std::string>& args() const { return args_; }
bool HasArg(const std::string& arg) const;
- // Creates a new |ApplicationConnector|. The result can be bound to an
- // |ApplicationConnectorPtr| and used to connect to other applications. (It
- // returns an |InterfaceHandle| instead of an |InterfacePtr| to facilitate
- // passing it to another thread.)
- InterfaceHandle<ApplicationConnector> CreateApplicationConnector();
-
// Blocks until the |Application| is initialized (i.e., |Initialize()| is
// received), if it is not already.
void WaitForInitialize();
@@ -84,7 +77,7 @@
private:
std::vector<std::unique_ptr<ServiceProviderImpl>> service_provider_impls_;
ApplicationDelegate* delegate_;
- Binding<Application> binding_;
+ Binding<Application> application_binding_;
ShellPtr shell_;
std::string url_;
std::vector<std::string> args_;
diff --git a/mojo/public/cpp/application/application_test_base.h b/mojo/public/cpp/application/application_test_base.h
index 10763be..eb98b85 100644
--- a/mojo/public/cpp/application/application_test_base.h
+++ b/mojo/public/cpp/application/application_test_base.h
@@ -32,6 +32,8 @@
~ApplicationTestBase() override;
protected:
+ // TODO(vtl): Probably should get rid of this. There's really not much reason
+ // to have an |ApplicationImpl|.
ApplicationImpl* application_impl() { return application_impl_; }
// Get the ApplicationDelegate for the application to be tested.
diff --git a/mojo/public/cpp/application/connect.h b/mojo/public/cpp/application/connect.h
index e9c0793..946ca7d 100644
--- a/mojo/public/cpp/application/connect.h
+++ b/mojo/public/cpp/application/connect.h
@@ -7,6 +7,7 @@
#ifndef MOJO_PUBLIC_CPP_APPLICATION_CONNECT_H_
#define MOJO_PUBLIC_CPP_APPLICATION_CONNECT_H_
+#include "mojo/public/cpp/bindings/interface_handle.h"
#include "mojo/public/cpp/bindings/interface_request.h"
#include "mojo/public/interfaces/application/application_connector.mojom.h"
#include "mojo/public/interfaces/application/service_provider.mojom.h"
@@ -58,6 +59,10 @@
ConnectToService(service_provider.get(), request.Pass());
}
+// Helper for getting an |InterfaceHandle<ApplicationConnector>| (which can be
+// passed to any thread) from the shell.
+InterfaceHandle<ApplicationConnector> CreateApplicationConnector(Shell* shell);
+
} // namespace mojo
#endif // MOJO_PUBLIC_CPP_APPLICATION_CONNECT_H_
diff --git a/mojo/public/cpp/application/lib/application_impl.cc b/mojo/public/cpp/application/lib/application_impl.cc
index c87344b..42ebb8c 100644
--- a/mojo/public/cpp/application/lib/application_impl.cc
+++ b/mojo/public/cpp/application/lib/application_impl.cc
@@ -12,13 +12,12 @@
#include "mojo/public/cpp/bindings/interface_ptr.h"
#include "mojo/public/cpp/bindings/interface_request.h"
#include "mojo/public/cpp/environment/logging.h"
-#include "mojo/public/cpp/system/message_pipe.h"
namespace mojo {
ApplicationImpl::ApplicationImpl(ApplicationDelegate* delegate,
InterfaceRequest<Application> request)
- : delegate_(delegate), binding_(this, request.Pass()) {}
+ : delegate_(delegate), application_binding_(this, request.Pass()) {}
ApplicationImpl::~ApplicationImpl() {}
@@ -26,23 +25,15 @@
return std::find(args_.begin(), args_.end(), arg) != args_.end();
}
-InterfaceHandle<ApplicationConnector>
-ApplicationImpl::CreateApplicationConnector() {
- MOJO_CHECK(shell_);
- InterfaceHandle<ApplicationConnector> application_connector;
- shell_->CreateApplicationConnector(GetProxy(&application_connector));
- return application_connector;
-}
-
void ApplicationImpl::WaitForInitialize() {
if (!shell_)
- binding_.WaitForIncomingMethodCall();
+ application_binding_.WaitForIncomingMethodCall();
}
void ApplicationImpl::UnbindConnections(
InterfaceRequest<Application>* application_request,
ShellPtr* shell) {
- *application_request = binding_.Unbind();
+ *application_request = application_binding_.Unbind();
shell->Bind(shell_.PassInterfaceHandle());
}
diff --git a/mojo/public/cpp/application/lib/application_test_base.cc b/mojo/public/cpp/application/lib/application_test_base.cc
index 42519a2..f316daa 100644
--- a/mojo/public/cpp/application/lib/application_test_base.cc
+++ b/mojo/public/cpp/application/lib/application_test_base.cc
@@ -16,6 +16,7 @@
namespace test {
namespace {
+
// Share the application command-line arguments with multiple application tests.
Array<String> g_args;
@@ -31,11 +32,11 @@
// calls so we can (re-)initialize new ApplicationImpls.
ShellPtr g_shell;
-void InitializeArgs(int argc, std::vector<const char*> argv) {
+void InitializeArgs(int argc, const char** argv) {
MOJO_CHECK(g_args.is_null());
- for (const char* arg : argv) {
- if (arg)
- g_args.push_back(arg);
+ for (int i = 0; i < argc; i++) {
+ MOJO_CHECK(argv[i]);
+ g_args.push_back(argv[i]);
}
}
@@ -107,8 +108,9 @@
argv[i] = args[i].get().c_str();
argv[argc] = nullptr;
- testing::InitGoogleTest(&argc, const_cast<char**>(&(argv[0])));
- InitializeArgs(argc, argv);
+ // Note: |InitGoogleTest()| will modify |argc| and |argv[...]|.
+ testing::InitGoogleTest(&argc, const_cast<char**>(&argv[0]));
+ InitializeArgs(argc, &argv[0]);
Environment::DestroyDefaultRunLoop();
}
diff --git a/mojo/public/cpp/application/lib/connect.cc b/mojo/public/cpp/application/lib/connect.cc
new file mode 100644
index 0000000..33130da
--- /dev/null
+++ b/mojo/public/cpp/application/lib/connect.cc
@@ -0,0 +1,17 @@
+// Copyright 2016 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 "mojo/public/cpp/application/connect.h"
+
+#include "mojo/public/interfaces/application/shell.mojom.h"
+
+namespace mojo {
+
+InterfaceHandle<ApplicationConnector> CreateApplicationConnector(Shell* shell) {
+ InterfaceHandle<ApplicationConnector> application_connector;
+ shell->CreateApplicationConnector(GetProxy(&application_connector));
+ return application_connector;
+}
+
+} // namespace mojo
diff --git a/mojo/ui/ganesh_view.cc b/mojo/ui/ganesh_view.cc
index 7dc9c7d..95b1170 100644
--- a/mojo/ui/ganesh_view.cc
+++ b/mojo/ui/ganesh_view.cc
@@ -5,6 +5,7 @@
#include "mojo/ui/ganesh_view.h"
#include "base/logging.h"
+#include "mojo/public/cpp/application/connect.h"
#include "mojo/skia/ganesh_texture_surface.h"
#include "third_party/skia/include/core/SkCanvas.h"
@@ -19,7 +20,7 @@
ganesh_renderer_(
new mojo::skia::GaneshContext(mojo::GLContext::CreateOffscreen(
mojo::ApplicationConnectorPtr::Create(
- app_impl->CreateApplicationConnector())
+ mojo::CreateApplicationConnector(app_impl->shell()))
.get()))) {}
GaneshView::~GaneshView() {}
diff --git a/mojo/ui/gl_renderer_apptest.cc b/mojo/ui/gl_renderer_apptest.cc
index 21b1d72..03e799b 100644
--- a/mojo/ui/gl_renderer_apptest.cc
+++ b/mojo/ui/gl_renderer_apptest.cc
@@ -8,6 +8,7 @@
#include "mojo/gpu/gl_texture.h"
#include "mojo/public/cpp/application/application_impl.h"
#include "mojo/public/cpp/application/application_test_base.h"
+#include "mojo/public/cpp/application/connect.h"
#include "mojo/services/geometry/interfaces/geometry.mojom.h"
#include "mojo/services/gfx/composition/interfaces/resources.mojom.h"
#include "mojo/ui/gl_renderer.h"
@@ -29,7 +30,7 @@
mojo::test::ApplicationTestBase::SetUp();
gl_context_ = mojo::GLContext::CreateOffscreen(
mojo::ApplicationConnectorPtr::Create(
- application_impl()->CreateApplicationConnector())
+ mojo::CreateApplicationConnector(application_impl()->shell()))
.get());
quit_message_loop_callback_ = base::Bind(
&GLRendererTest::QuitMessageLoopCallback, weak_factory_.GetWeakPtr());
diff --git a/mojo/ui/gl_view.cc b/mojo/ui/gl_view.cc
index 4ab635d..e3c80f5 100644
--- a/mojo/ui/gl_view.cc
+++ b/mojo/ui/gl_view.cc
@@ -5,6 +5,7 @@
#include "mojo/ui/gl_view.h"
#include "base/logging.h"
+#include "mojo/public/cpp/application/connect.h"
namespace mojo {
namespace ui {
@@ -15,7 +16,7 @@
: BaseView(app_impl, view_owner_request.Pass(), label),
gl_renderer_(mojo::GLContext::CreateOffscreen(
ApplicationConnectorPtr::Create(
- app_impl->CreateApplicationConnector())
+ mojo::CreateApplicationConnector(app_impl->shell()))
.get())) {}
GLView::~GLView() {}
diff --git a/shell/shell_apptest.cc b/shell/shell_apptest.cc
index 7f64883..42a5547 100644
--- a/shell/shell_apptest.cc
+++ b/shell/shell_apptest.cc
@@ -224,13 +224,15 @@
TEST_F(ShellAppTest, ApplicationConnector) {
mojo::ApplicationConnectorPtr app_connector;
- app_connector.Bind(application_impl()->CreateApplicationConnector());
+ app_connector.Bind(
+ mojo::CreateApplicationConnector(application_impl()->shell()));
TestApplicationConnector(app_connector.get());
}
TEST_F(ShellAppTest, ApplicationConnectorDuplicate) {
mojo::ApplicationConnectorPtr app_connector1;
- app_connector1.Bind(application_impl()->CreateApplicationConnector());
+ app_connector1.Bind(
+ mojo::CreateApplicationConnector(application_impl()->shell()));
{
SCOPED_TRACE("app_connector1");
TestApplicationConnector(app_connector1.get());