# Global Metrics

path: .metrics.nexits.sum
old: 0.0
new: 152.0
path: .metrics.nexits.average
old: null
new: 1.7272727272727273
path: .metrics.cyclomatic.average
old: 1.0
new: 3.659340659340659
path: .metrics.cyclomatic.sum
old: 4.0
new: 333.0
path: .metrics.nom.functions
old: 0.0
new: 88.0
path: .metrics.nom.total
old: 0.0
new: 88.0
path: .metrics.mi.mi_sei
old: 100.84937904401647
new: -147.07776860454493
path: .metrics.mi.mi_visual_studio
old: 54.787543120392264
new: 0.0
path: .metrics.mi.mi_original
old: 93.68669873587078
new: -89.34177443486472
path: .metrics.nargs.sum
old: 0.0
new: 133.0
path: .metrics.nargs.average
old: null
new: 1.5113636363636365
path: .metrics.loc.sloc
old: 26.0
new: 2332.0
path: .metrics.loc.lloc
old: 1.0
new: 868.0
path: .metrics.loc.blank
old: 5.0
new: 469.0
path: .metrics.loc.ploc
old: 11.0
new: 1628.0
path: .metrics.loc.cloc
old: 10.0
new: 235.0
path: .metrics.cognitive.average
old: null
new: 3.7045454545454546
path: .metrics.cognitive.sum
old: 0.0
new: 326.0
path: .metrics.halstead.time
old: 18.23215611283975
new: 419525.0465188436
path: .metrics.halstead.volume
old: 93.76537429460444
new: 71588.3181808774
path: .metrics.halstead.length
old: 24.0
new: 7663.0
path: .metrics.halstead.vocabulary
old: 15.0
new: 649.0
path: .metrics.halstead.effort
old: 328.1788100311155
new: 7551450.837339185
path: .metrics.halstead.estimated_program_length
old: 44.82892142331043
new: 5846.308860300451
path: .metrics.halstead.purity_ratio
old: 1.867871725971268
new: 0.7629269033407869
path: .metrics.halstead.difficulty
old: 3.5
new: 105.48440065681444
path: .metrics.halstead.N1
old: 10.0
new: 4451.0
path: .metrics.halstead.n1
old: 5.0
new: 40.0
path: .metrics.halstead.n2
old: 10.0
new: 609.0
path: .metrics.halstead.N2
old: 14.0
new: 3212.0
path: .metrics.halstead.bugs
old: 0.0158593640802942
new: 12.830168050436829
path: .metrics.halstead.level
old: 0.2857142857142857
new: 0.009480074719800748

# Spaces Data

## Minimal test - lines (143, 173)

path: .spaces[2].metrics.halstead.bugs
old: 0.01034813093369748
new: 0.1480211503525243
path: .spaces[2].metrics.halstead.time
old: 9.609532273992492
new: 519.870338850015
path: .spaces[2].metrics.halstead.effort
old: 172.97158093186488
new: 9357.66609930027
path: .spaces[2].metrics.halstead.N2
old: 8.0
new: 66.0
path: .spaces[2].metrics.halstead.N1
old: 7.0
new: 77.0
path: .spaces[2].metrics.halstead.n1
old: 5.0
new: 13.0
path: .spaces[2].metrics.halstead.n2
old: 6.0
new: 37.0
path: .spaces[2].metrics.halstead.vocabulary
old: 11.0
new: 50.0
path: .spaces[2].metrics.halstead.volume
old: 51.89147427955946
new: 807.0714351377856
path: .spaces[2].metrics.halstead.estimated_program_length
old: 27.11941547876375
new: 240.85549086410535
path: .spaces[2].metrics.halstead.difficulty
old: 3.3333333333333335
new: 11.594594594594597
path: .spaces[2].metrics.halstead.length
old: 15.0
new: 143.0
path: .spaces[2].metrics.halstead.purity_ratio
old: 1.8079610319175832
new: 1.6843041319168206
path: .spaces[2].metrics.halstead.level
old: 0.3
new: 0.08624708624708624
path: .spaces[2].metrics.nargs.average
old: null
new: 0.0
path: .spaces[2].metrics.cyclomatic.average
old: 1.0
new: 2.0
path: .spaces[2].metrics.cyclomatic.sum
old: 1.0
new: 2.0
path: .spaces[2].metrics.nom.total
old: 0.0
new: 1.0
path: .spaces[2].metrics.nom.functions
old: 0.0
new: 1.0
path: .spaces[2].metrics.nexits.average
old: null
new: 1.0
path: .spaces[2].metrics.nexits.sum
old: 0.0
new: 1.0
path: .spaces[2].metrics.cognitive.average
old: null
new: 1.0
path: .spaces[2].metrics.cognitive.sum
old: 0.0
new: 1.0
path: .spaces[2].metrics.mi.mi_visual_studio
old: 74.72305726660727
new: 46.84424791341786
path: .spaces[2].metrics.mi.mi_sei
old: 108.74338677859146
new: 66.47825859218572
path: .spaces[2].metrics.mi.mi_original
old: 127.77642792589845
new: 80.10366393194454
path: .spaces[2].metrics.loc.blank
old: 0.0
new: 1.0
path: .spaces[2].metrics.loc.sloc
old: 4.0
new: 31.0
path: .spaces[2].metrics.loc.cloc
old: 0.0
new: 4.0
path: .spaces[2].metrics.loc.lloc
old: 0.0
new: 12.0
path: .spaces[2].metrics.loc.ploc
old: 4.0
new: 26.0

### Code

    nsresult nsManifestCheck::Begin() {
      nsresult rv;
      mManifestHash = do_CreateInstance("@mozilla.org/security/hash;1", &rv);
      NS_ENSURE_SUCCESS(rv, rv);

      rv = mManifestHash->Init(nsICryptoHash::MD5);
      NS_ENSURE_SUCCESS(rv, rv);
      rv = NS_NewChannel(getter_AddRefs(mChannel), mURI, mLoadingPrincipal,
                         nsILoadInfo::SEC_REQUIRE_SAME_ORIGIN_DATA_IS_BLOCKED,
                         nsIContentPolicy::TYPE_OTHER, mUpdate->CookieJarSettings(),
                         nullptr,  // PerformanceStorage
                         nullptr,  // loadGroup
                         nullptr,  // aCallbacks
                         nsIRequest::LOAD_BYPASS_CACHE);

      NS_ENSURE_SUCCESS(rv, rv);

      // configure HTTP specific stuff
      nsCOMPtr httpChannel = do_QueryInterface(mChannel);
      if (httpChannel) {
        nsCOMPtr referrerInfo =
            new mozilla::dom::ReferrerInfo(mReferrerURI);
        rv = httpChannel->SetReferrerInfoWithoutClone(referrerInfo);
        MOZ_ASSERT(NS_SUCCEEDED(rv));
        rv =
            httpChannel->SetRequestHeader("X-Moz"_ns, "offline-resource"_ns, false);
        MOZ_ASSERT(NS_SUCCEEDED(rv));
      }

      return mChannel->AsyncOpen(this);
    }

## Minimal test - lines (99, 131)

path: .spaces[1].metrics.mi.mi_original
old: null
new: 79.88470118456793
path: .spaces[1].metrics.mi.mi_sei
old: null
new: 39.8538698280735
path: .spaces[1].metrics.mi.mi_visual_studio
old: null
new: 46.71619952313914
path: .spaces[1].metrics.cognitive.average
old: null
new: 0.0
path: .spaces[1].metrics.cyclomatic.sum
old: 1.0
new: 3.0
path: .spaces[1].metrics.nargs.average
old: null
new: 2.0
path: .spaces[1].metrics.nargs.sum
old: 0.0
new: 4.0
path: .spaces[1].metrics.nom.total
old: 0.0
new: 2.0
path: .spaces[1].metrics.nom.functions
old: 0.0
new: 2.0
path: .spaces[1].metrics.nexits.average
old: null
new: 0.0
path: .spaces[1].metrics.halstead.vocabulary
old: 1.0
new: 46.0
path: .spaces[1].metrics.halstead.effort
old: 0.0
new: 5155.324492319879
path: .spaces[1].metrics.halstead.n2
old: 1.0
new: 36.0
path: .spaces[1].metrics.halstead.n1
old: 0.0
new: 10.0
path: .spaces[1].metrics.halstead.level
old: null
new: 0.1285714285714286
path: .spaces[1].metrics.halstead.N1
old: 0.0
new: 64.0
path: .spaces[1].metrics.halstead.N2
old: 1.0
new: 56.0
path: .spaces[1].metrics.halstead.difficulty
old: 0.0
new: 7.777777777777778
path: .spaces[1].metrics.halstead.purity_ratio
old: null
new: 1.827804841673307
path: .spaces[1].metrics.halstead.bugs
old: 0.0
new: 0.09947548902707166
path: .spaces[1].metrics.halstead.estimated_program_length
old: null
new: 219.33658100079683
path: .spaces[1].metrics.halstead.time
old: 0.0
new: 286.4069162399933
path: .spaces[1].metrics.halstead.length
old: 1.0
new: 120.0
path: .spaces[1].metrics.halstead.volume
old: 0.0
new: 662.8274347268416
path: .spaces[1].metrics.loc.sloc
old: 1.0
new: 33.0
path: .spaces[1].metrics.loc.blank
old: 0.0
new: 5.0
path: .spaces[1].metrics.loc.ploc
old: 1.0
new: 28.0

### Code

    class nsManifestCheck final : public nsIStreamListener,
                                  public nsIChannelEventSink,
                                  public nsIInterfaceRequestor {
     public:
      nsManifestCheck(nsOfflineCacheUpdate* aUpdate, nsIURI* aURI,
                      nsIURI* aReferrerURI, nsIPrincipal* aLoadingPrincipal)
          : mUpdate(aUpdate),
            mURI(aURI),
            mReferrerURI(aReferrerURI),
            mLoadingPrincipal(aLoadingPrincipal) {}

      NS_DECL_ISUPPORTS
      NS_DECL_NSIREQUESTOBSERVER
      NS_DECL_NSISTREAMLISTENER
      NS_DECL_NSICHANNELEVENTSINK
      NS_DECL_NSIINTERFACEREQUESTOR

      nsresult Begin();

     private:
      ~nsManifestCheck() {}

      static nsresult ReadManifest(nsIInputStream* aInputStream, void* aClosure,
                                   const char* aFromSegment, uint32_t aOffset,
                                   uint32_t aCount, uint32_t* aBytesConsumed);

      RefPtr mUpdate;
      nsCOMPtr mURI;
      nsCOMPtr mReferrerURI;
      nsCOMPtr mLoadingPrincipal;
      nsCOMPtr mManifestHash;
      nsCOMPtr mChannel;
    };

## Minimal test - lines (69, 93)

path: .spaces[0].metrics.nom.total
old: 0.0
new: 2.0
path: .spaces[0].metrics.nom.functions
old: 0.0
new: 2.0
path: .spaces[0].metrics.cyclomatic.sum
old: 1.0
new: 6.0
path: .spaces[0].metrics.cyclomatic.average
old: 1.0
new: 2.0
path: .spaces[0].metrics.nexits.sum
old: 0.0
new: 1.0
path: .spaces[0].metrics.nexits.average
old: null
new: 0.5
path: .spaces[0].metrics.loc.sloc
old: 1.0
new: 25.0
path: .spaces[0].metrics.loc.blank
old: 0.0
new: 3.0
path: .spaces[0].metrics.loc.ploc
old: 1.0
new: 20.0
path: .spaces[0].metrics.loc.cloc
old: 0.0
new: 2.0
path: .spaces[0].metrics.loc.lloc
old: 0.0
new: 6.0
path: .spaces[0].metrics.mi.mi_original
old: null
new: 84.87050949439582
path: .spaces[0].metrics.mi.mi_sei
old: null
new: 68.56684748537869
path: .spaces[0].metrics.mi.mi_visual_studio
old: null
new: 49.63187689730749
path: .spaces[0].metrics.cognitive.sum
old: 0.0
new: 4.0
path: .spaces[0].metrics.cognitive.average
old: null
new: 2.0
path: .spaces[0].metrics.nargs.sum
old: 0.0
new: 3.0
path: .spaces[0].metrics.nargs.average
old: null
new: 1.5
path: .spaces[0].metrics.halstead.length
old: 1.0
new: 98.0
path: .spaces[0].metrics.halstead.n1
old: 0.0
new: 15.0
path: .spaces[0].metrics.halstead.time
old: 0.0
new: 358.8221099849077
path: .spaces[0].metrics.halstead.N2
old: 1.0
new: 44.0
path: .spaces[0].metrics.halstead.difficulty
old: 0.0
new: 12.22222222222222
path: .spaces[0].metrics.halstead.estimated_program_length
old: null
new: 186.98532149254143
path: .spaces[0].metrics.halstead.bugs
old: 0.0
new: 0.11560586807076093
path: .spaces[0].metrics.halstead.volume
old: 0.0
new: 528.4471074323186
path: .spaces[0].metrics.halstead.n2
old: 1.0
new: 27.0
path: .spaces[0].metrics.halstead.effort
old: 0.0
new: 6458.797979728338
path: .spaces[0].metrics.halstead.level
old: null
new: 0.08181818181818182
path: .spaces[0].metrics.halstead.purity_ratio
old: null
new: 1.9080134846177697
path: .spaces[0].metrics.halstead.vocabulary
old: 1.0
new: 42.0
path: .spaces[0].metrics.halstead.N1
old: 0.0
new: 54.0

### Code

    namespace {

    nsresult DropReferenceFromURL(nsCOMPtr& aURI) {
      // XXXdholbert If this SetRef fails, callers of this method probably
      // want to call aURI->CloneIgnoringRef() and use the result of that.
      nsCOMPtr uri(aURI);
      return NS_GetURIWithoutRef(uri, getter_AddRefs(aURI));
    }

    void LogToConsole(const char* message,
                      nsOfflineCacheUpdateItem* item = nullptr) {
      nsCOMPtr consoleService =
          do_GetService(NS_CONSOLESERVICE_CONTRACTID);
      if (consoleService) {
        nsAutoString messageUTF16 = NS_ConvertUTF8toUTF16(message);
        if (item && item->mURI) {
          messageUTF16.AppendLiteral(", URL=");
          messageUTF16.Append(
              NS_ConvertUTF8toUTF16(item->mURI->GetSpecOrDefault()));
        }
        consoleService->LogStringMessage(messageUTF16.get());
      }
    }

    }  // namespace