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## v78
17- Added [`WebExtensionController.installBuiltIn`][78.1] that allows installing an
18  extension that is bundled with the APK. This method is meant as a replacement
19  for [`GeckoRuntime.registerWebExtension`][67.15], ⚠️ which is now deprecated
20  and will be removed in GeckoView 81.
21- Added [`CookieBehavior.ACCEPT_FIRST_PARTY_AND_ISOLATE_OTHERS`][78.2] to allow
22  enabling dynamic first party isolation; this will block tracking cookies and
23  isolate all other third party cookies by keying them based on the first party
24  from which they are accessed.
25- Added `cookieStoreId` field to [`WebExtension.CreateTabDetails`][78.3]. This adds the optional
26  ability to create a tab with a given cookie store ID for its [`contextual identity`][78.4].
27  ([bug 1622500]({{bugzilla}}1622500))
28- Added [`NavigationDelegate.onSubframeLoadRequest`][78.5] to allow intercepting
29  non-top-level navigations.
30- Added [`BeforeUnloadPrompt`][78.6] to respond to prompts from onbeforeunload.
31- ⚠️  Refactored `LoginStorage` to the [`Autocomplete`][78.7] API to support
32  login form autocomplete delegation.
33  Refactored 'LoginStorage.Delegate' to ['Autocomplete.LoginStorageDelegate'][78.8].
34  Refactored `GeckoSession.PromptDelegate.onLoginStoragePrompt` to
35  [`GeckoSession.PromptDelegate.onLoginSave`][78.9].
36  Added [`GeckoSession.PromptDelegate.onLoginSelect`][78.10].
37  ([bug 1618058]({{bugzilla}}1618058))
38- Added [`GeckoRuntimeSettings#setLoginAutofillEnabled`][78.11] to control
39  whether login forms should be automatically filled in suitable situations.
40
41[78.1]: {{javadoc_uri}}/WebExtensionController.html#installBuiltIn-java.lang.String-
42[78.2]: {{javadoc_uri}}/ContentBlocking.CookieBehavior.html#ACCEPT_FIRST_PARTY_AND_ISOLATE_OTHERS
43[78.3]: {{javadoc_uri}}/WebExtension.CreateTabDetails.html
44[78.4]: https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/contextualIdentities
45[78.5]: {{javadoc_uri}}/GeckoSession.NavigationDelegate.html#onSubframeLoadRequest-org.mozilla.geckoview.GeckoSession-org.mozilla.geckoview.GeckoSession.NavigationDelegate.LoadRequest-
46[78.6]: {{javadoc_uri}}/GeckoSession.PromptDelegate.BeforeUnloadPrompt.html
47[78.7]: {{javadoc_uri}}/Autocomplete.html
48[78.8]: {{javadoc_uri}}/Autocomplete.LoginStorageDelegate.html
49[78.9]: {{javadoc_uri}}/GeckoSession.PromptDelegate.html#onLoginSave-org.mozilla.geckoview.GeckoSession-org.mozilla.geckoview.GeckoSession.PromptDelegate.AutocompleteRequest-
50[78.10]: {{javadoc_uri}}/GeckoSession.PromptDelegate.html#onLoginSelect-org.mozilla.geckoview.GeckoSession-org.mozilla.geckoview.GeckoSession.PromptDelegate.AutocompleteRequest-
51[78.11]: {{javadoc_uri}}/GeckoRuntimeSettings.html#setLoginAutofillEnabled-boolean-
52
53## v77
54- Added [`GeckoRuntime.appendAppNotesToCrashReport`][77.1] For adding app notes to the crash report.
55  ([bug 1626979]({{bugzilla}}1626979))
56- ⚠️ Remove the `DynamicToolbarAnimator` API along with accesors on `GeckoView` and `GeckoSession`.
57  ([bug 1627716]({{bugzilla}}1627716))
58
59[77.1]: {{javadoc_uri}}/GeckoRuntime.html#appendAppNotesToCrashReport-java.lang.String-
60
61## v76
62- Added [`GeckoSession.PermissionDelegate.PERMISSION_MEDIA_KEY_SYSTEM_ACCESS`][76.1] to control EME media key access.
63- [`RuntimeTelemetry#getSnapshots`][68.10] is deprecated and will be removed
64  in 79. Use Glean to handle Gecko telemetry.
65  ([bug 1620395]({{bugzilla}}1620395))
66- Added [`LoadRequest.isDirectNavigation`] to know when calls to
67  [`onLoadRequest`][76.3] originate from a direct navigation made by the app
68  itself.
69  ([bug 1624675]({{bugzilla}}1624675))
70
71[76.1]: {{javadoc_uri}}/GeckoSession.PermissionDelegate.html#PERMISSION_MEDIA_KEY_SYSTEM_ACCESS
72[76.2]: {{javadoc_uri}}/GeckoSession.NavigationDelegate.LoadRequest.html#isDirectNavigation
73[76.3]: {{javadoc_uri}}/GeckoSession.NavigationDelegate.html#onLoadRequest-org.mozilla.geckoview.GeckoSession-org.mozilla.geckoview.GeckoSession.NavigationDelegate.LoadRequest-
74
75## v75
76- ⚠️ Remove `GeckoRuntimeSettings.Builder#useContentProcessHint`. The content
77  process is now preloaded by default if
78  [`GeckoRuntimeSettings.Builder#useMultiprocess`][75.1] is enabled.
79- ⚠️ Move `GeckoSessionSettings.Builder#useMultiprocess` to
80  [`GeckoRuntimeSettings.Builder#useMultiprocess`][75.1]. Multiprocess state is
81  no longer determined per session.
82- Added [`DebuggerDelegate#onExtensionListUpdated`][75.2] to notify that a temporary
83  extension has been installed by the debugger.
84  ([bug 1614295]({{bugzilla}}1614295))
85- ⚠️ Removed [`GeckoRuntimeSettings.setAutoplayDefault`][75.3], use
86  [`GeckoSession.PermissionDelegate#PERMISSION_AUTOPLAY_AUDIBLE`][73.12] and
87  [`GeckoSession.PermissionDelegate#PERMISSION_AUTOPLAY_INAUDIBLE`][73.13] to
88  control autoplay.
89  ([bug 1614894]({{bugzilla}}1614894))
90- Added [`GeckoSession.reload(int flags)`][75.4] That takes a [load flag][75.5] parameter.
91- ⚠️ Moved [`ActionDelegate`][75.6] and [`MessageDelegate`][75.7] to
92  [`SessionController`][75.8].
93  ([bug 1616625]({{bugzilla}}1616625))
94- Added [`SessionTabDelegate`][75.9] to [`SessionController`][75.8] and
95  [`TabDelegate`][75.10] to [`WebExtension`][69.5] which receive respectively
96  calls for the session and the runtime. `TabDelegate` is also now
97  per-`WebExtension` object instead of being global.  The existing global
98  [`TabDelegate`][75.11] is now deprecated and will be removed in GeckoView 77.
99  ([bug 1616625]({{bugzilla}}1616625))
100- Added [`SessionTabDelegate#onUpdateTab`][75.12] which is called whenever an
101  extension calls `tabs.update` on the corresponding `GeckoSession`.
102  [`TabDelegate#onCreateTab`][75.13] now takes a [`CreateTabDetails`][75.14]
103  object which contains additional information about the newly created tab
104  (including the `url` which used to be passed in directly).
105  ([bug 1616625]({{bugzilla}}1616625))
106- Added [`GeckoRuntimeSettings.setWebManifestEnabled`][75.15],
107  [`GeckoRuntimeSettings.webManifest`][75.16], and
108  [`GeckoRuntimeSettings.getWebManifestEnabled`][75.17]
109  ([bug 1614894]({{bugzilla}}1603673)), to enable or check Web Manifest support.
110- Added [`GeckoDisplay.safeAreaInsetsChanged`][75.18] to notify the content of [safe area insets][75.19].
111  ([bug 1503656]({{bugzilla}}1503656))
112- Added [`GeckoResult#cancel()`][75.22], [`GeckoResult#setCancellationDelegate()`][75.22],
113  and [`GeckoResult.CancellationDelegate`][75.23]. This adds the optional ability to cancel
114  an operation behind a pending `GeckoResult`.
115- Added [`baseUrl`][75.24] to [`WebExtension.MetaData`][75.25] to expose the
116  base URL for all WebExtension pages for a given extension.
117  ([bug 1560048]({{bugzilla}}1560048))
118- Added [`allowedInPrivateBrowsing`][75.26] and
119  [`setAllowedInPrivateBrowsing`][75.27] to control whether an extension can
120  run in private browsing or not.  Extensions installed with
121  [`registerWebExtension`][67.15] will always be allowed to run in private
122  browsing.
123  ([bug 1599139]({{bugzilla}}1599139))
124
125[75.1]: {{javadoc_uri}}/GeckoRuntimeSettings.Builder.html#useMultiprocess-boolean-
126[75.2]: {{javadoc_uri}}/WebExtensionController.DebuggerDelegate.html#onExtensionListUpdated--
127[75.3]: {{javadoc_uri}}/GeckoRuntimeSettings.Builder.html#autoplayDefault-boolean-
128[75.4]: {{javadoc_uri}}/GeckoSession.html#reload-int-
129[75.5]: {{javadoc_uri}}/GeckoSession.html#LOAD_FLAGS_NONE
130[75.6]: {{javadoc_uri}}/WebExtension.ActionDelegate.html
131[75.7]: {{javadoc_uri}}/WebExtension.MessageDelegate.html
132[75.8]: {{javadoc_uri}}/WebExtension.SessionController.html
133[75.9]: {{javadoc_uri}}/WebExtension.SessionTabDelegate.html
134[75.10]: {{javadoc_uri}}/WebExtension.TabDelegate.html
135[75.11]: {{javadoc_uri}}/WebExtensionRuntime.TabDelegate.html
136[75.12]: {{javadoc_uri}}/WebExtension.SessionTabDelegate.html#onUpdateTab-org.mozilla.geckoview.WebExtension-org.mozilla.geckoview.GeckoSession-org.mozilla.geckoview.WebExtension.UpdateTabDetails-
137[75.13]: {{javadoc_uri}}/WebExtension.TabDelegate.html#onNewTab-org.mozilla.geckoview.WebExtension-org.mozilla.geckoview.WebExtension.CreateTabDetails-
138[75.14]: {{javadoc_uri}}/WebExtension.CreateTabDetails.html
139[75.15]: {{javadoc_uri}}/GeckoRuntimeSettings.Builder.html#setWebManifestEnabled-boolean-
140[75.16]: {{javadoc_uri}}/GeckoRuntimeSettings.Builder.html#webManifest-boolean-
141[75.17]: {{javadoc_uri}}/GeckoRuntimeSettings.Builder.html#getWebManifestEnabled--
142[75.18]: {{javadoc_uri}}/GeckoDisplay.html#safeAreaInsetsChanged-int-int-int-int-
143[75.19]: https://developer.mozilla.org/en-US/docs/Web/CSS/env
144[75.20]: {{javadoc_uri}}/WebExtension.InstallException.ErrorCodes.html#ERROR_POSTPONED-
145[75.21]: {{javadoc_uri}}/GeckoResult.html#cancel--
146[75.22]: {{javadoc_uri}}/GeckoResult.html#setCancellationDelegate-CancellationDelegate-
147[75.23]: {{javadoc_uri}}/GeckoResult.CancellationDelegate.html
148[75.24]: {{javadoc_uri}}/WebExtension.MetaData.html#baseUrl
149[75.25]: {{javadoc_uri}}/WebExtension.MetaData.html
150[75.26]: {{javadoc_uri}}/WebExtension.MetaData.html#allowedInPrivateBrowsing
151[75.27]: {{javadoc_uri}}/WebExtensionController.html#setAllowedInPrivateBrowsing-org.mozilla.geckoview.WebExtension-boolean-
152
153## v74
154- Added [`WebExtensionController.enable`][74.1] and [`disable`][74.2] to
155  enable and disable extensions.
156  ([bug 1599585]({{bugzilla}}1599585))
157- ⚠️ Added ['GeckoSession.ProgressDelegate.SecurityInformation#certificate'][74.3], which is the
158  full server certificate in use, if any. The other certificate-related fields were removed.
159  ([bug 1508730]({{bugzilla}}1508730))
160- Added ['WebResponse#isSecure'][74.4], which indicates whether or not the response was
161  delivered over a secure connection.
162  ([bug 1508730]({{bugzilla}}1508730))
163- Added ['WebResponse#certificate'][74.5], which is the server certificate used for the
164  response, if any.
165  ([bug 1508730]({{bugzilla}}1508730))
166- Added ['WebRequestError#certificate'][74.6], which is the server certificate used in the
167  failed request, if any.
168  ([bug 1508730]({{bugzilla}}1508730))
169- ⚠️ Updated [`ContentBlockingController`][74.7] to use new representation for content blocking
170  exceptions and to add better support for removing exceptions. This deprecates [`ExceptionList`][74.8]
171  and [`restoreExceptionList`][74.9] with the intent to remove them in 76.
172  ([bug 1587552]({{bugzilla}}1587552))
173- Added [`GeckoSession.ContentDelegate.onMetaViewportFitChange`][74.10]. This exposes `viewport-fit` value that is CSS Round Display Level 1. ([bug 1574307]({{bugzilla}}1574307))
174- Extended [`LoginStorage.Delegate`][74.11] with [`onLoginUsed`][74.12] to
175  report when existing login entries are used for autofill.
176  ([bug 1610353]({{bugzilla}}1610353))
177- Added ['WebExtensionController#setTabActive'][74.13], which is used to notify extensions about
178  tab changes
179  ([bug 1597793]({{bugzilla}}1597793))
180- Added ['WebExtension.metaData.optionsUrl'][74.14] and ['WebExtension.metaData.openOptionsPageInTab'][74.15],
181  which is the addon metadata necessary to show their option pages.
182  ([bug 1598792]({{bugzilla}}1598792))
183- Added [`WebExtensionController.update`][74.16] to update extensions. ([bug 1599581]({{bugzilla}}1599581))
184- ⚠️ Replaced `subscription` argument in [`WebPushDelegate.onSubscriptionChanged`][74.17] from a [`WebPushSubscription`][74.18] to the [`String`][74.19] `scope`.
185
186[74.1]: {{javadoc_uri}}/WebExtensionController.html#enable-org.mozilla.geckoview.WebExtension-int-
187[74.2]: {{javadoc_uri}}/WebExtensionController.html#disable-org.mozilla.geckoview.WebExtension-int-
188[74.3]: {{javadoc_uri}}/GeckoSession.ProgressDelegate.SecurityInformation.html#certificate
189[74.4]: {{javadoc_uri}}/WebResponse.html#isSecure
190[74.5]: {{javadoc_uri}}/WebResponse.html#certificate
191[74.6]: {{javadoc_uri}}/WebRequestError.html#certificate
192[74.7]: {{javadoc_uri}}/ContentBlockingController.html
193[74.8]: {{javadoc_uri}}/ContentBlockingController.ExceptionList.html
194[74.9]: {{javadoc_uri}}/ContentBlockingController.html#restoreExceptionList-org.mozilla.geckoview.ContentBlockingController.ExceptionList-
195[74.10]: {{javadoc_uri}}/GeckoSession.ContentDelegate.html#onMetaViewportFitChange-org.mozilla.geckoview.GeckoSession-java.lang.String-
196[74.11]: {{javadoc_uri}}/LoginStorage.Delegate.html
197[74.12]: {{javadoc_uri}}/LoginStorage.Delegate.html#onLoginUsed-org.mozilla.geckoview.LoginStorage.LoginEntry-int-
198[74.13]: {{javadoc_uri}}/WebExtensionController.html#setTabActive
199[74.14]: {{javadoc_uri}}/WebExtension.MetaData.html#optionsUrl
200[74.15]: {{javadoc_uri}}/WebExtension.MetaData.html#openOptionsPageInTab
201[74.16]: {{javadoc_uri}}/WebExtensionController.html#update-org.mozilla.geckoview.WebExtension-int-
202[74.17]: {{javadoc_uri}}/WebPushController.html#onSubscriptionChange-org.mozilla.geckoview.WebPushSubscription-byte:A-
203[74.18]: {{javadoc_uri}}/WebPushSubscription.html
204[74.19]: https://developer.android.com/reference/java/lang/String
205
206## v73
207- Added [`WebExtensionController.install`][73.1] and [`uninstall`][73.2] to
208  manage installed extensions
209- ⚠️ Renamed `ScreenLength.VIEWPORT_WIDTH`, `ScreenLength.VIEWPORT_HEIGHT`,
210  `ScreenLength.fromViewportWidth` and `ScreenLength.fromViewportHeight` to
211  [`ScreenLength.VISUAL_VIEWPORT_WIDTH`][73.3],
212  [`ScreenLength.VISUAL_VIEWPORT_HEIGHT`][73.4],
213  [`ScreenLength.fromVisualViewportWidth`][73.5] and
214  [`ScreenLength.fromVisualViewportHeight`][73.6] respectively.
215- Added the [`LoginStorage`][73.7] API. Apps may handle login fetch requests now by
216  attaching a [`LoginStorage.Delegate`][73.8] via
217  [`GeckoRuntime#setLoginStorageDelegate`][73.9]
218  ([bug 1602881]({{bugzilla}}1602881))
219- ⚠️ [`WebExtension`][69.5]'s constructor now requires a `WebExtensionController`
220  instance.
221- Added [`GeckoResult.allOf`][73.10] for consuming a list of results.
222- Added [`WebExtensionController.list`][73.11] to list all installed extensions.
223- Added [`GeckoSession.PermissionDelegate#PERMISSION_AUTOPLAY_AUDIBLE`][73.12] and
224  [`GeckoSession.PermissionDelegate#PERMISSION_AUTOPLAY_INAUDIBLE`][73.13]. These control
225  autoplay permissions for audible and inaudible videos.
226  ([bug 1577596]({{bugzilla}}1577596))
227- Added [`LoginStorage.Delegate.onLoginSave`][73.14] for login storage save
228  requests and [`GeckoSession.PromptDelegate.onLoginStoragePrompt`][73.15] for
229  login storage prompts.
230  ([bug 1599873]({{bugzilla}}1599873))
231
232[73.1]: {{javadoc_uri}}/WebExtensionController.html#install-java.lang.String-
233[73.2]: {{javadoc_uri}}/WebExtensionController.html#uninstall-org.mozilla.geckoview.WebExtension-
234[73.3]: {{javadoc_uri}}/ScreenLength.html#VISUAL_VIEWPORT_WIDTH
235[73.4]: {{javadoc_uri}}/ScreenLength.html#VISUAL_VIEWPORT_HEIGHT
236[73.5]: {{javadoc_uri}}/ScreenLength.html#fromVisualViewportWidth-double-
237[73.6]: {{javadoc_uri}}/ScreenLength.html#fromVisualViewportHeight-double-
238[73.7]: {{javadoc_uri}}/LoginStorage.html
239[73.8]: {{javadoc_uri}}/LoginStorage.Delegate.html
240[73.9]: {{javadoc_uri}}/GeckoRuntime.html#setLoginStorageDelegate-org.mozilla.geckoview.LoginStorage.Delegate-
241[73.10]: {{javadoc_uri}}/GeckoResult.html#allOf-java.util.List-
242[73.11]: {{javadoc_uri}}/WebExtensionController.html#list--
243[73.12]: {{javadoc_uri}}/GeckoSession.PermissionDelegate.html#PERMISSION_AUTOPLAY_AUDIBLE
244[73.13]: {{javadoc_uri}}/GeckoSession.PermissionDelegate.html#PERMISSION_AUTOPLAY_INAUDIBLE
245[73.14]: {{javadoc_uri}}/LoginStorage.Delegate.html#onLoginSave-org.mozilla.geckoview.LoginStorage.LoginEntry-
246[73.15]: {{javadoc_uri}}/GeckoSession.PromptDelegate.html#onLoginStoragePrompt-org.mozilla.geckoview.GeckoSession-org.mozilla.geckoview.GeckoSession.PromptDelegate.LoginStoragePrompt-
247
248## v72
249- Added [`GeckoSession.NavigationDelegate.LoadRequest#hasUserGesture`][72.1]. This indicates
250  if a load was requested while a user gesture was active (e.g., a tap).
251  ([bug 1555337]({{bugzilla}}1555337))
252- ⚠️  Refactored `AutofillElement` and `AutofillSupport` into the
253  [`Autofill`][72.2] API.
254  ([bug 1591462]({{bugzilla}}1591462))
255- Make `read()` in the `InputStream` returned from [`WebResponse#body`][72.3] timeout according
256  to [`WebResponse#setReadTimeoutMillis()`][72.4]. The default timeout value is reflected in
257  [`WebResponse#DEFAULT_READ_TIMEOUT_MS`][72.5], currently 30s.
258  ([bug 1595145]({{bugzilla}}1595145))
259- ⚠️  Removed `GeckoResponse`
260  ([bug 1581161]({{bugzilla}}1581161))
261- ⚠️  Removed `actions` and `response` arguments from [`SelectionActionDelegate.onShowActionRequest`][72.6]
262  and [`BasicSelectionActionDelegate.onShowActionRequest`][72.7]
263  ([bug 1581161]({{bugzilla}}1581161))
264- Added text selection action methods to [`SelectionActionDelegate.Selection`][72.8]
265  ([bug 1581161]({{bugzilla}}1581161))
266- Added [`BasicSelectionActionDelegate.getSelection`][72.9]
267  ([bug 1581161]({{bugzilla}}1581161))
268- Changed [`BasicSelectionActionDelegate.clearSelection`][72.10] to public.
269  ([bug 1581161]({{bugzilla}}1581161))
270- Added `Autofill` commit support.
271  ([bug 1577005]({{bugzilla}}1577005))
272- Added [`GeckoView.setViewBackend`][72.11] to set whether GeckoView should be
273  backed by a [`TextureView`][72.12] or a [`SurfaceView`][72.13].
274  ([bug 1530402]({{bugzilla}}1530402))
275- Added support for Browser and Page Action from the WebExtension API.
276  See [`WebExtension.Action`][72.14].
277  ([bug 1530402]({{bugzilla}}1530402))
278- ⚠️ Split [`ContentBlockingController.Event.LOADED_TRACKING_CONTENT`][72.15] into
279  [`ContentBlockingController.Event.LOADED_LEVEL_1_TRACKING_CONTENT`][72.16] and
280  [`ContentBlockingController.Event.LOADED_LEVEL_2_TRACKING_CONTENT`][72.17].
281- Replaced `subscription` argument in [`WebPushDelegate.onPushEvent`][72.18] from a [`WebPushSubscription`][72.19] to the [`String`][72.20] `scope`.
282- ⚠️ Renamed `WebExtension.ActionIcon` to [`Icon`][72.21].
283- Added ['GeckoWebExecutor#FETCH_FLAGS_STREAM_FAILURE_TEST'][72.22], which is a new
284  flag used to immediately fail when reading a `WebResponse` body.
285  ([bug 1594905]({{bugzilla}}1594905))
286- Changed [`CrashReporter#sendCrashReport(Context, File, JSONObject)`][72.23] to
287  accept a JSON object instead of a Map. Said object also includes the
288  application name that was previously passed as the fourth argument to the
289  method, which was thus removed.
290- Added WebXR device access permission support, [`PERMISSION_PERSISTENT_XR`][72.24].
291  ([bug 1599927]({{bugzilla}}1599927))
292
293[72.1]: {{javadoc_uri}}/GeckoSession.NavigationDelegate.LoadRequest#hasUserGesture-
294[72.2]: {{javadoc_uri}}/Autofill.html
295[72.3]: {{javadoc_uri}}/WebResponse.html#body
296[72.4]: {{javadoc_uri}}/WebResponse.html#setReadTimeoutMillis-long-
297[72.5]: {{javadoc_uri}}/WebResponse.html#DEFAULT_READ_TIMEOUT_MS
298[72.6]: {{javadoc_uri}}/GeckoSession.SelectionActionDelegate.html#onShowActionRequest-org.mozilla.geckoview.GeckoSession-org.mozilla.geckoview.GeckoSession.SelectionActionDelegate.Selection-
299[72.7]: {{javadoc_uri}}/BasicSelectionActionDelegate.html#onShowActionRequest-org.mozilla.geckoview.GeckoSession-org.mozilla.geckoview.GeckoSession.SelectionActionDelegate.Selection-
300[72.8]: {{javadoc_uri}}/GeckoSession.SelectionActionDelegate.Selection.html
301[72.9]: {{javadoc_uri}}/BasicSelectionActionDelegate.html#getSelection-
302[72.10]: {{javadoc_uri}}/BasicSelectionActionDelegate.html#clearSelection-
303[72.11]: {{javadoc_uri}}/GeckoView.html#setViewBackend-int-
304[72.12]: https://developer.android.com/reference/android/view/TextureView
305[72.13]: https://developer.android.com/reference/android/view/SurfaceView
306[72.14]: {{javadoc_uri}}/WebExtension.Action.html
307[72.15]: {{javadoc_uri}}/ContentBlockingController.Event.html#LOADED_TRACKING_CONTENT
308[72.16]: {{javadoc_uri}}/ContentBlockingController.Event.html#LOADED_LEVEL_1_TRACKING_CONTENT
309[72.17]: {{javadoc_uri}}/ContentBlockingController.Event.html#LOADED_LEVEL_2_TRACKING_CONTENT
310[72.18]: {{javadoc_uri}}/WebPushController.html#onPushEvent-org.mozilla.geckoview.WebPushSubscription-byte:A-
311[72.19]: {{javadoc_uri}}/WebPushSubscription.html
312[72.20]: https://developer.android.com/reference/java/lang/String
313[72.21]: {{javadoc_uri}}/WebExtension.Icon.html
314[72.22]: {{javadoc_uri}}/GeckoWebExecutor.html#FETCH_FLAGS_STREAM_FAILURE_TEST
315[72.23]: {{javadoc_uri}}/CrashReporter.html#sendCrashReport-android.content.Context-java.io.File-org.json.JSONObject-
316[72.24]: {{javadoc_uri}}/GeckoSession.PermissionDelegate.html#PERMISSION_PERSISTENT_XR
317
318=
319## v71
320- Added a content blocking flag for blocked social cookies to [`ContentBlocking`][70.17].
321  ([bug 1584479]({{bugzilla}}1584479))
322- Added [`onBooleanScalar`][71.1], [`onLongScalar`][71.2],
323  [`onStringScalar`][71.3] to [`RuntimeTelemetry.Delegate`][70.12] to support
324  scalars in streaming telemetry. ⚠️  As part of this change,
325  `onTelemetryReceived` has been renamed to [`onHistogram`][71.4], and
326  [`Metric`][71.5] now takes a type parameter.
327  ([bug 1576730]({{bugzilla}}1576730))
328- Added overloads of [`GeckoSession.loadUri`][71.6] that accept a map of
329  additional HTTP request headers.
330  ([bug 1567549]({{bugzilla}}1567549))
331- Added support for exposing the content blocking log in [`ContentBlockingController`][71.7].
332  ([bug 1580201]({{bugzilla}}1580201))
333- ⚠️  Added `nativeApp` to [`WebExtension.MessageDelegate.onMessage`][71.8] which
334  exposes the native application identifier that was used to send the message.
335  ([bug 1546445]({{bugzilla}}1546445))
336- Added [`GeckoRuntime.ServiceWorkerDelegate`][71.9] set via
337  [`setServiceWorkerDelegate`][71.10] to support [`ServiceWorkerClients.openWindow`][71.11]
338  ([bug 1511033]({{bugzilla}}1511033))
339- Added [`GeckoRuntimeSettings.Builder#aboutConfigEnabled`][71.12] to control whether or
340  not `about:config` should be available.
341  ([bug 1540065]({{bugzilla}}1540065))
342- Added [`GeckoSession.ContentDelegate.onFirstContentfulPaint`][71.13]
343  ([bug 1578947]({{bugzilla}}1578947))
344- Added `setEnhancedTrackingProtectionLevel` to [`ContentBlocking.Settings`][71.14].
345  ([bug 1580854]({{bugzilla}}1580854))
346- ⚠️ Added [`GeckoView.onTouchEventForResult`][71.15] and modified
347  [`PanZoomController.onTouchEvent`][71.16] to return how the touch event was handled. This
348  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`.
349- Added [`GeckoSession.purgeHistory`][71.17] allowing apps to clear a session's history.
350  ([bug 1583265]({{bugzilla}}1583265))
351- Added [`GeckoRuntimeSettings.Builder#forceUserScalableEnabled`][71.18] to control whether or
352  not to force user scalable zooming.
353  ([bug 1540615]({{bugzilla}}1540615))
354- ⚠️ Moved Autofill related methods from `SessionTextInput` and `GeckoSession.TextInputDelegate`
355  into `GeckoSession` and `AutofillDelegate`.
356- Added [`GeckoSession.getAutofillElements()`][71.19], which is a new method for getting
357  an autofill virtual structure without using `ViewStructure`. It relies on a new class,
358  [`AutofillElement`][71.20], for representing the virtual tree.
359- Added [`GeckoView.setAutofillEnabled`][71.21] for controlling whether or not the `GeckoView`
360  instance participates in Android autofill. When enabled, this connects an `AutofillDelegate`
361  to the session it holds.
362- Changed [`AutofillElement.children`][71.20] interface to `Collection` to provide
363  an efficient way to pre-allocate memory when filling `ViewStructure`.
364- Added [`GeckoSession.PromptDelegate.onSharePrompt`][71.22] to support the WebShare API.
365  ([bug 1402369]({{bugzilla}}1402369))
366- Added [`GeckoDisplay.screenshot`][71.23] allowing apps finer grain control over screenshots.
367  ([bug 1577192]({{bugzilla}}1577192))
368- Added `GeckoView.setDynamicToolbarMaxHeight` to make ICB size static, ICB doesn't include the dynamic toolbar region.
369  ([bug 1586144]({{bugzilla}}1586144))
370
371[71.1]: {{javadoc_uri}}/RuntimeTelemetry.Delegate.html#onBooleanScalar-org.mozilla.geckoview.RuntimeTelemetry.Metric-
372[71.2]: {{javadoc_uri}}/RuntimeTelemetry.Delegate.html#onLongScalar-org.mozilla.geckoview.RuntimeTelemetry.Metric-
373[71.3]: {{javadoc_uri}}/RuntimeTelemetry.Delegate.html#onStringScalar-org.mozilla.geckoview.RuntimeTelemetry.Metric-
374[71.4]: {{javadoc_uri}}/RuntimeTelemetry.Delegate.html#onHistogram-org.mozilla.geckoview.RuntimeTelemetry.Metric-
375[71.5]: {{javadoc_uri}}/RuntimeTelemetry.Metric.html
376[71.6]: {{javadoc_uri}}/GeckoSession.html#loadUri-java.lang.String-java.io.File-java.util.Map-
377[71.7]: {{javadoc_uri}}/ContentBlockingController.html
378[71.8]: {{javadoc_uri}}/WebExtension.MessageDelegate.html#onMessage-java.lang.String-java.lang.Object-org.mozilla.geckoview.WebExtension.MessageSender-
379[71.9]: {{javadoc_uri}}/GeckoRuntime.ServiceWorkerDelegate.html
380[71.10]: {{javadoc_uri}}/GeckoRuntime#setServiceWorkerDelegate-org.mozilla.geckoview.GeckoRuntime.ServiceWorkerDelegate-
381[71.11]: https://developer.mozilla.org/en-US/docs/Web/API/Clients/openWindow
382[71.12]: {{javadoc_uri}}/GeckoRuntimeSettings.Builder.html#aboutConfigEnabled-boolean-
383[71.13]: {{javadoc_uri}}/GeckoSession.ContentDelegate.html#onFirstContentfulPaint-org.mozilla.geckoview.GeckoSession-
384[71.15]: {{javadoc_uri}}/GeckoView.html#onTouchEventForResult-android.view.MotionEvent-
385[71.16]: {{javadoc_uri}}/PanZoomController.html#onTouchEvent-android.view.MotionEvent-
386[71.17]: {{javadoc_uri}}/GeckoSession.html#purgeHistory--
387[71.18]: {{javadoc_uri}}/GeckoRuntimeSettings.Builder.html#forceUserScalableEnabled-boolean-
388[71.19]: {{javadoc_uri}}/GeckoSession.html#getAutofillElements--
389[71.20]: {{javadoc_uri}}/AutofillElement.html
390[71.21]: {{javadoc_uri}}/GeckoView.html#setAutofillEnabled-boolean-
391[71.22]: {{javadoc_uri}}/GeckoSession.PromptDelegate.html#onSharePrompt-org.mozilla.geckoview.GeckoSession-org.mozilla.geckoview.GeckoSession.PromptDelegate.SharePrompt-
392[71.23]: {{javadoc_uri}}/GeckoDisplay.html#screenshot--
393
394## v70
395- Added API for session context assignment
396  [`GeckoSessionSettings.Builder.contextId`][70.1] and deletion of data related
397  to a session context [`StorageController.clearDataForSessionContext`][70.2].
398  ([bug 1501108]({{bugzilla}}1501108))
399- Removed `setSession(session, runtime)` from [`GeckoView`][70.5]. With this
400  change, `GeckoView` will no longer manage opening/closing of the
401  [`GeckoSession`][70.6] and instead leave that up to the app. It's also now
402  allowed to call [`setSession`][70.10] with a closed `GeckoSession`.
403  ([bug 1510314]({{bugzilla}}1510314))
404- Added an overload of [`GeckoSession.loadUri()`][70.8] that accepts a
405  referring [`GeckoSession`][70.6]. This should be used when the URI we're
406  loading originates from another page. A common example of this would be long
407  pressing a link and then opening that in a new `GeckoSession`.
408  ([bug 1561079]({{bugzilla}}1561079))
409- Added capture parameter to [`onFilePrompt`][70.9] and corresponding
410  [`CAPTURE_TYPE_*`][70.7] constants.
411  ([bug 1553603]({{bugzilla}}1553603))
412- Removed the obsolete `success` parameter from
413  [`CrashReporter#sendCrashReport(Context, File, File, String)`][70.3] and
414  [`CrashReporter#sendCrashReport(Context, File, Map, String)`][70.4].
415  ([bug 1570789]({{bugzilla}}1570789))
416- Add `GeckoSession.LOAD_FLAGS_REPLACE_HISTORY`.
417  ([bug 1571088]({{bugzilla}}1571088))
418- Complete rewrite of [`PromptDelegate`][70.11].
419  ([bug 1499394]({{bugzilla}}1499394))
420- Added [`RuntimeTelemetry.Delegate`][70.12] that receives streaming telemetry
421  data from GeckoView.
422  ([bug 1566367]({{bugzilla}}1566367))
423- Updated [`ContentBlocking`][70.13] to better report blocked and allowed ETP events.
424  ([bug 1567268]({{bugzilla}}1567268))
425- Added API for controlling Gecko logging [`GeckoRuntimeSettings.debugLogging`][70.14]
426  ([bug 1573304]({{bugzilla}}1573304))
427- Added [`WebNotification`][70.15] and [`WebNotificationDelegate`][70.16] for handling Web Notifications.
428  ([bug 1533057]({{bugzilla}}1533057))
429- Added Social Tracking Protection support to [`ContentBlocking`][70.17].
430  ([bug 1568295]({{bugzilla}}1568295))
431- Added [`WebExtensionController`][70.18] and [`WebExtensionController.TabDelegate`][70.19] to handle
432  [`browser.tabs.create`][70.20] calls by WebExtensions.
433  ([bug 1539144]({{bugzilla}}1539144))
434- Added [`onCloseTab`][70.21] to [`WebExtensionController.TabDelegate`][70.19] to handle
435  [`browser.tabs.remove`][70.22] calls by WebExtensions.
436  ([bug 1565782]({{bugzilla}}1565782))
437- Added onSlowScript to [`ContentDelegate`][70.23] which allows handling of slow and hung scripts.
438  ([bug 1621094]({{bugzilla}}1621094))
439- Added support for Web Push via [`WebPushController`][70.24], [`WebPushDelegate`][70.25], and
440  [`WebPushSubscription`][70.26].
441- Added [`ContentBlockingController`][70.27], accessible via [`GeckoRuntime.getContentBlockingController`][70.28]
442  to allow modification and inspection of a content blocking exception list.
443
444[70.1]: {{javadoc_uri}}/GeckoSessionSettings.Builder.html#contextId-java.lang.String-
445[70.2]: {{javadoc_uri}}/StorageController.html#clearDataForSessionContext-java.lang.String-
446[70.3]: {{javadoc_uri}}/CrashReporter.html#sendCrashReport-android.content.Context-java.io.File-java.io.File-java.lang.String-
447[70.4]: {{javadoc_uri}}/CrashReporter.html#sendCrashReport-android.content.Context-java.io.File-java.util.Map-java.lang.String-
448[70.5]: {{javadoc_uri}}/GeckoView.html
449[70.6]: {{javadoc_uri}}/GeckoSession.html
450[70.7]: {{javadoc_uri}}/GeckoSession.PromptDelegate.html#CAPTURE_TYPE_NONE
451[70.8]: {{javadoc_uri}}/GeckoSession.html#loadUri-java.lang.String-org.mozilla.geckoview.GeckoSession-int-
452[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-
453[70.10]: {{javadoc_uri}}/GeckoView.html#setSession-org.mozilla.geckoview.GeckoSession-
454[70.11]: {{javadoc_uri}}/GeckoSession.PromptDelegate.html
455[70.12]: {{javadoc_uri}}/RuntimeTelemetry.Delegate.html
456[70.13]: {{javadoc_uri}}/ContentBlocking.html
457[70.14]: {{javadoc_uri}}/GeckoRuntimeSettings.Builder.html#debugLogging-boolean-
458[70.15]: {{javadoc_uri}}/WebNotification.html
459[70.16]: {{javadoc_uri}}/WebNotificationDelegate.html
460[70.17]: {{javadoc_uri}}/ContentBlocking.html
461[70.18]: {{javadoc_uri}}/WebExtensionController.html
462[70.19]: {{javadoc_uri}}/WebExtensionController.TabDelegate.html
463[70.20]: https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/create
464[70.21]: {{javadoc_uri}}/WebExtensionController.TabDelegate.html#onCloseTab-org.mozilla.geckoview.WebExtension-org.mozilla.geckoview.GeckoSession-
465[70.22]: https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/remove
466[70.23]: {{javadoc_uri}}/GeckoSession.ContentDelegate.html
467[70.24]: {{javadoc_uri}}/WebPushController.html
468[70.25]: {{javadoc_uri}}/WebPushDelegate.html
469[70.26]: {{javadoc_uri}}/WebPushSubscription.html
470[70.27]: {{javadoc_uri}}/ContentBlockingController.html
471[70.28]: {{javadoc_uri}}/GeckoRuntime.html#getContentBlockingController--
472
473## v69
474- Modified behavior of ['setAutomaticFontSizeAdjustment'][69.1] so that it no
475  longer has any effect on ['setFontInflationEnabled'][69.2]
476- Add [GeckoSession.LOAD_FLAGS_FORCE_ALLOW_DATA_URI][69.14]
477- Added [`GeckoResult.accept`][69.3] for consuming a result without
478  transforming it.
479- [`GeckoSession.setMessageDelegate`][69.13] callers must now specify the
480  [`WebExtension`][69.5] that the [`MessageDelegate`][69.4] will receive
481  messages from.
482- Created [`onKill`][69.7] to [`ContentDelegate`][69.11] to differentiate from crashes.
483
484[69.1]: {{javadoc_uri}}/GeckoRuntimeSettings.html#setAutomaticFontSizeAdjustment-boolean-
485[69.2]: {{javadoc_uri}}/GeckoRuntimeSettings.html#setFontInflationEnabled-boolean-
486[69.3]: {{javadoc_uri}}/GeckoResult.html#accept-org.mozilla.geckoview.GeckoResult.Consumer-
487[69.4]: {{javadoc_uri}}/WebExtension.MessageDelegate.html
488[69.5]: {{javadoc_uri}}/WebExtension.html
489[69.7]: {{javadoc_uri}}/GeckoSession.ContentDelegate.html#onKill-org.mozilla.geckoview.GeckoSession-
490[69.11]: {{javadoc_uri}}/GeckoSession.ContentDelegate.html
491[69.13]: {{javadoc_uri}}/GeckoSession.html#setMessageDelegate-org.mozilla.geckoview.WebExtension-org.mozilla.geckoview.WebExtension.MessageDelegate-java.lang.String-
492[69.14]: {{javadoc_uri}}/GeckoSession.html#LOAD_FLAGS_FORCE_ALLOW_DATA_URI
493
494## v68
495- Added [`GeckoRuntime#configurationChanged`][68.1] to notify the device
496  configuration has changed.
497- Added [`onSessionStateChange`][68.29] to [`ProgressDelegate`][68.2] and removed `saveState`.
498- Added [`ContentBlocking#AT_CRYPTOMINING`][68.3] for cryptocurrency miner blocking.
499- Added [`ContentBlocking#AT_DEFAULT`][68.4], [`ContentBlocking#AT_STRICT`][68.5],
500  [`ContentBlocking#CB_DEFAULT`][68.6] and [`ContentBlocking#CB_STRICT`][68.7]
501  for clearer app default selections.
502- Added [`GeckoSession.SessionState.fromString`][68.8]. This can be used to
503  deserialize a `GeckoSession.SessionState` instance previously serialized to
504  a `String` via `GeckoSession.SessionState.toString`.
505- Added [`GeckoRuntimeSettings#setPreferredColorScheme`][68.9] to override
506  the default color theme for web content ("light" or "dark").
507- Added [`@NonNull`][66.1] or [`@Nullable`][66.2] to all fields.
508- [`RuntimeTelemetry#getSnapshots`][68.10] returns a [`JSONObject`][68.30] now.
509- Removed all `org.mozilla.gecko` references in the API.
510- Added [`ContentBlocking#AT_FINGERPRINTING`][68.11] to block fingerprinting trackers.
511- Added [`HistoryItem`][68.31] and [`HistoryList`][68.32] interfaces and [`onHistoryStateChange`][68.34] to
512  [`HistoryDelegate`][68.12] and added [`gotoHistoryIndex`][68.33] to [`GeckoSession`][68.13].
513- [`GeckoView`][70.5] will not create a [`GeckoSession`][65.9] anymore when
514  attached to a window without a session.
515- Added [`GeckoRuntimeSettings.Builder#configFilePath`][68.16] to set
516  a path to a configuration file from which GeckoView will read
517  configuration options such as Gecko process arguments, environment
518  variables, and preferences.
519- Added [`unregisterWebExtension`][68.17] to unregister a web extension.
520- Added messaging support for WebExtension. [`setMessageDelegate`][68.18]
521  allows embedders to listen to messages coming from a WebExtension.
522  [`Port`][68.19] allows bidirectional communication between the embedder and
523  the WebExtension.
524- Expose the following prefs in [`GeckoRuntimeSettings`][67.3]:
525  [`setAutoZoomEnabled`][68.20], [`setDoubleTapZoomingEnabled`][68.21],
526  [`setGlMsaaLevel`][68.22].
527- Added new constant for requesting external storage Android permissions, [`PERMISSION_PERSISTENT_STORAGE`][68.35]
528- Added `setVerticalClipping` to [`GeckoDisplay`][68.24] and
529  [`GeckoView`][68.23] to tell Gecko how much of its vertical space is clipped.
530- Added [`StorageController`][68.25] API for clearing data.
531- Added [`onRecordingStatusChanged`][68.26] to [`MediaDelegate`][68.27] to handle events related to the status of recording devices.
532- Removed redundant constants in [`MediaSource`][68.28]
533
534[68.1]: {{javadoc_uri}}/GeckoRuntime.html#configurationChanged-android.content.res.Configuration-
535[68.2]: {{javadoc_uri}}/GeckoSession.ProgressDelegate.html
536[68.3]: {{javadoc_uri}}/ContentBlocking.html#AT_CRYPTOMINING
537[68.4]: {{javadoc_uri}}/ContentBlocking.html#AT_DEFAULT
538[68.5]: {{javadoc_uri}}/ContentBlocking.html#AT_STRICT
539[68.6]: {{javadoc_uri}}/ContentBlocking.html#CB_DEFAULT
540[68.7]: {{javadoc_uri}}/ContentBlocking.html#CB_STRICT
541[68.8]: {{javadoc_uri}}/GeckoSession.SessionState.html#fromString-java.lang.String-
542[68.9]: {{javadoc_uri}}/GeckoRuntimeSettings.html#setPreferredColorScheme-int-
543[68.10]: {{javadoc_uri}}/RuntimeTelemetry.html#getSnapshots-boolean-
544[68.11]: {{javadoc_uri}}/ContentBlocking.html#AT_FINGERPRINTING
545[68.12]: {{javadoc_uri}}/GeckoSession.HistoryDelegate.html
546[68.13]: {{javadoc_uri}}/GeckoSession.html
547[68.16]: {{javadoc_uri}}/GeckoRuntimeSettings.Builder.html#configFilePath-java.lang.String-
548[68.17]: {{javadoc_uri}}/GeckoRuntime.html#unregisterWebExtension-org.mozilla.geckoview.WebExtension-
549[68.18]: {{javadoc_uri}}/WebExtension.html#setMessageDelegate-org.mozilla.geckoview.WebExtension.MessageDelegate-java.lang.String-
550[68.19]: {{javadoc_uri}}/WebExtension.Port.html
551[68.20]: {{javadoc_uri}}/GeckoRuntimeSettings.html#setAutoZoomEnabled-boolean-
552[68.21]: {{javadoc_uri}}/GeckoRuntimeSettings.html#setDoubleTapZoomingEnabled-boolean-
553[68.22]: {{javadoc_uri}}/GeckoRuntimeSettings.html#setGlMsaaLevel-int-
554[68.23]: {{javadoc_uri}}/GeckoView.html#setVerticalClipping-int-
555[68.24]: {{javadoc_uri}}/GeckoDisplay.html#setVerticalClipping-int-
556[68.25]: {{javadoc_uri}}/StorageController.html
557[68.26]: {{javadoc_uri}}/GeckoSession.MediaDelegate.html#onRecordingStatusChanged-org.mozilla.geckoview.GeckoSession-org.mozilla.geckoview.GeckoSession.MediaDelegate.RecordingDevice:A-
558[68.27]: {{javadoc_uri}}/GeckoSession.MediaDelegate.html
559[68.28]: {{javadoc_uri}}/GeckoSession.PermissionDelegate.MediaSource.html
560[68.29]: {{javadoc_uri}}/GeckoSession.ProgressDelegate.html#onSessionStateChange-org.mozilla.geckoview.GeckoSession-org.mozilla.geckoview.GeckoSession.SessionState-
561[68.30]: https://developer.android.com/reference/org/json/JSONObject
562[68.31]: {{javadoc_uri}}/GeckoSession.HistoryDelegate.HistoryItem.html
563[68.32]: {{javadoc_uri}}/GeckoSession.HistoryDelegate.HistoryList.html
564[68.33]: {{javadoc_uri}}/GeckoSession.html#gotoHistoryIndex-int-
565[68.34]: {{javadoc_uri}}/GeckoSession.HistoryDelegate.html#onHistoryStateChange-org.mozilla.geckoview.GeckoSession-org.mozilla.geckoview.GeckoSession.HistoryDelegate.HistoryList-
566[68.35]: {{javadoc_uri}}/GeckoSession.PermissionDelegate.html#PERMISSION_PERSISTENT_STORAGE
567
568## v67
569- Added [`setAutomaticFontSizeAdjustment`][67.23] to
570  [`GeckoRuntimeSettings`][67.3] for automatically adjusting font size settings
571  depending on the OS-level font size setting.
572- Added [`setFontSizeFactor`][67.4] to [`GeckoRuntimeSettings`][67.3] for
573  setting a font size scaling factor, and for enabling font inflation for
574  non-mobile-friendly pages.
575- Updated video autoplay API to reflect changes in Gecko. Instead of being a
576  per-video permission in the [`PermissionDelegate`][67.5], it is a [runtime
577  setting][67.6] that either allows or blocks autoplay videos.
578- Change [`ContentBlocking.AT_AD`][67.7] and [`ContentBlocking.SB_ALL`][67.8]
579  values to mirror the actual constants they encompass.
580- Added nested [`ContentBlocking`][67.9] runtime settings.
581- Added [`RuntimeSettings`][67.10] base class to support nested settings.
582- Added [`baseUri`][67.11] to [`ContentDelegate.ContextElement`][65.21] and
583  changed [`linkUri`][67.12] to absolute form.
584- Added [`scrollBy`][67.13] and [`scrollTo`][67.14] to [`PanZoomController`][65.4].
585- Added [`GeckoSession.getDefaultUserAgent`][67.1] to expose the build-time
586  default user agent synchronously.
587- Changed [`WebResponse.body`][67.24] from a [`ByteBuffer`][67.25] to an [`InputStream`][67.26]. Apps that want access
588  to the entire response body will now need to read the stream themselves.
589- Added [`GeckoWebExecutor.FETCH_FLAGS_NO_REDIRECTS`][67.27], which will cause [`GeckoWebExecutor.fetch()`][67.28] to not
590  automatically follow [HTTP redirects][67.29] (e.g., 302).
591- Moved [`GeckoVRManager`][67.2] into the org.mozilla.geckoview package.
592- Initial WebExtension support. [`GeckoRuntime#registerWebExtension`][67.15]
593  allows embedders to register a local web extension.
594- 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.
595- 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.
596- Add missing [`@Nullable`][66.2] annotation to return value for
597  [`GeckoSession.PromptDelegate.ChoiceCallback.onPopupResult()`][67.30]
598- Added `default` implementations for all non-functional `interface`s.
599- Added [`ContentDelegate.onWebAppManifest`][67.22], which will deliver the contents of a parsed
600  and validated Web App Manifest on pages that contain one.
601
602[67.1]: {{javadoc_uri}}/GeckoSession.html#getDefaultUserAgent--
603[67.2]: {{javadoc_uri}}/GeckoVRManager.html
604[67.3]: {{javadoc_uri}}/GeckoRuntimeSettings.html
605[67.4]: {{javadoc_uri}}/GeckoRuntimeSettings.html#setFontSizeFactor-float-
606[67.5]: {{javadoc_uri}}/GeckoSession.PermissionDelegate.html
607[67.6]: {{javadoc_uri}}/GeckoRuntimeSettings.html#setAutoplayDefault-int-
608[67.7]: {{javadoc_uri}}/ContentBlocking.html#AT_AD
609[67.8]: {{javadoc_uri}}/ContentBlocking.html#SB_ALL
610[67.9]: {{javadoc_uri}}/ContentBlocking.html
611[67.10]: {{javadoc_uri}}/RuntimeSettings.html
612[67.11]: {{javadoc_uri}}/GeckoSession.ContentDelegate.ContextElement.html#baseUri
613[67.12]: {{javadoc_uri}}/GeckoSession.ContentDelegate.ContextElement.html#linkUri
614[67.13]: {{javadoc_uri}}/PanZoomController.html#scrollBy-org.mozilla.geckoview.ScreenLength-org.mozilla.geckoview.ScreenLength-
615[67.14]: {{javadoc_uri}}/PanZoomController.html#scrollTo-org.mozilla.geckoview.ScreenLength-org.mozilla.geckoview.ScreenLength-
616[67.15]: {{javadoc_uri}}/GeckoRuntime.html#registerWebExtension-org.mozilla.geckoview.WebExtension-
617[67.16]: {{javadoc_uri}}/GeckoView.html#capturePixels--
618[67.17]: https://developer.android.com/reference/android/graphics/Bitmap
619[67.18]: https://developer.android.com/reference/android/view/Surface
620[67.19]: https://developer.android.com/reference/java/lang/IllegalStateException
621[67.20]: {{javadoc_uri}}/GeckoDisplay.html
622[67.21]: {{javadoc_uri}}/GeckoDisplay.html#capturePixels--
623[67.22]: {{javadoc_uri}}/GeckoSession.ContentDelegate.html#onWebAppManifest-org.mozilla.geckoview.GeckoSession-org.json.JSONObject-
624[67.23]: {{javadoc_uri}}/GeckoRuntimeSettings.html#setAutomaticFontSizeAdjustment-boolean-
625[67.24]: {{javadoc_uri}}/WebResponse.html#body
626[67.25]: https://developer.android.com/reference/java/nio/ByteBuffer
627[67.26]: https://developer.android.com/reference/java/io/InputStream
628[67.27]: {{javadoc_uri}}/GeckoWebExecutor.html#FETCH_FLAGS_NO_REDIRECTS
629[67.28]: {{javadoc_uri}}/GeckoWebExecutor.html#fetch-org.mozilla.geckoview.WebRequest-int-
630[67.29]: https://developer.mozilla.org/en-US/docs/Web/HTTP/Redirections
631[67.30]: {{javadoc_uri}}/GeckoSession.PromptDelegate.ChoiceCallback.html
632
633## v66
634- Removed redundant field `trackingMode` from [`SecurityInformation`][66.6].
635  Use `TrackingProtectionDelegate.onTrackerBlocked` for notification of blocked
636  elements during page load.
637- Added [`@NonNull`][66.1] or [`@Nullable`][66.2] to all APIs.
638- Added methods for each setting in [`GeckoSessionSettings`][66.3]
639- Added [`GeckoSessionSettings`][66.4] for enabling desktop viewport. Desktop
640  viewport is no longer set by [`USER_AGENT_MODE_DESKTOP`][66.5] and must be set
641  separately.
642- Added [`@UiThread`][65.6] to [`GeckoSession.releaseSession`][66.7] and
643  [`GeckoSession.setSession`][66.8]
644
645[66.1]: https://developer.android.com/reference/android/support/annotation/NonNull
646[66.2]: https://developer.android.com/reference/android/support/annotation/Nullable
647[66.3]: {{javadoc_uri}}/GeckoSessionSettings.html
648[66.4]: {{javadoc_uri}}/GeckoSessionSettings.html
649[66.5]: {{javadoc_uri}}/GeckoSessionSettings.html#USER_AGENT_MODE_DESKTOP
650[66.6]: {{javadoc_uri}}/GeckoSession.ProgressDelegate.SecurityInformation.html
651[66.7]: {{javadoc_uri}}/GeckoView.html#releaseSession--
652[66.8]: {{javadoc_uri}}/GeckoView.html#setSession-org.mozilla.geckoview.GeckoSession-
653
654## v65
655- Added experimental ad-blocking category to `GeckoSession.TrackingProtectionDelegate`.
656- Moved [`CompositorController`][65.1], [`DynamicToolbarAnimator`][65.2],
657  [`OverscrollEdgeEffect`][65.3], [`PanZoomController`][65.4] from
658  `org.mozilla.gecko.gfx` to [`org.mozilla.geckoview`][65.5]
659- Added [`@UiThread`][65.6], [`@AnyThread`][65.7] annotations to all APIs
660- Changed `GeckoRuntimeSettings#getLocale` to [`getLocales`][65.8] and related
661  APIs.
662- Merged `org.mozilla.gecko.gfx.LayerSession` into [`GeckoSession`][65.9]
663- Added [`GeckoSession.MediaDelegate`][65.10] and [`MediaElement`][65.11]. This
664  allow monitoring and control of web media elements (play, pause, seek, etc).
665- Removed unused `access` parameter from
666  [`GeckoSession.PermissionDelegate#onContentPermissionRequest`][65.12]
667- Added [`WebMessage`][65.13], [`WebRequest`][65.14], [`WebResponse`][65.15],
668  and [`GeckoWebExecutor`][65.16]. This exposes Gecko networking to apps. It
669  includes speculative connections, name resolution, and a Fetch-like HTTP API.
670- Added [`GeckoSession.HistoryDelegate`][65.17]. This allows apps to implement
671  their own history storage system and provide visited link status.
672- Added [`ContentDelegate#onFirstComposite`][65.18] to get first composite
673  callback after a compositor start.
674- Changed `LoadRequest.isUserTriggered` to [`isRedirect`][65.19].
675- Added [`GeckoSession.LOAD_FLAGS_BYPASS_CLASSIFIER`][65.20] to bypass the URI
676  classifier.
677- Added a `protected` empty constructor to all field-only classes so that apps
678  can mock these classes in tests.
679- Added [`ContentDelegate.ContextElement`][65.21] to extend the information
680  passed to [`ContentDelegate#onContextMenu`][65.22]. Extended information
681  includes the element's title and alt attributes.
682- Changed [`ContentDelegate.ContextElement`][65.21] `TYPE_` constants to public
683  access.
684- Changed [`ContentDelegate.ContextElement`][65.21],
685  [`GeckoSession.FinderResult`][65.23] to non-final class.
686- Update [`CrashReporter#sendCrashReport`][65.24] to return the crash ID as a
687  [`GeckoResult<String>`][65.25].
688
689[65.1]: {{javadoc_uri}}/CompositorController.html
690[65.2]: {{javadoc_uri}}/DynamicToolbarAnimator.html
691[65.3]: {{javadoc_uri}}/OverscrollEdgeEffect.html
692[65.4]: {{javadoc_uri}}/PanZoomController.html
693[65.5]: {{javadoc_uri}}/package-summary.html
694[65.6]: https://developer.android.com/reference/android/support/annotation/UiThread
695[65.7]: https://developer.android.com/reference/android/support/annotation/AnyThread
696[65.8]: {{javadoc_uri}}/GeckoRuntimeSettings.html#getLocales--
697[65.9]: {{javadoc_uri}}/GeckoSession.html
698[65.10]: {{javadoc_uri}}/GeckoSession.MediaDelegate.html
699[65.11]: {{javadoc_uri}}/MediaElement.html
700[65.12]: {{javadoc_uri}}/GeckoSession.PermissionDelegate.html#onContentPermissionRequest-org.mozilla.geckoview.GeckoSession-java.lang.String-int-org.mozilla.geckoview.GeckoSession.PermissionDelegate.Callback-
701[65.13]: {{javadoc_uri}}/WebMessage.html
702[65.14]: {{javadoc_uri}}/WebRequest.html
703[65.15]: {{javadoc_uri}}/WebResponse.html
704[65.16]: {{javadoc_uri}}/GeckoWebExecutor.html
705[65.17]: {{javadoc_uri}}/GeckoSession.HistoryDelegate.html
706[65.18]: {{javadoc_uri}}/GeckoSession.ContentDelegate.html#onFirstComposite-org.mozilla.geckoview.GeckoSession-
707[65.19]: {{javadoc_uri}}/GeckoSession.NavigationDelegate.LoadRequest.html#isRedirect
708[65.20]: {{javadoc_uri}}/GeckoSession.html#LOAD_FLAGS_BYPASS_CLASSIFIER
709[65.21]: {{javadoc_uri}}/GeckoSession.ContentDelegate.ContextElement.html
710[65.22]: {{javadoc_uri}}/GeckoSession.ContentDelegate.html#onContextMenu-org.mozilla.geckoview.GeckoSession-int-int-org.mozilla.geckoview.GeckoSession.ContentDelegate.ContextElement-
711[65.23]: {{javadoc_uri}}/GeckoSession.FinderResult.html
712[65.24]: {{javadoc_uri}}/CrashReporter.html#sendCrashReport-android.content.Context-android.os.Bundle-java.lang.String-
713[65.25]: {{javadoc_uri}}/GeckoResult.html
714
715[api-version]: f334c3c72b512156da2d96b2d2e7bbf4392c0b0e
716