Bug 1428320 - Ignore about: pages for indexedDB storage type telemetry. r=janv draft
authorJohann Hofmann <jhofmann@mozilla.com>
Fri, 05 Jan 2018 12:52:07 +0100
changeset 716442 7bfe9fdefb413d84309943697f2159e107f5d05e
parent 716325 81362f7306fe413b19fdba27cd0e9a5525d902e1
child 716443 918591e48d2998af24af7e61ea9206e10bfc70c8
push id94445
push userjhofmann@mozilla.com
push dateFri, 05 Jan 2018 20:24:58 +0000
reviewersjanv
bugs1428320
milestone59.0a1
Bug 1428320 - Ignore about: pages for indexedDB storage type telemetry. r=janv MozReview-Commit-ID: 1Cx5hBsqyX1
dom/indexedDB/IDBFactory.cpp
--- a/dom/indexedDB/IDBFactory.cpp
+++ b/dom/indexedDB/IDBFactory.cpp
@@ -448,33 +448,53 @@ already_AddRefed<IDBOpenDBRequest>
 IDBFactory::Open(JSContext* aCx,
                  const nsAString& aName,
                  const IDBOpenDBOptions& aOptions,
                  CallerType aCallerType,
                  ErrorResult& aRv)
 {
   if (!IsChrome() &&
       aOptions.mStorage.WasPassed()) {
-    switch (aOptions.mStorage.Value()) {
-      case StorageType::Persistent: {
-        Telemetry::ScalarAdd(Telemetry::ScalarID::IDB_TYPE_PERSISTENT_COUNT, 1);
-        break;
+
+    bool ignore = false;
+    // Ignore internal usage on about: pages.
+    if (NS_IsMainThread()) {
+      nsCOMPtr<nsIPrincipal> principal = PrincipalInfoToPrincipal(*mPrincipalInfo);
+      if (principal) {
+        nsCOMPtr<nsIURI> uri;
+        nsresult rv = principal->GetURI(getter_AddRefs(uri));
+        if (NS_SUCCEEDED(rv) && uri) {
+          bool isAbout;
+          rv = uri->SchemeIs("about", &isAbout);
+          if (NS_SUCCEEDED(rv) && isAbout) {
+            ignore = true;
+          }
+        }
       }
+    }
 
-      case StorageType::Temporary: {
-        Telemetry::ScalarAdd(Telemetry::ScalarID::IDB_TYPE_TEMPORARY_COUNT, 1);
-        break;
-      }
+    if (!ignore) {
+      switch (aOptions.mStorage.Value()) {
+        case StorageType::Persistent: {
+          Telemetry::ScalarAdd(Telemetry::ScalarID::IDB_TYPE_PERSISTENT_COUNT, 1);
+          break;
+        }
 
-      case StorageType::Default:
-      case StorageType::EndGuard_:
-        break;
+        case StorageType::Temporary: {
+          Telemetry::ScalarAdd(Telemetry::ScalarID::IDB_TYPE_TEMPORARY_COUNT, 1);
+          break;
+        }
 
-      default:
-        MOZ_CRASH("Invalid storage type!");
+        case StorageType::Default:
+        case StorageType::EndGuard_:
+          break;
+
+        default:
+          MOZ_CRASH("Invalid storage type!");
+      }
     }
   }
 
   return OpenInternal(aCx,
                       /* aPrincipal */ nullptr,
                       aName,
                       aOptions.mVersion,
                       aOptions.mStorage,