#!mojo mojo:js_content_handler
// Demonstrate using the mojo window_manager application to "embed" a view that
// displays an image. To run this application set BUILD_DIR to the build
// directory (like "src/out/Debug") and append a PNG image URL as the url
// paramaeter for: absolute path for this directory, then:
//   sky/tools/skydb start $BUILD_DIR examples/js/show_image.js?url=<PNG URL>
// The skydb application starts an HTTP server that points at the build and
// and source directories. It starts a simple - just one view - window manager
// and then embeds this application in its root view. This application just
// asks the same window manager to embed the PNG viewer. Doing so effectively
// removes this application from the window manager's root view.

define("main", [
  "mojo/services/public/js/application",
  "mojo/services/public/js/service_provider",
  "mojo/services/window_manager/public/interfaces/window_manager.mojom",
  "third_party/js/url",
], function(application, serviceProvider, windowManager, url) {

  const Application = application.Application;
  const ServiceProvider = serviceProvider.ServiceProvider;
  const WindowManager = windowManager.WindowManager;
  const URL = url.URL;
  const defaultImageURL =
      "http://upload.wikimedia.org/wikipedia/commons/8/87/Google_Chrome_icon_%282011%29.png";

  class ShowImage extends Application {
    initialize() {
      var imageURL = new URL(this.url, true).query.url || defaultImageURL;
      var windowManager = this.shell.connectToService(
          "mojo:window_manager", WindowManager);
      windowManager.embed(imageURL, function() { /* no ServiceProvider */ });

      // Displaying imageURL is now the responsibility of the Mojo application
      // launched by its content handler. We're done.
      this.quit();
    }
  }

  return ShowImage;
});

