<?xml version="1.0" encoding="UTF-8" ?>

<node name="/org/chromium/debugd"
      xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
  <interface name="org.chromium.debugd">
    <method name="PingStart">
      <tp:docstring>
        Starts pinging the specified hostname with the specified options, with
        output directed to the given output file descriptor. The returned opaque
        string functions as a handle for this particular ping. Multiple pings
        can be running at once.
      </tp:docstring>
      <arg name="outfd" type="h" direction="in">
        <tp:docstring>
          File descriptor to send output to.
        </tp:docstring>
      </arg>
      <arg name="destination" type="s" direction="in">
        <tp:docstring>
          Destination host to connect to.
        </tp:docstring>
      </arg>
      <arg name="options" type="a{sv}" direction="in">
        <tp:docstring>
          Options to pass to the ping command. Accepted keys include:
            broadcast (bool): Send broadcast pings.
            count (int default 4): Number of packets to send.
            interval (int): Time to wait between packets.
            numeric (bool): Print numeric remote hosts.
            packetsize (int): Size of each packet sent.
            v6 (bool): True for ipv6.
            waittime (int): Time to wait for a response.
          Unrecognized keys return a DBus error and print no output to the
          supplied file descriptor.
        </tp:docstring>
      </arg>
      <arg name="handle" type="s" direction="out">
        <tp:docstring>
          Opaque handle for this ping.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="PingStop">
      <tp:docstring>
        Stops a running ping.
      </tp:docstring>
      <arg name="handle" type="s" direction="in">
        Handle to the ping to stop. If an empty string is passed, stops all
        running pings.
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="SystraceStart">
      <tp:docstring>
        Start system/kernel tracing.  If tracing is already enabled it is
        stopped first and any collected events are discarded.  The kernel
        must have been configured to support tracing.
      </tp:docstring>
      <arg name="categories" type="s" direction="in">
        <tp:docstring>
          Trace event categories to enable.  If none are specified then
          all known events are enabled.  Multiple categories are specified
          separated by spaces.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="SystraceStop">
      <tp:docstring>
        Stop system/kernel tracing and write the collected event data.
      </tp:docstring>
      <arg name="outfd" type="h" direction="in">
        <tp:docstring>
          File descriptor to send event data to.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="SystraceStatus">
      <tp:docstring>
        Return current status for system/kernel tracing including whether it
        is enabled, the tracing clock, and the set of events enabled.
      </tp:docstring>
      <arg name="status" type="s" direction="out">
        Free-form text reporting status.
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="TracePathStart">
      <arg name="outfd" type="h" direction="in">
        <tp:docstring>
          File descriptor to send output to.
        </tp:docstring>
      </arg>
      <arg name="destination" type="s" direction="in">
        <tp:docstring>
          Destination host[/port] to trace a path to.
        </tp:docstring>
      </arg>
      <arg name="options" type="a{sv}" direction="in">
        <tp:docstring>
          Options to pass to the tracepath command:
            numeric (bool): Print numeric remote hosts.
            v6 (bool): True for ipv6.
          Unrecognized keys return a DBus error and print no output to the
          supplied file descriptor.
        </tp:docstring>
      </arg>
      <arg name="handle" type="s" direction="out">
        <tp:docstring>
          Opaque handle for this ping.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="TracePathStop">
      <tp:docstring>
        Stops a running tracepath.
      </tp:docstring>
      <arg name="handle" type="s" direction="in">
        <tp:docstring>
          Handle to the tracepath to stop. If an empty string is passed, stops
          all running tracepaths.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="GetRoutes">
      <tp:docstring>
        Returns the routing table.
      </tp:docstring>
      <arg name="options" type="a{sv}" direction="in">
        <tp:docstring>
          Options:
            numeric (bool): Deprecated, numeric hosts are always given.
            v6 (bool): True for ipv6.
        </tp:docstring>
      </arg>
      <arg name="result" type="as" direction="out">
        <tp:docstring>
          The list of routes.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="GetModemStatus">
      <tp:docstring>
        Returns modem information as a JSON string. See the design document for
        a rationale.
      </tp:docstring>
      <arg name="status" type="s" direction="out">
        <tp:docstring>
          Modem information as a JSON string.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="RunModemCommand">
      <tp:docstring>
        Runs the specified command through the modem serial interface and
        returns the output.
      </tp:docstring>
      <arg name="command" type="s" direction="in">
        <tp:docstring>
          Supported commands: get-oma-status, start-oma, get-prl, ciprl-update,
          get-service.
        </tp:docstring>
      </arg>
      <arg name="status" type="s" direction="out" />
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="GetNetworkStatus">
      <tp:docstring>
        Returns network information as a JSON string. See the design document
        for a rationale.
      </tp:docstring>
      <arg name="status" type="s" direction="out">
        <tp:docstring>
          Network information as a JSON string.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="GetWiMaxStatus">
      <tp:docstring>
        Returns WiMAX information as a JSON string. See the design document for
        a rationale.
      </tp:docstring>
      <arg name="status" type="s" direction="out">
        <tp:docstring>
          WiMAX information as a JSON string.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="GetPerfOutput">
      <tp:docstring>
        Runs system-wide perf profiling. The profile parameters are selected by
        perf_args.
      </tp:docstring>
      <arg name="duration_sec" type="u" direction="in">
        <tp:docstring>
          Duration to run perf in seconds.
        </tp:docstring>
      </arg>
      <arg name="perf_args" type="as" direction="in">
        <tp:docstring>
          The perf parameters to pass to quipper, which will forward them to
          perf after checking they are safe.
        </tp:docstring>
      </arg>
      <arg name="status" type="i" direction="out">
        <tp:docstring>
          Status code from running perf and serializing the output.
        </tp:docstring>
      </arg>
      <arg name="perf_data" type="ay" direction="out">
        <tp:docstring>
          Perf report output data as a protobuf.
        </tp:docstring>
      </arg>
      <arg name="perf_stat" type="ay" direction="out">
        <tp:docstring>
          Perf stat output data as a protobuf.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="GetPerfOutputFd">
      <tp:docstring>
        Runs system-wide perf profiling. The profile parameters are selected by
        perf_args.
      </tp:docstring>
      <arg name="duration_sec" type="u" direction="in">
        <tp:docstring>
          Duration to run perf in seconds.
        </tp:docstring>
      </arg>
      <arg name="perf_args" type="as" direction="in">
        <tp:docstring>
          The perf parameters to pass to quipper, which will forward them to
          perf after checking they are safe.
        </tp:docstring>
      </arg>
      <arg name="stdout" type="h" direction="in">
        <tp:docstring>
          quipper's stdout will be connected to this file descriptor.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="DumpDebugLogs">
      <tp:docstring>
        Packages up system logs into a .tar(.gz) and returns it over the
        supplied file descriptor.
      </tp:docstring>
      <arg name="is_compressed" type="b" direction="in">
        <tp:docstring>
          If true, output content should be compressed (.tar.gz), otherwise
          output content is uncompressed (.tar).
        </tp:docstring>
      </arg>
      <arg name="outfd" type="h" direction="in">
        <tp:docstring>
          File descriptor to emit the .tar.gz file over.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="SetDebugMode">
      <tp:docstring>
        Enables or disables debug mode for a specified subsystem.
      </tp:docstring>
      <arg name="subsystem" type="s" direction="in">
        <tp:docstring>
          Subsystem to change the debug mode of. One of "cellular", "wifi",
          "wimax", "ethernet" or "none".
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="GetLog">
      <tp:docstring>
        Fetches the contents of a single system log, identified by name. See
        /src/log_tool.cc for a list of valid names.
      </tp:docstring>
      <arg name="log" type="s" direction="in" />
      <arg name="contents" type="s" direction="out" />
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="GetAllLogs">
      <tp:docstring>
        Returns all the system logs.
      </tp:docstring>
      <arg name="logs" type="a{ss}" direction="out" />
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="GetFeedbackLogs">
      <tp:docstring>
        Returns system logs for feedback reports.
      </tp:docstring>
      <arg name="logs" type="a{ss}" direction="out" />
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="GetBigFeedbackLogs">
      <tp:docstring>
        Fills the system logs for feedback reports in the file whose file
        descriptor is given. This is used for logs that are so big that they
        exceed the limits of D-Bus returning them.
      </tp:docstring>
      <arg name="outfd" type="h" direction="in">
        <tp:docstring>
          File descriptor to emit the logs to.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="GetUserLogFiles">
      <tp:docstring>
        Returns list of User log file names that Chrome itself must collect.
        These logfiles are relative to the user's profile path and must be
        collected separately for each user.
      </tp:docstring>
      <arg name="user_log_files" type="a{ss}" direction="out" />
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="GetExample">
      <tp:docstring>
        Example method. See /doc/hacking.md.
      </tp:docstring>
      <arg name="result" type="s" direction="out" />
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="CupsAddAutoConfiguredPrinter">
      <tp:docstring>
        Add a printer that can be auto-configured to CUPS.  Immediately attempt
        to connect.  Returns true if setup was successful.
      </tp:docstring>
      <arg name="result" type="i" direction="out" />
      <arg name="name" type="s" direction="in" />
      <arg name="uri" type="s" direction="in" />
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="CupsAddManuallyConfiguredPrinter">
      <tp:docstring>
        Add a printer to CUPS using the passed PPD contents.  Immediately
        attempt to connect.  Returns true if setup was successful.
      </tp:docstring>
      <arg name="result" type="i" direction="out" />
      <arg name="name" type="s" direction="in" />
      <arg name="uri" type="s" direction="in" />
      <arg name="ppd_contents" type="ay" direction="in">
        <tp:docstring>
          The contents of the CUPS Postscript Printer Driver for this printer.
          This data may optionally be gzip compressed.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="CupsRemovePrinter">
      <tp:docstring>
        Remove a printer from CUPS.  Returns true if the printer was removed
        successfully.
      </tp:docstring>
      <arg name="result" type="b" direction="out" />
      <arg name="name" type="s" direction="in">
        <tp:docstring>
          The name of the printer to remove.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="CupsResetState">
      <tp:docstring>
        Stop CUPS daemon and reset its state.
      </tp:docstring>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="GetInterfaces">
      <tp:docstring>
        Returns information about network interfaces as a JSON string.
      </tp:docstring>
      <arg name="result" type="s" direction="out" />
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="TestICMP">
      <tp:docstring>
        Tests ICMP connectivity to a specified host.
      </tp:docstring>
      <arg name="host" type="s" direction="in" />
      <arg name="result" type="s" direction="out" />
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="TestICMPWithOptions">
      <tp:docstring>
        Tests ICMP connectivity to a specified host (with options).
      </tp:docstring>
      <arg name="host" type="s" direction="in" />
      <arg name="options" type="a{ss}" direction="in" />
      <arg name="result" type="s" direction="out" />
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="BatteryFirmware">
      <tp:docstring>
        Runs BatteryFirmware utility.
      </tp:docstring>
      <arg name="option" type="s" direction="in">
        <tp:docstring>
          Option to pass to the BatteryFirmware command:
            info: Get Battery Firmware Info.
            check: Check if AC Adapter is connected.
            update: Trigger Battery Firmware Update.
        </tp:docstring>
      </arg>
      <arg name="result" type="s" direction="out">
        <tp:docstring>
          Battery command output.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="Smartctl">
      <tp:docstring>
        Runs Smartctl utility.
      </tp:docstring>
      <arg name="option" type="s" direction="in">
        <tp:docstring>
          Option to pass to the Smartctl command:
            abort_test: aborts the offline test.
            attributes: prints device attributes.
            capabilities: prints generic smart capabilities.
            error: prints device error messages.
            health: prints device health status.
            selftest: prints offline test results.
            short_test: starts a short offline test.
        </tp:docstring>
      </arg>
      <arg name="result" type="s" direction="out">
        <tp:docstring>
          Smartctl command output.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="MemtesterStart">
      <tp:docstring>
        Starts running memtester.
      </tp:docstring>
      <arg name="outfd" type="h" direction="in">
        <tp:docstring>
          File descriptor to send output to.
        </tp:docstring>
      </arg>
      <arg name="memory" type="u" direction="in">
        <tp:docstring>
          The amount of memory to allocate and test in megabytes.
        </tp:docstring>
      </arg>
      <arg name="status" type="s" direction="out">
        <tp:docstring>
          Opaque handle to the memtester.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="MemtesterStop">
      <tp:docstring>
        Stops running memtester.
      </tp:docstring>
      <arg name="handle" type="s" direction="in">
        <tp:docstring>
          Handle to the memtester to stop. If an empty string is passed, stops
          all running memtests.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="BadblocksStart">
      <tp:docstring>
        Starts running badblocks test.
      </tp:docstring>
      <arg name="outfd" type="h" direction="in">
        <tp:docstring>
          File descriptor to send output to.
        </tp:docstring>
      </arg>
      <arg name="status" type="s" direction="out">
        <tp:docstring>
          Opaque handle to the badblocks.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="BadblocksStop">
      <tp:docstring>
        Stops running badblocks.
      </tp:docstring>
      <arg name="handle" type="s" direction="in">
        <tp:docstring>
          Handle to the badblocks to stop. If an empty string is passed, stops
          all running badblocks.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="PacketCaptureStart">
      <tp:docstring>
        Starts a packet capture with the specified options, with diagnostic
        status directed to the "statfd" file descriptor and packet capture
        data sent to the "outfd" file descriptor.  The returned opaque string
        functions as a handle for this particular packet capture.  Multiple
        captures can be running at once.  Captures can be initiated on
        Ethernet-like devices or WiFi devices in "client mode" (showing only
        Ethernet frames) by specifying the "device" parameter (see below).
        By specifying a channel, the script will find or create a "monitor
        mode" interface if one is available and produce an "over the air"
        packet capture.  The name of the output packet capture file is sent
        to the output file descriptor.
      </tp:docstring>
      <arg name="statfd" type="h" direction="in">
        <tp:docstring>
          File descriptor to send status information to.
        </tp:docstring>
      </arg>
      <arg name="outfd" type="h" direction="in">
        <tp:docstring>
          File descriptor to send packet capture output to.
        </tp:docstring>
      </arg>
      <arg name="options" type="a{sv}" direction="in">
        <tp:docstring>
          Options to pass to the packet capture command. Accepted keys include:
            device (string): An existing device to perform a packet capture on.
            frequency (int): Radio frequency (in MHz) to perform capture on.
            ht_location (string): The string "above" or "below", representing
                the offset of any secondary channel used in a 40 MHz HT
                (high throughput) caputre.
            monitor_connection_on (string): Instead of providing the "frequency"
                and "ht_location" parameters above, this paramter specifies the
                name of a currently connected 802.11 interface.  A packet
                capture is initated on the same channel as this connection.
          Unrecognized keys return a DBus error and print no output to the
          supplied file descriptor.
        </tp:docstring>
      </arg>
      <arg name="handle" type="s" direction="out">
        <tp:docstring>
          Opaque handle for this packet capture.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="PacketCaptureStop">
      <tp:docstring>
        Stops a running packet capture.
      </tp:docstring>
      <arg name="handle" type="s" direction="in">
        Handle to the packet capture to stop. If an empty string is passed,
        stops all running packet captures.
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="LogKernelTaskStates">
      <tp:docstring>
        Triggers show-task-states(T) SysRq.
        See https://www.kernel.org/doc/Documentation/sysrq.txt.
      </tp:docstring>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="UploadCrashes">
      <tp:docstring>
        Triggers uploading of system crashes (the crash_sender program).
      </tp:docstring>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="RemoveRootfsVerification">
      <tp:docstring>
        Removes rootfs verification. Requires a system reboot before it will
        take effect. Restricted to pre-owner dev mode.
      </tp:docstring>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="EnableBootFromUsb">
      <tp:docstring>
        Enables OS booting from a USB image. Restricted to pre-owner dev mode.
      </tp:docstring>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="ConfigureSshServer">
      <tp:docstring>
        Sets up sshd to provide an SSH server immediately and on future reboots.
        Also installs the test SSH keys to allow access by cros tools. Requires
        that rootfs verification has been removed. Restricted to pre-owner dev
        mode.
      </tp:docstring>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="SetUserPassword">
      <tp:docstring>
        Sets both the system and dev mode password for the indicated account.
        Restricted to pre-owner dev mode.
      </tp:docstring>
      <arg name="username" type="s" direction="in">
        <tp:docstring>
          Username to set the new password for.
        </tp:docstring>
      </arg>
      <arg name="password" type="s" direction="in">
        <tp:docstring>
          Password to assign.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="EnableChromeRemoteDebugging">
      <tp:docstring>
        Sets up Chrome for remote debugging. It will take effect after a reboot
        and using port 9222.
        Requires that rootfs verification has been removed. Restricted to
        pre-owner dev mode.
      </tp:docstring>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="EnableChromeDevFeatures">
      <tp:docstring>
        Convenience function to enable a predefined set of tools from the Chrome
        UI. Equivalent to calling these functions in order:
          1. EnableBootFromUsb()
          2. ConfigureSshServer()
          3. SetUserPassword("root", root_password)
        Requires that rootfs verification has been removed. If any sub-function
        fails, this function will exit with an error without attempting any
        further configuration or rollback. Restricted to pre-owner dev mode.
      </tp:docstring>
      <arg name="root_password" type="s" direction="in">
        <tp:docstring>
          Password to assign to the root user. If the string is empty, it will
          default to "test0000".
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="QueryDevFeatures">
      <tp:docstring>
        Queries which dev features have been enabled. Each dev feature will be
        indicated by a bit flag in the return value. Flags are defined in the
        DevFeatureFlag enumeration. If the dev tools are unavailable (system is
        not in dev mode/pre-login state), the DEV_FEATURES_DISABLED flag will be
        set and the rest of the bits will always be set to 0.
      </tp:docstring>
      <arg name="features" type="i" direction="out">
        <tp:docstring>
          Feature enabled flags or DEV_FEATURES_DISABLED flag.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <tp:enum name="DevFeatureFlag" type="i">
      <tp:docstring>
        Bit flags representing individual development features. Currently
        dbusxx-xml2cpp does not extract enum values, so any changes here should
        be manually flushed to platform/system_api/dbus/service_constants.h.
      </tp:docstring>
      <tp:enumvalue suffix="DEV_FEATURES_DISABLED" value="0x0001">
        <tp:docstring>
          Dev features query is unavailable due to access restrictions.
        </tp:docstring>
      </tp:enumvalue>
      <tp:enumvalue suffix="DEV_FEATURE_ROOTFS_VERIFICATION_REMOVED"
                    value="0x0002">
        <tp:docstring>
          Rootfs verification has been removed, including the required system
          reset.
        </tp:docstring>
      </tp:enumvalue>
      <tp:enumvalue suffix="DEV_FEATURE_BOOT_FROM_USB_ENABLED" value="0x0004">
        <tp:docstring>
          Booting from USB has been enabled.
        </tp:docstring>
      </tp:enumvalue>
      <tp:enumvalue suffix="DEV_FEATURE_SSH_SERVER_CONFIGURED" value="0x0008">
        <tp:docstring>
          The SSH server has been configured to auto-start on boot and the test
          SSH keys have been installed. Both of these conditions must be met
          for this flag to be signaled.
        </tp:docstring>
      </tp:enumvalue>
      <tp:enumvalue suffix="DEV_FEATURE_DEV_MODE_ROOT_PASSWORD_SET"
                    value="0x0010">
        <tp:docstring>
          The devmode root account password has been set.
        </tp:docstring>
      </tp:enumvalue>
      <tp:enumvalue suffix="DEV_FEATURE_SYSTEM_ROOT_PASSWORD_SET"
                    value="0x0020">
        <tp:docstring>
          The system root account password has been set.
        </tp:docstring>
      </tp:enumvalue>
      <tp:enumvalue suffix="DEV_FEATURE_CHROME_REMOTE_DEBUGGING_ENABLED"
                    value="0x0040">
        <tp:docstring>
          The Chrome remote debugging feature has been enabled. Chrome will
          be listening on port 9222. The port is not publicly accessible. User
          needs to use SSH port forwarding to be able to access it.
        </tp:docstring>
      </tp:enumvalue>
    </tp:enum>
    <method name="EnableDevCoredumpUpload">
      <tp:docstring>
        Allow uploading of device coredump files.
      </tp:docstring>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="DisableDevCoredumpUpload">
      <tp:docstring>
        Disallow uploading of device coredump files.
      </tp:docstring>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="SetOomScoreAdj">
      <tp:docstring>
        Set OOM score by writing scores to procfs /proc/pid/oom_score_adj.
        It is an operation which needs root privilege so needs to be handled
        carefully:
        1. Only user chronos can request the operation.
        2. It can only modify processes owned by chronos or run in Android
        container.
      </tp:docstring>
      <arg name="scores" type="a{ii}" direction="in">
        <tp:docstring>
          Arrays of (pid, score) pairs.
        </tp:docstring>
      </arg>
      <arg name="out" type="s" direction="out">
        <tp:docstring>
          Output from the helper of the operation. Empty on success.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="SwapEnable">
      <tp:docstring>
        Enable swap file usage via config files.
      </tp:docstring>
      <arg name="status" type="s" direction="out">
        Free-form text reporting status.
      </arg>
      <arg name="size" type="i" direction="in">
        <tp:docstring>
          Size (in MB) for the swap file.
        </tp:docstring>
      </arg>
      <arg name="change_now" type="b" direction="in">
        <tp:docstring>
          Whether to enable immediately, or wait until next reboot.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="SwapDisable">
      <tp:docstring>
        Disable swap file usage via config files.
      </tp:docstring>
      <arg name="status" type="s" direction="out">
        Free-form text reporting status.
      </arg>
      <arg name="change_now" type="b" direction="in">
        <tp:docstring>
          Whether to disable immediately, or wait until next reboot.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="SwapStartStop">
      <tp:docstring>
        Turn swap usage on/off (leaves config files alone).
      </tp:docstring>
      <arg name="status" type="s" direction="out">
        Free-form text reporting status.
      </arg>
      <arg name="on" type="b" direction="in">
        <tp:docstring>
          Whether to turn it on or off.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="SwapStatus">
      <tp:docstring>
        Show current swap status.
      </tp:docstring>
      <arg name="status" type="s" direction="out">
        Free-form text reporting status.
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="SwapSetParameter">
      <tp:docstring>
        Persistently change the value of various parameters.
      </tp:docstring>
      <arg name="status" type="s" direction="out">
        Free-form text reporting status.
      </arg>
      <arg name="command_name" type="s" direction="in">
        <tp:docstring>
          The name of the swap subcommand, usually set_something.
        </tp:docstring>
      </arg>
      <arg name="value" type="i" direction="in">
        <tp:docstring>
          The unsigned integer value that some parameter is set to.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="SetU2fFlags">
      <tp:docstring>
        Modify u2fd daemon debugging/override flags.
      </tp:docstring>
      <arg name="flags" type="s" direction="in">
        <tp:docstring>
          Flags (comma separated) to force debugging features.
          Supports flag(s): u2f g2f verbose
        </tp:docstring>
      </arg>
      <arg name="status" type="s" direction="out" />
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="ContainerStarted">
      <tp:docstring>
        Notify debugd that a container is starting up.
      </tp:docstring>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="ContainerStopped">
      <tp:docstring>
        Notify debugd that a container has stopped.
      </tp:docstring>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="SetWifiPowerSave">
      <tp:docstring>
        Enable/disable WiFi power save mode.
      </tp:docstring>
      <arg name="enable" type="b" direction="in">
        <tp:docstring>
          Whether to enable or disable.
        </tp:docstring>
      </arg>
      <arg name="status" type="s" direction="out">
        New power save mode, or error.
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="GetWifiPowerSave">
      <tp:docstring>
        Show current WiFi power save mode.
      </tp:docstring>
      <arg name="status" type="s" direction="out">
        Current power save mode.
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="RunShillScriptStart">
      <tp:docstring>
        Run a shill debug script in a sandboxed environment.
      </tp:docstring>
      <arg name="outfd" type="h" direction="in">
        <tp:docstring>
          File descriptor to send output to.
        </tp:docstring>
      </arg>
      <arg name="script" type="s" direction="in">
        <tp:docstring>
          The script to run.
        </tp:docstring>
      </arg>
      <arg name="script_args" type="as" direction="in">
        <tp:docstring>
          The command line flags to pass to the script.
        </tp:docstring>
      </arg>
      <arg name="handle" type="s" direction="out">
        <tp:docstring>
          Opaque handle for this run.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="RunShillScriptStop">
      <tp:docstring>
        Stops a running script.
      </tp:docstring>
      <arg name="handle" type="s" direction="in">
        Handle to the script to stop.
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
  </interface>
</node>
