| <!DOCTYPE html> |
| <html> |
| <body> |
| <script> |
| function detachMidFrame() { |
| const mid = parent.parent.document.getElementById('mid'); |
| if (mid) { |
| mid.remove(); |
| } |
| } |
| |
| document.modelContext.registerTool({ |
| name: 'detach_on_execute', |
| description: 'synchronously detaches frame during execute()', |
| inputSchema: { type: 'object', properties: {} }, |
| execute: () => { |
| detachMidFrame(); |
| return new Promise(() => {}); |
| }, |
| }); |
| |
| document.modelContext.registerTool({ |
| name: 'hang', |
| description: 'never resolves; detaches frame on abort/toolcancel', |
| inputSchema: { type: 'object', properties: {} }, |
| execute: (input, options) => { |
| if (options && options.signal) { |
| options.signal.addEventListener('abort', detachMidFrame); |
| } |
| window.domAutomationController.send('hang_started'); |
| return new Promise(() => {}); |
| }, |
| }); |
| |
| window.addEventListener('toolcancel', detachMidFrame); |
| </script> |
| </body> |
| </html> |