tabs.js 838 B

12345678910111213141516171819202122232425262728293031323334
  1. import bridge, { addBackgroundHandlers, addHandlers } from './bridge';
  2. import { sendCmd } from './util';
  3. const tabIds = createNullObj();
  4. const tabKeys = createNullObj();
  5. const realms = createNullObj();
  6. addHandlers({
  7. async TabOpen({ key, data }, realm) {
  8. await bridge[REIFY];
  9. const { id } = await sendCmd('TabOpen', data);
  10. tabIds[key] = id;
  11. tabKeys[id] = key;
  12. realms[id] = realm;
  13. },
  14. async TabClose(key) {
  15. await bridge[REIFY];
  16. const id = tabIds[key];
  17. // !key => close current tab
  18. // id => close tab by id
  19. if (!key || id) sendCmd('TabClose', { id });
  20. },
  21. });
  22. addBackgroundHandlers({
  23. TabClosed(id) {
  24. const key = tabKeys[id];
  25. const realm = realms[id];
  26. delete realms[id];
  27. delete tabKeys[id];
  28. delete tabIds[key];
  29. if (key) bridge.post('TabClosed', key, realm);
  30. },
  31. });