1---
2layout: default
3title: API Changelog
4description: GeckoView API Changelog.
5nav_exclude: true
6exclude: true
7---
8
9{% capture javadoc_uri %}{{ site.url }}{{ site.baseurl}}/javadoc/mozilla-central/org/mozilla/geckoview{% endcapture %}
10{% capture bugzilla %}https://bugzilla.mozilla.org/show_bug.cgi?id={% endcapture %}
11
12# GeckoView API Changelog.
13
14⚠️  breaking change and deprecation notices
15
16## v91
17- Extended [`Autocomplete`][78.7] API to support addresses.
18  ([bug 1699794]({{bugzilla}}1699794)).
19- Added [`clearDataFromBaseDomain`][91.1] to [`StorageController`][90.2] for
20  clearing site data by base domain. This includes data of associated subdomains
21  and data partitioned via [`State Partitioning`][91.3].
22- Removed deprecated `MediaElement` API.
23
24[91.1]: {{javadoc_uri}}/StorageController.html#clearDataFromBaseDomain-java.lang.String-long-
25[91.2]: {{javadoc_uri}}/StorageController.html
26[91.3]: https://developer.mozilla.org/en-US/docs/Web/Privacy/State_Partitioning
27
28## v90
29- Added [`WebNotification.silent`][90.1] and [`WebNotification.vibrate`][90.2]
30  support. See also [Web/API/Notification/silent][90.3] and
31  [Web/API/Notification/vibrate][90.4].
32  ([bug 1696145]({{bugzilla}}1696145))
33- ⚠️ Deprecated [`GeckoRuntime.getProfileDir`][90.5], the API is being kept for
34  compatibility but it always returns null.
35- Added [`forceEnableAccessibility`][90.6] runtime setting to enable
36  accessibility during testing.
37  ([bug 1701269]({{bugzilla}}1701269))
38- Removed deprecated [`GeckoView.onTouchEventForResult`][88.4].
39  ([bug 1706403]({{bugzilla}}1706403))
40- ⚠️ Updated [`onContentPermissionRequest`][90.7] to use [`ContentPermission`][90.8]; added
41  [`setPermission`][90.9] to [`StorageController`][90.10] for modifying existing permissions, and
42  allowed Gecko to handle persisting permissions.
43- ⚠️ Added a deprecation schedule to most existing content blocking exception functionality;
44  other than [`addException`][90.11], content blocking exceptions should be treated as content
45  permissions going forward.
46
47[90.1]: {{javadoc_uri}}/WebNotification.html#silent
48[90.2]: {{javadoc_uri}}/WebNotification.html#vibrate
49[90.3]: https://developer.mozilla.org/en-US/docs/Web/API/Notification/silent
50[90.4]: https://developer.mozilla.org/en-US/docs/Web/API/Notification/vibrate
51[90.5]: {{javadoc_uri}}/GeckoRuntime.html#getProfileDir--
52[90.6]: {{javadoc_uri}}/GeckoRuntimeSettings.html#setForceEnableAccessibility-boolean-
53[90.7]: {{javadoc_uri}}/GeckoSession.PermissionDelegate.html#onContentPermissionRequest-org.mozilla.geckoview.GeckoSession-org.mozilla.geckoview.GeckoSession.PermissionDelegate.ContentPermission-
54[90.8]: {{javadoc_uri}}/GeckoSession.PermissionDelegate.ContentPermission.html
55[90.9]: {{javadoc_uri}}/StorageController.html#setPermission-org.mozilla.geckoview.GeckoSession.PermissionDelegate.ContentPermission-int-
56[90.10]: {{javadoc_uri}}/StorageController.html
57[90.11]: {{javadoc_uri}}/ContentBlockingController.html#addException-org.mozilla.geckoview.GeckoSession-
58
59## v89
60- Added [`ContentPermission`][89.1], which is used to report what permissions content
61  is loaded with in `onLocationChange`.
62- Added [`StorageController.getPermissions`][89.2] and [`StorageController.getAllPermissions`][89.3],
63  allowing inspection of what permissions have been set for a given URI and for all URIs.
64- ⚠️ Deprecated [`NavigationDelegate.onLocationChange`][89.4], to be removed in v92. The
65  new `onLocationChange` callback simply adds permissions information, migration of existing
66  functionality should only require updating the function signature.
67- Added [`GeckoRuntimeSettings.setEnterpriseRootsEnabled`][89.5] which allows
68  GeckoView to add third party certificate roots from the Android OS CA store.
69  ([bug 1678191]({{bugzilla}}1678191)).
70- ⚠️ [`GeckoSession.load`][89.6] now throws `IllegalArgumentException` if the
71  session has no [`GeckoSession.NavigationDelegate`][89.7] and the request's `data` URI is too long.
72  If a `GeckoSession` *does* have a `GeckoSession.NavigationDelegate` and `GeckoSession.load` is called
73  with a top-level `data` URI that is too long, [`NavigationDelgate.onLoadError`][89.8] will be called
74  with a [`WebRequestError`][89.9] containing error code [`WebRequestError.ERROR_DATA_URI_TOO_LONG`][89.10].
75  ([bug 1668952]({{bugzilla}}1668952))
76- Extended [`Autocomplete`][78.7] API to support credit cards.
77  ([bug 1691819]({{bugzilla}}1691819)).
78- ⚠️  Deprecated ['Autocomplete.LoginStorageDelegate'][78.8] with the intention
79  of removing it in GeckoView v93. Please use
80  [`Autocomplete.StorageDelegate`][89.11] instead.
81  ([bug 1691819]({{bugzilla}}1691819)).
82- Added [`ALLOWED_TRACKING_CONTENT`][89.12] to content blocking API to indicate
83  when unsafe content is allowed by a shim.
84  ([bug 1661330]({{bugzilla}}1661330))
85- ⚠️ Added [`setCookieBehaviorPrivateMode`][89.13] to control cookie behavior for private browsing
86  mode independently of normal browsing mode. To maintain current behavior, set this to the same
87  value as [`setCookieBehavior`][89.14] is set to.
88
89[89.1]: {{javadoc_uri}}/GeckoSession.PermissionDelegate.ContentPermission.html
90[89.2]: {{javadoc_uri}}/StorageController.html#getPermissions-java.lang.String-
91[89.3]: {{javadoc_uri}}/StorageController.html#getAllPermissions--
92[89.4]: {{javadoc_uri}}/GeckoSession.NavigationDelegate.html#onLocationChange-org.mozilla.geckoview.GeckoSession-java.lang.String-
93[89.5]: {{javadoc_uri}}/GeckoRuntimeSettings.html#setEnterpriseRootsEnabled-boolean-
94[89.6]: {{javadoc_uri}}/GeckoSession.html#load-org.mozilla.geckoview.GeckoSession.Loader-
95[89.7]: {{javadoc_uri}}/GeckoSession.NavigationDelegate.html
96[89.8]: {{javadoc_uri}}/GeckoSession.NavigationDelegate.html#onLoadError-org.mozilla.geckoview.GeckoSession-java.lang.String-org.mozilla.geckoview.WebRequestError-
97[89.9]: {{javadoc_uri}}/WebRequestError.html
98[89.10]: {{javadoc_uri}}/WebRequestError.html#ERROR_DATA_URI_TOO_LONG
99[89.11]: {{javadoc_uri}}/Autocomplete.StorageDelegate.html
100[89.12]: {{javadoc_uri}}/ContentBlockingController.Event.html#ALLOWED_TRACKING_CONTENT
101[89.13]: {{javadoc_uri}}/ContentBlocking.Settings.html#setCookieBehaviorPrivateMode-int-
102[89.14]: {{javadoc_uri}}/ContentBlocking.Settings.html#setCookieBehavior-int-
103
104## v88
105- Added [`WebExtension.Download#update`][88.1] that can be used to
106  implement the WebExtension `downloads` API. This method is used to communicate
107  updates in the download status to the Web Extension
108- Added [`PanZoomController.onTouchEventForDetailResult`][88.2] and
109  [`GeckoView.onTouchEventForDetailResult`][88.3] to tell information
110  that the website doesn't expect browser apps to react the event,
111  also and deprecated [`PanZoomController.onTouchEventForResult`][88.4]
112  and [`GeckoView.onTouchEventForResult`][88.5]. With these new methods
113  browser apps can differentiate cases where the browser can do something
114  the browser's specific behavior in response to the event (e.g.
115  pull-to-refresh) and cases where the browser should not react to the event
116  because the event was consumed in the web site (e.g. in canvas like
117  web apps).
118  ([bug 1678505]({{bugzilla}}1678505)).
119- ⚠️ Deprecate the [`MediaElement`][65.11] API to be removed in v91.
120  Please use [`MediaSession`][81.6] for media events and control.
121  ([bug 1693584]({{bugzilla}}1693584)).
122- ⚠️ Deprecate [`GeckoResult.ALLOW`][89.6] and [`GeckoResult.DENY`][89.7] in
123  favor of [`GeckoResult.allow`][89.8] and [`GeckoResult.deny`][89.9].
124  ([bug 1697270]({{bugzilla}}1697270)).
125- ⚠️ Update [`SessionState`][88.10] to handle null states/strings more gracefully.
126  ([bug 1685486]({{bugzilla}}1685486)).
127
128[88.1]: {{javadoc_uri}}/WebExtension.Download.html#update-org.mozilla.geckoview.WebExtension.Download.Info-
129[88.2]: {{javadoc_uri}}/PanZoomController.html#onTouchEventForDetailResult
130[88.3]: {{javadoc_uri}}/GeckoView.html#onTouchEventForDetailResult
131[88.4]: {{javadoc_uri}}/PanZoomController.html#onTouchEventForResult
132[88.5]: {{javadoc_uri}}/GeckoView.html#onTouchEventForResult
133[88.6]: {{javadoc_uri}}/GeckoResult.html#ALLOW
134[88.7]: {{javadoc_uri}}/GeckoResult.html#DENY
135[88.8]: {{javadoc_uri}}/GeckoResult.html#allow--
136[88.9]: {{javadoc_uri}}/GeckoResult.html#deny--
137[88.10]: {{javadoc_uri}}/GeckoSession.SessionState.html
138
139## v87
140- ⚠ Added [`WebExtension.DownloadInitData`][87.1] class that can be used to
141  implement the WebExtension `downloads` API. This class represents initial state of a download.
142- Added [`WebExtension.Download.Info`][87.2] interface that can be used to
143  implement the WebExtension `downloads` API. This interface allows communicating
144  download's state to Web Extension.
145- [`Image#getBitmap`][87.3] now throws [`ImageProcessingException`][87.4] if
146  the image cannot be processed.
147  ([bug 1689745]({{bugzilla}}1689745))
148- Added support for HTTPS-only mode to [`GeckoRuntimeSettings`][87.5] via
149  [`setAllowInsecureConnections`][87.6].
150- Removed [`JSONException`] throws from [`SessionState.fromString`][87.7], fixed annotations,
151  and clarified null-handling a bit.
152
153[87.1]: {{javadoc_uri}}/WebExtension.DownloadInitData.html
154[87.2]: {{javadoc_uri}}/WebExtension.Download.Info.html
155[87.3]: {{javadoc_uri}}/Image.html#getBitmap-int-
156[87.4]: {{javadoc_uri}}/Image.ImageProcessingException.html
157[87.5]: {{javadoc_uri}}/GeckoRuntimeSettings.html
158[87.6]: {{javadoc_uri}}/GeckoRuntimeSettings.html#setAllowInsecureConnections-int-
159[87.7]: {{javadoc_uri}}/GeckoSession.SessionState.html#fromString-java.lang.String-
160
161## v86
162- Removed deprecated [`ContentDelegate#onExternalResponse(GeckoSession, WebResponseInfo)`].
163  Use [`ContentDelegate#onExternalResponse(GeckoSession, WebResponse)`][82.2] instead.
164  ([bug 1665157]({{bugzilla}}1665157))
165- Added [`WebExtension.DownloadDelegate`][86.1] and  that can be used to
166  implement the WebExtension `downloads` API.
167  ([bug 1656336]({{bugzilla}}1656336))
168- Added [`WebRequest.Builder#body(@Nullable String)`][86.2] which converts a string to direct byte buffer.
169- Removed deprecated `REPLACED_UNSAFE_CONTENT`.
170  ([bug 1667471]({{bugzilla}}1667471))
171- Removed deprecated [`GeckoSession#loadUri`][83.6] variants in favor of
172  [`GeckoSession#load`][83.7]. See docs for [`Loader`][83.8].
173  ([bug 1667471]({{bugzilla}}1667471))
174- Added [`GeckoResult#map`][86.3] to synchronously map a GeckoResult value.
175- Added [`PanZoomController#INPUT_RESULT_IGNORED`][86.4].
176  ([bug 1687430]({{bugzilla}}1687430))
177
178[86.1]: {{javadoc_uri}}/WebExtension.DownloadDelegate.html
179[86.2]: {{javadoc_uri}}/WebRequest.Builder#body-java.lang.String-
180[86.3]: {{javadoc_uri}}/GeckoResult.html#map-org.mozilla.geckoview.GeckoResult.OnValueMapper-
181[86.4]: {{javadoc_uri}}/PanZoomController.html#INPUT_RESULT_IGNORED
182
183## v85
184- Added [`WebExtension.BrowsingDataDelegate`][85.1] that can be used to
185  implement the WebExtension `browsingData` API.
186
187[85.1]: {{javadoc_uri}}/WebExtension.BrowsingDataDelegate.html
188
189## v84
190- ⚠️  Removed deprecated [`GeckoRuntimeSettings.Builder.useMultiprocess`] and
191  [`GeckoRuntimeSettings.getUseMultiprocess`]. Single-process GeckoView is no
192  longer supported. ([bug 1650118]({{bugzilla}}1650118))
193- Deprecated members now have an additional [`@DeprecationSchedule`][84.1] annotation which
194  includes the `version` that we expect to remove the member and an `id` that
195  can be used to group annotation notices in tooling.
196  ([bug 1671460]({{bugzilla}}1671460))
197- ⚠️  Removed deprecated [`ContentBlockingController.ExceptionList`] abd
198  [`ContentBlockingController.restoreExceptionList`]. ([bug 1674500]({{bugzilla}}1674500))
199
200[84.1]: {{javadoc_uri}}/DeprecationSchedule.html
201
202## v83
203- Added [`WebExtension.MetaData.temporary`][83.1] which exposes whether an extension
204  has been installed temporarily, e.g. when using web-ext.
205  ([bug 1624410]({{bugzilla}}1624410))
206- ⚠️  Removing unsupported `MediaSession.Delegate.onPictureInPicture` for now.
207  Also, [`MediaSession.Delegate.onMetadata`][83.2] is no longer dispatched for
208  plain media elements.
209  ([bug 1658937]({{bugzilla}}1658937))
210- Replaced android.util.ArrayMap with java.util.TreeMap in [`WebMessage`][65.13] to enable case-insensitive handling of the HTTP headers.
211  ([bug 1666013]({{bugzilla}}1666013))
212- Added [`ContentBlocking.SafeBrowsingProvider`][83.3] to configure Safe
213  Browsing providers.
214  ([bug 1660241]({{bugzilla}}1660241))
215- Added [`GeckoRuntime.ActivityDelegate`][83.4] which allows applications to handle
216  starting external Activities on behalf of GeckoView. Currently this is used to integrate
217  FIDO support for WebAuthn.
218- Added ['GeckoWebExecutor#FETCH_FLAG_PRIVATE'][83.5]. This new flag allows for private browsing downloads using WebExecutor.
219  ([bug 1665426]({{bugzilla}}1665426))
220- ⚠️ Deprecated [`GeckoSession#loadUri`][83.6] variants in favor of
221  [`GeckoSession#load`][83.7]. See docs for [`Loader`][83.8].
222  ([bug 1667471]({{bugzilla}}1667471))
223- Added [`Loader#headerFilter`][83.9] to override the default header filtering
224  behavior.
225  ([bug 1667471]({{bugzilla}}1667471))
226
227[83.1]: {{javadoc_uri}}/WebExtension.MetaData.html#temporary
228[83.2]: {{javadoc_uri}}/MediaSession.Delegate.html#onMetadata-org.mozilla.geckoview.GeckoSession-org.mozilla.geckoview.MediaSession-org.mozilla.geckoview.MediaSession.Metadata-
229[83.3]: {{javadoc_uri}}/ContentBlocking.SafeBrowsingProvider.html
230[83.4]: {{javadoc_uri}}/GeckoRuntime.ActivityDelegate.html
231[83.5]: {{javadoc_uri}}/GeckoWebExecutor.html#FETCH_FLAG_PRIVATE
232[83.6]: {{javadoc_uri}}/GeckoSession.html#loadUri-java.lang.String-org.mozilla.geckoview.GeckoSession-int-java.util.Map-
233[83.7]: {{javadoc_uri}}/GeckoSession.html#load-org.mozilla.geckoview.GeckoSession.Loader-
234[83.8]: {{javadoc_uri}}/GeckoSession.Loader.html
235[83.9]: {{javadoc_uri}}/GeckoSession.Loader.html#headerFilter-int-
236
237## v82
238- ⚠️  [`WebNotification.source`][79.2] is now `@Nullable` to account for
239  WebExtension notifications which don't have a `source` field.
240- ⚠️ Deprecated [`ContentDelegate#onExternalResponse(GeckoSession, WebResponseInfo)`][82.1] with the intention of removing
241  them in GeckoView v85.
242  ([bug 1530022]({{bugzilla}}1530022))
243- Added [`ContentDelegate#onExternalResponse(GeckoSession, WebResponse)`][82.2] to eliminate the need
244  to make a second request for downloads and ensure more efficient and reliable downloads in a single request. The second
245  parameter is now a [`WebResponse`][65.15]
246  ([bug 1530022]({{bugzilla}}1530022))
247- Added [`Image`][82.3] support for size-dependent bitmap retrieval from image resources.
248  ([bug 1658456]({{bugzilla}}1658456))
249- ⚠️ Use [`Image`][82.3] for [`MediaSession`][81.6] artwork and [`WebExtension`][69.5] icon support.
250  ([bug 1662508]({{bugzilla}}1662508))
251- Added [`RepostConfirmPrompt`][82.4] to prompt the user for cofirmation before
252  resending POST requests.
253  ([bug 1659073]({{bugzilla}}1659073))
254- Removed `Parcelable` support in `GeckoSession`. Use [`ProgressDelegate#onSessionStateChange`][68.29] and [`ProgressDelegate#restoreState`][82.5] instead.
255  ([bug 1650108]({{bugzilla}}1650108))
256- ⚠️ Use AndroidX instead of the Android support library. For the public API this only changes
257  the thread and nullable annotation types.
258- Added [`REPLACED_TRACKING_CONTENT`][82.6] to content blocking API to indicate when unsafe content is shimmed.
259  ([bug 1663756]({{bugzilla}}1663756))
260
261[82.1]: {{javadoc_uri}}/GeckoSession.ContentDelegate.html#onExternalResponse-org.mozilla.geckoview.GeckoSession-org.mozilla.geckoview.GeckoSession.WebResponseInfo-
262[82.2]: {{javadoc_uri}}/GeckoSession.ContentDelegate.html#onExternalResponse-org.mozilla.geckoview.GeckoSession-org.mozilla.geckoview.GeckoResult-
263[82.3]: {{javadoc_uri}}/Image.html
264[82.4]: {{javadoc_uri}}/GeckoSession.PromptDelegate.RepostConfirmPrompt.html
265[82.5]: {{javadoc_uri}}/GeckoSession.html#restoreState-org.mozilla.geckoview.GeckoSession.SessionState-
266[82.6]: {{javadoc_uri}}/ContentBlockingController.Event.html#REPLACED_TRACKING_CONTENT
267
268## v81
269- Added `cookiePurging` to [`ContentBlocking.Settings.Builder`][81.1] and `getCookiePurging` and `setCookiePurging`
270  to [`ContentBlocking.Settings`][81.2].
271- Added [`GeckoSession.ContentDelegate.onPaintStatusReset()`][81.3] callback which notifies when valid content is no longer being rendered.
272- Made [`GeckoSession.ContentDelegate.onFirstContentfulPaint()`][81.4] additionally be called for the first contentful paint following a `onPaintStatusReset()` event, rather than just the first contentful paint of the session.
273- Removed deprecated `GeckoRuntime.registerWebExtension`. Use [`WebExtensionController.install`][73.1] instead.
274⚠️ - Changed [`GeckoView.onTouchEventForResult`][81.5] to return a `GeckoResult`, as it now
275makes a round-trip to Gecko. The result will be more accurate now, since how content treats
276the event is now considered.
277- Added [`MediaSession`][81.6] API for session-based media events and control.
278
279[81.1]: {{javadoc_uri}}/ContentBlocking.Settings.Builder.html
280[81.2]: {{javadoc_uri}}/ContentBlocking.Settings.html
281[81.3]: {{javadoc_uri}}/GeckoSession.ContentDelegate.html#onPaintStatusReset-org.mozilla.geckoview.GeckoSession-
282[81.4]: {{javadoc_uri}}/GeckoSession.ContentDelegate.html#onFirstContentfulPaint-org.mozilla.geckoview.GeckoSession-
283[81.5]: {{javadoc_uri}}/GeckoView.html#onTouchEventForResult-android.view.MotionEvent-
284[81.6]: {{javadoc_uri}}/MediaSession.html
285
286## v80
287- Removed `GeckoSession.hashCode` and `GeckoSession.equals` overrides in favor
288  of the default implementations. ([bug 1647883]({{bugzilla}}1647883))
289- Added `strictSocialTrackingProtection` to [`ContentBlocking.Settings.Builder`][80.1] and `getStrictSocialTrackingProtection`
290  to [`ContentBlocking.Settings`][80.2].
291
292[80.1]: {{javadoc_uri}}/ContentBlocking.Settings.Builder.html
293[80.2]: {{javadoc_uri}}/ContentBlocking.Settings.html
294
295## v79
296- Added `runtime.openOptionsPage` support. For `options_ui.open_in_new_tab` ==
297  `false`, [`TabDelegate.onOpenOptionsPage`][79.1] is called.
298  ([bug 1618058]({{bugzilla}}1619766))
299- Added [`WebNotification.source`][79.2], which is the URL of the page
300  or Service Worker that created the notification.
301- Removed deprecated `WebExtensionController.setTabDelegate` and `WebExtensionController.getTabDelegate`
302  APIs ([bug 1618987]({{bugzilla}}1618987)).
303- ⚠️  [`RuntimeTelemetry#getSnapshots`][68.10] is removed after deprecation.
304  Use Glean to handle Gecko telemetry.
305  ([bug 1644447]({{bugzilla}}1644447))
306- Added [`ensureBuiltIn`][79.3] that ensures that a built-in extension is
307  installed without re-installing.
308  ([bug 1635564]({{bugzilla}}1635564))
309- Added [`ProfilerController`][79.4], accessible via [`GeckoRuntime.getProfilerController`][79.5]
310to allow adding gecko profiler markers.
311([bug 1624993]({{bugzilla}}1624993))
312- ⚠️ Deprecated `Parcelable` support in `GeckoSession` with the intention of removing
313  in GeckoView v82. ([bug 1649529]({{bugzilla}}1649529))
314- ⚠️ Deprecated [`GeckoRuntimeSettings.Builder.useMultiprocess`][79.6] and
315  [`GeckoRuntimeSettings.getUseMultiprocess`][79.7] with the intention of removing
316  them in GeckoView v82. ([bug 1649530]({{bugzilla}}1649530))
317
318[79.1]: {{javadoc_uri}}/WebExtension.TabDelegate.html#onOpenOptionsPage-org.mozilla.geckoview.WebExtension-
319[79.2]: {{javadoc_uri}}/WebNotification.html#source
320[79.3]: {{javadoc_uri}}/WebExtensionController.html#ensureBuiltIn-java.lang.String-java.lang.String-
321[79.4]: {{javadoc_uri}}/ProfilerController.html
322[79.5]: {{javadoc_uri}}/GeckoRuntime.html#getProfilerController--
323[79.6]: {{javadoc_uri}}/GeckoRuntimeSettings.Builder.html#useMultiprocess-boolean-
324[79.7]: {{javadoc_uri}}/GeckoRuntimeSettings.html#getUseMultiprocess--
325
326## v78
327- Added [`WebExtensionController.installBuiltIn`][78.1] that allows installing an
328  extension that is bundled with the APK. This method is meant as a replacement
329  for [`GeckoRuntime.registerWebExtension`][67.15], ⚠️ which is now deprecated
330  and will be removed in GeckoView 81.
331- Added [`CookieBehavior.ACCEPT_FIRST_PARTY_AND_ISOLATE_OTHERS`][78.2] to allow
332  enabling dynamic first party isolation; this will block tracking cookies and
333  isolate all other third party cookies by keying them based on the first party
334  from which they are accessed.
335- Added `cookieStoreId` field to [`WebExtension.CreateTabDetails`][78.3]. This adds the optional
336  ability to create a tab with a given cookie store ID for its [`contextual identity`][78.4].
337  ([bug 1622500]({{bugzilla}}1622500))
338- Added [`NavigationDelegate.onSubframeLoadRequest`][78.5] to allow intercepting
339  non-top-level navigations.
340- Added [`BeforeUnloadPrompt`][78.6] to respond to prompts from onbeforeunload.
341- ⚠️  Refactored `LoginStorage` to the [`Autocomplete`][78.7] API to support
342  login form autocomplete delegation.
343  Refactored 'LoginStorage.Delegate' to ['Autocomplete.LoginStorageDelegate'][78.8].
344  Refactored `GeckoSession.PromptDelegate.onLoginStoragePrompt` to
345  [`GeckoSession.PromptDelegate.onLoginSave`][78.9].
346  Added [`GeckoSession.PromptDelegate.onLoginSelect`][78.10].
347  ([bug 1618058]({{bugzilla}}1618058))
348- Added [`GeckoRuntimeSettings#setLoginAutofillEnabled`][78.11] to control
349  whether login forms should be automatically filled in suitable situations.
350
351[78.1]: {{javadoc_uri}}/WebExtensionController.html#installBuiltIn-java.lang.String-
352[78.2]: {{javadoc_uri}}/ContentBlocking.CookieBehavior.html#ACCEPT_FIRST_PARTY_AND_ISOLATE_OTHERS
353[78.3]: {{javadoc_uri}}/WebExtension.CreateTabDetails.html
354[78.4]: https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/contextualIdentities
355[78.5]: {{javadoc_uri}}/GeckoSession.NavigationDelegate.html#onSubframeLoadRequest-org.mozilla.geckoview.GeckoSession-org.mozilla.geckoview.GeckoSession.NavigationDelegate.LoadRequest-
356[78.6]: {{javadoc_uri}}/GeckoSession.PromptDelegate.BeforeUnloadPrompt.html
357[78.7]: {{javadoc_uri}}/Autocomplete.html
358[78.8]: {{javadoc_uri}}/Autocomplete.LoginStorageDelegate.html
359[78.9]: {{javadoc_uri}}/GeckoSession.PromptDelegate.html#onLoginSave-org.mozilla.geckoview.GeckoSession-org.mozilla.geckoview.GeckoSession.PromptDelegate.AutocompleteRequest-
360[78.10]: {{javadoc_uri}}/GeckoSession.PromptDelegate.html#onLoginSelect-org.mozilla.geckoview.GeckoSession-org.mozilla.geckoview.GeckoSession.PromptDelegate.AutocompleteRequest-
361[78.11]: {{javadoc_uri}}/GeckoRuntimeSettings.html#setLoginAutofillEnabled-boolean-
362
363## v77
364- Added [`GeckoRuntime.appendAppNotesToCrashReport`][77.1] For adding app notes to the crash report.
365  ([bug 1626979]({{bugzilla}}1626979))
366- ⚠️ Remove the `DynamicToolbarAnimator` API along with accesors on `GeckoView` and `GeckoSession`.
367  ([bug 1627716]({{bugzilla}}1627716))
368
369[77.1]: {{javadoc_uri}}/GeckoRuntime.html#appendAppNotesToCrashReport-java.lang.String-
370
371## v76
372- Added [`GeckoSession.PermissionDelegate.PERMISSION_MEDIA_KEY_SYSTEM_ACCESS`][76.1] to control EME media key access.
373- [`RuntimeTelemetry#getSnapshots`][68.10] is deprecated and will be removed
374  in 79. Use Glean to handle Gecko telemetry.
375  ([bug 1620395]({{bugzilla}}1620395))
376- Added [`LoadRequest.isDirectNavigation`] to know when calls to
377  [`onLoadRequest`][76.3] originate from a direct navigation made by the app
378  itself.
379  ([bug 1624675]({{bugzilla}}1624675))
380
381[76.1]: {{javadoc_uri}}/GeckoSession.PermissionDelegate.html#PERMISSION_MEDIA_KEY_SYSTEM_ACCESS
382[76.2]: {{javadoc_uri}}/GeckoSession.NavigationDelegate.LoadRequest.html#isDirectNavigation
383[76.3]: {{javadoc_uri}}/GeckoSession.NavigationDelegate.html#onLoadRequest-org.mozilla.geckoview.GeckoSession-org.mozilla.geckoview.GeckoSession.NavigationDelegate.LoadRequest-
384
385## v75
386- ⚠️ Remove `GeckoRuntimeSettings.Builder#useContentProcessHint`. The content
387  process is now preloaded by default if
388  [`GeckoRuntimeSettings.Builder#useMultiprocess`][75.1] is enabled.
389- ⚠️ Move `GeckoSessionSettings.Builder#useMultiprocess` to
390  [`GeckoRuntimeSettings.Builder#useMultiprocess`][75.1]. Multiprocess state is
391  no longer determined per session.
392- Added [`DebuggerDelegate#onExtensionListUpdated`][75.2] to notify that a temporary
393  extension has been installed by the debugger.
394  ([bug 1614295]({{bugzilla}}1614295))
395- ⚠️ Removed [`GeckoRuntimeSettings.setAutoplayDefault`][75.3], use
396  [`GeckoSession.PermissionDelegate#PERMISSION_AUTOPLAY_AUDIBLE`][73.12] and
397  [`GeckoSession.PermissionDelegate#PERMISSION_AUTOPLAY_INAUDIBLE`][73.13] to
398  control autoplay.
399  ([bug 1614894]({{bugzilla}}1614894))
400- Added [`GeckoSession.reload(int flags)`][75.4] That takes a [load flag][75.5] parameter.
401- ⚠️ Moved [`ActionDelegate`][75.6] and [`MessageDelegate`][75.7] to
402  [`SessionController`][75.8].
403  ([bug 1616625]({{bugzilla}}1616625))
404- Added [`SessionTabDelegate`][75.9] to [`SessionController`][75.8] and
405  [`TabDelegate`][75.10] to [`WebExtension`][69.5] which receive respectively
406  calls for the session and the runtime. `TabDelegate` is also now
407  per-`WebExtension` object instead of being global.  The existing global
408  [`TabDelegate`][75.11] is now deprecated and will be removed in GeckoView 77.
409  ([bug 1616625]({{bugzilla}}1616625))
410- Added [`SessionTabDelegate#onUpdateTab`][75.12] which is called whenever an
411  extension calls `tabs.update` on the corresponding `GeckoSession`.
412  [`TabDelegate#onCreateTab`][75.13] now takes a [`CreateTabDetails`][75.14]
413  object which contains additional information about the newly created tab
414  (including the `url` which used to be passed in directly).
415  ([bug 1616625]({{bugzilla}}1616625))
416- Added [`GeckoRuntimeSettings.setWebManifestEnabled`][75.15],
417  [`GeckoRuntimeSettings.webManifest`][75.16], and
418  [`GeckoRuntimeSettings.getWebManifestEnabled`][75.17]
419  ([bug 1614894]({{bugzilla}}1603673)), to enable or check Web Manifest support.
420- Added [`GeckoDisplay.safeAreaInsetsChanged`][75.18] to notify the content of [safe area insets][75.19].
421  ([bug 1503656]({{bugzilla}}1503656))
422- Added [`GeckoResult#cancel()`][75.22], [`GeckoResult#setCancellationDelegate()`][75.22],
423  and [`GeckoResult.CancellationDelegate`][75.23]. This adds the optional ability to cancel
424  an operation behind a pending `GeckoResult`.
425- Added [`baseUrl`][75.24] to [`WebExtension.MetaData`][75.25] to expose the
426  base URL for all WebExtension pages for a given extension.
427  ([bug 1560048]({{bugzilla}}1560048))
428- Added [`allowedInPrivateBrowsing`][75.26] and
429  [`setAllowedInPrivateBrowsing`][75.27] to control whether an extension can
430  run in private browsing or not.  Extensions installed with
431  [`registerWebExtension`][67.15] will always be allowed to run in private
432  browsing.
433  ([bug 1599139]({{bugzilla}}1599139))
434
435[75.1]: {{javadoc_uri}}/GeckoRuntimeSettings.Builder.html#useMultiprocess-boolean-
436[75.2]: {{javadoc_uri}}/WebExtensionController.DebuggerDelegate.html#onExtensionListUpdated--
437[75.3]: {{javadoc_uri}}/GeckoRuntimeSettings.Builder.html#autoplayDefault-boolean-
438[75.4]: {{javadoc_uri}}/GeckoSession.html#reload-int-
439[75.5]: {{javadoc_uri}}/GeckoSession.html#LOAD_FLAGS_NONE
440[75.6]: {{javadoc_uri}}/WebExtension.ActionDelegate.html
441[75.7]: {{javadoc_uri}}/WebExtension.MessageDelegate.html
442[75.8]: {{javadoc_uri}}/WebExtension.SessionController.html
443[75.9]: {{javadoc_uri}}/WebExtension.SessionTabDelegate.html
444[75.10]: {{javadoc_uri}}/WebExtension.TabDelegate.html
445[75.11]: {{javadoc_uri}}/WebExtensionRuntime.TabDelegate.html
446[75.12]: {{javadoc_uri}}/WebExtension.SessionTabDelegate.html#onUpdateTab-org.mozilla.geckoview.WebExtension-org.mozilla.geckoview.GeckoSession-org.mozilla.geckoview.WebExtension.UpdateTabDetails-
447[75.13]: {{javadoc_uri}}/WebExtension.TabDelegate.html#onNewTab-org.mozilla.geckoview.WebExtension-org.mozilla.geckoview.WebExtension.CreateTabDetails-
448[75.14]: {{javadoc_uri}}/WebExtension.CreateTabDetails.html
449[75.15]: {{javadoc_uri}}/GeckoRuntimeSettings.Builder.html#setWebManifestEnabled-boolean-
450[75.16]: {{javadoc_uri}}/GeckoRuntimeSettings.Builder.html#webManifest-boolean-
451[75.17]: {{javadoc_uri}}/GeckoRuntimeSettings.Builder.html#getWebManifestEnabled--
452[75.18]: {{javadoc_uri}}/GeckoDisplay.html#safeAreaInsetsChanged-int-int-int-int-
453[75.19]: https://developer.mozilla.org/en-US/docs/Web/CSS/env
454[75.20]: {{javadoc_uri}}/WebExtension.InstallException.ErrorCodes.html#ERROR_POSTPONED-
455[75.21]: {{javadoc_uri}}/GeckoResult.html#cancel--
456[75.22]: {{javadoc_uri}}/GeckoResult.html#setCancellationDelegate-CancellationDelegate-
457[75.23]: {{javadoc_uri}}/GeckoResult.CancellationDelegate.html
458[75.24]: {{javadoc_uri}}/WebExtension.MetaData.html#baseUrl
459[75.25]: {{javadoc_uri}}/WebExtension.MetaData.html
460[75.26]: {{javadoc_uri}}/WebExtension.MetaData.html#allowedInPrivateBrowsing
461[75.27]: {{javadoc_uri}}/WebExtensionController.html#setAllowedInPrivateBrowsing-org.mozilla.geckoview.WebExtension-boolean-
462
463## v74
464- Added [`WebExtensionController.enable`][74.1] and [`disable`][74.2] to
465  enable and disable extensions.
466  ([bug 1599585]({{bugzilla}}1599585))
467- ⚠️ Added ['GeckoSession.ProgressDelegate.SecurityInformation#certificate'][74.3], which is the
468  full server certificate in use, if any. The other certificate-related fields were removed.
469  ([bug 1508730]({{bugzilla}}1508730))
470- Added ['WebResponse#isSecure'][74.4], which indicates whether or not the response was
471  delivered over a secure connection.
472  ([bug 1508730]({{bugzilla}}1508730))
473- Added ['WebResponse#certificate'][74.5], which is the server certificate used for the
474  response, if any.
475  ([bug 1508730]({{bugzilla}}1508730))
476- Added ['WebRequestError#certificate'][74.6], which is the server certificate used in the
477  failed request, if any.
478  ([bug 1508730]({{bugzilla}}1508730))
479- ⚠️ Updated [`ContentBlockingController`][74.7] to use new representation for content blocking
480  exceptions and to add better support for removing exceptions. This deprecates [`ExceptionList`][74.8]
481  and [`restoreExceptionList`][74.9] with the intent to remove them in 76.
482  ([bug 1587552]({{bugzilla}}1587552))
483- Added [`GeckoSession.ContentDelegate.onMetaViewportFitChange`][74.10]. This exposes `viewport-fit` value that is CSS Round Display Level 1. ([bug 1574307]({{bugzilla}}1574307))
484- Extended [`LoginStorage.Delegate`][74.11] with [`onLoginUsed`][74.12] to
485  report when existing login entries are used for autofill.
486  ([bug 1610353]({{bugzilla}}1610353))
487- Added ['WebExtensionController#setTabActive'][74.13], which is used to notify extensions about
488  tab changes
489  ([bug 1597793]({{bugzilla}}1597793))
490- Added ['WebExtension.metaData.optionsUrl'][74.14] and ['WebExtension.metaData.openOptionsPageInTab'][74.15],
491  which is the addon metadata necessary to show their option pages.
492  ([bug 1598792]({{bugzilla}}1598792))
493- Added [`WebExtensionController.update`][74.16] to update extensions. ([bug 1599581]({{bugzilla}}1599581))
494- ⚠️ Replaced `subscription` argument in [`WebPushDelegate.onSubscriptionChanged`][74.17] from a [`WebPushSubscription`][74.18] to the [`String`][74.19] `scope`.
495
496[74.1]: {{javadoc_uri}}/WebExtensionController.html#enable-org.mozilla.geckoview.WebExtension-int-
497[74.2]: {{javadoc_uri}}/WebExtensionController.html#disable-org.mozilla.geckoview.WebExtension-int-
498[74.3]: {{javadoc_uri}}/GeckoSession.ProgressDelegate.SecurityInformation.html#certificate
499[74.4]: {{javadoc_uri}}/WebResponse.html#isSecure
500[74.5]: {{javadoc_uri}}/WebResponse.html#certificate
501[74.6]: {{javadoc_uri}}/WebRequestError.html#certificate
502[74.7]: {{javadoc_uri}}/ContentBlockingController.html
503[74.8]: {{javadoc_uri}}/ContentBlockingController.ExceptionList.html
504[74.9]: {{javadoc_uri}}/ContentBlockingController.html#restoreExceptionList-org.mozilla.geckoview.ContentBlockingController.ExceptionList-
505[74.10]: {{javadoc_uri}}/GeckoSession.ContentDelegate.html#onMetaViewportFitChange-org.mozilla.geckoview.GeckoSession-java.lang.String-
506[74.11]: {{javadoc_uri}}/LoginStorage.Delegate.html
507[74.12]: {{javadoc_uri}}/LoginStorage.Delegate.html#onLoginUsed-org.mozilla.geckoview.LoginStorage.LoginEntry-int-
508[74.13]: {{javadoc_uri}}/WebExtensionController.html#setTabActive
509[74.14]: {{javadoc_uri}}/WebExtension.MetaData.html#optionsUrl
510[74.15]: {{javadoc_uri}}/WebExtension.MetaData.html#openOptionsPageInTab
511[74.16]: {{javadoc_uri}}/WebExtensionController.html#update-org.mozilla.geckoview.WebExtension-int-
512[74.17]: {{javadoc_uri}}/WebPushController.html#onSubscriptionChange-org.mozilla.geckoview.WebPushSubscription-byte:A-
513[74.18]: {{javadoc_uri}}/WebPushSubscription.html
514[74.19]: https://developer.android.com/reference/java/lang/String
515
516## v73
517- Added [`WebExtensionController.install`][73.1] and [`uninstall`][73.2] to
518  manage installed extensions
519- ⚠️ Renamed `ScreenLength.VIEWPORT_WIDTH`, `ScreenLength.VIEWPORT_HEIGHT`,
520  `ScreenLength.fromViewportWidth` and `ScreenLength.fromViewportHeight` to
521  [`ScreenLength.VISUAL_VIEWPORT_WIDTH`][73.3],
522  [`ScreenLength.VISUAL_VIEWPORT_HEIGHT`][73.4],
523  [`ScreenLength.fromVisualViewportWidth`][73.5] and
524  [`ScreenLength.fromVisualViewportHeight`][73.6] respectively.
525- Added the [`LoginStorage`][73.7] API. Apps may handle login fetch requests now by
526  attaching a [`LoginStorage.Delegate`][73.8] via
527  [`GeckoRuntime#setLoginStorageDelegate`][73.9]
528  ([bug 1602881]({{bugzilla}}1602881))
529- ⚠️ [`WebExtension`][69.5]'s constructor now requires a `WebExtensionController`
530  instance.
531- Added [`GeckoResult.allOf`][73.10] for consuming a list of results.
532- Added [`WebExtensionController.list`][73.11] to list all installed extensions.
533- Added [`GeckoSession.PermissionDelegate#PERMISSION_AUTOPLAY_AUDIBLE`][73.12] and
534  [`GeckoSession.PermissionDelegate#PERMISSION_AUTOPLAY_INAUDIBLE`][73.13]. These control
535  autoplay permissions for audible and inaudible videos.
536  ([bug 1577596]({{bugzilla}}1577596))
537- Added [`LoginStorage.Delegate.onLoginSave`][73.14] for login storage save
538  requests and [`GeckoSession.PromptDelegate.onLoginStoragePrompt`][73.15] for
539  login storage prompts.
540  ([bug 1599873]({{bugzilla}}1599873))
541
542[73.1]: {{javadoc_uri}}/WebExtensionController.html#install-java.lang.String-
543[73.2]: {{javadoc_uri}}/WebExtensionController.html#uninstall-org.mozilla.geckoview.WebExtension-
544[73.3]: {{javadoc_uri}}/ScreenLength.html#VISUAL_VIEWPORT_WIDTH
545[73.4]: {{javadoc_uri}}/ScreenLength.html#VISUAL_VIEWPORT_HEIGHT
546[73.5]: {{javadoc_uri}}/ScreenLength.html#fromVisualViewportWidth-double-
547[73.6]: {{javadoc_uri}}/ScreenLength.html#fromVisualViewportHeight-double-
548[73.7]: {{javadoc_uri}}/LoginStorage.html
549[73.8]: {{javadoc_uri}}/LoginStorage.Delegate.html
550[73.9]: {{javadoc_uri}}/GeckoRuntime.html#setLoginStorageDelegate-org.mozilla.geckoview.LoginStorage.Delegate-
551[73.10]: {{javadoc_uri}}/GeckoResult.html#allOf-java.util.List-
552[73.11]: {{javadoc_uri}}/WebExtensionController.html#list--
553[73.12]: {{javadoc_uri}}/GeckoSession.PermissionDelegate.html#PERMISSION_AUTOPLAY_AUDIBLE
554[73.13]: {{javadoc_uri}}/GeckoSession.PermissionDelegate.html#PERMISSION_AUTOPLAY_INAUDIBLE
555[73.14]: {{javadoc_uri}}/LoginStorage.Delegate.html#onLoginSave-org.mozilla.geckoview.LoginStorage.LoginEntry-
556[73.15]: {{javadoc_uri}}/GeckoSession.PromptDelegate.html#onLoginStoragePrompt-org.mozilla.geckoview.GeckoSession-org.mozilla.geckoview.GeckoSession.PromptDelegate.LoginStoragePrompt-
557
558## v72
559- Added [`GeckoSession.NavigationDelegate.LoadRequest#hasUserGesture`][72.1]. This indicates
560  if a load was requested while a user gesture was active (e.g., a tap).
561  ([bug 1555337]({{bugzilla}}1555337))
562- ⚠️  Refactored `AutofillElement` and `AutofillSupport` into the
563  [`Autofill`][72.2] API.
564  ([bug 1591462]({{bugzilla}}1591462))
565- Make `read()` in the `InputStream` returned from [`WebResponse#body`][72.3] timeout according
566  to [`WebResponse#setReadTimeoutMillis()`][72.4]. The default timeout value is reflected in
567  [`WebResponse#DEFAULT_READ_TIMEOUT_MS`][72.5], currently 30s.
568  ([bug 1595145]({{bugzilla}}1595145))
569- ⚠️  Removed `GeckoResponse`
570  ([bug 1581161]({{bugzilla}}1581161))
571- ⚠️  Removed `actions` and `response` arguments from [`SelectionActionDelegate.onShowActionRequest`][72.6]
572  and [`BasicSelectionActionDelegate.onShowActionRequest`][72.7]
573  ([bug 1581161]({{bugzilla}}1581161))
574- Added text selection action methods to [`SelectionActionDelegate.Selection`][72.8]
575  ([bug 1581161]({{bugzilla}}1581161))
576- Added [`BasicSelectionActionDelegate.getSelection`][72.9]
577  ([bug 1581161]({{bugzilla}}1581161))
578- Changed [`BasicSelectionActionDelegate.clearSelection`][72.10] to public.
579  ([bug 1581161]({{bugzilla}}1581161))
580- Added `Autofill` commit support.
581  ([bug 1577005]({{bugzilla}}1577005))
582- Added [`GeckoView.setViewBackend`][72.11] to set whether GeckoView should be
583  backed by a [`TextureView`][72.12] or a [`SurfaceView`][72.13].
584  ([bug 1530402]({{bugzilla}}1530402))
585- Added support for Browser and Page Action from the WebExtension API.
586  See [`WebExtension.Action`][72.14].
587  ([bug 1530402]({{bugzilla}}1530402))
588- ⚠️ Split [`ContentBlockingController.Event.LOADED_TRACKING_CONTENT`][72.15] into
589  [`ContentBlockingController.Event.LOADED_LEVEL_1_TRACKING_CONTENT`][72.16] and
590  [`ContentBlockingController.Event.LOADED_LEVEL_2_TRACKING_CONTENT`][72.17].
591- Replaced `subscription` argument in [`WebPushDelegate.onPushEvent`][72.18] from a [`WebPushSubscription`][72.19] to the [`String`][72.20] `scope`.
592- ⚠️ Renamed `WebExtension.ActionIcon` to [`Icon`][72.21].
593- Added ['GeckoWebExecutor#FETCH_FLAGS_STREAM_FAILURE_TEST'][72.22], which is a new
594  flag used to immediately fail when reading a `WebResponse` body.
595  ([bug 1594905]({{bugzilla}}1594905))
596- Changed [`CrashReporter#sendCrashReport(Context, File, JSONObject)`][72.23] to
597  accept a JSON object instead of a Map. Said object also includes the
598  application name that was previously passed as the fourth argument to the
599  method, which was thus removed.
600- Added WebXR device access permission support, [`PERMISSION_PERSISTENT_XR`][72.24].
601  ([bug 1599927]({{bugzilla}}1599927))
602
603[72.1]: {{javadoc_uri}}/GeckoSession.NavigationDelegate.LoadRequest#hasUserGesture-
604[72.2]: {{javadoc_uri}}/Autofill.html
605[72.3]: {{javadoc_uri}}/WebResponse.html#body
606[72.4]: {{javadoc_uri}}/WebResponse.html#setReadTimeoutMillis-long-
607[72.5]: {{javadoc_uri}}/WebResponse.html#DEFAULT_READ_TIMEOUT_MS
608[72.6]: {{javadoc_uri}}/GeckoSession.SelectionActionDelegate.html#onShowActionRequest-org.mozilla.geckoview.GeckoSession-org.mozilla.geckoview.GeckoSession.SelectionActionDelegate.Selection-
609[72.7]: {{javadoc_uri}}/BasicSelectionActionDelegate.html#onShowActionRequest-org.mozilla.geckoview.GeckoSession-org.mozilla.geckoview.GeckoSession.SelectionActionDelegate.Selection-
610[72.8]: {{javadoc_uri}}/GeckoSession.SelectionActionDelegate.Selection.html
611[72.9]: {{javadoc_uri}}/BasicSelectionActionDelegate.html#getSelection-
612[72.10]: {{javadoc_uri}}/BasicSelectionActionDelegate.html#clearSelection-
613[72.11]: {{javadoc_uri}}/GeckoView.html#setViewBackend-int-
614[72.12]: https://developer.android.com/reference/android/view/TextureView
615[72.13]: https://developer.android.com/reference/android/view/SurfaceView
616[72.14]: {{javadoc_uri}}/WebExtension.Action.html
617[72.15]: {{javadoc_uri}}/ContentBlockingController.Event.html#LOADED_TRACKING_CONTENT
618[72.16]: {{javadoc_uri}}/ContentBlockingController.Event.html#LOADED_LEVEL_1_TRACKING_CONTENT
619[72.17]: {{javadoc_uri}}/ContentBlockingController.Event.html#LOADED_LEVEL_2_TRACKING_CONTENT
620[72.18]: {{javadoc_uri}}/WebPushController.html#onPushEvent-org.mozilla.geckoview.WebPushSubscription-byte:A-
621[72.19]: {{javadoc_uri}}/WebPushSubscription.html
622[72.20]: https://developer.android.com/reference/java/lang/String
623[72.21]: {{javadoc_uri}}/WebExtension.Icon.html
624[72.22]: {{javadoc_uri}}/GeckoWebExecutor.html#FETCH_FLAGS_STREAM_FAILURE_TEST
625[72.23]: {{javadoc_uri}}/CrashReporter.html#sendCrashReport-android.content.Context-java.io.File-org.json.JSONObject-
626[72.24]: {{javadoc_uri}}/GeckoSession.PermissionDelegate.html#PERMISSION_PERSISTENT_XR
627
628=
629## v71
630- Added a content blocking flag for blocked social cookies to [`ContentBlocking`][70.17].
631  ([bug 1584479]({{bugzilla}}1584479))
632- Added [`onBooleanScalar`][71.1], [`onLongScalar`][71.2],
633  [`onStringScalar`][71.3] to [`RuntimeTelemetry.Delegate`][70.12] to support
634  scalars in streaming telemetry. ⚠️  As part of this change,
635  `onTelemetryReceived` has been renamed to [`onHistogram`][71.4], and
636  [`Metric`][71.5] now takes a type parameter.
637  ([bug 1576730]({{bugzilla}}1576730))
638- Added overloads of [`GeckoSession.loadUri`][71.6] that accept a map of
639  additional HTTP request headers.
640  ([bug 1567549]({{bugzilla}}1567549))
641- Added support for exposing the content blocking log in [`ContentBlockingController`][71.7].
642  ([bug 1580201]({{bugzilla}}1580201))
643- ⚠️  Added `nativeApp` to [`WebExtension.MessageDelegate.onMessage`][71.8] which
644  exposes the native application identifier that was used to send the message.
645  ([bug 1546445]({{bugzilla}}1546445))
646- Added [`GeckoRuntime.ServiceWorkerDelegate`][71.9] set via
647  [`setServiceWorkerDelegate`][71.10] to support [`ServiceWorkerClients.openWindow`][71.11]
648  ([bug 1511033]({{bugzilla}}1511033))
649- Added [`GeckoRuntimeSettings.Builder#aboutConfigEnabled`][71.12] to control whether or
650  not `about:config` should be available.
651  ([bug 1540065]({{bugzilla}}1540065))
652- Added [`GeckoSession.ContentDelegate.onFirstContentfulPaint`][71.13]
653  ([bug 1578947]({{bugzilla}}1578947))
654- Added `setEnhancedTrackingProtectionLevel` to [`ContentBlocking.Settings`][71.14].
655  ([bug 1580854]({{bugzilla}}1580854))
656- ⚠️ Added [`GeckoView.onTouchEventForResult`][71.15] and modified
657  [`PanZoomController.onTouchEvent`][71.16] to return how the touch event was handled. This
658  allows apps to know if an event is handled by touch event listeners in web content. The methods in `PanZoomController` now return `int` instead of `boolean`.
659- Added [`GeckoSession.purgeHistory`][71.17] allowing apps to clear a session's history.
660  ([bug 1583265]({{bugzilla}}1583265))
661- Added [`GeckoRuntimeSettings.Builder#forceUserScalableEnabled`][71.18] to control whether or
662  not to force user scalable zooming.
663  ([bug 1540615]({{bugzilla}}1540615))
664- ⚠️ Moved Autofill related methods from `SessionTextInput` and `GeckoSession.TextInputDelegate`
665  into `GeckoSession` and `AutofillDelegate`.
666- Added [`GeckoSession.getAutofillElements()`][71.19], which is a new method for getting
667  an autofill virtual structure without using `ViewStructure`. It relies on a new class,
668  [`AutofillElement`][71.20], for representing the virtual tree.
669- Added [`GeckoView.setAutofillEnabled`][71.21] for controlling whether or not the `GeckoView`
670  instance participates in Android autofill. When enabled, this connects an `AutofillDelegate`
671  to the session it holds.
672- Changed [`AutofillElement.children`][71.20] interface to `Collection` to provide
673  an efficient way to pre-allocate memory when filling `ViewStructure`.
674- Added [`GeckoSession.PromptDelegate.onSharePrompt`][71.22] to support the WebShare API.
675  ([bug 1402369]({{bugzilla}}1402369))
676- Added [`GeckoDisplay.screenshot`][71.23] allowing apps finer grain control over screenshots.
677  ([bug 1577192]({{bugzilla}}1577192))
678- Added `GeckoView.setDynamicToolbarMaxHeight` to make ICB size static, ICB doesn't include the dynamic toolbar region.
679  ([bug 1586144]({{bugzilla}}1586144))
680
681[71.1]: {{javadoc_uri}}/RuntimeTelemetry.Delegate.html#onBooleanScalar-org.mozilla.geckoview.RuntimeTelemetry.Metric-
682[71.2]: {{javadoc_uri}}/RuntimeTelemetry.Delegate.html#onLongScalar-org.mozilla.geckoview.RuntimeTelemetry.Metric-
683[71.3]: {{javadoc_uri}}/RuntimeTelemetry.Delegate.html#onStringScalar-org.mozilla.geckoview.RuntimeTelemetry.Metric-
684[71.4]: {{javadoc_uri}}/RuntimeTelemetry.Delegate.html#onHistogram-org.mozilla.geckoview.RuntimeTelemetry.Metric-
685[71.5]: {{javadoc_uri}}/RuntimeTelemetry.Metric.html
686[71.6]: {{javadoc_uri}}/GeckoSession.html#loadUri-java.lang.String-java.io.File-java.util.Map-
687[71.7]: {{javadoc_uri}}/ContentBlockingController.html
688[71.8]: {{javadoc_uri}}/WebExtension.MessageDelegate.html#onMessage-java.lang.String-java.lang.Object-org.mozilla.geckoview.WebExtension.MessageSender-
689[71.9]: {{javadoc_uri}}/GeckoRuntime.ServiceWorkerDelegate.html
690[71.10]: {{javadoc_uri}}/GeckoRuntime#setServiceWorkerDelegate-org.mozilla.geckoview.GeckoRuntime.ServiceWorkerDelegate-
691[71.11]: https://developer.mozilla.org/en-US/docs/Web/API/Clients/openWindow
692[71.12]: {{javadoc_uri}}/GeckoRuntimeSettings.Builder.html#aboutConfigEnabled-boolean-
693[71.13]: {{javadoc_uri}}/GeckoSession.ContentDelegate.html#onFirstContentfulPaint-org.mozilla.geckoview.GeckoSession-
694[71.15]: {{javadoc_uri}}/GeckoView.html#onTouchEventForResult-android.view.MotionEvent-
695[71.16]: {{javadoc_uri}}/PanZoomController.html#onTouchEvent-android.view.MotionEvent-
696[71.17]: {{javadoc_uri}}/GeckoSession.html#purgeHistory--
697[71.18]: {{javadoc_uri}}/GeckoRuntimeSettings.Builder.html#forceUserScalableEnabled-boolean-
698[71.19]: {{javadoc_uri}}/GeckoSession.html#getAutofillElements--
699[71.20]: {{javadoc_uri}}/AutofillElement.html
700[71.21]: {{javadoc_uri}}/GeckoView.html#setAutofillEnabled-boolean-
701[71.22]: {{javadoc_uri}}/GeckoSession.PromptDelegate.html#onSharePrompt-org.mozilla.geckoview.GeckoSession-org.mozilla.geckoview.GeckoSession.PromptDelegate.SharePrompt-
702[71.23]: {{javadoc_uri}}/GeckoDisplay.html#screenshot--
703
704## v70
705- Added API for session context assignment
706  [`GeckoSessionSettings.Builder.contextId`][70.1] and deletion of data related
707  to a session context [`StorageController.clearDataForSessionContext`][70.2].
708  ([bug 1501108]({{bugzilla}}1501108))
709- Removed `setSession(session, runtime)` from [`GeckoView`][70.5]. With this
710  change, `GeckoView` will no longer manage opening/closing of the
711  [`GeckoSession`][70.6] and instead leave that up to the app. It's also now
712  allowed to call [`setSession`][70.10] with a closed `GeckoSession`.
713  ([bug 1510314]({{bugzilla}}1510314))
714- Added an overload of [`GeckoSession.loadUri()`][70.8] that accepts a
715  referring [`GeckoSession`][70.6]. This should be used when the URI we're
716  loading originates from another page. A common example of this would be long
717  pressing a link and then opening that in a new `GeckoSession`.
718  ([bug 1561079]({{bugzilla}}1561079))
719- Added capture parameter to [`onFilePrompt`][70.9] and corresponding
720  [`CAPTURE_TYPE_*`][70.7] constants.
721  ([bug 1553603]({{bugzilla}}1553603))
722- Removed the obsolete `success` parameter from
723  [`CrashReporter#sendCrashReport(Context, File, File, String)`][70.3] and
724  [`CrashReporter#sendCrashReport(Context, File, Map, String)`][70.4].
725  ([bug 1570789]({{bugzilla}}1570789))
726- Add `GeckoSession.LOAD_FLAGS_REPLACE_HISTORY`.
727  ([bug 1571088]({{bugzilla}}1571088))
728- Complete rewrite of [`PromptDelegate`][70.11].
729  ([bug 1499394]({{bugzilla}}1499394))
730- Added [`RuntimeTelemetry.Delegate`][70.12] that receives streaming telemetry
731  data from GeckoView.
732  ([bug 1566367]({{bugzilla}}1566367))
733- Updated [`ContentBlocking`][70.13] to better report blocked and allowed ETP events.
734  ([bug 1567268]({{bugzilla}}1567268))
735- Added API for controlling Gecko logging [`GeckoRuntimeSettings.debugLogging`][70.14]
736  ([bug 1573304]({{bugzilla}}1573304))
737- Added [`WebNotification`][70.15] and [`WebNotificationDelegate`][70.16] for handling Web Notifications.
738  ([bug 1533057]({{bugzilla}}1533057))
739- Added Social Tracking Protection support to [`ContentBlocking`][70.17].
740  ([bug 1568295]({{bugzilla}}1568295))
741- Added [`WebExtensionController`][70.18] and [`WebExtensionController.TabDelegate`][70.19] to handle
742  [`browser.tabs.create`][70.20] calls by WebExtensions.
743  ([bug 1539144]({{bugzilla}}1539144))
744- Added [`onCloseTab`][70.21] to [`WebExtensionController.TabDelegate`][70.19] to handle
745  [`browser.tabs.remove`][70.22] calls by WebExtensions.
746  ([bug 1565782]({{bugzilla}}1565782))
747- Added onSlowScript to [`ContentDelegate`][70.23] which allows handling of slow and hung scripts.
748  ([bug 1621094]({{bugzilla}}1621094))
749- Added support for Web Push via [`WebPushController`][70.24], [`WebPushDelegate`][70.25], and
750  [`WebPushSubscription`][70.26].
751- Added [`ContentBlockingController`][70.27], accessible via [`GeckoRuntime.getContentBlockingController`][70.28]
752  to allow modification and inspection of a content blocking exception list.
753
754[70.1]: {{javadoc_uri}}/GeckoSessionSettings.Builder.html#contextId-java.lang.String-
755[70.2]: {{javadoc_uri}}/StorageController.html#clearDataForSessionContext-java.lang.String-
756[70.3]: {{javadoc_uri}}/CrashReporter.html#sendCrashReport-android.content.Context-java.io.File-java.io.File-java.lang.String-
757[70.4]: {{javadoc_uri}}/CrashReporter.html#sendCrashReport-android.content.Context-java.io.File-java.util.Map-java.lang.String-
758[70.5]: {{javadoc_uri}}/GeckoView.html
759[70.6]: {{javadoc_uri}}/GeckoSession.html
760[70.7]: {{javadoc_uri}}/GeckoSession.PromptDelegate.html#CAPTURE_TYPE_NONE
761[70.8]: {{javadoc_uri}}/GeckoSession.html#loadUri-java.lang.String-org.mozilla.geckoview.GeckoSession-int-
762[70.9]: {{javadoc_uri}}/GeckoSession.PromptDelegate.html#onFilePrompt-org.mozilla.geckoview.GeckoSession-java.lang.String-int-java.lang.String:A-int-org.mozilla.geckoview.GeckoSession.PromptDelegate.FileCallback-
763[70.10]: {{javadoc_uri}}/GeckoView.html#setSession-org.mozilla.geckoview.GeckoSession-
764[70.11]: {{javadoc_uri}}/GeckoSession.PromptDelegate.html
765[70.12]: {{javadoc_uri}}/RuntimeTelemetry.Delegate.html
766[70.13]: {{javadoc_uri}}/ContentBlocking.html
767[70.14]: {{javadoc_uri}}/GeckoRuntimeSettings.Builder.html#debugLogging-boolean-
768[70.15]: {{javadoc_uri}}/WebNotification.html
769[70.16]: {{javadoc_uri}}/WebNotificationDelegate.html
770[70.17]: {{javadoc_uri}}/ContentBlocking.html
771[70.18]: {{javadoc_uri}}/WebExtensionController.html
772[70.19]: {{javadoc_uri}}/WebExtensionController.TabDelegate.html
773[70.20]: https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/create
774[70.21]: {{javadoc_uri}}/WebExtensionController.TabDelegate.html#onCloseTab-org.mozilla.geckoview.WebExtension-org.mozilla.geckoview.GeckoSession-
775[70.22]: https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/remove
776[70.23]: {{javadoc_uri}}/GeckoSession.ContentDelegate.html
777[70.24]: {{javadoc_uri}}/WebPushController.html
778[70.25]: {{javadoc_uri}}/WebPushDelegate.html
779[70.26]: {{javadoc_uri}}/WebPushSubscription.html
780[70.27]: {{javadoc_uri}}/ContentBlockingController.html
781[70.28]: {{javadoc_uri}}/GeckoRuntime.html#getContentBlockingController--
782
783## v69
784- Modified behavior of ['setAutomaticFontSizeAdjustment'][69.1] so that it no
785  longer has any effect on ['setFontInflationEnabled'][69.2]
786- Add [GeckoSession.LOAD_FLAGS_FORCE_ALLOW_DATA_URI][69.14]
787- Added [`GeckoResult.accept`][69.3] for consuming a result without
788  transforming it.
789- [`GeckoSession.setMessageDelegate`][69.13] callers must now specify the
790  [`WebExtension`][69.5] that the [`MessageDelegate`][69.4] will receive
791  messages from.
792- Created [`onKill`][69.7] to [`ContentDelegate`][69.11] to differentiate from crashes.
793
794[69.1]: {{javadoc_uri}}/GeckoRuntimeSettings.html#setAutomaticFontSizeAdjustment-boolean-
795[69.2]: {{javadoc_uri}}/GeckoRuntimeSettings.html#setFontInflationEnabled-boolean-
796[69.3]: {{javadoc_uri}}/GeckoResult.html#accept-org.mozilla.geckoview.GeckoResult.Consumer-
797[69.4]: {{javadoc_uri}}/WebExtension.MessageDelegate.html
798[69.5]: {{javadoc_uri}}/WebExtension.html
799[69.7]: {{javadoc_uri}}/GeckoSession.ContentDelegate.html#onKill-org.mozilla.geckoview.GeckoSession-
800[69.11]: {{javadoc_uri}}/GeckoSession.ContentDelegate.html
801[69.13]: {{javadoc_uri}}/GeckoSession.html#setMessageDelegate-org.mozilla.geckoview.WebExtension-org.mozilla.geckoview.WebExtension.MessageDelegate-java.lang.String-
802[69.14]: {{javadoc_uri}}/GeckoSession.html#LOAD_FLAGS_FORCE_ALLOW_DATA_URI
803
804## v68
805- Added [`GeckoRuntime#configurationChanged`][68.1] to notify the device
806  configuration has changed.
807- Added [`onSessionStateChange`][68.29] to [`ProgressDelegate`][68.2] and removed `saveState`.
808- Added [`ContentBlocking#AT_CRYPTOMINING`][68.3] for cryptocurrency miner blocking.
809- Added [`ContentBlocking#AT_DEFAULT`][68.4], [`ContentBlocking#AT_STRICT`][68.5],
810  [`ContentBlocking#CB_DEFAULT`][68.6] and [`ContentBlocking#CB_STRICT`][68.7]
811  for clearer app default selections.
812- Added [`GeckoSession.SessionState.fromString`][68.8]. This can be used to
813  deserialize a `GeckoSession.SessionState` instance previously serialized to
814  a `String` via `GeckoSession.SessionState.toString`.
815- Added [`GeckoRuntimeSettings#setPreferredColorScheme`][68.9] to override
816  the default color theme for web content ("light" or "dark").
817- Added [`@NonNull`][66.1] or [`@Nullable`][66.2] to all fields.
818- [`RuntimeTelemetry#getSnapshots`][68.10] returns a [`JSONObject`][68.30] now.
819- Removed all `org.mozilla.gecko` references in the API.
820- Added [`ContentBlocking#AT_FINGERPRINTING`][68.11] to block fingerprinting trackers.
821- Added [`HistoryItem`][68.31] and [`HistoryList`][68.32] interfaces and [`onHistoryStateChange`][68.34] to
822  [`HistoryDelegate`][68.12] and added [`gotoHistoryIndex`][68.33] to [`GeckoSession`][68.13].
823- [`GeckoView`][70.5] will not create a [`GeckoSession`][65.9] anymore when
824  attached to a window without a session.
825- Added [`GeckoRuntimeSettings.Builder#configFilePath`][68.16] to set
826  a path to a configuration file from which GeckoView will read
827  configuration options such as Gecko process arguments, environment
828  variables, and preferences.
829- Added [`unregisterWebExtension`][68.17] to unregister a web extension.
830- Added messaging support for WebExtension. [`setMessageDelegate`][68.18]
831  allows embedders to listen to messages coming from a WebExtension.
832  [`Port`][68.19] allows bidirectional communication between the embedder and
833  the WebExtension.
834- Expose the following prefs in [`GeckoRuntimeSettings`][67.3]:
835  [`setAutoZoomEnabled`][68.20], [`setDoubleTapZoomingEnabled`][68.21],
836  [`setGlMsaaLevel`][68.22].
837- Added new constant for requesting external storage Android permissions, [`PERMISSION_PERSISTENT_STORAGE`][68.35]
838- Added `setVerticalClipping` to [`GeckoDisplay`][68.24] and
839  [`GeckoView`][68.23] to tell Gecko how much of its vertical space is clipped.
840- Added [`StorageController`][68.25] API for clearing data.
841- Added [`onRecordingStatusChanged`][68.26] to [`MediaDelegate`][68.27] to handle events related to the status of recording devices.
842- Removed redundant constants in [`MediaSource`][68.28]
843
844[68.1]: {{javadoc_uri}}/GeckoRuntime.html#configurationChanged-android.content.res.Configuration-
845[68.2]: {{javadoc_uri}}/GeckoSession.ProgressDelegate.html
846[68.3]: {{javadoc_uri}}/ContentBlocking.html#AT_CRYPTOMINING
847[68.4]: {{javadoc_uri}}/ContentBlocking.html#AT_DEFAULT
848[68.5]: {{javadoc_uri}}/ContentBlocking.html#AT_STRICT
849[68.6]: {{javadoc_uri}}/ContentBlocking.html#CB_DEFAULT
850[68.7]: {{javadoc_uri}}/ContentBlocking.html#CB_STRICT
851[68.8]: {{javadoc_uri}}/GeckoSession.SessionState.html#fromString-java.lang.String-
852[68.9]: {{javadoc_uri}}/GeckoRuntimeSettings.html#setPreferredColorScheme-int-
853[68.10]: {{javadoc_uri}}/RuntimeTelemetry.html#getSnapshots-boolean-
854[68.11]: {{javadoc_uri}}/ContentBlocking.html#AT_FINGERPRINTING
855[68.12]: {{javadoc_uri}}/GeckoSession.HistoryDelegate.html
856[68.13]: {{javadoc_uri}}/GeckoSession.html
857[68.16]: {{javadoc_uri}}/GeckoRuntimeSettings.Builder.html#configFilePath-java.lang.String-
858[68.17]: {{javadoc_uri}}/GeckoRuntime.html#unregisterWebExtension-org.mozilla.geckoview.WebExtension-
859[68.18]: {{javadoc_uri}}/WebExtension.html#setMessageDelegate-org.mozilla.geckoview.WebExtension.MessageDelegate-java.lang.String-
860[68.19]: {{javadoc_uri}}/WebExtension.Port.html
861[68.20]: {{javadoc_uri}}/GeckoRuntimeSettings.html#setAutoZoomEnabled-boolean-
862[68.21]: {{javadoc_uri}}/GeckoRuntimeSettings.html#setDoubleTapZoomingEnabled-boolean-
863[68.22]: {{javadoc_uri}}/GeckoRuntimeSettings.html#setGlMsaaLevel-int-
864[68.23]: {{javadoc_uri}}/GeckoView.html#setVerticalClipping-int-
865[68.24]: {{javadoc_uri}}/GeckoDisplay.html#setVerticalClipping-int-
866[68.25]: {{javadoc_uri}}/StorageController.html
867[68.26]: {{javadoc_uri}}/GeckoSession.MediaDelegate.html#onRecordingStatusChanged-org.mozilla.geckoview.GeckoSession-org.mozilla.geckoview.GeckoSession.MediaDelegate.RecordingDevice:A-
868[68.27]: {{javadoc_uri}}/GeckoSession.MediaDelegate.html
869[68.28]: {{javadoc_uri}}/GeckoSession.PermissionDelegate.MediaSource.html
870[68.29]: {{javadoc_uri}}/GeckoSession.ProgressDelegate.html#onSessionStateChange-org.mozilla.geckoview.GeckoSession-org.mozilla.geckoview.GeckoSession.SessionState-
871[68.30]: https://developer.android.com/reference/org/json/JSONObject
872[68.31]: {{javadoc_uri}}/GeckoSession.HistoryDelegate.HistoryItem.html
873[68.32]: {{javadoc_uri}}/GeckoSession.HistoryDelegate.HistoryList.html
874[68.33]: {{javadoc_uri}}/GeckoSession.html#gotoHistoryIndex-int-
875[68.34]: {{javadoc_uri}}/GeckoSession.HistoryDelegate.html#onHistoryStateChange-org.mozilla.geckoview.GeckoSession-org.mozilla.geckoview.GeckoSession.HistoryDelegate.HistoryList-
876[68.35]: {{javadoc_uri}}/GeckoSession.PermissionDelegate.html#PERMISSION_PERSISTENT_STORAGE
877
878## v67
879- Added [`setAutomaticFontSizeAdjustment`][67.23] to
880  [`GeckoRuntimeSettings`][67.3] for automatically adjusting font size settings
881  depending on the OS-level font size setting.
882- Added [`setFontSizeFactor`][67.4] to [`GeckoRuntimeSettings`][67.3] for
883  setting a font size scaling factor, and for enabling font inflation for
884  non-mobile-friendly pages.
885- Updated video autoplay API to reflect changes in Gecko. Instead of being a
886  per-video permission in the [`PermissionDelegate`][67.5], it is a [runtime
887  setting][67.6] that either allows or blocks autoplay videos.
888- Change [`ContentBlocking.AT_AD`][67.7] and [`ContentBlocking.SB_ALL`][67.8]
889  values to mirror the actual constants they encompass.
890- Added nested [`ContentBlocking`][67.9] runtime settings.
891- Added [`RuntimeSettings`][67.10] base class to support nested settings.
892- Added [`baseUri`][67.11] to [`ContentDelegate.ContextElement`][65.21] and
893  changed [`linkUri`][67.12] to absolute form.
894- Added [`scrollBy`][67.13] and [`scrollTo`][67.14] to [`PanZoomController`][65.4].
895- Added [`GeckoSession.getDefaultUserAgent`][67.1] to expose the build-time
896  default user agent synchronously.
897- Changed [`WebResponse.body`][67.24] from a [`ByteBuffer`][67.25] to an [`InputStream`][67.26]. Apps that want access
898  to the entire response body will now need to read the stream themselves.
899- Added [`GeckoWebExecutor.FETCH_FLAGS_NO_REDIRECTS`][67.27], which will cause [`GeckoWebExecutor.fetch()`][67.28] to not
900  automatically follow [HTTP redirects][67.29] (e.g., 302).
901- Moved [`GeckoVRManager`][67.2] into the org.mozilla.geckoview package.
902- Initial WebExtension support. [`GeckoRuntime#registerWebExtension`][67.15]
903  allows embedders to register a local web extension.
904- Added API to [`GeckoView`][70.5] to take screenshot of the visible page. Calling [`capturePixels`][67.16] returns a ['GeckoResult'][65.25] that completes to a [`Bitmap`][67.17] of the current [`Surface`][67.18] contents, or an [`IllegalStateException`][67.19] if the [`GeckoSession`][65.9] is not ready to render content.
905- Added API to capture a screenshot to [`GeckoDisplay`][67.20]. [`capturePixels`][67.21] returns a ['GeckoResult'][65.25] that completes to a [`Bitmap`][67.16] of the current [`Surface`][67.17] contents, or an [`IllegalStateException`][67.18] if the [`GeckoSession`][65.9] is not ready to render content.
906- Add missing [`@Nullable`][66.2] annotation to return value for
907  [`GeckoSession.PromptDelegate.ChoiceCallback.onPopupResult()`][67.30]
908- Added `default` implementations for all non-functional `interface`s.
909- Added [`ContentDelegate.onWebAppManifest`][67.22], which will deliver the contents of a parsed
910  and validated Web App Manifest on pages that contain one.
911
912[67.1]: {{javadoc_uri}}/GeckoSession.html#getDefaultUserAgent--
913[67.2]: {{javadoc_uri}}/GeckoVRManager.html
914[67.3]: {{javadoc_uri}}/GeckoRuntimeSettings.html
915[67.4]: {{javadoc_uri}}/GeckoRuntimeSettings.html#setFontSizeFactor-float-
916[67.5]: {{javadoc_uri}}/GeckoSession.PermissionDelegate.html
917[67.6]: {{javadoc_uri}}/GeckoRuntimeSettings.html#setAutoplayDefault-int-
918[67.7]: {{javadoc_uri}}/ContentBlocking.html#AT_AD
919[67.8]: {{javadoc_uri}}/ContentBlocking.html#SB_ALL
920[67.9]: {{javadoc_uri}}/ContentBlocking.html
921[67.10]: {{javadoc_uri}}/RuntimeSettings.html
922[67.11]: {{javadoc_uri}}/GeckoSession.ContentDelegate.ContextElement.html#baseUri
923[67.12]: {{javadoc_uri}}/GeckoSession.ContentDelegate.ContextElement.html#linkUri
924[67.13]: {{javadoc_uri}}/PanZoomController.html#scrollBy-org.mozilla.geckoview.ScreenLength-org.mozilla.geckoview.ScreenLength-
925[67.14]: {{javadoc_uri}}/PanZoomController.html#scrollTo-org.mozilla.geckoview.ScreenLength-org.mozilla.geckoview.ScreenLength-
926[67.15]: {{javadoc_uri}}/GeckoRuntime.html#registerWebExtension-org.mozilla.geckoview.WebExtension-
927[67.16]: {{javadoc_uri}}/GeckoView.html#capturePixels--
928[67.17]: https://developer.android.com/reference/android/graphics/Bitmap
929[67.18]: https://developer.android.com/reference/android/view/Surface
930[67.19]: https://developer.android.com/reference/java/lang/IllegalStateException
931[67.20]: {{javadoc_uri}}/GeckoDisplay.html
932[67.21]: {{javadoc_uri}}/GeckoDisplay.html#capturePixels--
933[67.22]: {{javadoc_uri}}/GeckoSession.ContentDelegate.html#onWebAppManifest-org.mozilla.geckoview.GeckoSession-org.json.JSONObject-
934[67.23]: {{javadoc_uri}}/GeckoRuntimeSettings.html#setAutomaticFontSizeAdjustment-boolean-
935[67.24]: {{javadoc_uri}}/WebResponse.html#body
936[67.25]: https://developer.android.com/reference/java/nio/ByteBuffer
937[67.26]: https://developer.android.com/reference/java/io/InputStream
938[67.27]: {{javadoc_uri}}/GeckoWebExecutor.html#FETCH_FLAGS_NO_REDIRECTS
939[67.28]: {{javadoc_uri}}/GeckoWebExecutor.html#fetch-org.mozilla.geckoview.WebRequest-int-
940[67.29]: https://developer.mozilla.org/en-US/docs/Web/HTTP/Redirections
941[67.30]: {{javadoc_uri}}/GeckoSession.PromptDelegate.ChoiceCallback.html
942
943## v66
944- Removed redundant field `trackingMode` from [`SecurityInformation`][66.6].
945  Use `TrackingProtectionDelegate.onTrackerBlocked` for notification of blocked
946  elements during page load.
947- Added [`@NonNull`][66.1] or [`@Nullable`][66.2] to all APIs.
948- Added methods for each setting in [`GeckoSessionSettings`][66.3]
949- Added [`GeckoSessionSettings`][66.4] for enabling desktop viewport. Desktop
950  viewport is no longer set by [`USER_AGENT_MODE_DESKTOP`][66.5] and must be set
951  separately.
952- Added [`@UiThread`][65.6] to [`GeckoSession.releaseSession`][66.7] and
953  [`GeckoSession.setSession`][66.8]
954
955[66.1]: https://developer.android.com/reference/android/support/annotation/NonNull
956[66.2]: https://developer.android.com/reference/android/support/annotation/Nullable
957[66.3]: {{javadoc_uri}}/GeckoSessionSettings.html
958[66.4]: {{javadoc_uri}}/GeckoSessionSettings.html
959[66.5]: {{javadoc_uri}}/GeckoSessionSettings.html#USER_AGENT_MODE_DESKTOP
960[66.6]: {{javadoc_uri}}/GeckoSession.ProgressDelegate.SecurityInformation.html
961[66.7]: {{javadoc_uri}}/GeckoView.html#releaseSession--
962[66.8]: {{javadoc_uri}}/GeckoView.html#setSession-org.mozilla.geckoview.GeckoSession-
963
964## v65
965- Added experimental ad-blocking category to `GeckoSession.TrackingProtectionDelegate`.
966- Moved [`CompositorController`][65.1], [`DynamicToolbarAnimator`][65.2],
967  [`OverscrollEdgeEffect`][65.3], [`PanZoomController`][65.4] from
968  `org.mozilla.gecko.gfx` to [`org.mozilla.geckoview`][65.5]
969- Added [`@UiThread`][65.6], [`@AnyThread`][65.7] annotations to all APIs
970- Changed `GeckoRuntimeSettings#getLocale` to [`getLocales`][65.8] and related
971  APIs.
972- Merged `org.mozilla.gecko.gfx.LayerSession` into [`GeckoSession`][65.9]
973- Added [`GeckoSession.MediaDelegate`][65.10] and [`MediaElement`][65.11]. This
974  allow monitoring and control of web media elements (play, pause, seek, etc).
975- Removed unused `access` parameter from
976  [`GeckoSession.PermissionDelegate#onContentPermissionRequest`][65.12]
977- Added [`WebMessage`][65.13], [`WebRequest`][65.14], [`WebResponse`][65.15],
978  and [`GeckoWebExecutor`][65.16]. This exposes Gecko networking to apps. It
979  includes speculative connections, name resolution, and a Fetch-like HTTP API.
980- Added [`GeckoSession.HistoryDelegate`][65.17]. This allows apps to implement
981  their own history storage system and provide visited link status.
982- Added [`ContentDelegate#onFirstComposite`][65.18] to get first composite
983  callback after a compositor start.
984- Changed `LoadRequest.isUserTriggered` to [`isRedirect`][65.19].
985- Added [`GeckoSession.LOAD_FLAGS_BYPASS_CLASSIFIER`][65.20] to bypass the URI
986  classifier.
987- Added a `protected` empty constructor to all field-only classes so that apps
988  can mock these classes in tests.
989- Added [`ContentDelegate.ContextElement`][65.21] to extend the information
990  passed to [`ContentDelegate#onContextMenu`][65.22]. Extended information
991  includes the element's title and alt attributes.
992- Changed [`ContentDelegate.ContextElement`][65.21] `TYPE_` constants to public
993  access.
994- Changed [`ContentDelegate.ContextElement`][65.21],
995  [`GeckoSession.FinderResult`][65.23] to non-final class.
996- Update [`CrashReporter#sendCrashReport`][65.24] to return the crash ID as a
997  [`GeckoResult<String>`][65.25].
998
999[65.1]: {{javadoc_uri}}/CompositorController.html
1000[65.2]: {{javadoc_uri}}/DynamicToolbarAnimator.html
1001[65.3]: {{javadoc_uri}}/OverscrollEdgeEffect.html
1002[65.4]: {{javadoc_uri}}/PanZoomController.html
1003[65.5]: {{javadoc_uri}}/package-summary.html
1004[65.6]: https://developer.android.com/reference/android/support/annotation/UiThread
1005[65.7]: https://developer.android.com/reference/android/support/annotation/AnyThread
1006[65.8]: {{javadoc_uri}}/GeckoRuntimeSettings.html#getLocales--
1007[65.9]: {{javadoc_uri}}/GeckoSession.html
1008[65.10]: {{javadoc_uri}}/GeckoSession.MediaDelegate.html
1009[65.11]: {{javadoc_uri}}/MediaElement.html
1010[65.12]: {{javadoc_uri}}/GeckoSession.PermissionDelegate.html#onContentPermissionRequest-org.mozilla.geckoview.GeckoSession-java.lang.String-int-org.mozilla.geckoview.GeckoSession.PermissionDelegate.Callback-
1011[65.13]: {{javadoc_uri}}/WebMessage.html
1012[65.14]: {{javadoc_uri}}/WebRequest.html
1013[65.15]: {{javadoc_uri}}/WebResponse.html
1014[65.16]: {{javadoc_uri}}/GeckoWebExecutor.html
1015[65.17]: {{javadoc_uri}}/GeckoSession.HistoryDelegate.html
1016[65.18]: {{javadoc_uri}}/GeckoSession.ContentDelegate.html#onFirstComposite-org.mozilla.geckoview.GeckoSession-
1017[65.19]: {{javadoc_uri}}/GeckoSession.NavigationDelegate.LoadRequest.html#isRedirect
1018[65.20]: {{javadoc_uri}}/GeckoSession.html#LOAD_FLAGS_BYPASS_CLASSIFIER
1019[65.21]: {{javadoc_uri}}/GeckoSession.ContentDelegate.ContextElement.html
1020[65.22]: {{javadoc_uri}}/GeckoSession.ContentDelegate.html#onContextMenu-org.mozilla.geckoview.GeckoSession-int-int-org.mozilla.geckoview.GeckoSession.ContentDelegate.ContextElement-
1021[65.23]: {{javadoc_uri}}/GeckoSession.FinderResult.html
1022[65.24]: {{javadoc_uri}}/CrashReporter.html#sendCrashReport-android.content.Context-android.os.Bundle-java.lang.String-
1023[65.25]: {{javadoc_uri}}/GeckoResult.html
1024
1025[api-version]: 05c7e21b7ea40cd9978b319a9acfac1b256e700f
1026