15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// found in the LICENSE file. 45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 56e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "mojo/application/application_runner_chromium.h" 703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "mojo/public/c/system/main.h" 85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "mojo/public/cpp/application/application_delegate.h" 96e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "mojo/public/cpp/application/service_provider_impl.h" 106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "mojo/services/public/cpp/view_manager/view_manager.h" 116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "mojo/services/public/cpp/view_manager/view_manager_delegate.h" 126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "mojo/services/public/cpp/view_manager/window_manager_delegate.h" 135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "mojo/services/window_manager/window_manager_app.h" 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// ApplicationDelegate implementation file for WindowManager users (e.g. 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// core window manager tests) that do not want to provide their own 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// ApplicationDelegate::Create(). 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace mojo { 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class DefaultWindowManager : public ApplicationDelegate, 226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public ViewManagerDelegate, 236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public WindowManagerDelegate { 246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public: 256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DefaultWindowManager() 266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) : window_manager_app_(new WindowManagerApp(this, this)), 276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) view_manager_(NULL), 286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) root_(NULL) {} 296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual ~DefaultWindowManager() {} 306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) private: 326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Overridden from ApplicationDelegate: 336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual void Initialize(ApplicationImpl* impl) MOJO_OVERRIDE { 346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) window_manager_app_->Initialize(impl); 356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual bool ConfigureIncomingConnection( 376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ApplicationConnection* connection) MOJO_OVERRIDE { 386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) window_manager_app_->ConfigureIncomingConnection(connection); 396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return true; 406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Overridden from ViewManagerDelegate: 436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual void OnEmbed( 446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ViewManager* view_manager, 456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) View* root, 466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ServiceProviderImpl* exported_services, 476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) scoped_ptr<ServiceProvider> imported_services) MOJO_OVERRIDE { 486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) view_manager_ = view_manager; 496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) root_ = root; 506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) view_manager_->SetWindowManagerDelegate(this); 516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual void OnViewManagerDisconnected( 536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ViewManager* view_manager) MOJO_OVERRIDE {} 546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Overridden from WindowManagerDelegate: 566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual void Embed( 576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const String& url, 586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) InterfaceRequest<ServiceProvider> service_provider) MOJO_OVERRIDE { 596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) View* view = View::Create(view_manager_); 606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) root_->AddChild(view); 616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) view->Embed(url, scoped_ptr<mojo::ServiceProviderImpl>( 626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) new mojo::ServiceProviderImpl).Pass()); 636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual void DispatchEvent(EventPtr event) MOJO_OVERRIDE {} 656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) scoped_ptr<WindowManagerApp> window_manager_app_; 676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ViewManager* view_manager_; 696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) View* root_; 706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) MOJO_DISALLOW_COPY_AND_ASSIGN(DefaultWindowManager); 726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}; 736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} // namespace mojo 7503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 7603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)MojoResult MojoMain(MojoHandle shell_handle) { 7703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) mojo::ApplicationRunnerChromium runner(new mojo::DefaultWindowManager); 7803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return runner.Run(shell_handle); 7903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 80