• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 &lt;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