Skip to content

Commit 7d5a29f

Browse files
Populate GMPID header (#2670)
1 parent 22e5af2 commit 7d5a29f

File tree

6 files changed

+67
-8
lines changed

6 files changed

+67
-8
lines changed

packages/storage/CHANGELOG.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,5 @@
1+
#Unreleased
2+
- [Changed] Added an additional header to all network requests that propagates the Firebase App ID.
3+
4+
# 6.1.0
15
- [Feature] Added the support for List API.
2-

packages/storage/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@
1616
"dev": "rollup -c -w",
1717
"test": "run-p test:browser lint",
1818
"test:browser": "karma start --single-run",
19-
"prepare": "yarn build"
19+
"prepare": "yarn build",
20+
"prettier": "prettier --write 'src/**/*.ts' 'test/**/*.ts'"
2021
},
2122
"license": "Apache-2.0",
2223
"dependencies": {

packages/storage/src/implementation/authwrapper.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ export class AuthWrapper {
4444
private app_: FirebaseApp | null;
4545
private authProvider_: Provider<FirebaseAuthInternalName>;
4646
private bucket_: string | null = null;
47+
private appId_: string | null = null;
4748

4849
private storageRefMaker_: (p1: AuthWrapper, p2: Location) => Reference;
4950
private requestMaker_: requestMaker;
@@ -67,6 +68,7 @@ export class AuthWrapper {
6768
const options = this.app_.options;
6869
if (type.isDef(options)) {
6970
this.bucket_ = AuthWrapper.extractBucket_(options);
71+
this.appId_ = options.appId ?? null;
7072
}
7173
}
7274
this.authProvider_ = authProvider;
@@ -138,7 +140,12 @@ export class AuthWrapper {
138140
authToken: string | null
139141
): Request<T> {
140142
if (!this.deleted_) {
141-
const request = this.requestMaker_(requestInfo, authToken, this.pool_);
143+
const request = this.requestMaker_(
144+
requestInfo,
145+
this.appId_,
146+
authToken,
147+
this.pool_
148+
);
142149
this.requestMap_.addRequest(request);
143150
return request;
144151
} else {

packages/storage/src/implementation/request.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,17 +280,25 @@ export function addVersionHeader_(headers: Headers): void {
280280
headers['X-Firebase-Storage-Version'] = 'webjs/' + version;
281281
}
282282

283+
export function addGmpidHeader_(headers: Headers, appId: string | null): void {
284+
if (appId) {
285+
headers['X-Firebase-GMPID'] = appId;
286+
}
287+
}
288+
283289
/**
284290
* @template T
285291
*/
286292
export function makeRequest<T>(
287293
requestInfo: RequestInfo<T>,
294+
appId: string | null,
288295
authToken: string | null,
289296
pool: XhrIoPool
290297
): Request<T> {
291298
const queryPart = UrlUtils.makeQueryString(requestInfo.urlParams);
292299
const url = requestInfo.url + queryPart;
293300
const headers = Object.assign({}, requestInfo.headers);
301+
addGmpidHeader_(headers, appId);
294302
addAuthHeader_(headers, authToken);
295303
addVersionHeader_(headers);
296304
return new NetworkRequest<T>(

packages/storage/src/implementation/requestmaker.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import { XhrIoPool } from './xhriopool';
2020

2121
type requestMaker = <T>(
2222
requestInfo: RequestInfo<T>,
23+
appId: string | null,
2324
authToken: string | null,
2425
pool: XhrIoPool
2526
) => Request<T>;

packages/storage/test/request.test.ts

Lines changed: 44 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ describe('Firebase Storage > Request', () => {
5858
requestInfo.headers[requestHeader] = requestValue;
5959
requestInfo.successCodes = [200, 234];
6060

61-
return makeRequest(requestInfo, null, makePool(spiedSend))
61+
return makeRequest(requestInfo, null, null, makePool(spiedSend))
6262
.getPromise()
6363
.then(
6464
result => {
@@ -100,7 +100,7 @@ describe('Firebase Storage > Request', () => {
100100
requestInfo.urlParams[p1] = v1;
101101
requestInfo.urlParams[p2] = v2;
102102
requestInfo.body = 'thisistherequestbody';
103-
return makeRequest(requestInfo, null, makePool(spiedSend))
103+
return makeRequest(requestInfo, null, null, makePool(spiedSend))
104104
.getPromise()
105105
.then(
106106
() => {
@@ -143,7 +143,7 @@ describe('Firebase Storage > Request', () => {
143143
timeout
144144
);
145145

146-
return makeRequest(requestInfo, null, makePool(newSend))
146+
return makeRequest(requestInfo, null, null, makePool(newSend))
147147
.getPromise()
148148
.then(
149149
() => {
@@ -165,7 +165,7 @@ describe('Firebase Storage > Request', () => {
165165
handler,
166166
timeout
167167
);
168-
const request = makeRequest(requestInfo, null, makePool(null));
168+
const request = makeRequest(requestInfo, null, null, makePool(null));
169169
const promise = request.getPromise().then(
170170
() => {
171171
assert.fail('Succeeded when handler gave error');
@@ -192,7 +192,12 @@ describe('Firebase Storage > Request', () => {
192192
handler,
193193
timeout
194194
);
195-
const request = makeRequest(requestInfo, authToken, makePool(spiedSend));
195+
const request = makeRequest(
196+
requestInfo,
197+
/* appId= */ null,
198+
authToken,
199+
makePool(spiedSend)
200+
);
196201
return request.getPromise().then(
197202
() => {
198203
assert.isTrue(spiedSend.calledOnce);
@@ -208,4 +213,38 @@ describe('Firebase Storage > Request', () => {
208213
}
209214
);
210215
});
216+
217+
it('Sends APP ID along properly', () => {
218+
const appId = 'myFirebaseApp';
219+
220+
function newSend(xhrio: TestingXhrIo): void {
221+
xhrio.simulateResponse(200, '', {});
222+
}
223+
const spiedSend = sinon.spy(newSend);
224+
225+
function handler(): boolean {
226+
return true;
227+
}
228+
const requestInfo = new RequestInfo(
229+
'http://my-url.com/',
230+
'GET',
231+
handler,
232+
timeout
233+
);
234+
const request = makeRequest(requestInfo, appId, null, makePool(spiedSend));
235+
return request.getPromise().then(
236+
() => {
237+
assert.isTrue(spiedSend.calledOnce);
238+
const args: unknown[] = spiedSend.getCall(0).args;
239+
const expectedHeaders: { [key: string]: string } = {
240+
'X-Firebase-GMPID': appId
241+
};
242+
expectedHeaders[versionHeaderName] = versionHeaderValue;
243+
assert.deepEqual(args[4], expectedHeaders);
244+
},
245+
() => {
246+
assert.fail('Request failed unexpectedly');
247+
}
248+
);
249+
});
211250
});

0 commit comments

Comments
 (0)