var conn = PlacesUtils.history.DBConnection;

/**
 * Gets a single column value from either the places or historyvisits table.
 */
function getColumn(table, column, url) {
  var stmt = conn.createStatement(
    `SELECT ${column} FROM ${table} WHERE url_hash = hash(:val) AND url = :val`
  );
  try {
    stmt.params.val = url;
    stmt.executeStep();
    return stmt.row[column];
  } finally {
    stmt.finalize();
  }
}

add_task(async function () {
  // Make sure titles are correctly saved for a URI with the proper
  // notifications.
  const titleChangedPromise =
    PlacesTestUtils.waitForNotification("page-title-changed");

  const url1 =
    "https://example.com/tests/toolkit/components/places/tests/browser/title1.html";
  await BrowserTestUtils.openNewForegroundTab(gBrowser, url1);

  const url2 =
    "https://example.com/tests/toolkit/components/places/tests/browser/title2.html";
  let loadPromise = BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser);
  BrowserTestUtils.startLoadingURIString(gBrowser.selectedBrowser, url2);
  await loadPromise;

  const events = await titleChangedPromise;
  is(
    events[0].url,
    "https://example.com/tests/toolkit/components/places/tests/browser/title2.html"
  );
  is(events[0].title, "Some title");
  is(events[0].pageGuid, getColumn("moz_places", "guid", events[0].url));

  const title = getColumn("moz_places", "title", events[0].url);
  is(title, events[0].title);

  gBrowser.removeCurrentTab();
  await PlacesUtils.history.clear();
});
