/* Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/publicdomain/zero/1.0/
 */

"use strict";

function makeChan(uri, isPrivate) {
  var chan = NetUtil.newChannel({
    uri: uri.spec,
    loadUsingSystemPrincipal: true,
  }).QueryInterface(Ci.nsIHttpChannel);

  chan.QueryInterface(Ci.nsIPrivateBrowsingChannel).setPrivate(isPrivate);
  return chan;
}

function run_test() {
  // We don't want to have CookieJarSettings blocking this test.
  Services.prefs.setBoolPref(
    "network.cookieJarSettings.unblocked_for_testing",
    true
  );

  // Allow all cookies.
  Services.prefs.setIntPref("network.cookie.cookieBehavior", 0);

  let publicNotifications = 0;
  let privateNotifications = 0;
  Services.obs.addObserver(function () {
    publicNotifications++;
  }, "cookie-changed");
  Services.obs.addObserver(function () {
    privateNotifications++;
  }, "private-cookie-changed");

  let uri = NetUtil.newURI("http://foo.com/");
  let publicChan = makeChan(uri, false);
  let svc = Services.cookies.QueryInterface(Ci.nsICookieService);
  svc.setCookieStringFromHttp(uri, "oh=hai", publicChan);
  let privateChan = makeChan(uri, true);
  svc.setCookieStringFromHttp(uri, "oh=hai", privateChan);
  Assert.equal(publicNotifications, 1);
  Assert.equal(privateNotifications, 1);
}
