| Index: services/shell/tests/lifecycle/package.cc
|
| diff --git a/services/shell/tests/lifecycle/package.cc b/services/shell/tests/lifecycle/package.cc
|
| deleted file mode 100644
|
| index c2a033592f3aa3f70df9a2b91f060a2f7974f228..0000000000000000000000000000000000000000
|
| --- a/services/shell/tests/lifecycle/package.cc
|
| +++ /dev/null
|
| @@ -1,155 +0,0 @@
|
| -// Copyright 2016 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 <algorithm>
|
| -#include <memory>
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/macros.h"
|
| -#include "mojo/public/cpp/bindings/binding_set.h"
|
| -#include "services/shell/public/c/main.h"
|
| -#include "services/shell/public/cpp/service_context.h"
|
| -#include "services/shell/public/cpp/service_runner.h"
|
| -#include "services/shell/public/interfaces/service_factory.mojom.h"
|
| -#include "services/shell/tests/lifecycle/app_client.h"
|
| -#include "services/shell/tests/lifecycle/lifecycle_unittest.mojom.h"
|
| -
|
| -namespace {
|
| -
|
| -class PackagedApp : public shell::Service,
|
| - public shell::InterfaceFactory<LifecycleControl>,
|
| - public LifecycleControl {
|
| - public:
|
| - using DestructCallback = base::Callback<void(PackagedApp*)>;
|
| -
|
| - PackagedApp(shell::mojom::ServiceRequest request,
|
| - const DestructCallback& shell_connection_closed_callback,
|
| - const DestructCallback& destruct_callback)
|
| - : connection_(new shell::ServiceContext(this, std::move(request))),
|
| - shell_connection_closed_callback_(shell_connection_closed_callback),
|
| - destruct_callback_(destruct_callback) {
|
| - bindings_.set_connection_error_handler(base::Bind(&PackagedApp::BindingLost,
|
| - base::Unretained(this)));
|
| - }
|
| - ~PackagedApp() override {
|
| - destruct_callback_.Run(this);
|
| - }
|
| -
|
| - private:
|
| - // shell::Service:
|
| - bool OnConnect(const shell::Identity& remote_identity,
|
| - shell::InterfaceRegistry* registry) override {
|
| - registry->AddInterface<LifecycleControl>(this);
|
| - return true;
|
| - }
|
| -
|
| - // shell::InterfaceFactory<LifecycleControl>
|
| - void Create(const shell::Identity& remote_identity,
|
| - LifecycleControlRequest request) override {
|
| - bindings_.AddBinding(this, std::move(request));
|
| - }
|
| -
|
| - // LifecycleControl:
|
| - void Ping(const PingCallback& callback) override {
|
| - callback.Run();
|
| - }
|
| - void GracefulQuit() override {
|
| - shell_connection_closed_callback_.Run(this);
|
| - delete this;
|
| - // This will have closed all |bindings_|.
|
| - }
|
| - void Crash() override {
|
| - // When multiple instances are vended from the same package instance, this
|
| - // will cause all instances to be quit.
|
| - exit(1);
|
| - }
|
| - void CloseShellConnection() override {
|
| - shell_connection_closed_callback_.Run(this);
|
| - connection_.reset();
|
| - // This only closed our relationship with the shell, existing |bindings_|
|
| - // remain active.
|
| - }
|
| -
|
| - void BindingLost() {
|
| - if (bindings_.empty())
|
| - delete this;
|
| - }
|
| -
|
| - std::unique_ptr<shell::ServiceContext> connection_;
|
| - mojo::BindingSet<LifecycleControl> bindings_;
|
| - // Run when this object's connection to the shell is closed.
|
| - DestructCallback shell_connection_closed_callback_;
|
| - // Run when this object is destructed.
|
| - DestructCallback destruct_callback_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(PackagedApp);
|
| -};
|
| -
|
| -class Package
|
| - : public shell::Service,
|
| - public shell::InterfaceFactory<shell::mojom::ServiceFactory>,
|
| - public shell::mojom::ServiceFactory {
|
| - public:
|
| - Package() {}
|
| - ~Package() override {}
|
| -
|
| - void set_runner(shell::ServiceRunner* runner) {
|
| - app_client_.set_runner(runner);
|
| - }
|
| -
|
| - private:
|
| - // shell::test::AppClient:
|
| - bool OnConnect(const shell::Identity& remote_identity,
|
| - shell::InterfaceRegistry* registry) override {
|
| - registry->AddInterface<shell::mojom::ServiceFactory>(this);
|
| - return app_client_.OnConnect(remote_identity, registry);
|
| - }
|
| -
|
| - // shell::InterfaceFactory<shell::mojom::ServiceFactory>:
|
| - void Create(const shell::Identity& remote_identity,
|
| - shell::mojom::ServiceFactoryRequest request) override {
|
| - bindings_.AddBinding(this, std::move(request));
|
| - }
|
| -
|
| - // shell::mojom::ServiceFactory:
|
| - void CreateService(shell::mojom::ServiceRequest request,
|
| - const std::string& name) override {
|
| - ++shell_connection_refcount_;
|
| - apps_.push_back(
|
| - new PackagedApp(std::move(request),
|
| - base::Bind(&Package::AppShellConnectionClosed,
|
| - base::Unretained(this)),
|
| - base::Bind(&Package::AppDestructed,
|
| - base::Unretained(this))));
|
| - }
|
| -
|
| - void AppShellConnectionClosed(PackagedApp* app) {
|
| - if (!--shell_connection_refcount_)
|
| - app_client_.CloseShellConnection();
|
| - }
|
| -
|
| - void AppDestructed(PackagedApp* app) {
|
| - auto it = std::find(apps_.begin(), apps_.end(), app);
|
| - DCHECK(it != apps_.end());
|
| - apps_.erase(it);
|
| - if (apps_.empty() && base::MessageLoop::current()->is_running())
|
| - base::MessageLoop::current()->QuitWhenIdle();
|
| - }
|
| -
|
| - shell::test::AppClient app_client_;
|
| - int shell_connection_refcount_ = 0;
|
| - mojo::BindingSet<shell::mojom::ServiceFactory> bindings_;
|
| - std::vector<PackagedApp*> apps_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(Package);
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -MojoResult ServiceMain(MojoHandle service_request_handle) {
|
| - Package* package = new Package;
|
| - shell::ServiceRunner runner(package);
|
| - package->set_runner(&runner);
|
| - return runner.Run(service_request_handle);
|
| -}
|
|
|