1010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// found in the LICENSE file.
4010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
5010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "mojo/shell/view_manager_loader.h"
6010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "mojo/public/cpp/application/application_connection.h"
8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "mojo/public/cpp/application/application_impl.h"
9f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "mojo/services/view_manager/view_manager_init_service_impl.h"
10010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
11010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)namespace mojo {
125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)using service::ViewManagerInitServiceImpl;
145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
15010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)namespace shell {
16010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
17010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)ViewManagerLoader::ViewManagerLoader() {
18010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
19010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
20010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)ViewManagerLoader::~ViewManagerLoader() {
21010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
22010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void ViewManagerLoader::Load(ApplicationManager* manager,
245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                             const GURL& url,
255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                             scoped_refptr<LoadCallbacks> callbacks) {
265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  ScopedMessagePipeHandle shell_handle = callbacks->RegisterApplication();
275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  if (!shell_handle.is_valid())
285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return;
295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // TODO(sky): this needs some sort of authentication as well as making sure
31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // we only ever have one active at a time.
32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  scoped_ptr<ApplicationImpl> app(
33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      new ApplicationImpl(this, shell_handle.Pass()));
34010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  apps_.push_back(app.release());
35010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
36010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ViewManagerLoader::OnApplicationError(ApplicationManager* manager,
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                           const GURL& url) {
39010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
40010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool ViewManagerLoader::ConfigureIncomingConnection(
425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    ApplicationConnection* connection)  {
435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  context_.ConfigureIncomingConnection(connection);
445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  connection->AddService(this);
45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return true;
46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void ViewManagerLoader::Create(
495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    ApplicationConnection* connection,
505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    InterfaceRequest<ViewManagerInitService> request) {
515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  BindToRequest(new ViewManagerInitServiceImpl(connection, &context_),
525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                &request);
535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
55010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}  // namespace shell
56010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}  // namespace mojo
57