···
+
machine.imports = [ ./common/user-account.nix ./common/x11.nix ];
machine.virtualisation.memorySize = 2047;
+
machine.services.xserver.displayManager.auto.user = "alice";
machine.environment.systemPackages = [ chromiumPkg ];
startupHTML = pkgs.writeText "chromium-startup.html" ''
···
xdoScript = pkgs.writeText "${name}.xdo" text;
in "${pkgs.xdotool}/bin/xdotool '${xdoScript}'";
+
my $esc = $_[0] =~ s/'/'\\${"'"}'/gr;
+
return "su - alice -c '$esc'";
$machine->nest("creating a new Chromium window", sub {
+
$machine->execute(ru "${xdo "new-window" ''
search --onlyvisible --name "startup done"
+
$machine->execute(ru "${xdo "new-window" ''
···
+
$machine->execute(ru "${xdo "close-window" ''
search --onlyvisible --name "new tab"
+
$machine->execute(ru "${xdo "close-window" ''
+
my ($status, $out) = $machine->execute(ru "${xdo "wait-for-close" ''
search --onlyvisible --name "new tab"
return 1 if $status != 0;
···
$machine->nest("waiting for new Chromium window to appear", sub {
+
my ($status, $out) = $machine->execute(ru "${xdo "wait-for-window" ''
search --onlyvisible --name "new tab"
···
my $url = "file://${startupHTML}";
+
$machine->execute(ru "ulimit -c unlimited; chromium \"$url\" & disown");
$machine->waitForText(qr/startup done/);
+
$machine->waitUntilSucceeds(ru "${xdo "check-startup" ''
search --sync --onlyvisible --name "startup done"
# close first start help popup
···
$machine->screenshot("startup_done");
testNewWin "check sandbox", sub {
+
$machine->succeed(ru "${xdo "type-url" ''
search --sync --onlyvisible --name "new tab"
type --delay 1000 "chrome://sandbox"
+
$machine->succeed(ru "${xdo "submit-url" ''
search --sync --onlyvisible --name "new tab"
···
$machine->screenshot("sandbox_info");
+
$machine->succeed(ru "${xdo "submit-url" ''
search --sync --onlyvisible --name "sandbox status"
+
$machine->succeed(ru "${xdo "submit-url" ''
key --delay 1000 Ctrl+a Ctrl+c
+
my $clipboard = $machine->succeed(ru "${pkgs.xclip}/bin/xclip -o");
die "sandbox not working properly: $clipboard"
unless $clipboard =~ /namespace sandbox.*yes/mi
&& $clipboard =~ /pid namespaces.*yes/mi