Make BaseView et al. take an ApplicationConnector instead of an ApplicationImpl. In general, it's a bit of a layering violation to pass around ApplicationImpl*'s, and it also poses some lifetime issues. (Using ApplicationConnectors resolves any potential lifetime issues.) Mostly though, I want to rework the way ApplicationImpl, etc. work, and this gets in the way. R=jeffbrown@google.com Review URL: https://codereview.chromium.org/1991853003 .
diff --git a/apps/moterm/moterm_app.cc b/apps/moterm/moterm_app.cc index ab8abfa..3eabe88 100644 --- a/apps/moterm/moterm_app.cc +++ b/apps/moterm/moterm_app.cc
@@ -5,6 +5,7 @@ #include "apps/moterm/moterm_app.h" #include "apps/moterm/moterm_view.h" +#include "mojo/public/cpp/application/connect.h" MotermApp::MotermApp() {} @@ -15,5 +16,6 @@ mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request, mojo::InterfaceRequest<mojo::ServiceProvider> services, mojo::InterfaceHandle<mojo::ServiceProvider> exposed_services) { - new MotermView(app_impl(), view_owner_request.Pass(), services.Pass()); + new MotermView(mojo::CreateApplicationConnector(app_impl()->shell()), + view_owner_request.Pass(), services.Pass()); }
diff --git a/apps/moterm/moterm_view.cc b/apps/moterm/moterm_view.cc index e9f942f..43cb2fc 100644 --- a/apps/moterm/moterm_view.cc +++ b/apps/moterm/moterm_view.cc
@@ -38,10 +38,10 @@ constexpr uint32_t kRootNodeId = mojo::gfx::composition::kSceneRootNodeId; MotermView::MotermView( - mojo::ApplicationImpl* app_impl, + mojo::InterfaceHandle<mojo::ApplicationConnector> app_connector, mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request, mojo::InterfaceRequest<mojo::ServiceProvider> service_provider_request) - : GaneshView(app_impl, view_owner_request.Pass(), "Moterm"), + : GaneshView(app_connector.Pass(), view_owner_request.Pass(), "Moterm"), choreographer_(scene(), this), input_handler_(GetViewServiceProvider(), this), model_(MotermModel::Size(240, 160), MotermModel::Size(24, 80), this),
diff --git a/apps/moterm/moterm_view.h b/apps/moterm/moterm_view.h index 3595c4e..a98f29d 100644 --- a/apps/moterm/moterm_view.h +++ b/apps/moterm/moterm_view.h
@@ -32,7 +32,7 @@ public mojo::terminal::Terminal { public: MotermView( - mojo::ApplicationImpl* app_impl, + mojo::InterfaceHandle<mojo::ApplicationConnector> app_connector, mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request, mojo::InterfaceRequest<mojo::ServiceProvider> service_provider_request); ~MotermView() override;
diff --git a/examples/shadows/shadows_app.cc b/examples/shadows/shadows_app.cc index fd6279a..207476b 100644 --- a/examples/shadows/shadows_app.cc +++ b/examples/shadows/shadows_app.cc
@@ -5,6 +5,7 @@ #include "examples/shadows/shadows_app.h" #include "examples/shadows/shadows_view.h" +#include "mojo/public/cpp/application/connect.h" namespace examples { @@ -17,7 +18,8 @@ mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request, mojo::InterfaceRequest<mojo::ServiceProvider> services, mojo::InterfaceHandle<mojo::ServiceProvider> exposed_services) { - new ShadowsView(app_impl(), view_owner_request.Pass()); + new ShadowsView(mojo::CreateApplicationConnector(app_impl()->shell()), + view_owner_request.Pass()); } } // namespace examples
diff --git a/examples/shadows/shadows_view.cc b/examples/shadows/shadows_view.cc index 86a3f75..a3d5a1a 100644 --- a/examples/shadows/shadows_view.cc +++ b/examples/shadows/shadows_view.cc
@@ -19,9 +19,9 @@ } // namespace ShadowsView::ShadowsView( - mojo::ApplicationImpl* app_impl, + mojo::InterfaceHandle<mojo::ApplicationConnector> app_connector, mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request) - : GLView(app_impl, view_owner_request.Pass(), "Shadows"), + : GLView(app_connector.Pass(), view_owner_request.Pass(), "Shadows"), choreographer_(scene(), this) { mojo::GLContext::Scope gl_scope(gl_context()); renderer_.reset(new ShadowsRenderer());
diff --git a/examples/shadows/shadows_view.h b/examples/shadows/shadows_view.h index 893dfad..e5e49a0 100644 --- a/examples/shadows/shadows_view.h +++ b/examples/shadows/shadows_view.h
@@ -16,7 +16,7 @@ class ShadowsView : public mojo::ui::GLView, public mojo::ui::ChoreographerDelegate { public: - ShadowsView(mojo::ApplicationImpl* app_impl, + ShadowsView(mojo::InterfaceHandle<mojo::ApplicationConnector> app_connector, mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request); ~ShadowsView() override;
diff --git a/examples/ui/jank/jank.cc b/examples/ui/jank/jank.cc index c3efb63..aedb12e 100644 --- a/examples/ui/jank/jank.cc +++ b/examples/ui/jank/jank.cc
@@ -10,6 +10,7 @@ #include "base/macros.h" #include "mojo/application/application_runner_chromium.h" #include "mojo/public/c/system/main.h" +#include "mojo/public/cpp/application/connect.h" #include "mojo/ui/choreographer.h" #include "mojo/ui/ganesh_view.h" #include "mojo/ui/input_handler.h" @@ -53,9 +54,9 @@ public mojo::ui::ChoreographerDelegate, public mojo::ui::InputListener { public: - JankView(mojo::ApplicationImpl* app_impl, + JankView(mojo::InterfaceHandle<mojo::ApplicationConnector> app_connector, mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request) - : GaneshView(app_impl, view_owner_request.Pass(), "Jank"), + : GaneshView(app_connector.Pass(), view_owner_request.Pass(), "Jank"), choreographer_(scene(), this), input_handler_(GetViewServiceProvider(), this), typeface_(skia::AdoptRef(SkTypeface::CreateFromStream( @@ -210,7 +211,8 @@ mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request, mojo::InterfaceRequest<mojo::ServiceProvider> services, mojo::InterfaceHandle<mojo::ServiceProvider> exposed_services) override { - new JankView(app_impl(), view_owner_request.Pass()); + new JankView(mojo::CreateApplicationConnector(app_impl()->shell()), + view_owner_request.Pass()); } private:
diff --git a/examples/ui/noodles/noodles_app.cc b/examples/ui/noodles/noodles_app.cc index c790822..1b4034a 100644 --- a/examples/ui/noodles/noodles_app.cc +++ b/examples/ui/noodles/noodles_app.cc
@@ -5,6 +5,7 @@ #include "examples/ui/noodles/noodles_app.h" #include "examples/ui/noodles/noodles_view.h" +#include "mojo/public/cpp/application/connect.h" namespace examples { @@ -17,7 +18,8 @@ mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request, mojo::InterfaceRequest<mojo::ServiceProvider> services, mojo::InterfaceHandle<mojo::ServiceProvider> exposed_services) { - new NoodlesView(app_impl(), view_owner_request.Pass()); + new NoodlesView(mojo::CreateApplicationConnector(app_impl()->shell()), + view_owner_request.Pass()); } } // namespace examples
diff --git a/examples/ui/noodles/noodles_view.cc b/examples/ui/noodles/noodles_view.cc index 6c790a6..eec3045 100644 --- a/examples/ui/noodles/noodles_view.cc +++ b/examples/ui/noodles/noodles_view.cc
@@ -50,9 +50,9 @@ } // namespace NoodlesView::NoodlesView( - mojo::ApplicationImpl* app_impl, + mojo::InterfaceHandle<mojo::ApplicationConnector> app_connector, mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request) - : BaseView(app_impl, view_owner_request.Pass(), "Noodles"), + : BaseView(app_connector.Pass(), view_owner_request.Pass(), "Noodles"), choreographer_(scene(), this), frame_queue_(std::make_shared<FrameQueue>()), rasterizer_delegate_( @@ -65,12 +65,11 @@ rasterizer_task_runner_ = rasterizer_thread_->message_loop()->task_runner(); rasterizer_task_runner_->PostTask( - FROM_HERE, - base::Bind( - &RasterizerDelegate::CreateRasterizer, - base::Unretained(rasterizer_delegate_.get()), - base::Passed(mojo::CreateApplicationConnector(app_impl->shell())), - base::Passed(TakeScene().PassInterfaceHandle()))); + FROM_HERE, base::Bind(&RasterizerDelegate::CreateRasterizer, + base::Unretained(rasterizer_delegate_.get()), + base::Passed(mojo::DuplicateApplicationConnector( + BaseView::app_connector())), + base::Passed(TakeScene().PassInterfaceHandle()))); } NoodlesView::~NoodlesView() {
diff --git a/examples/ui/noodles/noodles_view.h b/examples/ui/noodles/noodles_view.h index 8c3470c..c7d1a25 100644 --- a/examples/ui/noodles/noodles_view.h +++ b/examples/ui/noodles/noodles_view.h
@@ -27,7 +27,7 @@ class NoodlesView : public mojo::ui::BaseView, public mojo::ui::ChoreographerDelegate { public: - NoodlesView(mojo::ApplicationImpl* app_impl, + NoodlesView(mojo::InterfaceHandle<mojo::ApplicationConnector> app_connector, mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request); ~NoodlesView() override;
diff --git a/examples/ui/pdf_viewer/pdf_viewer.cc b/examples/ui/pdf_viewer/pdf_viewer.cc index 8fd3441..2209ba8 100644 --- a/examples/ui/pdf_viewer/pdf_viewer.cc +++ b/examples/ui/pdf_viewer/pdf_viewer.cc
@@ -11,6 +11,7 @@ #include "mojo/application/application_runner_chromium.h" #include "mojo/data_pipe_utils/data_pipe_utils.h" #include "mojo/public/c/system/main.h" +#include "mojo/public/cpp/application/connect.h" #include "mojo/ui/choreographer.h" #include "mojo/ui/content_viewer_app.h" #include "mojo/ui/ganesh_view.h" @@ -116,10 +117,12 @@ public mojo::ui::InputListener { public: PDFDocumentView( - mojo::ApplicationImpl* app_impl, + mojo::InterfaceHandle<mojo::ApplicationConnector> app_connector, mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request, const std::shared_ptr<PDFDocument>& pdf_document) - : GaneshView(app_impl, view_owner_request.Pass(), "PDFDocumentViewer"), + : GaneshView(app_connector.Pass(), + view_owner_request.Pass(), + "PDFDocumentViewer"), pdf_document_(pdf_document), choreographer_(scene(), this), input_handler_(GetViewServiceProvider(), this) { @@ -271,7 +274,8 @@ mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request, mojo::InterfaceRequest<mojo::ServiceProvider> services, mojo::InterfaceHandle<mojo::ServiceProvider> exposed_services) override { - new PDFDocumentView(app_impl(), view_owner_request.Pass(), pdf_document_); + new PDFDocumentView(mojo::CreateApplicationConnector(app_impl()->shell()), + view_owner_request.Pass(), pdf_document_); } private:
diff --git a/examples/ui/png_viewer/png_viewer.cc b/examples/ui/png_viewer/png_viewer.cc index fc7589d..bec7677 100644 --- a/examples/ui/png_viewer/png_viewer.cc +++ b/examples/ui/png_viewer/png_viewer.cc
@@ -10,6 +10,7 @@ #include "mojo/application/application_runner_chromium.h" #include "mojo/data_pipe_utils/data_pipe_utils.h" #include "mojo/public/c/system/main.h" +#include "mojo/public/cpp/application/connect.h" #include "mojo/ui/content_viewer_app.h" #include "mojo/ui/ganesh_view.h" #include "third_party/skia/include/core/SkBitmap.h" @@ -27,10 +28,12 @@ class PNGView : public mojo::ui::GaneshView { public: - PNGView(mojo::ApplicationImpl* app_impl, + PNGView(mojo::InterfaceHandle<mojo::ApplicationConnector> app_connector, mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request, const skia::RefPtr<SkImage>& image) - : GaneshView(app_impl, view_owner_request.Pass(), "PNGViewer"), + : GaneshView(app_connector.Pass(), + view_owner_request.Pass(), + "PNGViewer"), image_(image) { DCHECK(image_); } @@ -119,7 +122,8 @@ mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request, mojo::InterfaceRequest<mojo::ServiceProvider> services, mojo::InterfaceHandle<mojo::ServiceProvider> exposed_services) override { - new PNGView(app_impl(), view_owner_request.Pass(), image_); + new PNGView(mojo::CreateApplicationConnector(app_impl()->shell()), + view_owner_request.Pass(), image_); } private:
diff --git a/examples/ui/shapes/shapes_app.cc b/examples/ui/shapes/shapes_app.cc index 84643a0..5d0f0c1 100644 --- a/examples/ui/shapes/shapes_app.cc +++ b/examples/ui/shapes/shapes_app.cc
@@ -5,6 +5,7 @@ #include "examples/ui/shapes/shapes_app.h" #include "examples/ui/shapes/shapes_view.h" +#include "mojo/public/cpp/application/connect.h" namespace examples { @@ -17,7 +18,8 @@ mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request, mojo::InterfaceRequest<mojo::ServiceProvider> services, mojo::InterfaceHandle<mojo::ServiceProvider> exposed_services) { - new ShapesView(app_impl(), view_owner_request.Pass()); + new ShapesView(mojo::CreateApplicationConnector(app_impl()->shell()), + view_owner_request.Pass()); } } // namespace examples
diff --git a/examples/ui/shapes/shapes_view.cc b/examples/ui/shapes/shapes_view.cc index 07611aa..721c2a0 100644 --- a/examples/ui/shapes/shapes_view.cc +++ b/examples/ui/shapes/shapes_view.cc
@@ -18,9 +18,9 @@ } // namespace ShapesView::ShapesView( - mojo::ApplicationImpl* app_impl, + mojo::InterfaceHandle<mojo::ApplicationConnector> app_connector, mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request) - : GaneshView(app_impl, view_owner_request.Pass(), "Shapes") {} + : GaneshView(app_connector.Pass(), view_owner_request.Pass(), "Shapes") {} ShapesView::~ShapesView() {}
diff --git a/examples/ui/shapes/shapes_view.h b/examples/ui/shapes/shapes_view.h index bce122f..a4ad165 100644 --- a/examples/ui/shapes/shapes_view.h +++ b/examples/ui/shapes/shapes_view.h
@@ -13,7 +13,7 @@ class ShapesView : public mojo::ui::GaneshView { public: - ShapesView(mojo::ApplicationImpl* app_impl, + ShapesView(mojo::InterfaceHandle<mojo::ApplicationConnector> app_connector, mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request); ~ShapesView() override;
diff --git a/examples/ui/spinning_cube/spinning_cube_app.cc b/examples/ui/spinning_cube/spinning_cube_app.cc index 2fbe9d4..6159641 100644 --- a/examples/ui/spinning_cube/spinning_cube_app.cc +++ b/examples/ui/spinning_cube/spinning_cube_app.cc
@@ -5,6 +5,7 @@ #include "examples/ui/spinning_cube/spinning_cube_app.h" #include "examples/ui/spinning_cube/spinning_cube_view.h" +#include "mojo/public/cpp/application/connect.h" namespace examples { @@ -17,7 +18,8 @@ mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request, mojo::InterfaceRequest<mojo::ServiceProvider> services, mojo::InterfaceHandle<mojo::ServiceProvider> exposed_services) { - new SpinningCubeView(app_impl(), view_owner_request.Pass()); + new SpinningCubeView(mojo::CreateApplicationConnector(app_impl()->shell()), + view_owner_request.Pass()); } } // namespace examples
diff --git a/examples/ui/spinning_cube/spinning_cube_view.cc b/examples/ui/spinning_cube/spinning_cube_view.cc index fab02ec..9386b88 100644 --- a/examples/ui/spinning_cube/spinning_cube_view.cc +++ b/examples/ui/spinning_cube/spinning_cube_view.cc
@@ -54,9 +54,9 @@ } // namespace SpinningCubeView::SpinningCubeView( - mojo::ApplicationImpl* app_impl, + mojo::InterfaceHandle<mojo::ApplicationConnector> app_connector, mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request) - : GLView(app_impl, view_owner_request.Pass(), "SpinningCube"), + : GLView(app_connector.Pass(), view_owner_request.Pass(), "SpinningCube"), choreographer_(scene(), this), input_handler_(GetViewServiceProvider(), this), weak_ptr_factory_(this) {
diff --git a/examples/ui/spinning_cube/spinning_cube_view.h b/examples/ui/spinning_cube/spinning_cube_view.h index 5de87e5..35b0f24 100644 --- a/examples/ui/spinning_cube/spinning_cube_view.h +++ b/examples/ui/spinning_cube/spinning_cube_view.h
@@ -19,7 +19,7 @@ public mojo::ui::InputListener { public: SpinningCubeView( - mojo::ApplicationImpl* app_impl, + mojo::InterfaceHandle<mojo::ApplicationConnector> app_connector, mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request); ~SpinningCubeView() override;
diff --git a/examples/ui/tile/tile_app.cc b/examples/ui/tile/tile_app.cc index 31a721e..2b39309 100644 --- a/examples/ui/tile/tile_app.cc +++ b/examples/ui/tile/tile_app.cc
@@ -5,6 +5,7 @@ #include "base/strings/string_split.h" #include "examples/ui/tile/tile_app.h" #include "examples/ui/tile/tile_view.h" +#include "mojo/public/cpp/application/connect.h" #include "url/url_parse.h" namespace examples { @@ -24,7 +25,8 @@ return; } - new TileView(app_impl(), view_owner_request.Pass(), params); + new TileView(mojo::CreateApplicationConnector(app_impl()->shell()), + view_owner_request.Pass(), params); } bool TileApp::ParseParams(const std::string& connection_url,
diff --git a/examples/ui/tile/tile_view.cc b/examples/ui/tile/tile_view.cc index 4a69986..b09815e 100644 --- a/examples/ui/tile/tile_view.cc +++ b/examples/ui/tile/tile_view.cc
@@ -27,10 +27,11 @@ TileParams::~TileParams() {} TileView::TileView( - mojo::ApplicationImpl* app_impl, + mojo::InterfaceHandle<mojo::ApplicationConnector> app_connector, mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request, const TileParams& params) - : BaseView(app_impl, view_owner_request.Pass(), "Tile"), params_(params) { + : BaseView(app_connector.Pass(), view_owner_request.Pass(), "Tile"), + params_(params) { ConnectViews(); } @@ -41,7 +42,7 @@ for (const auto& url : params_.view_urls) { // Start connecting to the view provider. mojo::ui::ViewProviderPtr provider; - mojo::ConnectToService(app_impl()->shell(), url, mojo::GetProxy(&provider)); + mojo::ConnectToService(app_connector(), url, mojo::GetProxy(&provider)); LOG(INFO) << "Connecting to view: child_key=" << child_key << ", url=" << url;
diff --git a/examples/ui/tile/tile_view.h b/examples/ui/tile/tile_view.h index 3ea7bbd..6ee3193 100644 --- a/examples/ui/tile/tile_view.h +++ b/examples/ui/tile/tile_view.h
@@ -42,7 +42,7 @@ class TileView : public mojo::ui::BaseView { public: - TileView(mojo::ApplicationImpl* app_impl_, + TileView(mojo::InterfaceHandle<mojo::ApplicationConnector> app_connector, mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request, const TileParams& tile_params);
diff --git a/mojo/public/cpp/application/connect.h b/mojo/public/cpp/application/connect.h index 946ca7d..3b3fd9c 100644 --- a/mojo/public/cpp/application/connect.h +++ b/mojo/public/cpp/application/connect.h
@@ -63,6 +63,12 @@ // passed to any thread) from the shell. InterfaceHandle<ApplicationConnector> CreateApplicationConnector(Shell* shell); +// Helper for "duplicating" a |ApplicationConnector| (typically, from an +// |ApplicationConnectorPtr|, getting another independent +// |InterfaceHandle<ApplicationConnector>|). +InterfaceHandle<ApplicationConnector> DuplicateApplicationConnector( + ApplicationConnector* application_connector); + } // namespace mojo #endif // MOJO_PUBLIC_CPP_APPLICATION_CONNECT_H_
diff --git a/mojo/public/cpp/application/lib/connect.cc b/mojo/public/cpp/application/lib/connect.cc index 33130da..f6957c3 100644 --- a/mojo/public/cpp/application/lib/connect.cc +++ b/mojo/public/cpp/application/lib/connect.cc
@@ -14,4 +14,11 @@ return application_connector; } +InterfaceHandle<ApplicationConnector> DuplicateApplicationConnector( + ApplicationConnector* application_connector) { + InterfaceHandle<ApplicationConnector> new_application_connector; + application_connector->Duplicate(GetProxy(&new_application_connector)); + return new_application_connector; +} + } // namespace mojo
diff --git a/mojo/ui/base_view.cc b/mojo/ui/base_view.cc index 68611d7..124425f 100644 --- a/mojo/ui/base_view.cc +++ b/mojo/ui/base_view.cc
@@ -10,55 +10,52 @@ namespace mojo { namespace ui { -BaseView::BaseView( - mojo::ApplicationImpl* app_impl, - mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request, - const std::string& label) - : app_impl_(app_impl), +BaseView::BaseView(InterfaceHandle<ApplicationConnector> app_connector, + InterfaceRequest<ViewOwner> view_owner_request, + const std::string& label) + : app_connector_(ApplicationConnectorPtr::Create(app_connector.Pass())), view_listener_binding_(this), view_container_listener_binding_(this) { - DCHECK(app_impl_); - ConnectToService(app_impl_->shell(), "mojo:view_manager_service", - mojo::GetProxy(&view_manager_)); + DCHECK(app_connector_); + ConnectToService(app_connector_.get(), "mojo:view_manager_service", + GetProxy(&view_manager_)); - mojo::ui::ViewListenerPtr view_listener; - view_listener_binding_.Bind(mojo::GetProxy(&view_listener)); - view_manager_->CreateView(mojo::GetProxy(&view_), view_owner_request.Pass(), + ViewListenerPtr view_listener; + view_listener_binding_.Bind(GetProxy(&view_listener)); + view_manager_->CreateView(GetProxy(&view_), view_owner_request.Pass(), view_listener.Pass(), label); - view_->CreateScene(mojo::GetProxy(&scene_)); + view_->CreateScene(GetProxy(&scene_)); } BaseView::~BaseView() {} -mojo::ServiceProvider* BaseView::GetViewServiceProvider() { +ServiceProvider* BaseView::GetViewServiceProvider() { if (!view_service_provider_) - view_->GetServiceProvider(mojo::GetProxy(&view_service_provider_)); + view_->GetServiceProvider(GetProxy(&view_service_provider_)); return view_service_provider_.get(); } -mojo::ui::ViewContainer* BaseView::GetViewContainer() { +ViewContainer* BaseView::GetViewContainer() { if (!view_container_) { - view_->GetContainer(mojo::GetProxy(&view_container_)); - mojo::ui::ViewContainerListenerPtr view_container_listener; - view_container_listener_binding_.Bind( - mojo::GetProxy(&view_container_listener)); + view_->GetContainer(GetProxy(&view_container_)); + ViewContainerListenerPtr view_container_listener; + view_container_listener_binding_.Bind(GetProxy(&view_container_listener)); view_container_->SetListener(view_container_listener.Pass()); } return view_container_.get(); } void BaseView::OnPropertiesChanged(uint32_t old_scene_version, - mojo::ui::ViewPropertiesPtr old_properties) { -} + ViewPropertiesPtr old_properties) {} void BaseView::OnChildAttached(uint32_t child_key, - mojo::ui::ViewInfoPtr child_view_info) {} + ViewInfoPtr child_view_info) {} void BaseView::OnChildUnavailable(uint32_t child_key) {} void BaseView::OnPropertiesChanged( uint32_t scene_version, - mojo::ui::ViewPropertiesPtr properties, + ViewPropertiesPtr properties, const OnPropertiesChangedCallback& callback) { DCHECK(properties); DCHECK(properties->display_metrics); @@ -66,7 +63,7 @@ DCHECK(properties->view_layout->size); uint32_t old_scene_version = scene_version_; - mojo::ui::ViewPropertiesPtr old_properties = properties_.Pass(); + ViewPropertiesPtr old_properties = properties_.Pass(); scene_version_ = scene_version; properties_ = properties.Pass(); @@ -75,7 +72,7 @@ } void BaseView::OnChildAttached(uint32_t child_key, - mojo::ui::ViewInfoPtr child_view_info, + ViewInfoPtr child_view_info, const OnChildUnavailableCallback& callback) { DCHECK(child_view_info);
diff --git a/mojo/ui/base_view.h b/mojo/ui/base_view.h index e5fe71c..a8f2b69 100644 --- a/mojo/ui/base_view.h +++ b/mojo/ui/base_view.h
@@ -7,10 +7,11 @@ #include <string> -#include "mojo/public/cpp/application/application_impl.h" #include "mojo/public/cpp/bindings/binding.h" +#include "mojo/public/cpp/bindings/interface_handle.h" #include "mojo/public/cpp/bindings/strong_binding.h" #include "mojo/public/cpp/system/macros.h" +#include "mojo/public/interfaces/application/application_connector.mojom.h" #include "mojo/public/interfaces/application/service_provider.mojom.h" #include "mojo/services/gfx/composition/interfaces/scenes.mojom.h" #include "mojo/services/ui/views/interfaces/view_manager.mojom.h" @@ -25,55 +26,51 @@ // // It is not necessary to use this class to implement all Views. // This class is merely intended to make the simple apps easier to write. -class BaseView : public mojo::ui::ViewListener, - public mojo::ui::ViewContainerListener { +class BaseView : public ViewListener, public ViewContainerListener { public: - // TODO(jeffbrown): Consider switching this over to an ApplicationConnector - // but having ApplicationImpl is handy for simple examples. - BaseView(mojo::ApplicationImpl* app_impl, - mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request, + BaseView(InterfaceHandle<ApplicationConnector> app_connector, + InterfaceRequest<ViewOwner> view_owner_request, const std::string& label); ~BaseView() override; // Gets the application implementation object provided at creation time. - mojo::ApplicationImpl* app_impl() { return app_impl_; } + ApplicationConnector* app_connector() { return app_connector_.get(); } // Gets the view manager. - mojo::ui::ViewManager* view_manager() { return view_manager_.get(); } + ViewManager* view_manager() { return view_manager_.get(); } // Gets the underlying view interface. - mojo::ui::View* view() { return view_.get(); } + View* view() { return view_.get(); } // Gets the service provider for the view. - mojo::ServiceProvider* GetViewServiceProvider(); + ServiceProvider* GetViewServiceProvider(); // Gets the underlying view container interface. - mojo::ui::ViewContainer* GetViewContainer(); + ViewContainer* GetViewContainer(); // Gets the scene for the view. // Returns nullptr if the |TakeScene| was called. - mojo::gfx::composition::Scene* scene() { return scene_.get(); } + gfx::composition::Scene* scene() { return scene_.get(); } // Takes the scene from the view. // This is useful if the scene will be rendered by a separate component. - mojo::gfx::composition::ScenePtr TakeScene() { return scene_.Pass(); } + gfx::composition::ScenePtr TakeScene() { return scene_.Pass(); } // Gets the currently requested scene version. uint32_t scene_version() { return scene_version_; } // Gets the current view properties. // Returns nullptr if none. - mojo::ui::ViewProperties* properties() { return properties_.get(); } + ViewProperties* properties() { return properties_.get(); } // Called when properties changed. // Use |scene_version()| and |properties()| to get the current values. virtual void OnPropertiesChanged(uint32_t old_scene_version, - mojo::ui::ViewPropertiesPtr old_properties); + ViewPropertiesPtr old_properties); // Called when a child is attached. - virtual void OnChildAttached(uint32_t child_key, - mojo::ui::ViewInfoPtr child_view_info); + virtual void OnChildAttached(uint32_t child_key, ViewInfoPtr child_view_info); // Called when a child becomes unavailable. virtual void OnChildUnavailable(uint32_t child_key); @@ -82,28 +79,27 @@ // |ViewListener|: void OnPropertiesChanged( uint32_t scene_version, - mojo::ui::ViewPropertiesPtr properties, + ViewPropertiesPtr properties, const OnPropertiesChangedCallback& callback) override; // |ViewContainerListener|: void OnChildAttached(uint32_t child_key, - mojo::ui::ViewInfoPtr child_view_info, + ViewInfoPtr child_view_info, const OnChildAttachedCallback& callback) override; void OnChildUnavailable(uint32_t child_key, const OnChildUnavailableCallback& callback) override; - mojo::ApplicationImpl* app_impl_; + ApplicationConnectorPtr app_connector_; - mojo::StrongBinding<mojo::ui::ViewListener> view_listener_binding_; - mojo::Binding<mojo::ui::ViewContainerListener> - view_container_listener_binding_; - mojo::ui::ViewManagerPtr view_manager_; - mojo::ui::ViewPtr view_; - mojo::ServiceProviderPtr view_service_provider_; - mojo::ui::ViewContainerPtr view_container_; - mojo::gfx::composition::ScenePtr scene_; - uint32_t scene_version_ = mojo::gfx::composition::kSceneVersionNone; - mojo::ui::ViewPropertiesPtr properties_; + StrongBinding<ViewListener> view_listener_binding_; + Binding<ViewContainerListener> view_container_listener_binding_; + ViewManagerPtr view_manager_; + ViewPtr view_; + ServiceProviderPtr view_service_provider_; + ViewContainerPtr view_container_; + gfx::composition::ScenePtr scene_; + uint32_t scene_version_ = gfx::composition::kSceneVersionNone; + ViewPropertiesPtr properties_; MOJO_DISALLOW_COPY_AND_ASSIGN(BaseView); };
diff --git a/mojo/ui/ganesh_view.cc b/mojo/ui/ganesh_view.cc index 95b1170..857840d 100644 --- a/mojo/ui/ganesh_view.cc +++ b/mojo/ui/ganesh_view.cc
@@ -5,23 +5,18 @@ #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" namespace mojo { namespace ui { -GaneshView::GaneshView( - mojo::ApplicationImpl* app_impl, - mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request, - const std::string& label) - : BaseView(app_impl, view_owner_request.Pass(), label), - ganesh_renderer_( - new mojo::skia::GaneshContext(mojo::GLContext::CreateOffscreen( - mojo::ApplicationConnectorPtr::Create( - mojo::CreateApplicationConnector(app_impl->shell())) - .get()))) {} +GaneshView::GaneshView(InterfaceHandle<ApplicationConnector> app_connector, + InterfaceRequest<ViewOwner> view_owner_request, + const std::string& label) + : BaseView(app_connector.Pass(), view_owner_request.Pass(), label), + ganesh_renderer_(new skia::GaneshContext( + GLContext::CreateOffscreen(BaseView::app_connector()))) {} GaneshView::~GaneshView() {}
diff --git a/mojo/ui/ganesh_view.h b/mojo/ui/ganesh_view.h index 95c6c36..f42551c 100644 --- a/mojo/ui/ganesh_view.h +++ b/mojo/ui/ganesh_view.h
@@ -6,6 +6,7 @@ #define MOJO_UI_GANESH_VIEW_H_ #include "mojo/gpu/gl_context.h" +#include "mojo/public/cpp/bindings/interface_handle.h" #include "mojo/skia/ganesh_context.h" #include "mojo/ui/base_view.h" #include "mojo/ui/ganesh_renderer.h" @@ -20,27 +21,27 @@ // content for the scene. class GaneshView : public BaseView { public: - GaneshView(mojo::ApplicationImpl* app_impl, - mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request, + GaneshView(InterfaceHandle<ApplicationConnector> app_connector, + InterfaceRequest<ViewOwner> view_owner_request, const std::string& label); ~GaneshView() override; // Gets the GL context, never null. - const scoped_refptr<mojo::GLContext>& gl_context() const { + const scoped_refptr<GLContext>& gl_context() const { return ganesh_renderer_.gl_context(); } // Gets the Ganesh context, never null. - const scoped_refptr<mojo::skia::GaneshContext>& ganesh_context() const { + const scoped_refptr<skia::GaneshContext>& ganesh_context() const { return ganesh_renderer_.ganesh_context(); } // Gets the Ganesh renderer, never null. - mojo::ui::GaneshRenderer* ganesh_renderer() { return &ganesh_renderer_; } + GaneshRenderer* ganesh_renderer() { return &ganesh_renderer_; } private: - mojo::ui::GaneshRenderer ganesh_renderer_; + GaneshRenderer ganesh_renderer_; DISALLOW_COPY_AND_ASSIGN(GaneshView); };
diff --git a/mojo/ui/gl_view.cc b/mojo/ui/gl_view.cc index e3c80f5..79b2c94 100644 --- a/mojo/ui/gl_view.cc +++ b/mojo/ui/gl_view.cc
@@ -5,19 +5,15 @@ #include "mojo/ui/gl_view.h" #include "base/logging.h" -#include "mojo/public/cpp/application/connect.h" namespace mojo { namespace ui { -GLView::GLView(mojo::ApplicationImpl* app_impl, - mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request, +GLView::GLView(InterfaceHandle<ApplicationConnector> app_connector, + InterfaceRequest<ViewOwner> view_owner_request, const std::string& label) - : BaseView(app_impl, view_owner_request.Pass(), label), - gl_renderer_(mojo::GLContext::CreateOffscreen( - ApplicationConnectorPtr::Create( - mojo::CreateApplicationConnector(app_impl->shell())) - .get())) {} + : BaseView(app_connector.Pass(), view_owner_request.Pass(), label), + gl_renderer_(GLContext::CreateOffscreen(BaseView::app_connector())) {} GLView::~GLView() {}
diff --git a/mojo/ui/gl_view.h b/mojo/ui/gl_view.h index 7677084..e6687c8 100644 --- a/mojo/ui/gl_view.h +++ b/mojo/ui/gl_view.h
@@ -17,22 +17,22 @@ // content for the scene. class GLView : public BaseView { public: - GLView(mojo::ApplicationImpl* app_impl, - mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request, + GLView(InterfaceHandle<ApplicationConnector> app_connector, + InterfaceRequest<ViewOwner> view_owner_request, const std::string& label); ~GLView() override; // Gets the GL context, never null. - const scoped_refptr<mojo::GLContext>& gl_context() const { + const scoped_refptr<GLContext>& gl_context() const { return gl_renderer_.gl_context(); } // Gets the GL renderer, never null. - mojo::ui::GLRenderer* gl_renderer() { return &gl_renderer_; } + GLRenderer* gl_renderer() { return &gl_renderer_; } private: - mojo::ui::GLRenderer gl_renderer_; + GLRenderer gl_renderer_; MOJO_DISALLOW_COPY_AND_ASSIGN(GLView); };