ETagManager.httpResultFromCacheOrBackend: return response headers#2666
Conversation
There was a problem hiding this comment.
This wasn't used.
There was a problem hiding this comment.
This is the core of the change.
Codecov Report
@@ Coverage Diff @@
## main #2666 +/- ##
==========================================
- Coverage 86.47% 86.47% -0.01%
==========================================
Files 208 208
Lines 14783 14781 -2
==========================================
- Hits 12784 12782 -2
Misses 1999 1999
|
c6918d0 to
fdb0889
Compare
There was a problem hiding this comment.
This will use the cached response but with the 304 response headers... I think this could be confusing...
I was thinking, we could maybe add additional properties to HTTPResponse to have the original headers and new headers (only on 304 responses). It would still be a bit confusing, but clearer that there are 2 sets of headers.
Another option would be to rename the property in HTTPResponse to latestHeaders or something and add some documentation... Thoughts?
There was a problem hiding this comment.
This will use the cached response but with the 304 response headers... I think this could be confusing...
I mean this method is httpResultFromCacheOrBackend, it returns the cached value if getting a 304.
Another way to think about it is, this method returns the 304 response + the "missing body".
I'll add a comment mentioning that.
There was a problem hiding this comment.
Yeah I think that helps 👍
When working on #2663, the new `isLoadShedder` was not getting the right value for 304 responses because we were returning `[:]`, since we don't store headers in `ETagManager`.
fdb0889 to
64c5719
Compare
64c5719 to
d6ac1be
Compare
There was a problem hiding this comment.
Yeah I think that helps 👍
**This is an automatic release.** ### Bugfixes * `PurchasesOrchestrator`: update `CustomerInfoManager` cache after processing transactions (#2676) via NachoSoto (@NachoSoto) * `ErrorResponse`: drastically improved error messages, no more "unknown error"s (#2660) via NachoSoto (@NachoSoto) * `PaywallExtensions`: post purchases with `Offering` identifier (#2645) via NachoSoto (@NachoSoto) * Support `product_plan_identifier` for purchased subscriptions from `Google Play` (#2654) via Josh Holtz (@joshdholtz) ### Performance Improvements * `copy(with: VerificationResult)`: optimization to avoid copies (#2639) via NachoSoto (@NachoSoto) ### Other Changes * `ETagManager`: refactored e-tag creation and tests (#2671) via NachoSoto (@NachoSoto) * `getPromotionalOffer`: return `ErrorCode.ineligibleError` if receipt is not found (#2678) via NachoSoto (@NachoSoto) * `TimingUtil`: removed slow purchase logs (#2677) via NachoSoto (@NachoSoto) * `CI`: changed `Codecov` to `informational` (#2670) via NachoSoto (@NachoSoto) * `LoadShedderIntegrationTests`: verify requests are actually handled by load shedder (#2663) via NachoSoto (@NachoSoto) * `ETagManager.httpResultFromCacheOrBackend`: return response headers (#2666) via NachoSoto (@NachoSoto) * `Integration Tests`: added tests to verify 304 behavior (#2659) via NachoSoto (@NachoSoto) * `HTTPClient`: disable `URLSession` cache (#2668) via NachoSoto (@NachoSoto) * Documented `HTTPStatusCode.isSuccessfullySynced` (#2661) via NachoSoto (@NachoSoto) * `NetworkError.signatureVerificationFailed`: added status code to error `userInfo` (#2657) via NachoSoto (@NachoSoto) * `HTTPClient`: improved log for failed requests (#2669) via NachoSoto (@NachoSoto) * `ETagManager`: added new verbose logs (#2656) via NachoSoto (@NachoSoto) * `Signature Verification`: added test-only log for debugging invalid signatures (#2658) via NachoSoto (@NachoSoto) * Fixed `HTTPResponse.description` (#2664) via NachoSoto (@NachoSoto) * Changed `Logger` to use `os_log` (#2608) via NachoSoto (@NachoSoto) * `MainThreadMonitor`: increased threshold (#2662) via NachoSoto (@NachoSoto) * `debugRevenueCatOverlay`: display `receiptURL` (#2652) via NachoSoto (@NachoSoto) * `PurchaseTester`: added ability to display `debugRevenueCatOverlay` (#2653) via NachoSoto (@NachoSoto) * `debugRevenueCatOverlay`: ability to close on `macOS`/`Catalyst` (#2649) via NachoSoto (@NachoSoto) * `debugRevenueCatOverlay`: added support for `macOS` (#2648) via NachoSoto (@NachoSoto) * `LoadShedderIntegrationTests`: enable signature verification (#2655) via NachoSoto (@NachoSoto) * `ImageSnapshot`: fixed Xcode 15 compilation (#2651) via NachoSoto (@NachoSoto) * `OfferingsManager`: don't clear offerings cache timestamp when request fails (#2359) via NachoSoto (@NachoSoto) * `StoreKitObserverModeIntegrationTests`: added test for posting renewals (#2590) via NachoSoto (@NachoSoto) * Always initialize `StoreKit2TransactionListener` even on SK1 mode (#2612) via NachoSoto (@NachoSoto) * `ErrorUtils.missingReceiptFileError`: added receipt URL `userInfo` context (#2650) via NachoSoto (@NachoSoto) * Added `.xcprivacy` for Xcode 15 (#2619) via NachoSoto (@NachoSoto) * `Trusted Entitlements`: added debug log with `ResponseVerificationMode` (#2647) via NachoSoto (@NachoSoto) * `debugRevenueCatOverlay`: simplified title (#2641) via NachoSoto (@NachoSoto) * Simplified `Purchases.updateAllCachesIfNeeded` (#2626) via NachoSoto (@NachoSoto) * `HTTPResponseTests`: fixed disabled test (#2643) via NachoSoto (@NachoSoto) * Add `InternalDangerousSettings.forceSignatureFailures` (#2635) via NachoSoto (@NachoSoto) * `IntegrationTests`: explicit `StoreKit 1` mode (#2636) via NachoSoto (@NachoSoto) * `Signing`: removed API for loading key from a file (#2638) via NachoSoto (@NachoSoto)
- `ETagManager` no longer knows anything about signatures - `HTTPClient` loads cached response from `ETagManager` first before verifying signature with the cached body - Created new `VerifiedHTTPResponse`, which has the `VerificationResult`, extracted from `HTTPResponse` - Removed `VerificationResult.from(cache:response:)` - Updated `MockETagManager` to reflect behavior changed in #2666 - Removed `ETagManager` tests about verification since they're no longer relevant - Removed several `HTTPClient` tests that were checking a behavior that was impossible (for example, no verification result despite it being enabled), or that checked behavior based on the cached `VerificationResult`
- `ETagManager` no longer knows anything about signatures - `HTTPClient` loads cached response from `ETagManager` first before verifying signature with the cached body - Created new `VerifiedHTTPResponse`, which has the `VerificationResult`, extracted from `HTTPResponse` - Removed `VerificationResult.from(cache:response:)` - Updated `MockETagManager` to reflect behavior changed in #2666 - Removed `ETagManager` tests about verification since they're no longer relevant - Removed several `HTTPClient` tests that were checking a behavior that was impossible (for example, no verification result despite it being enabled), or that checked behavior based on the cached `VerificationResult`
- `ETagManager` no longer knows anything about signatures - `HTTPClient` loads cached response from `ETagManager` first before verifying signature with the cached body - Created new `VerifiedHTTPResponse`, which has the `VerificationResult`, extracted from `HTTPResponse` - Removed `VerificationResult.from(cache:response:)` - Updated `MockETagManager` to reflect behavior changed in #2666 - Removed `ETagManager` tests about verification since they're no longer relevant - Removed several `HTTPClient` tests that were checking a behavior that was impossible (for example, no verification result despite it being enabled), or that checked behavior based on the cached `VerificationResult`
When working on #2663, the new
isLoadShedderwas not getting the right value for 304 responses because we were returning[:], since we don't store headers inETagManager.