Convert ViewProviderApp and ContentViewerApp to implement ApplicationImplBase instead of ApplicationDelegate.
R=vardhan@google.com
Review URL: https://codereview.chromium.org/2020453003 .
diff --git a/apps/moterm/main.cc b/apps/moterm/main.cc
index abeb499..7a41df4 100644
--- a/apps/moterm/main.cc
+++ b/apps/moterm/main.cc
@@ -7,10 +7,12 @@
// application.)
#include "apps/moterm/moterm_app.h"
-#include "mojo/application/application_runner_chromium.h"
+#include "mojo/environment/scoped_chromium_init.h"
#include "mojo/public/c/system/main.h"
+#include "mojo/public/cpp/application/run_application.h"
MojoResult MojoMain(MojoHandle application_request) {
- mojo::ApplicationRunnerChromium runner(new MotermApp());
- return runner.Run(application_request);
+ mojo::ScopedChromiumInit init;
+ MotermApp moterm_app;
+ return mojo::RunApplication(application_request, &moterm_app);
}
diff --git a/apps/moterm/moterm_app.cc b/apps/moterm/moterm_app.cc
index a8a45f4..ff78b0e 100644
--- a/apps/moterm/moterm_app.cc
+++ b/apps/moterm/moterm_app.cc
@@ -15,6 +15,6 @@
const std::string& connection_url,
mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request,
mojo::InterfaceRequest<mojo::ServiceProvider> services) {
- new MotermView(mojo::CreateApplicationConnector(app_impl()->shell()),
+ new MotermView(mojo::CreateApplicationConnector(shell()),
view_owner_request.Pass(), services.Pass());
}
diff --git a/examples/moterm_example_app/moterm_example_app.cc b/examples/moterm_example_app/moterm_example_app.cc
index e1ca20e..3a4ad03 100644
--- a/examples/moterm_example_app/moterm_example_app.cc
+++ b/examples/moterm_example_app/moterm_example_app.cc
@@ -15,12 +15,11 @@
#include "base/memory/weak_ptr.h"
#include "base/strings/string_util.h"
#include "base/strings/stringprintf.h"
-#include "mojo/application/application_runner_chromium.h"
#include "mojo/common/binding_set.h"
+#include "mojo/environment/scoped_chromium_init.h"
#include "mojo/public/c/system/main.h"
-#include "mojo/public/cpp/application/application_delegate.h"
-#include "mojo/public/cpp/application/application_impl.h"
#include "mojo/public/cpp/application/connect.h"
+#include "mojo/public/cpp/application/run_application.h"
#include "mojo/public/cpp/bindings/array.h"
#include "mojo/public/cpp/bindings/strong_binding.h"
#include "mojo/public/interfaces/application/service_provider.mojom.h"
@@ -166,7 +165,7 @@
const std::string& connection_url,
mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request,
mojo::InterfaceRequest<mojo::ServiceProvider> services) override {
- new MotermExampleAppView(app_impl()->shell(), view_owner_request.Pass());
+ new MotermExampleAppView(shell(), view_owner_request.Pass());
}
private:
@@ -174,6 +173,7 @@
};
MojoResult MojoMain(MojoHandle application_request) {
- mojo::ApplicationRunnerChromium runner(new MotermExampleApp());
- return runner.Run(application_request);
+ mojo::ScopedChromiumInit init;
+ MotermExampleApp moterm_example_app;
+ return mojo::RunApplication(application_request, &moterm_example_app);
}
diff --git a/examples/shadows/main.cc b/examples/shadows/main.cc
index 74ec64d..33732aa 100644
--- a/examples/shadows/main.cc
+++ b/examples/shadows/main.cc
@@ -3,10 +3,12 @@
// found in the LICENSE file.
#include "examples/shadows/shadows_app.h"
-#include "mojo/application/application_runner_chromium.h"
+#include "mojo/environment/scoped_chromium_init.h"
#include "mojo/public/c/system/main.h"
+#include "mojo/public/cpp/application/run_application.h"
MojoResult MojoMain(MojoHandle application_request) {
- mojo::ApplicationRunnerChromium runner(new examples::ShadowsApp);
- return runner.Run(application_request);
+ mojo::ScopedChromiumInit init;
+ examples::ShadowsApp shadows_app;
+ return mojo::RunApplication(application_request, &shadows_app);
}
diff --git a/examples/shadows/shadows_app.cc b/examples/shadows/shadows_app.cc
index 41f4dfe..3f36aad 100644
--- a/examples/shadows/shadows_app.cc
+++ b/examples/shadows/shadows_app.cc
@@ -17,7 +17,7 @@
const std::string& connection_url,
mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request,
mojo::InterfaceRequest<mojo::ServiceProvider> services) {
- new ShadowsView(mojo::CreateApplicationConnector(app_impl()->shell()),
+ new ShadowsView(mojo::CreateApplicationConnector(shell()),
view_owner_request.Pass());
}
diff --git a/examples/ui/jank/jank.cc b/examples/ui/jank/jank.cc
index 7825251..742e2db 100644
--- a/examples/ui/jank/jank.cc
+++ b/examples/ui/jank/jank.cc
@@ -8,9 +8,10 @@
#include "base/bind.h"
#include "base/macros.h"
-#include "mojo/application/application_runner_chromium.h"
+#include "mojo/environment/scoped_chromium_init.h"
#include "mojo/public/c/system/main.h"
#include "mojo/public/cpp/application/connect.h"
+#include "mojo/public/cpp/application/run_application.h"
#include "mojo/ui/choreographer.h"
#include "mojo/ui/ganesh_view.h"
#include "mojo/ui/input_handler.h"
@@ -210,7 +211,7 @@
const std::string& connection_url,
mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request,
mojo::InterfaceRequest<mojo::ServiceProvider> services) override {
- new JankView(mojo::CreateApplicationConnector(app_impl()->shell()),
+ new JankView(mojo::CreateApplicationConnector(shell()),
view_owner_request.Pass());
}
@@ -221,6 +222,7 @@
} // namespace examples
MojoResult MojoMain(MojoHandle application_request) {
- mojo::ApplicationRunnerChromium runner(new examples::JankApp());
- return runner.Run(application_request);
+ mojo::ScopedChromiumInit init;
+ examples::JankApp jank_app;
+ return mojo::RunApplication(application_request, &jank_app);
}
diff --git a/examples/ui/noodles/main.cc b/examples/ui/noodles/main.cc
index 6aff78e..7427bd1 100644
--- a/examples/ui/noodles/main.cc
+++ b/examples/ui/noodles/main.cc
@@ -3,10 +3,12 @@
// found in the LICENSE file.
#include "examples/ui/noodles/noodles_app.h"
-#include "mojo/application/application_runner_chromium.h"
+#include "mojo/environment/scoped_chromium_init.h"
#include "mojo/public/c/system/main.h"
+#include "mojo/public/cpp/application/run_application.h"
MojoResult MojoMain(MojoHandle application_request) {
- mojo::ApplicationRunnerChromium runner(new examples::NoodlesApp);
- return runner.Run(application_request);
+ mojo::ScopedChromiumInit init;
+ examples::NoodlesApp noodles_app;
+ return mojo::RunApplication(application_request, &noodles_app);
}
diff --git a/examples/ui/noodles/noodles_app.cc b/examples/ui/noodles/noodles_app.cc
index 5c28d9e..1e31959 100644
--- a/examples/ui/noodles/noodles_app.cc
+++ b/examples/ui/noodles/noodles_app.cc
@@ -17,7 +17,7 @@
const std::string& connection_url,
mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request,
mojo::InterfaceRequest<mojo::ServiceProvider> services) {
- new NoodlesView(mojo::CreateApplicationConnector(app_impl()->shell()),
+ new NoodlesView(mojo::CreateApplicationConnector(shell()),
view_owner_request.Pass());
}
diff --git a/examples/ui/pdf_viewer/pdf_viewer.cc b/examples/ui/pdf_viewer/pdf_viewer.cc
index f16be50..3043c4b 100644
--- a/examples/ui/pdf_viewer/pdf_viewer.cc
+++ b/examples/ui/pdf_viewer/pdf_viewer.cc
@@ -8,14 +8,16 @@
#include "base/bind.h"
#include "base/macros.h"
#include "base/memory/scoped_ptr.h"
-#include "mojo/application/application_runner_chromium.h"
#include "mojo/data_pipe_utils/data_pipe_utils.h"
+#include "mojo/environment/scoped_chromium_init.h"
#include "mojo/public/c/system/main.h"
#include "mojo/public/cpp/application/connect.h"
+#include "mojo/public/cpp/application/run_application.h"
#include "mojo/ui/choreographer.h"
#include "mojo/ui/content_viewer_app.h"
#include "mojo/ui/ganesh_view.h"
#include "mojo/ui/input_handler.h"
+#include "mojo/ui/view_provider_app.h"
#include "third_party/pdfium/fpdfsdk/include/fpdf_ext.h"
#include "third_party/pdfium/fpdfsdk/include/fpdfview.h"
#include "third_party/skia/include/core/SkCanvas.h"
@@ -272,7 +274,7 @@
const std::string& connection_url,
mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request,
mojo::InterfaceRequest<mojo::ServiceProvider> services) override {
- new PDFDocumentView(mojo::CreateApplicationConnector(app_impl()->shell()),
+ new PDFDocumentView(mojo::CreateApplicationConnector(shell()),
view_owner_request.Pass(), pdf_document_);
}
@@ -311,6 +313,7 @@
} // namespace examples
MojoResult MojoMain(MojoHandle application_request) {
- mojo::ApplicationRunnerChromium runner(new examples::PDFContentViewerApp());
- return runner.Run(application_request);
+ mojo::ScopedChromiumInit init;
+ examples::PDFContentViewerApp pdf_content_viewer_app;
+ return mojo::RunApplication(application_request, &pdf_content_viewer_app);
}
diff --git a/examples/ui/png_viewer/png_viewer.cc b/examples/ui/png_viewer/png_viewer.cc
index 6e89523..2ad6551 100644
--- a/examples/ui/png_viewer/png_viewer.cc
+++ b/examples/ui/png_viewer/png_viewer.cc
@@ -7,12 +7,14 @@
#include "base/bind.h"
#include "base/macros.h"
#include "base/memory/scoped_ptr.h"
-#include "mojo/application/application_runner_chromium.h"
#include "mojo/data_pipe_utils/data_pipe_utils.h"
+#include "mojo/environment/scoped_chromium_init.h"
#include "mojo/public/c/system/main.h"
#include "mojo/public/cpp/application/connect.h"
+#include "mojo/public/cpp/application/run_application.h"
#include "mojo/ui/content_viewer_app.h"
#include "mojo/ui/ganesh_view.h"
+#include "mojo/ui/view_provider_app.h"
#include "third_party/skia/include/core/SkBitmap.h"
#include "third_party/skia/include/core/SkCanvas.h"
#include "third_party/skia/include/core/SkImage.h"
@@ -121,7 +123,7 @@
const std::string& connection_url,
mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request,
mojo::InterfaceRequest<mojo::ServiceProvider> services) override {
- new PNGView(mojo::CreateApplicationConnector(app_impl()->shell()),
+ new PNGView(mojo::CreateApplicationConnector(shell()),
view_owner_request.Pass(), image_);
}
@@ -161,6 +163,7 @@
} // namespace examples
MojoResult MojoMain(MojoHandle application_request) {
- mojo::ApplicationRunnerChromium runner(new examples::PNGContentViewerApp());
- return runner.Run(application_request);
+ mojo::ScopedChromiumInit init;
+ examples::PNGContentViewerApp png_content_viewer_app;
+ return mojo::RunApplication(application_request, &png_content_viewer_app);
}
diff --git a/examples/ui/shapes/main.cc b/examples/ui/shapes/main.cc
index bf4925e..1669259 100644
--- a/examples/ui/shapes/main.cc
+++ b/examples/ui/shapes/main.cc
@@ -3,10 +3,12 @@
// found in the LICENSE file.
#include "examples/ui/shapes/shapes_app.h"
-#include "mojo/application/application_runner_chromium.h"
+#include "mojo/environment/scoped_chromium_init.h"
#include "mojo/public/c/system/main.h"
+#include "mojo/public/cpp/application/run_application.h"
MojoResult MojoMain(MojoHandle application_request) {
- mojo::ApplicationRunnerChromium runner(new examples::ShapesApp);
- return runner.Run(application_request);
+ mojo::ScopedChromiumInit init;
+ examples::ShapesApp shapes_app;
+ return mojo::RunApplication(application_request, &shapes_app);
}
diff --git a/examples/ui/shapes/shapes_app.cc b/examples/ui/shapes/shapes_app.cc
index 4c50654..02ca962 100644
--- a/examples/ui/shapes/shapes_app.cc
+++ b/examples/ui/shapes/shapes_app.cc
@@ -17,7 +17,7 @@
const std::string& connection_url,
mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request,
mojo::InterfaceRequest<mojo::ServiceProvider> services) {
- new ShapesView(mojo::CreateApplicationConnector(app_impl()->shell()),
+ new ShapesView(mojo::CreateApplicationConnector(shell()),
view_owner_request.Pass());
}
diff --git a/examples/ui/spinning_cube/main.cc b/examples/ui/spinning_cube/main.cc
index fcf0bc2..6bb2ad1 100644
--- a/examples/ui/spinning_cube/main.cc
+++ b/examples/ui/spinning_cube/main.cc
@@ -3,10 +3,12 @@
// found in the LICENSE file.
#include "examples/ui/spinning_cube/spinning_cube_app.h"
-#include "mojo/application/application_runner_chromium.h"
+#include "mojo/environment/scoped_chromium_init.h"
#include "mojo/public/c/system/main.h"
+#include "mojo/public/cpp/application/run_application.h"
MojoResult MojoMain(MojoHandle application_request) {
- mojo::ApplicationRunnerChromium runner(new examples::SpinningCubeApp);
- return runner.Run(application_request);
+ mojo::ScopedChromiumInit init;
+ examples::SpinningCubeApp spinning_cube_app;
+ return mojo::RunApplication(application_request, &spinning_cube_app);
}
diff --git a/examples/ui/spinning_cube/spinning_cube_app.cc b/examples/ui/spinning_cube/spinning_cube_app.cc
index ea6f507..2908e07 100644
--- a/examples/ui/spinning_cube/spinning_cube_app.cc
+++ b/examples/ui/spinning_cube/spinning_cube_app.cc
@@ -17,7 +17,7 @@
const std::string& connection_url,
mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request,
mojo::InterfaceRequest<mojo::ServiceProvider> services) {
- new SpinningCubeView(mojo::CreateApplicationConnector(app_impl()->shell()),
+ new SpinningCubeView(mojo::CreateApplicationConnector(shell()),
view_owner_request.Pass());
}
diff --git a/examples/ui/tile/main.cc b/examples/ui/tile/main.cc
index 930aca3..458388e 100644
--- a/examples/ui/tile/main.cc
+++ b/examples/ui/tile/main.cc
@@ -3,10 +3,12 @@
// found in the LICENSE file.
#include "examples/ui/tile/tile_app.h"
-#include "mojo/application/application_runner_chromium.h"
+#include "mojo/environment/scoped_chromium_init.h"
#include "mojo/public/c/system/main.h"
+#include "mojo/public/cpp/application/run_application.h"
MojoResult MojoMain(MojoHandle application_request) {
- mojo::ApplicationRunnerChromium runner(new examples::TileApp);
- return runner.Run(application_request);
+ mojo::ScopedChromiumInit init;
+ examples::TileApp tile_app;
+ return mojo::RunApplication(application_request, &tile_app);
}
diff --git a/examples/ui/tile/tile_app.cc b/examples/ui/tile/tile_app.cc
index bdd24ae..ee6c56f 100644
--- a/examples/ui/tile/tile_app.cc
+++ b/examples/ui/tile/tile_app.cc
@@ -24,7 +24,7 @@
return;
}
- new TileView(mojo::CreateApplicationConnector(app_impl()->shell()),
+ new TileView(mojo::CreateApplicationConnector(shell()),
view_owner_request.Pass(), params);
}
diff --git a/mojo/ui/content_viewer_app.cc b/mojo/ui/content_viewer_app.cc
index 0ede5d2..21bb266 100644
--- a/mojo/ui/content_viewer_app.cc
+++ b/mojo/ui/content_viewer_app.cc
@@ -6,6 +6,8 @@
#include "base/command_line.h"
#include "base/logging.h"
+#include "mojo/public/cpp/application/service_provider_impl.h"
+#include "mojo/ui/view_provider_app.h"
namespace mojo {
namespace ui {
@@ -37,17 +39,15 @@
ContentViewerApp::~ContentViewerApp() {}
-void ContentViewerApp::Initialize(mojo::ApplicationImpl* app_impl) {
- app_impl_ = app_impl;
-
+void ContentViewerApp::OnInitialize() {
auto command_line = base::CommandLine::ForCurrentProcess();
- command_line->InitFromArgv(app_impl_->args());
+ command_line->InitFromArgv(args());
logging::LoggingSettings settings;
settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
logging::InitLogging(settings);
}
-bool ContentViewerApp::ConfigureIncomingConnection(
+bool ContentViewerApp::OnAcceptConnection(
ServiceProviderImpl* service_provider_impl) {
service_provider_impl->AddService<ContentHandler>([this](
const ConnectionContext& connection_context,
@@ -63,12 +63,13 @@
const std::string& content_handler_url,
mojo::InterfaceRequest<mojo::Application> application_request,
mojo::URLResponsePtr response) {
+ // TODO(vtl): This is usually leaky, since |*app| (the returned
+ // |ApplicationImplBase|/|ViewProviderApp| implementation) typically doesn't
+ // own itself. Probably |LoadContent()| should take the |application_request|,
+ // and not return anything. This method doesn't really appear to add anything.
ViewProviderApp* app = LoadContent(content_handler_url, response.Pass());
- if (app) {
- // TODO(vtl): This is leaky, since |ApplicationImpl| doesn't own itself.
- // (Also, who owns |*app|?)
- new mojo::ApplicationImpl(app, application_request.Pass());
- }
+ if (app)
+ app->Bind(application_request.Pass());
}
} // namespace ui
diff --git a/mojo/ui/content_viewer_app.h b/mojo/ui/content_viewer_app.h
index e09a66a..c28d2d9 100644
--- a/mojo/ui/content_viewer_app.h
+++ b/mojo/ui/content_viewer_app.h
@@ -6,12 +6,18 @@
#define MOJO_UI_CONTENT_VIEWER_APP_H_
#include "mojo/common/strong_binding_set.h"
+#include "mojo/public/cpp/application/application_impl_base.h"
+#include "mojo/public/cpp/system/macros.h"
#include "mojo/services/content_handler/interfaces/content_handler.mojom.h"
-#include "mojo/ui/view_provider_app.h"
namespace mojo {
+
+class ServiceProviderImpl;
+
namespace ui {
+class ViewProviderApp;
+
// A simple ContentHandler application implementation for rendering
// content as Views. Subclasses must provide a function to create
// the view provider application on demand.
@@ -19,17 +25,14 @@
// TODO(jeffbrown): Support creating the view provider application in a
// separate thread if desired (often not the case). This is one reason
// we are not using the ContentHandlerFactory here.
-class ContentViewerApp : public ApplicationDelegate {
+class ContentViewerApp : public ApplicationImplBase {
public:
ContentViewerApp();
~ContentViewerApp() override;
- ApplicationImpl* app_impl() { return app_impl_; }
-
- // |ApplicationDelegate|:
- void Initialize(ApplicationImpl* app) override;
- bool ConfigureIncomingConnection(
- ServiceProviderImpl* service_provider_impl) override;
+ // |ApplicationImplBase|:
+ void OnInitialize() override;
+ bool OnAcceptConnection(ServiceProviderImpl* service_provider_impl) override;
// Called to create the view provider application to view the content.
//
@@ -42,8 +45,12 @@
// request.
// The |response| carries the data retrieved by the content handler.
//
- // Returns the view provider application delegate to view the content,
- // or nullptr if the content could not be loaded.
+ // Returns the view provider application to view the content, or nullptr if
+ // the content could not be loaded.
+ //
+ // TODO(vtl): This interface is a bit broken. (What's the ownership of the
+ // returned ViewProviderApp implementation?) See my TODO in the implementation
+ // of StartViewer().
virtual ViewProviderApp* LoadContent(const std::string& content_handler_url,
URLResponsePtr response) = 0;
@@ -54,7 +61,6 @@
InterfaceRequest<Application> application_request,
URLResponsePtr response);
- ApplicationImpl* app_impl_ = nullptr;
StrongBindingSet<ContentHandler> bindings_;
MOJO_DISALLOW_COPY_AND_ASSIGN(ContentViewerApp);
diff --git a/mojo/ui/view_provider_app.cc b/mojo/ui/view_provider_app.cc
index a8e4b85..2db4765 100644
--- a/mojo/ui/view_provider_app.cc
+++ b/mojo/ui/view_provider_app.cc
@@ -6,6 +6,7 @@
#include "base/command_line.h"
#include "base/logging.h"
+#include "mojo/public/cpp/application/service_provider_impl.h"
namespace mojo {
namespace ui {
@@ -37,17 +38,15 @@
ViewProviderApp::~ViewProviderApp() {}
-void ViewProviderApp::Initialize(mojo::ApplicationImpl* app_impl) {
- app_impl_ = app_impl;
-
+void ViewProviderApp::OnInitialize() {
auto command_line = base::CommandLine::ForCurrentProcess();
- command_line->InitFromArgv(app_impl_->args());
+ command_line->InitFromArgv(args());
logging::LoggingSettings settings;
settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
logging::InitLogging(settings);
}
-bool ViewProviderApp::ConfigureIncomingConnection(
+bool ViewProviderApp::OnAcceptConnection(
ServiceProviderImpl* service_provider_impl) {
service_provider_impl->AddService<ViewProvider>(
[this](const ConnectionContext& connection_context,
diff --git a/mojo/ui/view_provider_app.h b/mojo/ui/view_provider_app.h
index 9c85733..a0b81b4 100644
--- a/mojo/ui/view_provider_app.h
+++ b/mojo/ui/view_provider_app.h
@@ -8,14 +8,14 @@
#include <string>
#include "mojo/common/strong_binding_set.h"
-#include "mojo/public/c/system/main.h"
-#include "mojo/public/cpp/application/application_delegate.h"
-#include "mojo/public/cpp/application/application_impl.h"
-#include "mojo/public/cpp/application/service_provider_impl.h"
+#include "mojo/public/cpp/application/application_impl_base.h"
#include "mojo/public/cpp/system/macros.h"
#include "mojo/services/ui/views/interfaces/view_provider.mojom.h"
namespace mojo {
+
+class ServiceProviderImpl;
+
namespace ui {
// Abstract implementation of a simple application that offers a ViewProvider.
@@ -23,17 +23,14 @@
//
// It is not necessary to use this class to implement all ViewProviders.
// This class is merely intended to make the simple apps easier to write.
-class ViewProviderApp : public ApplicationDelegate {
+class ViewProviderApp : public ApplicationImplBase {
public:
ViewProviderApp();
~ViewProviderApp() override;
- ApplicationImpl* app_impl() { return app_impl_; }
-
- // |ApplicationDelegate|:
- void Initialize(ApplicationImpl* app) override;
- bool ConfigureIncomingConnection(
- ServiceProviderImpl* service_provider_impl) override;
+ // |ApplicationImplBase|:
+ void OnInitialize() override;
+ bool OnAcceptConnection(ServiceProviderImpl* service_provider_impl) override;
// Called by the ViewProvider to create a view.
// This method may be called multiple times in the case where the
@@ -58,7 +55,6 @@
InterfaceRequest<ViewOwner> view_owner_request,
InterfaceRequest<ServiceProvider> services);
- ApplicationImpl* app_impl_ = nullptr;
StrongBindingSet<ViewProvider> bindings_;
MOJO_DISALLOW_COPY_AND_ASSIGN(ViewProviderApp);