1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5[ 6 { 7 "namespace": "webviewTag", 8 "description": "Use the <code>webview</code> tag to actively load live content from the web over the network and embed it in your Chrome App. Your app can control the appearance of the <code>webview</code> and interact with the web content, initiate navigations in an embedded web page, react to error events that happen within it, and more (see <a href=\"#usage\">Usage</a>).", 9 "documentation_options": { 10 "title": "<webview> Tag", 11 "namespace": "<webview>" 12 }, 13 "types": [ 14 { 15 "id": "ClearDataOptions", 16 "type": "object", 17 "description": "Options that determine what data should be cleared by <code>clearData</code>.", 18 "properties": { 19 "since": { 20 "type": "number", 21 "optional": true, 22 "description": "Clear data accumulated on or after this date, represented in milliseconds since the epoch (accessible via the getTime method of the JavaScript <code>Date</code> object). If absent, defaults to <code>0</code> (which would remove all browsing data)." 23 } 24 } 25 }, 26 { 27 "id": "ClearDataTypeSet", 28 "type": "object", 29 "description": "A set of data types. Missing properties are interpreted as <code>false</code>.", 30 "properties": { 31 "appcache": { "type": "boolean", "optional": true, "description": "Websites' appcaches." }, 32 "cache": { "type": "boolean", "optional": true, "description": "The partition's cache. Note: This clears the entire cache regardless of the age passed to <code>clearData</code>." }, 33 "cookies": { "type": "boolean", "optional": true, "description": "The partition's cookies." }, 34 "downloads": { "type": "boolean", "optional": true, "description": "The partition's download list." }, 35 "fileSystems": { "type": "boolean", "optional": true, "description": "Websites' filesystems." }, 36 "formData": { "type": "boolean", "optional": true, "description": "The partition's stored form data." }, 37 "history": { "type": "boolean", "optional": true, "description": "The partition's history." }, 38 "indexedDB": { "type": "boolean", "optional": true, "description": "Websites' IndexedDB data." }, 39 "localStorage": { "type": "boolean", "optional": true, "description": "Websites' local storage data." }, 40 "serverBoundCertificates": { "type": "boolean", "optional": true, "description": "Server-bound certificates." }, 41 "pluginData": { "type": "boolean", "optional": true, "description": "Plugins' data." }, 42 "passwords": { "type": "boolean", "optional": true, "description": "Stored passwords." }, 43 "webSQL": { "type": "boolean", "optional": true, "description": "Websites' WebSQL data." } 44 } 45 }, 46 { 47 "id": "InjectDetails", 48 "type": "object", 49 "description": "Details of the script or CSS to inject. Either the code or the file property must be set, but both may not be set at the same time.", 50 "properties": { 51 "code": { 52 "type": "string", 53 "optional": true, 54 "description": "JavaScript or CSS code to inject." 55 }, 56 "file": { 57 "type": "string", 58 "optional": true, 59 "description": "JavaScript or CSS file to inject." 60 } 61 } 62 }, 63 { 64 "id": "ContentWindow", 65 "type": "object", 66 "description": "Messaging handle to a guest window.", 67 "functions": [ 68 { 69 "name": "postMessage", 70 "description": "<p>Posts a message to the embedded web content as long as the embedded content is displaying a page from the target origin. This method is available once the page has completed loading. Listen for the <a href=\"#event-contentload\">contentload</a> event and then call the method.</p><p>The guest will be able to send replies to the embedder by posting message to <code>event.source</code> on the message event it receives.</p><p>This API is identical to the <a href=\"https://developer.mozilla.org/en-US/docs/DOM/window.postMessage\">HTML5 postMessage API</a> for communication between web pages. The embedder may listen for replies by adding a <code>message</code> event listener to its own frame.</p>", 71 "parameters": [ 72 { 73 "type": "any", 74 "name": "message", 75 "description": "Message object to send to the guest." 76 }, 77 { 78 "type": "string", 79 "name": "targetOrigin", 80 "description": "Specifies what the origin of the guest window must be for the event to be dispatched." 81 } 82 ] 83 } 84 ] 85 }, 86 { 87 "id": "DialogController", 88 "type": "object", 89 "description": "Interface attached to <code>dialog</code> DOM events.", 90 "functions": [ 91 { 92 "name": "ok", 93 "description": "Accept the dialog. Equivalent to clicking OK in an <code>alert</code>, <code>confirm</code>, or <code>prompt</code> dialog.", 94 "parameters": [ 95 { 96 "type": "string", 97 "optional": true, 98 "name": "response", 99 "description": "The response string to provide to the guest when accepting a <code>prompt</code> dialog." 100 } 101 ] 102 }, 103 { 104 "name": "cancel", 105 "description": "Reject the dialog. Equivalent to clicking Cancel in a <code>confirm</code> or <code>prompt</code> dialog." 106 } 107 ] 108 }, 109 { 110 "id": "NewWindow", 111 "type": "object", 112 "description": "Interface attached to <code>newwindow</code> DOM events.", 113 "functions": [ 114 { 115 "name": "attach", 116 "description": "Attach the requested target page to an existing <code>webview</code> element.", 117 "parameters": [ 118 { 119 "type": "object", 120 "name": "webview", 121 "description": "The <code>webview</code> element to which the target page should be attached.", 122 "properties": {} 123 } 124 ] 125 }, 126 { 127 "name": "discard", 128 "description": "Cancel the new window request." 129 } 130 ] 131 }, 132 { 133 "id": "MediaPermissionRequest", 134 "type": "object", 135 "description": "The type of <code>request</code> object which accompanies a <code>media</code> <a href=\"#event-permissionrequest\">permissionrequest</a></code> DOM event.", 136 "properties": { 137 "url": { 138 "description": "The URL of the frame requesting access to user media.", 139 "type": "string" 140 } 141 }, 142 "functions": [ 143 { "name": "allow", "description": "Allow the permission request." }, 144 { "name": "deny", "description": "Deny the permission request. This is the default behavior if <code>allow</code> is not called." } 145 ] 146 }, 147 { 148 "id": "GeolocationPermissionRequest", 149 "type": "object", 150 "description": "The type of <code>request</code> object which accompanies a <code>geolocation</code> <a href=\"#event-permissionrequest\">permissionrequest</a></code> DOM event.", 151 "properties": { 152 "url": { 153 "description": "The URL of the frame requesting access to geolocation data.", 154 "type": "string" 155 } 156 }, 157 "functions": [ 158 { "name": "allow", "description": "Allow the permission request." }, 159 { "name": "deny", "description": "Deny the permission request. This is the default behavior if <code>allow</code> is not called." } 160 ] 161 }, 162 { 163 "id": "PointerLockPermissionRequest", 164 "type": "object", 165 "description": "The type of <code>request</code> object which accompanies a <code>pointerLock</code> <a href=\"#event-permissionrequest\">permissionrequest</a></code> DOM event.", 166 "properties": { 167 "userGesture": { 168 "description": "Whether or not pointer lock was requested as a result of a user input gesture.", 169 "type": "boolean" 170 }, 171 "lastUnlockedBySelf": { 172 "description": "Whether or not the requesting frame was the most recent client to hold pointer lock.", 173 "type": "boolean" 174 }, 175 "url": { 176 "description": "The URL of the frame requesting pointer lock.", 177 "type": "string" 178 } 179 }, 180 "functions": [ 181 { "name": "allow", "description": "Allow the permission request." }, 182 { "name": "deny", "description": "Deny the permission request. This is the default behavior if <code>allow</code> is not called." } 183 ] 184 }, 185 { 186 "id": "DownloadPermissionRequest", 187 "type": "object", 188 "description": "The type of <code>request</code> object which accompanies a <code>download</code> <a href=\"#event-permissionrequest\">permissionrequest</a></code> DOM event.", 189 "properties": { 190 "requestMethod": { 191 "description": "The HTTP request type (e.g. <code>GET</code>) associated with the download request.", 192 "type": "string" 193 }, 194 "url": { 195 "description": "The requested download URL.", 196 "type": "string" 197 } 198 }, 199 "functions": [ 200 { "name": "allow", "description": "Allow the permission request." }, 201 { "name": "deny", "description": "Deny the permission request. This is the default behavior if <code>allow</code> is not called." } 202 ] 203 }, 204 { 205 "id": "LoadPluginPermissionRequest", 206 "type": "object", 207 "description": "The type of <code>request</code> object which accompanies a <code>loadplugin</code> <a href=\"#event-permissionrequest\">permissionrequest</a> DOM event.<p>", 208 "properties": { 209 "identifier": { 210 "description": "The plugin's identifier string.", 211 "type": "string" 212 }, 213 "name": { 214 "description": "The plugin's display name.", 215 "type": "string" 216 } 217 }, 218 "functions": [ 219 { "name": "allow", "description": "Allow the permission request. This is the default behavior if <code>deny</code> is not called.." }, 220 { "name": "deny", "description": "Deny the permission request." } 221 ] 222 }, 223 { 224 "id": "WebRequestEventInteface", 225 "type": "object", 226 "description": "Interface which provides access to webRequest events on the guest page. See the <a href=\"http://developer.chrome.com/extensions/webRequest.html\">chrome.webRequest</a> extensions API for details on webRequest life cycle and related concepts.<p>To illustrate how usage differs from the extensions webRequest API, consider the following example code which blocks any guest requests for URLs which match <code>*://www.evil.com/*</code>:</p><pre>webview.request.onBeforeRequest.addListener(\r function(details) { return {cancel: true}; },\r {urls: [\"*://www.evil.com/*\"]},\r [\"blocking\"]);</pre><p>Additionally, this interface supports declarative webRequest rules through <code>onRequest</code> and <code>onMessage</code> events. See <a href=\"http://developer.chrome.com/extensions/declarativeWebRequest.html\">declarativeWebRequest</a> for API details.</p>Note that conditions and actions for declarative webview webRequests should be instantiated from their <code>chrome.webViewRequest.*</code> counterparts. The following example code declaratively blocks all requests to <code>\"example.com\"</code> on the webview <code>myWebview</code>:</p><pre>var rule = {\r conditions: [\r new chrome.webViewRequest.RequestMatcher({ url: { hostSuffix: 'example.com' } })\r ],\r actions: [ new chrome.webViewRequest.CancelRequest() ]\r};\rmyWebview.request.onRequest.addRules([rule]);</pre>", 227 "properties": {} 228 } 229 ], 230 "functions": [ 231 { 232 "name": "back", 233 "type": "function", 234 "description": "Navigates backward one history entry if possible. Equivalent to <code>go(-1)</code>." 235 }, 236 { 237 "name": "canGoBack", 238 "type": "function", 239 "returns": { "type": "boolean" }, 240 "description": "Indicates whether or not it is possible to navigate backward through history." 241 }, 242 { 243 "name": "canGoForward", 244 "type": "function", 245 "returns": { "type": "boolean" }, 246 "description": "Indicates whether or not it is possible to navigate forward through history." 247 }, 248 { 249 "name": "clearData", 250 "type": "function", 251 "description": "<p>Clears browsing data for the <code>webview</code> partition.</p>", 252 "parameters": [ 253 { 254 "name": "options", 255 "$ref": "ClearDataOptions", 256 "description": "Options determining exactly what data to clear." 257 }, 258 { 259 "name": "types", 260 "$ref": "ClearDataTypeSet", 261 "description": "The types of data to be cleared." 262 }, 263 { 264 "type": "function", 265 "name": "callback", 266 "optional": true, 267 "description": "Called after the data has been successfully cleared.", 268 "parameters": [] 269 } 270 ] 271 }, 272 { 273 "name": "executeScript", 274 "type": "function", 275 "description": "<p>Injects JavaScript code into the guest page.</p><p>The following sample code uses script injection to set the guest page's background color to red:</p><pre>webview.executeScript({ code: \"document.body.bgColor = 'red'\" });</pre>", 276 "parameters": [ 277 { 278 "$ref": "InjectDetails", 279 "name": "details", 280 "description": "Details of the script to run." 281 }, 282 { 283 "type": "function", 284 "name": "callback", 285 "optional": true, 286 "description": "Called after all the JavaScript has been executed.", 287 "parameters": [ 288 { 289 "name": "result", 290 "optional": true, 291 "type": "array", 292 "items": {"type": "any", "minimum": 0}, 293 "description": "The result of the script in every injected frame." 294 } 295 ] 296 } 297 ] 298 }, 299 { 300 "name": "forward", 301 "type": "function", 302 "description": "Navigates forward one history entry if possible. Equivalent to <code>go(1)</code>.", 303 "parameters": [] 304 }, 305 { 306 "name": "getProcessId", 307 "type": "function", 308 "returns": { "type": "integer" }, 309 "description": "Returns Chrome's internal process ID for the guest web page's current process, allowing embedders to know how many guests would be affected by terminating the process. Two guests will share a process only if they belong to the same app and have the same <a href=\"#partition\">storage partition ID</a>. The call is synchronous and returns the embedder's cached notion of the current process ID. The process ID isn't the same as the operating system's process ID.", 310 "parameters": [] 311 }, 312 { 313 "name": "getUserAgent", 314 "type": "function", 315 "returns": { "type": "string" }, 316 "description": "Returns the user agent string used by the webview for guest page requests.", 317 "parameters": [] 318 }, 319 { 320 "name": "go", 321 "type": "function", 322 "description": "Navigates to a history entry using a history index relative to the current navigation. If the requested navigation is impossible, this method has no effect.", 323 "parameters": [ 324 { 325 "type": "integer", 326 "name": "relativeIndex", 327 "description": "Relative history index to which the webview should be navigated. For example, a value of <code>2</code> will navigate forward 2 history entries if possible; a value of <code>-3</code> will navigate backward 3 entries." 328 } 329 ] 330 }, 331 { 332 "name": "insertCSS", 333 "type": "function", 334 "description": "Injects CSS into the guest page.", 335 "parameters": [ 336 { 337 "$ref": "InjectDetails", 338 "name": "details", 339 "description": "Details of the CSS to insert." 340 }, 341 { 342 "type": "function", 343 "name": "callback", 344 "optional": true, 345 "description": "Called after the CSS has been inserted.", 346 "parameters": [] 347 } 348 ] 349 }, 350 { 351 "name": "isUserAgentOverridden", 352 "type": "function", 353 "description": "Indicates whether or not the webview's user agent string has been overridden by $ref:setUserAgentOverride" 354 }, 355 { 356 "name": "reload", 357 "type": "function", 358 "description": "Reloads the current top-level page.", 359 "parameters": [] 360 }, 361 { 362 "name": "setUserAgentOverride", 363 "type": "function", 364 "description": "Override the user agent string used by the webview for guest page requests.", 365 "parameters": [ 366 { 367 "name": "userAgent", 368 "type": "string", 369 "description": "The user agent string to use." 370 } 371 ] 372 }, 373 { 374 "name": "stop", 375 "type": "function", 376 "description": "Stops loading the current <webview> navigation if in progress.", 377 "parameters": [] 378 }, 379 { 380 "name": "terminate", 381 "type": "function", 382 "description": "Forcibly kills the guest web page's renderer process. This may affect multiple <code>webview</code> tags in the current app if they share the same process, but it will not affect <code>webview</code> tags in other apps.", 383 "parameters": [] 384 } 385 ], 386 "events": [ 387 { 388 "name": "close", 389 "options": { "supportsDom": true }, 390 "description": "Fired when the guest window attempts to close itself.<p>The following example code navigates the webview to <code>about:blank</code> when the guest attempts to close itself.</p><pre>webview.addEventListener('close', function() {\r webview.src = 'about:blank';\r});</pre>", 391 "parameters": [] 392 }, 393 { 394 "name": "consolemessage", 395 "options": { "supportsDom": true }, 396 "description": "Fired when the guest window logs a console message.<p>The following example code forwards all log messages to the embedder's console without regard for log level or other properties.</p><pre>webview.addEventListener('consolemessage', function(e) {\r console.log('Guest page logged a message: ', e.message);\r});</pre>", 397 "parameters": [ 398 { 399 "name": "level", 400 "description": "The severity level of the log message. Ranges from 0 to 4.", 401 "type": "integer" 402 }, 403 { 404 "name": "message", 405 "description": "The logged message contents.", 406 "type": "string" 407 }, 408 { 409 "name": "line", 410 "description": "The line number of the message source.", 411 "type": "integer" 412 }, 413 { 414 "name": "sourceId", 415 "description": "A string identifying the resource which logged the message.", 416 "type": "string" 417 } 418 ] 419 }, 420 { 421 "name": "contentload", 422 "options": { "supportsDom": true }, 423 "description": "Fired when the guest window fires a <code>load</code> event.<p>The following example code modifies the default font size of the guest's <code>body</code> element after the page loads:</p><pre>webview.addEventListener('contentload', function() {\r webview.executeScript({ code: 'document.body.style.fontSize = \"42px\"' });\r});</pre>", 424 "parameters": [] 425 }, 426 { 427 "name": "dialog", 428 "options": { "supportsDom": true }, 429 "description": "Fired when the guest window attempts to open a modal dialog via <code>window.alert</code>, <code>window.confirm</code>, or <code>window.prompt</code>.<p>Handling this event will block the guest process until each event listener returns or the <code>dialog</code> object becomes unreachable (if <code>preventDefault()</code> was called.)</p><p>The default behavior is to cancel the dialog.</p>", 430 "parameters": [ 431 { 432 "name": "messageType", 433 "type": "string", 434 "enum": ["alert", "confirm", "prompt"], 435 "description": "The type of modal dialog requested by the guest." 436 }, 437 { 438 "name": "messageText", 439 "type": "string", 440 "description": "The text the guest attempted to display in the modal dialog." 441 }, 442 { 443 "name": "dialog", 444 "$ref": "DialogController", 445 "description": "An interface that can be used to respond to the guest's modal request." 446 } 447 ] 448 }, 449 { 450 "name": "exit", 451 "options": { "supportsDom": true }, 452 "description": "Fired when the process rendering the guest web content has exited.<p>The following example code will show a farewell message whenever the guest page crashes:</p><pre>webview.addEventListener('exit', function(e) {\r if (e.reason === 'crash') {\r webview.src = 'data:text/plain,Goodbye, world!';\r }\r});</pre>", 453 "parameters": [ 454 { 455 "name": "processID", 456 "description": "Chrome's interal ID of the process that exited.", 457 "type": "integer" 458 }, 459 { 460 "name": "reason", 461 "description": "String indicating the reason for the exit.", 462 "type": "string", 463 "enum": ["normal", "abnormal", "crash", "kill"] 464 } 465 ] 466 }, 467 { 468 "name": "loadabort", 469 "options": { "supportsDom": true }, 470 "description": "Fired when a top-level load has aborted without committing.", 471 "parameters": [ 472 { 473 "name": "url", 474 "description": "Requested URL.", 475 "type": "string" 476 }, 477 { 478 "name": "isTopLevel", 479 "description": "Whether the load was top-level or in a subframe.", 480 "type": "boolean" 481 }, 482 { 483 "name": "reason", 484 "description": "String indicating what type of abort occurred.", 485 "type": "string", 486 "enum": ["networkError", "download", "canceled", "sslError", "safeBrowsingError"] 487 } 488 ] 489 }, 490 { 491 "name": "loadcommit", 492 "options": { "supportsDom": true }, 493 "description": "Fired when a load has committed.", 494 "parameters": [ 495 { 496 "name": "url", 497 "description": "The URL that committed.", 498 "type": "string" 499 }, 500 { 501 "name": "isTopLevel", 502 "description": "Whether the load is top-level or in a subframe.", 503 "type": "boolean" 504 } 505 ] 506 }, 507 { 508 "name": "loadredirect", 509 "options": { "supportsDom": true }, 510 "description": "Fired when a top-level load request has redirected to a different URL.", 511 "parameters": [ 512 { 513 "name": "oldUrl", 514 "description": "The requested URL before the redirect.", 515 "type": "string" 516 }, 517 { 518 "name": "newUrl", 519 "description": "The new URL after the redirect.", 520 "type": "string" 521 }, 522 { 523 "name": "isTopLevel", 524 "description": "Whether or not the redirect happened at top-level or in a subframe.", 525 "type": "boolean" 526 } 527 ] 528 }, 529 { 530 "name": "loadstart", 531 "options": { "supportsDom": true }, 532 "description": "Fired when a load has begun.", 533 "parameters": [ 534 { 535 "name": "url", 536 "description": "Requested URL.", 537 "type": "string" 538 }, 539 { 540 "name": "isTopLevel", 541 "description": "Whether the load is top-level or in a subframe.", 542 "type": "boolean" 543 } 544 ] 545 }, 546 { 547 "name": "loadstop", 548 "options": { "supportsDom": true }, 549 "description": "Fired when all loads in the guest page (including all subframes) have completed. Fires in addition to any related <code>loadcommit</code> or <code>loadabort</code> events, which occur per-frame.", 550 "parameters": [] 551 }, 552 { 553 "name": "newwindow", 554 "options": { "supportsDom": true }, 555 "description": "Fired when the guest page attempts to open a new browser window.<p>The following example code will create and navigate a new <code>webview</code> in the embedder for each requested new window:</p><pre>webview.addEventListener('newwindow', function(e) {\r var newWebview = document.createElement('webview');\r document.body.appendChild(newWebview);\r e.window.attach(newWebview);\r});</pre>", 556 "parameters": [ 557 { 558 "name": "window", 559 "description": "An interface that can be used to either attach the requested target page to an existing <code>webview</code> element or explicitly discard the request.", 560 "$ref": "NewWindow" 561 }, 562 { 563 "name": "targetUrl", 564 "description": "The target URL requested for the new window.", 565 "type": "string" 566 }, 567 { 568 "name": "initialWidth", 569 "description": "The initial width requested for the new window.", 570 "type": "number" 571 }, 572 { 573 "name": "initialHeight", 574 "description": "The initial height requested for the new window.", 575 "type": "number" 576 }, 577 { 578 "name": "name", 579 "description": "The requested name of the new window.", 580 "type": "string" 581 }, 582 { 583 "name": "windowOpenDisposition", 584 "description": "The requested disposition of the new window.", 585 "type": "string", 586 "enum": ["ignore", "save_to_disk", "current_tab", "new_background_tab", "new_foreground_tab", "new_window", "new_popup"] 587 } 588 ] 589 }, 590 { 591 "name": "permissionrequest", 592 "options": { "supportsDom": true }, 593 "description": "Fired when the guest page needs to request special permission from the embedder.<p>The following example code will grant the guest page access to the <code>webkitGetUserMedia</code> API. Note that an app using this example code must itself specify <code>audioCapture</code> and/or <code>videoCapture</code> manifest permissions:</p><pre>webview.addEventListener('permissionrequest', function(e) {\r if (e.permission === 'media') {\r e.request.allow();\r }\r});</pre>", 594 "parameters": [ 595 { 596 "name": "permission", 597 "description": "The type of permission being requested.", 598 "type": "string", 599 "enum": ["media", "geolocation", "pointerLock", "download", "loadplugin"] 600 }, 601 { 602 "name": "requestId", 603 "description": "A number which uniquely identifies this request from the guest.", 604 "type": "integer" 605 }, 606 { 607 "name": "request", 608 "type": "object", 609 "properties": {}, 610 "description": "An object which holds details of the requested permission. Depending on the type of permission requested, this may be a $ref:MediaPermissionRequest, $ref:GeolocationPermissionRequest, $ref:PointerLockPermissionRequest, $ref:DownloadPermissionRequest, or $ref:LoadPluginPermissionRequest." 611 } 612 ] 613 }, 614 { 615 "name": "responsive", 616 "options": { "supportsDom": true }, 617 "description": "Fired when the process rendering the guest web content has become responsive again after being unresponsive.<p>The following example code will fade the <code>webview</code> element in or out as it becomes responsive or unresponsive:</p><pre>webview.style.webkitTransition = 'opacity 250ms';\rwebview.addEventListener('unresponsive', function() {\r webview.style.opacity = '0.5';\r});\rwebview.addEventListener('responsive', function() {\r webview.style.opacity = '1';\r});</pre>", 618 "parameters": [ 619 { 620 "name": "processID", 621 "description": "Chrome's internal ID of the process that became responsive.", 622 "type": "integer" 623 } 624 ] 625 }, 626 { 627 "name": "sizechanged", 628 "options": { "supportsDom": true }, 629 "description": "Fired when the embedded web content has been resized. Only fires if <code>autosize</code> is enabled.", 630 "parameters": [ 631 { 632 "name": "oldWidth", 633 "description": "Old width of embedded web content.", 634 "type": "number" 635 }, 636 { 637 "name": "oldHeight", 638 "description": "Old height of embedded web content.", 639 "type": "number" 640 }, 641 { 642 "name": "newWidth", 643 "description": "New width of embedded web content.", 644 "type": "number" 645 }, 646 { 647 "name": "newHeight", 648 "description": "New height of embedded web content.", 649 "type": "number" 650 } 651 ] 652 }, 653 { 654 "name": "unresponsive", 655 "options": { "supportsDom": true }, 656 "description": "Fired when the process rendering the guest web content has become unresponsive. This event will be generated once with a matching responsive event if the guest begins to respond again.", 657 "parameters": [ 658 { 659 "name": "processID", 660 "description": "Chrome's internal ID of the process that has become unresponsive.", 661 "type": "integer" 662 } 663 ] 664 } 665 ], 666 "properties": { 667 "contentWindow": { 668 "$ref": "ContentWindow", 669 "description": "Object reference which can be used to post messages into the guest page." 670 }, 671 "request": { 672 "$ref": "WebRequestEventInteface", 673 "description": "Interface which provides access to webRequest events on the guest page." 674 } 675 } 676 } 677] 678 679