11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved. 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file. 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "mojo/services/public/cpp/view_manager/view_manager_context.h" 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "mojo/public/cpp/application/application_impl.h" 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "mojo/services/public/interfaces/view_manager/view_manager.mojom.h" 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace mojo { 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass ApplicationImpl; 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ConnectCallback(bool success) {} 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass ViewManagerContext::InternalState { 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public: 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci InternalState(ApplicationImpl* application_impl) { 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci application_impl->ConnectToService("mojo:mojo_view_manager", 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &init_service_); 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ~InternalState() {} 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ViewManagerInitService* init_service() { return init_service_.get(); } 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private: 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ViewManagerInitServicePtr init_service_; 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MOJO_DISALLOW_COPY_AND_ASSIGN(InternalState); 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciViewManagerContext::ViewManagerContext(ApplicationImpl* application_impl) 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : state_(new InternalState(application_impl)) {} 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciViewManagerContext::~ViewManagerContext() {} 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ViewManagerContext::Embed(const String& url) { 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<ServiceProviderImpl> spi(new ServiceProviderImpl); 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Embed(url, spi.Pass()); 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciscoped_ptr<ServiceProvider> ViewManagerContext::Embed( 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const String& url, 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<ServiceProviderImpl> exported_services) { 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<ServiceProvider> imported_services; 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // BindToProxy() takes ownership of |exported_services|. 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ServiceProviderImpl* registry = exported_services.release(); 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ServiceProviderPtr sp; 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (registry) { 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci BindToProxy(registry, &sp); 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci imported_services.reset(registry->CreateRemoteServiceProvider()); 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci state_->init_service()->Embed(url, sp.Pass(), base::Bind(&ConnectCallback)); 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return imported_services.Pass(); 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace mojo 56