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)#include "mojo/public/cpp/application/lib/weak_service_provider.h"
66e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
76e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "mojo/public/cpp/application/service_provider_impl.h"
86e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "mojo/public/interfaces/application/service_provider.mojom.h"
96e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace mojo {
116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace internal {
126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)WeakServiceProvider::WeakServiceProvider(ServiceProviderImpl* creator,
146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                                         ServiceProvider* service_provider)
156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      : creator_(creator),
166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        service_provider_(service_provider) {}
176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)WeakServiceProvider::~WeakServiceProvider() {
196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  if (creator_)
206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    creator_->ClearRemote();
216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void WeakServiceProvider::Clear() {
246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  creator_ = NULL;
256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  service_provider_ = NULL;
266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void WeakServiceProvider::ConnectToService(
296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    const String& service_name,
306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    ScopedMessagePipeHandle client_handle) {
316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  if (service_provider_)
326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    service_provider_->ConnectToService(service_name, client_handle.Pass());
336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}  // namespace internal
366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}  // namespace mojo
37