Skip to content

Commit e012877

Browse files
committed
took validateIndexedDBOpenable outside of isRequiredApisAvailable
1 parent faa05bd commit e012877

File tree

6 files changed

+44
-105
lines changed

6 files changed

+44
-105
lines changed

packages/performance/src/controllers/perf.test.ts

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ import { Trace } from '../resources/trace';
2222
import { Api, setupApi } from '../services/api_service';
2323
import { FirebaseApp } from '@firebase/app-types';
2424
import * as initializationService from '../services/initialization_service';
25+
import * as FirebaseUtil from '@firebase/util';
26+
import { consoleLogger } from '../utils/console_logger';
2527
import '../../test/setup';
2628

2729
describe('Firebase Performance Test', () => {
@@ -43,13 +45,30 @@ describe('Firebase Performance Test', () => {
4345

4446
describe('#constructor', () => {
4547
it('does not initialize performance if the required apis are not available', () => {
46-
stub(Api.prototype, 'requiredApisAvailable').returns(
48+
stub(Api.prototype, 'requiredApisAvailable').returns(false);
49+
stub(initializationService, 'getInitializationPromise');
50+
new PerformanceController(fakeFirebaseApp);
51+
expect(initializationService.getInitializationPromise).not.be.called;
52+
});
53+
it('does not initialize performance if validateIndexedDBOpenable return false', () => {
54+
stub(Api.prototype, 'requiredApisAvailable').returns(true);
55+
stub(FirebaseUtil, 'validateIndexedDBOpenable').returns(
4756
Promise.resolve(false)
4857
);
4958
stub(initializationService, 'getInitializationPromise');
5059
new PerformanceController(fakeFirebaseApp);
5160
expect(initializationService.getInitializationPromise).not.be.called;
5261
});
62+
63+
it('does not initialize performance if validateIndexedDBOpenable throws an error', () => {
64+
stub(Api.prototype, 'requiredApisAvailable').returns(true);
65+
stub(FirebaseUtil, 'validateIndexedDBOpenable').throws();
66+
stub(initializationService, 'getInitializationPromise');
67+
stub(consoleLogger, 'info');
68+
new PerformanceController(fakeFirebaseApp);
69+
expect(initializationService.getInitializationPromise).not.be.called;
70+
expect(consoleLogger.info).to.be.called;
71+
});
5372
});
5473

5574
describe('#trace', () => {

packages/performance/src/controllers/perf.ts

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,26 @@ import { Api } from '../services/api_service';
2222
import { FirebaseApp } from '@firebase/app-types';
2323
import { FirebasePerformance } from '@firebase/performance-types';
2424
import { setupTransportService } from '../services/transport_service';
25+
import { validateIndexedDBOpenable } from '@firebase/util';
26+
import { consoleLogger } from '../utils/console_logger';
2527
export class PerformanceController implements FirebasePerformance {
2628
constructor(readonly app: FirebaseApp) {
2729
// eslint-disable-next-line @typescript-eslint/no-floating-promises
28-
Api.getInstance()
29-
.requiredApisAvailable()
30-
.then(isAvailable => {
31-
if (isAvailable) {
32-
setupTransportService();
33-
getInitializationPromise().then(setupOobResources, setupOobResources);
34-
}
35-
});
30+
if (Api.getInstance().requiredApisAvailable()) {
31+
validateIndexedDBOpenable()
32+
.then(isAvailable => {
33+
if (isAvailable) {
34+
setupTransportService();
35+
getInitializationPromise().then(
36+
setupOobResources,
37+
setupOobResources
38+
);
39+
}
40+
})
41+
.catch(error => {
42+
consoleLogger.info(`Environment doesn't support IndexedDB: ${error}`);
43+
});
44+
}
3645
}
3746

3847
trace(name: string): Trace {

packages/performance/src/services/api_service.test.ts

Lines changed: 0 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,6 @@ import { stub } from 'sinon';
1919
import { expect } from 'chai';
2020
import { Api, setupApi } from './api_service';
2121
import '../../test/setup';
22-
import * as FirebaseUtil from '@firebase/util';
23-
import { consoleLogger } from '../utils/console_logger';
24-
2522
describe('Firebase Performance > api_service', () => {
2623
const PAGE_URL = 'http://www.test.com/abcd?a=2';
2724
const PERFORMANCE_ENTRY: PerformanceEntry = {
@@ -53,74 +50,6 @@ describe('Firebase Performance > api_service', () => {
5350
setupApi(mockWindow);
5451
api = Api.getInstance();
5552
});
56-
describe('requiredApisAvailable', () => {
57-
it('call logger when fetch is not available', () => {
58-
expect(window.Promise).to.exist;
59-
stub(consoleLogger, 'info');
60-
stub(window, 'fetch').value(null);
61-
return api.requiredApisAvailable().then(isAvailable => {
62-
expect(consoleLogger.info).to.be.called;
63-
expect(isAvailable).to.be.false;
64-
});
65-
});
66-
it('call logger when navigator is not available', () => {
67-
expect(window.Promise).to.exist;
68-
stub(consoleLogger, 'info');
69-
stub(window, 'fetch').returns(Promise.resolve(new Response('{}')));
70-
stub(api, 'navigator').value(null);
71-
return api.requiredApisAvailable().then(isAvailable => {
72-
expect(consoleLogger.info).to.be.called;
73-
expect(isAvailable).to.be.false;
74-
});
75-
});
76-
it('call logger when cookie is not enabled', () => {
77-
expect(window.Promise).to.exist;
78-
stub(consoleLogger, 'info');
79-
stub(window, 'fetch').returns(Promise.resolve(new Response('{}')));
80-
stub(api.navigator, 'cookieEnabled').value(false);
81-
return api.requiredApisAvailable().then(isAvailable => {
82-
expect(consoleLogger.info).to.be.called;
83-
expect(isAvailable).to.be.false;
84-
});
85-
});
86-
87-
it('call logger when isIndexedDBAvailable returns false', () => {
88-
expect(window.Promise).to.exist;
89-
stub(consoleLogger, 'info');
90-
stub(window, 'fetch').returns(Promise.resolve(new Response('{}')));
91-
stub(FirebaseUtil, 'isIndexedDBAvailable').returns(false);
92-
return api.requiredApisAvailable().then(isAvailable => {
93-
expect(consoleLogger.info).to.be.called;
94-
expect(isAvailable).to.be.false;
95-
});
96-
});
97-
98-
it('call logger when validateIndexedDBOpenable throws an exception', () => {
99-
expect(window.Promise).to.exist;
100-
stub(consoleLogger, 'info');
101-
stub(window, 'fetch').returns(Promise.resolve(new Response('{}')));
102-
stub(FirebaseUtil, 'isIndexedDBAvailable').returns(true);
103-
stub(FirebaseUtil, 'validateIndexedDBOpenable').throws();
104-
return api.requiredApisAvailable().then(isAvailable => {
105-
expect(consoleLogger.info).to.be.called;
106-
expect(isAvailable).to.be.false;
107-
});
108-
});
109-
it('logger not called when function returns true', () => {
110-
expect(window.Promise).to.exist;
111-
stub(consoleLogger, 'info');
112-
stub(window, 'fetch').returns(Promise.resolve(new Response('{}')));
113-
stub(FirebaseUtil, 'isIndexedDBAvailable').returns(true);
114-
stub(FirebaseUtil, 'validateIndexedDBOpenable').returns(
115-
Promise.resolve(true)
116-
);
117-
118-
return api.requiredApisAvailable().then(isAvailable => {
119-
expect(consoleLogger.info).to.not.be.called;
120-
expect(isAvailable).to.be.true;
121-
});
122-
});
123-
});
12453

12554
describe('getUrl', () => {
12655
it('removes the query params', () => {

packages/performance/src/services/api_service.ts

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,7 @@
1616
*/
1717

1818
import { ERROR_FACTORY, ErrorCode } from '../utils/errors';
19-
import {
20-
isIndexedDBAvailable,
21-
validateIndexedDBOpenable
22-
} from '@firebase/util';
19+
import { isIndexedDBAvailable } from '@firebase/util';
2320
import { consoleLogger } from '../utils/console_logger';
2421
declare global {
2522
interface Window {
@@ -113,7 +110,7 @@ export class Api {
113110
);
114111
}
115112

116-
async requiredApisAvailable(): Promise<boolean> {
113+
requiredApisAvailable(): boolean {
117114
if (
118115
!fetch ||
119116
!Promise ||
@@ -130,13 +127,7 @@ export class Api {
130127
consoleLogger.info('IndexedDB is not supported by current browswer');
131128
return false;
132129
}
133-
try {
134-
await validateIndexedDBOpenable();
135-
return true;
136-
} catch (error) {
137-
consoleLogger.info(`Environment doesn't support IndexedDB: ${error}`);
138-
return false;
139-
}
130+
return true;
140131
}
141132

142133
setupObserver(

packages/performance/src/services/perf_logger.test.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -113,9 +113,7 @@ describe('Performance Monitoring > perf_logger', () => {
113113
});
114114

115115
it('does not log an event if cookies are disabled in the browser', () => {
116-
stub(Api.prototype, 'requiredApisAvailable').returns(
117-
Promise.resolve(false)
118-
);
116+
stub(Api.prototype, 'requiredApisAvailable').returns(false);
119117
stub(attributeUtils, 'getVisibilityState').returns(VISIBILITY_STATE);
120118
const trace = new Trace(TRACE_NAME);
121119
trace.record(START_TIME, DURATION);

packages/performance/src/services/perf_logger.ts

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -111,16 +111,9 @@ export function logTrace(trace: Trace): void {
111111
return;
112112
}
113113
// Do not log if required apis are not available.
114-
Api.getInstance()
115-
.requiredApisAvailable()
116-
.then(isAvailable => {
117-
if (!isAvailable) {
118-
return;
119-
}
120-
})
121-
.catch(() => {
122-
return;
123-
});
114+
if (!Api.getInstance().requiredApisAvailable()) {
115+
return;
116+
}
124117

125118
// Only log the page load auto traces if page is visible.
126119
if (trace.isAuto && getVisibilityState() !== VisibilityState.VISIBLE) {

0 commit comments

Comments
 (0)