16e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
26e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
36e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// found in the LICENSE file.
46e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
56e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#ifndef MOJO_PUBLIC_APPLICATION_LIB_WEAK_SERVICE_PROVIDER_H_
66e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#define MOJO_PUBLIC_APPLICATION_LIB_WEAK_SERVICE_PROVIDER_H_
76e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
86e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "mojo/public/interfaces/application/service_provider.mojom.h"
96e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace mojo {
116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class ServiceProviderImpl;
126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace internal {
136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class ServiceConnectorBase;
146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Implements a weak pointer to a ServiceProvider. Necessary as the lifetime of
166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// the ServiceProviderImpl is bound to that of its pipe, but code may continue
176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// to reference a remote service provider beyond the lifetime of said pipe.
186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Calls to ConnectToService() are silently dropped when the pipe is closed.
196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class WeakServiceProvider : public ServiceProvider {
206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public:
216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  WeakServiceProvider(ServiceProviderImpl* creator,
226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                      ServiceProvider* service_provider);
236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual ~WeakServiceProvider();
246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  void Clear();
266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) private:
286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // Overridden from ServiceProvider:
296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual void ConnectToService(
306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      const String& service_name,
316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      ScopedMessagePipeHandle client_handle) MOJO_OVERRIDE;
326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  ServiceProviderImpl* creator_;
346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  ServiceProvider* service_provider_;
356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  MOJO_DISALLOW_COPY_AND_ASSIGN(WeakServiceProvider);
376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)};
386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}  // namespace internal
406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}  // namespace mojo
416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif  // MOJO_PUBLIC_APPLICATION_LIB_WEAK_SERVICE_PROVIDER_H_
43