cozy-external-bridge 0.16.3 → 0.16.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -28,9 +28,11 @@ var extractUrl = function extractUrl(url) {
28
28
 
29
29
  exports.extractUrl = extractUrl;
30
30
 
31
- var handleParentOriginRequest = function handleParentOriginRequest(event, origin) {
31
+ var handleParentOriginRequest = function handleParentOriginRequest(event, url) {
32
32
  // We do not care about message from other origin that our iframe
33
- if (event.origin !== origin) {
33
+ var urlOrigin = new URL(url).origin;
34
+
35
+ if (event.origin !== urlOrigin) {
34
36
  return;
35
37
  }
36
38
 
@@ -1,4 +1,4 @@
1
- import { extractUrl } from './helpers'
1
+ import { extractUrl, handleParentOriginRequest } from './helpers'
2
2
 
3
3
  describe('extractUrl', () => {
4
4
  it('should extract pathname, hash, and search from a URL starting with http', () => {
@@ -13,3 +13,67 @@ describe('extractUrl', () => {
13
13
  expect(extractUrl(url)).toBe(expected)
14
14
  })
15
15
  })
16
+
17
+ describe('handleParentOriginRequest', () => {
18
+ it('should return undefined when event.origin is different from url origin', () => {
19
+ const mockPostMessage = jest.fn()
20
+ const url = 'http://expected-origin.com'
21
+ const eventOrigin = 'http://different-origin.com'
22
+ const mockEvent = {
23
+ origin: eventOrigin,
24
+ data: 'requestParentOrigin',
25
+ source: {
26
+ postMessage: mockPostMessage
27
+ }
28
+ } as unknown as MessageEvent
29
+
30
+ const result = handleParentOriginRequest(mockEvent, url)
31
+
32
+ expect(result).toBeUndefined()
33
+ expect(mockPostMessage).not.toHaveBeenCalled()
34
+ })
35
+
36
+ it('should successfully execute postMessage when origins match', () => {
37
+ const mockPostMessage = jest.fn()
38
+ const url = 'http://expected-origin.com'
39
+ const eventOrigin = 'http://expected-origin.com'
40
+ const mockEvent = {
41
+ origin: eventOrigin,
42
+ data: 'requestParentOrigin',
43
+ source: {
44
+ postMessage: mockPostMessage
45
+ }
46
+ } as unknown as MessageEvent
47
+
48
+ const result = handleParentOriginRequest(mockEvent, url)
49
+
50
+ expect(result).toBeUndefined()
51
+ expect(mockPostMessage).toHaveBeenCalledWith(
52
+ 'answerParentOrigin',
53
+ eventOrigin
54
+ )
55
+ expect(mockPostMessage).toHaveBeenCalledTimes(1)
56
+ })
57
+
58
+ it('should successfully execute postMessage when origins match even if path is different', () => {
59
+ const mockPostMessage = jest.fn()
60
+ const url = 'http://expected-origin.com/new'
61
+ const eventOrigin = 'http://expected-origin.com'
62
+ const mockEvent = {
63
+ origin: eventOrigin,
64
+ data: 'requestParentOrigin',
65
+ source: {
66
+ postMessage: mockPostMessage
67
+ }
68
+ } as unknown as MessageEvent
69
+
70
+ const result = handleParentOriginRequest(mockEvent, url)
71
+
72
+ expect(result).toBeUndefined()
73
+ expect(mockPostMessage).toHaveBeenCalledWith(
74
+ 'answerParentOrigin',
75
+ eventOrigin
76
+ )
77
+ expect(mockPostMessage).toHaveBeenCalledTimes(1)
78
+ })
79
+ })
@@ -11,14 +11,14 @@ var _useListenBridgeRequests = require("./useListenBridgeRequests");
11
11
 
12
12
  var _useListenParentOriginRequest = require("./useListenParentOriginRequest");
13
13
 
14
- var useExternalBridge = function useExternalBridge(origin) {
15
- var _useBuildUrlToLoad = (0, _useBuildUrlToLoad2.useBuildUrlToLoad)(origin),
14
+ var useExternalBridge = function useExternalBridge(url) {
15
+ var _useBuildUrlToLoad = (0, _useBuildUrlToLoad2.useBuildUrlToLoad)(url),
16
16
  urlToLoad = _useBuildUrlToLoad.urlToLoad;
17
17
 
18
- var _useListenParentOrigi = (0, _useListenParentOriginRequest.useListenParentOriginRequest)(origin),
18
+ var _useListenParentOrigi = (0, _useListenParentOriginRequest.useListenParentOriginRequest)(url),
19
19
  isParentOriginRequestListenerReady = _useListenParentOrigi.isReady;
20
20
 
21
- var _useListenBridgeReque = (0, _useListenBridgeRequests.useListenBridgeRequests)(origin),
21
+ var _useListenBridgeReque = (0, _useListenBridgeRequests.useListenBridgeRequests)(url),
22
22
  isBridgeListenerReady = _useListenBridgeReque.isReady;
23
23
 
24
24
  var isReady = isParentOriginRequestListenerReady && isBridgeListenerReady;
@@ -21,7 +21,7 @@ var log = (0, _cozyMinilog.default)('🌉 [Container bridge]');
21
21
 
22
22
  // When we load the container app, we want to forward
23
23
  // the relevant part of the URL to the iframe
24
- var useBuildUrlToLoad = function useBuildUrlToLoad(origin) {
24
+ var useBuildUrlToLoad = function useBuildUrlToLoad(url) {
25
25
  var location = (0, _reactRouterDom.useLocation)();
26
26
 
27
27
  var _useState = (0, _react.useState)(undefined),
@@ -31,15 +31,15 @@ var useBuildUrlToLoad = function useBuildUrlToLoad(origin) {
31
31
 
32
32
  (0, _react.useEffect)(function () {
33
33
  if (location.pathname.startsWith(_constants.BRIDGE_ROUTE_PREFIX)) {
34
- var destUrl = new URL(origin);
34
+ var destUrl = new URL(url);
35
35
  destUrl.pathname = location.pathname.replace(_constants.BRIDGE_ROUTE_PREFIX, '');
36
36
  destUrl.hash = location.hash;
37
37
  destUrl.search = location.search;
38
38
  log.debug('Setting iframe to', destUrl.toString(), 'after modification');
39
39
  setUrlToLoad(destUrl.toString());
40
40
  } else {
41
- log.debug('Setting iframe to', origin);
42
- setUrlToLoad(origin);
41
+ log.debug('Setting iframe to', url);
42
+ setUrlToLoad(url);
43
43
  }
44
44
  }, []);
45
45
  return {
@@ -20,7 +20,7 @@ var _helpers = require("./helpers");
20
20
  var log = (0, _cozyMinilog.default)('🌉 [Container bridge]');
21
21
 
22
22
  // Allow the iframe to request the origin of the parent window
23
- var useListenParentOriginRequest = function useListenParentOriginRequest(origin) {
23
+ var useListenParentOriginRequest = function useListenParentOriginRequest(url) {
24
24
  var client = (0, _cozyClient.useClient)();
25
25
 
26
26
  var _useState = (0, _react.useState)(false),
@@ -32,7 +32,7 @@ var useListenParentOriginRequest = function useListenParentOriginRequest(origin)
32
32
  if (!client) return;
33
33
 
34
34
  var parentOriginRequestHandler = function parentOriginRequestHandler(event) {
35
- return (0, _helpers.handleParentOriginRequest)(event, origin);
35
+ return (0, _helpers.handleParentOriginRequest)(event, url);
36
36
  };
37
37
 
38
38
  window.addEventListener('message', parentOriginRequestHandler);
@@ -41,7 +41,7 @@ var useListenParentOriginRequest = function useListenParentOriginRequest(origin)
41
41
  return function () {
42
42
  window.removeEventListener('message', parentOriginRequestHandler);
43
43
  };
44
- }, [client, origin]);
44
+ }, [client, url]);
45
45
  return {
46
46
  isReady: isReady
47
47
  };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "cozy-external-bridge",
3
3
  "description": "Library allows communication between a container app and an app embedded in an iframe",
4
- "version": "0.16.3",
4
+ "version": "0.16.4",
5
5
  "author": {
6
6
  "name": "Cozy Cloud",
7
7
  "url": "https://github.com/cozy"
@@ -68,5 +68,5 @@
68
68
  "lint": "cd ../.. && yarn eslint --ext js,jsx,ts packages/cozy-external-bridge"
69
69
  },
70
70
  "types": "dist/index.d.ts",
71
- "gitHead": "c90db9a0e2f1d287a28f1d10328c12603a0f63c0"
71
+ "gitHead": "cc6e194ab03804f97a9c50a39162e99e8924495d"
72
72
  }