1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef MOJO_SHELL_UI_APPLICATION_LOADER_ANDROID_H_ 6#define MOJO_SHELL_UI_APPLICATION_LOADER_ANDROID_H_ 7 8#include "base/memory/scoped_ptr.h" 9#include "mojo/application_manager/application_loader.h" 10 11namespace mojo { 12 13class ApplicationManager; 14 15namespace shell { 16class Context; 17} 18 19// ApplicationLoader implementation that creates a background thread and issues 20// load 21// requests there. 22class UIApplicationLoader : public ApplicationLoader { 23 public: 24 UIApplicationLoader(scoped_ptr<ApplicationLoader> real_loader, 25 shell::Context* context); 26 virtual ~UIApplicationLoader(); 27 28 // ApplicationLoader overrides: 29 virtual void Load(ApplicationManager* manager, 30 const GURL& url, 31 scoped_refptr<LoadCallbacks> callbacks) OVERRIDE; 32 virtual void OnApplicationError(ApplicationManager* manager, 33 const GURL& url) OVERRIDE; 34 35 private: 36 class UILoader; 37 38 // These functions are exected on the background thread. They call through 39 // to |background_loader_| to do the actual loading. 40 // TODO: having this code take a |manager| is fragile (as ApplicationManager 41 // isn't thread safe). 42 void LoadOnUIThread(ApplicationManager* manager, 43 const GURL& url, 44 ScopedMessagePipeHandle* shell_handle); 45 void OnApplicationErrorOnUIThread(ApplicationManager* manager, 46 const GURL& url); 47 void ShutdownOnUIThread(); 48 49 scoped_ptr<ApplicationLoader> loader_; 50 shell::Context* context_; 51 52 // Lives on the UI thread. Trivial interface that calls through to |loader_|. 53 UILoader* ui_loader_; 54 55 DISALLOW_COPY_AND_ASSIGN(UIApplicationLoader); 56}; 57 58} // namespace mojo 59 60#endif // MOJO_SHELL_UI_APPLICATION_LOADER_ANDROID_H_ 61