1# AutoFillRequest (System API)
2
3AutoFillRequest provides page data and callbacks when a callback is triggered for the AutoFillExtensionAbility.
4
5> **NOTE**
6>
7> The initial APIs of this module are supported since API version 11. Newly added APIs will be marked with a superscript to indicate their earliest API version.
8> The APIs provided by this module are system APIs.
9> The APIs of this module can be used only in the stage model.
10
11## Modules to Import
12
13```ts
14import { autoFillManager } from '@kit.AbilityKit';
15```
16
17## FillRequest
18
19Defines the information about an auto-fill request.
20
21**System capability**: SystemCapability.Ability.AbilityRuntime.AbilityCore
22
23| Name       | Type                | Mandatory| Description                                                        |
24| ----------- | -------------------- | ---- | ------------------------------------------------------------ |
25| type        | [AutoFillType](js-apis-inner-application-autoFillType-sys.md)       | Yes  | Type of the element to be automatically filled in.         |
26| viewData    | [ViewData](js-apis-inner-application-viewData-sys.md)               | Yes  | Page data.             |
27| customData<sup>12+</sup>    | [CustomData](js-apis-inner-application-customData-sys.md)               | Yes  | Custom data.            |
28| isPopup<sup>12+</sup>    | boolean               | Yes  | Whether a dialog box is displayed for the auto-fill request.<br>**true**: A dialog box is displayed<br>**false**: A modal window is displayed             |
29
30## SaveRequest
31
32Defines the information about an auto-saving request.
33
34**System capability**: SystemCapability.Ability.AbilityRuntime.AbilityCore
35
36| Name       | Type                | Mandatory| Description                                                        |
37| ----------- | -------------------- | ---- | ------------------------------------------------------------ |
38| viewData    | [ViewData](js-apis-inner-application-viewData-sys.md)               | Yes  | Page data.             |
39
40## UpdateRequest<sup>12+</sup>
41
42Defines the information about an auto-update request.
43
44**System capability**: SystemCapability.Ability.AbilityRuntime.AbilityCore
45
46| Name       | Type                | Mandatory| Description                                                        |
47| ----------- | -------------------- | ---- | ------------------------------------------------------------ |
48| viewData    | [ViewData](js-apis-inner-application-viewData-sys.md)               | Yes  | Page data.             |
49
50## FillResponse
51
52Defines the information about the response to an auto-fill request.
53
54**System capability**: SystemCapability.Ability.AbilityRuntime.AbilityCore
55
56| Name       | Type                | Mandatory| Description                                                        |
57| ----------- | -------------------- | ---- | ------------------------------------------------------------ |
58| viewData    | [ViewData](js-apis-inner-application-viewData-sys.md)               | Yes  | Page data.             |
59
60## FillRequestCallback
61
62Implements callbacks for an auto-fill request, which is used to automatically fill in or generate a password. The callbacks can be used to notify the client of the success or failure of the request.
63
64### FillRequestCallback.onSuccess
65
66onSuccess(response: FillResponse): void
67
68Called when an auto-fill request is successfully processed.
69
70**System capability**: SystemCapability.Ability.AbilityRuntime.AbilityCore
71
72**Parameters**
73
74| Name| Type| Mandatory| Description|
75| -------- | -------- | -------- | ------------------------------ |
76| response | [FillResponse](../apis/#fillresponse)  | Yes| Information about the response to the auto-fill response.|
77
78**Error codes**
79
80For details about the error codes, see [Universal Error Codes](../errorcode-universal.md) and [Ability Error Codes](errorcode-ability.md).
81
82| ID| Error Message|
83| ------- | -------------------------------- |
84| 202  | Permission denied, non-system app called system api. |
85| 401  | Mandatory parameters are left unspecified. |
86| 16000050 | Internal error. |
87
88**Example**
89
90```ts
91// MyAutoFillExtensionAbility.ts
92import { AutoFillExtensionAbility, UIExtensionContentSession, autoFillManager } from '@kit.AbilityKit';
93import { hilog } from '@kit.PerformanceAnalysisKit';
94
95class MyAutoFillExtensionAbility extends AutoFillExtensionAbility {
96  onFillRequest(session: UIExtensionContentSession,
97                request: autoFillManager.FillRequest,
98                callback: autoFillManager.FillRequestCallback) {
99    hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onFillRequest');
100    try {
101      let storageData: Record<string, string | autoFillManager.FillRequestCallback | autoFillManager.ViewData> = {
102        'fillCallback': callback,
103        'message': 'AutoFill Page',
104        'viewData': request.viewData,
105      }
106      let storage_fill = new LocalStorage(storageData);
107      if (session) {
108        session.loadContent('pages/AutoFillPage', storage_fill);
109      } else {
110        hilog.error(0x0000, 'testTag', '%{public}s', 'session is null');
111      }
112    } catch (err) {
113      hilog.error(0x0000, 'testTag', '%{public}s', 'failed to load content');
114    }
115  }
116}
117```
118
119```ts
120// AutoFillPage.ets
121import { autoFillManager } from '@kit.AbilityKit';
122import { BusinessError } from '@kit.BasicServicesKit';
123import { hilog } from '@kit.PerformanceAnalysisKit';
124
125let storage: LocalStorage = LocalStorage.getShared();
126let fillCallback: autoFillManager.FillRequestCallback | undefined =
127  storage.get<autoFillManager.FillRequestCallback>('fillCallback');
128let viewData: autoFillManager.ViewData | undefined = storage.get<autoFillManager.ViewData>('viewData');
129
130@Entry
131@Component
132struct AutoFillPage {
133  build() {
134    Row() {
135      Column() {
136        Text('AutoFill Page')
137          .fontSize(50)
138          .fontWeight(FontWeight.Bold)
139      }
140
141      Button('onSuccess')
142        .onClick(() => {
143          if (viewData) {
144            viewData.pageNodeInfos[0].value = 'user1';
145            viewData.pageNodeInfos[1].value = 'user1 password';
146            viewData.pageNodeInfos[2].value = 'user1 generate new password';
147            hilog.info(0x0000, 'testTag', 'autofill success with viewData: %{public}s', JSON.stringify(viewData));
148            try {
149              fillCallback?.onSuccess({ viewData: viewData });
150            } catch (error) {
151              console.error(`catch error, code: ${(error as BusinessError).code},
152                  message: ${(error as BusinessError).message}`);
153            }
154          }
155        })
156        .width('100%')
157    }
158    .height('100%')
159  }
160}
161```
162
163### FillRequestCallback.onFailure
164
165onFailure(): void
166
167Called when an auto-fill request fails to be processed.
168
169**System capability**: SystemCapability.Ability.AbilityRuntime.AbilityCore
170
171**Error codes**
172
173For details about the error codes, see [Universal Error Codes](../errorcode-universal.md) and [Ability Error Codes](errorcode-ability.md).
174
175| ID| Error Message|
176| ------- | -------------------------------- |
177| 202 | Permission denied, non-system app called system api. |
178| 16000050 | Internal error. |
179
180**Example**
181
182```ts
183// MyAutoFillExtensionAbility.ts
184import { AutoFillExtensionAbility, UIExtensionContentSession, autoFillManager } from '@kit.AbilityKit';
185import { hilog } from '@kit.PerformanceAnalysisKit';
186
187class MyAutoFillExtensionAbility extends AutoFillExtensionAbility {
188  onFillRequest(session: UIExtensionContentSession,
189                request: autoFillManager.FillRequest,
190                callback: autoFillManager.FillRequestCallback) {
191    hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onFillRequest');
192    try {
193      let storageData: Record<string, string | autoFillManager.FillRequestCallback | autoFillManager.ViewData> = {
194        'fillCallback': callback,
195        'message': 'AutoFill Page',
196        'viewData': request.viewData,
197      }
198      let storage_fill = new LocalStorage(storageData);
199      if (session) {
200        session.loadContent('pages/AutoFill Page', storage_fill);
201      } else {
202        hilog.error(0x0000, 'testTag', '%{public}s', 'session is null');
203      }
204    } catch (err) {
205      hilog.error(0x0000, 'testTag', '%{public}s', 'failed to load content');
206    }
207  }
208}
209```
210
211```ts
212// AutoFillPage.ets
213import { autoFillManager } from '@kit.AbilityKit';
214import { BusinessError } from '@kit.BasicServicesKit';
215import { hilog } from '@kit.PerformanceAnalysisKit';
216
217let storage: LocalStorage = LocalStorage.getShared();
218let fillCallback: autoFillManager.FillRequestCallback | undefined =
219  storage.get<autoFillManager.FillRequestCallback>('fillCallback');
220
221@Entry
222@Component
223struct AutoFillPage {
224  build() {
225    Row() {
226      Column() {
227        Text('AutoFill Page')
228          .fontSize(50)
229          .fontWeight(FontWeight.Bold)
230      }
231
232      Button('onFailure')
233        .onClick(() => {
234          hilog.info(0x0000, 'testTag', 'autofill failure');
235          try {
236            fillCallback?.onFailure();
237          } catch (error) {
238            console.error(`catch error, code: ${(error as BusinessError).code},
239              message: ${(error as BusinessError).message}`);
240          }
241        })
242        .width('100%')
243    }
244    .height('100%')
245  }
246}
247```
248
249### FillRequestCallback.onCancel<sup>12+</sup>
250
251onCancel(fillContent?: string): void
252
253Called when an auto-fill request is canceled.
254
255**System capability**: SystemCapability.Ability.AbilityRuntime.AbilityCore
256
257**Parameters**
258
259| Name                   | Type  | Mandatory| Description                |
260| ------------------------- | ------ | ---- | -------------------- |
261| fillContent | string | No  | Content returned to the input method framework when the auto-fill request is canceled.|
262
263**Error codes**
264
265For details about the error codes, see [Universal Error Codes](../errorcode-universal.md) and [Ability Error Codes](errorcode-ability.md).
266
267| ID| Error Message|
268| ------- | -------------------------------- |
269| 202  | Permission denied, non-system app called system api. |
270| 401  | Parameter error. Possible causes: 1. The input parameter is not valid parameter;2. Mandatory parameters are left unspecified. |
271| 16000050 | Internal error. |
272
273**Example**
274
275```ts
276// MyAutoFillExtensionAbility.ts
277import { AutoFillExtensionAbility, UIExtensionContentSession, autoFillManager } from '@kit.AbilityKit';
278import { hilog } from '@kit.PerformanceAnalysisKit';
279
280class MyAutoFillExtensionAbility extends AutoFillExtensionAbility {
281  onFillRequest(session: UIExtensionContentSession,
282                request: autoFillManager.FillRequest,
283                callback: autoFillManager.FillRequestCallback) {
284    hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onFillRequest');
285    try {
286      let storageData: Record<string, string | autoFillManager.FillRequestCallback | autoFillManager.ViewData> = {
287        'fillCallback': callback,
288        'message': 'AutoFill Page',
289        'viewData': request.viewData,
290      }
291      let storage_fill = new LocalStorage(storageData);
292      if (session) {
293        session.loadContent('pages/AutoFillPage', storage_fill);
294      } else {
295        hilog.error(0x0000, 'testTag', '%{public}s', 'session is null');
296      }
297    } catch (err) {
298      hilog.error(0x0000, 'testTag', '%{public}s', 'failed to load content');
299    }
300  }
301}
302```
303
304```ts
305// AutoFillPage.ets
306import { autoFillManager } from '@kit.AbilityKit';
307import { BusinessError } from '@kit.BasicServicesKit';
308import { hilog } from '@kit.PerformanceAnalysisKit';
309
310let storage: LocalStorage = LocalStorage.getShared();
311let fillCallback: autoFillManager.FillRequestCallback | undefined =
312  storage.get<autoFillManager.FillRequestCallback>('fillCallback');
313
314@Entry
315@Component
316struct AutoFillPage {
317  build() {
318    Row() {
319      Column() {
320        Text('Hello World')
321          .fontSize(50)
322          .fontWeight(FontWeight.Bold)
323      }
324
325      Button('onCancel')
326        .onClick(() => {
327          hilog.info(0x0000, 'testTag', 'autofill cancel');
328          try {
329            fillCallback?.onCancel();
330          } catch (error) {
331            console.error(`catch error, code: ${(error as BusinessError).code},
332                message: ${(error as BusinessError).message}`);
333          }
334        })
335        .width('100%')
336    }
337    .height('100%')
338  }
339}
340```
341
342### FillRequestCallback.setAutoFillPopupConfig<sup>12+</sup>
343
344setAutoFillPopupConfig(autoFillPopupConfig: AutoFillPopupConfig ): void
345
346Sets the size and position of an auto-fill pop-up.
347
348**System capability**: SystemCapability.Ability.AbilityRuntime.AbilityCore
349
350**Parameters**
351
352| Name| Type| Mandatory| Description|
353| -------- | -------- | -------- | ------------------------------ |
354| autoFillPopupConfig | [AutoFillPopupConfig](js-apis-inner-application-autoFillPopupConfig-sys.md) | Yes| Size and position of the auto-fill pop-up.|
355
356**Error codes**
357
358For details about the error codes, see [Universal Error Codes](../errorcode-universal.md) and [Ability Error Codes](errorcode-ability.md).
359
360| ID| Error Message|
361| ------- | -------------------------------- |
362| 202  | Permission denied, non-system app called system api. |
363| 401  | Mandatory parameters are left unspecified. |
364| 16000050 | Internal error. |
365
366**Example**
367
368```ts
369// MyAutoFillExtensionAbility.ts
370import { AutoFillExtensionAbility, UIExtensionContentSession, autoFillManager } from '@kit.AbilityKit';
371import { hilog } from '@kit.PerformanceAnalysisKit';
372
373export default class AutoFillAbility extends AutoFillExtensionAbility {
374  onCreate(): void {
375    hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onCreate');
376  }
377
378  onDestroy(): void {
379    hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onDestroy');
380  }
381
382  onSessionDestroy(session: UIExtensionContentSession) {
383    hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onSessionDestroy');
384    hilog.info(0x0000, 'testTag', 'session content: %{public}s', JSON.stringify(session));
385  }
386
387  onForeground(): void {
388    hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onForeground');
389  }
390
391  onBackground(): void {
392    hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onBackground');
393  }
394
395  onUpdateRequest(request: autoFillManager.UpdateRequest): void {
396    hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onUpdateRequest');
397    console.log(`get fill request viewData: ${JSON.stringify(request.viewData)}.`);
398    let storage = LocalStorage.getShared();
399    let fillCallback = storage.get<autoFillManager.FillRequestCallback>('fillCallback');
400
401    if (fillCallback) {
402      try {
403        hilog.info(0x0000, 'testTag', 'pageNodeInfos.value: ' + JSON.stringify(request.viewData.pageNodeInfos[0].value));
404        fillCallback.setAutoFillPopupConfig({
405          popupSize: {
406            width: 400 + request.viewData.pageNodeInfos[0].value.length * 10,
407            height: 200 + request.viewData.pageNodeInfos[0].value.length * 10
408          },
409          placement: autoFillManager.PopupPlacement.TOP
410        });
411      } catch (err) {
412        hilog.info(0x0000, 'testTag', 'autoFillPopupConfig err: ' + err.code);
413      }
414    }
415  }
416
417  onFillRequest(session: UIExtensionContentSession, request: autoFillManager.FillRequest, callback: autoFillManager.FillRequestCallback) {
418    hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onFillRequest');
419    hilog.info(0x0000, 'testTag', 'Fill RequestCallback: %{public}s ', JSON.stringify(callback));
420    console.log(`testTag. Get fill request viewData: ${JSON.stringify(request.viewData)}.`);
421    console.log(`testTag. Get fill request type: ${JSON.stringify(request.type)}.`);
422
423    try {
424      let localStorageData: Record<string, string | autoFillManager.FillRequestCallback | autoFillManager.ViewData | autoFillManager.AutoFillType> = {
425        'message': 'AutoFill Page',
426        'fillCallback': callback,
427        'viewData': request.viewData,
428        'autoFillType': request.type
429      }
430      let storage_fill = new LocalStorage(localStorageData);
431      console.info(`testTag. Session: ${JSON.stringify(session)}.`);
432      let size: autoFillManager.PopupSize = {
433        width: 400,
434        height: 200
435      };
436      callback.setAutoFillPopupConfig({
437        popupSize: size
438      });
439      session.loadContent('pages/SelectorList', storage_fill);
440    } catch (err) {
441      hilog.error(0x0000, 'testTag', '%{public}s', 'autofill failed to load content: ' + JSON.stringify(err));
442    }
443  }
444
445  onSaveRequest(session: UIExtensionContentSession, request: autoFillManager.SaveRequest, callback: autoFillManager.SaveRequestCallback) {
446    hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onSaveRequest');
447    try {
448      let localStorageData: Record<string, string | autoFillManager.SaveRequestCallback> = {
449        'message': 'AutoFill Page',
450        'saveCallback': callback
451      };
452      let storage_save = new LocalStorage(localStorageData);
453      if (session) {
454        session.loadContent('pages/SavePage', storage_save);
455      } else {
456        hilog.error(0x0000, 'testTag', '%{public}s', 'session is null');
457      }
458    } catch (err) {
459      hilog.error(0x0000, 'testTag', '%{public}s', 'failed to load content');
460    }
461  }
462}
463```
464
465## SaveRequestCallback
466
467Implements callbacks for an automatic or a manual saving request.
468
469### SaveRequestCallback.onSuccess
470
471onSuccess(): void
472
473Called when a saving request is successfully processed.
474
475**System capability**: SystemCapability.Ability.AbilityRuntime.AbilityCore
476
477**Error codes**
478
479For details about the error codes, see [Universal Error Codes](../errorcode-universal.md) and [Ability Error Codes](errorcode-ability.md).
480
481| ID| Error Message|
482| ------- | -------------------------------- |
483| 202 | Permission denied, non-system app called system api. |
484| 16000050 | Internal error. |
485
486**Example**
487
488```ts
489// MyAutoFillExtensionAbility.ts
490import { AutoFillExtensionAbility, UIExtensionContentSession, autoFillManager } from '@kit.AbilityKit';
491import { hilog } from '@kit.PerformanceAnalysisKit';
492class MyAutoFillExtensionAbility extends AutoFillExtensionAbility {
493  onSaveRequest(session: UIExtensionContentSession,
494                request: autoFillManager.SaveRequest,
495                callback: autoFillManager.SaveRequestCallback) {
496    hilog.info(0x0000, 'testTag', '%{public}s', 'onSaveRequest');
497    try {
498      let storageData: Record<string, string | autoFillManager.SaveRequestCallback | autoFillManager.ViewData> = {
499        'message': 'AutoFill Page',
500        'saveCallback': callback,
501        'viewData': request.viewData
502      };
503      let storage_save = new LocalStorage(storageData);
504      if (session) {
505        session.loadContent('pages/SavePage', storage_save);
506      } else {
507        hilog.error(0x0000, 'testTag', '%{public}s', 'session is null');
508      }
509    } catch (err) {
510      hilog.error(0x0000, 'testTag', '%{public}s', 'failed to load content');
511    }
512  }
513}
514```
515
516```ts
517// SavePage.ets
518import { autoFillManager } from '@kit.AbilityKit';
519import { BusinessError } from '@kit.BasicServicesKit';
520import { hilog } from '@kit.PerformanceAnalysisKit';
521
522let storage: LocalStorage = LocalStorage.getShared();
523let saveCallback: autoFillManager.SaveRequestCallback | undefined =
524  storage.get<autoFillManager.SaveRequestCallback>('saveCallback');
525
526@Entry
527@Component
528struct SavePage {
529  build() {
530    Row() {
531      Column() {
532        Text('SavePage')
533          .fontSize(50)
534          .fontWeight(FontWeight.Bold)
535      }
536
537      Button('onSuccess')
538        .onClick(() => {
539          hilog.info(0x0000, 'testTag', 'autosave success');
540          try {
541            saveCallback?.onSuccess();
542          } catch (error) {
543            console.error(`catch error, code: ${(error as BusinessError).code},
544                message: ${(error as BusinessError).message}`);
545          }
546        })
547        .width('100%')
548    }
549    .height('100%')
550  }
551}
552```
553
554### SaveRequestCallback.onFailure
555
556onFailure(): void
557
558Called when a saving request fails to be processed.
559
560**System capability**: SystemCapability.Ability.AbilityRuntime.AbilityCore
561
562**Error codes**
563
564For details about the error codes, see [Universal Error Codes](../errorcode-universal.md) and [Ability Error Codes](errorcode-ability.md).
565
566| ID| Error Message|
567| ------- | -------------------------------- |
568| 202 | Permission denied, non-system app called system api. |
569| 16000050 | Internal error. |
570
571**Example**
572
573```ts
574// MyAutoFillExtensionAbility.ts
575import { AutoFillExtensionAbility, UIExtensionContentSession, autoFillManager } from '@kit.AbilityKit';
576import { hilog } from '@kit.PerformanceAnalysisKit';
577
578class MyAutoFillExtensionAbility extends AutoFillExtensionAbility {
579  onSaveRequest(session: UIExtensionContentSession,
580                request: autoFillManager.SaveRequest,
581                callback: autoFillManager.SaveRequestCallback) {
582    hilog.info(0x0000, 'testTag', '%{public}s', 'onSaveRequest');
583    try {
584      let storageData: Record<string, string | autoFillManager.SaveRequestCallback | autoFillManager.ViewData> = {
585        'message': 'AutoFill Page',
586        'saveCallback': callback,
587        'viewData': request.viewData
588      }
589      let storage_save = new LocalStorage(storageData);
590      if (session) {
591        session.loadContent('pages/SavePage', storage_save);
592      } else {
593        hilog.error(0x0000, 'testTag', '%{public}s', 'session is null');
594      }
595    } catch (err) {
596      hilog.error(0x0000, 'testTag', '%{public}s', 'failed to load content');
597    }
598  }
599}
600```
601
602```ts
603// SavePage.ets
604import { autoFillManager } from '@kit.AbilityKit';
605import { BusinessError } from '@kit.BasicServicesKit';
606import { hilog } from '@kit.PerformanceAnalysisKit';
607
608let storage: LocalStorage = LocalStorage.getShared();
609let saveCallback: autoFillManager.SaveRequestCallback | undefined =
610  storage.get<autoFillManager.SaveRequestCallback>('saveCallback');
611
612@Entry
613@Component
614struct SavePage {
615  build() {
616    Row() {
617      Column() {
618        Text('Save Page')
619          .fontSize(50)
620          .fontWeight(FontWeight.Bold)
621      }
622
623      Button('onFailure')
624        .onClick(() => {
625          hilog.info(0x0000, 'testTag', 'autofill failure');
626          try {
627            saveCallback?.onFailure();
628          } catch (error) {
629            console.error(`catch error, code: ${(error as BusinessError).code},
630              message: ${(error as BusinessError).message}`);
631          }
632        })
633        .width('100%')
634    }
635    .height('100%')
636  }
637}
638```
639