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