Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/core_services/core_services_application_delegate.h" | 5 #include "components/core_services/core_services_application_delegate.h" |
| 6 | 6 |
| 7 #include "components/clipboard/clipboard_standalone_impl.h" | 7 #include "components/clipboard/clipboard_application_delegate.h" |
| 8 #include "third_party/mojo/src/mojo/public/cpp/application/application_connectio n.h" | 8 #include "third_party/mojo/src/mojo/public/cpp/application/application_connectio n.h" |
| 9 #include "third_party/mojo/src/mojo/public/cpp/application/application_impl.h" | |
| 9 | 10 |
| 10 namespace core_services { | 11 namespace core_services { |
| 11 | 12 |
| 12 CoreServicesApplicationDelegate::CoreServicesApplicationDelegate() {} | 13 CoreServicesApplicationDelegate::CoreServicesApplicationDelegate() {} |
| 13 | 14 |
| 14 CoreServicesApplicationDelegate::~CoreServicesApplicationDelegate() {} | 15 CoreServicesApplicationDelegate::~CoreServicesApplicationDelegate() {} |
| 15 | 16 |
| 16 bool CoreServicesApplicationDelegate::ConfigureIncomingConnection( | 17 bool CoreServicesApplicationDelegate::ConfigureIncomingConnection( |
| 17 mojo::ApplicationConnection* connection) { | 18 mojo::ApplicationConnection* connection) { |
| 18 // TODO(erg): For version one, we'll just say that all incoming connections | 19 connection->AddService(this); |
| 19 // get access to the same objects, which imply that there will be one | |
| 20 // instance of the service in its own process. However, in the long run, | |
| 21 // we'll want this to be more configurable. Some services are singletons, | |
| 22 // while we'll want to spawn a new process with multiple instances for other | |
| 23 // services. | |
| 24 connection->AddService<mojo::ServiceProvider>(this); | |
| 25 return true; | 20 return true; |
| 26 } | 21 } |
| 27 | 22 |
| 28 void CoreServicesApplicationDelegate::Create( | 23 void CoreServicesApplicationDelegate::Create( |
| 29 mojo::ApplicationConnection* connection, | 24 mojo::ApplicationConnection* connection, |
| 30 mojo::InterfaceRequest<ServiceProvider> request) { | 25 mojo::InterfaceRequest<mojo::ContentHandler> request) { |
| 31 provider_bindings_.AddBinding(this, request.Pass()); | 26 handler_bindings_.AddBinding(this, request.Pass()); |
| 32 } | 27 } |
| 33 | 28 |
| 34 void CoreServicesApplicationDelegate::ConnectToService( | 29 void CoreServicesApplicationDelegate::StartApplication( |
| 35 const mojo::String& service_name, | 30 mojo::InterfaceRequest<mojo::Application> request, |
| 36 mojo::ScopedMessagePipeHandle client_handle) { | 31 mojo::URLResponsePtr response) { |
| 37 if (service_name == mojo::Clipboard::Name_) { | 32 std::string url = response->url; |
| 38 // TODO(erg): So what we do here probably doesn't look like the | 33 if (url == "mojo://clipboard/") { |
| 39 // InProcessNativeRunner / NativeApplicationSupport. | 34 // TODO(erg): This is where we should deal with running things on separate |
| 40 // native_application_support.cc does the whole SetThunks() stuff. This has | 35 // threads. |
| 41 // already happened since Core Services is a mojo application. So we want | 36 new mojo::ApplicationImpl(new clipboard::ClipboardApplicationDelegate, |
|
sky
2015/04/30 21:59:08
I suspect this leaks. Can you add a TODO about tra
Elliot Glaysher
2015/05/01 17:00:03
Switched to smart ptrs.
| |
| 42 // some sort of lightweight runner here. | 37 request.Pass()); |
| 43 // | 38 return; |
| 44 // But...the actual child process stuff is its own mojom! (Also, it's | 39 } |
| 45 // entangled with mojo::Shell::ChildProcessMain().) All concept of app | |
| 46 // paths are the things which are used to execute the application in | |
| 47 // child_process.cc. | |
| 48 | 40 |
| 49 // TODO(erg): The lifetime of ClipboardStandaloneImpl is wrong. Right now, | 41 NOTREACHED() << "Unknown service '" << url << "'"; |
| 50 // a new object is made for each request, but we obviously want there to be | |
| 51 // one clipboard across all callers. | |
| 52 new clipboard::ClipboardStandaloneImpl( | |
| 53 mojo::MakeRequest<mojo::Clipboard>(client_handle.Pass())); | |
| 54 } | |
| 55 } | 42 } |
| 56 | 43 |
| 57 } // namespace core_services | 44 } // namespace core_services |
| OLD | NEW |