Index: examples/window_manager/window_manager.cc |
diff --git a/examples/window_manager/window_manager.cc b/examples/window_manager/window_manager.cc |
index 09226baf53cd8c5b7337ddfd52866f188cbc73d3..a2d53e4cac85cebffce056921ec332c2c0b8d876 100644 |
--- a/examples/window_manager/window_manager.cc |
+++ b/examples/window_manager/window_manager.cc |
@@ -152,17 +152,19 @@ class RootLayoutManager : public ViewObserver { |
class Window : public InterfaceFactory<NavigatorHost> { |
public: |
Window(WindowManager* window_manager, View* view) |
- : window_manager_(window_manager), view_(view) {} |
+ : window_manager_(window_manager), view_(view) { |
+ exposed_services_impl_.AddService<NavigatorHost>(this); |
+ } |
virtual ~Window() {} |
View* view() const { return view_; } |
void Embed(const std::string& url) { |
- scoped_ptr<ServiceProviderImpl> service_provider_impl( |
- new ServiceProviderImpl()); |
- service_provider_impl->AddService<NavigatorHost>(this); |
- view_->Embed(url, service_provider_impl.Pass()); |
+ // TODO: Support embedding multiple times? |
+ ServiceProviderPtr exposed_services; |
+ exposed_services_impl_.Bind(GetProxy(&exposed_services)); |
+ view_->Embed(url, nullptr, exposed_services.Pass()); |
} |
private: |
@@ -175,6 +177,7 @@ class Window : public InterfaceFactory<NavigatorHost> { |
WindowManager* window_manager_; |
View* view_; |
+ ServiceProviderImpl exposed_services_impl_; |
}; |
class WindowManager : public ApplicationDelegate, |
@@ -266,8 +269,8 @@ class WindowManager : public ApplicationDelegate, |
// Overridden from ViewManagerDelegate: |
virtual void OnEmbed(View* root, |
- ServiceProviderImpl* exported_services, |
- scoped_ptr<ServiceProvider> imported_services) override { |
+ InterfaceRequest<ServiceProvider> services, |
+ ServiceProviderPtr exposed_services) override { |
DCHECK(!view_manager_); |
view_manager_ = root->view_manager(); |
@@ -303,7 +306,8 @@ class WindowManager : public ApplicationDelegate, |
// Overridden from WindowManagerDelegate: |
void Embed(const String& url, |
- InterfaceRequest<ServiceProvider> service_provider) override { |
+ InterfaceRequest<ServiceProvider> services, |
+ ServiceProviderPtr exposed_services) override { |
const Id kInvalidSourceViewId = 0; |
OnLaunch(kInvalidSourceViewId, TARGET_DEFAULT, url); |
} |
@@ -399,12 +403,12 @@ class WindowManager : public ApplicationDelegate, |
view->SetBounds(bounds); |
view->SetVisible(true); |
- scoped_ptr<mojo::ServiceProviderImpl> exported_services( |
- new mojo::ServiceProviderImpl()); |
- exported_services->AddService(this); |
+ ServiceProviderPtr exposed_services; |
+ control_panel_exposed_services_impl_.Bind(GetProxy(&exposed_services)); |
+ control_panel_exposed_services_impl_.AddService(this); |
GURL frame_url = url_.Resolve("/examples/window_manager/debug_panel.sky"); |
- debug_panel_ = view->Embed(frame_url.spec(), exported_services.Pass()); |
+ view->Embed(frame_url.spec(), nullptr, exposed_services.Pass()); |
return view->id(); |
} |
@@ -425,11 +429,11 @@ class WindowManager : public ApplicationDelegate, |
InterfaceFactoryImplWithContext<WindowManagerConnection, WindowManager> |
window_manager_factory_; |
- scoped_ptr<mojo::ServiceProvider> debug_panel_; |
Window* launcher_ui_; |
WindowVector windows_; |
ViewManager* view_manager_; |
scoped_ptr<RootLayoutManager> root_layout_manager_; |
+ ServiceProviderImpl control_panel_exposed_services_impl_; |
scoped_ptr<window_manager::WindowManagerApp> window_manager_app_; |