Skip to content

Commit 89d1e07

Browse files
committed
Bug 1768679 - Add 'Alt Data size' column to about:cache r=necko-reviewers,dragana
In CacheFileIOManager::GetEntryInfo(), there is only a problem if the Alt Data element is present but we can't parse a reasonable value out of it (a value smaller than the metadata offset). Differential Revision: https://phabricator.services.mozilla.com/D146467
1 parent f9c4510 commit 89d1e07

9 files changed

+63
-23
lines changed

netwerk/base/Predictor.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1818,7 +1818,8 @@ Predictor::Resetter::OnCacheStorageInfo(uint32_t entryCount,
18181818

18191819
NS_IMETHODIMP
18201820
Predictor::Resetter::OnCacheEntryInfo(nsIURI* uri, const nsACString& idEnhance,
1821-
int64_t dataSize, uint32_t fetchCount,
1821+
int64_t dataSize, int64_t altDataSize,
1822+
uint32_t fetchCount,
18221823
uint32_t lastModifiedTime,
18231824
uint32_t expirationTime, bool aPinned,
18241825
nsILoadContextInfo* aInfo) {

netwerk/cache2/CacheFileIOManager.cpp

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
* License, v. 2.0. If a copy of the MPL was not distributed with this
33
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
44

5+
#include <limits>
56
#include "CacheLog.h"
67
#include "CacheFileIOManager.h"
78

@@ -10,6 +11,7 @@
1011
#include "CacheStorageService.h"
1112
#include "CacheIndex.h"
1213
#include "CacheFileUtils.h"
14+
#include "nsError.h"
1315
#include "nsThreadUtils.h"
1416
#include "CacheFile.h"
1517
#include "CacheObserver.h"
@@ -2451,13 +2453,30 @@ nsresult CacheFileIOManager::GetEntryInfo(
24512453

24522454
// Pick all data to pass to the callback.
24532455
int64_t dataSize = metadata->Offset();
2456+
int64_t altDataSize = 0;
24542457
uint32_t fetchCount = metadata->GetFetchCount();
24552458
uint32_t expirationTime = metadata->GetExpirationTime();
24562459
uint32_t lastModified = metadata->GetLastModified();
24572460

2461+
const char* altDataElement =
2462+
metadata->GetElement(CacheFileUtils::kAltDataKey);
2463+
if (altDataElement) {
2464+
int64_t altDataOffset = std::numeric_limits<int64_t>::max();
2465+
if (NS_SUCCEEDED(CacheFileUtils::ParseAlternativeDataInfo(
2466+
altDataElement, &altDataOffset, nullptr)) &&
2467+
altDataOffset < dataSize) {
2468+
dataSize = altDataOffset;
2469+
altDataSize = metadata->Offset() - altDataOffset;
2470+
} else {
2471+
LOG(("CacheFileIOManager::GetEntryInfo() invalid alternative data info"));
2472+
return NS_OK;
2473+
}
2474+
}
2475+
24582476
// Call directly on the callback.
2459-
aCallback->OnEntryInfo(uriSpec, enhanceId, dataSize, fetchCount, lastModified,
2460-
expirationTime, metadata->Pinned(), info);
2477+
aCallback->OnEntryInfo(uriSpec, enhanceId, dataSize, altDataSize, fetchCount,
2478+
lastModified, expirationTime, metadata->Pinned(),
2479+
info);
24612480

24622481
return NS_OK;
24632482
}

netwerk/cache2/CacheStorageService.cpp

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -310,9 +310,9 @@ class WalkMemoryCacheRunnable : public WalkCacheRunnable {
310310

311311
virtual void OnEntryInfo(const nsACString& aURISpec,
312312
const nsACString& aIdEnhance, int64_t aDataSize,
313-
uint32_t aFetchCount, uint32_t aLastModifiedTime,
314-
uint32_t aExpirationTime, bool aPinned,
315-
nsILoadContextInfo* aInfo) override {
313+
int64_t aAltDataSize, uint32_t aFetchCount,
314+
uint32_t aLastModifiedTime, uint32_t aExpirationTime,
315+
bool aPinned, nsILoadContextInfo* aInfo) override {
316316
nsresult rv;
317317

318318
nsCOMPtr<nsIURI> uri;
@@ -321,9 +321,9 @@ class WalkMemoryCacheRunnable : public WalkCacheRunnable {
321321
return;
322322
}
323323

324-
rv = mCallback->OnCacheEntryInfo(uri, aIdEnhance, aDataSize, aFetchCount,
325-
aLastModifiedTime, aExpirationTime,
326-
aPinned, aInfo);
324+
rv = mCallback->OnCacheEntryInfo(uri, aIdEnhance, aDataSize, aAltDataSize,
325+
aFetchCount, aLastModifiedTime,
326+
aExpirationTime, aPinned, aInfo);
327327
if (NS_FAILED(rv)) {
328328
LOG((" callback failed, canceling the walk"));
329329
mCancel = true;
@@ -382,8 +382,8 @@ class WalkDiskCacheRunnable : public WalkCacheRunnable {
382382
}
383383

384384
rv = mWalker->mCallback->OnCacheEntryInfo(
385-
uri, mIdEnhance, mDataSize, mFetchCount, mLastModifiedTime,
386-
mExpirationTime, mPinned, mInfo);
385+
uri, mIdEnhance, mDataSize, mAltDataSize, mFetchCount,
386+
mLastModifiedTime, mExpirationTime, mPinned, mInfo);
387387
if (NS_FAILED(rv)) {
388388
mWalker->mCancel = true;
389389
}
@@ -396,6 +396,7 @@ class WalkDiskCacheRunnable : public WalkCacheRunnable {
396396
nsCString mURISpec;
397397
nsCString mIdEnhance;
398398
int64_t mDataSize{0};
399+
int64_t mAltDataSize{0};
399400
uint32_t mFetchCount{0};
400401
uint32_t mLastModifiedTime{0};
401402
uint32_t mExpirationTime{0};
@@ -480,16 +481,17 @@ class WalkDiskCacheRunnable : public WalkCacheRunnable {
480481

481482
virtual void OnEntryInfo(const nsACString& aURISpec,
482483
const nsACString& aIdEnhance, int64_t aDataSize,
483-
uint32_t aFetchCount, uint32_t aLastModifiedTime,
484-
uint32_t aExpirationTime, bool aPinned,
485-
nsILoadContextInfo* aInfo) override {
484+
int64_t aAltDataSize, uint32_t aFetchCount,
485+
uint32_t aLastModifiedTime, uint32_t aExpirationTime,
486+
bool aPinned, nsILoadContextInfo* aInfo) override {
486487
// Called directly from CacheFileIOManager::GetEntryInfo.
487488

488489
// Invoke onCacheEntryInfo on the main thread for this entry.
489490
RefPtr<OnCacheEntryInfoRunnable> info = new OnCacheEntryInfoRunnable(this);
490491
info->mURISpec = aURISpec;
491492
info->mIdEnhance = aIdEnhance;
492493
info->mDataSize = aDataSize;
494+
info->mAltDataSize = aAltDataSize;
493495
info->mFetchCount = aFetchCount;
494496
info->mLastModifiedTime = aLastModifiedTime;
495497
info->mExpirationTime = aExpirationTime;
@@ -2084,6 +2086,10 @@ void CacheStorageService::GetCacheEntryInfo(CacheEntry* aEntry,
20842086
if (NS_FAILED(aEntry->GetStorageDataSize(&dataSize))) {
20852087
dataSize = 0;
20862088
}
2089+
int64_t altDataSize;
2090+
if (NS_FAILED(aEntry->GetAltDataSize(&altDataSize))) {
2091+
altDataSize = 0;
2092+
}
20872093
uint32_t fetchCount;
20882094
if (NS_FAILED(aEntry->GetFetchCount(&fetchCount))) {
20892095
fetchCount = 0;
@@ -2097,8 +2103,9 @@ void CacheStorageService::GetCacheEntryInfo(CacheEntry* aEntry,
20972103
expirationTime = 0;
20982104
}
20992105

2100-
aCallback->OnEntryInfo(uriSpec, enhanceId, dataSize, fetchCount, lastModified,
2101-
expirationTime, aEntry->IsPinned(), info);
2106+
aCallback->OnEntryInfo(uriSpec, enhanceId, dataSize, altDataSize, fetchCount,
2107+
lastModified, expirationTime, aEntry->IsPinned(),
2108+
info);
21022109
}
21032110

21042111
// static

netwerk/cache2/CacheStorageService.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,8 @@ class CacheStorageService final : public nsICacheStorageService,
118118
public:
119119
virtual void OnEntryInfo(const nsACString& aURISpec,
120120
const nsACString& aIdEnhance, int64_t aDataSize,
121-
uint32_t aFetchCount, uint32_t aLastModifiedTime,
121+
int64_t aAltDataSize, uint32_t aFetchCount,
122+
uint32_t aLastModifiedTime,
122123
uint32_t aExpirationTime, bool aPinned,
123124
nsILoadContextInfo* aInfo) = 0;
124125
};

netwerk/cache2/nsICacheStorageVisitor.idl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ interface nsICacheStorageVisitor : nsISupports
2323
void onCacheEntryInfo(in nsIURI aURI,
2424
in ACString aIdEnhance,
2525
in int64_t aDataSize,
26+
in int64_t aAltDataSize,
2627
in uint32_t aFetchCount,
2728
in uint32_t aLastModifiedTime,
2829
in uint32_t aExpirationTime,

netwerk/protocol/about/nsAboutCache.cpp

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -326,12 +326,10 @@ nsAboutCache::Channel::OnCacheStorageInfo(uint32_t aEntryCount,
326326
}
327327

328328
NS_IMETHODIMP
329-
nsAboutCache::Channel::OnCacheEntryInfo(nsIURI* aURI,
330-
const nsACString& aIdEnhance,
331-
int64_t aDataSize, uint32_t aFetchCount,
332-
uint32_t aLastModified,
333-
uint32_t aExpirationTime, bool aPinned,
334-
nsILoadContextInfo* aInfo) {
329+
nsAboutCache::Channel::OnCacheEntryInfo(
330+
nsIURI* aURI, const nsACString& aIdEnhance, int64_t aDataSize,
331+
int64_t aAltDataSize, uint32_t aFetchCount, uint32_t aLastModified,
332+
uint32_t aExpirationTime, bool aPinned, nsILoadContextInfo* aInfo) {
335333
// We need mStream for this
336334
if (!mStream || mCancel) {
337335
// Returning a failure from this callback stops the iteration
@@ -345,6 +343,7 @@ nsAboutCache::Channel::OnCacheEntryInfo(nsIURI* aURI,
345343
" <colgroup>\n"
346344
" <col id=\"col-key\">\n"
347345
" <col id=\"col-dataSize\">\n"
346+
" <col id=\"col-altDataSize\">\n"
348347
" <col id=\"col-fetchCount\">\n"
349348
" <col id=\"col-lastModified\">\n"
350349
" <col id=\"col-expires\">\n"
@@ -354,6 +353,7 @@ nsAboutCache::Channel::OnCacheEntryInfo(nsIURI* aURI,
354353
" <tr>\n"
355354
" <th>Key</th>\n"
356355
" <th>Data size</th>\n"
356+
" <th>Alternative Data size</th>\n"
357357
" <th>Fetch count</th>\n"
358358
" <th>Last Modifed</th>\n"
359359
" <th>Expires</th>\n"
@@ -413,6 +413,11 @@ nsAboutCache::Channel::OnCacheEntryInfo(nsIURI* aURI,
413413
mBuffer.AppendInt(aDataSize);
414414
mBuffer.AppendLiteral(" bytes</td>\n");
415415

416+
// Length of alternative content
417+
mBuffer.AppendLiteral(" <td>");
418+
mBuffer.AppendInt(aAltDataSize);
419+
mBuffer.AppendLiteral(" bytes</td>\n");
420+
416421
// Number of accesses
417422
mBuffer.AppendLiteral(" <td>");
418423
mBuffer.AppendInt(aFetchCount);

netwerk/test/unit/head_cache2.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,7 @@ VisitCallback.prototype = {
306306
aURI,
307307
aIdEnhance,
308308
aDataSize,
309+
aAltDataSize,
309310
aFetchCount,
310311
aLastModifiedTime,
311312
aExpirationTime,

netwerk/test/unit/test_cache2-02b-open-non-existing-and-doom.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ add_task(async function test() {
6969
aURI,
7070
aIdEnhance,
7171
aDataSize,
72+
aAltDataSize,
7273
aFetchCount,
7374
aLastModifiedTime,
7475
aExpirationTime,
@@ -104,6 +105,7 @@ add_task(async function test() {
104105
aURI,
105106
aIdEnhance,
106107
aDataSize,
108+
aAltDataSize,
107109
aFetchCount,
108110
aLastModifiedTime,
109111
aExpirationTime,
@@ -156,6 +158,7 @@ add_task(async function test() {
156158
aURI,
157159
aIdEnhance,
158160
aDataSize,
161+
aAltDataSize,
159162
aFetchCount,
160163
aLastModifiedTime,
161164
aExpirationTime,

netwerk/test/unit/test_predictor.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -688,6 +688,7 @@ function test_visitor_doom() {
688688
aURI,
689689
aIdEnhance,
690690
aDataSize,
691+
aAltDataSize,
691692
aFetchCount,
692693
aLastModifiedTime,
693694
aExpirationTime,
@@ -733,6 +734,7 @@ function test_visitor_doom() {
733734
aURI,
734735
aIdEnhance,
735736
aDataSize,
737+
aAltDataSize,
736738
aFetchCount,
737739
aLastModifiedTime,
738740
aExpirationTime,

0 commit comments

Comments
 (0)