ApplicationConnection devolution, part 1. Remove everything from ApplicationConnection other than GetServiceProviderImpl() (which is a pure virtual method) and AddService<I>() (which is a templated method). R=vardhan@google.com Review URL: https://codereview.chromium.org/1977043002 .
diff --git a/examples/bank_app/bank.cc b/examples/bank_app/bank.cc index 7229c6f..4593b13 100644 --- a/examples/bank_app/bank.cc +++ b/examples/bank_app/bank.cc
@@ -59,7 +59,8 @@ // From ApplicationDelegate bool ConfigureIncomingConnection( mojo::ApplicationConnection* connection) override { - std::string url = connection->GetRemoteApplicationURL(); + std::string url = + connection->GetServiceProviderImpl().connection_context().remote_url; if (url.length() > 0) { vanadium::AppInstanceNamePtr app(vanadium::AppInstanceName::New()); app->url = url;
diff --git a/mojo/public/cpp/application/application_connection.h b/mojo/public/cpp/application/application_connection.h index e665cd4..49a0da8 100644 --- a/mojo/public/cpp/application/application_connection.h +++ b/mojo/public/cpp/application/application_connection.h
@@ -5,6 +5,7 @@ #ifndef MOJO_PUBLIC_APPLICATION_APPLICATION_CONNECTION_H_ #define MOJO_PUBLIC_APPLICATION_APPLICATION_CONNECTION_H_ +#include <memory> #include <string> #include "mojo/public/cpp/application/lib/interface_factory_connector.h" @@ -46,33 +47,13 @@ // |factory| will create implementations of Interface on demand. template <typename Interface> void AddService(InterfaceFactory<Interface>* factory) { - SetServiceConnectorForName( - new internal::InterfaceFactoryConnector<Interface>(factory), + GetServiceProviderImpl().AddServiceForName( + std::unique_ptr<ServiceConnector>( + new internal::InterfaceFactoryConnector<Interface>(factory)), Interface::Name_); } virtual ServiceProviderImpl& GetServiceProviderImpl() = 0; - - virtual const ConnectionContext& GetConnectionContext() const = 0; - - // Returns the URL that was used by the source application to establish a - // connection to the destination application. - // - // When ApplicationConnection is representing an incoming connection this can - // be different than the URL the application was initially loaded from, if the - // application handles multiple URLs. Note that this is the URL after all - // URL rewriting and HTTP redirects have been performed. - // - // When ApplicationConnection is representing and outgoing connection, this - // will be the same as the value returned by GetRemoveApplicationURL(). - virtual const std::string& GetConnectionURL() = 0; - - // Returns the URL identifying the remote application on this connection. - virtual const std::string& GetRemoteApplicationURL() = 0; - - private: - virtual void SetServiceConnectorForName(ServiceConnector* service_connector, - const std::string& name) = 0; }; } // namespace mojo
diff --git a/mojo/public/cpp/application/lib/service_registry.cc b/mojo/public/cpp/application/lib/service_registry.cc index 74372d3..b36b63b 100644 --- a/mojo/public/cpp/application/lib/service_registry.cc +++ b/mojo/public/cpp/application/lib/service_registry.cc
@@ -19,13 +19,6 @@ ServiceRegistry::~ServiceRegistry() {} -void ServiceRegistry::SetServiceConnectorForName( - ServiceConnector* service_connector, - const std::string& interface_name) { - service_provider_impl_.AddServiceForName( - std::unique_ptr<ServiceConnector>(service_connector), interface_name); -} - void ServiceRegistry::RemoveServiceConnectorForName( const std::string& interface_name) { service_provider_impl_.RemoveServiceForName(interface_name); @@ -35,17 +28,5 @@ return service_provider_impl_; } -const ConnectionContext& ServiceRegistry::GetConnectionContext() const { - return service_provider_impl_.connection_context(); -} - -const std::string& ServiceRegistry::GetConnectionURL() { - return service_provider_impl_.connection_context().connection_url; -} - -const std::string& ServiceRegistry::GetRemoteApplicationURL() { - return service_provider_impl_.connection_context().remote_url; -} - } // namespace internal } // namespace mojo
diff --git a/mojo/public/cpp/application/lib/service_registry.h b/mojo/public/cpp/application/lib/service_registry.h index 26027f4..0e2789d 100644 --- a/mojo/public/cpp/application/lib/service_registry.h +++ b/mojo/public/cpp/application/lib/service_registry.h
@@ -24,12 +24,7 @@ ~ServiceRegistry() override; // ApplicationConnection overrides. - void SetServiceConnectorForName(ServiceConnector* service_connector, - const std::string& interface_name) override; ServiceProviderImpl& GetServiceProviderImpl() override; - const ConnectionContext& GetConnectionContext() const override; - const std::string& GetConnectionURL() override; - const std::string& GetRemoteApplicationURL() override; void RemoveServiceConnectorForName(const std::string& interface_name);
diff --git a/mojo/public/cpp/application/tests/BUILD.gn b/mojo/public/cpp/application/tests/BUILD.gn index 284f54d..30f3c50 100644 --- a/mojo/public/cpp/application/tests/BUILD.gn +++ b/mojo/public/cpp/application/tests/BUILD.gn
@@ -9,7 +9,6 @@ sources = [ "service_provider_impl_unittest.cc", - "service_registry_unittest.cc", ] deps = [
diff --git a/mojo/public/cpp/application/tests/service_registry_unittest.cc b/mojo/public/cpp/application/tests/service_registry_unittest.cc deleted file mode 100644 index 304259e..0000000 --- a/mojo/public/cpp/application/tests/service_registry_unittest.cc +++ /dev/null
@@ -1,70 +0,0 @@ -// Copyright 2014 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/lib/service_registry.h" - -#include "mojo/public/cpp/application/service_connector.h" -#include "testing/gtest/include/gtest/gtest.h" - -namespace mojo { -namespace internal { -namespace { - -class TestConnector : public ServiceConnector { - public: - explicit TestConnector(int* delete_count) : delete_count_(delete_count) {} - ~TestConnector() override { (*delete_count_)++; } - void ConnectToService(const ConnectionContext& connection_context, - const std::string& interface_name, - ScopedMessagePipeHandle client_handle) override {} - - private: - int* delete_count_; -}; - -TEST(ServiceRegistryTest, Ownership) { - int delete_count = 0; - - // Destruction. - { - ServiceRegistry registry; - registry.SetServiceConnectorForName(new TestConnector(&delete_count), - "TC1"); - } - EXPECT_EQ(1, delete_count); - - // Removal. - { - ServiceRegistry registry; - ServiceConnector* c = new TestConnector(&delete_count); - registry.SetServiceConnectorForName(c, "TC1"); - registry.RemoveServiceConnectorForName("TC1"); - EXPECT_EQ(2, delete_count); - } - - // Multiple. - { - ServiceRegistry registry; - registry.SetServiceConnectorForName(new TestConnector(&delete_count), - "TC1"); - registry.SetServiceConnectorForName(new TestConnector(&delete_count), - "TC2"); - } - EXPECT_EQ(4, delete_count); - - // Re-addition. - { - ServiceRegistry registry; - registry.SetServiceConnectorForName(new TestConnector(&delete_count), - "TC1"); - registry.SetServiceConnectorForName(new TestConnector(&delete_count), - "TC1"); - EXPECT_EQ(5, delete_count); - } - EXPECT_EQ(6, delete_count); -} - -} // namespace -} // namespace internal -} // namespace mojo
diff --git a/services/dart/content_handler_main.cc b/services/dart/content_handler_main.cc index 4808811..a8c6d2a 100644 --- a/services/dart/content_handler_main.cc +++ b/services/dart/content_handler_main.cc
@@ -238,7 +238,9 @@ // Overridden from ApplicationDelegate: bool ConfigureIncomingConnection( mojo::ApplicationConnection* connection) override { - bool strict = HasStrictQueryParam(connection->GetConnectionURL()); + bool strict = HasStrictQueryParam(connection->GetServiceProviderImpl() + .connection_context() + .connection_url); if (default_strict_ || strict) { connection->AddService(&strict_content_handler_factory_); } else {
diff --git a/services/python/content_handler/content_handler_main.cc b/services/python/content_handler/content_handler_main.cc index f52e2f2..be6897d 100644 --- a/services/python/content_handler/content_handler_main.cc +++ b/services/python/content_handler/content_handler_main.cc
@@ -213,7 +213,9 @@ private: // Overridden from ApplicationDelegate: bool ConfigureIncomingConnection(ApplicationConnection* connection) override { - if (IsDebug(connection->GetConnectionURL())) + if (IsDebug(connection->GetServiceProviderImpl() + .connection_context() + .connection_url)) connection->AddService(&debug_content_handler_factory_); else connection->AddService(&content_handler_factory_);
diff --git a/services/ui/launcher/launcher_app.cc b/services/ui/launcher/launcher_app.cc index 918681e..d0f1377 100644 --- a/services/ui/launcher/launcher_app.cc +++ b/services/ui/launcher/launcher_app.cc
@@ -39,7 +39,9 @@ bool LauncherApp::ConfigureIncomingConnection( mojo::ApplicationConnection* connection) { // Only present the launcher interface to the shell. - if (connection->GetRemoteApplicationURL().empty()) { + if (connection->GetServiceProviderImpl() + .connection_context() + .remote_url.empty()) { connection->AddService<Launcher>(this); } return true;
diff --git a/shell/application_manager/application_manager_unittest.cc b/shell/application_manager/application_manager_unittest.cc index 7dec43d..8ea79c0 100644 --- a/shell/application_manager/application_manager_unittest.cc +++ b/shell/application_manager/application_manager_unittest.cc
@@ -314,15 +314,16 @@ } bool ConfigureIncomingConnection(ApplicationConnection* connection) override { - if (!requestor_url_.empty() && - requestor_url_ != connection->GetRemoteApplicationURL()) { + const std::string& remote_url = + connection->GetServiceProviderImpl().connection_context().remote_url; + if (!requestor_url_.empty() && requestor_url_ != remote_url) { context_->set_tester_called_quit(); context_->QuitSoon(); base::MessageLoop::current()->Quit(); return false; } // If we're coming from A, then add B, otherwise A. - if (connection->GetRemoteApplicationURL() == kTestAURLString) + if (remote_url == kTestAURLString) connection->AddService<TestB>(this); else connection->AddService<TestA>(this);