Home | History | Annotate | Download | only in shell
      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 
     11 namespace mojo {
     12 
     13 class ApplicationManager;
     14 
     15 namespace shell {
     16 class Context;
     17 }
     18 
     19 // ApplicationLoader implementation that creates a background thread and issues
     20 // load
     21 // requests there.
     22 class 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