| Index: mojo/shell/external_application_listener_posix.cc
|
| diff --git a/mojo/shell/external_application_listener_posix.cc b/mojo/shell/external_application_listener_posix.cc
|
| deleted file mode 100644
|
| index d8ed8918dbe381fc66276ce32833a2cdaa4af759..0000000000000000000000000000000000000000
|
| --- a/mojo/shell/external_application_listener_posix.cc
|
| +++ /dev/null
|
| @@ -1,200 +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/shell/external_application_listener_posix.h"
|
| -
|
| -#include "base/callback.h"
|
| -#include "base/files/file_path.h"
|
| -#include "base/files/file_util.h"
|
| -#include "base/logging.h"
|
| -#include "base/memory/ref_counted.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/message_loop/message_loop.h"
|
| -#include "base/sequenced_task_runner.h"
|
| -#include "base/synchronization/waitable_event.h"
|
| -#include "base/threading/thread_checker.h"
|
| -#include "base/tracked_objects.h"
|
| -#include "mojo/common/common_type_converters.h"
|
| -#include "mojo/edk/embedder/channel_init.h"
|
| -#include "mojo/public/cpp/bindings/error_handler.h"
|
| -#include "mojo/shell/domain_socket/net_errors.h"
|
| -#include "mojo/shell/domain_socket/socket_descriptor.h"
|
| -#include "mojo/shell/external_application_registrar.mojom.h"
|
| -#include "mojo/shell/incoming_connection_listener_posix.h"
|
| -#include "url/gurl.h"
|
| -
|
| -namespace mojo {
|
| -namespace shell {
|
| -
|
| -namespace {
|
| -const char kDefaultListenSocketPath[] = "/var/run/mojo/system_socket";
|
| -} // namespace
|
| -
|
| -// static
|
| -base::FilePath ExternalApplicationListener::ConstructDefaultSocketPath() {
|
| - return base::FilePath(FILE_PATH_LITERAL(kDefaultListenSocketPath));
|
| -}
|
| -
|
| -// static
|
| -scoped_ptr<ExternalApplicationListener> ExternalApplicationListener::Create(
|
| - const scoped_refptr<base::SequencedTaskRunner>& shell_runner,
|
| - const scoped_refptr<base::SequencedTaskRunner>& io_runner) {
|
| - return make_scoped_ptr(
|
| - new ExternalApplicationListenerPosix(shell_runner, io_runner));
|
| -}
|
| -
|
| -class ExternalApplicationListenerPosix::RegistrarImpl
|
| - : public InterfaceImpl<ExternalApplicationRegistrar> {
|
| - public:
|
| - explicit RegistrarImpl(const RegisterCallback& callback);
|
| - ~RegistrarImpl() override;
|
| -
|
| - void OnConnectionError() override;
|
| -
|
| - embedder::ChannelInit channel_init;
|
| -
|
| - private:
|
| - virtual void Register(
|
| - const String& app_url,
|
| - const mojo::Callback<void(ShellPtr)>& callback) override;
|
| -
|
| - const RegisterCallback register_callback_;
|
| -};
|
| -
|
| -ExternalApplicationListenerPosix::ExternalApplicationListenerPosix(
|
| - const scoped_refptr<base::SequencedTaskRunner>& shell_runner,
|
| - const scoped_refptr<base::SequencedTaskRunner>& io_runner)
|
| - : shell_runner_(shell_runner),
|
| - io_runner_(io_runner),
|
| - signal_on_listening_(true, false),
|
| - weak_ptr_factory_(this) {
|
| - DCHECK(shell_runner_.get() && shell_runner_->RunsTasksOnCurrentThread());
|
| - DCHECK(io_runner_.get());
|
| - listener_thread_checker_.DetachFromThread(); // Will attach in StartListener.
|
| -}
|
| -
|
| -ExternalApplicationListenerPosix::~ExternalApplicationListenerPosix() {
|
| - DCHECK(register_thread_checker_.CalledOnValidThread());
|
| - weak_ptr_factory_.InvalidateWeakPtrs();
|
| -
|
| - // listener_ needs to be destroyed on io_runner_, and it has to die before
|
| - // this object does, as it holds a pointer back to this instance.
|
| - base::WaitableEvent stop_listening_event(true, false);
|
| - io_runner_->PostTask(
|
| - FROM_HERE,
|
| - base::Bind(&ExternalApplicationListenerPosix::StopListening,
|
| - base::Unretained(this),
|
| - &stop_listening_event));
|
| - stop_listening_event.Wait();
|
| -}
|
| -
|
| -void ExternalApplicationListenerPosix::ListenInBackground(
|
| - const base::FilePath& listen_socket_path,
|
| - const RegisterCallback& register_callback) {
|
| - DCHECK(register_thread_checker_.CalledOnValidThread());
|
| - ListenInBackgroundWithErrorCallback(
|
| - listen_socket_path, register_callback, ErrorCallback());
|
| -}
|
| -
|
| -void ExternalApplicationListenerPosix::ListenInBackgroundWithErrorCallback(
|
| - const base::FilePath& listen_socket_path,
|
| - const RegisterCallback& register_callback,
|
| - const ErrorCallback& error_callback) {
|
| - DCHECK(register_thread_checker_.CalledOnValidThread());
|
| - register_callback_ = register_callback;
|
| - error_callback_ = error_callback;
|
| -
|
| - io_runner_->PostTask(
|
| - FROM_HERE,
|
| - base::Bind(&ExternalApplicationListenerPosix::StartListening,
|
| - base::Unretained(this),
|
| - listen_socket_path));
|
| -}
|
| -
|
| -void ExternalApplicationListenerPosix::WaitForListening() {
|
| - DCHECK(register_thread_checker_.CalledOnValidThread());
|
| - signal_on_listening_.Wait();
|
| -}
|
| -
|
| -void ExternalApplicationListenerPosix::StartListening(
|
| - const base::FilePath& listen_socket_path) {
|
| - CHECK_EQ(base::MessageLoop::current()->type(), base::MessageLoop::TYPE_IO);
|
| - DCHECK(listener_thread_checker_.CalledOnValidThread());
|
| - listener_.reset(
|
| - new IncomingConnectionListenerPosix(listen_socket_path, this));
|
| - listener_->StartListening();
|
| -}
|
| -
|
| -void ExternalApplicationListenerPosix::StopListening(
|
| - base::WaitableEvent* event) {
|
| - DCHECK(listener_thread_checker_.CalledOnValidThread());
|
| - listener_.reset();
|
| - event->Signal();
|
| -}
|
| -
|
| -void ExternalApplicationListenerPosix::OnListening(int rv) {
|
| - DCHECK(listener_thread_checker_.CalledOnValidThread());
|
| - signal_on_listening_.Signal();
|
| - shell_runner_->PostTask(
|
| - FROM_HERE,
|
| - base::Bind(
|
| - &ExternalApplicationListenerPosix::RunErrorCallbackIfListeningFailed,
|
| - weak_ptr_factory_.GetWeakPtr(),
|
| - rv));
|
| -}
|
| -
|
| -void ExternalApplicationListenerPosix::OnConnection(SocketDescriptor incoming) {
|
| - DCHECK(listener_thread_checker_.CalledOnValidThread());
|
| - shell_runner_->PostTask(
|
| - FROM_HERE,
|
| - base::Bind(
|
| - &ExternalApplicationListenerPosix::CreatePipeAndBindToRegistrarImpl,
|
| - weak_ptr_factory_.GetWeakPtr(),
|
| - incoming));
|
| -}
|
| -
|
| -void ExternalApplicationListenerPosix::RunErrorCallbackIfListeningFailed(
|
| - int rv) {
|
| - DCHECK(register_thread_checker_.CalledOnValidThread());
|
| - if (rv != net::OK && !error_callback_.is_null()) {
|
| - error_callback_.Run(rv);
|
| - }
|
| -}
|
| -
|
| -void ExternalApplicationListenerPosix::CreatePipeAndBindToRegistrarImpl(
|
| - SocketDescriptor incoming_socket) {
|
| - DCHECK(register_thread_checker_.CalledOnValidThread());
|
| -
|
| - DVLOG(1) << "Accepted incoming connection";
|
| - scoped_ptr<RegistrarImpl> registrar(new RegistrarImpl(register_callback_));
|
| - // Passes ownership of incoming_socket to registrar->channel_init.
|
| - mojo::ScopedMessagePipeHandle message_pipe =
|
| - registrar->channel_init.Init(incoming_socket, io_runner_);
|
| - CHECK(message_pipe.is_valid());
|
| -
|
| - BindToPipe(registrar.release(), message_pipe.Pass());
|
| -}
|
| -
|
| -ExternalApplicationListenerPosix::RegistrarImpl::RegistrarImpl(
|
| - const RegisterCallback& callback)
|
| - : register_callback_(callback) {
|
| -}
|
| -
|
| -ExternalApplicationListenerPosix::RegistrarImpl::~RegistrarImpl() {
|
| -}
|
| -
|
| -void ExternalApplicationListenerPosix::RegistrarImpl::OnConnectionError() {
|
| - channel_init.WillDestroySoon();
|
| -}
|
| -
|
| -void ExternalApplicationListenerPosix::RegistrarImpl::Register(
|
| - const String& app_url,
|
| - const mojo::Callback<void(ShellPtr)>& callback) {
|
| - MessagePipe pipe;
|
| - register_callback_.Run(app_url.To<GURL>(), pipe.handle0.Pass());
|
| - callback.Run(MakeProxy<Shell>(pipe.handle1.Pass()));
|
| -}
|
| -
|
| -} // namespace shell
|
| -} // namespace mojo
|
|
|