// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SHELL_BACKGROUND_APPLICATION_LOADER_H_
#define SHELL_BACKGROUND_APPLICATION_LOADER_H_

#include "base/macros.h"
#include "base/memory/scoped_ptr.h"
#include "base/message_loop/message_loop.h"
#include "base/synchronization/waitable_event.h"
#include "base/threading/simple_thread.h"
#include "shell/application_manager/application_loader.h"

namespace shell {

class BackgroundApplicationLoader
    : public ApplicationLoader,
      public base::DelegateSimpleThread::Delegate {
 public:
  BackgroundApplicationLoader(scoped_ptr<ApplicationLoader> real_loader,
                              const std::string& thread_name,
                              base::MessageLoop::Type message_loop_type);
  ~BackgroundApplicationLoader() override;

  // ApplicationLoader overrides:
  void Load(
      const GURL& url,
      mojo::InterfaceRequest<mojo::Application> application_request) override;

 private:
  // |base::DelegateSimpleThread::Delegate| method:
  void Run() override;

  // These functions are exected on the background thread. They call through
  // to |background_loader_| to do the actual loading.
  void LoadOnBackgroundThread(
      const GURL& url,
      mojo::InterfaceRequest<mojo::Application> application_request);
  bool quit_on_shutdown_;
  scoped_ptr<ApplicationLoader> loader_;

  const base::MessageLoop::Type message_loop_type_;
  const std::string thread_name_;

  // Created on |thread_| during construction of |this|. Protected against
  // uninitialized use by |message_loop_created_|, and protected against
  // use-after-free by holding a reference to the thread-safe object. Note
  // that holding a reference won't hold |thread_| from exiting.
  scoped_refptr<base::TaskRunner> task_runner_;
  base::WaitableEvent message_loop_created_;

  // Lives on |thread_|.
  base::Closure quit_closure_;

  scoped_ptr<base::DelegateSimpleThread> thread_;

  DISALLOW_COPY_AND_ASSIGN(BackgroundApplicationLoader);
};

}  // namespace shell

#endif  // SHELL_BACKGROUND_APPLICATION_LOADER_H_
