// 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_APPLICATION_MANAGER_APPLICATION_LOADER_H_
#define SHELL_APPLICATION_MANAGER_APPLICATION_LOADER_H_

#include "base/callback.h"
#include "mojo/public/cpp/system/core.h"
#include "mojo/public/interfaces/application/shell.mojom.h"
#include "mojo/services/network/public/interfaces/url_loader.mojom.h"
#include "shell/application_manager/application_manager_export.h"
#include "url/gurl.h"

namespace mojo {

class Application;
class ApplicationManager;

// Interface to allowing loading behavior to be established for schemes,
// specific urls or as the default.
// A ApplicationLoader is responsible to using whatever mechanism is appropriate
// to load the application at url.
// The handle to the shell is passed to that application so it can bind it to
// a Shell instance. This will give the Application a way to connect to other
// apps and services.
class MOJO_APPLICATION_MANAGER_EXPORT ApplicationLoader {
 public:
  typedef base::Callback<void(const GURL& content_handler_url,
                              InterfaceRequest<Application> application_request,
                              URLResponsePtr url_request)> LoadCallback;
  virtual ~ApplicationLoader() {}

  // Returns a callback that will should never be called.
  static LoadCallback SimpleLoadCallback();

  // Load the application named |url|. Applications can be loaded two ways:
  //
  // 1. |url| can refer directly to a Mojo application. In this case,
  //    shell_handle should be used to implement the mojo.Application interface.
  //
  // 2. |url| can refer to some content that can be handled by some other Mojo
  //    application. In this case, call callbacks and specify the URL of the
  //    application that should handle the content.  The specified application
  //    must implement the mojo.ContentHandler interface.
  virtual void Load(ApplicationManager* application_manager,
                    const GURL& url,
                    InterfaceRequest<Application> application_request,
                    LoadCallback callback) = 0;

  // Called when the Application exits.
  virtual void OnApplicationError(ApplicationManager* manager,
                                  const GURL& url) = 0;

 protected:
  ApplicationLoader() {}
};

}  // namespace mojo

#endif  // SHELL_APPLICATION_MANAGER_APPLICATION_LOADER_H_
