blob: ff1b8eb0760fdfd6ddb032e94ff5ff32b54f138b [file] [log] [blame]
// 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/services/public/cpp/view_manager/view_manager_context.h"
#include "mojo/public/cpp/application/application_impl.h"
#include "mojo/public/cpp/bindings/interface_request.h"
#include "mojo/services/public/interfaces/window_manager/window_manager.mojom.h"
namespace mojo {
class ApplicationImpl;
class ViewManagerContext::InternalState {
public:
explicit InternalState(ApplicationImpl* application_impl) {
application_impl->ConnectToService("mojo:window_manager", &wm_);
}
~InternalState() {}
WindowManager* wm() { return wm_.get(); }
private:
WindowManagerPtr wm_;
MOJO_DISALLOW_COPY_AND_ASSIGN(InternalState);
};
ViewManagerContext::ViewManagerContext(ApplicationImpl* application_impl)
: state_(new InternalState(application_impl)) {}
ViewManagerContext::~ViewManagerContext() {}
void ViewManagerContext::Embed(const String& url) {
scoped_ptr<ServiceProviderImpl> spi(new ServiceProviderImpl);
Embed(url, spi.Pass());
}
scoped_ptr<ServiceProvider> ViewManagerContext::Embed(
const String& url,
scoped_ptr<ServiceProviderImpl> exported_services) {
scoped_ptr<ServiceProvider> imported_services;
// BindToProxy() takes ownership of |exported_services|.
ServiceProviderImpl* registry = exported_services.release();
ServiceProviderPtr sp;
if (registry) {
BindToProxy(registry, &sp);
imported_services.reset(registry->CreateRemoteServiceProvider());
}
state_->wm()->Embed(url, MakeRequest<ServiceProvider>(sp.PassMessagePipe()));
return imported_services.Pass();
}
} // namespace mojo