/* Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/publicdomain/zero/1.0/ */
/* global Services, requestLongerTimeout, TestUtils, BrowserTestUtils,
 ok, info, dump, is, Ci, Cu, Components, ctypes, privateNoteIntentionalCrash,
 gBrowser, add_task, addEventListener, removeEventListener, ContentTask */

"use strict";

// Running this test in ASAN is slow.
requestLongerTimeout(2);

/**
 * Removes a file from a directory. This is a no-op if the file does not
 * exist.
 *
 * @param directory
 *        The nsIFile representing the directory to remove from.
 * @param filename
 *        A string for the file to remove from the directory.
 */
function removeFile(directory, filename) {
  let file = directory.clone();
  file.append(filename);
  if (file.exists()) {
    file.remove(false);
  }
}

/**
 * Returns the directory where crash dumps are stored.
 *
 * @return nsIFile
 */
function getMinidumpDirectory() {
  let dir = Services.dirsvc.get('ProfD', Ci.nsIFile);
  dir.append("minidumps");
  return dir;
}

/**
 * Checks that the URL is correctly annotated on a content process crash.
 */
add_task(function* test_content_url_annotation() {
  let url = "https://example.com/browser/toolkit/content/tests/browser/file_redirect.html";
  let redirect_url = "https://example.com/browser/toolkit/content/tests/browser/file_redirect_to.html";

  yield BrowserTestUtils.withNewTab({
    gBrowser: gBrowser
  }, function* (browser) {
    ok(browser.isRemoteBrowser, "Should be a remote browser");

    // file_redirect.html should send us to file_redirect_to.html
    let promise = ContentTask.spawn(browser, {}, function* () {
      dump('ContentTask starting...\n');
      yield new Promise((resolve) => {
        addEventListener("RedirectDone", function listener() {
          dump('Got RedirectDone\n');
          removeEventListener("RedirectDone", listener);
          resolve();
        }, true, true);
      });
    });
    browser.loadURI(url);
    yield promise;

    // Crash the tab
    let annotations = yield BrowserTestUtils.crashBrowser(browser);

    ok("URL" in annotations, "annotated a URL");
    is(annotations.URL, redirect_url,
       "Should have annotated the URL after redirect");
  });
});
