Skip to content
Snippets Groups Projects
protocol.json 297 KiB
Newer Older
  • Learn to ignore specific revisions
  • 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000
                    ],
                    "description": "Represents metadata of a file or entry."
                }
            ],
            "commands": [
                {
                    "name": "enable",
                    "description": "Enables events from backend."
                },
                {
                    "name": "disable",
                    "description": "Disables events from backend."
                },
                {
                    "name": "requestFileSystemRoot",
                    "async": true,
                    "parameters": [
                        { "name": "origin", "type": "string", "description": "Security origin of requesting FileSystem. One of frames in current page needs to have this security origin." },
                        { "name": "type", "type": "string", "enum": ["temporary", "persistent"], "description": "FileSystem type of requesting FileSystem." }
                    ],
                    "returns": [
                        { "name": "errorCode", "type": "integer", "description": "0, if no error. Otherwise, errorCode is set to FileError::ErrorCode value." },
                        { "name": "root", "$ref": "Entry", "optional": true, "description": "Contains root of the requested FileSystem if the command completed successfully." }
                    ],
                    "description": "Returns root directory of the FileSystem, if exists."
                },
                {
                    "name": "requestDirectoryContent",
                    "async": true,
                    "parameters": [
                        { "name": "url", "type": "string", "description": "URL of the directory that the frontend is requesting to read from." }
                    ],
                    "returns": [
                        { "name": "errorCode", "type": "integer", "description": "0, if no error. Otherwise, errorCode is set to FileError::ErrorCode value." },
                        { "name": "entries", "type": "array", "items": { "$ref": "Entry" }, "optional": true, "description": "Contains all entries on directory if the command completed successfully." }
                    ],
                    "description": "Returns content of the directory."
                },
                {
                    "name": "requestMetadata",
                    "async": true,
                    "parameters": [
                        { "name": "url", "type": "string", "description": "URL of the entry that the frontend is requesting to get metadata from." }
                    ],
                    "returns": [
                        { "name": "errorCode", "type": "integer", "description": "0, if no error. Otherwise, errorCode is set to FileError::ErrorCode value." },
                        { "name": "metadata", "$ref": "Metadata", "optional": true, "description": "Contains metadata of the entry if the command completed successfully." }
                    ],
                    "description": "Returns metadata of the entry."
                },
                {
                    "name": "requestFileContent",
                    "async": true,
                    "parameters": [
                        { "name": "url", "type": "string", "description": "URL of the file that the frontend is requesting to read from." },
                        { "name": "readAsText", "type": "boolean", "description": "True if the content should be read as text, otherwise the result will be returned as base64 encoded text." },
                        { "name": "start", "type": "integer", "optional": true, "description": "Specifies the start of range to read." },
                        { "name": "end", "type": "integer", "optional": true, "description": "Specifies the end of range to read exclusively." },
                        { "name": "charset", "type": "string", "optional": true, "description": "Overrides charset of the content when content is served as text." }
                    ],
                    "returns": [
                        { "name": "errorCode", "type": "integer", "description": "0, if no error. Otherwise, errorCode is set to FileError::ErrorCode value." },
                        { "name": "content", "type": "string", "optional": true, "description": "Content of the file." },
                        { "name": "charset", "type": "string", "optional": true, "description": "Charset of the content if it is served as text." }
                    ],
                    "description": "Returns content of the file. Result should be sliced into [start, end)."
                },
                {
                    "name": "deleteEntry",
                    "async": true,
                    "parameters": [
                        { "name": "url", "type": "string", "description": "URL of the entry to delete." }
                    ],
                    "returns": [
                        { "name": "errorCode", "type": "integer", "description": "0, if no error. Otherwise errorCode is set to FileError::ErrorCode value." }
                    ],
                    "description": "Deletes specified entry. If the entry is a directory, the agent deletes children recursively."
                }
            ]
        },
        {
            "domain": "DOM",
            "description": "This domain exposes DOM read/write operations. Each DOM Node is represented with its mirror object that has an <code>id</code>. This <code>id</code> can be used to get additional information on the Node, resolve it into the JavaScript object wrapper, etc. It is important that client receives DOM events only for the nodes that are known to the client. Backend keeps track of the nodes that were sent to the client and never sends the same node twice. It is client's responsibility to collect information about the nodes that were sent to the client.<p>Note that <code>iframe</code> owner elements will return corresponding document elements as their child nodes.</p>",
            "types": [
                {
                    "id": "NodeId",
                    "type": "integer",
                    "description": "Unique DOM node identifier."
                },
                {
                    "id": "BackendNodeId",
                    "type": "integer",
                    "description": "Unique DOM node identifier used to reference a node that may not have been pushed to the front-end.",
                    "hidden": true
                },
                {
                    "id": "BackendNode",
                    "type": "object",
                    "properties": [
                        { "name": "nodeType", "type": "integer", "description": "<code>Node</code>'s nodeType." },
                        { "name": "nodeName", "type": "string", "description": "<code>Node</code>'s nodeName." },
                        { "name": "backendNodeId", "$ref": "BackendNodeId" }
                    ],
                    "hidden": true,
                    "description": "Backend node with a friendly name."
                },
                {
                    "id": "PseudoType",
                    "type": "string",
                    "enum": [
                        "first-line",
                        "first-letter",
                        "before",
                        "after",
                        "backdrop",
                        "selection",
                        "first-line-inherited",
                        "scrollbar",
                        "scrollbar-thumb",
                        "scrollbar-button",
                        "scrollbar-track",
                        "scrollbar-track-piece",
                        "scrollbar-corner",
                        "resizer",
                        "input-list-button"
                    ],
                    "description": "Pseudo element type."
                },
                {
                    "id": "ShadowRootType",
                    "type": "string",
                    "enum": ["user-agent", "author"],
                    "description": "Shadow root type."
                },
                {
                    "id": "Node",
                    "type": "object",
                    "properties": [
                        { "name": "nodeId", "$ref": "NodeId", "description": "Node identifier that is passed into the rest of the DOM messages as the <code>nodeId</code>. Backend will only push node with given <code>id</code> once. It is aware of all requested nodes and will only fire DOM events for nodes known to the client." },
                        { "name": "nodeType", "type": "integer", "description": "<code>Node</code>'s nodeType." },
                        { "name": "nodeName", "type": "string", "description": "<code>Node</code>'s nodeName." },
                        { "name": "localName", "type": "string", "description": "<code>Node</code>'s localName." },
                        { "name": "nodeValue", "type": "string", "description": "<code>Node</code>'s nodeValue." },
                        { "name": "childNodeCount", "type": "integer", "optional": true, "description": "Child count for <code>Container</code> nodes." },
                        { "name": "children", "type": "array", "optional": true, "items": { "$ref": "Node" }, "description": "Child nodes of this node when requested with children." },
                        { "name": "attributes", "type": "array", "optional": true, "items": { "type": "string" }, "description": "Attributes of the <code>Element</code> node in the form of flat array <code>[name1, value1, name2, value2]</code>." },
                        { "name": "documentURL", "type": "string", "optional": true, "description": "Document URL that <code>Document</code> or <code>FrameOwner</code> node points to." },
                        { "name": "baseURL", "type": "string", "optional": true, "description": "Base URL that <code>Document</code> or <code>FrameOwner</code> node uses for URL completion.", "hidden": true },
                        { "name": "publicId", "type": "string", "optional": true, "description": "<code>DocumentType</code>'s publicId." },
                        { "name": "systemId", "type": "string", "optional": true, "description": "<code>DocumentType</code>'s systemId." },
                        { "name": "internalSubset", "type": "string", "optional": true, "description": "<code>DocumentType</code>'s internalSubset." },
                        { "name": "xmlVersion", "type": "string", "optional": true, "description": "<code>Document</code>'s XML version in case of XML documents." },
                        { "name": "name", "type": "string", "optional": true, "description": "<code>Attr</code>'s name." },
                        { "name": "value", "type": "string", "optional": true, "description": "<code>Attr</code>'s value." },
                        { "name": "pseudoType", "$ref": "PseudoType", "optional": true, "description": "Pseudo element type for this node." },
                        { "name": "shadowRootType", "$ref": "ShadowRootType", "optional": true, "description": "Shadow root type." },
                        { "name": "frameId", "$ref": "Page.FrameId", "optional": true, "description": "Frame ID for frame owner elements.", "hidden": true },
                        { "name": "contentDocument", "$ref": "Node", "optional": true, "description": "Content document for frame owner elements." },
                        { "name": "shadowRoots", "type": "array", "optional": true, "items": { "$ref": "Node" }, "description": "Shadow root list for given element host.", "hidden": true },
                        { "name": "templateContent", "$ref": "Node", "optional": true, "description": "Content document fragment for template elements.", "hidden": true },
                        { "name": "pseudoElements", "type": "array", "items": { "$ref": "Node" }, "optional": true, "description": "Pseudo elements associated with this node.", "hidden": true },
                        { "name": "importedDocument", "$ref": "Node", "optional": true, "description": "Import document for the HTMLImport links." },
                        { "name": "distributedNodes", "type": "array", "items": { "$ref": "BackendNode" }, "optional": true, "description": "Distributed nodes for given insertion point.", "hidden": true }
                    ],
                    "description": "DOM interaction is implemented in terms of mirror objects that represent the actual DOM nodes. DOMNode is a base node mirror type."
                },
                {
                    "id": "EventListener",
                    "type": "object",
                    "hidden": true,
                    "properties": [
                        { "name": "type", "type": "string", "description": "<code>EventListener</code>'s type." },
                        { "name": "useCapture", "type": "boolean", "description": "<code>EventListener</code>'s useCapture." },
                        { "name": "isAttribute", "type": "boolean", "description": "<code>EventListener</code>'s isAttribute." },
                        { "name": "nodeId", "$ref": "NodeId", "description": "Target <code>DOMNode</code> id." },
                        { "name": "location", "$ref": "Debugger.Location", "description": "Handler code location." },
                        { "name": "handler", "$ref": "Runtime.RemoteObject", "optional": true, "description": "Event handler function value." }
                    ],
                    "description": "DOM interaction is implemented in terms of mirror objects that represent the actual DOM nodes. DOMNode is a base node mirror type."
                },
                {
                    "id": "RGBA",
                    "type": "object",
                    "properties": [
                        { "name": "r", "type": "integer", "description": "The red component, in the [0-255] range." },
                        { "name": "g", "type": "integer", "description": "The green component, in the [0-255] range." },
                        { "name": "b", "type": "integer", "description": "The blue component, in the [0-255] range." },
                        { "name": "a", "type": "number", "optional": true, "description": "The alpha component, in the [0-1] range (default: 1)." }
                    ],
                    "description": "A structure holding an RGBA color."
                },
                {
                    "id": "Quad",
                    "type": "array",
                    "items": { "type": "number" },
                    "minItems": 8,
                    "maxItems": 8,
                    "description": "An array of quad vertices, x immediately followed by y for each point, points clock-wise.",
                    "hidden": true
                },
                {
                    "id": "BoxModel",
                    "type": "object",
                    "hidden": true,
                    "properties": [
                        { "name": "content", "$ref": "Quad", "description": "Content box" },
                        { "name": "padding", "$ref": "Quad", "description": "Padding box" },
                        { "name": "border", "$ref": "Quad", "description": "Border box" },
                        { "name": "margin", "$ref": "Quad", "description": "Margin box" },
                        { "name": "width", "type": "integer", "description": "Node width" },
                        { "name": "height", "type": "integer", "description": "Node height" },
                        { "name": "shapeOutside", "$ref": "ShapeOutsideInfo", "optional": true, "description": "Shape outside coordinates" }
                    ],
                    "description": "Box model."
                },
                {
                    "id": "ShapeOutsideInfo",
                    "type": "object",
                    "hidden": true,
                    "properties": [
                        { "name": "bounds", "$ref": "Quad", "description": "Shape bounds" },
                        { "name": "shape", "type": "array", "items": { "type": "any"}, "description": "Shape coordinate details" },
                        { "name": "marginShape", "type": "array", "items": { "type": "any"}, "description": "Margin shape bounds" }
                    ],
                    "description": "CSS Shape Outside details."
                },
                {
                    "id": "Rect",
                    "type": "object",
                    "hidden": true,
                    "properties": [
                        { "name": "x", "type": "number", "description": "X coordinate" },
                        { "name": "y", "type": "number", "description": "Y coordinate" },
                        { "name": "width", "type": "number", "description": "Rectangle width" },
                        { "name": "height", "type": "number", "description": "Rectangle height" }
                    ],
                    "description": "Rectangle."
                },
                {
                    "id": "HighlightConfig",
                    "type": "object",
                    "properties": [
                        { "name": "showInfo", "type": "boolean", "optional": true, "description": "Whether the node info tooltip should be shown (default: false)." },
                        { "name": "showRulers", "type": "boolean", "optional": true, "description": "Whether the rulers should be shown (default: false)." },
                        { "name": "showExtensionLines", "type": "boolean", "optional": true, "description": "Whether the extension lines from node to the rulers should be shown (default: false)." },
                        { "name": "contentColor", "$ref": "RGBA", "optional": true, "description": "The content box highlight fill color (default: transparent)." },
                        { "name": "paddingColor", "$ref": "RGBA", "optional": true, "description": "The padding highlight fill color (default: transparent)." },
                        { "name": "borderColor", "$ref": "RGBA", "optional": true, "description": "The border highlight fill color (default: transparent)." },
                        { "name": "marginColor", "$ref": "RGBA", "optional": true, "description": "The margin highlight fill color (default: transparent)." },
                        { "name": "eventTargetColor", "$ref": "RGBA", "optional": true, "hidden": true, "description": "The event target element highlight fill color (default: transparent)." },
                        { "name": "shapeColor", "$ref": "RGBA", "optional": true, "hidden": true, "description": "The shape outside fill color (default: transparent)." },
                        { "name": "shapeMarginColor", "$ref": "RGBA", "optional": true, "hidden": true, "description": "The shape margin fill color (default: transparent)." }
                    ],
                    "description": "Configuration data for the highlighting of page elements."
                }
            ],
            "commands": [
                {
                    "name": "enable",
                    "description": "Enables DOM agent for the given page."
                },
                {
                    "name": "disable",
                    "description": "Disables DOM agent for the given page."
                },
                {
                    "name": "getDocument",
                    "returns": [
                        { "name": "root", "$ref": "Node", "description": "Resulting node." }
                    ],
                    "description": "Returns the root DOM node to the caller."
                },
                {
                    "name": "requestChildNodes",
                    "parameters": [
                        { "name": "nodeId", "$ref": "NodeId", "description": "Id of the node to get children for." },
                        { "name": "depth", "type": "integer", "optional": true, "description": "The maximum depth at which children should be retrieved, defaults to 1. Use -1 for the entire subtree or provide an integer larger than 0.", "hidden": true }
                    ],
                    "description": "Requests that children of the node with given id are returned to the caller in form of <code>setChildNodes</code> events where not only immediate children are retrieved, but all children down to the specified depth."
                },
                {
                    "name": "querySelector",
                    "parameters": [
                        { "name": "nodeId", "$ref": "NodeId", "description": "Id of the node to query upon." },
                        { "name": "selector", "type": "string", "description": "Selector string." }
                    ],
                    "returns": [
                        { "name": "nodeId", "$ref": "NodeId", "description": "Query selector result." }
                    ],
                    "description": "Executes <code>querySelector</code> on a given node."
                },
                {
                    "name": "querySelectorAll",
                    "parameters": [
                        { "name": "nodeId", "$ref": "NodeId", "description": "Id of the node to query upon." },
                        { "name": "selector", "type": "string", "description": "Selector string." }
                    ],
                    "returns": [
                        { "name": "nodeIds", "type": "array", "items": { "$ref": "NodeId" }, "description": "Query selector result." }
                    ],
                    "description": "Executes <code>querySelectorAll</code> on a given node."
                },
                {
                    "name": "setNodeName",
                    "parameters": [
                        { "name": "nodeId", "$ref": "NodeId", "description": "Id of the node to set name for." },
                        { "name": "name", "type": "string", "description": "New node's name." }
                    ],
                    "returns": [
                        { "name": "nodeId", "$ref": "NodeId", "description": "New node's id." }
                    ],
                    "description": "Sets node name for a node with given id."
                },
                {
                    "name": "setNodeValue",
                    "parameters": [
                        { "name": "nodeId", "$ref": "NodeId", "description": "Id of the node to set value for." },
                        { "name": "value", "type": "string", "description": "New node's value." }
                    ],
                    "description": "Sets node value for a node with given id."
                },
                {
                    "name": "removeNode",
                    "parameters": [
                        { "name": "nodeId", "$ref": "NodeId", "description": "Id of the node to remove." }
                    ],
                    "description": "Removes node with given id."
                },
                {
                    "name": "setAttributeValue",
                    "parameters": [
                        { "name": "nodeId", "$ref": "NodeId", "description": "Id of the element to set attribute for." },
                        { "name": "name", "type": "string", "description": "Attribute name." },
                        { "name": "value", "type": "string", "description": "Attribute value." }
                    ],
                    "description": "Sets attribute for an element with given id."
                },
                {
                    "name": "setAttributesAsText",
                    "parameters": [
                        { "name": "nodeId", "$ref": "NodeId", "description": "Id of the element to set attributes for." },
                        { "name": "text", "type": "string", "description": "Text with a number of attributes. Will parse this text using HTML parser." },
                        { "name": "name", "type": "string", "optional": true, "description": "Attribute name to replace with new attributes derived from text in case text parsed successfully." }
                    ],
                    "description": "Sets attributes on element with given id. This method is useful when user edits some existing attribute value and types in several attribute name/value pairs."
                },
                {
                    "name": "removeAttribute",
                    "parameters": [
                        { "name": "nodeId", "$ref": "NodeId", "description": "Id of the element to remove attribute from." },
                        { "name": "name", "type": "string", "description": "Name of the attribute to remove." }
                    ],
                    "description": "Removes attribute with given name from an element with given id."
                },
                {
                    "name": "getEventListenersForNode",
                    "parameters": [
                        { "name": "nodeId", "$ref": "NodeId", "description": "Id of the node to get listeners for." },
                        { "name": "objectGroup", "type": "string", "optional": true, "description": "Symbolic group name for handler value. Handler value is not returned without this parameter specified." }
                    ],
                    "returns": [
                        { "name": "listeners", "type": "array", "items": { "$ref": "EventListener" }, "description": "Array of relevant listeners." }
                    ],
                    "description": "Returns event listeners relevant to the node.",
                    "hidden": true
                },
                {
                    "name": "getOuterHTML",
                    "parameters": [
                        { "name": "nodeId", "$ref": "NodeId", "description": "Id of the node to get markup for." }
                    ],
                    "returns": [
                        { "name": "outerHTML", "type": "string", "description": "Outer HTML markup." }
                    ],
                    "description": "Returns node's HTML markup."
                },
                {
                    "name": "setOuterHTML",
                    "parameters": [
                        { "name": "nodeId", "$ref": "NodeId", "description": "Id of the node to set markup for." },
                        { "name": "outerHTML", "type": "string", "description": "Outer HTML markup to set." }
                    ],
                    "description": "Sets node HTML markup, returns new node id."
                },
                {
                    "name": "performSearch",
                    "parameters": [
                        { "name": "query", "type": "string", "description": "Plain text or query selector or XPath search query." },
                        { "name": "includeUserAgentShadowDOM", "type": "boolean", "optional": true, "description": "True to search in user agent shadow DOM.", "hidden": true }
                    ],
                    "returns": [
                        { "name": "searchId", "type": "string", "description": "Unique search session identifier." },
                        { "name": "resultCount", "type": "integer", "description": "Number of search results." }
                    ],
                    "description": "Searches for a given string in the DOM tree. Use <code>getSearchResults</code> to access search results or <code>cancelSearch</code> to end this search session.",
                    "hidden": true
                },
                {
                    "name": "getSearchResults",
                    "parameters": [
                        { "name": "searchId", "type": "string", "description": "Unique search session identifier." },
                        { "name": "fromIndex", "type": "integer", "description": "Start index of the search result to be returned." },
                        { "name": "toIndex", "type": "integer", "description": "End index of the search result to be returned." }
                    ],
                    "returns": [
                        { "name": "nodeIds", "type": "array", "items": { "$ref": "NodeId" }, "description": "Ids of the search result nodes." }
                    ],
                    "description": "Returns search results from given <code>fromIndex</code> to given <code>toIndex</code> from the sarch with the given identifier.",
                    "hidden": true
                },
                {
                    "name": "discardSearchResults",
                    "parameters": [
                        { "name": "searchId", "type": "string", "description": "Unique search session identifier." }
                    ],
                    "description": "Discards search results from the session with the given id. <code>getSearchResults</code> should no longer be called for that search.",
                    "hidden": true
                },
                {
                    "name": "requestNode",
                    "parameters": [
                        { "name": "objectId", "$ref": "Runtime.RemoteObjectId", "description": "JavaScript object id to convert into node." }
                    ],
                    "returns": [
                        { "name": "nodeId", "$ref": "NodeId", "description": "Node id for given object." }
                    ],
                    "description": "Requests that the node is sent to the caller given the JavaScript node object reference. All nodes that form the path from the node to the root are also sent to the client as a series of <code>setChildNodes</code> notifications."
                },
                {
                    "name": "setInspectModeEnabled",
                    "hidden": true,
                    "parameters": [
                        { "name": "enabled", "type": "boolean", "description": "True to enable inspection mode, false to disable it." },
                        { "name": "inspectUAShadowDOM", "type": "boolean", "optional": true, "description": "True to enable inspection mode for user agent shadow DOM." },
                        { "name": "highlightConfig", "$ref": "HighlightConfig", "optional": true, "description": "A descriptor for the highlight appearance of hovered-over nodes. May be omitted if <code>enabled == false</code>." }
                    ],
                    "description": "Enters the 'inspect' mode. In this mode, elements that user is hovering over are highlighted. Backend then generates 'inspectNodeRequested' event upon element selection."
                },
                {
                    "name": "highlightRect",
                    "parameters": [
                        { "name": "x", "type": "integer", "description": "X coordinate" },
                        { "name": "y", "type": "integer", "description": "Y coordinate" },
                        { "name": "width", "type": "integer", "description": "Rectangle width" },
                        { "name": "height", "type": "integer", "description": "Rectangle height" },
                        { "name": "color", "$ref": "RGBA", "optional": true, "description": "The highlight fill color (default: transparent)." },
                        { "name": "outlineColor", "$ref": "RGBA", "optional": true, "description": "The highlight outline color (default: transparent)." }
                    ],
                    "description": "Highlights given rectangle. Coordinates are absolute with respect to the main frame viewport."
                },
                {
                    "name": "highlightQuad",
                    "parameters": [
                        { "name": "quad", "$ref": "Quad", "description": "Quad to highlight" },
                        { "name": "color", "$ref": "RGBA", "optional": true, "description": "The highlight fill color (default: transparent)." },
                        { "name": "outlineColor", "$ref": "RGBA", "optional": true, "description": "The highlight outline color (default: transparent)." }
                    ],
                    "description": "Highlights given quad. Coordinates are absolute with respect to the main frame viewport.",
                    "hidden": true
                },
                {
                    "name": "highlightNode",
                    "parameters": [
                        { "name": "highlightConfig", "$ref": "HighlightConfig",  "description": "A descriptor for the highlight appearance." },
                        { "name": "nodeId", "$ref": "NodeId", "optional": true, "description": "Identifier of the node to highlight." },
                        { "name": "backendNodeId", "$ref": "BackendNodeId", "optional": true, "description": "Identifier of the backend node to highlight." },
                        { "name": "objectId", "$ref": "Runtime.RemoteObjectId", "optional": true, "description": "JavaScript object id of the node to be highlighted.", "hidden": true }
                    ],
                    "description": "Highlights DOM node with given id or with the given JavaScript object wrapper. Either nodeId or objectId must be specified."
                },
                {
                    "name": "hideHighlight",
                    "description": "Hides DOM node highlight."
                },
                {
                    "name": "highlightFrame",
                    "parameters": [
                        { "name": "frameId", "$ref": "Page.FrameId", "description": "Identifier of the frame to highlight." },
                        { "name": "contentColor", "$ref": "RGBA", "optional": true, "description": "The content box highlight fill color (default: transparent)." },
                        { "name": "contentOutlineColor", "$ref": "RGBA", "optional": true, "description": "The content box highlight outline color (default: transparent)." }
                    ],
                    "description": "Highlights owner element of the frame with given id.",
                    "hidden": true
                },
                {
                    "name": "pushNodeByPathToFrontend",
                    "parameters": [
                        { "name": "path", "type": "string", "description": "Path to node in the proprietary format." }
                    ],
                    "returns": [
                        { "name": "nodeId", "$ref": "NodeId", "description": "Id of the node for given path." }
                    ],
                    "description": "Requests that the node is sent to the caller given its path. // FIXME, use XPath",
                    "hidden": true
                },
                {
                    "name": "pushNodesByBackendIdsToFrontend",
                    "parameters": [
                        { "name": "backendNodeIds", "type": "array", "items": {"$ref": "BackendNodeId"}, "description": "The array of backend node ids." }
                    ],
                    "returns": [
                        { "name": "nodeIds", "type": "array", "items": {"$ref": "NodeId"}, "description": "The array of ids of pushed nodes that correspond to the backend ids specified in backendNodeIds." }
                    ],
                    "description": "Requests that a batch of nodes is sent to the caller given their backend node ids.",
                    "hidden": true
                },
                {
                    "name": "setInspectedNode",
                    "parameters": [
                        { "name": "nodeId", "$ref": "NodeId", "description": "DOM node id to be accessible by means of $x command line API." }
                    ],
                    "description": "Enables console to refer to the node with given id via $x (see Command Line API for more details $x functions).",
                    "hidden": true
                },
                {
                    "name": "resolveNode",
                    "parameters": [
                        { "name": "nodeId", "$ref": "NodeId", "description": "Id of the node to resolve." },
                        { "name": "objectGroup", "type": "string", "optional": true, "description": "Symbolic group name that can be used to release multiple objects." }
                    ],
                    "returns": [
                        { "name": "object", "$ref": "Runtime.RemoteObject", "description": "JavaScript object wrapper for given node." }
                    ],
                    "description": "Resolves JavaScript node object for given node id."
                },
                {
                    "name": "getAttributes",
                    "parameters": [
                        { "name": "nodeId", "$ref": "NodeId", "description": "Id of the node to retrieve attibutes for." }
                    ],
                    "returns": [
                        { "name": "attributes", "type": "array", "items": { "type": "string" }, "description": "An interleaved array of node attribute names and values." }
                    ],
                    "description": "Returns attributes for the specified node."
                },
                {
                    "name": "copyTo",
                    "parameters": [
                        { "name": "nodeId", "$ref": "NodeId", "description": "Id of the node to copy." },
                        { "name": "targetNodeId", "$ref": "NodeId", "description": "Id of the element to drop the copy into." },
                        { "name": "insertBeforeNodeId", "$ref": "NodeId", "optional": true, "description": "Drop the copy before this node (if absent, the copy becomes the last child of <code>targetNodeId</code>)." }
                    ],
                    "returns": [
                        { "name": "nodeId", "$ref": "NodeId", "description": "Id of the node clone." }
                    ],
                    "description": "Creates a deep copy of the specified node and places it into the target container before the given anchor.",
                    "hidden": true
                },
                {
                    "name": "moveTo",
                    "parameters": [
                        { "name": "nodeId", "$ref": "NodeId", "description": "Id of the node to move." },
                        { "name": "targetNodeId", "$ref": "NodeId", "description": "Id of the element to drop the moved node into." },
                        { "name": "insertBeforeNodeId", "$ref": "NodeId", "optional": true, "description": "Drop node before this one (if absent, the moved node becomes the last child of <code>targetNodeId</code>)." }
                    ],
                    "returns": [
                        { "name": "nodeId", "$ref": "NodeId", "description": "New id of the moved node." }
                    ],
                    "description": "Moves node into the new container, places it before the given anchor."
                },
                {
                    "name": "undo",
                    "description": "Undoes the last performed action.",
                    "hidden": true
                },
                {
                    "name": "redo",
                    "description": "Re-does the last undone action.",
                    "hidden": true
                },
                {
                    "name": "markUndoableState",
                    "description": "Marks last undoable state.",
                    "hidden": true
                },
                {
                    "name": "focus",
                    "parameters": [
                        { "name": "nodeId", "$ref": "NodeId", "description": "Id of the node to focus." }
                    ],
                    "description": "Focuses the given element.",
                    "hidden": true
                },
                {
                    "name": "setFileInputFiles",
                    "parameters": [
                        { "name": "nodeId", "$ref": "NodeId", "description": "Id of the file input node to set files for." },
                        { "name": "files", "type": "array", "items": { "type": "string" }, "description": "Array of file paths to set." }
                    ],
                    "description": "Sets files for the given file input element.",
                    "hidden": true,
                    "handlers": ["browser", "renderer"]
                },
                {
                    "name": "getBoxModel",
                    "parameters": [
                        { "name": "nodeId", "$ref": "NodeId", "description": "Id of the node to get box model for." }
                    ],
                    "returns": [
                        { "name": "model", "$ref": "BoxModel", "description": "Box model for the node." }
                    ],
                    "description": "Returns boxes for the currently selected nodes.",
                    "hidden": true
                },
                {
                    "name": "getNodeForLocation",
                    "parameters": [
                        { "name": "x", "type": "integer", "description": "X coordinate." },
                        { "name": "y", "type": "integer", "description": "Y coordinate." }
                    ],
                    "returns": [
                        { "name": "nodeId", "$ref": "NodeId", "description": "Id of the node at given coordinates." }
                    ],
                    "description": "Returns node id at given location.",
                    "hidden": true
                },
                {
                    "name": "getRelayoutBoundary",
                    "parameters": [
                        { "name": "nodeId", "$ref": "NodeId", "description": "Id of the node." }
                    ],
                    "returns": [
                        { "name": "nodeId", "$ref": "NodeId", "description": "Relayout boundary node id for the given node." }
                    ],
                    "description": "Returns the id of the nearest ancestor that is a relayout boundary.",
                    "hidden": true
                },
                {
                    "name": "getHighlightObjectForTest",
                    "parameters": [
                        { "name": "nodeId", "$ref": "NodeId", "description": "Id of the node to get highlight object for." }
                    ],
                    "returns": [
                        { "name": "highlight", "type": "object", "description": "Highlight data for the node." }
                    ],
                    "description": "For testing.",
                    "hidden": true
                }
            ],
            "events": [
                {
                    "name": "documentUpdated",
                    "description": "Fired when <code>Document</code> has been totally updated. Node ids are no longer valid."
                },
                {
                    "name": "inspectNodeRequested",
                    "parameters": [
                        { "name": "backendNodeId", "$ref": "BackendNodeId", "description": "Id of the node to inspect." }
                    ],
                    "description": "Fired when the node should be inspected. This happens after call to <code>setInspectModeEnabled</code>.",
                    "hidden" : true
                },
                {
                    "name": "setChildNodes",
                    "parameters": [
                        { "name": "parentId", "$ref": "NodeId", "description": "Parent node id to populate with children." },
                        { "name": "nodes", "type": "array", "items": { "$ref": "Node" }, "description": "Child nodes array." }
                    ],
                    "description": "Fired when backend wants to provide client with the missing DOM structure. This happens upon most of the calls requesting node ids."
                },
                {
                    "name": "attributeModified",
                    "parameters": [
                        { "name": "nodeId", "$ref": "NodeId", "description": "Id of the node that has changed." },
                        { "name": "name", "type": "string", "description": "Attribute name." },
                        { "name": "value", "type": "string", "description": "Attribute value." }
                    ],
                    "description": "Fired when <code>Element</code>'s attribute is modified."
                },
                {
                    "name": "attributeRemoved",
                    "parameters": [
                        { "name": "nodeId", "$ref": "NodeId", "description": "Id of the node that has changed." },
                        { "name": "name", "type": "string", "description": "A ttribute name." }
                    ],
                    "description": "Fired when <code>Element</code>'s attribute is removed."
                },
                {
                    "name": "inlineStyleInvalidated",
                    "parameters": [
                        { "name": "nodeIds", "type": "array", "items": { "$ref": "NodeId" }, "description": "Ids of the nodes for which the inline styles have been invalidated." }
                    ],
                    "description": "Fired when <code>Element</code>'s inline style is modified via a CSS property modification.",
                    "hidden": true
                },
                {
                    "name": "characterDataModified",
                    "parameters": [
                        { "name": "nodeId", "$ref": "NodeId", "description": "Id of the node that has changed." },
                        { "name": "characterData", "type": "string", "description": "New text value." }
                    ],
                    "description": "Mirrors <code>DOMCharacterDataModified</code> event."
                },
                {
                    "name": "childNodeCountUpdated",
                    "parameters": [
                        { "name": "nodeId", "$ref": "NodeId", "description": "Id of the node that has changed." },
                        { "name": "childNodeCount", "type": "integer", "description": "New node count." }
                    ],
                    "description": "Fired when <code>Container</code>'s child node count has changed."
                },
                {
                    "name": "childNodeInserted",
                    "parameters": [
                        { "name": "parentNodeId", "$ref": "NodeId", "description": "Id of the node that has changed." },
                        { "name": "previousNodeId", "$ref": "NodeId", "description": "If of the previous siblint." },
                        { "name": "node", "$ref": "Node", "description": "Inserted node data." }
                    ],
                    "description": "Mirrors <code>DOMNodeInserted</code> event."
                },
                {
                    "name": "childNodeRemoved",
                    "parameters": [
                        { "name": "parentNodeId", "$ref": "NodeId", "description": "Parent id." },
                        { "name": "nodeId", "$ref": "NodeId", "description": "Id of the node that has been removed." }
                    ],
                    "description": "Mirrors <code>DOMNodeRemoved</code> event."
                },
                {
                    "name": "shadowRootPushed",
                    "parameters": [
                        { "name": "hostId", "$ref": "NodeId", "description": "Host element id." },
                        { "name": "root", "$ref": "Node", "description": "Shadow root." }
                    ],
                    "description": "Called when shadow root is pushed into the element.",
                    "hidden": true
                },
                {
                    "name": "shadowRootPopped",
                    "parameters": [
                        { "name": "hostId", "$ref": "NodeId", "description": "Host element id." },
                        { "name": "rootId", "$ref": "NodeId", "description": "Shadow root id." }
                    ],
                    "description": "Called when shadow root is popped from the element.",
                    "hidden": true
                },
                {
                    "name": "pseudoElementAdded",
                    "parameters": [
                        { "name": "parentId", "$ref": "NodeId", "description": "Pseudo element's parent element id." },
                        { "name": "pseudoElement", "$ref": "Node", "description": "The added pseudo element." }
                    ],
                    "description": "Called when a pseudo element is added to an element.",
                    "hidden": true
                },
                {
                    "name": "pseudoElementRemoved",
                    "parameters": [
                        { "name": "parentId", "$ref": "NodeId", "description": "Pseudo element's parent element id." },
                        { "name": "pseudoElementId", "$ref": "NodeId", "description": "The removed pseudo element id." }
                    ],
                    "description": "Called when a pseudo element is removed from an element.",
                    "hidden": true
                },
                {
                    "name": "distributedNodesUpdated",
                    "parameters": [
                        { "name": "insertionPointId", "$ref": "NodeId", "description": "Insertion point where distrubuted nodes were updated." },
                        { "name": "distributedNodes", "type": "array", "items": { "$ref": "BackendNode" }, "description": "Distributed nodes for given insertion point." }
                    ],
                    "description": "Called when distrubution is changed.",
                    "hidden": true
                }
            ]
        },
        {
            "domain": "CSS",
            "hidden": true,
            "description": "This domain exposes CSS read/write operations. All CSS objects (stylesheets, rules, and styles) have an associated <code>id</code> used in subsequent operations on the related object. Each object type has a specific <code>id</code> structure, and those are not interchangeable between objects of different kinds. CSS objects can be loaded using the <code>get*ForNode()</code> calls (which accept a DOM node id). A client can also discover all the existing stylesheets with the <code>getAllStyleSheets()</code> method (or keeping track of the <code>styleSheetAdded</code>/<code>styleSheetRemoved</code> events) and subsequently load the required stylesheet contents using the <code>getStyleSheet[Text]()</code> methods.",
            "types": [
                {
                    "id": "StyleSheetId",
                    "type": "string"
                },
                {
                    "id": "StyleSheetOrigin",
                    "type": "string",
                    "enum": ["injected", "user-agent", "inspector", "regular"],
                    "description": "Stylesheet type: \"injected\" for stylesheets injected via extension, \"user-agent\" for user-agent stylesheets, \"inspector\" for stylesheets created by the inspector (i.e. those holding the \"via inspector\" rules), \"regular\" for regular stylesheets."
                },
                {
                    "id": "PseudoIdMatches",
                    "type": "object",
                    "properties": [
                        { "name": "pseudoId", "type": "integer", "description": "Pseudo style identifier (see <code>enum PseudoId</code> in <code>ComputedStyleConstants.h</code>)."},
                        { "name": "matches", "type": "array", "items": { "$ref": "RuleMatch" }, "description": "Matches of CSS rules applicable to the pseudo style."}
                    ],
                    "description": "CSS rule collection for a single pseudo style."
                },
                {
                    "id": "InheritedStyleEntry",
                    "type": "object",
                    "properties": [
                        { "name": "inlineStyle", "$ref": "CSSStyle", "optional": true, "description": "The ancestor node's inline style, if any, in the style inheritance chain." },
                        { "name": "matchedCSSRules", "type": "array", "items": { "$ref": "RuleMatch" }, "description": "Matches of CSS rules matching the ancestor node in the style inheritance chain." }
                    ],
                    "description": "Inherited CSS rule collection from ancestor node."
                },
                {
                    "id": "RuleMatch",
                    "type": "object",
                    "properties": [
                        { "name": "rule", "$ref": "CSSRule", "description": "CSS rule in the match." },
                        { "name": "matchingSelectors", "type": "array", "items": { "type": "integer" }, "description": "Matching selector indices in the rule's selectorList selectors (0-based)." }
                    ],
                    "description": "Match data for a CSS rule."
                },
                {
                    "id": "Selector",
                    "type": "object",
                    "properties": [
                        { "name": "value", "type": "string", "description": "Selector text." },
                        { "name": "range", "$ref": "SourceRange", "optional": true, "description": "Selector range in the underlying resource (if available)." }
                    ],
                    "description": "Data for a simple selector (these are delimited by commas in a selector list)."
                },
                {
                    "id": "SelectorList",
                    "type": "object",
                    "properties": [
                        { "name": "selectors", "type": "array", "items": { "$ref": "Selector" }, "description": "Selectors in the list." },
                        { "name": "text", "type": "string", "description": "Rule selector text." }
                    ],
                    "description": "Selector list data."
                },
                {
                    "id": "CSSStyleSheetHeader",
                    "type": "object",
                    "properties": [
                        { "name": "styleSheetId", "$ref": "StyleSheetId", "description": "The stylesheet identifier."},
                        { "name": "frameId", "$ref": "Page.FrameId", "description": "Owner frame identifier."},
                        { "name": "sourceURL", "type": "string", "description": "Stylesheet resource URL."},
                        { "name": "sourceMapURL", "type": "string", "optional": true, "description": "URL of source map associated with the stylesheet (if any)." },
                        { "name": "origin", "$ref": "StyleSheetOrigin", "description": "Stylesheet origin."},
                        { "name": "title", "type": "string", "description": "Stylesheet title."},
                        { "name": "ownerNode", "$ref": "DOM.BackendNodeId", "optional": true, "description": "The backend id for the owner node of the stylesheet." },
                        { "name": "disabled", "type": "boolean", "description": "Denotes whether the stylesheet is disabled."},
                        { "name": "hasSourceURL", "type": "boolean", "optional": true, "description": "Whether the sourceURL field value comes from the sourceURL comment." },
                        { "name": "isInline", "type": "boolean", "description": "Whether this stylesheet is created for STYLE tag by parser. This flag is not set for document.written STYLE tags." },
                        { "name": "startLine", "type": "number", "description": "Line offset of the stylesheet within the resource (zero based)." },
                        { "name": "startColumn", "type": "number", "description": "Column offset of the stylesheet within the resource (zero based)." }
                    ],
                    "description": "CSS stylesheet metainformation."
                },
                {
                    "id": "CSSRule",
                    "type": "object",
                    "properties": [
                        { "name": "styleSheetId", "$ref": "StyleSheetId", "optional": true, "description": "The css style sheet identifier (absent for user agent stylesheet and user-specified stylesheet rules) this rule came from." },
                        { "name": "selectorList", "$ref": "SelectorList", "description": "Rule selector data." },
                        { "name": "origin", "$ref": "StyleSheetOrigin", "description": "Parent stylesheet's origin."},
                        { "name": "style", "$ref": "CSSStyle", "description": "Associated style declaration." },
                        { "name": "media", "type": "array", "items": { "$ref": "CSSMedia" }, "optional": true, "description": "Media list array (for rules involving media queries). The array enumerates media queries starting with the innermost one, going outwards." }
                    ],
                    "description": "CSS rule representation."
                },
                {
                    "id": "SourceRange",
                    "type": "object",
                    "properties": [
                        { "name": "startLine", "type": "integer", "description": "Start line of range." },
                        { "name": "startColumn", "type": "integer", "description": "Start column of range (inclusive)." },
                        { "name": "endLine", "type": "integer", "description": "End line of range" },
                        { "name": "endColumn", "type": "integer", "description": "End column of range (exclusive)." }
                    ],
                    "description": "Text range within a resource. All numbers are zero-based."
                },
                {
                    "id": "ShorthandEntry",
                    "type": "object",
                    "properties": [
                        { "name": "name", "type": "string", "description": "Shorthand name." },
                        { "name": "value", "type": "string", "description": "Shorthand value." }
                    ]
                },
                {
                    "id": "CSSComputedStyleProperty",
                    "type": "object",
                    "properties": [
                        { "name": "name", "type": "string", "description": "Computed style property name." },
                        { "name": "value", "type": "string", "description": "Computed style property value." }
                    ]
                },
                {
                    "id": "CSSStyle",
                    "type": "object",
                    "properties": [
                        { "name": "styleSheetId", "$ref": "StyleSheetId", "optional": true, "description": "The css style sheet identifier (absent for user agent stylesheet and user-specified stylesheet rules) this rule came from." },
                        { "name": "cssProperties", "type": "array", "items": { "$ref": "CSSProperty" }, "description": "CSS properties in the style." },
                        { "name": "shorthandEntries", "type": "array", "items": { "$ref": "ShorthandEntry" }, "description": "Computed values for all shorthands found in the style." },
                        { "name": "cssText", "type": "string", "optional": true, "description": "Style declaration text (if available)." },
                        { "name": "range", "$ref": "SourceRange", "optional": true, "description": "Style declaration range in the enclosing stylesheet (if available)." }
                    ],
                    "description": "CSS style representation."
                },
                {
                    "id": "CSSProperty",
                    "type": "object",
                    "properties": [
                        { "name": "name", "type": "string", "description": "The property name." },
                        { "name": "value", "type": "string", "description": "The property value." },
                        { "name": "important", "type": "boolean", "optional": true, "description": "Whether the property has \"!important\" annotation (implies <code>false</code> if absent)." },
                        { "name": "implicit", "type": "boolean", "optional": true, "description": "Whether the property is implicit (implies <code>false</code> if absent)." },
                        { "name": "text", "type": "string", "optional": true, "description": "The full property text as specified in the style." },
                        { "name": "parsedOk", "type": "boolean", "optional": true, "description": "Whether the property is understood by the browser (implies <code>true</code> if absent)." },
                        { "name": "disabled", "type": "boolean", "optional": true, "description": "Whether the property is disabled by the user (present for source-based properties only)." },
                        { "name": "range", "$ref": "SourceRange", "optional": true, "description": "The entire property range in the enclosing style declaration (if available)." }
                    ],
                    "description": "CSS property declaration data."
                },
                {
                    "id": "CSSMedia",
                    "type": "object",
                    "properties": [
                        { "name": "text", "type": "string", "description": "Media query text." },
                        { "name": "source", "type": "string", "enum": ["mediaRule", "importRule", "linkedSheet", "inlineSheet"], "description": "Source of the media query: \"mediaRule\" if specified by a @media rule, \"importRule\" if specified by an @import rule, \"linkedSheet\" if specified by a \"media\" attribute in a linked stylesheet's LINK tag, \"inlineSheet\" if specified by a \"media\" attribute in an inline stylesheet's STYLE tag." },
                        { "name": "sourceURL", "type": "string", "optional": true, "description": "URL of the document containing the media query description." },
                        { "name": "range", "$ref": "SourceRange", "optional": true, "description": "The associated rule (@media or @import) header range in the enclosing stylesheet (if available)." },
                        { "name": "parentStyleSheetId", "$ref": "StyleSheetId", "optional": true, "description": "Identifier of the stylesheet containing this object (if exists)." },
                        { "name": "mediaList", "type": "array", "items": { "$ref": "MediaQuery" }, "optional": true, "hidden": true, "description": "Array of media queries." }
                    ],
                    "description": "CSS media rule descriptor."
                },
                {
                    "id": "MediaQuery",
                    "type": "object",
                    "properties": [
                        { "name": "expressions", "type": "array", "items": { "$ref": "MediaQueryExpression" }, "description": "Array of media query expressions." },
                        { "name": "active", "type": "boolean", "description": "Whether the media query condition is satisfied." }
                    ],
                    "description": "Media query descriptor.",
                    "hidden": true
                },
                {
                    "id": "MediaQueryExpression",
                    "type": "object",
                    "properties": [
                        { "name": "value", "type": "number", "description": "Media query expression value."},
                        { "name": "unit", "type": "string", "description": "Media query expression units."},
                        { "name": "feature", "type": "string", "description": "Media query expression feature."},
                        { "name": "valueRange", "$ref": "SourceRange", "optional": true, "description": "The associated range of the value text in the enclosing stylesheet (if available)." },
                        { "name": "computedLength", "type": "number", "optional": true, "description": "Computed length of media query expression (if applicable)."}
                    ],
                    "description": "Media query expression descriptor.",
                    "hidden": true
                },
                {
                    "id": "PlatformFontUsage",
                    "type": "object",
                    "properties": [
                        { "name": "familyName", "type": "string", "description": "Font's family name reported by platform."},
                        { "name": "glyphCount", "type": "number", "description": "Amount of glyphs that were rendered with this font."}
                    ],
                    "description": "Information about amount of glyphs that were rendered with given font.",
                    "hidden": true
                }
            ],
            "commands": [
                {
                    "name": "enable",
                    "async": true,
                    "description": "Enables the CSS agent for the given page. Clients should not assume that the CSS agent has been enabled until the result of this command is received."
                },
                {
                    "name": "disable",
                    "description": "Disables the CSS agent for the given page."
                },
                {
                    "name": "getMatchedStylesForNode",
                    "parameters": [
                        { "name": "nodeId", "$ref": "DOM.NodeId" },
                        { "name": "excludePseudo", "type": "boolean", "optional": true, "description": "Whether to exclude pseudo styles (default: false)." },
                        { "name": "excludeInherited", "type": "boolean", "optional": true, "description": "Whether to exclude inherited styles (default: false)." }
                    ],
                    "returns": [
                        { "name": "matchedCSSRules", "type": "array", "items": { "$ref": "RuleMatch" }, "optional": true, "description": "CSS rules matching this node, from all applicable stylesheets." },
                        { "name": "pseudoElements", "type": "array", "items": { "$ref": "PseudoIdMatches" }, "optional": true, "description": "Pseudo style matches for this node." },
                        { "name": "inherited", "type": "array", "items": { "$ref": "InheritedStyleEntry" }, "optional": true, "description": "A chain of inherited styles (from the immediate node parent up to the DOM tree root)." }
                    ],
                    "description": "Returns requested styles for a DOM node identified by <code>nodeId</code>."
                },
                {
                    "name": "getInlineStylesForNode",
                    "parameters": [
                        { "name": "nodeId", "$ref": "DOM.NodeId" }
                    ],
                    "returns": [
                        { "name": "inlineStyle", "$ref": "CSSStyle", "optional": true, "description": "Inline style for the specified DOM node." },
                        { "name": "attributesStyle", "$ref": "CSSStyle", "optional": true, "description": "Attribute-defined element style (e.g. resulting from \"width=20 height=100%\")."}
                    ],
                    "description": "Returns the styles defined inline (explicitly in the \"style\" attribute and implicitly, using DOM attributes) for a DOM node identified by <code>nodeId</code>."
                },
                {
                    "name": "getComputedStyleForNode",
                    "parameters": [
                        { "name": "nodeId", "$ref": "DOM.NodeId" }
                    ],
                    "returns": [
                        { "name": "computedStyle", "type": "array", "items": { "$ref": "CSSComputedStyleProperty" }, "description": "Computed style for the specified DOM node." }
                    ],