// 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. #ifndef MOJO_PUBLIC_CPP_APPLICATION_LAZY_INTERFACE_PTR_H_ #define MOJO_PUBLIC_CPP_APPLICATION_LAZY_INTERFACE_PTR_H_ #include "mojo/public/cpp/application/connect.h" #include "mojo/public/interfaces/application/service_provider.mojom.h" namespace mojo { template class LazyInterfacePtr : public InterfacePtr { public: LazyInterfacePtr() : service_provider_(nullptr) {} LazyInterfacePtr(ServiceProvider* service_provider) : service_provider_(service_provider) {} void set_service_provider(ServiceProvider* service_provider) { if (service_provider != service_provider_) { InterfacePtr::reset(); } service_provider_ = service_provider; } Interface* get() const { if (!InterfacePtr::get() && service_provider_) { mojo::ConnectToService( service_provider_, const_cast*>(this)); } return InterfacePtr::get(); } Interface* operator->() const { return get(); } Interface& operator*() const { return *get(); } private: ServiceProvider* service_provider_; }; } // namespace mojo #endif // MOJO_PUBLIC_CPP_APPLICATION_LAZY_INTERFACE_PTR_H_