aboutsummaryrefslogtreecommitdiffstats
path: root/packages/preload
diff options
context:
space:
mode:
Diffstat (limited to 'packages/preload')
-rw-r--r--packages/preload/src/contextBridge/__tests__/createSophieRenderer.spec.ts27
-rw-r--r--packages/preload/src/contextBridge/createSophieRenderer.ts15
2 files changed, 6 insertions, 36 deletions
diff --git a/packages/preload/src/contextBridge/__tests__/createSophieRenderer.spec.ts b/packages/preload/src/contextBridge/__tests__/createSophieRenderer.spec.ts
index 88b0077..2652c4e 100644
--- a/packages/preload/src/contextBridge/__tests__/createSophieRenderer.spec.ts
+++ b/packages/preload/src/contextBridge/__tests__/createSophieRenderer.spec.ts
@@ -51,10 +51,6 @@ const snapshot: SharedStoreSnapshotIn = {
51 shouldUseDarkColors: true, 51 shouldUseDarkColors: true,
52}; 52};
53 53
54const invalidSnapshot = {
55 shouldUseDarkColors: -1,
56} as unknown as SharedStoreSnapshotIn;
57
58const patch: IJsonPatch = { 54const patch: IJsonPatch = {
59 op: 'replace', 55 op: 'replace',
60 path: 'foo', 56 path: 'foo',
@@ -121,14 +117,6 @@ describe('SharedStoreConnector', () => {
121 ).rejects.not.toHaveProperty('message', expect.stringMatching(/s3cr3t/)); 117 ).rejects.not.toHaveProperty('message', expect.stringMatching(/s3cr3t/));
122 expect(listener.onSnapshot).not.toHaveBeenCalled(); 118 expect(listener.onSnapshot).not.toHaveBeenCalled();
123 }); 119 });
124
125 it('should not pass on invalid snapshots', async () => {
126 mocked(ipcRenderer.invoke).mockResolvedValueOnce(invalidSnapshot);
127 await expect(sut.onSharedStoreChange(listener)).rejects.toBeInstanceOf(
128 Error,
129 );
130 expect(listener.onSnapshot).not.toHaveBeenCalled();
131 });
132 }); 120 });
133 121
134 describe('dispatchAction', () => { 122 describe('dispatchAction', () => {
@@ -220,21 +208,6 @@ describe('SharedStoreConnector', () => {
220 itDoesNotPassPatchesToTheListener(); 208 itDoesNotPassPatchesToTheListener();
221 }); 209 });
222 210
223 describe('when a listener failed to register due to an invalid snapshot', () => {
224 beforeEach(async () => {
225 mocked(ipcRenderer.invoke).mockResolvedValueOnce(invalidSnapshot);
226 try {
227 await sut.onSharedStoreChange(listener);
228 } catch {
229 // Ignore error.
230 }
231 });
232
233 itRefusesToRegisterAnotherListener();
234
235 itDoesNotPassPatchesToTheListener();
236 });
237
238 describe('when a listener failed to register due to listener error', () => { 211 describe('when a listener failed to register due to listener error', () => {
239 beforeEach(async () => { 212 beforeEach(async () => {
240 mocked(ipcRenderer.invoke).mockResolvedValueOnce(snapshot); 213 mocked(ipcRenderer.invoke).mockResolvedValueOnce(snapshot);
diff --git a/packages/preload/src/contextBridge/createSophieRenderer.ts b/packages/preload/src/contextBridge/createSophieRenderer.ts
index 3174fed..41accfd 100644
--- a/packages/preload/src/contextBridge/createSophieRenderer.ts
+++ b/packages/preload/src/contextBridge/createSophieRenderer.ts
@@ -23,8 +23,8 @@ import {
23 action, 23 action,
24 MainToRendererIpcMessage, 24 MainToRendererIpcMessage,
25 RendererToMainIpcMessage, 25 RendererToMainIpcMessage,
26 sharedStore,
27 SharedStoreListener, 26 SharedStoreListener,
27 SharedStoreSnapshotIn,
28 SophieRenderer, 28 SophieRenderer,
29} from '@sophie/shared'; 29} from '@sophie/shared';
30import { ipcRenderer } from 'electron'; 30import { ipcRenderer } from 'electron';
@@ -66,15 +66,12 @@ class SharedStoreConnector {
66 } catch (error) { 66 } catch (error) {
67 log.error('Failed to get initial shared store snapshot', error); 67 log.error('Failed to get initial shared store snapshot', error);
68 } 68 }
69 if (success) { 69 if (!success) {
70 if (sharedStore.is(snapshot)) { 70 throw new Error('Failed to connect to shared store');
71 listener.onSnapshot(snapshot);
72 this.listener = listener;
73 return;
74 }
75 log.error('Got invalid initial shared store snapshot', snapshot);
76 } 71 }
77 throw new Error('Failed to connect to shared store'); 72 // `mobx-state-tree` will validate the snapshot, so we can safely cast here.
73 listener.onSnapshot(snapshot as SharedStoreSnapshotIn);
74 this.listener = listener;
78 } 75 }
79} 76}
80 77