diff --git a/engine/core/html/HTMLIFrameElement.cpp b/engine/core/html/HTMLIFrameElement.cpp index 07a1cc25933..9fb3e0ba918 100644 --- a/engine/core/html/HTMLIFrameElement.cpp +++ b/engine/core/html/HTMLIFrameElement.cpp @@ -58,7 +58,7 @@ void HTMLIFrameElement::OnViewDestroyed(mojo::View* view) ScriptValue HTMLIFrameElement::takeServiceProvider(ScriptState* scriptState) { - return ScriptValue(scriptState, gin::ConvertToV8(scriptState->isolate(), m_serviceProvider.release())); + return ScriptValue(scriptState, gin::ConvertToV8(scriptState->isolate(), m_services.PassMessagePipe().release())); } void HTMLIFrameElement::createView() @@ -76,10 +76,9 @@ void HTMLIFrameElement::createView() if (!m_contentView) return; - mojo::MessagePipe pipe; - m_serviceProvider = pipe.handle0.Pass(); m_contentView->Embed(mojo::String::From(url.string().utf8().data()), - mojo::MakeRequest(pipe.handle1.Pass())); + GetProxy(&m_services), + nullptr); // TODO(abarth) Expose the exposedService parameter. m_contentView->AddObserver(this); } diff --git a/engine/core/html/HTMLIFrameElement.h b/engine/core/html/HTMLIFrameElement.h index 56ac0ab6b6d..a95654c2c6f 100644 --- a/engine/core/html/HTMLIFrameElement.h +++ b/engine/core/html/HTMLIFrameElement.h @@ -44,7 +44,7 @@ private: void createView(); mojo::View* m_contentView; - mojo::ScopedMessagePipeHandle m_serviceProvider; + mojo::ServiceProviderPtr m_services; }; } // namespace blink diff --git a/engine/v8_inspector/inspector_backend_mojo.cc b/engine/v8_inspector/inspector_backend_mojo.cc index c4349efdead..decf67018bd 100644 --- a/engine/v8_inspector/inspector_backend_mojo.cc +++ b/engine/v8_inspector/inspector_backend_mojo.cc @@ -106,13 +106,13 @@ InspectorBackendMojoImpl::~InspectorBackendMojoImpl() { void InspectorBackendMojoImpl::Connect() { mojo::Shell* shell = host_->GetShell(); - mojo::InterfaceRequest service_provider_request; - mojo::MessagePipe pipe; - service_provider_request.Bind(pipe.handle0.Pass()); - inspector_service_provider_.BindToHandle(pipe.handle1.Pass()); - shell->ConnectToApplication("mojo:sky_inspector_server", - service_provider_request.Pass(), nullptr); - mojo::ConnectToService(&inspector_service_provider_, &frontend_); + + mojo::ServiceProviderPtr services; + mojo::ServiceProviderPtr exposed_services; + inspector_service_provider_.Bind(GetProxy(&exposed_services)); + shell->ConnectToApplication("mojo:sky_inspector_server", GetProxy(&services), + exposed_services.Pass()); + mojo::ConnectToService(services.get(), &frontend_); // Theoretically we should load our state from the inspector cookie. inspector_state_ = diff --git a/services/inspector/server.cc b/services/inspector/server.cc index c5cd23e58bb..ac051e90e00 100644 --- a/services/inspector/server.cc +++ b/services/inspector/server.cc @@ -39,12 +39,14 @@ class Server : public mojo::ApplicationDelegate, mojo::ApplicationConnection* connection) override { connection->AddService(this); connection->AddService(this); - // The application connecting to us may implement InspectorBackend, - // attempt to establish a connection to find out. If it doesn't then this - // pipe will close. - InspectorBackendPtr backend; - connection->ConnectToService(&backend); - backends_.AddInterfacePtr(backend.Pass()); + if (connection->GetServiceProvider()) { + // The application connecting to us may implement InspectorBackend, + // attempt to establish a connection to find out. If it doesn't then this + // pipe will close. + InspectorBackendPtr backend; + connection->ConnectToService(&backend); + backends_.AddInterfacePtr(backend.Pass()); + } return true; } diff --git a/tools/debugger/debugger.cc b/tools/debugger/debugger.cc index 6eaf7fe9196..c540b15f937 100644 --- a/tools/debugger/debugger.cc +++ b/tools/debugger/debugger.cc @@ -15,6 +15,7 @@ SkyDebugger::SkyDebugger() content_(nullptr), navigator_host_factory_(this), weak_factory_(this) { + exposed_services_impl_.AddService(&navigator_host_factory_); } SkyDebugger::~SkyDebugger() { @@ -45,8 +46,8 @@ bool SkyDebugger::ConfigureOutgoingConnection( void SkyDebugger::OnEmbed( mojo::View* root, - mojo::ServiceProviderImpl* exported_services, - scoped_ptr imported_services) { + mojo::InterfaceRequest services, + mojo::ServiceProviderPtr exposed_services) { root_ = root; root_->AddObserver(this); @@ -64,13 +65,10 @@ void SkyDebugger::OnEmbed( NavigateToURL(pending_url_); } -void SkyDebugger::Embed( - const mojo::String& url, - mojo::InterfaceRequest service_provider) { - scoped_ptr exported_services( - new mojo::ServiceProviderImpl()); - // exported_services->AddService(TBD) -- no exported services for now. - content_->Embed(url, exported_services.Pass()); +void SkyDebugger::Embed(const mojo::String& url, + mojo::InterfaceRequest services, + mojo::ServiceProviderPtr exposed_services) { + content_->Embed(url, nullptr, nullptr); } void SkyDebugger::OnViewManagerDisconnected(mojo::ViewManager* view_manager) { @@ -97,10 +95,9 @@ void SkyDebugger::NavigateToURL(const mojo::String& url) { // embedded into the view and content_ created. // Just save the last one. if (content_) { - scoped_ptr exported_services( - new mojo::ServiceProviderImpl()); - exported_services->AddService(&navigator_host_factory_); - viewer_services_ = content_->Embed(url, exported_services.Pass()); + mojo::ServiceProviderPtr exposed_services; + exposed_services_impl_.Bind(GetProxy(&exposed_services)); + content_->Embed(url, GetProxy(&viewer_services_), exposed_services.Pass()); } else { pending_url_ = url; } diff --git a/tools/debugger/debugger.h b/tools/debugger/debugger.h index 9aa5b2faf67..d7412a257e9 100644 --- a/tools/debugger/debugger.h +++ b/tools/debugger/debugger.h @@ -48,8 +48,8 @@ class SkyDebugger : public mojo::ApplicationDelegate, // Overridden from mojo::ViewManagerDelegate: void OnEmbed(mojo::View* root, - mojo::ServiceProviderImpl* exported_services, - scoped_ptr imported_services) override; + mojo::InterfaceRequest services, + mojo::ServiceProviderPtr exposed_services) override; void OnViewManagerDisconnected(mojo::ViewManager* view_manager) override; // Overriden from mojo::ViewObserver: @@ -63,9 +63,9 @@ class SkyDebugger : public mojo::ApplicationDelegate, mojo::InterfaceRequest request) override; // Overridden from WindowManagerDelegate - void Embed( - const mojo::String& url, - mojo::InterfaceRequest service_provider) override; + void Embed(const mojo::String& url, + mojo::InterfaceRequest services, + mojo::ServiceProviderPtr exposed_services) override; scoped_ptr window_manager_app_; @@ -73,9 +73,10 @@ class SkyDebugger : public mojo::ApplicationDelegate, mojo::View* content_; std::string pending_url_; - scoped_ptr viewer_services_; + mojo::ServiceProviderPtr viewer_services_; NavigatorHostFactory navigator_host_factory_; + mojo::ServiceProviderImpl exposed_services_impl_; base::WeakPtrFactory weak_factory_; diff --git a/tools/tester/test_runner.cc b/tools/tester/test_runner.cc index b321badc303..e187cfa8e44 100644 --- a/tools/tester/test_runner.cc +++ b/tools/tester/test_runner.cc @@ -7,7 +7,6 @@ #include #include "base/bind.h" #include "mojo/public/cpp/application/connect.h" -#include "mojo/public/cpp/application/service_provider_impl.h" #include "mojo/services/view_manager/public/cpp/view.h" namespace sky { @@ -24,11 +23,11 @@ TestRunner::TestRunner(TestRunnerClient* client, mojo::View* container, enable_pixel_dumping_(enable_pixel_dumping) { CHECK(client); - scoped_ptr exported_services( - new mojo::ServiceProviderImpl()); - exported_services->AddService(&test_harness_factory_); + mojo::ServiceProviderPtr test_harness_provider; + test_harness_provider_impl_.AddService(&test_harness_factory_); + test_harness_provider_impl_.Bind(GetProxy(&test_harness_provider)); - container->Embed(url, exported_services.Pass()); + container->Embed(url, nullptr, test_harness_provider.Pass()); } TestRunner::~TestRunner() { diff --git a/tools/tester/test_runner.h b/tools/tester/test_runner.h index 7e2d45b9234..5a775355f6a 100644 --- a/tools/tester/test_runner.h +++ b/tools/tester/test_runner.h @@ -6,6 +6,7 @@ #define SKY_TOOLS_TESTER_TEST_RUNNER_H_ #include "base/memory/weak_ptr.h" +#include "mojo/public/cpp/application/service_provider_impl.h" #include "sky/tools/tester/test_harness_impl.h" namespace mojo{ @@ -40,6 +41,7 @@ class TestRunner { private: TestHarnessFactory test_harness_factory_; + mojo::ServiceProviderImpl test_harness_provider_impl_; TestRunnerClient* client_; base::WeakPtrFactory weak_ptr_factory_; bool enable_pixel_dumping_; diff --git a/tools/tester/tester.cc b/tools/tester/tester.cc index 635bc6b1a53..d46c84f1bfa 100644 --- a/tools/tester/tester.cc +++ b/tools/tester/tester.cc @@ -83,10 +83,9 @@ class SkyTester : public mojo::ApplicationDelegate, } // Overridden from mojo::ViewManagerDelegate: - virtual void OnEmbed( - mojo::View* root, - mojo::ServiceProviderImpl* exported_services, - scoped_ptr remote_service_provider) override { + virtual void OnEmbed(mojo::View* root, + mojo::InterfaceRequest services, + mojo::ServiceProviderPtr exposed_services) override { root_ = root; root_->AddObserver(this); @@ -101,10 +100,9 @@ class SkyTester : public mojo::ApplicationDelegate, } // Overridden from window_manager::WindowManagerDelegate: - virtual void Embed( - const mojo::String& url, - mojo::InterfaceRequest service_provider) override { - } + virtual void Embed(const mojo::String& url, + mojo::InterfaceRequest services, + mojo::ServiceProviderPtr exposed_services) override {} virtual void OnViewManagerDisconnected( mojo::ViewManager* view_manager) override { diff --git a/viewer/document_view.cc b/viewer/document_view.cc index 71e672694b7..cf48567326b 100644 --- a/viewer/document_view.cc +++ b/viewer/document_view.cc @@ -81,6 +81,7 @@ DocumentView::DocumentView( mojo::URLResponsePtr response, mojo::Shell* shell) : response_(response.Pass()), + exported_services_(services.Pass()), shell_(shell), web_view_(nullptr), root_(nullptr), @@ -89,9 +90,8 @@ DocumentView::DocumentView( bitmap_rasterizer_(nullptr), debugger_id_(s_next_debugger_id++), weak_factory_(this) { - // TODO(jamesr): Is this right? exported_services_.AddService(&view_manager_client_factory_); - mojo::WeakBindToPipe(&exported_services_, services.PassMessagePipe()); + inspector_service_provider_impl_.AddService(&inspector_service_factory_); } DocumentView::~DocumentView() { @@ -107,12 +107,14 @@ base::WeakPtr DocumentView::GetWeakPtr() { void DocumentView::OnEmbed( mojo::View* root, - mojo::ServiceProviderImpl* exported_services, - scoped_ptr imported_services) { + mojo::InterfaceRequest services, + mojo::ServiceProviderPtr exposed_services) { root_ = root; - imported_services_ = imported_services.Pass(); + imported_services_ = exposed_services.Pass(); navigator_host_.set_service_provider(imported_services_.get()); - exported_services->AddService(&inspector_service_factory_); + + if (services.is_pending()) + inspector_service_provider_impl_.Bind(services.Pass()); Load(response_.Pass()); diff --git a/viewer/document_view.h b/viewer/document_view.h index 05509bcead6..57bf30ba5d2 100644 --- a/viewer/document_view.h +++ b/viewer/document_view.h @@ -103,10 +103,9 @@ class DocumentView : public blink::ServiceProvider, mojo::Shell* Shell() override; // ViewManagerDelegate methods: - void OnEmbed( - mojo::View* root, - mojo::ServiceProviderImpl* exported_services, - scoped_ptr imported_services) override; + void OnEmbed(mojo::View* root, + mojo::InterfaceRequest services, + mojo::ServiceProviderPtr exposed_services) override; void OnViewManagerDisconnected(mojo::ViewManager* view_manager) override; // ViewObserver methods: @@ -124,13 +123,14 @@ class DocumentView : public blink::ServiceProvider, mojo::URLResponsePtr response_; mojo::ServiceProviderImpl exported_services_; - scoped_ptr imported_services_; + mojo::ServiceProviderPtr imported_services_; mojo::Shell* shell_; mojo::LazyInterfacePtr navigator_host_; blink::WebView* web_view_; mojo::View* root_; mojo::ViewManagerClientFactory view_manager_client_factory_; InspectorServiceFactory inspector_service_factory_; + mojo::ServiceProviderImpl inspector_service_provider_impl_; scoped_ptr layer_host_; scoped_refptr root_layer_; RasterizerBitmap* bitmap_rasterizer_; // Used for pixel tests. diff --git a/viewer/internals.cc b/viewer/internals.cc index 01cf5db3bf5..09db9802b52 100644 --- a/viewer/internals.cc +++ b/viewer/internals.cc @@ -40,7 +40,8 @@ gin::Handle Internals::Create( Internals::Internals(DocumentView* document_view) : document_view_(document_view->GetWeakPtr()), shell_binding_(this) { - mojo::ConnectToService(document_view->imported_services(), &test_harness_); + if (document_view_->imported_services()) + mojo::ConnectToService(document_view_->imported_services(), &test_harness_); } Internals::~Internals() { @@ -77,13 +78,15 @@ void Internals::NotifyTestComplete(const std::string& test_result) { return; std::vector pixels; document_view_->GetPixelsForTesting(&pixels); - test_harness_->OnTestComplete(test_result, - mojo::Array::From(pixels)); + if (test_harness_) { + test_harness_->OnTestComplete(test_result, + mojo::Array::From(pixels)); + } } mojo::Handle Internals::ConnectToEmbedderService( const std::string& interface_name) { - if (!document_view_) + if (!document_view_ || !document_view_->imported_services()) return mojo::Handle(); mojo::MessagePipe pipe;