| <!doctype html> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <script src="/common/utils.js"></script> | |
| <script src="/common/get-host-info.sub.js"></script> | |
| <script src="/shared-storage-selecturl-limit/resources/utils.js"></script> | |
| <script src="/shared-storage/resources/util.js"></script> | |
| <script src="/fenced-frame/resources/utils.js"></script> | |
| <body> | |
| <script> | |
| 'use strict'; | |
| // Note that we have set the site page bit limit to 6 and the overall page | |
| // bit limit to 12. | |
| promise_test(async () => { | |
| const queryKey = "query"; | |
| const mockResultKey = "mockresult"; | |
| const urlCountKey = "urlcount"; | |
| const moduleNameKey = "module"; | |
| const expectSavedKey = "expectsaved"; | |
| const expectSuccessKey = "expectsuccess"; | |
| let url0 = new URL( | |
| "/shared-storage/" + | |
| "resources/select-url-saved-query-inner.https.sub.html", | |
| location.href); | |
| // We don't expect success because the operation definition has an | |
| // intentional error and will reject. Hence the default index (0) will be | |
| // returned and will also be stored for later use. | |
| url0.searchParams.append(queryKey, "query"); | |
| url0.searchParams.append(mockResultKey, "2"); | |
| url0.searchParams.append(moduleNameKey, "erroneous-function-module"); | |
| url0.searchParams.append(urlCountKey, "4"); | |
| url0.searchParams.append(expectSavedKey, "false"); | |
| url0.searchParams.append(expectSuccessKey, "false"); | |
| await attachIFrameWithEventListenerForSelectURLStatus(url0); | |
| // Re-using the query will retrieve the default index. | |
| let url1 = url0; | |
| url1.searchParams.delete(expectSavedKey); | |
| url1.searchParams.append(expectSavedKey, "true"); | |
| await attachIFrameWithEventListenerForSelectURLStatus(url1); | |
| // Verify that worklet was run exactly once. | |
| const ancestorKey = token(); | |
| const urls = generateUrls(2, "/shared-storage/resources/frame", | |
| [ancestorKey]); | |
| const worklet = await sharedStorage.createWorklet( | |
| '/shared-storage/resources/erroneous-function-module.js'); | |
| let config = await worklet.selectURL('verify-run-attempts', urls, | |
| {resolveToConfig: true}); | |
| assert_true(config instanceof FencedFrameConfig); | |
| attachFencedFrame(config, 'opaque-ads'); | |
| const result = await nextValueFromServer(ancestorKey); | |
| assert_equals(result, 'frame1_loaded', "expected 1 run attempt"); | |
| }, 'for selectURL(), a saved query stores the default index on rejection.'); | |
| </script> | |
| </body> |