blob: 085e8c86c4241fe5baa4d2280f60bf5bd96fec41 [file] [log] [blame]
// 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 "mojo/public/cpp/application/application_impl_base.h"
#include <algorithm>
#include <utility>
#include "mojo/public/cpp/application/connection_context.h"
#include "mojo/public/cpp/application/service_provider_impl.h"
#include "mojo/public/cpp/environment/logging.h"
namespace mojo {
ApplicationImplBase::~ApplicationImplBase() {}
void ApplicationImplBase::Bind(
InterfaceRequest<Application> application_request) {
application_binding_.Bind(application_request.Pass());
}
bool ApplicationImplBase::HasArg(const std::string& arg) const {
return std::find(args_.begin(), args_.end(), arg) != args_.end();
}
void ApplicationImplBase::OnInitialize() {}
bool ApplicationImplBase::OnAcceptConnection(
ServiceProviderImpl* service_provider_impl) {
return false;
}
void ApplicationImplBase::OnQuit() {}
ApplicationImplBase::ApplicationImplBase() : application_binding_(this) {}
void ApplicationImplBase::Initialize(InterfaceHandle<Shell> shell,
Array<String> args,
const mojo::String& url) {
shell_ = ShellPtr::Create(std::move(shell));
shell_.set_connection_error_handler([this]() {
OnQuit();
service_provider_impls_.clear();
Terminate();
});
url_ = url;
args_ = args.To<std::vector<std::string>>();
OnInitialize();
}
void ApplicationImplBase::AcceptConnection(
const String& requestor_url,
InterfaceRequest<ServiceProvider> services,
InterfaceHandle<ServiceProvider> exposed_services,
const String& url) {
// Note: The shell no longer actually connects |exposed_services|, so a) we
// never actually get valid |exposed_services| here, b) it should be OK to
// drop it on the floor.
MOJO_LOG_IF(ERROR, exposed_services)
<< "DEPRECATED: exposed_services is going away";
std::unique_ptr<ServiceProviderImpl> service_provider_impl(
new ServiceProviderImpl(
ConnectionContext(ConnectionContext::Type::INCOMING, requestor_url,
url),
services.Pass()));
if (!OnAcceptConnection(service_provider_impl.get()))
return;
service_provider_impls_.push_back(std::move(service_provider_impl));
}
void ApplicationImplBase::RequestQuit() {
OnQuit();
Terminate();
}
} // namespace mojo